2 * Copyright 2004-2009 Analog Devices Inc.
3 * 2008-2009 Bluetechnix
4 * 2005 National ICT Australia (NICTA)
5 * Aidan Williams <aidan@nicta.com.au>
7 * Licensed under the GPL-2 or later.
10 #include <linux/device.h>
11 #include <linux/platform_device.h>
12 #include <linux/mtd/mtd.h>
13 #include <linux/mtd/partitions.h>
14 #include <linux/mtd/physmap.h>
15 #include <linux/spi/spi.h>
16 #include <linux/spi/flash.h>
17 #include <linux/etherdevice.h>
18 #include <linux/i2c.h>
19 #include <linux/irq.h>
20 #include <linux/interrupt.h>
21 #include <linux/usb/musb.h>
23 #include <asm/bfin5xx_spi.h>
24 #include <asm/reboot.h>
26 #include <asm/portmux.h>
28 #include <linux/spi/ad7877.h>
31 * Name the Board for the /proc/cpuinfo
33 const char bfin_board_name[] = "Bluetechnix CM-BF527";
36 * Driver needs to know address, irq and flag pin.
39 #if defined(CONFIG_USB_ISP1760_HCD) || defined(CONFIG_USB_ISP1760_HCD_MODULE)
40 #include <linux/usb/isp1760.h>
41 static struct resource bfin_isp1760_resources[] = {
44 .end = 0x203C0000 + 0x000fffff,
45 .flags = IORESOURCE_MEM,
50 .flags = IORESOURCE_IRQ,
54 static struct isp1760_platform_data isp1760_priv = {
59 .dack_polarity_high = 0,
60 .dreq_polarity_high = 0,
63 static struct platform_device bfin_isp1760_device = {
67 .platform_data = &isp1760_priv,
69 .num_resources = ARRAY_SIZE(bfin_isp1760_resources),
70 .resource = bfin_isp1760_resources,
74 #if defined(CONFIG_USB_MUSB_HDRC) || defined(CONFIG_USB_MUSB_HDRC_MODULE)
75 static struct resource musb_resources[] = {
79 .flags = IORESOURCE_MEM,
81 [1] = { /* general IRQ */
82 .start = IRQ_USB_INT0,
84 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
89 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
93 static struct musb_hdrc_config musb_config = {
100 .gpio_vrsel = GPIO_PF11,
101 /* Some custom boards need to be active low, just set it to "0"
104 .gpio_vrsel_active = 1,
107 static struct musb_hdrc_platform_data musb_plat = {
108 #if defined(CONFIG_USB_MUSB_OTG)
110 #elif defined(CONFIG_USB_MUSB_HDRC_HCD)
112 #elif defined(CONFIG_USB_GADGET_MUSB_HDRC)
113 .mode = MUSB_PERIPHERAL,
115 .config = &musb_config,
118 static u64 musb_dmamask = ~(u32)0;
120 static struct platform_device musb_device = {
124 .dma_mask = &musb_dmamask,
125 .coherent_dma_mask = 0xffffffff,
126 .platform_data = &musb_plat,
128 .num_resources = ARRAY_SIZE(musb_resources),
129 .resource = musb_resources,
133 #if defined(CONFIG_MTD_NAND_BF5XX) || defined(CONFIG_MTD_NAND_BF5XX_MODULE)
134 static struct mtd_partition partition_info[] = {
136 .name = "linux kernel(nand)",
138 .size = 4 * 1024 * 1024,
141 .name = "file system(nand)",
142 .offset = MTDPART_OFS_APPEND,
143 .size = MTDPART_SIZ_FULL,
147 static struct bf5xx_nand_platform bf5xx_nand_platform = {
148 .data_width = NFC_NWIDTH_8,
149 .partitions = partition_info,
150 .nr_partitions = ARRAY_SIZE(partition_info),
155 static struct resource bf5xx_nand_resources[] = {
158 .end = NFC_DATA_RD + 2,
159 .flags = IORESOURCE_MEM,
164 .flags = IORESOURCE_IRQ,
168 static struct platform_device bf5xx_nand_device = {
169 .name = "bf5xx-nand",
171 .num_resources = ARRAY_SIZE(bf5xx_nand_resources),
172 .resource = bf5xx_nand_resources,
174 .platform_data = &bf5xx_nand_platform,
179 #if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE)
180 static struct resource bfin_pcmcia_cf_resources[] = {
182 .start = 0x20310000, /* IO PORT */
184 .flags = IORESOURCE_MEM,
186 .start = 0x20311000, /* Attribute Memory */
188 .flags = IORESOURCE_MEM,
192 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
194 .start = 6, /* Card Detect PF6 */
196 .flags = IORESOURCE_IRQ,
200 static struct platform_device bfin_pcmcia_cf_device = {
201 .name = "bfin_cf_pcmcia",
203 .num_resources = ARRAY_SIZE(bfin_pcmcia_cf_resources),
204 .resource = bfin_pcmcia_cf_resources,
208 #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE)
209 static struct platform_device rtc_device = {
215 #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
216 #include <linux/smc91x.h>
218 static struct smc91x_platdata smc91x_info = {
219 .flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
220 .leda = RPC_LED_100_10,
221 .ledb = RPC_LED_TX_RX,
224 static struct resource smc91x_resources[] = {
226 .name = "smc91x-regs",
228 .end = 0x20300300 + 16,
229 .flags = IORESOURCE_MEM,
234 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
237 static struct platform_device smc91x_device = {
240 .num_resources = ARRAY_SIZE(smc91x_resources),
241 .resource = smc91x_resources,
243 .platform_data = &smc91x_info,
248 #if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
249 static struct resource dm9000_resources[] = {
252 .end = 0x203FB800 + 1,
253 .flags = IORESOURCE_MEM,
257 .end = 0x203FB804 + 1,
258 .flags = IORESOURCE_MEM,
263 .flags = (IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE),
267 static struct platform_device dm9000_device = {
270 .num_resources = ARRAY_SIZE(dm9000_resources),
271 .resource = dm9000_resources,
275 #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
276 #include <linux/bfin_mac.h>
277 static const unsigned short bfin_mac_peripherals[] = P_RMII0;
279 static struct bfin_phydev_platform_data bfin_phydev_data[] = {
282 .irq = IRQ_MAC_PHYINT,
286 static struct bfin_mii_bus_platform_data bfin_mii_bus_data = {
288 .phydev_data = bfin_phydev_data,
289 .phy_mode = PHY_INTERFACE_MODE_RMII,
290 .mac_peripherals = bfin_mac_peripherals,
293 static struct platform_device bfin_mii_bus = {
294 .name = "bfin_mii_bus",
296 .platform_data = &bfin_mii_bus_data,
300 static struct platform_device bfin_mac_device = {
303 .platform_data = &bfin_mii_bus,
308 #if defined(CONFIG_USB_NET2272) || defined(CONFIG_USB_NET2272_MODULE)
309 static struct resource net2272_bfin_resources[] = {
312 .end = 0x20300000 + 0x100,
313 .flags = IORESOURCE_MEM,
317 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
321 static struct platform_device net2272_bfin_device = {
324 .num_resources = ARRAY_SIZE(net2272_bfin_resources),
325 .resource = net2272_bfin_resources,
329 #if defined(CONFIG_MTD_M25P80) \
330 || defined(CONFIG_MTD_M25P80_MODULE)
331 static struct mtd_partition bfin_spi_flash_partitions[] = {
333 .name = "bootloader(spi)",
336 .mask_flags = MTD_CAP_ROM
338 .name = "linux kernel(spi)",
339 .size = MTDPART_SIZ_FULL,
340 .offset = MTDPART_OFS_APPEND,
344 static struct flash_platform_data bfin_spi_flash_data = {
346 .parts = bfin_spi_flash_partitions,
347 .nr_parts = ARRAY_SIZE(bfin_spi_flash_partitions),
351 /* SPI flash chip (m25p64) */
352 static struct bfin5xx_spi_chip spi_flash_chip_info = {
353 .enable_dma = 0, /* use dma transfer with this chip*/
358 #if defined(CONFIG_BFIN_SPI_ADC) \
359 || defined(CONFIG_BFIN_SPI_ADC_MODULE)
361 static struct bfin5xx_spi_chip spi_adc_chip_info = {
362 .enable_dma = 1, /* use dma transfer with this chip*/
367 #if defined(CONFIG_SND_BF5XX_SOC_AD183X) \
368 || defined(CONFIG_SND_BF5XX_SOC_AD183X_MODULE)
369 static struct bfin5xx_spi_chip ad1836_spi_chip_info = {
375 #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
376 static struct bfin5xx_spi_chip mmc_spi_chip_info = {
382 #if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE)
383 static struct bfin5xx_spi_chip spi_ad7877_chip_info = {
388 static const struct ad7877_platform_data bfin_ad7877_ts_info = {
390 .vref_delay_usecs = 50, /* internal, no capacitor */
393 .pressure_max = 1000,
395 .stopacq_polarity = 1,
396 .first_conversion_delay = 3,
397 .acquisition_time = 1,
399 .pen_down_acc_interval = 1,
403 #if defined(CONFIG_SND_SOC_WM8731) || defined(CONFIG_SND_SOC_WM8731_MODULE) \
404 && defined(CONFIG_SND_SOC_WM8731_SPI)
405 static struct bfin5xx_spi_chip spi_wm8731_chip_info = {
411 #if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
412 static struct bfin5xx_spi_chip spidev_chip_info = {
418 static struct spi_board_info bfin_spi_board_info[] __initdata = {
419 #if defined(CONFIG_MTD_M25P80) \
420 || defined(CONFIG_MTD_M25P80_MODULE)
422 /* the modalias must be the same as spi device driver name */
423 .modalias = "m25p80", /* Name of spi_driver for this device */
424 .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */
425 .bus_num = 0, /* Framework bus number */
426 .chip_select = 1, /* Framework chip select. On STAMP537 it is SPISSEL1*/
427 .platform_data = &bfin_spi_flash_data,
428 .controller_data = &spi_flash_chip_info,
433 #if defined(CONFIG_BFIN_SPI_ADC) \
434 || defined(CONFIG_BFIN_SPI_ADC_MODULE)
436 .modalias = "bfin_spi_adc", /* Name of spi_driver for this device */
437 .max_speed_hz = 6250000, /* max spi clock (SCK) speed in HZ */
438 .bus_num = 0, /* Framework bus number */
439 .chip_select = 1, /* Framework chip select. */
440 .platform_data = NULL, /* No spi_driver specific config */
441 .controller_data = &spi_adc_chip_info,
445 #if defined(CONFIG_SND_BF5XX_SOC_AD183X) \
446 || defined(CONFIG_SND_BF5XX_SOC_AD183X_MODULE)
448 .modalias = "ad183x",
449 .max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */
452 .controller_data = &ad1836_spi_chip_info,
455 #if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
457 .modalias = "mmc_spi",
458 .max_speed_hz = 20000000, /* max spi clock (SCK) speed in HZ */
461 .controller_data = &mmc_spi_chip_info,
465 #if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE)
467 .modalias = "ad7877",
468 .platform_data = &bfin_ad7877_ts_info,
470 .max_speed_hz = 12500000, /* max spi clock (SCK) speed in HZ */
473 .controller_data = &spi_ad7877_chip_info,
476 #if defined(CONFIG_SND_SOC_WM8731) || defined(CONFIG_SND_SOC_WM8731_MODULE) \
477 && defined(CONFIG_SND_SOC_WM8731_SPI)
479 .modalias = "wm8731",
480 .max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */
483 .controller_data = &spi_wm8731_chip_info,
487 #if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
489 .modalias = "spidev",
490 .max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */
493 .controller_data = &spidev_chip_info,
498 #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
499 /* SPI controller data */
500 static struct bfin5xx_spi_master bfin_spi0_info = {
502 .enable_dma = 1, /* master has the ability to do dma transfer */
503 .pin_req = {P_SPI0_SCK, P_SPI0_MISO, P_SPI0_MOSI, 0},
507 static struct resource bfin_spi0_resource[] = {
509 .start = SPI0_REGBASE,
510 .end = SPI0_REGBASE + 0xFF,
511 .flags = IORESOURCE_MEM,
516 .flags = IORESOURCE_DMA,
521 .flags = IORESOURCE_IRQ,
525 static struct platform_device bfin_spi0_device = {
527 .id = 0, /* Bus number */
528 .num_resources = ARRAY_SIZE(bfin_spi0_resource),
529 .resource = bfin_spi0_resource,
531 .platform_data = &bfin_spi0_info, /* Passed to driver */
534 #endif /* spi master and devices */
536 #if defined(CONFIG_MTD_GPIO_ADDR) || defined(CONFIG_MTD_GPIO_ADDR_MODULE)
537 static struct mtd_partition cm_partitions[] = {
539 .name = "bootloader(nor)",
543 .name = "linux kernel(nor)",
545 .offset = MTDPART_OFS_APPEND,
547 .name = "file system(nor)",
548 .size = MTDPART_SIZ_FULL,
549 .offset = MTDPART_OFS_APPEND,
553 static struct physmap_flash_data cm_flash_data = {
555 .parts = cm_partitions,
556 .nr_parts = ARRAY_SIZE(cm_partitions),
559 static unsigned cm_flash_gpios[] = { GPIO_PH9, GPIO_PG11 };
561 static struct resource cm_flash_resource[] = {
566 .flags = IORESOURCE_MEM,
568 .start = (unsigned long)cm_flash_gpios,
569 .end = ARRAY_SIZE(cm_flash_gpios),
570 .flags = IORESOURCE_IRQ,
574 static struct platform_device cm_flash_device = {
575 .name = "gpio-addr-flash",
578 .platform_data = &cm_flash_data,
580 .num_resources = ARRAY_SIZE(cm_flash_resource),
581 .resource = cm_flash_resource,
585 #if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE)
586 #ifdef CONFIG_SERIAL_BFIN_UART0
587 static struct resource bfin_uart0_resources[] = {
591 .flags = IORESOURCE_MEM,
594 .start = IRQ_UART0_RX,
595 .end = IRQ_UART0_RX+1,
596 .flags = IORESOURCE_IRQ,
599 .start = IRQ_UART0_ERROR,
600 .end = IRQ_UART0_ERROR,
601 .flags = IORESOURCE_IRQ,
604 .start = CH_UART0_TX,
606 .flags = IORESOURCE_DMA,
609 .start = CH_UART0_RX,
611 .flags = IORESOURCE_DMA,
615 unsigned short bfin_uart0_peripherals[] = {
616 P_UART0_TX, P_UART0_RX, 0
619 static struct platform_device bfin_uart0_device = {
622 .num_resources = ARRAY_SIZE(bfin_uart0_resources),
623 .resource = bfin_uart0_resources,
625 .platform_data = &bfin_uart0_peripherals, /* Passed to driver */
629 #ifdef CONFIG_SERIAL_BFIN_UART1
630 static struct resource bfin_uart1_resources[] = {
634 .flags = IORESOURCE_MEM,
637 .start = IRQ_UART1_RX,
638 .end = IRQ_UART1_RX+1,
639 .flags = IORESOURCE_IRQ,
642 .start = IRQ_UART1_ERROR,
643 .end = IRQ_UART1_ERROR,
644 .flags = IORESOURCE_IRQ,
647 .start = CH_UART1_TX,
649 .flags = IORESOURCE_DMA,
652 .start = CH_UART1_RX,
654 .flags = IORESOURCE_DMA,
656 #ifdef CONFIG_BFIN_UART1_CTSRTS
660 .flags = IORESOURCE_IO,
665 .flags = IORESOURCE_IO,
670 unsigned short bfin_uart1_peripherals[] = {
671 P_UART1_TX, P_UART1_RX, 0
674 static struct platform_device bfin_uart1_device = {
677 .num_resources = ARRAY_SIZE(bfin_uart1_resources),
678 .resource = bfin_uart1_resources,
680 .platform_data = &bfin_uart1_peripherals, /* Passed to driver */
686 #if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE)
687 #ifdef CONFIG_BFIN_SIR0
688 static struct resource bfin_sir0_resources[] = {
692 .flags = IORESOURCE_MEM,
695 .start = IRQ_UART0_RX,
696 .end = IRQ_UART0_RX+1,
697 .flags = IORESOURCE_IRQ,
700 .start = CH_UART0_RX,
701 .end = CH_UART0_RX+1,
702 .flags = IORESOURCE_DMA,
706 static struct platform_device bfin_sir0_device = {
709 .num_resources = ARRAY_SIZE(bfin_sir0_resources),
710 .resource = bfin_sir0_resources,
713 #ifdef CONFIG_BFIN_SIR1
714 static struct resource bfin_sir1_resources[] = {
718 .flags = IORESOURCE_MEM,
721 .start = IRQ_UART1_RX,
722 .end = IRQ_UART1_RX+1,
723 .flags = IORESOURCE_IRQ,
726 .start = CH_UART1_RX,
727 .end = CH_UART1_RX+1,
728 .flags = IORESOURCE_DMA,
732 static struct platform_device bfin_sir1_device = {
735 .num_resources = ARRAY_SIZE(bfin_sir1_resources),
736 .resource = bfin_sir1_resources,
741 #if defined(CONFIG_I2C_BLACKFIN_TWI) || defined(CONFIG_I2C_BLACKFIN_TWI_MODULE)
742 static struct resource bfin_twi0_resource[] = {
744 .start = TWI0_REGBASE,
746 .flags = IORESOURCE_MEM,
751 .flags = IORESOURCE_IRQ,
755 static struct platform_device i2c_bfin_twi_device = {
756 .name = "i2c-bfin-twi",
758 .num_resources = ARRAY_SIZE(bfin_twi0_resource),
759 .resource = bfin_twi0_resource,
763 static struct i2c_board_info __initdata bfin_i2c_board_info[] = {
764 #if defined(CONFIG_BFIN_TWI_LCD) || defined(CONFIG_BFIN_TWI_LCD_MODULE)
766 I2C_BOARD_INFO("pcf8574_lcd", 0x22),
769 #if defined(CONFIG_INPUT_PCF8574) || defined(CONFIG_INPUT_PCF8574_MODULE)
771 I2C_BOARD_INFO("pcf8574_keypad", 0x27),
775 #if defined(CONFIG_FB_BFIN_7393) || defined(CONFIG_FB_BFIN_7393_MODULE)
777 I2C_BOARD_INFO("bfin-adv7393", 0x2B),
782 #if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE)
783 #ifdef CONFIG_SERIAL_BFIN_SPORT0_UART
784 static struct resource bfin_sport0_uart_resources[] = {
786 .start = SPORT0_TCR1,
787 .end = SPORT0_MRCS3+4,
788 .flags = IORESOURCE_MEM,
791 .start = IRQ_SPORT0_RX,
792 .end = IRQ_SPORT0_RX+1,
793 .flags = IORESOURCE_IRQ,
796 .start = IRQ_SPORT0_ERROR,
797 .end = IRQ_SPORT0_ERROR,
798 .flags = IORESOURCE_IRQ,
802 unsigned short bfin_sport0_peripherals[] = {
803 P_SPORT0_TFS, P_SPORT0_DTPRI, P_SPORT0_TSCLK, P_SPORT0_RFS,
804 P_SPORT0_DRPRI, P_SPORT0_RSCLK, P_SPORT0_DRSEC, P_SPORT0_DTSEC, 0
807 static struct platform_device bfin_sport0_uart_device = {
808 .name = "bfin-sport-uart",
810 .num_resources = ARRAY_SIZE(bfin_sport0_uart_resources),
811 .resource = bfin_sport0_uart_resources,
813 .platform_data = &bfin_sport0_peripherals, /* Passed to driver */
817 #ifdef CONFIG_SERIAL_BFIN_SPORT1_UART
818 static struct resource bfin_sport1_uart_resources[] = {
820 .start = SPORT1_TCR1,
821 .end = SPORT1_MRCS3+4,
822 .flags = IORESOURCE_MEM,
825 .start = IRQ_SPORT1_RX,
826 .end = IRQ_SPORT1_RX+1,
827 .flags = IORESOURCE_IRQ,
830 .start = IRQ_SPORT1_ERROR,
831 .end = IRQ_SPORT1_ERROR,
832 .flags = IORESOURCE_IRQ,
836 unsigned short bfin_sport1_peripherals[] = {
837 P_SPORT1_TFS, P_SPORT1_DTPRI, P_SPORT1_TSCLK, P_SPORT1_RFS,
838 P_SPORT1_DRPRI, P_SPORT1_RSCLK, P_SPORT1_DRSEC, P_SPORT1_DTSEC, 0
841 static struct platform_device bfin_sport1_uart_device = {
842 .name = "bfin-sport-uart",
844 .num_resources = ARRAY_SIZE(bfin_sport1_uart_resources),
845 .resource = bfin_sport1_uart_resources,
847 .platform_data = &bfin_sport1_peripherals, /* Passed to driver */
853 #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
854 #include <linux/input.h>
855 #include <linux/gpio_keys.h>
857 static struct gpio_keys_button bfin_gpio_keys_table[] = {
858 {BTN_0, GPIO_PF14, 1, "gpio-keys: BTN0"},
861 static struct gpio_keys_platform_data bfin_gpio_keys_data = {
862 .buttons = bfin_gpio_keys_table,
863 .nbuttons = ARRAY_SIZE(bfin_gpio_keys_table),
866 static struct platform_device bfin_device_gpiokeys = {
869 .platform_data = &bfin_gpio_keys_data,
874 static const unsigned int cclk_vlev_datasheet[] =
876 VRPAIR(VLEV_100, 400000000),
877 VRPAIR(VLEV_105, 426000000),
878 VRPAIR(VLEV_110, 500000000),
879 VRPAIR(VLEV_115, 533000000),
880 VRPAIR(VLEV_120, 600000000),
883 static struct bfin_dpmc_platform_data bfin_dmpc_vreg_data = {
884 .tuple_tab = cclk_vlev_datasheet,
885 .tabsize = ARRAY_SIZE(cclk_vlev_datasheet),
886 .vr_settling_time = 25 /* us */,
889 static struct platform_device bfin_dpmc = {
892 .platform_data = &bfin_dmpc_vreg_data,
896 static struct platform_device *cmbf527_devices[] __initdata = {
900 #if defined(CONFIG_MTD_NAND_BF5XX) || defined(CONFIG_MTD_NAND_BF5XX_MODULE)
904 #if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE)
905 &bfin_pcmcia_cf_device,
908 #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE)
912 #if defined(CONFIG_USB_ISP1760_HCD) || defined(CONFIG_USB_ISP1760_HCD_MODULE)
913 &bfin_isp1760_device,
916 #if defined(CONFIG_USB_MUSB_HDRC) || defined(CONFIG_USB_MUSB_HDRC_MODULE)
920 #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
924 #if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
928 #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
933 #if defined(CONFIG_USB_NET2272) || defined(CONFIG_USB_NET2272_MODULE)
934 &net2272_bfin_device,
937 #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
941 #if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE)
942 #ifdef CONFIG_SERIAL_BFIN_UART0
945 #ifdef CONFIG_SERIAL_BFIN_UART1
950 #if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE)
951 #ifdef CONFIG_BFIN_SIR0
954 #ifdef CONFIG_BFIN_SIR1
959 #if defined(CONFIG_I2C_BLACKFIN_TWI) || defined(CONFIG_I2C_BLACKFIN_TWI_MODULE)
960 &i2c_bfin_twi_device,
963 #if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE)
964 #ifdef CONFIG_SERIAL_BFIN_SPORT0_UART
965 &bfin_sport0_uart_device,
967 #ifdef CONFIG_SERIAL_BFIN_SPORT1_UART
968 &bfin_sport1_uart_device,
972 #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
973 &bfin_device_gpiokeys,
976 #if defined(CONFIG_MTD_GPIO_ADDR) || defined(CONFIG_MTD_GPIO_ADDR_MODULE)
981 static int __init cm_init(void)
983 printk(KERN_INFO "%s(): registering device resources\n", __func__);
984 i2c_register_board_info(0, bfin_i2c_board_info,
985 ARRAY_SIZE(bfin_i2c_board_info));
986 platform_add_devices(cmbf527_devices, ARRAY_SIZE(cmbf527_devices));
987 spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info));
991 arch_initcall(cm_init);
993 static struct platform_device *cmbf527_early_devices[] __initdata = {
994 #if defined(CONFIG_SERIAL_BFIN_CONSOLE) || defined(CONFIG_EARLY_PRINTK)
995 #ifdef CONFIG_SERIAL_BFIN_UART0
998 #ifdef CONFIG_SERIAL_BFIN_UART1
1003 #if defined(CONFIG_SERIAL_BFIN_SPORT_CONSOLE)
1004 #ifdef CONFIG_SERIAL_BFIN_SPORT0_UART
1005 &bfin_sport0_uart_device,
1007 #ifdef CONFIG_SERIAL_BFIN_SPORT1_UART
1008 &bfin_sport1_uart_device,
1013 void __init native_machine_early_platform_add_devices(void)
1015 printk(KERN_INFO "register early platform devices\n");
1016 early_platform_add_devices(cmbf527_early_devices,
1017 ARRAY_SIZE(cmbf527_early_devices));
1020 void native_machine_restart(char *cmd)
1022 /* workaround reboot hang when booting from SPI */
1023 if ((bfin_read_SYSCR() & 0x7) == 0x3)
1024 bfin_reset_boot_spi_cs(P_DEFAULT_BOOT_SPI_CS);
1027 void bfin_get_ether_addr(char *addr)
1029 random_ether_addr(addr);
1030 printk(KERN_WARNING "%s:%s: Setting Ethernet MAC to a random one\n", __FILE__, __func__);
1032 EXPORT_SYMBOL(bfin_get_ether_addr);