blob: f93323dd5b5192dc8fae630a7014f8b1eb894af9 [file] [log] [blame]
Michael Hennerich59003142007-10-21 16:54:27 +08001/*
Robin Getz96f10502009-09-24 14:11:24 +00002 * Copyright 2004-2009 Analog Devices Inc.
3 * 2005 National ICT Australia (NICTA)
4 * Aidan Williams <aidan@nicta.com.au>
Michael Hennerich59003142007-10-21 16:54:27 +08005 *
Robin Getz96f10502009-09-24 14:11:24 +00006 * Licensed under the GPL-2 or later.
Michael Hennerich59003142007-10-21 16:54:27 +08007 */
8
9#include <linux/device.h>
10#include <linux/platform_device.h>
11#include <linux/mtd/mtd.h>
12#include <linux/mtd/partitions.h>
Michael Hennerichd7e5dd42008-05-07 11:41:26 +080013#include <linux/mtd/physmap.h>
Michael Hennerich59003142007-10-21 16:54:27 +080014#include <linux/spi/spi.h>
15#include <linux/spi/flash.h>
Bryan Wu72268682008-05-07 11:41:26 +080016#include <linux/i2c.h>
Michael Hennerich59003142007-10-21 16:54:27 +080017#include <linux/irq.h>
18#include <linux/interrupt.h>
Mike Frysinger632f6582007-11-15 21:25:47 +080019#include <linux/usb/sl811.h>
Michael Hennerich1089e222007-12-24 11:49:29 +080020#include <linux/usb/musb.h>
Michael Hennerich59003142007-10-21 16:54:27 +080021#include <asm/dma.h>
22#include <asm/bfin5xx_spi.h>
23#include <asm/reboot.h>
Michael Hennerich64307f72007-10-29 16:55:18 +080024#include <asm/nand.h>
Bryan Wu5d448dd2007-11-12 23:24:42 +080025#include <asm/portmux.h>
Michael Hennerich14b03202008-05-07 11:41:26 +080026#include <asm/dpmc.h>
Michael Hennerich59003142007-10-21 16:54:27 +080027#include <linux/spi/ad7877.h>
28
29/*
30 * Name the Board for the /proc/cpuinfo
31 */
Mike Frysingerfe85cad2008-11-18 17:48:22 +080032const char bfin_board_name[] = "ADI BF527-EZKIT";
Michael Hennerich59003142007-10-21 16:54:27 +080033
34/*
35 * Driver needs to know address, irq and flag pin.
36 */
37
Michael Hennerich59003142007-10-21 16:54:27 +080038#if defined(CONFIG_USB_ISP1760_HCD) || defined(CONFIG_USB_ISP1760_HCD_MODULE)
Michael Hennerich3f375692008-11-18 17:48:22 +080039#include <linux/usb/isp1760.h>
40static struct resource bfin_isp1760_resources[] = {
Michael Hennerich59003142007-10-21 16:54:27 +080041 [0] = {
Michael Hennerich3f375692008-11-18 17:48:22 +080042 .start = 0x203C0000,
43 .end = 0x203C0000 + 0x000fffff,
Michael Hennerich59003142007-10-21 16:54:27 +080044 .flags = IORESOURCE_MEM,
45 },
46 [1] = {
Michael Hennerich3f375692008-11-18 17:48:22 +080047 .start = IRQ_PF7,
48 .end = IRQ_PF7,
Michael Hennerich59003142007-10-21 16:54:27 +080049 .flags = IORESOURCE_IRQ,
50 },
51};
52
Michael Hennerich3f375692008-11-18 17:48:22 +080053static struct isp1760_platform_data isp1760_priv = {
54 .is_isp1761 = 0,
Michael Hennerich3f375692008-11-18 17:48:22 +080055 .bus_width_16 = 1,
56 .port1_otg = 0,
57 .analog_oc = 0,
58 .dack_polarity_high = 0,
59 .dreq_polarity_high = 0,
60};
61
62static struct platform_device bfin_isp1760_device = {
Michael Hennerichc6feb7682009-10-15 10:37:33 +000063 .name = "isp1760",
Michael Hennerich59003142007-10-21 16:54:27 +080064 .id = 0,
Michael Hennerich3f375692008-11-18 17:48:22 +080065 .dev = {
66 .platform_data = &isp1760_priv,
67 },
68 .num_resources = ARRAY_SIZE(bfin_isp1760_resources),
69 .resource = bfin_isp1760_resources,
Michael Hennerich59003142007-10-21 16:54:27 +080070};
Michael Hennerich59003142007-10-21 16:54:27 +080071#endif
72
Michael Hennerich1089e222007-12-24 11:49:29 +080073#if defined(CONFIG_USB_MUSB_HDRC) || defined(CONFIG_USB_MUSB_HDRC_MODULE)
74static struct resource musb_resources[] = {
75 [0] = {
76 .start = 0xffc03800,
77 .end = 0xffc03cff,
78 .flags = IORESOURCE_MEM,
79 },
80 [1] = { /* general IRQ */
81 .start = IRQ_USB_INT0,
82 .end = IRQ_USB_INT0,
83 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
84 },
85 [2] = { /* DMA IRQ */
86 .start = IRQ_USB_DMA,
87 .end = IRQ_USB_DMA,
88 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
89 },
90};
91
Bryan Wu50041ac2008-10-08 13:39:40 +080092static struct musb_hdrc_config musb_config = {
93 .multipoint = 0,
94 .dyn_fifo = 0,
95 .soft_con = 1,
96 .dma = 1,
Bryan Wufea05da2009-01-07 23:14:39 +080097 .num_eps = 8,
98 .dma_channels = 8,
Bryan Wu50041ac2008-10-08 13:39:40 +080099 .gpio_vrsel = GPIO_PG13,
100};
101
Michael Hennerich1089e222007-12-24 11:49:29 +0800102static struct musb_hdrc_platform_data musb_plat = {
103#if defined(CONFIG_USB_MUSB_OTG)
104 .mode = MUSB_OTG,
105#elif defined(CONFIG_USB_MUSB_HDRC_HCD)
106 .mode = MUSB_HOST,
107#elif defined(CONFIG_USB_GADGET_MUSB_HDRC)
108 .mode = MUSB_PERIPHERAL,
109#endif
Bryan Wu50041ac2008-10-08 13:39:40 +0800110 .config = &musb_config,
Michael Hennerich1089e222007-12-24 11:49:29 +0800111};
112
113static u64 musb_dmamask = ~(u32)0;
114
115static struct platform_device musb_device = {
116 .name = "musb_hdrc",
117 .id = 0,
118 .dev = {
119 .dma_mask = &musb_dmamask,
120 .coherent_dma_mask = 0xffffffff,
121 .platform_data = &musb_plat,
122 },
123 .num_resources = ARRAY_SIZE(musb_resources),
124 .resource = musb_resources,
125};
126#endif
127
128#if defined(CONFIG_FB_BFIN_T350MCQB) || defined(CONFIG_FB_BFIN_T350MCQB_MODULE)
129
130static struct resource bf52x_t350mcqb_resources[] = {
131 {
132 .start = IRQ_PPI_ERROR,
133 .end = IRQ_PPI_ERROR,
134 .flags = IORESOURCE_IRQ,
135 },
136};
137
138static struct platform_device bf52x_t350mcqb_device = {
139 .name = "bfin-t350mcqb",
140 .id = -1,
141 .num_resources = ARRAY_SIZE(bf52x_t350mcqb_resources),
142 .resource = bf52x_t350mcqb_resources,
143};
144#endif
145
Michael Hennerichd7e5dd42008-05-07 11:41:26 +0800146#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
147static struct mtd_partition ezkit_partitions[] = {
148 {
Robin Getzaa582972008-08-05 17:47:29 +0800149 .name = "bootloader(nor)",
Michael Hennerichd7e5dd42008-05-07 11:41:26 +0800150 .size = 0x40000,
151 .offset = 0,
152 }, {
Robin Getzaa582972008-08-05 17:47:29 +0800153 .name = "linux kernel(nor)",
Michael Hennerichd7e5dd42008-05-07 11:41:26 +0800154 .size = 0x1C0000,
155 .offset = MTDPART_OFS_APPEND,
156 }, {
Robin Getzaa582972008-08-05 17:47:29 +0800157 .name = "file system(nor)",
Michael Hennerichd7e5dd42008-05-07 11:41:26 +0800158 .size = MTDPART_SIZ_FULL,
159 .offset = MTDPART_OFS_APPEND,
160 }
161};
162
163static struct physmap_flash_data ezkit_flash_data = {
164 .width = 2,
165 .parts = ezkit_partitions,
166 .nr_parts = ARRAY_SIZE(ezkit_partitions),
167};
168
169static struct resource ezkit_flash_resource = {
170 .start = 0x20000000,
171 .end = 0x203fffff,
172 .flags = IORESOURCE_MEM,
173};
174
175static struct platform_device ezkit_flash_device = {
176 .name = "physmap-flash",
177 .id = 0,
178 .dev = {
179 .platform_data = &ezkit_flash_data,
180 },
181 .num_resources = 1,
182 .resource = &ezkit_flash_resource,
183};
184#endif
185
Michael Hennerich64307f72007-10-29 16:55:18 +0800186#if defined(CONFIG_MTD_NAND_BF5XX) || defined(CONFIG_MTD_NAND_BF5XX_MODULE)
187static struct mtd_partition partition_info[] = {
188 {
Robin Getzaa582972008-08-05 17:47:29 +0800189 .name = "linux kernel(nand)",
Michael Hennerich64307f72007-10-29 16:55:18 +0800190 .offset = 0,
Mike Frysingerf4585a02008-10-13 14:45:21 +0800191 .size = 4 * 1024 * 1024,
Michael Hennerich64307f72007-10-29 16:55:18 +0800192 },
193 {
Robin Getzaa582972008-08-05 17:47:29 +0800194 .name = "file system(nand)",
Mike Frysingeredf05642008-02-25 11:38:11 +0800195 .offset = MTDPART_OFS_APPEND,
196 .size = MTDPART_SIZ_FULL,
Michael Hennerich64307f72007-10-29 16:55:18 +0800197 },
198};
199
200static struct bf5xx_nand_platform bf5xx_nand_platform = {
201 .page_size = NFC_PG_SIZE_256,
202 .data_width = NFC_NWIDTH_8,
203 .partitions = partition_info,
204 .nr_partitions = ARRAY_SIZE(partition_info),
205 .rd_dly = 3,
206 .wr_dly = 3,
207};
208
209static struct resource bf5xx_nand_resources[] = {
210 {
211 .start = NFC_CTL,
212 .end = NFC_DATA_RD + 2,
213 .flags = IORESOURCE_MEM,
214 },
215 {
216 .start = CH_NFC,
217 .end = CH_NFC,
218 .flags = IORESOURCE_IRQ,
219 },
220};
221
222static struct platform_device bf5xx_nand_device = {
223 .name = "bf5xx-nand",
224 .id = 0,
225 .num_resources = ARRAY_SIZE(bf5xx_nand_resources),
226 .resource = bf5xx_nand_resources,
227 .dev = {
228 .platform_data = &bf5xx_nand_platform,
229 },
230};
231#endif
232
Michael Hennerich59003142007-10-21 16:54:27 +0800233#if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE)
234static struct resource bfin_pcmcia_cf_resources[] = {
235 {
236 .start = 0x20310000, /* IO PORT */
237 .end = 0x20312000,
238 .flags = IORESOURCE_MEM,
239 }, {
240 .start = 0x20311000, /* Attribute Memory */
241 .end = 0x20311FFF,
242 .flags = IORESOURCE_MEM,
243 }, {
244 .start = IRQ_PF4,
245 .end = IRQ_PF4,
246 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL,
247 }, {
248 .start = 6, /* Card Detect PF6 */
249 .end = 6,
250 .flags = IORESOURCE_IRQ,
251 },
252};
253
254static struct platform_device bfin_pcmcia_cf_device = {
255 .name = "bfin_cf_pcmcia",
256 .id = -1,
257 .num_resources = ARRAY_SIZE(bfin_pcmcia_cf_resources),
258 .resource = bfin_pcmcia_cf_resources,
259};
260#endif
261
262#if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE)
263static struct platform_device rtc_device = {
264 .name = "rtc-bfin",
265 .id = -1,
266};
267#endif
268
269#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
Michael Hennerich61f09b52009-07-24 08:48:31 +0000270#include <linux/smc91x.h>
271
272static struct smc91x_platdata smc91x_info = {
273 .flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
274 .leda = RPC_LED_100_10,
275 .ledb = RPC_LED_TX_RX,
276};
277
Michael Hennerich59003142007-10-21 16:54:27 +0800278static struct resource smc91x_resources[] = {
279 {
280 .name = "smc91x-regs",
281 .start = 0x20300300,
282 .end = 0x20300300 + 16,
283 .flags = IORESOURCE_MEM,
284 }, {
285
286 .start = IRQ_PF7,
287 .end = IRQ_PF7,
288 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
289 },
290};
291static struct platform_device smc91x_device = {
292 .name = "smc91x",
293 .id = 0,
294 .num_resources = ARRAY_SIZE(smc91x_resources),
295 .resource = smc91x_resources,
Michael Hennerich61f09b52009-07-24 08:48:31 +0000296 .dev = {
297 .platform_data = &smc91x_info,
298 },
Michael Hennerich59003142007-10-21 16:54:27 +0800299};
300#endif
301
302#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
303static struct resource dm9000_resources[] = {
304 [0] = {
305 .start = 0x203FB800,
Laurent Pinchartda3854f2008-06-24 22:15:58 +0100306 .end = 0x203FB800 + 1,
Michael Hennerich59003142007-10-21 16:54:27 +0800307 .flags = IORESOURCE_MEM,
308 },
309 [1] = {
Laurent Pinchartda3854f2008-06-24 22:15:58 +0100310 .start = 0x203FB800 + 4,
311 .end = 0x203FB800 + 5,
312 .flags = IORESOURCE_MEM,
313 },
314 [2] = {
Michael Hennerich59003142007-10-21 16:54:27 +0800315 .start = IRQ_PF9,
316 .end = IRQ_PF9,
317 .flags = (IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE),
318 },
319};
320
321static struct platform_device dm9000_device = {
322 .name = "dm9000",
323 .id = -1,
324 .num_resources = ARRAY_SIZE(dm9000_resources),
325 .resource = dm9000_resources,
326};
327#endif
328
329#if defined(CONFIG_USB_SL811_HCD) || defined(CONFIG_USB_SL811_HCD_MODULE)
330static struct resource sl811_hcd_resources[] = {
331 {
332 .start = 0x20340000,
333 .end = 0x20340000,
334 .flags = IORESOURCE_MEM,
335 }, {
336 .start = 0x20340004,
337 .end = 0x20340004,
338 .flags = IORESOURCE_MEM,
339 }, {
340 .start = CONFIG_USB_SL811_BFIN_IRQ,
341 .end = CONFIG_USB_SL811_BFIN_IRQ,
342 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
343 },
344};
345
346#if defined(CONFIG_USB_SL811_BFIN_USE_VBUS)
347void sl811_port_power(struct device *dev, int is_on)
348{
349 gpio_request(CONFIG_USB_SL811_BFIN_GPIO_VBUS, "usb:SL811_VBUS");
Michael Hennerichacbcd262008-01-22 18:36:20 +0800350 gpio_direction_output(CONFIG_USB_SL811_BFIN_GPIO_VBUS, is_on);
Michael Hennerich59003142007-10-21 16:54:27 +0800351}
352#endif
353
354static struct sl811_platform_data sl811_priv = {
355 .potpg = 10,
356 .power = 250, /* == 500mA */
357#if defined(CONFIG_USB_SL811_BFIN_USE_VBUS)
358 .port_power = &sl811_port_power,
359#endif
360};
361
362static struct platform_device sl811_hcd_device = {
363 .name = "sl811-hcd",
364 .id = 0,
365 .dev = {
366 .platform_data = &sl811_priv,
367 },
368 .num_resources = ARRAY_SIZE(sl811_hcd_resources),
369 .resource = sl811_hcd_resources,
370};
371#endif
372
Michael Hennerich59003142007-10-21 16:54:27 +0800373#if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
Graf Yang65319622009-02-04 16:49:45 +0800374static struct platform_device bfin_mii_bus = {
375 .name = "bfin_mii_bus",
376};
377
Michael Hennerich59003142007-10-21 16:54:27 +0800378static struct platform_device bfin_mac_device = {
379 .name = "bfin_mac",
Graf Yang65319622009-02-04 16:49:45 +0800380 .dev.platform_data = &bfin_mii_bus,
Michael Hennerich59003142007-10-21 16:54:27 +0800381};
382#endif
383
384#if defined(CONFIG_USB_NET2272) || defined(CONFIG_USB_NET2272_MODULE)
385static struct resource net2272_bfin_resources[] = {
386 {
387 .start = 0x20300000,
388 .end = 0x20300000 + 0x100,
389 .flags = IORESOURCE_MEM,
390 }, {
391 .start = IRQ_PF7,
392 .end = IRQ_PF7,
393 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
394 },
395};
396
397static struct platform_device net2272_bfin_device = {
398 .name = "net2272",
399 .id = -1,
400 .num_resources = ARRAY_SIZE(net2272_bfin_resources),
401 .resource = net2272_bfin_resources,
402};
403#endif
404
Michael Hennerich59003142007-10-21 16:54:27 +0800405#if defined(CONFIG_MTD_M25P80) \
406 || defined(CONFIG_MTD_M25P80_MODULE)
407static struct mtd_partition bfin_spi_flash_partitions[] = {
408 {
Robin Getzaa582972008-08-05 17:47:29 +0800409 .name = "bootloader(spi)",
Grace Panac76d882008-04-24 06:33:56 +0800410 .size = 0x00040000,
Michael Hennerich59003142007-10-21 16:54:27 +0800411 .offset = 0,
412 .mask_flags = MTD_CAP_ROM
413 }, {
Robin Getzaa582972008-08-05 17:47:29 +0800414 .name = "linux kernel(spi)",
Mike Frysingeredf05642008-02-25 11:38:11 +0800415 .size = MTDPART_SIZ_FULL,
416 .offset = MTDPART_OFS_APPEND,
Michael Hennerich59003142007-10-21 16:54:27 +0800417 }
418};
419
420static struct flash_platform_data bfin_spi_flash_data = {
421 .name = "m25p80",
422 .parts = bfin_spi_flash_partitions,
423 .nr_parts = ARRAY_SIZE(bfin_spi_flash_partitions),
Michael Hennerichb9c9e782008-05-07 11:41:26 +0800424 .type = "m25p16",
Michael Hennerich59003142007-10-21 16:54:27 +0800425};
426
427/* SPI flash chip (m25p64) */
428static struct bfin5xx_spi_chip spi_flash_chip_info = {
429 .enable_dma = 0, /* use dma transfer with this chip*/
430 .bits_per_word = 8,
431};
432#endif
433
Mike Frysingera261eec2009-05-20 14:05:36 +0000434#if defined(CONFIG_BFIN_SPI_ADC) \
435 || defined(CONFIG_BFIN_SPI_ADC_MODULE)
Michael Hennerich59003142007-10-21 16:54:27 +0800436/* SPI ADC chip */
437static struct bfin5xx_spi_chip spi_adc_chip_info = {
438 .enable_dma = 1, /* use dma transfer with this chip*/
439 .bits_per_word = 16,
440};
441#endif
442
443#if defined(CONFIG_SND_BLACKFIN_AD1836) \
444 || defined(CONFIG_SND_BLACKFIN_AD1836_MODULE)
445static struct bfin5xx_spi_chip ad1836_spi_chip_info = {
446 .enable_dma = 0,
447 .bits_per_word = 16,
448};
449#endif
450
Yi Liffdf3ec2009-03-31 10:36:51 +0000451#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
452static struct bfin5xx_spi_chip mmc_spi_chip_info = {
453 .enable_dma = 0,
454 .bits_per_word = 8,
455};
456#endif
457
Michael Hennerich59003142007-10-21 16:54:27 +0800458#if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE)
459static struct bfin5xx_spi_chip spi_ad7877_chip_info = {
460 .enable_dma = 0,
461 .bits_per_word = 16,
462};
463
464static const struct ad7877_platform_data bfin_ad7877_ts_info = {
465 .model = 7877,
466 .vref_delay_usecs = 50, /* internal, no capacitor */
467 .x_plate_ohms = 419,
468 .y_plate_ohms = 486,
469 .pressure_max = 1000,
470 .pressure_min = 0,
471 .stopacq_polarity = 1,
472 .first_conversion_delay = 3,
473 .acquisition_time = 1,
474 .averaging = 1,
475 .pen_down_acc_interval = 1,
476};
477#endif
478
Michael Hennerich51054322009-01-07 23:14:38 +0800479#if defined(CONFIG_TOUCHSCREEN_AD7879) || defined(CONFIG_TOUCHSCREEN_AD7879_MODULE)
480#include <linux/spi/ad7879.h>
481static const struct ad7879_platform_data bfin_ad7879_ts_info = {
482 .model = 7879, /* Model = AD7879 */
483 .x_plate_ohms = 620, /* 620 Ohm from the touch datasheet */
484 .pressure_max = 10000,
485 .pressure_min = 0,
486 .first_conversion_delay = 3, /* wait 512us before do a first conversion */
487 .acquisition_time = 1, /* 4us acquisition time per sample */
488 .median = 2, /* do 8 measurements */
489 .averaging = 1, /* take the average of 4 middle samples */
490 .pen_down_acc_interval = 255, /* 9.4 ms */
491 .gpio_output = 1, /* configure AUX/VBAT/GPIO as GPIO output */
492 .gpio_default = 1, /* During initialization set GPIO = HIGH */
493};
494#endif
495
496#if defined(CONFIG_TOUCHSCREEN_AD7879_SPI) || defined(CONFIG_TOUCHSCREEN_AD7879_SPI_MODULE)
497static struct bfin5xx_spi_chip spi_ad7879_chip_info = {
498 .enable_dma = 0,
499 .bits_per_word = 16,
500};
501#endif
502
Michael Hennerichc7d48962007-11-15 21:33:31 +0800503#if defined(CONFIG_SND_SOC_WM8731) || defined(CONFIG_SND_SOC_WM8731_MODULE) \
Michael Hennerich0954f702007-11-13 00:16:19 +0800504 && defined(CONFIG_SND_SOC_WM8731_SPI)
505static struct bfin5xx_spi_chip spi_wm8731_chip_info = {
506 .enable_dma = 0,
507 .bits_per_word = 16,
508};
509#endif
Michael Hennerich6e668932008-02-09 01:54:09 +0800510
511#if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
512static struct bfin5xx_spi_chip spidev_chip_info = {
513 .enable_dma = 0,
514 .bits_per_word = 8,
515};
516#endif
517
Michael Hennerich59003142007-10-21 16:54:27 +0800518static struct spi_board_info bfin_spi_board_info[] __initdata = {
519#if defined(CONFIG_MTD_M25P80) \
520 || defined(CONFIG_MTD_M25P80_MODULE)
521 {
522 /* the modalias must be the same as spi device driver name */
523 .modalias = "m25p80", /* Name of spi_driver for this device */
524 .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */
525 .bus_num = 0, /* Framework bus number */
526 .chip_select = 1, /* Framework chip select. On STAMP537 it is SPISSEL1*/
527 .platform_data = &bfin_spi_flash_data,
528 .controller_data = &spi_flash_chip_info,
529 .mode = SPI_MODE_3,
530 },
531#endif
532
Mike Frysingera261eec2009-05-20 14:05:36 +0000533#if defined(CONFIG_BFIN_SPI_ADC) \
534 || defined(CONFIG_BFIN_SPI_ADC_MODULE)
Michael Hennerich59003142007-10-21 16:54:27 +0800535 {
536 .modalias = "bfin_spi_adc", /* Name of spi_driver for this device */
537 .max_speed_hz = 6250000, /* max spi clock (SCK) speed in HZ */
538 .bus_num = 0, /* Framework bus number */
539 .chip_select = 1, /* Framework chip select. */
540 .platform_data = NULL, /* No spi_driver specific config */
541 .controller_data = &spi_adc_chip_info,
542 },
543#endif
544
545#if defined(CONFIG_SND_BLACKFIN_AD1836) \
546 || defined(CONFIG_SND_BLACKFIN_AD1836_MODULE)
547 {
Barry Songdac98172009-08-13 21:07:37 +0000548 .modalias = "ad1836",
Michael Hennerich59003142007-10-21 16:54:27 +0800549 .max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */
550 .bus_num = 0,
551 .chip_select = CONFIG_SND_BLACKFIN_SPI_PFBIT,
552 .controller_data = &ad1836_spi_chip_info,
553 },
554#endif
Yi Liffdf3ec2009-03-31 10:36:51 +0000555#if defined(CONFIG_MMC_SPI) || defined(CONFIG_MMC_SPI_MODULE)
556 {
557 .modalias = "mmc_spi",
558 .max_speed_hz = 20000000, /* max spi clock (SCK) speed in HZ */
559 .bus_num = 0,
560 .chip_select = 3,
561 .controller_data = &mmc_spi_chip_info,
562 .mode = SPI_MODE_0,
563 },
564#endif
565
Michael Hennerich59003142007-10-21 16:54:27 +0800566#if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE)
567 {
568 .modalias = "ad7877",
569 .platform_data = &bfin_ad7877_ts_info,
Bryan Wu2eb74ae2008-05-31 15:17:25 +0800570 .irq = IRQ_PF8,
Michael Hennerich59003142007-10-21 16:54:27 +0800571 .max_speed_hz = 12500000, /* max spi clock (SCK) speed in HZ */
Michael Hennerich0954f702007-11-13 00:16:19 +0800572 .bus_num = 0,
Bryan Wu2eb74ae2008-05-31 15:17:25 +0800573 .chip_select = 2,
Michael Hennerich59003142007-10-21 16:54:27 +0800574 .controller_data = &spi_ad7877_chip_info,
575 },
576#endif
Michael Hennerich51054322009-01-07 23:14:38 +0800577#if defined(CONFIG_TOUCHSCREEN_AD7879_SPI) || defined(CONFIG_TOUCHSCREEN_AD7879_SPI_MODULE)
578 {
579 .modalias = "ad7879",
580 .platform_data = &bfin_ad7879_ts_info,
581 .irq = IRQ_PF8,
582 .max_speed_hz = 5000000, /* max spi clock (SCK) speed in HZ */
583 .bus_num = 0,
584 .chip_select = 3,
585 .controller_data = &spi_ad7879_chip_info,
586 .mode = SPI_CPHA | SPI_CPOL,
587 },
588#endif
Michael Hennerichc7d48962007-11-15 21:33:31 +0800589#if defined(CONFIG_SND_SOC_WM8731) || defined(CONFIG_SND_SOC_WM8731_MODULE) \
Michael Hennerich0954f702007-11-13 00:16:19 +0800590 && defined(CONFIG_SND_SOC_WM8731_SPI)
591 {
592 .modalias = "wm8731",
593 .max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */
594 .bus_num = 0,
595 .chip_select = 5,
596 .controller_data = &spi_wm8731_chip_info,
597 .mode = SPI_MODE_0,
598 },
599#endif
Michael Hennerich6e668932008-02-09 01:54:09 +0800600#if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
601 {
602 .modalias = "spidev",
603 .max_speed_hz = 3125000, /* max spi clock (SCK) speed in HZ */
604 .bus_num = 0,
605 .chip_select = 1,
606 .controller_data = &spidev_chip_info,
607 },
608#endif
Michael Hennerich59003142007-10-21 16:54:27 +0800609};
610
Mike Frysinger5bda2722008-06-07 15:03:01 +0800611#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
Michael Hennerich59003142007-10-21 16:54:27 +0800612/* SPI controller data */
613static struct bfin5xx_spi_master bfin_spi0_info = {
614 .num_chipselect = 8,
615 .enable_dma = 1, /* master has the ability to do dma transfer */
Bryan Wu5d448dd2007-11-12 23:24:42 +0800616 .pin_req = {P_SPI0_SCK, P_SPI0_MISO, P_SPI0_MOSI, 0},
Michael Hennerich59003142007-10-21 16:54:27 +0800617};
618
619/* SPI (0) */
620static struct resource bfin_spi0_resource[] = {
621 [0] = {
622 .start = SPI0_REGBASE,
623 .end = SPI0_REGBASE + 0xFF,
624 .flags = IORESOURCE_MEM,
625 },
626 [1] = {
627 .start = CH_SPI,
628 .end = CH_SPI,
Yi Li53122692009-06-05 12:11:11 +0000629 .flags = IORESOURCE_DMA,
630 },
631 [2] = {
632 .start = IRQ_SPI,
633 .end = IRQ_SPI,
Michael Hennerich59003142007-10-21 16:54:27 +0800634 .flags = IORESOURCE_IRQ,
635 },
636};
637
638static struct platform_device bfin_spi0_device = {
639 .name = "bfin-spi",
640 .id = 0, /* Bus number */
641 .num_resources = ARRAY_SIZE(bfin_spi0_resource),
642 .resource = bfin_spi0_resource,
643 .dev = {
644 .platform_data = &bfin_spi0_info, /* Passed to driver */
645 },
646};
647#endif /* spi master and devices */
648
Michael Hennerich59003142007-10-21 16:54:27 +0800649#if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE)
Michael Hennerich59003142007-10-21 16:54:27 +0800650#ifdef CONFIG_SERIAL_BFIN_UART0
Sonic Zhang6bd1fbe2009-09-09 10:46:19 +0000651static struct resource bfin_uart0_resources[] = {
Michael Hennerich59003142007-10-21 16:54:27 +0800652 {
Sonic Zhang6bd1fbe2009-09-09 10:46:19 +0000653 .start = UART0_THR,
654 .end = UART0_GCTL+2,
Michael Hennerich59003142007-10-21 16:54:27 +0800655 .flags = IORESOURCE_MEM,
656 },
Sonic Zhang6bd1fbe2009-09-09 10:46:19 +0000657 {
658 .start = IRQ_UART0_RX,
659 .end = IRQ_UART0_RX+1,
660 .flags = IORESOURCE_IRQ,
661 },
662 {
663 .start = IRQ_UART0_ERROR,
664 .end = IRQ_UART0_ERROR,
665 .flags = IORESOURCE_IRQ,
666 },
667 {
668 .start = CH_UART0_TX,
669 .end = CH_UART0_TX,
670 .flags = IORESOURCE_DMA,
671 },
672 {
673 .start = CH_UART0_RX,
674 .end = CH_UART0_RX,
675 .flags = IORESOURCE_DMA,
676 },
677};
678
679unsigned short bfin_uart0_peripherals[] = {
680 P_UART0_TX, P_UART0_RX, 0
681};
682
683static struct platform_device bfin_uart0_device = {
684 .name = "bfin-uart",
685 .id = 0,
686 .num_resources = ARRAY_SIZE(bfin_uart0_resources),
687 .resource = bfin_uart0_resources,
688 .dev = {
689 .platform_data = &bfin_uart0_peripherals, /* Passed to driver */
690 },
691};
Michael Hennerich59003142007-10-21 16:54:27 +0800692#endif
693#ifdef CONFIG_SERIAL_BFIN_UART1
Sonic Zhang6bd1fbe2009-09-09 10:46:19 +0000694static struct resource bfin_uart1_resources[] = {
Michael Hennerich59003142007-10-21 16:54:27 +0800695 {
Sonic Zhang6bd1fbe2009-09-09 10:46:19 +0000696 .start = UART1_THR,
697 .end = UART1_GCTL+2,
Michael Hennerich59003142007-10-21 16:54:27 +0800698 .flags = IORESOURCE_MEM,
699 },
Sonic Zhang6bd1fbe2009-09-09 10:46:19 +0000700 {
701 .start = IRQ_UART1_RX,
702 .end = IRQ_UART1_RX+1,
703 .flags = IORESOURCE_IRQ,
704 },
705 {
706 .start = IRQ_UART1_ERROR,
707 .end = IRQ_UART1_ERROR,
708 .flags = IORESOURCE_IRQ,
709 },
710 {
711 .start = CH_UART1_TX,
712 .end = CH_UART1_TX,
713 .flags = IORESOURCE_DMA,
714 },
715 {
716 .start = CH_UART1_RX,
717 .end = CH_UART1_RX,
718 .flags = IORESOURCE_DMA,
719 },
720#ifdef CONFIG_BFIN_UART1_CTSRTS
721 { /* CTS pin */
722 .start = GPIO_PF9,
723 .end = GPIO_PF9,
724 .flags = IORESOURCE_IO,
725 },
726 { /* RTS pin */
727 .start = GPIO_PF10,
728 .end = GPIO_PF10,
729 .flags = IORESOURCE_IO,
730 },
Michael Hennerich59003142007-10-21 16:54:27 +0800731#endif
732};
733
Sonic Zhang6bd1fbe2009-09-09 10:46:19 +0000734unsigned short bfin_uart1_peripherals[] = {
735 P_UART1_TX, P_UART1_RX, 0
736};
737
738static struct platform_device bfin_uart1_device = {
Michael Hennerich59003142007-10-21 16:54:27 +0800739 .name = "bfin-uart",
740 .id = 1,
Sonic Zhang6bd1fbe2009-09-09 10:46:19 +0000741 .num_resources = ARRAY_SIZE(bfin_uart1_resources),
742 .resource = bfin_uart1_resources,
743 .dev = {
744 .platform_data = &bfin_uart1_peripherals, /* Passed to driver */
745 },
Michael Hennerich59003142007-10-21 16:54:27 +0800746};
747#endif
Sonic Zhang6bd1fbe2009-09-09 10:46:19 +0000748#endif
Michael Hennerich59003142007-10-21 16:54:27 +0800749
Graf Yang5be36d22008-04-25 03:09:15 +0800750#if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE)
Graf Yang5be36d22008-04-25 03:09:15 +0800751#ifdef CONFIG_BFIN_SIR0
Graf Yang42bd8bc2009-01-07 23:14:39 +0800752static struct resource bfin_sir0_resources[] = {
Graf Yang5be36d22008-04-25 03:09:15 +0800753 {
754 .start = 0xFFC00400,
755 .end = 0xFFC004FF,
756 .flags = IORESOURCE_MEM,
757 },
Graf Yang42bd8bc2009-01-07 23:14:39 +0800758 {
759 .start = IRQ_UART0_RX,
760 .end = IRQ_UART0_RX+1,
761 .flags = IORESOURCE_IRQ,
762 },
763 {
764 .start = CH_UART0_RX,
765 .end = CH_UART0_RX+1,
766 .flags = IORESOURCE_DMA,
767 },
768};
769
770static struct platform_device bfin_sir0_device = {
771 .name = "bfin_sir",
772 .id = 0,
773 .num_resources = ARRAY_SIZE(bfin_sir0_resources),
774 .resource = bfin_sir0_resources,
775};
Graf Yang5be36d22008-04-25 03:09:15 +0800776#endif
777#ifdef CONFIG_BFIN_SIR1
Graf Yang42bd8bc2009-01-07 23:14:39 +0800778static struct resource bfin_sir1_resources[] = {
Graf Yang5be36d22008-04-25 03:09:15 +0800779 {
780 .start = 0xFFC02000,
781 .end = 0xFFC020FF,
782 .flags = IORESOURCE_MEM,
783 },
Graf Yang42bd8bc2009-01-07 23:14:39 +0800784 {
785 .start = IRQ_UART1_RX,
786 .end = IRQ_UART1_RX+1,
787 .flags = IORESOURCE_IRQ,
788 },
789 {
790 .start = CH_UART1_RX,
791 .end = CH_UART1_RX+1,
792 .flags = IORESOURCE_DMA,
793 },
Graf Yang5be36d22008-04-25 03:09:15 +0800794};
795
Graf Yang42bd8bc2009-01-07 23:14:39 +0800796static struct platform_device bfin_sir1_device = {
Graf Yang5be36d22008-04-25 03:09:15 +0800797 .name = "bfin_sir",
Graf Yang42bd8bc2009-01-07 23:14:39 +0800798 .id = 1,
799 .num_resources = ARRAY_SIZE(bfin_sir1_resources),
800 .resource = bfin_sir1_resources,
Graf Yang5be36d22008-04-25 03:09:15 +0800801};
802#endif
Graf Yang42bd8bc2009-01-07 23:14:39 +0800803#endif
Graf Yang5be36d22008-04-25 03:09:15 +0800804
Michael Hennerich59003142007-10-21 16:54:27 +0800805#if defined(CONFIG_I2C_BLACKFIN_TWI) || defined(CONFIG_I2C_BLACKFIN_TWI_MODULE)
806static struct resource bfin_twi0_resource[] = {
807 [0] = {
808 .start = TWI0_REGBASE,
809 .end = TWI0_REGBASE,
810 .flags = IORESOURCE_MEM,
811 },
812 [1] = {
813 .start = IRQ_TWI,
814 .end = IRQ_TWI,
815 .flags = IORESOURCE_IRQ,
816 },
817};
818
819static struct platform_device i2c_bfin_twi_device = {
820 .name = "i2c-bfin-twi",
821 .id = 0,
822 .num_resources = ARRAY_SIZE(bfin_twi0_resource),
823 .resource = bfin_twi0_resource,
824};
825#endif
826
Bryan Wu72268682008-05-07 11:41:26 +0800827static struct i2c_board_info __initdata bfin_i2c_board_info[] = {
Michael Hennerichebd58332009-07-02 11:00:38 +0000828#if defined(CONFIG_BFIN_TWI_LCD) || defined(CONFIG_BFIN_TWI_LCD_MODULE)
Bryan Wu72268682008-05-07 11:41:26 +0800829 {
830 I2C_BOARD_INFO("pcf8574_lcd", 0x22),
Bryan Wu72268682008-05-07 11:41:26 +0800831 },
832#endif
Michael Hennerich204844e2009-06-30 14:57:22 +0000833#if defined(CONFIG_INPUT_PCF8574) || defined(CONFIG_INPUT_PCF8574_MODULE)
Bryan Wu72268682008-05-07 11:41:26 +0800834 {
835 I2C_BOARD_INFO("pcf8574_keypad", 0x27),
Bryan Wu72268682008-05-07 11:41:26 +0800836 .irq = IRQ_PF8,
837 },
838#endif
Michael Hennerich50c4c082009-09-22 13:10:09 +0000839#if defined(CONFIG_FB_BFIN_7393) || defined(CONFIG_FB_BFIN_7393_MODULE)
840 {
841 I2C_BOARD_INFO("bfin-adv7393", 0x2B),
842 },
843#endif
Bryan Wu72268682008-05-07 11:41:26 +0800844};
Bryan Wu72268682008-05-07 11:41:26 +0800845
Michael Hennerich59003142007-10-21 16:54:27 +0800846#if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE)
Sonic Zhangdf5de262009-09-23 05:01:56 +0000847#ifdef CONFIG_SERIAL_BFIN_SPORT0_UART
848static struct resource bfin_sport0_uart_resources[] = {
849 {
850 .start = SPORT0_TCR1,
851 .end = SPORT0_MRCS3+4,
852 .flags = IORESOURCE_MEM,
853 },
854 {
855 .start = IRQ_SPORT0_RX,
856 .end = IRQ_SPORT0_RX+1,
857 .flags = IORESOURCE_IRQ,
858 },
859 {
860 .start = IRQ_SPORT0_ERROR,
861 .end = IRQ_SPORT0_ERROR,
862 .flags = IORESOURCE_IRQ,
863 },
864};
865
866unsigned short bfin_sport0_peripherals[] = {
867 P_SPORT0_TFS, P_SPORT0_DTPRI, P_SPORT0_TSCLK, P_SPORT0_RFS,
868 P_SPORT0_DRPRI, P_SPORT0_RSCLK, P_SPORT0_DRSEC, P_SPORT0_DTSEC, 0
869};
870
Michael Hennerich59003142007-10-21 16:54:27 +0800871static struct platform_device bfin_sport0_uart_device = {
872 .name = "bfin-sport-uart",
873 .id = 0,
Sonic Zhangdf5de262009-09-23 05:01:56 +0000874 .num_resources = ARRAY_SIZE(bfin_sport0_uart_resources),
875 .resource = bfin_sport0_uart_resources,
876 .dev = {
877 .platform_data = &bfin_sport0_peripherals, /* Passed to driver */
878 },
879};
880#endif
881#ifdef CONFIG_SERIAL_BFIN_SPORT1_UART
882static struct resource bfin_sport1_uart_resources[] = {
883 {
884 .start = SPORT1_TCR1,
885 .end = SPORT1_MRCS3+4,
886 .flags = IORESOURCE_MEM,
887 },
888 {
889 .start = IRQ_SPORT1_RX,
890 .end = IRQ_SPORT1_RX+1,
891 .flags = IORESOURCE_IRQ,
892 },
893 {
894 .start = IRQ_SPORT1_ERROR,
895 .end = IRQ_SPORT1_ERROR,
896 .flags = IORESOURCE_IRQ,
897 },
898};
899
900unsigned short bfin_sport1_peripherals[] = {
901 P_SPORT1_TFS, P_SPORT1_DTPRI, P_SPORT1_TSCLK, P_SPORT1_RFS,
902 P_SPORT1_DRPRI, P_SPORT1_RSCLK, P_SPORT1_DRSEC, P_SPORT1_DTSEC, 0
Michael Hennerich59003142007-10-21 16:54:27 +0800903};
904
905static struct platform_device bfin_sport1_uart_device = {
906 .name = "bfin-sport-uart",
907 .id = 1,
Sonic Zhangdf5de262009-09-23 05:01:56 +0000908 .num_resources = ARRAY_SIZE(bfin_sport1_uart_resources),
909 .resource = bfin_sport1_uart_resources,
910 .dev = {
911 .platform_data = &bfin_sport1_peripherals, /* Passed to driver */
912 },
Michael Hennerich59003142007-10-21 16:54:27 +0800913};
914#endif
Sonic Zhangdf5de262009-09-23 05:01:56 +0000915#endif
Michael Hennerich59003142007-10-21 16:54:27 +0800916
Michael Hennerich1089e222007-12-24 11:49:29 +0800917#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
918#include <linux/input.h>
919#include <linux/gpio_keys.h>
920
921static struct gpio_keys_button bfin_gpio_keys_table[] = {
922 {BTN_0, GPIO_PG0, 1, "gpio-keys: BTN0"},
923 {BTN_1, GPIO_PG13, 1, "gpio-keys: BTN1"},
924};
925
926static struct gpio_keys_platform_data bfin_gpio_keys_data = {
927 .buttons = bfin_gpio_keys_table,
928 .nbuttons = ARRAY_SIZE(bfin_gpio_keys_table),
929};
930
931static struct platform_device bfin_device_gpiokeys = {
932 .name = "gpio-keys",
933 .dev = {
934 .platform_data = &bfin_gpio_keys_data,
935 },
936};
937#endif
938
Michael Hennerichadfc0462009-10-09 07:37:03 +0000939#if defined(CONFIG_INPUT_BFIN_ROTARY) || defined(CONFIG_INPUT_BFIN_ROTARY_MODULE)
Michael Hennerichaca5e4a2008-10-08 14:27:59 +0800940#include <linux/input.h>
941#include <asm/bfin_rotary.h>
942
943static struct bfin_rotary_platform_data bfin_rotary_data = {
944 /*.rotary_up_key = KEY_UP,*/
945 /*.rotary_down_key = KEY_DOWN,*/
946 .rotary_rel_code = REL_WHEEL,
947 .rotary_button_key = KEY_ENTER,
948 .debounce = 10, /* 0..17 */
949 .mode = ROT_QUAD_ENC | ROT_DEBE,
950};
951
952static struct resource bfin_rotary_resources[] = {
953 {
954 .start = IRQ_CNT,
955 .end = IRQ_CNT,
956 .flags = IORESOURCE_IRQ,
957 },
958};
959
960static struct platform_device bfin_rotary_device = {
961 .name = "bfin-rotary",
962 .id = -1,
963 .num_resources = ARRAY_SIZE(bfin_rotary_resources),
964 .resource = bfin_rotary_resources,
965 .dev = {
966 .platform_data = &bfin_rotary_data,
967 },
968};
969#endif
970
Michael Hennerich14b03202008-05-07 11:41:26 +0800971static const unsigned int cclk_vlev_datasheet[] =
972{
973 VRPAIR(VLEV_100, 400000000),
974 VRPAIR(VLEV_105, 426000000),
975 VRPAIR(VLEV_110, 500000000),
976 VRPAIR(VLEV_115, 533000000),
977 VRPAIR(VLEV_120, 600000000),
978};
979
980static struct bfin_dpmc_platform_data bfin_dmpc_vreg_data = {
981 .tuple_tab = cclk_vlev_datasheet,
982 .tabsize = ARRAY_SIZE(cclk_vlev_datasheet),
983 .vr_settling_time = 25 /* us */,
984};
985
986static struct platform_device bfin_dpmc = {
987 .name = "bfin dpmc",
988 .dev = {
989 .platform_data = &bfin_dmpc_vreg_data,
990 },
991};
992
Michael Hennerich59003142007-10-21 16:54:27 +0800993static struct platform_device *stamp_devices[] __initdata = {
Michael Hennerich14b03202008-05-07 11:41:26 +0800994
995 &bfin_dpmc,
996
Michael Hennerich64307f72007-10-29 16:55:18 +0800997#if defined(CONFIG_MTD_NAND_BF5XX) || defined(CONFIG_MTD_NAND_BF5XX_MODULE)
998 &bf5xx_nand_device,
999#endif
1000
Michael Hennerich59003142007-10-21 16:54:27 +08001001#if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE)
1002 &bfin_pcmcia_cf_device,
1003#endif
1004
1005#if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE)
1006 &rtc_device,
1007#endif
1008
1009#if defined(CONFIG_USB_SL811_HCD) || defined(CONFIG_USB_SL811_HCD_MODULE)
1010 &sl811_hcd_device,
1011#endif
1012
Michael Hennerich3f375692008-11-18 17:48:22 +08001013#if defined(CONFIG_USB_ISP1760_HCD) || defined(CONFIG_USB_ISP1760_HCD_MODULE)
1014 &bfin_isp1760_device,
1015#endif
1016
Michael Hennerich1089e222007-12-24 11:49:29 +08001017#if defined(CONFIG_USB_MUSB_HDRC) || defined(CONFIG_USB_MUSB_HDRC_MODULE)
1018 &musb_device,
1019#endif
1020
Michael Hennerich59003142007-10-21 16:54:27 +08001021#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
1022 &smc91x_device,
1023#endif
1024
1025#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
1026 &dm9000_device,
1027#endif
1028
1029#if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
Graf Yang65319622009-02-04 16:49:45 +08001030 &bfin_mii_bus,
Michael Hennerich59003142007-10-21 16:54:27 +08001031 &bfin_mac_device,
1032#endif
1033
1034#if defined(CONFIG_USB_NET2272) || defined(CONFIG_USB_NET2272_MODULE)
1035 &net2272_bfin_device,
1036#endif
1037
1038#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
1039 &bfin_spi0_device,
1040#endif
1041
Michael Hennerich1089e222007-12-24 11:49:29 +08001042#if defined(CONFIG_FB_BFIN_T350MCQB) || defined(CONFIG_FB_BFIN_T350MCQB_MODULE)
1043 &bf52x_t350mcqb_device,
1044#endif
1045
Michael Hennerich59003142007-10-21 16:54:27 +08001046#if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE)
Sonic Zhang6bd1fbe2009-09-09 10:46:19 +00001047#ifdef CONFIG_SERIAL_BFIN_UART0
1048 &bfin_uart0_device,
1049#endif
1050#ifdef CONFIG_SERIAL_BFIN_UART1
1051 &bfin_uart1_device,
1052#endif
Michael Hennerich59003142007-10-21 16:54:27 +08001053#endif
1054
Graf Yang5be36d22008-04-25 03:09:15 +08001055#if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE)
Graf Yang42bd8bc2009-01-07 23:14:39 +08001056#ifdef CONFIG_BFIN_SIR0
1057 &bfin_sir0_device,
1058#endif
1059#ifdef CONFIG_BFIN_SIR1
1060 &bfin_sir1_device,
1061#endif
Graf Yang5be36d22008-04-25 03:09:15 +08001062#endif
1063
Michael Hennerich59003142007-10-21 16:54:27 +08001064#if defined(CONFIG_I2C_BLACKFIN_TWI) || defined(CONFIG_I2C_BLACKFIN_TWI_MODULE)
1065 &i2c_bfin_twi_device,
1066#endif
1067
1068#if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE)
Sonic Zhangdf5de262009-09-23 05:01:56 +00001069#ifdef CONFIG_SERIAL_BFIN_SPORT0_UART
Michael Hennerich59003142007-10-21 16:54:27 +08001070 &bfin_sport0_uart_device,
Sonic Zhangdf5de262009-09-23 05:01:56 +00001071#endif
1072#ifdef CONFIG_SERIAL_BFIN_SPORT1_UART
Michael Hennerich59003142007-10-21 16:54:27 +08001073 &bfin_sport1_uart_device,
1074#endif
Sonic Zhangdf5de262009-09-23 05:01:56 +00001075#endif
Michael Hennerich59003142007-10-21 16:54:27 +08001076
Michael Hennerich1089e222007-12-24 11:49:29 +08001077#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
1078 &bfin_device_gpiokeys,
1079#endif
Mike Frysingercad2ab62008-02-22 17:01:31 +08001080
Michael Hennerichadfc0462009-10-09 07:37:03 +00001081#if defined(CONFIG_INPUT_BFIN_ROTARY) || defined(CONFIG_INPUT_BFIN_ROTARY_MODULE)
Michael Hennerichaca5e4a2008-10-08 14:27:59 +08001082 &bfin_rotary_device,
1083#endif
1084
Michael Hennerichd7e5dd42008-05-07 11:41:26 +08001085#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
1086 &ezkit_flash_device,
1087#endif
Michael Hennerich59003142007-10-21 16:54:27 +08001088};
1089
Mike Frysinger7f6678c2009-02-04 16:49:45 +08001090static int __init ezkit_init(void)
Michael Hennerich59003142007-10-21 16:54:27 +08001091{
Harvey Harrisonb85d8582008-04-23 09:39:01 +08001092 printk(KERN_INFO "%s(): registering device resources\n", __func__);
Bryan Wu72268682008-05-07 11:41:26 +08001093 i2c_register_board_info(0, bfin_i2c_board_info,
1094 ARRAY_SIZE(bfin_i2c_board_info));
Michael Hennerich59003142007-10-21 16:54:27 +08001095 platform_add_devices(stamp_devices, ARRAY_SIZE(stamp_devices));
Mike Frysinger5bda2722008-06-07 15:03:01 +08001096 spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info));
Michael Hennerich59003142007-10-21 16:54:27 +08001097 return 0;
1098}
1099
Mike Frysinger7f6678c2009-02-04 16:49:45 +08001100arch_initcall(ezkit_init);
Michael Hennerich59003142007-10-21 16:54:27 +08001101
1102void native_machine_restart(char *cmd)
1103{
1104 /* workaround reboot hang when booting from SPI */
1105 if ((bfin_read_SYSCR() & 0x7) == 0x3)
Sonic Zhangb52dae32009-02-04 16:49:45 +08001106 bfin_reset_boot_spi_cs(P_DEFAULT_BOOT_SPI_CS);
Michael Hennerich59003142007-10-21 16:54:27 +08001107}
Mike Frysinger137b1522007-11-22 16:07:03 +08001108
Mike Frysinger9862cc52007-11-15 21:21:20 +08001109void bfin_get_ether_addr(char *addr)
Mike Frysinger137b1522007-11-22 16:07:03 +08001110{
Mike Frysinger181afa92008-02-25 11:42:17 +08001111 /* the MAC is stored in OTP memory page 0xDF */
1112 u32 ret;
1113 u64 otp_mac;
1114 u32 (*otp_read)(u32 page, u32 flags, u64 *page_content) = (void *)0xEF00001A;
1115
1116 ret = otp_read(0xDF, 0x00, &otp_mac);
1117 if (!(ret & 0x1)) {
1118 char *otp_mac_p = (char *)&otp_mac;
1119 for (ret = 0; ret < 6; ++ret)
1120 addr[ret] = otp_mac_p[5 - ret];
1121 }
Mike Frysinger137b1522007-11-22 16:07:03 +08001122}
Mike Frysinger9862cc52007-11-15 21:21:20 +08001123EXPORT_SYMBOL(bfin_get_ether_addr);