diff options
Diffstat (limited to 'arch/arm/mach-pxa/stargate2.c')
-rw-r--r-- | arch/arm/mach-pxa/stargate2.c | 679 |
1 files changed, 453 insertions, 226 deletions
diff --git a/arch/arm/mach-pxa/stargate2.c b/arch/arm/mach-pxa/stargate2.c index af40d2a12d37..a654d1e6b38a 100644 --- a/arch/arm/mach-pxa/stargate2.c +++ b/arch/arm/mach-pxa/stargate2.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/i2c/at24.h> | 29 | #include <linux/i2c/at24.h> |
30 | #include <linux/smc91x.h> | 30 | #include <linux/smc91x.h> |
31 | #include <linux/gpio.h> | 31 | #include <linux/gpio.h> |
32 | #include <linux/leds.h> | ||
32 | 33 | ||
33 | #include <asm/types.h> | 34 | #include <asm/types.h> |
34 | #include <asm/setup.h> | 35 | #include <asm/setup.h> |
@@ -62,37 +63,12 @@ | |||
62 | #define SG2_GPIO_nSD_DETECT 90 | 63 | #define SG2_GPIO_nSD_DETECT 90 |
63 | #define SG2_SD_POWER_ENABLE 89 | 64 | #define SG2_SD_POWER_ENABLE 89 |
64 | 65 | ||
65 | static unsigned long stargate2_pin_config[] __initdata = { | 66 | static unsigned long sg2_im2_unified_pin_config[] __initdata = { |
66 | |||
67 | GPIO15_nCS_1, /* SRAM */ | ||
68 | /* SMC91x */ | ||
69 | GPIO80_nCS_4, | ||
70 | GPIO40_GPIO, /*cable detect?*/ | ||
71 | /* Device Identification for wakeup*/ | 67 | /* Device Identification for wakeup*/ |
72 | GPIO102_GPIO, | 68 | GPIO102_GPIO, |
73 | |||
74 | /* Button */ | ||
75 | GPIO91_GPIO | WAKEUP_ON_LEVEL_HIGH, | ||
76 | |||
77 | /* DA9030 */ | 69 | /* DA9030 */ |
78 | GPIO1_GPIO, | 70 | GPIO1_GPIO, |
79 | 71 | ||
80 | /* Compact Flash */ | ||
81 | GPIO79_PSKTSEL, | ||
82 | GPIO48_nPOE, | ||
83 | GPIO49_nPWE, | ||
84 | GPIO50_nPIOR, | ||
85 | GPIO51_nPIOW, | ||
86 | GPIO85_nPCE_1, | ||
87 | GPIO54_nPCE_2, | ||
88 | GPIO55_nPREG, | ||
89 | GPIO56_nPWAIT, | ||
90 | GPIO57_nIOIS16, | ||
91 | GPIO120_GPIO, /* Buff ctrl */ | ||
92 | GPIO108_GPIO, /* Power ctrl */ | ||
93 | GPIO82_GPIO, /* Reset */ | ||
94 | GPIO53_GPIO, /* SG2_S0_GPIO_DETECT */ | ||
95 | |||
96 | /* MMC */ | 72 | /* MMC */ |
97 | GPIO32_MMC_CLK, | 73 | GPIO32_MMC_CLK, |
98 | GPIO112_MMC_CMD, | 74 | GPIO112_MMC_CMD, |
@@ -100,49 +76,44 @@ static unsigned long stargate2_pin_config[] __initdata = { | |||
100 | GPIO109_MMC_DAT_1, | 76 | GPIO109_MMC_DAT_1, |
101 | GPIO110_MMC_DAT_2, | 77 | GPIO110_MMC_DAT_2, |
102 | GPIO111_MMC_DAT_3, | 78 | GPIO111_MMC_DAT_3, |
103 | GPIO90_GPIO, /* nSD detect */ | ||
104 | GPIO89_GPIO, /* SD_POWER_ENABLE */ | ||
105 | 79 | ||
106 | /* Bluetooth */ | 80 | /* 802.15.4 radio - driver out of mainline */ |
107 | GPIO81_GPIO, /* reset */ | 81 | GPIO22_GPIO, /* CC_RSTN */ |
108 | 82 | GPIO114_GPIO, /* CC_FIFO */ | |
109 | /* cc2420 802.15.4 radio */ | 83 | GPIO116_GPIO, /* CC_CCA */ |
110 | GPIO22_GPIO, /* CC_RSTN (out)*/ | 84 | GPIO0_GPIO, /* CC_FIFOP */ |
111 | GPIO114_GPIO, /* CC_FIFO (in) */ | 85 | GPIO16_GPIO, /* CCSFD */ |
112 | GPIO116_GPIO, /* CC_CCA (in) */ | 86 | GPIO115_GPIO, /* Power enable */ |
113 | GPIO0_GPIO, /* CC_FIFOP (in) */ | ||
114 | GPIO16_GPIO, /* CCSFD (in) */ | ||
115 | GPIO39_GPIO, /* CSn (out) */ | ||
116 | 87 | ||
117 | /* I2C */ | 88 | /* I2C */ |
118 | GPIO117_I2C_SCL, | 89 | GPIO117_I2C_SCL, |
119 | GPIO118_I2C_SDA, | 90 | GPIO118_I2C_SDA, |
120 | 91 | ||
121 | /* SSP 3 - 802.15.4 radio */ | 92 | /* SSP 3 - 802.15.4 radio */ |
122 | GPIO39_GPIO, /* chip select */ | 93 | GPIO39_GPIO, /* Chip Select */ |
123 | GPIO34_SSP3_SCLK, | 94 | GPIO34_SSP3_SCLK, |
124 | GPIO35_SSP3_TXD, | 95 | GPIO35_SSP3_TXD, |
125 | GPIO41_SSP3_RXD, | 96 | GPIO41_SSP3_RXD, |
126 | 97 | ||
127 | /* SSP 2 */ | 98 | /* SSP 2 to daughter boards */ |
128 | GPIO11_SSP2_RXD, | 99 | GPIO11_SSP2_RXD, |
129 | GPIO38_SSP2_TXD, | 100 | GPIO38_SSP2_TXD, |
130 | GPIO36_SSP2_SCLK, | 101 | GPIO36_SSP2_SCLK, |
131 | GPIO37_GPIO, /* chip select */ | 102 | GPIO37_GPIO, /* chip select */ |
132 | 103 | ||
133 | /* SSP 1 */ | 104 | /* SSP 1 - to daughter boards */ |
134 | GPIO26_SSP1_RXD, | 105 | GPIO24_GPIO, /* Chip Select */ |
135 | GPIO25_SSP1_TXD, | ||
136 | GPIO23_SSP1_SCLK, | 106 | GPIO23_SSP1_SCLK, |
137 | GPIO24_GPIO, /* chip select */ | 107 | GPIO25_SSP1_TXD, |
108 | GPIO26_SSP1_RXD, | ||
138 | 109 | ||
139 | /* BTUART */ | 110 | /* BTUART Basic Connector*/ |
140 | GPIO42_BTUART_RXD, | 111 | GPIO42_BTUART_RXD, |
141 | GPIO43_BTUART_TXD, | 112 | GPIO43_BTUART_TXD, |
142 | GPIO44_BTUART_CTS, | 113 | GPIO44_BTUART_CTS, |
143 | GPIO45_BTUART_RTS, | 114 | GPIO45_BTUART_RTS, |
144 | 115 | ||
145 | /* STUART */ | 116 | /* STUART - IM2 via debug board not sure on SG2*/ |
146 | GPIO46_STUART_RXD, | 117 | GPIO46_STUART_RXD, |
147 | GPIO47_STUART_TXD, | 118 | GPIO47_STUART_TXD, |
148 | 119 | ||
@@ -150,47 +121,17 @@ static unsigned long stargate2_pin_config[] __initdata = { | |||
150 | GPIO96_GPIO, /* accelerometer interrupt */ | 121 | GPIO96_GPIO, /* accelerometer interrupt */ |
151 | GPIO99_GPIO, /* ADC interrupt */ | 122 | GPIO99_GPIO, /* ADC interrupt */ |
152 | 123 | ||
153 | /* Connector pins specified as gpios */ | ||
154 | GPIO94_GPIO, /* large basic connector pin 14 */ | ||
155 | GPIO10_GPIO, /* large basic connector pin 23 */ | ||
156 | |||
157 | /* SHT15 */ | 124 | /* SHT15 */ |
158 | GPIO100_GPIO, | 125 | GPIO100_GPIO, |
159 | GPIO98_GPIO, | 126 | GPIO98_GPIO, |
160 | }; | ||
161 | 127 | ||
162 | /** | 128 | /* Basic sensor board */ |
163 | * stargate2_reset_bluetooth() reset the bluecore to ensure consistent state | 129 | GPIO96_GPIO, /* accelerometer interrupt */ |
164 | **/ | 130 | GPIO99_GPIO, /* ADC interrupt */ |
165 | static int stargate2_reset_bluetooth(void) | ||
166 | { | ||
167 | int err; | ||
168 | err = gpio_request(SG2_BT_RESET, "SG2_BT_RESET"); | ||
169 | if (err) { | ||
170 | printk(KERN_ERR "Could not get gpio for bluetooth reset \n"); | ||
171 | return err; | ||
172 | } | ||
173 | gpio_direction_output(SG2_BT_RESET, 1); | ||
174 | mdelay(5); | ||
175 | /* now reset it - 5 msec minimum */ | ||
176 | gpio_set_value(SG2_BT_RESET, 0); | ||
177 | mdelay(10); | ||
178 | gpio_set_value(SG2_BT_RESET, 1); | ||
179 | gpio_free(SG2_BT_RESET); | ||
180 | return 0; | ||
181 | } | ||
182 | 131 | ||
183 | static struct led_info stargate2_leds[] = { | 132 | /* Connector pins specified as gpios */ |
184 | { | 133 | GPIO94_GPIO, /* large basic connector pin 14 */ |
185 | .name = "sg2:red", | 134 | GPIO10_GPIO, /* large basic connector pin 23 */ |
186 | .flags = DA9030_LED_RATE_ON, | ||
187 | }, { | ||
188 | .name = "sg2:blue", | ||
189 | .flags = DA9030_LED_RATE_ON, | ||
190 | }, { | ||
191 | .name = "sg2:green", | ||
192 | .flags = DA9030_LED_RATE_ON, | ||
193 | }, | ||
194 | }; | 135 | }; |
195 | 136 | ||
196 | static struct sht15_platform_data platform_data_sht15 = { | 137 | static struct sht15_platform_data platform_data_sht15 = { |
@@ -352,20 +293,184 @@ static struct regulator_init_data stargate2_ldo_init_data[] = { | |||
352 | }, | 293 | }, |
353 | }; | 294 | }; |
354 | 295 | ||
355 | static struct da903x_subdev_info stargate2_da9030_subdevs[] = { | 296 | static struct mtd_partition stargate2flash_partitions[] = { |
356 | { | 297 | { |
357 | .name = "da903x-led", | 298 | .name = "Bootloader", |
358 | .id = DA9030_ID_LED_2, | 299 | .size = 0x00040000, |
359 | .platform_data = &stargate2_leds[0], | 300 | .offset = 0, |
301 | .mask_flags = 0, | ||
360 | }, { | 302 | }, { |
361 | .name = "da903x-led", | 303 | .name = "Kernel", |
362 | .id = DA9030_ID_LED_3, | 304 | .size = 0x00200000, |
363 | .platform_data = &stargate2_leds[2], | 305 | .offset = 0x00040000, |
306 | .mask_flags = 0 | ||
364 | }, { | 307 | }, { |
365 | .name = "da903x-led", | 308 | .name = "Filesystem", |
366 | .id = DA9030_ID_LED_4, | 309 | .size = 0x01DC0000, |
367 | .platform_data = &stargate2_leds[1], | 310 | .offset = 0x00240000, |
311 | .mask_flags = 0 | ||
312 | }, | ||
313 | }; | ||
314 | |||
315 | static struct resource flash_resources = { | ||
316 | .start = PXA_CS0_PHYS, | ||
317 | .end = PXA_CS0_PHYS + SZ_32M - 1, | ||
318 | .flags = IORESOURCE_MEM, | ||
319 | }; | ||
320 | |||
321 | static struct flash_platform_data stargate2_flash_data = { | ||
322 | .map_name = "cfi_probe", | ||
323 | .parts = stargate2flash_partitions, | ||
324 | .nr_parts = ARRAY_SIZE(stargate2flash_partitions), | ||
325 | .name = "PXA27xOnChipROM", | ||
326 | .width = 2, | ||
327 | }; | ||
328 | |||
329 | static struct platform_device stargate2_flash_device = { | ||
330 | .name = "pxa2xx-flash", | ||
331 | .id = 0, | ||
332 | .dev = { | ||
333 | .platform_data = &stargate2_flash_data, | ||
334 | }, | ||
335 | .resource = &flash_resources, | ||
336 | .num_resources = 1, | ||
337 | }; | ||
338 | |||
339 | static struct pxa2xx_spi_master pxa_ssp_master_0_info = { | ||
340 | .num_chipselect = 1, | ||
341 | }; | ||
342 | |||
343 | static struct pxa2xx_spi_master pxa_ssp_master_1_info = { | ||
344 | .num_chipselect = 1, | ||
345 | }; | ||
346 | |||
347 | static struct pxa2xx_spi_master pxa_ssp_master_2_info = { | ||
348 | .num_chipselect = 1, | ||
349 | }; | ||
350 | |||
351 | /* An upcoming kernel change will scrap SFRM usage so these | ||
352 | * drivers have been moved to use gpio's via cs_control */ | ||
353 | static struct pxa2xx_spi_chip staccel_chip_info = { | ||
354 | .tx_threshold = 8, | ||
355 | .rx_threshold = 8, | ||
356 | .dma_burst_size = 8, | ||
357 | .timeout = 235, | ||
358 | .gpio_cs = 24, | ||
359 | }; | ||
360 | |||
361 | static struct pxa2xx_spi_chip cc2420_info = { | ||
362 | .tx_threshold = 8, | ||
363 | .rx_threshold = 8, | ||
364 | .dma_burst_size = 8, | ||
365 | .timeout = 235, | ||
366 | .gpio_cs = 39, | ||
367 | }; | ||
368 | |||
369 | static struct spi_board_info spi_board_info[] __initdata = { | ||
370 | { | ||
371 | .modalias = "lis3l02dq", | ||
372 | .max_speed_hz = 8000000,/* 8MHz max spi frequency at 3V */ | ||
373 | .bus_num = 1, | ||
374 | .chip_select = 0, | ||
375 | .controller_data = &staccel_chip_info, | ||
376 | .irq = IRQ_GPIO(96), | ||
368 | }, { | 377 | }, { |
378 | .modalias = "cc2420", | ||
379 | .max_speed_hz = 6500000, | ||
380 | .bus_num = 3, | ||
381 | .chip_select = 0, | ||
382 | .controller_data = &cc2420_info, | ||
383 | }, | ||
384 | }; | ||
385 | |||
386 | static void sg2_udc_command(int cmd) | ||
387 | { | ||
388 | switch (cmd) { | ||
389 | case PXA2XX_UDC_CMD_CONNECT: | ||
390 | UP2OCR |= UP2OCR_HXOE | UP2OCR_DPPUE | UP2OCR_DPPUBE; | ||
391 | break; | ||
392 | case PXA2XX_UDC_CMD_DISCONNECT: | ||
393 | UP2OCR &= ~(UP2OCR_HXOE | UP2OCR_DPPUE | UP2OCR_DPPUBE); | ||
394 | break; | ||
395 | } | ||
396 | } | ||
397 | |||
398 | static struct i2c_pxa_platform_data i2c_pwr_pdata = { | ||
399 | .fast_mode = 1, | ||
400 | }; | ||
401 | |||
402 | static struct i2c_pxa_platform_data i2c_pdata = { | ||
403 | .fast_mode = 1, | ||
404 | }; | ||
405 | |||
406 | static void __init imote2_stargate2_init(void) | ||
407 | { | ||
408 | |||
409 | pxa2xx_mfp_config(ARRAY_AND_SIZE(sg2_im2_unified_pin_config)); | ||
410 | |||
411 | pxa_set_ffuart_info(NULL); | ||
412 | pxa_set_btuart_info(NULL); | ||
413 | pxa_set_stuart_info(NULL); | ||
414 | |||
415 | pxa2xx_set_spi_info(1, &pxa_ssp_master_0_info); | ||
416 | pxa2xx_set_spi_info(2, &pxa_ssp_master_1_info); | ||
417 | pxa2xx_set_spi_info(3, &pxa_ssp_master_2_info); | ||
418 | spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info)); | ||
419 | |||
420 | |||
421 | pxa27x_set_i2c_power_info(&i2c_pwr_pdata); | ||
422 | pxa_set_i2c_info(&i2c_pdata); | ||
423 | } | ||
424 | |||
425 | #ifdef CONFIG_MACH_INTELMOTE2 | ||
426 | /* As the the imote2 doesn't currently have a conventional SD slot | ||
427 | * there is no option to hotplug cards, making all this rather simple | ||
428 | */ | ||
429 | static int imote2_mci_get_ro(struct device *dev) | ||
430 | { | ||
431 | return 0; | ||
432 | } | ||
433 | |||
434 | /* Rather simple case as hotplugging not possible */ | ||
435 | static struct pxamci_platform_data imote2_mci_platform_data = { | ||
436 | .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, /* default anyway */ | ||
437 | .get_ro = imote2_mci_get_ro, | ||
438 | .gpio_card_detect = -1, | ||
439 | .gpio_card_ro = -1, | ||
440 | .gpio_power = -1, | ||
441 | }; | ||
442 | |||
443 | static struct gpio_led imote2_led_pins[] = { | ||
444 | { | ||
445 | .name = "imote2:red", | ||
446 | .gpio = 103, | ||
447 | .active_low = 1, | ||
448 | }, { | ||
449 | .name = "imote2:green", | ||
450 | .gpio = 104, | ||
451 | .active_low = 1, | ||
452 | }, { | ||
453 | .name = "imote2:blue", | ||
454 | .gpio = 105, | ||
455 | .active_low = 1, | ||
456 | }, | ||
457 | }; | ||
458 | |||
459 | static struct gpio_led_platform_data imote2_led_data = { | ||
460 | .num_leds = ARRAY_SIZE(imote2_led_pins), | ||
461 | .leds = imote2_led_pins, | ||
462 | }; | ||
463 | |||
464 | static struct platform_device imote2_leds = { | ||
465 | .name = "leds-gpio", | ||
466 | .id = -1, | ||
467 | .dev = { | ||
468 | .platform_data = &imote2_led_data, | ||
469 | }, | ||
470 | }; | ||
471 | |||
472 | static struct da903x_subdev_info imote2_da9030_subdevs[] = { | ||
473 | { | ||
369 | .name = "da903x-regulator", | 474 | .name = "da903x-regulator", |
370 | .id = DA9030_ID_LDO2, | 475 | .id = DA9030_ID_LDO2, |
371 | .platform_data = &stargate2_ldo_init_data[vcc_bbio], | 476 | .platform_data = &stargate2_ldo_init_data[vcc_bbio], |
@@ -428,9 +533,121 @@ static struct da903x_subdev_info stargate2_da9030_subdevs[] = { | |||
428 | }, | 533 | }, |
429 | }; | 534 | }; |
430 | 535 | ||
431 | static struct da903x_platform_data stargate2_da9030_pdata = { | 536 | static struct da903x_platform_data imote2_da9030_pdata = { |
432 | .num_subdevs = ARRAY_SIZE(stargate2_da9030_subdevs), | 537 | .num_subdevs = ARRAY_SIZE(imote2_da9030_subdevs), |
433 | .subdevs = stargate2_da9030_subdevs, | 538 | .subdevs = imote2_da9030_subdevs, |
539 | }; | ||
540 | |||
541 | static struct i2c_board_info __initdata imote2_pwr_i2c_board_info[] = { | ||
542 | { | ||
543 | .type = "da9030", | ||
544 | .addr = 0x49, | ||
545 | .platform_data = &imote2_da9030_pdata, | ||
546 | .irq = gpio_to_irq(1), | ||
547 | }, | ||
548 | }; | ||
549 | |||
550 | static struct i2c_board_info __initdata imote2_i2c_board_info[] = { | ||
551 | { /* UCAM sensor board */ | ||
552 | .type = "max1239", | ||
553 | .addr = 0x35, | ||
554 | }, { /* ITS400 Sensor board only */ | ||
555 | .type = "max1363", | ||
556 | .addr = 0x34, | ||
557 | /* Through a nand gate - Also beware, on V2 sensor board the | ||
558 | * pull up resistors are missing. | ||
559 | */ | ||
560 | .irq = IRQ_GPIO(99), | ||
561 | }, { /* ITS400 Sensor board only */ | ||
562 | .type = "tsl2561", | ||
563 | .addr = 0x49, | ||
564 | /* Through a nand gate - Also beware, on V2 sensor board the | ||
565 | * pull up resistors are missing. | ||
566 | */ | ||
567 | .irq = IRQ_GPIO(99), | ||
568 | }, { /* ITS400 Sensor board only */ | ||
569 | .type = "tmp175", | ||
570 | .addr = 0x4A, | ||
571 | .irq = IRQ_GPIO(96), | ||
572 | }, { /* IMB400 Multimedia board */ | ||
573 | .type = "wm8940", | ||
574 | .addr = 0x1A, | ||
575 | }, | ||
576 | }; | ||
577 | |||
578 | static unsigned long imote2_pin_config[] __initdata = { | ||
579 | |||
580 | /* Button */ | ||
581 | GPIO91_GPIO, | ||
582 | |||
583 | /* LEDS */ | ||
584 | GPIO103_GPIO, /* red led */ | ||
585 | GPIO104_GPIO, /* green led */ | ||
586 | GPIO105_GPIO, /* blue led */ | ||
587 | }; | ||
588 | |||
589 | static struct pxa2xx_udc_mach_info imote2_udc_info __initdata = { | ||
590 | .udc_command = sg2_udc_command, | ||
591 | }; | ||
592 | |||
593 | static struct platform_device *imote2_devices[] = { | ||
594 | &stargate2_flash_device, | ||
595 | &imote2_leds, | ||
596 | &sht15, | ||
597 | }; | ||
598 | |||
599 | static void __init imote2_init(void) | ||
600 | { | ||
601 | pxa2xx_mfp_config(ARRAY_AND_SIZE(imote2_pin_config)); | ||
602 | |||
603 | imote2_stargate2_init(); | ||
604 | |||
605 | platform_add_devices(imote2_devices, ARRAY_SIZE(imote2_devices)); | ||
606 | |||
607 | i2c_register_board_info(0, imote2_i2c_board_info, | ||
608 | ARRAY_SIZE(imote2_i2c_board_info)); | ||
609 | i2c_register_board_info(1, imote2_pwr_i2c_board_info, | ||
610 | ARRAY_SIZE(imote2_pwr_i2c_board_info)); | ||
611 | |||
612 | pxa_set_mci_info(&imote2_mci_platform_data); | ||
613 | pxa_set_udc_info(&imote2_udc_info); | ||
614 | } | ||
615 | #endif | ||
616 | |||
617 | #ifdef CONFIG_MACH_STARGATE2 | ||
618 | |||
619 | static unsigned long stargate2_pin_config[] __initdata = { | ||
620 | |||
621 | GPIO15_nCS_1, /* SRAM */ | ||
622 | /* SMC91x */ | ||
623 | GPIO80_nCS_4, | ||
624 | GPIO40_GPIO, /*cable detect?*/ | ||
625 | |||
626 | /* Button */ | ||
627 | GPIO91_GPIO | WAKEUP_ON_LEVEL_HIGH, | ||
628 | |||
629 | /* Compact Flash */ | ||
630 | GPIO79_PSKTSEL, | ||
631 | GPIO48_nPOE, | ||
632 | GPIO49_nPWE, | ||
633 | GPIO50_nPIOR, | ||
634 | GPIO51_nPIOW, | ||
635 | GPIO85_nPCE_1, | ||
636 | GPIO54_nPCE_2, | ||
637 | GPIO55_nPREG, | ||
638 | GPIO56_nPWAIT, | ||
639 | GPIO57_nIOIS16, | ||
640 | GPIO120_GPIO, /* Buff ctrl */ | ||
641 | GPIO108_GPIO, /* Power ctrl */ | ||
642 | GPIO82_GPIO, /* Reset */ | ||
643 | GPIO53_GPIO, /* SG2_S0_GPIO_DETECT */ | ||
644 | |||
645 | /* MMC not shared with imote2 */ | ||
646 | GPIO90_GPIO, /* nSD detect */ | ||
647 | GPIO89_GPIO, /* SD_POWER_ENABLE */ | ||
648 | |||
649 | /* Bluetooth */ | ||
650 | GPIO81_GPIO, /* reset */ | ||
434 | }; | 651 | }; |
435 | 652 | ||
436 | static struct resource smc91x_resources[] = { | 653 | static struct resource smc91x_resources[] = { |
@@ -463,7 +680,6 @@ static struct platform_device smc91x_device = { | |||
463 | }; | 680 | }; |
464 | 681 | ||
465 | 682 | ||
466 | |||
467 | /* | 683 | /* |
468 | * The card detect interrupt isn't debounced so we delay it by 250ms | 684 | * The card detect interrupt isn't debounced so we delay it by 250ms |
469 | * to give the card a chance to fully insert / eject. | 685 | * to give the card a chance to fully insert / eject. |
@@ -532,48 +748,6 @@ static struct pxamci_platform_data stargate2_mci_platform_data = { | |||
532 | .exit = stargate2_mci_exit, | 748 | .exit = stargate2_mci_exit, |
533 | }; | 749 | }; |
534 | 750 | ||
535 | static struct mtd_partition stargate2flash_partitions[] = { | ||
536 | { | ||
537 | .name = "Bootloader", | ||
538 | .size = 0x00040000, | ||
539 | .offset = 0, | ||
540 | .mask_flags = 0, | ||
541 | }, { | ||
542 | .name = "Kernel", | ||
543 | .size = 0x00200000, | ||
544 | .offset = 0x00040000, | ||
545 | .mask_flags = 0 | ||
546 | }, { | ||
547 | .name = "Filesystem", | ||
548 | .size = 0x01DC0000, | ||
549 | .offset = 0x00240000, | ||
550 | .mask_flags = 0 | ||
551 | }, | ||
552 | }; | ||
553 | |||
554 | static struct resource flash_resources = { | ||
555 | .start = PXA_CS0_PHYS, | ||
556 | .end = PXA_CS0_PHYS + SZ_32M - 1, | ||
557 | .flags = IORESOURCE_MEM, | ||
558 | }; | ||
559 | |||
560 | static struct flash_platform_data stargate2_flash_data = { | ||
561 | .map_name = "cfi_probe", | ||
562 | .parts = stargate2flash_partitions, | ||
563 | .nr_parts = ARRAY_SIZE(stargate2flash_partitions), | ||
564 | .name = "PXA27xOnChipROM", | ||
565 | .width = 2, | ||
566 | }; | ||
567 | |||
568 | static struct platform_device stargate2_flash_device = { | ||
569 | .name = "pxa2xx-flash", | ||
570 | .id = 0, | ||
571 | .dev = { | ||
572 | .platform_data = &stargate2_flash_data, | ||
573 | }, | ||
574 | .resource = &flash_resources, | ||
575 | .num_resources = 1, | ||
576 | }; | ||
577 | 751 | ||
578 | /* | 752 | /* |
579 | * SRAM - The Stargate 2 has 32MB of SRAM. | 753 | * SRAM - The Stargate 2 has 32MB of SRAM. |
@@ -616,6 +790,129 @@ static struct at24_platform_data pca9500_eeprom_pdata = { | |||
616 | .page_size = 4, | 790 | .page_size = 4, |
617 | }; | 791 | }; |
618 | 792 | ||
793 | /** | ||
794 | * stargate2_reset_bluetooth() reset the bluecore to ensure consistent state | ||
795 | **/ | ||
796 | static int stargate2_reset_bluetooth(void) | ||
797 | { | ||
798 | int err; | ||
799 | err = gpio_request(SG2_BT_RESET, "SG2_BT_RESET"); | ||
800 | if (err) { | ||
801 | printk(KERN_ERR "Could not get gpio for bluetooth reset\n"); | ||
802 | return err; | ||
803 | } | ||
804 | gpio_direction_output(SG2_BT_RESET, 1); | ||
805 | mdelay(5); | ||
806 | /* now reset it - 5 msec minimum */ | ||
807 | gpio_set_value(SG2_BT_RESET, 0); | ||
808 | mdelay(10); | ||
809 | gpio_set_value(SG2_BT_RESET, 1); | ||
810 | gpio_free(SG2_BT_RESET); | ||
811 | return 0; | ||
812 | } | ||
813 | |||
814 | static struct led_info stargate2_leds[] = { | ||
815 | { | ||
816 | .name = "sg2:red", | ||
817 | .flags = DA9030_LED_RATE_ON, | ||
818 | }, { | ||
819 | .name = "sg2:blue", | ||
820 | .flags = DA9030_LED_RATE_ON, | ||
821 | }, { | ||
822 | .name = "sg2:green", | ||
823 | .flags = DA9030_LED_RATE_ON, | ||
824 | }, | ||
825 | }; | ||
826 | |||
827 | static struct da903x_subdev_info stargate2_da9030_subdevs[] = { | ||
828 | { | ||
829 | .name = "da903x-led", | ||
830 | .id = DA9030_ID_LED_2, | ||
831 | .platform_data = &stargate2_leds[0], | ||
832 | }, { | ||
833 | .name = "da903x-led", | ||
834 | .id = DA9030_ID_LED_3, | ||
835 | .platform_data = &stargate2_leds[2], | ||
836 | }, { | ||
837 | .name = "da903x-led", | ||
838 | .id = DA9030_ID_LED_4, | ||
839 | .platform_data = &stargate2_leds[1], | ||
840 | }, { | ||
841 | .name = "da903x-regulator", | ||
842 | .id = DA9030_ID_LDO2, | ||
843 | .platform_data = &stargate2_ldo_init_data[vcc_bbio], | ||
844 | }, { | ||
845 | .name = "da903x-regulator", | ||
846 | .id = DA9030_ID_LDO3, | ||
847 | .platform_data = &stargate2_ldo_init_data[vcc_bb], | ||
848 | }, { | ||
849 | .name = "da903x-regulator", | ||
850 | .id = DA9030_ID_LDO4, | ||
851 | .platform_data = &stargate2_ldo_init_data[vcc_pxa_flash], | ||
852 | }, { | ||
853 | .name = "da903x-regulator", | ||
854 | .id = DA9030_ID_LDO5, | ||
855 | .platform_data = &stargate2_ldo_init_data[vcc_cc2420], | ||
856 | }, { | ||
857 | .name = "da903x-regulator", | ||
858 | .id = DA9030_ID_LDO6, | ||
859 | .platform_data = &stargate2_ldo_init_data[vcc_vref], | ||
860 | }, { | ||
861 | .name = "da903x-regulator", | ||
862 | .id = DA9030_ID_LDO7, | ||
863 | .platform_data = &stargate2_ldo_init_data[vcc_sram_ext], | ||
864 | }, { | ||
865 | .name = "da903x-regulator", | ||
866 | .id = DA9030_ID_LDO8, | ||
867 | .platform_data = &stargate2_ldo_init_data[vcc_mica], | ||
868 | }, { | ||
869 | .name = "da903x-regulator", | ||
870 | .id = DA9030_ID_LDO9, | ||
871 | .platform_data = &stargate2_ldo_init_data[vcc_bt], | ||
872 | }, { | ||
873 | .name = "da903x-regulator", | ||
874 | .id = DA9030_ID_LDO10, | ||
875 | .platform_data = &stargate2_ldo_init_data[vcc_sensor_1_8], | ||
876 | }, { | ||
877 | .name = "da903x-regulator", | ||
878 | .id = DA9030_ID_LDO11, | ||
879 | .platform_data = &stargate2_ldo_init_data[vcc_sensor_3], | ||
880 | }, { | ||
881 | .name = "da903x-regulator", | ||
882 | .id = DA9030_ID_LDO12, | ||
883 | .platform_data = &stargate2_ldo_init_data[vcc_lcd], | ||
884 | }, { | ||
885 | .name = "da903x-regulator", | ||
886 | .id = DA9030_ID_LDO15, | ||
887 | .platform_data = &stargate2_ldo_init_data[vcc_pxa_pll], | ||
888 | }, { | ||
889 | .name = "da903x-regulator", | ||
890 | .id = DA9030_ID_LDO17, | ||
891 | .platform_data = &stargate2_ldo_init_data[vcc_pxa_usim], | ||
892 | }, { | ||
893 | .name = "da903x-regulator", /*pxa vcc i/o and cc2420 vcc i/o */ | ||
894 | .id = DA9030_ID_LDO18, | ||
895 | .platform_data = &stargate2_ldo_init_data[vcc_io], | ||
896 | }, { | ||
897 | .name = "da903x-regulator", | ||
898 | .id = DA9030_ID_LDO19, | ||
899 | .platform_data = &stargate2_ldo_init_data[vcc_pxa_mem], | ||
900 | }, | ||
901 | }; | ||
902 | |||
903 | static struct da903x_platform_data stargate2_da9030_pdata = { | ||
904 | .num_subdevs = ARRAY_SIZE(stargate2_da9030_subdevs), | ||
905 | .subdevs = stargate2_da9030_subdevs, | ||
906 | }; | ||
907 | |||
908 | static struct i2c_board_info __initdata stargate2_pwr_i2c_board_info[] = { | ||
909 | { | ||
910 | .type = "da9030", | ||
911 | .addr = 0x49, | ||
912 | .platform_data = &stargate2_da9030_pdata, | ||
913 | .irq = gpio_to_irq(1), | ||
914 | }, | ||
915 | }; | ||
619 | 916 | ||
620 | static struct i2c_board_info __initdata stargate2_i2c_board_info[] = { | 917 | static struct i2c_board_info __initdata stargate2_i2c_board_info[] = { |
621 | /* Techically this a pca9500 - but it's compatible with the 8574 | 918 | /* Techically this a pca9500 - but it's compatible with the 8574 |
@@ -653,74 +950,6 @@ static struct i2c_board_info __initdata stargate2_i2c_board_info[] = { | |||
653 | }, | 950 | }, |
654 | }; | 951 | }; |
655 | 952 | ||
656 | static struct i2c_board_info __initdata stargate2_pwr_i2c_board_info[] = { | ||
657 | { | ||
658 | .type = "da9030", | ||
659 | .addr = 0x49, | ||
660 | .platform_data = &stargate2_da9030_pdata, | ||
661 | .irq = gpio_to_irq(1), | ||
662 | }, | ||
663 | }; | ||
664 | |||
665 | static struct pxa2xx_spi_master pxa_ssp_master_0_info = { | ||
666 | .num_chipselect = 1, | ||
667 | }; | ||
668 | |||
669 | static struct pxa2xx_spi_master pxa_ssp_master_1_info = { | ||
670 | .num_chipselect = 1, | ||
671 | }; | ||
672 | |||
673 | static struct pxa2xx_spi_master pxa_ssp_master_2_info = { | ||
674 | .num_chipselect = 1, | ||
675 | }; | ||
676 | |||
677 | /* An upcoming kernel change will scrap SFRM usage so these | ||
678 | * drivers have been moved to use gpio's via cs_control */ | ||
679 | static struct pxa2xx_spi_chip staccel_chip_info = { | ||
680 | .tx_threshold = 8, | ||
681 | .rx_threshold = 8, | ||
682 | .dma_burst_size = 8, | ||
683 | .timeout = 235, | ||
684 | .gpio_cs = 24, | ||
685 | }; | ||
686 | |||
687 | static struct pxa2xx_spi_chip cc2420_info = { | ||
688 | .tx_threshold = 8, | ||
689 | .rx_threshold = 8, | ||
690 | .dma_burst_size = 8, | ||
691 | .timeout = 235, | ||
692 | .gpio_cs = 39, | ||
693 | }; | ||
694 | |||
695 | static struct spi_board_info spi_board_info[] __initdata = { | ||
696 | { | ||
697 | .modalias = "lis3l02dq", | ||
698 | .max_speed_hz = 8000000,/* 8MHz max spi frequency at 3V */ | ||
699 | .bus_num = 1, | ||
700 | .chip_select = 0, | ||
701 | .controller_data = &staccel_chip_info, | ||
702 | .irq = IRQ_GPIO(96), | ||
703 | }, { | ||
704 | .modalias = "cc2420", | ||
705 | .max_speed_hz = 6500000, | ||
706 | .bus_num = 3, | ||
707 | .chip_select = 0, | ||
708 | .controller_data = &cc2420_info, | ||
709 | }, | ||
710 | }; | ||
711 | |||
712 | static void sg2_udc_command(int cmd) | ||
713 | { | ||
714 | switch (cmd) { | ||
715 | case PXA2XX_UDC_CMD_CONNECT: | ||
716 | UP2OCR |= UP2OCR_HXOE | UP2OCR_DPPUE | UP2OCR_DPPUBE; | ||
717 | break; | ||
718 | case PXA2XX_UDC_CMD_DISCONNECT: | ||
719 | UP2OCR &= ~(UP2OCR_HXOE | UP2OCR_DPPUE | UP2OCR_DPPUBE); | ||
720 | break; | ||
721 | } | ||
722 | } | ||
723 | |||
724 | /* Board doesn't support cable detection - so always lie and say | 953 | /* Board doesn't support cable detection - so always lie and say |
725 | * something is there. | 954 | * something is there. |
726 | */ | 955 | */ |
@@ -741,14 +970,6 @@ static struct platform_device *stargate2_devices[] = { | |||
741 | &sht15, | 970 | &sht15, |
742 | }; | 971 | }; |
743 | 972 | ||
744 | static struct i2c_pxa_platform_data i2c_pwr_pdata = { | ||
745 | .fast_mode = 1, | ||
746 | }; | ||
747 | |||
748 | static struct i2c_pxa_platform_data i2c_pdata = { | ||
749 | .fast_mode = 1, | ||
750 | }; | ||
751 | |||
752 | static void __init stargate2_init(void) | 973 | static void __init stargate2_init(void) |
753 | { | 974 | { |
754 | /* This is probably a board specific hack as this must be set | 975 | /* This is probably a board specific hack as this must be set |
@@ -757,22 +978,13 @@ static void __init stargate2_init(void) | |||
757 | 978 | ||
758 | pxa2xx_mfp_config(ARRAY_AND_SIZE(stargate2_pin_config)); | 979 | pxa2xx_mfp_config(ARRAY_AND_SIZE(stargate2_pin_config)); |
759 | 980 | ||
760 | pxa_set_ffuart_info(NULL); | 981 | imote2_stargate2_init(); |
761 | pxa_set_btuart_info(NULL); | ||
762 | pxa_set_stuart_info(NULL); | ||
763 | 982 | ||
764 | platform_add_devices(ARRAY_AND_SIZE(stargate2_devices)); | 983 | platform_add_devices(ARRAY_AND_SIZE(stargate2_devices)); |
765 | 984 | ||
766 | pxa2xx_set_spi_info(1, &pxa_ssp_master_0_info); | ||
767 | pxa2xx_set_spi_info(2, &pxa_ssp_master_1_info); | ||
768 | pxa2xx_set_spi_info(3, &pxa_ssp_master_2_info); | ||
769 | spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info)); | ||
770 | |||
771 | i2c_register_board_info(0, ARRAY_AND_SIZE(stargate2_i2c_board_info)); | 985 | i2c_register_board_info(0, ARRAY_AND_SIZE(stargate2_i2c_board_info)); |
772 | i2c_register_board_info(1, | 986 | i2c_register_board_info(1, stargate2_pwr_i2c_board_info, |
773 | ARRAY_AND_SIZE(stargate2_pwr_i2c_board_info)); | 987 | ARRAY_SIZE(stargate2_pwr_i2c_board_info)); |
774 | pxa27x_set_i2c_power_info(&i2c_pwr_pdata); | ||
775 | pxa_set_i2c_info(&i2c_pdata); | ||
776 | 988 | ||
777 | pxa_set_mci_info(&stargate2_mci_platform_data); | 989 | pxa_set_mci_info(&stargate2_mci_platform_data); |
778 | 990 | ||
@@ -780,7 +992,21 @@ static void __init stargate2_init(void) | |||
780 | 992 | ||
781 | stargate2_reset_bluetooth(); | 993 | stargate2_reset_bluetooth(); |
782 | } | 994 | } |
995 | #endif | ||
996 | |||
997 | #ifdef CONFIG_MACH_INTELMOTE2 | ||
998 | MACHINE_START(INTELMOTE2, "IMOTE 2") | ||
999 | .phys_io = 0x40000000, | ||
1000 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | ||
1001 | .map_io = pxa_map_io, | ||
1002 | .init_irq = pxa27x_init_irq, | ||
1003 | .timer = &pxa_timer, | ||
1004 | .init_machine = imote2_init, | ||
1005 | .boot_params = 0xA0000100, | ||
1006 | MACHINE_END | ||
1007 | #endif | ||
783 | 1008 | ||
1009 | #ifdef CONFIG_MACH_STARGATE2 | ||
784 | MACHINE_START(STARGATE2, "Stargate 2") | 1010 | MACHINE_START(STARGATE2, "Stargate 2") |
785 | .phys_io = 0x40000000, | 1011 | .phys_io = 0x40000000, |
786 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | 1012 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, |
@@ -790,3 +1016,4 @@ MACHINE_START(STARGATE2, "Stargate 2") | |||
790 | .init_machine = stargate2_init, | 1016 | .init_machine = stargate2_init, |
791 | .boot_params = 0xA0000100, | 1017 | .boot_params = 0xA0000100, |
792 | MACHINE_END | 1018 | MACHINE_END |
1019 | #endif | ||