Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
stargate2.c
Go to the documentation of this file.
1 /*
2  * linux/arch/arm/mach-pxa/stargate2.c
3  *
4  * Author: Ed C. Epp
5  * Created: Nov 05, 2002
6  * Copyright: Intel Corp.
7  *
8  * Modified 2009: Jonathan Cameron <[email protected]>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License version 2 as
12  * published by the Free Software Foundation.
13  */
14 
15 #include <linux/init.h>
16 #include <linux/device.h>
17 #include <linux/interrupt.h>
18 #include <linux/sched.h>
19 #include <linux/bitops.h>
20 #include <linux/fb.h>
21 #include <linux/delay.h>
22 #include <linux/platform_device.h>
24 #include <linux/mtd/mtd.h>
25 #include <linux/mtd/plat-ram.h>
26 #include <linux/mtd/partitions.h>
27 
28 #include <linux/i2c/pxa-i2c.h>
29 #include <linux/i2c/pcf857x.h>
30 #include <linux/i2c/at24.h>
31 #include <linux/smc91x.h>
32 #include <linux/gpio.h>
33 #include <linux/leds.h>
34 
35 #include <asm/types.h>
36 #include <asm/setup.h>
37 #include <asm/memory.h>
38 #include <asm/mach-types.h>
39 #include <asm/irq.h>
40 
41 #include <asm/mach/arch.h>
42 #include <asm/mach/map.h>
43 #include <asm/mach/irq.h>
44 #include <asm/mach/flash.h>
45 
46 #include <mach/pxa27x.h>
48 #include <mach/udc.h>
49 #include <mach/pxa27x-udc.h>
50 #include <mach/smemc.h>
51 
52 #include <linux/spi/spi.h>
53 #include <linux/spi/pxa2xx_spi.h>
54 #include <linux/mfd/da903x.h>
56 
57 #include "devices.h"
58 #include "generic.h"
59 
60 #define STARGATE_NR_IRQS (IRQ_BOARD_START + 8)
61 
62 /* Bluetooth */
63 #define SG2_BT_RESET 81
64 
65 /* SD */
66 #define SG2_GPIO_nSD_DETECT 90
67 #define SG2_SD_POWER_ENABLE 89
68 
69 static unsigned long sg2_im2_unified_pin_config[] __initdata = {
70  /* Device Identification for wakeup*/
72  /* DA9030 */
73  GPIO1_GPIO,
74 
75  /* MMC */
82 
83  /* 802.15.4 radio - driver out of mainline */
84  GPIO22_GPIO, /* CC_RSTN */
85  GPIO114_GPIO, /* CC_FIFO */
86  GPIO116_GPIO, /* CC_CCA */
87  GPIO0_GPIO, /* CC_FIFOP */
88  GPIO16_GPIO, /* CCSFD */
89  GPIO115_GPIO, /* Power enable */
90 
91  /* I2C */
94 
95  /* SSP 3 - 802.15.4 radio */
96  GPIO39_GPIO, /* Chip Select */
100 
101  /* SSP 2 to daughter boards */
105  GPIO37_GPIO, /* chip select */
106 
107  /* SSP 1 - to daughter boards */
108  GPIO24_GPIO, /* Chip Select */
112 
113  /* BTUART Basic Connector*/
118 
119  /* STUART - IM2 via debug board not sure on SG2*/
122 
123  /* Basic sensor board */
124  GPIO96_GPIO, /* accelerometer interrupt */
125  GPIO99_GPIO, /* ADC interrupt */
126 
127  /* SHT15 */
128  GPIO100_GPIO,
129  GPIO98_GPIO,
130 
131  /* Basic sensor board */
132  GPIO96_GPIO, /* accelerometer interrupt */
133  GPIO99_GPIO, /* ADC interrupt */
134 
135  /* Connector pins specified as gpios */
136  GPIO94_GPIO, /* large basic connector pin 14 */
137  GPIO10_GPIO, /* large basic connector pin 23 */
138 };
139 
140 static struct sht15_platform_data platform_data_sht15 = {
141  .gpio_data = 100,
142  .gpio_sck = 98,
143 };
144 
145 static struct platform_device sht15 = {
146  .name = "sht15",
147  .id = -1,
148  .dev = {
149  .platform_data = &platform_data_sht15,
150  },
151 };
152 
153 static struct regulator_consumer_supply stargate2_sensor_3_con[] = {
154  REGULATOR_SUPPLY("vcc", "sht15"),
155 };
156 
160  /* a mote connector? */
162  /* the CSR bluecore chip */
164  /* The two voltages available to sensor boards */
167  /* directly connected to the pxa27x */
170  vcc_pxa_usim, /* Reference voltage for certain gpios */
173  vcc_pxa_core, /*Dc-Dc buck not yet supported */
176  vcc_bbio, /*not sure!*/
177  vcc_io, /* cc2420 802.15.4 radio and pxa vcc_io ?*/
178 };
179 
180 /* The values of the various regulator constraints are obviously dependent
181  * on exactly what is wired to each ldo. Unfortunately this information is
182  * not generally available. More information has been requested from Xbow.
183  */
184 static struct regulator_init_data stargate2_ldo_init_data[] = {
185  [vcc_bbio] = {
186  .constraints = { /* board default 1.8V */
187  .name = "vcc_bbio",
188  .min_uV = 1800000,
189  .max_uV = 1800000,
190  },
191  },
192  [vcc_bb] = {
193  .constraints = { /* board default 2.8V */
194  .name = "vcc_bb",
195  .min_uV = 2700000,
196  .max_uV = 3000000,
197  },
198  },
199  [vcc_pxa_flash] = {
200  .constraints = {/* default is 1.8V */
201  .name = "vcc_pxa_flash",
202  .min_uV = 1800000,
203  .max_uV = 1800000,
204  },
205  },
206  [vcc_cc2420] = { /* also vcc_io */
207  .constraints = {
208  /* board default is 2.8V */
209  .name = "vcc_cc2420",
210  .min_uV = 2700000,
211  .max_uV = 3300000,
212  },
213  },
214  [vcc_vref] = { /* Reference for what? */
215  .constraints = { /* default 1.8V */
216  .name = "vcc_vref",
217  .min_uV = 1800000,
218  .max_uV = 1800000,
219  },
220  },
221  [vcc_sram_ext] = {
222  .constraints = { /* default 2.8V */
223  .name = "vcc_sram_ext",
224  .min_uV = 2800000,
225  .max_uV = 2800000,
226  },
227  },
228  [vcc_mica] = {
229  .constraints = { /* default 2.8V */
230  .name = "vcc_mica",
231  .min_uV = 2800000,
232  .max_uV = 2800000,
233  },
234  },
235  [vcc_bt] = {
236  .constraints = { /* default 2.8V */
237  .name = "vcc_bt",
238  .min_uV = 2800000,
239  .max_uV = 2800000,
240  },
241  },
242  [vcc_lcd] = {
243  .constraints = { /* default 2.8V */
244  .name = "vcc_lcd",
245  .min_uV = 2700000,
246  .max_uV = 3300000,
247  },
248  },
249  [vcc_io] = { /* Same or higher than everything
250  * bar vccbat and vccusb */
251  .constraints = { /* default 2.8V */
252  .name = "vcc_io",
253  .min_uV = 2692000,
254  .max_uV = 3300000,
255  },
256  },
257  [vcc_sensor_1_8] = {
258  .constraints = { /* default 1.8V */
259  .name = "vcc_sensor_1_8",
260  .min_uV = 1800000,
261  .max_uV = 1800000,
262  },
263  },
264  [vcc_sensor_3] = { /* curiously default 2.8V */
265  .constraints = {
266  .name = "vcc_sensor_3",
267  .min_uV = 2800000,
268  .max_uV = 3000000,
269  },
270  .num_consumer_supplies = ARRAY_SIZE(stargate2_sensor_3_con),
271  .consumer_supplies = stargate2_sensor_3_con,
272  },
273  [vcc_pxa_pll] = { /* 1.17V - 1.43V, default 1.3V*/
274  .constraints = {
275  .name = "vcc_pxa_pll",
276  .min_uV = 1170000,
277  .max_uV = 1430000,
278  },
279  },
280  [vcc_pxa_usim] = {
281  .constraints = { /* default 1.8V */
282  .name = "vcc_pxa_usim",
283  .min_uV = 1710000,
284  .max_uV = 2160000,
285  },
286  },
287  [vcc_pxa_mem] = {
288  .constraints = { /* default 1.8V */
289  .name = "vcc_pxa_mem",
290  .min_uV = 1800000,
291  .max_uV = 1800000,
292  },
293  },
294 };
295 
296 static struct mtd_partition stargate2flash_partitions[] = {
297  {
298  .name = "Bootloader",
299  .size = 0x00040000,
300  .offset = 0,
301  .mask_flags = 0,
302  }, {
303  .name = "Kernel",
304  .size = 0x00200000,
305  .offset = 0x00040000,
306  .mask_flags = 0
307  }, {
308  .name = "Filesystem",
309  .size = 0x01DC0000,
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 = PXA_GPIO_TO_IRQ(96),
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) {
391  break;
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 
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);
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  {
474  .name = "da903x-regulator",
475  .id = DA9030_ID_LDO2,
476  .platform_data = &stargate2_ldo_init_data[vcc_bbio],
477  }, {
478  .name = "da903x-regulator",
479  .id = DA9030_ID_LDO3,
480  .platform_data = &stargate2_ldo_init_data[vcc_bb],
481  }, {
482  .name = "da903x-regulator",
483  .id = DA9030_ID_LDO4,
484  .platform_data = &stargate2_ldo_init_data[vcc_pxa_flash],
485  }, {
486  .name = "da903x-regulator",
487  .id = DA9030_ID_LDO5,
488  .platform_data = &stargate2_ldo_init_data[vcc_cc2420],
489  }, {
490  .name = "da903x-regulator",
491  .id = DA9030_ID_LDO6,
492  .platform_data = &stargate2_ldo_init_data[vcc_vref],
493  }, {
494  .name = "da903x-regulator",
495  .id = DA9030_ID_LDO7,
496  .platform_data = &stargate2_ldo_init_data[vcc_sram_ext],
497  }, {
498  .name = "da903x-regulator",
499  .id = DA9030_ID_LDO8,
500  .platform_data = &stargate2_ldo_init_data[vcc_mica],
501  }, {
502  .name = "da903x-regulator",
503  .id = DA9030_ID_LDO9,
504  .platform_data = &stargate2_ldo_init_data[vcc_bt],
505  }, {
506  .name = "da903x-regulator",
507  .id = DA9030_ID_LDO10,
508  .platform_data = &stargate2_ldo_init_data[vcc_sensor_1_8],
509  }, {
510  .name = "da903x-regulator",
511  .id = DA9030_ID_LDO11,
512  .platform_data = &stargate2_ldo_init_data[vcc_sensor_3],
513  }, {
514  .name = "da903x-regulator",
515  .id = DA9030_ID_LDO12,
516  .platform_data = &stargate2_ldo_init_data[vcc_lcd],
517  }, {
518  .name = "da903x-regulator",
519  .id = DA9030_ID_LDO15,
520  .platform_data = &stargate2_ldo_init_data[vcc_pxa_pll],
521  }, {
522  .name = "da903x-regulator",
523  .id = DA9030_ID_LDO17,
524  .platform_data = &stargate2_ldo_init_data[vcc_pxa_usim],
525  }, {
526  .name = "da903x-regulator", /*pxa vcc i/o and cc2420 vcc i/o */
527  .id = DA9030_ID_LDO18,
528  .platform_data = &stargate2_ldo_init_data[vcc_io],
529  }, {
530  .name = "da903x-regulator",
531  .id = DA9030_ID_LDO19,
532  .platform_data = &stargate2_ldo_init_data[vcc_pxa_mem],
533  },
534 };
535 
536 static struct da903x_platform_data imote2_da9030_pdata = {
537  .num_subdevs = ARRAY_SIZE(imote2_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 = PXA_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 = PXA_GPIO_TO_IRQ(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 = PXA_GPIO_TO_IRQ(99),
568  }, { /* ITS400 Sensor board only */
569  .type = "tmp175",
570  .addr = 0x4A,
571  .irq = PXA_GPIO_TO_IRQ(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_audio_device = {
594  .name = "imote2-audio",
595  .id = -1,
596 };
597 
598 static struct platform_device *imote2_devices[] = {
599  &stargate2_flash_device,
600  &imote2_leds,
601  &sht15,
602  &imote2_audio_device,
603 };
604 
605 static void __init imote2_init(void)
606 {
607  pxa2xx_mfp_config(ARRAY_AND_SIZE(imote2_pin_config));
608 
609  imote2_stargate2_init();
610 
611  platform_add_devices(imote2_devices, ARRAY_SIZE(imote2_devices));
612 
613  i2c_register_board_info(0, imote2_i2c_board_info,
614  ARRAY_SIZE(imote2_i2c_board_info));
615  i2c_register_board_info(1, imote2_pwr_i2c_board_info,
616  ARRAY_SIZE(imote2_pwr_i2c_board_info));
617 
618  pxa_set_mci_info(&imote2_mci_platform_data);
619  pxa_set_udc_info(&imote2_udc_info);
620 }
621 #endif
622 
623 #ifdef CONFIG_MACH_STARGATE2
624 
625 static unsigned long stargate2_pin_config[] __initdata = {
626 
627  GPIO15_nCS_1, /* SRAM */
628  /* SMC91x */
629  GPIO80_nCS_4,
630  GPIO40_GPIO, /*cable detect?*/
631 
632  /* Button */
634 
635  /* Compact Flash */
637  GPIO48_nPOE,
638  GPIO49_nPWE,
639  GPIO50_nPIOR,
640  GPIO51_nPIOW,
643  GPIO55_nPREG,
646  GPIO120_GPIO, /* Buff ctrl */
647  GPIO108_GPIO, /* Power ctrl */
648  GPIO82_GPIO, /* Reset */
649  GPIO53_GPIO, /* SG2_S0_GPIO_DETECT */
650 
651  /* MMC not shared with imote2 */
652  GPIO90_GPIO, /* nSD detect */
653  GPIO89_GPIO, /* SD_POWER_ENABLE */
654 
655  /* Bluetooth */
656  GPIO81_GPIO, /* reset */
657 };
658 
659 static struct resource smc91x_resources[] = {
660  [0] = {
661  .name = "smc91x-regs",
662  .start = (PXA_CS4_PHYS + 0x300),
663  .end = (PXA_CS4_PHYS + 0xfffff),
664  .flags = IORESOURCE_MEM,
665  },
666  [1] = {
667  .start = PXA_GPIO_TO_IRQ(40),
668  .end = PXA_GPIO_TO_IRQ(40),
670  }
671 };
672 
673 static struct smc91x_platdata stargate2_smc91x_info = {
676 };
677 
678 static struct platform_device smc91x_device = {
679  .name = "smc91x",
680  .id = -1,
681  .num_resources = ARRAY_SIZE(smc91x_resources),
682  .resource = smc91x_resources,
683  .dev = {
684  .platform_data = &stargate2_smc91x_info,
685  },
686 };
687 
688 
689 /*
690  * The card detect interrupt isn't debounced so we delay it by 250ms
691  * to give the card a chance to fully insert / eject.
692  */
693 static int stargate2_mci_init(struct device *dev,
694  irq_handler_t stargate2_detect_int,
695  void *data)
696 {
697  int err;
698 
699  err = gpio_request(SG2_SD_POWER_ENABLE, "SG2_sd_power_enable");
700  if (err) {
701  printk(KERN_ERR "Can't get the gpio for SD power control");
702  goto return_err;
703  }
705 
706  err = gpio_request(SG2_GPIO_nSD_DETECT, "SG2_sd_detect");
707  if (err) {
708  printk(KERN_ERR "Can't get the sd detect gpio");
709  goto free_power_en;
710  }
712 
714  stargate2_detect_int,
716  "MMC card detect",
717  data);
718  if (err) {
719  printk(KERN_ERR "can't request MMC card detect IRQ\n");
720  goto free_nsd_detect;
721  }
722  return 0;
723 
724  free_nsd_detect:
726  free_power_en:
728  return_err:
729  return err;
730 }
731 
737 static void stargate2_mci_setpower(struct device *dev, unsigned int vdd)
738 {
740 }
741 
742 static void stargate2_mci_exit(struct device *dev, void *data)
743 {
747 }
748 
749 static struct pxamci_platform_data stargate2_mci_platform_data = {
750  .detect_delay_ms = 250,
751  .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
752  .init = stargate2_mci_init,
753  .setpower = stargate2_mci_setpower,
754  .exit = stargate2_mci_exit,
755 };
756 
757 
758 /*
759  * SRAM - The Stargate 2 has 32MB of SRAM.
760  *
761  * Here it is made available as an MTD. This will then
762  * typically have a cifs filesystem created on it to provide
763  * fast temporary storage.
764  */
765 static struct resource sram_resources = {
766  .start = PXA_CS1_PHYS,
767  .end = PXA_CS1_PHYS + SZ_32M-1,
768  .flags = IORESOURCE_MEM,
769 };
770 
771 static struct platdata_mtd_ram stargate2_sram_pdata = {
772  .mapname = "Stargate2 SRAM",
773  .bankwidth = 2,
774 };
775 
776 static struct platform_device stargate2_sram = {
777  .name = "mtd-ram",
778  .id = 0,
779  .resource = &sram_resources,
780  .num_resources = 1,
781  .dev = {
782  .platform_data = &stargate2_sram_pdata,
783  },
784 };
785 
786 static struct pcf857x_platform_data platform_data_pcf857x = {
787  .gpio_base = 128,
788  .n_latch = 0,
789  .setup = NULL,
790  .teardown = NULL,
791  .context = NULL,
792 };
793 
794 static struct at24_platform_data pca9500_eeprom_pdata = {
795  .byte_len = 256,
796  .page_size = 4,
797 };
798 
802 static int stargate2_reset_bluetooth(void)
803 {
804  int err;
805  err = gpio_request(SG2_BT_RESET, "SG2_BT_RESET");
806  if (err) {
807  printk(KERN_ERR "Could not get gpio for bluetooth reset\n");
808  return err;
809  }
811  mdelay(5);
812  /* now reset it - 5 msec minimum */
814  mdelay(10);
817  return 0;
818 }
819 
820 static struct led_info stargate2_leds[] = {
821  {
822  .name = "sg2:red",
823  .flags = DA9030_LED_RATE_ON,
824  }, {
825  .name = "sg2:blue",
826  .flags = DA9030_LED_RATE_ON,
827  }, {
828  .name = "sg2:green",
829  .flags = DA9030_LED_RATE_ON,
830  },
831 };
832 
833 static struct da903x_subdev_info stargate2_da9030_subdevs[] = {
834  {
835  .name = "da903x-led",
836  .id = DA9030_ID_LED_2,
837  .platform_data = &stargate2_leds[0],
838  }, {
839  .name = "da903x-led",
840  .id = DA9030_ID_LED_3,
841  .platform_data = &stargate2_leds[2],
842  }, {
843  .name = "da903x-led",
844  .id = DA9030_ID_LED_4,
845  .platform_data = &stargate2_leds[1],
846  }, {
847  .name = "da903x-regulator",
848  .id = DA9030_ID_LDO2,
849  .platform_data = &stargate2_ldo_init_data[vcc_bbio],
850  }, {
851  .name = "da903x-regulator",
852  .id = DA9030_ID_LDO3,
853  .platform_data = &stargate2_ldo_init_data[vcc_bb],
854  }, {
855  .name = "da903x-regulator",
856  .id = DA9030_ID_LDO4,
857  .platform_data = &stargate2_ldo_init_data[vcc_pxa_flash],
858  }, {
859  .name = "da903x-regulator",
860  .id = DA9030_ID_LDO5,
861  .platform_data = &stargate2_ldo_init_data[vcc_cc2420],
862  }, {
863  .name = "da903x-regulator",
864  .id = DA9030_ID_LDO6,
865  .platform_data = &stargate2_ldo_init_data[vcc_vref],
866  }, {
867  .name = "da903x-regulator",
868  .id = DA9030_ID_LDO7,
869  .platform_data = &stargate2_ldo_init_data[vcc_sram_ext],
870  }, {
871  .name = "da903x-regulator",
872  .id = DA9030_ID_LDO8,
873  .platform_data = &stargate2_ldo_init_data[vcc_mica],
874  }, {
875  .name = "da903x-regulator",
876  .id = DA9030_ID_LDO9,
877  .platform_data = &stargate2_ldo_init_data[vcc_bt],
878  }, {
879  .name = "da903x-regulator",
880  .id = DA9030_ID_LDO10,
881  .platform_data = &stargate2_ldo_init_data[vcc_sensor_1_8],
882  }, {
883  .name = "da903x-regulator",
884  .id = DA9030_ID_LDO11,
885  .platform_data = &stargate2_ldo_init_data[vcc_sensor_3],
886  }, {
887  .name = "da903x-regulator",
888  .id = DA9030_ID_LDO12,
889  .platform_data = &stargate2_ldo_init_data[vcc_lcd],
890  }, {
891  .name = "da903x-regulator",
892  .id = DA9030_ID_LDO15,
893  .platform_data = &stargate2_ldo_init_data[vcc_pxa_pll],
894  }, {
895  .name = "da903x-regulator",
896  .id = DA9030_ID_LDO17,
897  .platform_data = &stargate2_ldo_init_data[vcc_pxa_usim],
898  }, {
899  .name = "da903x-regulator", /*pxa vcc i/o and cc2420 vcc i/o */
900  .id = DA9030_ID_LDO18,
901  .platform_data = &stargate2_ldo_init_data[vcc_io],
902  }, {
903  .name = "da903x-regulator",
904  .id = DA9030_ID_LDO19,
905  .platform_data = &stargate2_ldo_init_data[vcc_pxa_mem],
906  },
907 };
908 
909 static struct da903x_platform_data stargate2_da9030_pdata = {
910  .num_subdevs = ARRAY_SIZE(stargate2_da9030_subdevs),
911  .subdevs = stargate2_da9030_subdevs,
912 };
913 
914 static struct i2c_board_info __initdata stargate2_pwr_i2c_board_info[] = {
915  {
916  .type = "da9030",
917  .addr = 0x49,
918  .platform_data = &stargate2_da9030_pdata,
919  .irq = PXA_GPIO_TO_IRQ(1),
920  },
921 };
922 
923 static struct i2c_board_info __initdata stargate2_i2c_board_info[] = {
924  /* Techically this a pca9500 - but it's compatible with the 8574
925  * for gpio expansion and the 24c02 for eeprom access.
926  */
927  {
928  .type = "pcf8574",
929  .addr = 0x27,
930  .platform_data = &platform_data_pcf857x,
931  }, {
932  .type = "24c02",
933  .addr = 0x57,
934  .platform_data = &pca9500_eeprom_pdata,
935  }, {
936  .type = "max1238",
937  .addr = 0x35,
938  }, { /* ITS400 Sensor board only */
939  .type = "max1363",
940  .addr = 0x34,
941  /* Through a nand gate - Also beware, on V2 sensor board the
942  * pull up resistors are missing.
943  */
944  .irq = PXA_GPIO_TO_IRQ(99),
945  }, { /* ITS400 Sensor board only */
946  .type = "tsl2561",
947  .addr = 0x49,
948  /* Through a nand gate - Also beware, on V2 sensor board the
949  * pull up resistors are missing.
950  */
951  .irq = PXA_GPIO_TO_IRQ(99),
952  }, { /* ITS400 Sensor board only */
953  .type = "tmp175",
954  .addr = 0x4A,
955  .irq = PXA_GPIO_TO_IRQ(96),
956  },
957 };
958 
959 /* Board doesn't support cable detection - so always lie and say
960  * something is there.
961  */
962 static int sg2_udc_detect(void)
963 {
964  return 1;
965 }
966 
967 static struct pxa2xx_udc_mach_info stargate2_udc_info __initdata = {
968  .udc_is_connected = sg2_udc_detect,
969  .udc_command = sg2_udc_command,
970 };
971 
972 static struct platform_device *stargate2_devices[] = {
973  &stargate2_flash_device,
974  &stargate2_sram,
975  &smc91x_device,
976  &sht15,
977 };
978 
979 static void __init stargate2_init(void)
980 {
981  /* This is probably a board specific hack as this must be set
982  prior to connecting the MFP stuff up. */
984 
985  pxa2xx_mfp_config(ARRAY_AND_SIZE(stargate2_pin_config));
986 
987  imote2_stargate2_init();
988 
989  platform_add_devices(ARRAY_AND_SIZE(stargate2_devices));
990 
991  i2c_register_board_info(0, ARRAY_AND_SIZE(stargate2_i2c_board_info));
992  i2c_register_board_info(1, stargate2_pwr_i2c_board_info,
993  ARRAY_SIZE(stargate2_pwr_i2c_board_info));
994 
995  pxa_set_mci_info(&stargate2_mci_platform_data);
996 
997  pxa_set_udc_info(&stargate2_udc_info);
998 
999  stargate2_reset_bluetooth();
1000 }
1001 #endif
1002 
1003 #ifdef CONFIG_MACH_INTELMOTE2
1004 MACHINE_START(INTELMOTE2, "IMOTE 2")
1005  .map_io = pxa27x_map_io,
1006  .nr_irqs = PXA_NR_IRQS,
1007  .init_irq = pxa27x_init_irq,
1008  .handle_irq = pxa27x_handle_irq,
1009  .timer = &pxa_timer,
1010  .init_machine = imote2_init,
1011  .atag_offset = 0x100,
1012  .restart = pxa_restart,
1014 #endif
1015 
1016 #ifdef CONFIG_MACH_STARGATE2
1017 MACHINE_START(STARGATE2, "Stargate 2")
1018  .map_io = pxa27x_map_io,
1019  .nr_irqs = STARGATE_NR_IRQS,
1020  .init_irq = pxa27x_init_irq,
1021  .handle_irq = pxa27x_handle_irq,
1022  .timer = &pxa_timer,
1023  .init_machine = stargate2_init,
1024  .atag_offset = 0x100,
1025  .restart = pxa_restart,
1027 #endif