stargate2.c 23 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018
  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 <jic23@cam.ac.uk>
  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. #include <linux/init.h>
  15. #include <linux/device.h>
  16. #include <linux/interrupt.h>
  17. #include <linux/sched.h>
  18. #include <linux/bitops.h>
  19. #include <linux/fb.h>
  20. #include <linux/delay.h>
  21. #include <linux/platform_device.h>
  22. #include <linux/regulator/machine.h>
  23. #include <linux/mtd/mtd.h>
  24. #include <linux/mtd/plat-ram.h>
  25. #include <linux/mtd/partitions.h>
  26. #include <linux/i2c/pcf857x.h>
  27. #include <linux/i2c/at24.h>
  28. #include <linux/smc91x.h>
  29. #include <linux/gpio.h>
  30. #include <linux/leds.h>
  31. #include <asm/types.h>
  32. #include <asm/setup.h>
  33. #include <asm/memory.h>
  34. #include <asm/mach-types.h>
  35. #include <asm/irq.h>
  36. #include <asm/mach/arch.h>
  37. #include <asm/mach/map.h>
  38. #include <asm/mach/irq.h>
  39. #include <asm/mach/flash.h>
  40. #include <mach/pxa27x.h>
  41. #include <plat/i2c.h>
  42. #include <mach/mmc.h>
  43. #include <mach/udc.h>
  44. #include <mach/pxa2xx_spi.h>
  45. #include <mach/pxa27x-udc.h>
  46. #include <linux/spi/spi.h>
  47. #include <linux/mfd/da903x.h>
  48. #include <linux/sht15.h>
  49. #include "devices.h"
  50. #include "generic.h"
  51. #define STARGATE_NR_IRQS (IRQ_BOARD_START + 8)
  52. /* Bluetooth */
  53. #define SG2_BT_RESET 81
  54. /* SD */
  55. #define SG2_GPIO_nSD_DETECT 90
  56. #define SG2_SD_POWER_ENABLE 89
  57. static unsigned long sg2_im2_unified_pin_config[] __initdata = {
  58. /* Device Identification for wakeup*/
  59. GPIO102_GPIO,
  60. /* DA9030 */
  61. GPIO1_GPIO,
  62. /* MMC */
  63. GPIO32_MMC_CLK,
  64. GPIO112_MMC_CMD,
  65. GPIO92_MMC_DAT_0,
  66. GPIO109_MMC_DAT_1,
  67. GPIO110_MMC_DAT_2,
  68. GPIO111_MMC_DAT_3,
  69. /* 802.15.4 radio - driver out of mainline */
  70. GPIO22_GPIO, /* CC_RSTN */
  71. GPIO114_GPIO, /* CC_FIFO */
  72. GPIO116_GPIO, /* CC_CCA */
  73. GPIO0_GPIO, /* CC_FIFOP */
  74. GPIO16_GPIO, /* CCSFD */
  75. GPIO115_GPIO, /* Power enable */
  76. /* I2C */
  77. GPIO117_I2C_SCL,
  78. GPIO118_I2C_SDA,
  79. /* SSP 3 - 802.15.4 radio */
  80. GPIO39_GPIO, /* Chip Select */
  81. GPIO34_SSP3_SCLK,
  82. GPIO35_SSP3_TXD,
  83. GPIO41_SSP3_RXD,
  84. /* SSP 2 to daughter boards */
  85. GPIO11_SSP2_RXD,
  86. GPIO38_SSP2_TXD,
  87. GPIO36_SSP2_SCLK,
  88. GPIO37_GPIO, /* chip select */
  89. /* SSP 1 - to daughter boards */
  90. GPIO24_GPIO, /* Chip Select */
  91. GPIO23_SSP1_SCLK,
  92. GPIO25_SSP1_TXD,
  93. GPIO26_SSP1_RXD,
  94. /* BTUART Basic Connector*/
  95. GPIO42_BTUART_RXD,
  96. GPIO43_BTUART_TXD,
  97. GPIO44_BTUART_CTS,
  98. GPIO45_BTUART_RTS,
  99. /* STUART - IM2 via debug board not sure on SG2*/
  100. GPIO46_STUART_RXD,
  101. GPIO47_STUART_TXD,
  102. /* Basic sensor board */
  103. GPIO96_GPIO, /* accelerometer interrupt */
  104. GPIO99_GPIO, /* ADC interrupt */
  105. /* SHT15 */
  106. GPIO100_GPIO,
  107. GPIO98_GPIO,
  108. /* Basic sensor board */
  109. GPIO96_GPIO, /* accelerometer interrupt */
  110. GPIO99_GPIO, /* ADC interrupt */
  111. /* Connector pins specified as gpios */
  112. GPIO94_GPIO, /* large basic connector pin 14 */
  113. GPIO10_GPIO, /* large basic connector pin 23 */
  114. };
  115. static struct sht15_platform_data platform_data_sht15 = {
  116. .gpio_data = 100,
  117. .gpio_sck = 98,
  118. };
  119. static struct platform_device sht15 = {
  120. .name = "sht15",
  121. .id = -1,
  122. .dev = {
  123. .platform_data = &platform_data_sht15,
  124. },
  125. };
  126. static struct regulator_consumer_supply stargate2_sensor_3_con[] = {
  127. {
  128. .dev = &sht15.dev,
  129. .supply = "vcc",
  130. },
  131. };
  132. enum stargate2_ldos{
  133. vcc_vref,
  134. vcc_cc2420,
  135. /* a mote connector? */
  136. vcc_mica,
  137. /* the CSR bluecore chip */
  138. vcc_bt,
  139. /* The two voltages available to sensor boards */
  140. vcc_sensor_1_8,
  141. vcc_sensor_3,
  142. /* directly connected to the pxa27x */
  143. vcc_sram_ext,
  144. vcc_pxa_pll,
  145. vcc_pxa_usim, /* Reference voltage for certain gpios */
  146. vcc_pxa_mem,
  147. vcc_pxa_flash,
  148. vcc_pxa_core, /*Dc-Dc buck not yet supported */
  149. vcc_lcd,
  150. vcc_bb,
  151. vcc_bbio, /*not sure!*/
  152. vcc_io, /* cc2420 802.15.4 radio and pxa vcc_io ?*/
  153. };
  154. /* The values of the various regulator constraints are obviously dependent
  155. * on exactly what is wired to each ldo. Unfortunately this information is
  156. * not generally available. More information has been requested from Xbow.
  157. */
  158. static struct regulator_init_data stargate2_ldo_init_data[] = {
  159. [vcc_bbio] = {
  160. .constraints = { /* board default 1.8V */
  161. .name = "vcc_bbio",
  162. .min_uV = 1800000,
  163. .max_uV = 1800000,
  164. },
  165. },
  166. [vcc_bb] = {
  167. .constraints = { /* board default 2.8V */
  168. .name = "vcc_bb",
  169. .min_uV = 2700000,
  170. .max_uV = 3000000,
  171. },
  172. },
  173. [vcc_pxa_flash] = {
  174. .constraints = {/* default is 1.8V */
  175. .name = "vcc_pxa_flash",
  176. .min_uV = 1800000,
  177. .max_uV = 1800000,
  178. },
  179. },
  180. [vcc_cc2420] = { /* also vcc_io */
  181. .constraints = {
  182. /* board default is 2.8V */
  183. .name = "vcc_cc2420",
  184. .min_uV = 2700000,
  185. .max_uV = 3300000,
  186. },
  187. },
  188. [vcc_vref] = { /* Reference for what? */
  189. .constraints = { /* default 1.8V */
  190. .name = "vcc_vref",
  191. .min_uV = 1800000,
  192. .max_uV = 1800000,
  193. },
  194. },
  195. [vcc_sram_ext] = {
  196. .constraints = { /* default 2.8V */
  197. .name = "vcc_sram_ext",
  198. .min_uV = 2800000,
  199. .max_uV = 2800000,
  200. },
  201. },
  202. [vcc_mica] = {
  203. .constraints = { /* default 2.8V */
  204. .name = "vcc_mica",
  205. .min_uV = 2800000,
  206. .max_uV = 2800000,
  207. },
  208. },
  209. [vcc_bt] = {
  210. .constraints = { /* default 2.8V */
  211. .name = "vcc_bt",
  212. .min_uV = 2800000,
  213. .max_uV = 2800000,
  214. },
  215. },
  216. [vcc_lcd] = {
  217. .constraints = { /* default 2.8V */
  218. .name = "vcc_lcd",
  219. .min_uV = 2700000,
  220. .max_uV = 3300000,
  221. },
  222. },
  223. [vcc_io] = { /* Same or higher than everything
  224. * bar vccbat and vccusb */
  225. .constraints = { /* default 2.8V */
  226. .name = "vcc_io",
  227. .min_uV = 2692000,
  228. .max_uV = 3300000,
  229. },
  230. },
  231. [vcc_sensor_1_8] = {
  232. .constraints = { /* default 1.8V */
  233. .name = "vcc_sensor_1_8",
  234. .min_uV = 1800000,
  235. .max_uV = 1800000,
  236. },
  237. },
  238. [vcc_sensor_3] = { /* curiously default 2.8V */
  239. .constraints = {
  240. .name = "vcc_sensor_3",
  241. .min_uV = 2800000,
  242. .max_uV = 3000000,
  243. },
  244. .num_consumer_supplies = ARRAY_SIZE(stargate2_sensor_3_con),
  245. .consumer_supplies = stargate2_sensor_3_con,
  246. },
  247. [vcc_pxa_pll] = { /* 1.17V - 1.43V, default 1.3V*/
  248. .constraints = {
  249. .name = "vcc_pxa_pll",
  250. .min_uV = 1170000,
  251. .max_uV = 1430000,
  252. },
  253. },
  254. [vcc_pxa_usim] = {
  255. .constraints = { /* default 1.8V */
  256. .name = "vcc_pxa_usim",
  257. .min_uV = 1710000,
  258. .max_uV = 2160000,
  259. },
  260. },
  261. [vcc_pxa_mem] = {
  262. .constraints = { /* default 1.8V */
  263. .name = "vcc_pxa_mem",
  264. .min_uV = 1800000,
  265. .max_uV = 1800000,
  266. },
  267. },
  268. };
  269. static struct mtd_partition stargate2flash_partitions[] = {
  270. {
  271. .name = "Bootloader",
  272. .size = 0x00040000,
  273. .offset = 0,
  274. .mask_flags = 0,
  275. }, {
  276. .name = "Kernel",
  277. .size = 0x00200000,
  278. .offset = 0x00040000,
  279. .mask_flags = 0
  280. }, {
  281. .name = "Filesystem",
  282. .size = 0x01DC0000,
  283. .offset = 0x00240000,
  284. .mask_flags = 0
  285. },
  286. };
  287. static struct resource flash_resources = {
  288. .start = PXA_CS0_PHYS,
  289. .end = PXA_CS0_PHYS + SZ_32M - 1,
  290. .flags = IORESOURCE_MEM,
  291. };
  292. static struct flash_platform_data stargate2_flash_data = {
  293. .map_name = "cfi_probe",
  294. .parts = stargate2flash_partitions,
  295. .nr_parts = ARRAY_SIZE(stargate2flash_partitions),
  296. .name = "PXA27xOnChipROM",
  297. .width = 2,
  298. };
  299. static struct platform_device stargate2_flash_device = {
  300. .name = "pxa2xx-flash",
  301. .id = 0,
  302. .dev = {
  303. .platform_data = &stargate2_flash_data,
  304. },
  305. .resource = &flash_resources,
  306. .num_resources = 1,
  307. };
  308. static struct pxa2xx_spi_master pxa_ssp_master_0_info = {
  309. .num_chipselect = 1,
  310. };
  311. static struct pxa2xx_spi_master pxa_ssp_master_1_info = {
  312. .num_chipselect = 1,
  313. };
  314. static struct pxa2xx_spi_master pxa_ssp_master_2_info = {
  315. .num_chipselect = 1,
  316. };
  317. /* An upcoming kernel change will scrap SFRM usage so these
  318. * drivers have been moved to use gpio's via cs_control */
  319. static struct pxa2xx_spi_chip staccel_chip_info = {
  320. .tx_threshold = 8,
  321. .rx_threshold = 8,
  322. .dma_burst_size = 8,
  323. .timeout = 235,
  324. .gpio_cs = 24,
  325. };
  326. static struct pxa2xx_spi_chip cc2420_info = {
  327. .tx_threshold = 8,
  328. .rx_threshold = 8,
  329. .dma_burst_size = 8,
  330. .timeout = 235,
  331. .gpio_cs = 39,
  332. };
  333. static struct spi_board_info spi_board_info[] __initdata = {
  334. {
  335. .modalias = "lis3l02dq",
  336. .max_speed_hz = 8000000,/* 8MHz max spi frequency at 3V */
  337. .bus_num = 1,
  338. .chip_select = 0,
  339. .controller_data = &staccel_chip_info,
  340. .irq = IRQ_GPIO(96),
  341. }, {
  342. .modalias = "cc2420",
  343. .max_speed_hz = 6500000,
  344. .bus_num = 3,
  345. .chip_select = 0,
  346. .controller_data = &cc2420_info,
  347. },
  348. };
  349. static void sg2_udc_command(int cmd)
  350. {
  351. switch (cmd) {
  352. case PXA2XX_UDC_CMD_CONNECT:
  353. UP2OCR |= UP2OCR_HXOE | UP2OCR_DPPUE | UP2OCR_DPPUBE;
  354. break;
  355. case PXA2XX_UDC_CMD_DISCONNECT:
  356. UP2OCR &= ~(UP2OCR_HXOE | UP2OCR_DPPUE | UP2OCR_DPPUBE);
  357. break;
  358. }
  359. }
  360. static struct i2c_pxa_platform_data i2c_pwr_pdata = {
  361. .fast_mode = 1,
  362. };
  363. static struct i2c_pxa_platform_data i2c_pdata = {
  364. .fast_mode = 1,
  365. };
  366. static void __init imote2_stargate2_init(void)
  367. {
  368. pxa2xx_mfp_config(ARRAY_AND_SIZE(sg2_im2_unified_pin_config));
  369. pxa_set_ffuart_info(NULL);
  370. pxa_set_btuart_info(NULL);
  371. pxa_set_stuart_info(NULL);
  372. pxa2xx_set_spi_info(1, &pxa_ssp_master_0_info);
  373. pxa2xx_set_spi_info(2, &pxa_ssp_master_1_info);
  374. pxa2xx_set_spi_info(3, &pxa_ssp_master_2_info);
  375. spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
  376. pxa27x_set_i2c_power_info(&i2c_pwr_pdata);
  377. pxa_set_i2c_info(&i2c_pdata);
  378. }
  379. #ifdef CONFIG_MACH_INTELMOTE2
  380. /* As the the imote2 doesn't currently have a conventional SD slot
  381. * there is no option to hotplug cards, making all this rather simple
  382. */
  383. static int imote2_mci_get_ro(struct device *dev)
  384. {
  385. return 0;
  386. }
  387. /* Rather simple case as hotplugging not possible */
  388. static struct pxamci_platform_data imote2_mci_platform_data = {
  389. .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, /* default anyway */
  390. .get_ro = imote2_mci_get_ro,
  391. .gpio_card_detect = -1,
  392. .gpio_card_ro = -1,
  393. .gpio_power = -1,
  394. };
  395. static struct gpio_led imote2_led_pins[] = {
  396. {
  397. .name = "imote2:red",
  398. .gpio = 103,
  399. .active_low = 1,
  400. }, {
  401. .name = "imote2:green",
  402. .gpio = 104,
  403. .active_low = 1,
  404. }, {
  405. .name = "imote2:blue",
  406. .gpio = 105,
  407. .active_low = 1,
  408. },
  409. };
  410. static struct gpio_led_platform_data imote2_led_data = {
  411. .num_leds = ARRAY_SIZE(imote2_led_pins),
  412. .leds = imote2_led_pins,
  413. };
  414. static struct platform_device imote2_leds = {
  415. .name = "leds-gpio",
  416. .id = -1,
  417. .dev = {
  418. .platform_data = &imote2_led_data,
  419. },
  420. };
  421. static struct da903x_subdev_info imote2_da9030_subdevs[] = {
  422. {
  423. .name = "da903x-regulator",
  424. .id = DA9030_ID_LDO2,
  425. .platform_data = &stargate2_ldo_init_data[vcc_bbio],
  426. }, {
  427. .name = "da903x-regulator",
  428. .id = DA9030_ID_LDO3,
  429. .platform_data = &stargate2_ldo_init_data[vcc_bb],
  430. }, {
  431. .name = "da903x-regulator",
  432. .id = DA9030_ID_LDO4,
  433. .platform_data = &stargate2_ldo_init_data[vcc_pxa_flash],
  434. }, {
  435. .name = "da903x-regulator",
  436. .id = DA9030_ID_LDO5,
  437. .platform_data = &stargate2_ldo_init_data[vcc_cc2420],
  438. }, {
  439. .name = "da903x-regulator",
  440. .id = DA9030_ID_LDO6,
  441. .platform_data = &stargate2_ldo_init_data[vcc_vref],
  442. }, {
  443. .name = "da903x-regulator",
  444. .id = DA9030_ID_LDO7,
  445. .platform_data = &stargate2_ldo_init_data[vcc_sram_ext],
  446. }, {
  447. .name = "da903x-regulator",
  448. .id = DA9030_ID_LDO8,
  449. .platform_data = &stargate2_ldo_init_data[vcc_mica],
  450. }, {
  451. .name = "da903x-regulator",
  452. .id = DA9030_ID_LDO9,
  453. .platform_data = &stargate2_ldo_init_data[vcc_bt],
  454. }, {
  455. .name = "da903x-regulator",
  456. .id = DA9030_ID_LDO10,
  457. .platform_data = &stargate2_ldo_init_data[vcc_sensor_1_8],
  458. }, {
  459. .name = "da903x-regulator",
  460. .id = DA9030_ID_LDO11,
  461. .platform_data = &stargate2_ldo_init_data[vcc_sensor_3],
  462. }, {
  463. .name = "da903x-regulator",
  464. .id = DA9030_ID_LDO12,
  465. .platform_data = &stargate2_ldo_init_data[vcc_lcd],
  466. }, {
  467. .name = "da903x-regulator",
  468. .id = DA9030_ID_LDO15,
  469. .platform_data = &stargate2_ldo_init_data[vcc_pxa_pll],
  470. }, {
  471. .name = "da903x-regulator",
  472. .id = DA9030_ID_LDO17,
  473. .platform_data = &stargate2_ldo_init_data[vcc_pxa_usim],
  474. }, {
  475. .name = "da903x-regulator", /*pxa vcc i/o and cc2420 vcc i/o */
  476. .id = DA9030_ID_LDO18,
  477. .platform_data = &stargate2_ldo_init_data[vcc_io],
  478. }, {
  479. .name = "da903x-regulator",
  480. .id = DA9030_ID_LDO19,
  481. .platform_data = &stargate2_ldo_init_data[vcc_pxa_mem],
  482. },
  483. };
  484. static struct da903x_platform_data imote2_da9030_pdata = {
  485. .num_subdevs = ARRAY_SIZE(imote2_da9030_subdevs),
  486. .subdevs = imote2_da9030_subdevs,
  487. };
  488. static struct i2c_board_info __initdata imote2_pwr_i2c_board_info[] = {
  489. {
  490. .type = "da9030",
  491. .addr = 0x49,
  492. .platform_data = &imote2_da9030_pdata,
  493. .irq = gpio_to_irq(1),
  494. },
  495. };
  496. static struct i2c_board_info __initdata imote2_i2c_board_info[] = {
  497. { /* UCAM sensor board */
  498. .type = "max1239",
  499. .addr = 0x35,
  500. }, { /* ITS400 Sensor board only */
  501. .type = "max1363",
  502. .addr = 0x34,
  503. /* Through a nand gate - Also beware, on V2 sensor board the
  504. * pull up resistors are missing.
  505. */
  506. .irq = IRQ_GPIO(99),
  507. }, { /* ITS400 Sensor board only */
  508. .type = "tsl2561",
  509. .addr = 0x49,
  510. /* Through a nand gate - Also beware, on V2 sensor board the
  511. * pull up resistors are missing.
  512. */
  513. .irq = IRQ_GPIO(99),
  514. }, { /* ITS400 Sensor board only */
  515. .type = "tmp175",
  516. .addr = 0x4A,
  517. .irq = IRQ_GPIO(96),
  518. }, { /* IMB400 Multimedia board */
  519. .type = "wm8940",
  520. .addr = 0x1A,
  521. },
  522. };
  523. static unsigned long imote2_pin_config[] __initdata = {
  524. /* Button */
  525. GPIO91_GPIO,
  526. /* LEDS */
  527. GPIO103_GPIO, /* red led */
  528. GPIO104_GPIO, /* green led */
  529. GPIO105_GPIO, /* blue led */
  530. };
  531. static struct pxa2xx_udc_mach_info imote2_udc_info __initdata = {
  532. .udc_command = sg2_udc_command,
  533. };
  534. static struct platform_device *imote2_devices[] = {
  535. &stargate2_flash_device,
  536. &imote2_leds,
  537. &sht15,
  538. };
  539. static void __init imote2_init(void)
  540. {
  541. pxa2xx_mfp_config(ARRAY_AND_SIZE(imote2_pin_config));
  542. imote2_stargate2_init();
  543. platform_add_devices(imote2_devices, ARRAY_SIZE(imote2_devices));
  544. i2c_register_board_info(0, imote2_i2c_board_info,
  545. ARRAY_SIZE(imote2_i2c_board_info));
  546. i2c_register_board_info(1, imote2_pwr_i2c_board_info,
  547. ARRAY_SIZE(imote2_pwr_i2c_board_info));
  548. pxa_set_mci_info(&imote2_mci_platform_data);
  549. pxa_set_udc_info(&imote2_udc_info);
  550. }
  551. #endif
  552. #ifdef CONFIG_MACH_STARGATE2
  553. static unsigned long stargate2_pin_config[] __initdata = {
  554. GPIO15_nCS_1, /* SRAM */
  555. /* SMC91x */
  556. GPIO80_nCS_4,
  557. GPIO40_GPIO, /*cable detect?*/
  558. /* Button */
  559. GPIO91_GPIO | WAKEUP_ON_LEVEL_HIGH,
  560. /* Compact Flash */
  561. GPIO79_PSKTSEL,
  562. GPIO48_nPOE,
  563. GPIO49_nPWE,
  564. GPIO50_nPIOR,
  565. GPIO51_nPIOW,
  566. GPIO85_nPCE_1,
  567. GPIO54_nPCE_2,
  568. GPIO55_nPREG,
  569. GPIO56_nPWAIT,
  570. GPIO57_nIOIS16,
  571. GPIO120_GPIO, /* Buff ctrl */
  572. GPIO108_GPIO, /* Power ctrl */
  573. GPIO82_GPIO, /* Reset */
  574. GPIO53_GPIO, /* SG2_S0_GPIO_DETECT */
  575. /* MMC not shared with imote2 */
  576. GPIO90_GPIO, /* nSD detect */
  577. GPIO89_GPIO, /* SD_POWER_ENABLE */
  578. /* Bluetooth */
  579. GPIO81_GPIO, /* reset */
  580. };
  581. static struct resource smc91x_resources[] = {
  582. [0] = {
  583. .name = "smc91x-regs",
  584. .start = (PXA_CS4_PHYS + 0x300),
  585. .end = (PXA_CS4_PHYS + 0xfffff),
  586. .flags = IORESOURCE_MEM,
  587. },
  588. [1] = {
  589. .start = IRQ_GPIO(40),
  590. .end = IRQ_GPIO(40),
  591. .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
  592. }
  593. };
  594. static struct smc91x_platdata stargate2_smc91x_info = {
  595. .flags = SMC91X_USE_8BIT | SMC91X_USE_16BIT | SMC91X_USE_32BIT
  596. | SMC91X_NOWAIT | SMC91X_USE_DMA,
  597. };
  598. static struct platform_device smc91x_device = {
  599. .name = "smc91x",
  600. .id = -1,
  601. .num_resources = ARRAY_SIZE(smc91x_resources),
  602. .resource = smc91x_resources,
  603. .dev = {
  604. .platform_data = &stargate2_smc91x_info,
  605. },
  606. };
  607. /*
  608. * The card detect interrupt isn't debounced so we delay it by 250ms
  609. * to give the card a chance to fully insert / eject.
  610. */
  611. static int stargate2_mci_init(struct device *dev,
  612. irq_handler_t stargate2_detect_int,
  613. void *data)
  614. {
  615. int err;
  616. err = gpio_request(SG2_SD_POWER_ENABLE, "SG2_sd_power_enable");
  617. if (err) {
  618. printk(KERN_ERR "Can't get the gpio for SD power control");
  619. goto return_err;
  620. }
  621. gpio_direction_output(SG2_SD_POWER_ENABLE, 0);
  622. err = gpio_request(SG2_GPIO_nSD_DETECT, "SG2_sd_detect");
  623. if (err) {
  624. printk(KERN_ERR "Can't get the sd detect gpio");
  625. goto free_power_en;
  626. }
  627. gpio_direction_input(SG2_GPIO_nSD_DETECT);
  628. err = request_irq(IRQ_GPIO(SG2_GPIO_nSD_DETECT),
  629. stargate2_detect_int,
  630. IRQ_TYPE_EDGE_BOTH,
  631. "MMC card detect",
  632. data);
  633. if (err) {
  634. printk(KERN_ERR "can't request MMC card detect IRQ\n");
  635. goto free_nsd_detect;
  636. }
  637. return 0;
  638. free_nsd_detect:
  639. gpio_free(SG2_GPIO_nSD_DETECT);
  640. free_power_en:
  641. gpio_free(SG2_SD_POWER_ENABLE);
  642. return_err:
  643. return err;
  644. }
  645. /**
  646. * stargate2_mci_setpower() - set state of mmc power supply
  647. *
  648. * Very simple control. Either it is on or off and is controlled by
  649. * a gpio pin */
  650. static void stargate2_mci_setpower(struct device *dev, unsigned int vdd)
  651. {
  652. gpio_set_value(SG2_SD_POWER_ENABLE, !!vdd);
  653. }
  654. static void stargate2_mci_exit(struct device *dev, void *data)
  655. {
  656. free_irq(IRQ_GPIO(SG2_GPIO_nSD_DETECT), data);
  657. gpio_free(SG2_SD_POWER_ENABLE);
  658. gpio_free(SG2_GPIO_nSD_DETECT);
  659. }
  660. static struct pxamci_platform_data stargate2_mci_platform_data = {
  661. .detect_delay_ms = 250,
  662. .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
  663. .init = stargate2_mci_init,
  664. .setpower = stargate2_mci_setpower,
  665. .exit = stargate2_mci_exit,
  666. };
  667. /*
  668. * SRAM - The Stargate 2 has 32MB of SRAM.
  669. *
  670. * Here it is made available as an MTD. This will then
  671. * typically have a cifs filesystem created on it to provide
  672. * fast temporary storage.
  673. */
  674. static struct resource sram_resources = {
  675. .start = PXA_CS1_PHYS,
  676. .end = PXA_CS1_PHYS + SZ_32M-1,
  677. .flags = IORESOURCE_MEM,
  678. };
  679. static struct platdata_mtd_ram stargate2_sram_pdata = {
  680. .mapname = "Stargate2 SRAM",
  681. .bankwidth = 2,
  682. };
  683. static struct platform_device stargate2_sram = {
  684. .name = "mtd-ram",
  685. .id = 0,
  686. .resource = &sram_resources,
  687. .num_resources = 1,
  688. .dev = {
  689. .platform_data = &stargate2_sram_pdata,
  690. },
  691. };
  692. static struct pcf857x_platform_data platform_data_pcf857x = {
  693. .gpio_base = 128,
  694. .n_latch = 0,
  695. .setup = NULL,
  696. .teardown = NULL,
  697. .context = NULL,
  698. };
  699. static struct at24_platform_data pca9500_eeprom_pdata = {
  700. .byte_len = 256,
  701. .page_size = 4,
  702. };
  703. /**
  704. * stargate2_reset_bluetooth() reset the bluecore to ensure consistent state
  705. **/
  706. static int stargate2_reset_bluetooth(void)
  707. {
  708. int err;
  709. err = gpio_request(SG2_BT_RESET, "SG2_BT_RESET");
  710. if (err) {
  711. printk(KERN_ERR "Could not get gpio for bluetooth reset\n");
  712. return err;
  713. }
  714. gpio_direction_output(SG2_BT_RESET, 1);
  715. mdelay(5);
  716. /* now reset it - 5 msec minimum */
  717. gpio_set_value(SG2_BT_RESET, 0);
  718. mdelay(10);
  719. gpio_set_value(SG2_BT_RESET, 1);
  720. gpio_free(SG2_BT_RESET);
  721. return 0;
  722. }
  723. static struct led_info stargate2_leds[] = {
  724. {
  725. .name = "sg2:red",
  726. .flags = DA9030_LED_RATE_ON,
  727. }, {
  728. .name = "sg2:blue",
  729. .flags = DA9030_LED_RATE_ON,
  730. }, {
  731. .name = "sg2:green",
  732. .flags = DA9030_LED_RATE_ON,
  733. },
  734. };
  735. static struct da903x_subdev_info stargate2_da9030_subdevs[] = {
  736. {
  737. .name = "da903x-led",
  738. .id = DA9030_ID_LED_2,
  739. .platform_data = &stargate2_leds[0],
  740. }, {
  741. .name = "da903x-led",
  742. .id = DA9030_ID_LED_3,
  743. .platform_data = &stargate2_leds[2],
  744. }, {
  745. .name = "da903x-led",
  746. .id = DA9030_ID_LED_4,
  747. .platform_data = &stargate2_leds[1],
  748. }, {
  749. .name = "da903x-regulator",
  750. .id = DA9030_ID_LDO2,
  751. .platform_data = &stargate2_ldo_init_data[vcc_bbio],
  752. }, {
  753. .name = "da903x-regulator",
  754. .id = DA9030_ID_LDO3,
  755. .platform_data = &stargate2_ldo_init_data[vcc_bb],
  756. }, {
  757. .name = "da903x-regulator",
  758. .id = DA9030_ID_LDO4,
  759. .platform_data = &stargate2_ldo_init_data[vcc_pxa_flash],
  760. }, {
  761. .name = "da903x-regulator",
  762. .id = DA9030_ID_LDO5,
  763. .platform_data = &stargate2_ldo_init_data[vcc_cc2420],
  764. }, {
  765. .name = "da903x-regulator",
  766. .id = DA9030_ID_LDO6,
  767. .platform_data = &stargate2_ldo_init_data[vcc_vref],
  768. }, {
  769. .name = "da903x-regulator",
  770. .id = DA9030_ID_LDO7,
  771. .platform_data = &stargate2_ldo_init_data[vcc_sram_ext],
  772. }, {
  773. .name = "da903x-regulator",
  774. .id = DA9030_ID_LDO8,
  775. .platform_data = &stargate2_ldo_init_data[vcc_mica],
  776. }, {
  777. .name = "da903x-regulator",
  778. .id = DA9030_ID_LDO9,
  779. .platform_data = &stargate2_ldo_init_data[vcc_bt],
  780. }, {
  781. .name = "da903x-regulator",
  782. .id = DA9030_ID_LDO10,
  783. .platform_data = &stargate2_ldo_init_data[vcc_sensor_1_8],
  784. }, {
  785. .name = "da903x-regulator",
  786. .id = DA9030_ID_LDO11,
  787. .platform_data = &stargate2_ldo_init_data[vcc_sensor_3],
  788. }, {
  789. .name = "da903x-regulator",
  790. .id = DA9030_ID_LDO12,
  791. .platform_data = &stargate2_ldo_init_data[vcc_lcd],
  792. }, {
  793. .name = "da903x-regulator",
  794. .id = DA9030_ID_LDO15,
  795. .platform_data = &stargate2_ldo_init_data[vcc_pxa_pll],
  796. }, {
  797. .name = "da903x-regulator",
  798. .id = DA9030_ID_LDO17,
  799. .platform_data = &stargate2_ldo_init_data[vcc_pxa_usim],
  800. }, {
  801. .name = "da903x-regulator", /*pxa vcc i/o and cc2420 vcc i/o */
  802. .id = DA9030_ID_LDO18,
  803. .platform_data = &stargate2_ldo_init_data[vcc_io],
  804. }, {
  805. .name = "da903x-regulator",
  806. .id = DA9030_ID_LDO19,
  807. .platform_data = &stargate2_ldo_init_data[vcc_pxa_mem],
  808. },
  809. };
  810. static struct da903x_platform_data stargate2_da9030_pdata = {
  811. .num_subdevs = ARRAY_SIZE(stargate2_da9030_subdevs),
  812. .subdevs = stargate2_da9030_subdevs,
  813. };
  814. static struct i2c_board_info __initdata stargate2_pwr_i2c_board_info[] = {
  815. {
  816. .type = "da9030",
  817. .addr = 0x49,
  818. .platform_data = &stargate2_da9030_pdata,
  819. .irq = gpio_to_irq(1),
  820. },
  821. };
  822. static struct i2c_board_info __initdata stargate2_i2c_board_info[] = {
  823. /* Techically this a pca9500 - but it's compatible with the 8574
  824. * for gpio expansion and the 24c02 for eeprom access.
  825. */
  826. {
  827. .type = "pcf8574",
  828. .addr = 0x27,
  829. .platform_data = &platform_data_pcf857x,
  830. }, {
  831. .type = "24c02",
  832. .addr = 0x57,
  833. .platform_data = &pca9500_eeprom_pdata,
  834. }, {
  835. .type = "max1238",
  836. .addr = 0x35,
  837. }, { /* ITS400 Sensor board only */
  838. .type = "max1363",
  839. .addr = 0x34,
  840. /* Through a nand gate - Also beware, on V2 sensor board the
  841. * pull up resistors are missing.
  842. */
  843. .irq = IRQ_GPIO(99),
  844. }, { /* ITS400 Sensor board only */
  845. .type = "tsl2561",
  846. .addr = 0x49,
  847. /* Through a nand gate - Also beware, on V2 sensor board the
  848. * pull up resistors are missing.
  849. */
  850. .irq = IRQ_GPIO(99),
  851. }, { /* ITS400 Sensor board only */
  852. .type = "tmp175",
  853. .addr = 0x4A,
  854. .irq = IRQ_GPIO(96),
  855. },
  856. };
  857. /* Board doesn't support cable detection - so always lie and say
  858. * something is there.
  859. */
  860. static int sg2_udc_detect(void)
  861. {
  862. return 1;
  863. }
  864. static struct pxa2xx_udc_mach_info stargate2_udc_info __initdata = {
  865. .udc_is_connected = sg2_udc_detect,
  866. .udc_command = sg2_udc_command,
  867. };
  868. static struct platform_device *stargate2_devices[] = {
  869. &stargate2_flash_device,
  870. &stargate2_sram,
  871. &smc91x_device,
  872. &sht15,
  873. };
  874. static void __init stargate2_init(void)
  875. {
  876. /* This is probably a board specific hack as this must be set
  877. prior to connecting the MFP stuff up. */
  878. MECR &= ~MECR_NOS;
  879. pxa2xx_mfp_config(ARRAY_AND_SIZE(stargate2_pin_config));
  880. imote2_stargate2_init();
  881. platform_add_devices(ARRAY_AND_SIZE(stargate2_devices));
  882. i2c_register_board_info(0, ARRAY_AND_SIZE(stargate2_i2c_board_info));
  883. i2c_register_board_info(1, stargate2_pwr_i2c_board_info,
  884. ARRAY_SIZE(stargate2_pwr_i2c_board_info));
  885. pxa_set_mci_info(&stargate2_mci_platform_data);
  886. pxa_set_udc_info(&stargate2_udc_info);
  887. stargate2_reset_bluetooth();
  888. }
  889. #endif
  890. #ifdef CONFIG_MACH_INTELMOTE2
  891. MACHINE_START(INTELMOTE2, "IMOTE 2")
  892. .map_io = pxa_map_io,
  893. .init_irq = pxa27x_init_irq,
  894. .timer = &pxa_timer,
  895. .init_machine = imote2_init,
  896. .boot_params = 0xA0000100,
  897. MACHINE_END
  898. #endif
  899. #ifdef CONFIG_MACH_STARGATE2
  900. MACHINE_START(STARGATE2, "Stargate 2")
  901. .map_io = pxa_map_io,
  902. .nr_irqs = STARGATE_NR_IRQS,
  903. .init_irq = pxa27x_init_irq,
  904. .timer = &pxa_timer,
  905. .init_machine = stargate2_init,
  906. .boot_params = 0xA0000100,
  907. MACHINE_END
  908. #endif