common.c 46 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright (C) 2013 Gateworks Corporation
  4. *
  5. * Author: Tim Harvey <tharvey@gateworks.com>
  6. */
  7. #include <asm/arch/clock.h>
  8. #include <asm/arch/mx6-pins.h>
  9. #include <asm/arch/sys_proto.h>
  10. #include <asm/gpio.h>
  11. #include <asm/mach-imx/mxc_i2c.h>
  12. #include <fsl_esdhc_imx.h>
  13. #include <hwconfig.h>
  14. #include <power/pmic.h>
  15. #include <power/ltc3676_pmic.h>
  16. #include <power/pfuze100_pmic.h>
  17. #include "common.h"
  18. /* UART2: Serial Console */
  19. static iomux_v3_cfg_t const uart2_pads[] = {
  20. IOMUX_PADS(PAD_SD4_DAT7__UART2_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
  21. IOMUX_PADS(PAD_SD4_DAT4__UART2_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
  22. };
  23. void setup_iomux_uart(void)
  24. {
  25. SETUP_IOMUX_PADS(uart2_pads);
  26. }
  27. /* MMC */
  28. static iomux_v3_cfg_t const gw5904_emmc_pads[] = {
  29. IOMUX_PADS(PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  30. IOMUX_PADS(PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  31. IOMUX_PADS(PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  32. IOMUX_PADS(PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  33. IOMUX_PADS(PAD_SD3_DAT4__SD3_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  34. IOMUX_PADS(PAD_SD3_DAT5__SD3_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  35. IOMUX_PADS(PAD_SD3_DAT6__SD3_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  36. IOMUX_PADS(PAD_SD3_DAT7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  37. IOMUX_PADS(PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  38. IOMUX_PADS(PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  39. IOMUX_PADS(PAD_SD3_RST__SD3_RESET | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  40. };
  41. /* 4-bit microSD on SD2 */
  42. static iomux_v3_cfg_t const gw5904_mmc_pads[] = {
  43. IOMUX_PADS(PAD_SD2_CLK__SD2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  44. IOMUX_PADS(PAD_SD2_CMD__SD2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  45. IOMUX_PADS(PAD_SD2_DAT0__SD2_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  46. IOMUX_PADS(PAD_SD2_DAT1__SD2_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  47. IOMUX_PADS(PAD_SD2_DAT2__SD2_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  48. IOMUX_PADS(PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  49. /* CD */
  50. IOMUX_PADS(PAD_NANDF_CS0__GPIO6_IO11 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  51. };
  52. /* 8-bit eMMC on SD2/NAND */
  53. static iomux_v3_cfg_t const gw560x_emmc_sd2_pads[] = {
  54. IOMUX_PADS(PAD_SD2_CLK__SD2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  55. IOMUX_PADS(PAD_SD2_CMD__SD2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  56. IOMUX_PADS(PAD_SD2_DAT0__SD2_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  57. IOMUX_PADS(PAD_SD2_DAT1__SD2_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  58. IOMUX_PADS(PAD_SD2_DAT2__SD2_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  59. IOMUX_PADS(PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  60. IOMUX_PADS(PAD_NANDF_D4__SD2_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  61. IOMUX_PADS(PAD_NANDF_D5__SD2_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  62. IOMUX_PADS(PAD_NANDF_D6__SD2_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  63. IOMUX_PADS(PAD_NANDF_D7__SD2_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  64. };
  65. static iomux_v3_cfg_t const usdhc3_pads[] = {
  66. IOMUX_PADS(PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  67. IOMUX_PADS(PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  68. IOMUX_PADS(PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  69. IOMUX_PADS(PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  70. IOMUX_PADS(PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  71. IOMUX_PADS(PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  72. IOMUX_PADS(PAD_SD3_DAT5__GPIO7_IO00 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
  73. };
  74. /*
  75. * I2C pad configs:
  76. * I2C1: GSC
  77. * I2C2: PMIC,PCIe Switch,Clock,Mezz
  78. * I2C3: Multimedia/Expansion
  79. */
  80. static struct i2c_pads_info mx6q_i2c_pad_info[] = {
  81. {
  82. .scl = {
  83. .i2c_mode = MX6Q_PAD_EIM_D21__I2C1_SCL | PC,
  84. .gpio_mode = MX6Q_PAD_EIM_D21__GPIO3_IO21 | PC,
  85. .gp = IMX_GPIO_NR(3, 21)
  86. },
  87. .sda = {
  88. .i2c_mode = MX6Q_PAD_EIM_D28__I2C1_SDA | PC,
  89. .gpio_mode = MX6Q_PAD_EIM_D28__GPIO3_IO28 | PC,
  90. .gp = IMX_GPIO_NR(3, 28)
  91. }
  92. }, {
  93. .scl = {
  94. .i2c_mode = MX6Q_PAD_KEY_COL3__I2C2_SCL | PC,
  95. .gpio_mode = MX6Q_PAD_KEY_COL3__GPIO4_IO12 | PC,
  96. .gp = IMX_GPIO_NR(4, 12)
  97. },
  98. .sda = {
  99. .i2c_mode = MX6Q_PAD_KEY_ROW3__I2C2_SDA | PC,
  100. .gpio_mode = MX6Q_PAD_KEY_ROW3__GPIO4_IO13 | PC,
  101. .gp = IMX_GPIO_NR(4, 13)
  102. }
  103. }, {
  104. .scl = {
  105. .i2c_mode = MX6Q_PAD_GPIO_3__I2C3_SCL | PC,
  106. .gpio_mode = MX6Q_PAD_GPIO_3__GPIO1_IO03 | PC,
  107. .gp = IMX_GPIO_NR(1, 3)
  108. },
  109. .sda = {
  110. .i2c_mode = MX6Q_PAD_GPIO_6__I2C3_SDA | PC,
  111. .gpio_mode = MX6Q_PAD_GPIO_6__GPIO1_IO06 | PC,
  112. .gp = IMX_GPIO_NR(1, 6)
  113. }
  114. }
  115. };
  116. static struct i2c_pads_info mx6dl_i2c_pad_info[] = {
  117. {
  118. .scl = {
  119. .i2c_mode = MX6DL_PAD_EIM_D21__I2C1_SCL | PC,
  120. .gpio_mode = MX6DL_PAD_EIM_D21__GPIO3_IO21 | PC,
  121. .gp = IMX_GPIO_NR(3, 21)
  122. },
  123. .sda = {
  124. .i2c_mode = MX6DL_PAD_EIM_D28__I2C1_SDA | PC,
  125. .gpio_mode = MX6DL_PAD_EIM_D28__GPIO3_IO28 | PC,
  126. .gp = IMX_GPIO_NR(3, 28)
  127. }
  128. }, {
  129. .scl = {
  130. .i2c_mode = MX6DL_PAD_KEY_COL3__I2C2_SCL | PC,
  131. .gpio_mode = MX6DL_PAD_KEY_COL3__GPIO4_IO12 | PC,
  132. .gp = IMX_GPIO_NR(4, 12)
  133. },
  134. .sda = {
  135. .i2c_mode = MX6DL_PAD_KEY_ROW3__I2C2_SDA | PC,
  136. .gpio_mode = MX6DL_PAD_KEY_ROW3__GPIO4_IO13 | PC,
  137. .gp = IMX_GPIO_NR(4, 13)
  138. }
  139. }, {
  140. .scl = {
  141. .i2c_mode = MX6DL_PAD_GPIO_3__I2C3_SCL | PC,
  142. .gpio_mode = MX6DL_PAD_GPIO_3__GPIO1_IO03 | PC,
  143. .gp = IMX_GPIO_NR(1, 3)
  144. },
  145. .sda = {
  146. .i2c_mode = MX6DL_PAD_GPIO_6__I2C3_SDA | PC,
  147. .gpio_mode = MX6DL_PAD_GPIO_6__GPIO1_IO06 | PC,
  148. .gp = IMX_GPIO_NR(1, 6)
  149. }
  150. }
  151. };
  152. void setup_ventana_i2c(int i2c)
  153. {
  154. struct i2c_pads_info *p;
  155. if (is_cpu_type(MXC_CPU_MX6Q))
  156. p = &mx6q_i2c_pad_info[i2c];
  157. else
  158. p = &mx6dl_i2c_pad_info[i2c];
  159. setup_i2c(i2c, CONFIG_SYS_I2C_SPEED, 0x7f, p);
  160. }
  161. /*
  162. * Baseboard specific GPIO
  163. */
  164. static iomux_v3_cfg_t const gw51xx_gpio_pads[] = {
  165. /* PANLEDG# */
  166. IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
  167. /* PANLEDR# */
  168. IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
  169. /* IOEXP_PWREN# */
  170. IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
  171. /* IOEXP_IRQ# */
  172. IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
  173. /* GPS_SHDN */
  174. IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
  175. /* VID_PWR */
  176. IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG),
  177. /* PCI_RST# */
  178. IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG),
  179. /* PCIESKT_WDIS# */
  180. IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
  181. };
  182. static iomux_v3_cfg_t const gw52xx_gpio_pads[] = {
  183. /* SD3_VSELECT */
  184. IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG),
  185. /* RS232_EN# */
  186. IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG),
  187. /* MSATA_EN */
  188. IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG),
  189. /* PANLEDG# */
  190. IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
  191. /* PANLEDR# */
  192. IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
  193. /* IOEXP_PWREN# */
  194. IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
  195. /* IOEXP_IRQ# */
  196. IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
  197. /* CAN_STBY */
  198. IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
  199. /* MX6_LOCLED# */
  200. IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
  201. /* GPS_SHDN */
  202. IOMUX_PADS(PAD_ENET_RXD0__GPIO1_IO27 | DIO_PAD_CFG),
  203. /* USBOTG_SEL */
  204. IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
  205. /* VID_PWR */
  206. IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG),
  207. /* PCI_RST# */
  208. IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG),
  209. /* PCI_RST# (GW522x) */
  210. IOMUX_PADS(PAD_EIM_D23__GPIO3_IO23 | DIO_PAD_CFG),
  211. /* RS485_EN */
  212. IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG),
  213. /* PCIESKT_WDIS# */
  214. IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
  215. };
  216. static iomux_v3_cfg_t const gw53xx_gpio_pads[] = {
  217. /* SD3_VSELECT */
  218. IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG),
  219. /* RS232_EN# */
  220. IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG),
  221. /* MSATA_EN */
  222. IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG),
  223. /* CAN_STBY */
  224. IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
  225. /* USB_HUBRST# */
  226. IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
  227. /* PANLEDG# */
  228. IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
  229. /* PANLEDR# */
  230. IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
  231. /* MX6_LOCLED# */
  232. IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
  233. /* IOEXP_PWREN# */
  234. IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
  235. /* IOEXP_IRQ# */
  236. IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
  237. /* DIOI2C_DIS# */
  238. IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG),
  239. /* GPS_SHDN */
  240. IOMUX_PADS(PAD_ENET_RXD0__GPIO1_IO27 | DIO_PAD_CFG),
  241. /* VID_EN */
  242. IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG),
  243. /* PCI_RST# */
  244. IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG),
  245. /* RS485_EN */
  246. IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG),
  247. /* PCIESKT_WDIS# */
  248. IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
  249. };
  250. static iomux_v3_cfg_t const gw54xx_gpio_pads[] = {
  251. /* SD3_VSELECT */
  252. IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG),
  253. /* RS232_EN# */
  254. IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG),
  255. /* MSATA_EN */
  256. IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG),
  257. /* CAN_STBY */
  258. IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
  259. /* PANLEDG# */
  260. IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
  261. /* PANLEDR# */
  262. IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
  263. /* MX6_LOCLED# */
  264. IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
  265. /* USB_HUBRST# */
  266. IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16 | DIO_PAD_CFG),
  267. /* MIPI_DIO */
  268. IOMUX_PADS(PAD_SD1_DAT3__GPIO1_IO21 | DIO_PAD_CFG),
  269. /* RS485_EN */
  270. IOMUX_PADS(PAD_EIM_D24__GPIO3_IO24 | DIO_PAD_CFG),
  271. /* IOEXP_PWREN# */
  272. IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
  273. /* IOEXP_IRQ# */
  274. IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
  275. /* DIOI2C_DIS# */
  276. IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG),
  277. /* PCI_RST# */
  278. IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG),
  279. /* VID_EN */
  280. IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG),
  281. /* RS485_EN */
  282. IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG),
  283. /* PCIESKT_WDIS# */
  284. IOMUX_PADS(PAD_DISP0_DAT23__GPIO5_IO17 | DIO_PAD_CFG),
  285. };
  286. static iomux_v3_cfg_t const gw551x_gpio_pads[] = {
  287. /* CAN_STBY */
  288. IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
  289. /* PANLED# */
  290. IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
  291. /* PCI_RST# */
  292. IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG),
  293. /* PCIESKT_WDIS# */
  294. IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
  295. };
  296. static iomux_v3_cfg_t const gw552x_gpio_pads[] = {
  297. /* MSATA_EN */
  298. IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG),
  299. /* USBOTG_SEL */
  300. IOMUX_PADS(PAD_GPIO_7__GPIO1_IO07 | DIO_PAD_CFG),
  301. /* USB_HUBRST# */
  302. IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
  303. /* PANLEDG# */
  304. IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
  305. /* PANLEDR# */
  306. IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
  307. /* MX6_LOCLED# */
  308. IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
  309. /* PCI_RST# */
  310. IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG),
  311. /* MX6_DIO[4:9] */
  312. IOMUX_PADS(PAD_CSI0_PIXCLK__GPIO5_IO18 | DIO_PAD_CFG),
  313. IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG),
  314. IOMUX_PADS(PAD_CSI0_VSYNC__GPIO5_IO21 | DIO_PAD_CFG),
  315. IOMUX_PADS(PAD_CSI0_DAT4__GPIO5_IO22 | DIO_PAD_CFG),
  316. IOMUX_PADS(PAD_CSI0_DAT5__GPIO5_IO23 | DIO_PAD_CFG),
  317. IOMUX_PADS(PAD_CSI0_DAT7__GPIO5_IO25 | DIO_PAD_CFG),
  318. /* PCIEGBE1_OFF# */
  319. IOMUX_PADS(PAD_GPIO_1__GPIO1_IO01 | DIO_PAD_CFG),
  320. /* PCIEGBE2_OFF# */
  321. IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
  322. /* PCIESKT_WDIS# */
  323. IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
  324. };
  325. static iomux_v3_cfg_t const gw553x_gpio_pads[] = {
  326. /* SD3_VSELECT */
  327. IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG),
  328. /* PANLEDG# */
  329. IOMUX_PADS(PAD_KEY_COL2__GPIO4_IO10 | DIO_PAD_CFG),
  330. /* PANLEDR# */
  331. IOMUX_PADS(PAD_KEY_ROW2__GPIO4_IO11 | DIO_PAD_CFG),
  332. /* VID_PWR */
  333. IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG),
  334. /* PCI_RST# */
  335. IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG),
  336. /* PCIESKT_WDIS# */
  337. IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
  338. };
  339. static iomux_v3_cfg_t const gw560x_gpio_pads[] = {
  340. /* RS232_EN# */
  341. IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG),
  342. /* CAN_STBY */
  343. IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
  344. /* USB_HUBRST# */
  345. IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
  346. /* PANLEDG# */
  347. IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
  348. /* PANLEDR# */
  349. IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
  350. /* MX6_LOCLED# */
  351. IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
  352. /* IOEXP_PWREN# */
  353. IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
  354. /* IOEXP_IRQ# */
  355. IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
  356. /* DIOI2C_DIS# */
  357. IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG),
  358. /* VID_EN */
  359. IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG),
  360. /* PCI_RST# */
  361. IOMUX_PADS(PAD_DISP0_DAT10__GPIO4_IO31 | DIO_PAD_CFG),
  362. /* RS485_EN */
  363. IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG),
  364. /* PCIESKT_WDIS# */
  365. IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
  366. /* USBH2_PEN (OTG) */
  367. IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
  368. /* 12V0_PWR_EN */
  369. IOMUX_PADS(PAD_DISP0_DAT5__GPIO4_IO26 | DIO_PAD_CFG),
  370. };
  371. static iomux_v3_cfg_t const gw5901_gpio_pads[] = {
  372. /* MX6_LOCLED# */
  373. IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
  374. /* ETH1_EN */
  375. IOMUX_PADS(PAD_GPIO_1__GPIO1_IO01 | DIO_PAD_CFG),
  376. /* CAN_STBY */
  377. IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
  378. /* PCI_RST# */
  379. IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG),
  380. /* PMIC reset */
  381. IOMUX_PADS(PAD_DISP0_DAT8__WDOG1_B | DIO_PAD_CFG),
  382. /* COM_CFGA/B/C/D */
  383. IOMUX_PADS(PAD_DISP0_DAT20__GPIO5_IO14 | DIO_PAD_CFG),
  384. IOMUX_PADS(PAD_DISP0_DAT21__GPIO5_IO15 | DIO_PAD_CFG),
  385. IOMUX_PADS(PAD_DISP0_DAT22__GPIO5_IO16 | DIO_PAD_CFG),
  386. IOMUX_PADS(PAD_DISP0_DAT23__GPIO5_IO17 | DIO_PAD_CFG),
  387. /* ETI_IRQ# */
  388. IOMUX_PADS(PAD_GPIO_5__GPIO1_IO05 | DIO_PAD_CFG),
  389. /* DIO_IRQ# */
  390. IOMUX_PADS(PAD_GPIO_7__GPIO1_IO07 | DIO_PAD_CFG),
  391. /* FIBER_SIGDET */
  392. IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
  393. };
  394. static iomux_v3_cfg_t const gw5902_gpio_pads[] = {
  395. /* MX6_LOCLED# */
  396. IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
  397. /* CAN1_STBY */
  398. IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
  399. /* CAN2_STBY */
  400. IOMUX_PADS(PAD_SD3_CLK__GPIO7_IO03 | DIO_PAD_CFG),
  401. /* UART1_EN# */
  402. IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG),
  403. /* PCI_RST# */
  404. IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG),
  405. /* 5V_UVLO */
  406. IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
  407. /* ETI_IRQ# */
  408. IOMUX_PADS(PAD_GPIO_5__GPIO1_IO05 | DIO_PAD_CFG),
  409. /* DIO_IRQ# */
  410. IOMUX_PADS(PAD_GPIO_7__GPIO1_IO07 | DIO_PAD_CFG),
  411. /* USBOTG_PEN */
  412. IOMUX_PADS(PAD_EIM_D23__GPIO3_IO23 | DIO_PAD_CFG),
  413. };
  414. static iomux_v3_cfg_t const gw5903_gpio_pads[] = {
  415. /* BKLT_12VEN */
  416. IOMUX_PADS(PAD_GPIO_7__GPIO1_IO07 | DIO_PAD_CFG),
  417. /* EMMY_PDN# */
  418. IOMUX_PADS(PAD_NANDF_D2__GPIO2_IO02 | DIO_PAD_CFG),
  419. /* EMMY_CFG1# */
  420. IOMUX_PADS(PAD_NANDF_D3__GPIO2_IO03 | DIO_PAD_CFG),
  421. /* EMMY_CFG1# */
  422. IOMUX_PADS(PAD_NANDF_D4__GPIO2_IO04 | DIO_PAD_CFG),
  423. /* USBH1_PEN (EHCI) */
  424. IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG),
  425. /* USBH2_PEN (OTG) */
  426. IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
  427. /* USBDPC_PEN */
  428. IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
  429. /* TOUCH_RST */
  430. IOMUX_PADS(PAD_KEY_COL1__GPIO4_IO08 | DIO_PAD_CFG),
  431. /* AUDIO_RST# */
  432. IOMUX_PADS(PAD_DISP0_DAT23__GPIO5_IO17 | DIO_PAD_CFG),
  433. /* UART1_TEN# */
  434. IOMUX_PADS(PAD_CSI0_DAT12__GPIO5_IO30 | DIO_PAD_CFG),
  435. /* MX6_LOCLED# */
  436. IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG),
  437. /* LVDS_BKLEN # */
  438. IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
  439. /* RGMII_PDWN# */
  440. IOMUX_PADS(PAD_ENET_CRS_DV__GPIO1_IO25 | DIO_PAD_CFG),
  441. /* TOUCH_IRQ# */
  442. IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
  443. /* TOUCH_RST# */
  444. IOMUX_PADS(PAD_KEY_COL1__GPIO4_IO08 | DIO_PAD_CFG),
  445. };
  446. static iomux_v3_cfg_t const gw5904_gpio_pads[] = {
  447. /* USB_HUBRST# */
  448. IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
  449. /* PANLEDG# */
  450. IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
  451. /* PANLEDR# */
  452. IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
  453. /* MX6_LOCLED# */
  454. IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
  455. /* IOEXP_PWREN# */
  456. IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
  457. /* IOEXP_IRQ# */
  458. IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
  459. /* DIOI2C_DIS# */
  460. IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG),
  461. /* UART_RS485 */
  462. IOMUX_PADS(PAD_DISP0_DAT2__GPIO4_IO23 | DIO_PAD_CFG),
  463. /* UART_HALF */
  464. IOMUX_PADS(PAD_DISP0_DAT3__GPIO4_IO24 | DIO_PAD_CFG),
  465. /* SKT1_WDIS# */
  466. IOMUX_PADS(PAD_DISP0_DAT17__GPIO5_IO11 | DIO_PAD_CFG),
  467. /* SKT1_RST# */
  468. IOMUX_PADS(PAD_DISP0_DAT18__GPIO5_IO12 | DIO_PAD_CFG),
  469. /* SKT2_WDIS# */
  470. IOMUX_PADS(PAD_DISP0_DAT19__GPIO5_IO13 | DIO_PAD_CFG),
  471. /* SKT2_RST# */
  472. IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG),
  473. /* M2_OFF# */
  474. IOMUX_PADS(PAD_SD2_DAT0__GPIO1_IO15 | DIO_PAD_CFG),
  475. /* M2_WDIS# */
  476. IOMUX_PADS(PAD_SD2_DAT1__GPIO1_IO14 | DIO_PAD_CFG),
  477. /* M2_RST# */
  478. IOMUX_PADS(PAD_SD2_DAT2__GPIO1_IO13 | DIO_PAD_CFG),
  479. /* RS232_EN# */
  480. IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG),
  481. };
  482. static iomux_v3_cfg_t const gw5905_gpio_pads[] = {
  483. /* EMMY_PDN# */
  484. IOMUX_PADS(PAD_NANDF_D3__GPIO2_IO03 | DIO_PAD_CFG),
  485. /* MX6_LOCLED# */
  486. IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG),
  487. /* MIPI_RST */
  488. IOMUX_PADS(PAD_SD2_DAT0__GPIO1_IO15 | DIO_PAD_CFG),
  489. /* MIPI_PWDN */
  490. IOMUX_PADS(PAD_SD2_DAT1__GPIO1_IO14 | DIO_PAD_CFG),
  491. /* USBEHCI_SEL */
  492. IOMUX_PADS(PAD_GPIO_7__GPIO1_IO07 | DIO_PAD_CFG),
  493. /* PCI_RST# */
  494. IOMUX_PADS(PAD_GPIO_16__GPIO7_IO11 | DIO_PAD_CFG),
  495. /* LVDS_BKLEN # */
  496. IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
  497. /* PCIESKT_WDIS# */
  498. IOMUX_PADS(PAD_GPIO_18__GPIO7_IO13 | DIO_PAD_CFG),
  499. /* SPK_SHDN# */
  500. IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG),
  501. /* LOCLED# */
  502. IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG),
  503. /* FLASH LED1 */
  504. IOMUX_PADS(PAD_DISP0_DAT11__GPIO5_IO05 | DIO_PAD_CFG),
  505. /* FLASH LED2 */
  506. IOMUX_PADS(PAD_DISP0_DAT12__GPIO5_IO06 | DIO_PAD_CFG),
  507. /* DECT_RST# */
  508. IOMUX_PADS(PAD_DISP0_DAT20__GPIO5_IO14 | DIO_PAD_CFG),
  509. /* USBH1_PEN (EHCI) */
  510. IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG),
  511. /* LVDS_PWM */
  512. IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
  513. /* CODEC_RST */
  514. IOMUX_PADS(PAD_DISP0_DAT23__GPIO5_IO17 | DIO_PAD_CFG),
  515. /* GYRO_CONTROL/DATA_EN */
  516. IOMUX_PADS(PAD_CSI0_DAT8__GPIO5_IO26 | DIO_PAD_CFG),
  517. /* TOUCH_RST */
  518. IOMUX_PADS(PAD_KEY_COL1__GPIO4_IO08 | DIO_PAD_CFG),
  519. /* TOUCH_IRQ */
  520. IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
  521. };
  522. /* Digital I/O */
  523. struct dio_cfg gw51xx_dio[] = {
  524. {
  525. { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
  526. IMX_GPIO_NR(1, 16),
  527. { 0, 0 },
  528. 0
  529. },
  530. {
  531. { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
  532. IMX_GPIO_NR(1, 19),
  533. { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
  534. 2
  535. },
  536. {
  537. { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
  538. IMX_GPIO_NR(1, 17),
  539. { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
  540. 3
  541. },
  542. {
  543. { IOMUX_PADS(PAD_SD1_CMD__GPIO1_IO18) },
  544. IMX_GPIO_NR(1, 18),
  545. { IOMUX_PADS(PAD_SD1_CMD__PWM4_OUT) },
  546. 4
  547. },
  548. };
  549. struct dio_cfg gw52xx_dio[] = {
  550. {
  551. { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
  552. IMX_GPIO_NR(1, 16),
  553. { 0, 0 },
  554. 0
  555. },
  556. {
  557. { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
  558. IMX_GPIO_NR(1, 19),
  559. { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
  560. 2
  561. },
  562. {
  563. { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
  564. IMX_GPIO_NR(1, 17),
  565. { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
  566. 3
  567. },
  568. {
  569. { IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) },
  570. IMX_GPIO_NR(1, 20),
  571. { 0, 0 },
  572. 0
  573. },
  574. };
  575. struct dio_cfg gw53xx_dio[] = {
  576. {
  577. { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
  578. IMX_GPIO_NR(1, 16),
  579. { 0, 0 },
  580. 0
  581. },
  582. {
  583. { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
  584. IMX_GPIO_NR(1, 19),
  585. { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
  586. 2
  587. },
  588. {
  589. { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
  590. IMX_GPIO_NR(1, 17),
  591. { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
  592. 3
  593. },
  594. {
  595. {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) },
  596. IMX_GPIO_NR(1, 20),
  597. { 0, 0 },
  598. 0
  599. },
  600. };
  601. struct dio_cfg gw54xx_dio[] = {
  602. {
  603. { IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09) },
  604. IMX_GPIO_NR(1, 9),
  605. { IOMUX_PADS(PAD_GPIO_9__PWM1_OUT) },
  606. 1
  607. },
  608. {
  609. { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
  610. IMX_GPIO_NR(1, 19),
  611. { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
  612. 2
  613. },
  614. {
  615. { IOMUX_PADS(PAD_SD4_DAT1__GPIO2_IO09) },
  616. IMX_GPIO_NR(2, 9),
  617. { IOMUX_PADS(PAD_SD4_DAT1__PWM3_OUT) },
  618. 3
  619. },
  620. {
  621. { IOMUX_PADS(PAD_SD4_DAT2__GPIO2_IO10) },
  622. IMX_GPIO_NR(2, 10),
  623. { IOMUX_PADS(PAD_SD4_DAT2__PWM4_OUT) },
  624. 4
  625. },
  626. };
  627. struct dio_cfg gw551x_dio[] = {
  628. {
  629. { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
  630. IMX_GPIO_NR(1, 19),
  631. { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
  632. 2
  633. },
  634. {
  635. { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
  636. IMX_GPIO_NR(1, 17),
  637. { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
  638. 3
  639. },
  640. };
  641. struct dio_cfg gw552x_dio[] = {
  642. {
  643. { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
  644. IMX_GPIO_NR(1, 16),
  645. { 0, 0 },
  646. 0
  647. },
  648. {
  649. { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
  650. IMX_GPIO_NR(1, 19),
  651. { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
  652. 2
  653. },
  654. {
  655. { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
  656. IMX_GPIO_NR(1, 17),
  657. { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
  658. 3
  659. },
  660. {
  661. {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) },
  662. IMX_GPIO_NR(1, 20),
  663. { 0, 0 },
  664. 0
  665. },
  666. {
  667. {IOMUX_PADS(PAD_CSI0_PIXCLK__GPIO5_IO18) },
  668. IMX_GPIO_NR(5, 18),
  669. { 0, 0 },
  670. 0
  671. },
  672. {
  673. {IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20) },
  674. IMX_GPIO_NR(5, 20),
  675. { 0, 0 },
  676. 0
  677. },
  678. {
  679. {IOMUX_PADS(PAD_CSI0_VSYNC__GPIO5_IO21) },
  680. IMX_GPIO_NR(5, 21),
  681. { 0, 0 },
  682. 0
  683. },
  684. {
  685. {IOMUX_PADS(PAD_CSI0_DAT4__GPIO5_IO22) },
  686. IMX_GPIO_NR(5, 22),
  687. { 0, 0 },
  688. 0
  689. },
  690. {
  691. {IOMUX_PADS(PAD_CSI0_DAT5__GPIO5_IO23) },
  692. IMX_GPIO_NR(5, 23),
  693. { 0, 0 },
  694. 0
  695. },
  696. {
  697. {IOMUX_PADS(PAD_CSI0_DAT7__GPIO5_IO25) },
  698. IMX_GPIO_NR(5, 25),
  699. { 0, 0 },
  700. 0
  701. },
  702. };
  703. struct dio_cfg gw553x_dio[] = {
  704. {
  705. { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
  706. IMX_GPIO_NR(1, 16),
  707. { 0, 0 },
  708. 0
  709. },
  710. {
  711. { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
  712. IMX_GPIO_NR(1, 19),
  713. { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
  714. 2
  715. },
  716. {
  717. { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
  718. IMX_GPIO_NR(1, 17),
  719. { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
  720. 3
  721. },
  722. {
  723. { IOMUX_PADS(PAD_SD1_CMD__GPIO1_IO18) },
  724. IMX_GPIO_NR(1, 18),
  725. { IOMUX_PADS(PAD_SD1_CMD__PWM4_OUT) },
  726. 4
  727. },
  728. };
  729. struct dio_cfg gw560x_dio[] = {
  730. {
  731. { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
  732. IMX_GPIO_NR(1, 16),
  733. { 0, 0 },
  734. 0
  735. },
  736. {
  737. { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
  738. IMX_GPIO_NR(1, 19),
  739. { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
  740. 2
  741. },
  742. {
  743. { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
  744. IMX_GPIO_NR(1, 17),
  745. { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
  746. 3
  747. },
  748. {
  749. {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) },
  750. IMX_GPIO_NR(1, 20),
  751. { 0, 0 },
  752. 0
  753. },
  754. };
  755. struct dio_cfg gw5901_dio[] = {
  756. {
  757. { IOMUX_PADS(PAD_DISP0_DAT20__GPIO5_IO14) },
  758. IMX_GPIO_NR(5, 14),
  759. { 0, 0 },
  760. 0
  761. },
  762. {
  763. { IOMUX_PADS(PAD_DISP0_DAT21__GPIO5_IO15) },
  764. IMX_GPIO_NR(5, 15),
  765. { 0, 0 },
  766. 0
  767. },
  768. {
  769. { IOMUX_PADS(PAD_DISP0_DAT22__GPIO5_IO16) },
  770. IMX_GPIO_NR(5, 16),
  771. { 0, 0 },
  772. 0
  773. },
  774. {
  775. { IOMUX_PADS(PAD_DISP0_DAT23__GPIO5_IO17) },
  776. IMX_GPIO_NR(5, 17),
  777. { 0, 0 },
  778. 0
  779. },
  780. };
  781. struct dio_cfg gw5902_dio[] = {
  782. {
  783. { IOMUX_PADS(PAD_DISP0_DAT20__GPIO5_IO14) },
  784. IMX_GPIO_NR(5, 14),
  785. { 0, 0 },
  786. 0
  787. },
  788. {
  789. { IOMUX_PADS(PAD_DISP0_DAT21__GPIO5_IO15) },
  790. IMX_GPIO_NR(5, 15),
  791. { 0, 0 },
  792. 0
  793. },
  794. {
  795. { IOMUX_PADS(PAD_DISP0_DAT22__GPIO5_IO16) },
  796. IMX_GPIO_NR(5, 16),
  797. { 0, 0 },
  798. 0
  799. },
  800. {
  801. { IOMUX_PADS(PAD_DISP0_DAT23__GPIO5_IO17) },
  802. IMX_GPIO_NR(5, 17),
  803. { 0, 0 },
  804. 0
  805. },
  806. };
  807. struct dio_cfg gw5903_dio[] = {
  808. };
  809. struct dio_cfg gw5904_dio[] = {
  810. {
  811. { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
  812. IMX_GPIO_NR(1, 16),
  813. { 0, 0 },
  814. 0
  815. },
  816. {
  817. { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
  818. IMX_GPIO_NR(1, 19),
  819. { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
  820. 2
  821. },
  822. {
  823. { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
  824. IMX_GPIO_NR(1, 17),
  825. { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
  826. 3
  827. },
  828. {
  829. {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) },
  830. IMX_GPIO_NR(1, 20),
  831. { 0, 0 },
  832. 0
  833. },
  834. {
  835. {IOMUX_PADS(PAD_NANDF_D0__GPIO2_IO00) },
  836. IMX_GPIO_NR(2, 0),
  837. { 0, 0 },
  838. 0
  839. },
  840. {
  841. {IOMUX_PADS(PAD_NANDF_D1__GPIO2_IO01) },
  842. IMX_GPIO_NR(2, 1),
  843. { 0, 0 },
  844. 0
  845. },
  846. {
  847. {IOMUX_PADS(PAD_NANDF_D2__GPIO2_IO02) },
  848. IMX_GPIO_NR(2, 2),
  849. { 0, 0 },
  850. 0
  851. },
  852. {
  853. {IOMUX_PADS(PAD_NANDF_D3__GPIO2_IO03) },
  854. IMX_GPIO_NR(2, 3),
  855. { 0, 0 },
  856. 0
  857. },
  858. {
  859. {IOMUX_PADS(PAD_NANDF_D4__GPIO2_IO04) },
  860. IMX_GPIO_NR(2, 4),
  861. { 0, 0 },
  862. 0
  863. },
  864. {
  865. {IOMUX_PADS(PAD_NANDF_D5__GPIO2_IO05) },
  866. IMX_GPIO_NR(2, 5),
  867. { 0, 0 },
  868. 0
  869. },
  870. {
  871. {IOMUX_PADS(PAD_NANDF_D6__GPIO2_IO06) },
  872. IMX_GPIO_NR(2, 6),
  873. { 0, 0 },
  874. 0
  875. },
  876. {
  877. {IOMUX_PADS(PAD_NANDF_D7__GPIO2_IO07) },
  878. IMX_GPIO_NR(2, 7),
  879. { 0, 0 },
  880. 0
  881. },
  882. };
  883. struct dio_cfg gw5906_dio[] = {
  884. {
  885. { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
  886. IMX_GPIO_NR(1, 16),
  887. { 0, 0 },
  888. 0
  889. },
  890. {
  891. { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
  892. IMX_GPIO_NR(1, 19),
  893. { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
  894. 2
  895. },
  896. {
  897. { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
  898. IMX_GPIO_NR(1, 17),
  899. { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
  900. 3
  901. },
  902. {
  903. {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) },
  904. IMX_GPIO_NR(1, 20),
  905. { 0, 0 },
  906. 0
  907. },
  908. };
  909. /*
  910. * Board Specific GPIO
  911. */
  912. struct ventana gpio_cfg[GW_UNKNOWN] = {
  913. /* GW5400proto */
  914. {
  915. .gpio_pads = gw54xx_gpio_pads,
  916. .num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2,
  917. .dio_cfg = gw54xx_dio,
  918. .dio_num = ARRAY_SIZE(gw54xx_dio),
  919. .leds = {
  920. IMX_GPIO_NR(4, 6),
  921. IMX_GPIO_NR(4, 10),
  922. IMX_GPIO_NR(4, 15),
  923. },
  924. .pcie_rst = IMX_GPIO_NR(1, 29),
  925. .mezz_pwren = IMX_GPIO_NR(4, 7),
  926. .mezz_irq = IMX_GPIO_NR(4, 9),
  927. .rs485en = IMX_GPIO_NR(3, 24),
  928. .dioi2c_en = IMX_GPIO_NR(4, 5),
  929. .pcie_sson = IMX_GPIO_NR(1, 20),
  930. .otgpwr_en = IMX_GPIO_NR(3, 22),
  931. .mmc_cd = IMX_GPIO_NR(7, 0),
  932. },
  933. /* GW51xx */
  934. {
  935. .gpio_pads = gw51xx_gpio_pads,
  936. .num_pads = ARRAY_SIZE(gw51xx_gpio_pads)/2,
  937. .dio_cfg = gw51xx_dio,
  938. .dio_num = ARRAY_SIZE(gw51xx_dio),
  939. .leds = {
  940. IMX_GPIO_NR(4, 6),
  941. IMX_GPIO_NR(4, 10),
  942. },
  943. .pcie_rst = IMX_GPIO_NR(1, 0),
  944. .mezz_pwren = IMX_GPIO_NR(2, 19),
  945. .mezz_irq = IMX_GPIO_NR(2, 18),
  946. .gps_shdn = IMX_GPIO_NR(1, 2),
  947. .vidin_en = IMX_GPIO_NR(5, 20),
  948. .wdis = IMX_GPIO_NR(7, 12),
  949. .otgpwr_en = IMX_GPIO_NR(3, 22),
  950. .nand = true,
  951. },
  952. /* GW52xx */
  953. {
  954. .gpio_pads = gw52xx_gpio_pads,
  955. .num_pads = ARRAY_SIZE(gw52xx_gpio_pads)/2,
  956. .dio_cfg = gw52xx_dio,
  957. .dio_num = ARRAY_SIZE(gw52xx_dio),
  958. .leds = {
  959. IMX_GPIO_NR(4, 6),
  960. IMX_GPIO_NR(4, 7),
  961. IMX_GPIO_NR(4, 15),
  962. },
  963. .pcie_rst = IMX_GPIO_NR(1, 29),
  964. .mezz_pwren = IMX_GPIO_NR(2, 19),
  965. .mezz_irq = IMX_GPIO_NR(2, 18),
  966. .gps_shdn = IMX_GPIO_NR(1, 27),
  967. .vidin_en = IMX_GPIO_NR(3, 31),
  968. .usb_sel = IMX_GPIO_NR(1, 2),
  969. .wdis = IMX_GPIO_NR(7, 12),
  970. .msata_en = GP_MSATA_SEL,
  971. .rs232_en = GP_RS232_EN,
  972. .otgpwr_en = IMX_GPIO_NR(3, 22),
  973. .vsel_pin = IMX_GPIO_NR(6, 14),
  974. .mmc_cd = IMX_GPIO_NR(7, 0),
  975. .nand = true,
  976. },
  977. /* GW53xx */
  978. {
  979. .gpio_pads = gw53xx_gpio_pads,
  980. .num_pads = ARRAY_SIZE(gw53xx_gpio_pads)/2,
  981. .dio_cfg = gw53xx_dio,
  982. .dio_num = ARRAY_SIZE(gw53xx_dio),
  983. .leds = {
  984. IMX_GPIO_NR(4, 6),
  985. IMX_GPIO_NR(4, 7),
  986. IMX_GPIO_NR(4, 15),
  987. },
  988. .pcie_rst = IMX_GPIO_NR(1, 29),
  989. .mezz_pwren = IMX_GPIO_NR(2, 19),
  990. .mezz_irq = IMX_GPIO_NR(2, 18),
  991. .gps_shdn = IMX_GPIO_NR(1, 27),
  992. .vidin_en = IMX_GPIO_NR(3, 31),
  993. .wdis = IMX_GPIO_NR(7, 12),
  994. .msata_en = GP_MSATA_SEL,
  995. .rs232_en = GP_RS232_EN,
  996. .otgpwr_en = IMX_GPIO_NR(3, 22),
  997. .vsel_pin = IMX_GPIO_NR(6, 14),
  998. .mmc_cd = IMX_GPIO_NR(7, 0),
  999. .nand = true,
  1000. },
  1001. /* GW54xx */
  1002. {
  1003. .gpio_pads = gw54xx_gpio_pads,
  1004. .num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2,
  1005. .dio_cfg = gw54xx_dio,
  1006. .dio_num = ARRAY_SIZE(gw54xx_dio),
  1007. .leds = {
  1008. IMX_GPIO_NR(4, 6),
  1009. IMX_GPIO_NR(4, 7),
  1010. IMX_GPIO_NR(4, 15),
  1011. },
  1012. .pcie_rst = IMX_GPIO_NR(1, 29),
  1013. .mezz_pwren = IMX_GPIO_NR(2, 19),
  1014. .mezz_irq = IMX_GPIO_NR(2, 18),
  1015. .rs485en = IMX_GPIO_NR(7, 1),
  1016. .vidin_en = IMX_GPIO_NR(3, 31),
  1017. .dioi2c_en = IMX_GPIO_NR(4, 5),
  1018. .pcie_sson = IMX_GPIO_NR(1, 20),
  1019. .wdis = IMX_GPIO_NR(5, 17),
  1020. .msata_en = GP_MSATA_SEL,
  1021. .rs232_en = GP_RS232_EN,
  1022. .otgpwr_en = IMX_GPIO_NR(3, 22),
  1023. .vsel_pin = IMX_GPIO_NR(6, 14),
  1024. .mmc_cd = IMX_GPIO_NR(7, 0),
  1025. .nand = true,
  1026. },
  1027. /* GW551x */
  1028. {
  1029. .gpio_pads = gw551x_gpio_pads,
  1030. .num_pads = ARRAY_SIZE(gw551x_gpio_pads)/2,
  1031. .dio_cfg = gw551x_dio,
  1032. .dio_num = ARRAY_SIZE(gw551x_dio),
  1033. .leds = {
  1034. IMX_GPIO_NR(4, 7),
  1035. },
  1036. .pcie_rst = IMX_GPIO_NR(1, 0),
  1037. .wdis = IMX_GPIO_NR(7, 12),
  1038. .nand = true,
  1039. },
  1040. /* GW552x */
  1041. {
  1042. .gpio_pads = gw552x_gpio_pads,
  1043. .num_pads = ARRAY_SIZE(gw552x_gpio_pads)/2,
  1044. .dio_cfg = gw552x_dio,
  1045. .dio_num = ARRAY_SIZE(gw552x_dio),
  1046. .leds = {
  1047. IMX_GPIO_NR(4, 6),
  1048. IMX_GPIO_NR(4, 7),
  1049. IMX_GPIO_NR(4, 15),
  1050. },
  1051. .pcie_rst = IMX_GPIO_NR(1, 29),
  1052. .usb_sel = IMX_GPIO_NR(1, 7),
  1053. .wdis = IMX_GPIO_NR(7, 12),
  1054. .msata_en = GP_MSATA_SEL,
  1055. .nand = true,
  1056. },
  1057. /* GW553x */
  1058. {
  1059. .gpio_pads = gw553x_gpio_pads,
  1060. .num_pads = ARRAY_SIZE(gw553x_gpio_pads)/2,
  1061. .dio_cfg = gw553x_dio,
  1062. .dio_num = ARRAY_SIZE(gw553x_dio),
  1063. .leds = {
  1064. IMX_GPIO_NR(4, 10),
  1065. IMX_GPIO_NR(4, 11),
  1066. },
  1067. .pcie_rst = IMX_GPIO_NR(1, 0),
  1068. .vidin_en = IMX_GPIO_NR(5, 20),
  1069. .wdis = IMX_GPIO_NR(7, 12),
  1070. .otgpwr_en = IMX_GPIO_NR(3, 22),
  1071. .vsel_pin = IMX_GPIO_NR(6, 14),
  1072. .mmc_cd = IMX_GPIO_NR(7, 0),
  1073. .nand = true,
  1074. },
  1075. /* GW560x */
  1076. {
  1077. .gpio_pads = gw560x_gpio_pads,
  1078. .num_pads = ARRAY_SIZE(gw560x_gpio_pads)/2,
  1079. .dio_cfg = gw560x_dio,
  1080. .dio_num = ARRAY_SIZE(gw560x_dio),
  1081. .leds = {
  1082. IMX_GPIO_NR(4, 6),
  1083. IMX_GPIO_NR(4, 7),
  1084. IMX_GPIO_NR(4, 15),
  1085. },
  1086. .pcie_rst = IMX_GPIO_NR(4, 31),
  1087. .mezz_pwren = IMX_GPIO_NR(2, 19),
  1088. .mezz_irq = IMX_GPIO_NR(2, 18),
  1089. .rs232_en = GP_RS232_EN,
  1090. .vidin_en = IMX_GPIO_NR(3, 31),
  1091. .wdis = IMX_GPIO_NR(7, 12),
  1092. .otgpwr_en = IMX_GPIO_NR(4, 15),
  1093. .mmc_cd = IMX_GPIO_NR(7, 0),
  1094. },
  1095. /* GW5901 */
  1096. {
  1097. .gpio_pads = gw5901_gpio_pads,
  1098. .num_pads = ARRAY_SIZE(gw5901_gpio_pads)/2,
  1099. .dio_cfg = gw5901_dio,
  1100. .leds = {
  1101. IMX_GPIO_NR(4, 15),
  1102. },
  1103. .pcie_rst = IMX_GPIO_NR(1, 29),
  1104. .nand = true,
  1105. },
  1106. /* GW5902 */
  1107. {
  1108. .gpio_pads = gw5902_gpio_pads,
  1109. .num_pads = ARRAY_SIZE(gw5902_gpio_pads)/2,
  1110. .dio_cfg = gw5902_dio,
  1111. .leds = {
  1112. IMX_GPIO_NR(4, 15),
  1113. },
  1114. .pcie_rst = IMX_GPIO_NR(1, 0),
  1115. .rs232_en = GP_RS232_EN,
  1116. .otgpwr_en = IMX_GPIO_NR(3, 23),
  1117. .nand = true,
  1118. },
  1119. /* GW5903 */
  1120. {
  1121. .gpio_pads = gw5903_gpio_pads,
  1122. .num_pads = ARRAY_SIZE(gw5903_gpio_pads)/2,
  1123. .dio_cfg = gw5903_dio,
  1124. .dio_num = ARRAY_SIZE(gw5903_dio),
  1125. .leds = {
  1126. IMX_GPIO_NR(6, 14),
  1127. },
  1128. .otgpwr_en = IMX_GPIO_NR(4, 15),
  1129. .mmc_cd = IMX_GPIO_NR(6, 11),
  1130. },
  1131. /* GW5904 */
  1132. {
  1133. .gpio_pads = gw5904_gpio_pads,
  1134. .num_pads = ARRAY_SIZE(gw5904_gpio_pads)/2,
  1135. .dio_cfg = gw5904_dio,
  1136. .dio_num = ARRAY_SIZE(gw5904_dio),
  1137. .leds = {
  1138. IMX_GPIO_NR(4, 6),
  1139. IMX_GPIO_NR(4, 7),
  1140. IMX_GPIO_NR(4, 15),
  1141. },
  1142. .pcie_rst = IMX_GPIO_NR(1, 0),
  1143. .mezz_pwren = IMX_GPIO_NR(2, 19),
  1144. .mezz_irq = IMX_GPIO_NR(2, 18),
  1145. .otgpwr_en = IMX_GPIO_NR(3, 22),
  1146. },
  1147. /* GW5905 */
  1148. {
  1149. .gpio_pads = gw5905_gpio_pads,
  1150. .num_pads = ARRAY_SIZE(gw5905_gpio_pads)/2,
  1151. .leds = {
  1152. IMX_GPIO_NR(6, 14),
  1153. },
  1154. .pcie_rst = IMX_GPIO_NR(7, 11),
  1155. .wdis = IMX_GPIO_NR(7, 13),
  1156. },
  1157. /* GW5906 */
  1158. {
  1159. .gpio_pads = gw552x_gpio_pads,
  1160. .num_pads = ARRAY_SIZE(gw552x_gpio_pads)/2,
  1161. .dio_cfg = gw5906_dio,
  1162. .dio_num = ARRAY_SIZE(gw5906_dio),
  1163. .leds = {
  1164. IMX_GPIO_NR(4, 6),
  1165. IMX_GPIO_NR(4, 7),
  1166. IMX_GPIO_NR(4, 15),
  1167. },
  1168. .pcie_rst = IMX_GPIO_NR(1, 29),
  1169. .usb_sel = IMX_GPIO_NR(1, 7),
  1170. .wdis = IMX_GPIO_NR(7, 12),
  1171. .msata_en = GP_MSATA_SEL,
  1172. .nand = true,
  1173. },
  1174. /* GW5907 */
  1175. {
  1176. .gpio_pads = gw51xx_gpio_pads,
  1177. .num_pads = ARRAY_SIZE(gw51xx_gpio_pads)/2,
  1178. .dio_cfg = gw51xx_dio,
  1179. .dio_num = ARRAY_SIZE(gw51xx_dio),
  1180. .leds = {
  1181. IMX_GPIO_NR(4, 6),
  1182. IMX_GPIO_NR(4, 10),
  1183. },
  1184. .pcie_rst = IMX_GPIO_NR(1, 0),
  1185. .wdis = IMX_GPIO_NR(7, 12),
  1186. .nand = true,
  1187. },
  1188. /* GW5908 */
  1189. {
  1190. .gpio_pads = gw53xx_gpio_pads,
  1191. .num_pads = ARRAY_SIZE(gw53xx_gpio_pads)/2,
  1192. .dio_cfg = gw53xx_dio,
  1193. .dio_num = ARRAY_SIZE(gw53xx_dio),
  1194. .leds = {
  1195. IMX_GPIO_NR(4, 6),
  1196. IMX_GPIO_NR(4, 7),
  1197. IMX_GPIO_NR(4, 15),
  1198. },
  1199. .pcie_rst = IMX_GPIO_NR(1, 29),
  1200. .mezz_pwren = IMX_GPIO_NR(2, 19),
  1201. .mezz_irq = IMX_GPIO_NR(2, 18),
  1202. .gps_shdn = IMX_GPIO_NR(1, 27),
  1203. .vidin_en = IMX_GPIO_NR(3, 31),
  1204. .wdis = IMX_GPIO_NR(7, 12),
  1205. .msata_en = GP_MSATA_SEL,
  1206. .rs232_en = GP_RS232_EN,
  1207. },
  1208. /* GW5909 */
  1209. {
  1210. .gpio_pads = gw5904_gpio_pads,
  1211. .num_pads = ARRAY_SIZE(gw5904_gpio_pads)/2,
  1212. .dio_cfg = gw5904_dio,
  1213. .dio_num = ARRAY_SIZE(gw5904_dio),
  1214. .leds = {
  1215. IMX_GPIO_NR(4, 6),
  1216. IMX_GPIO_NR(4, 7),
  1217. IMX_GPIO_NR(4, 15),
  1218. },
  1219. .pcie_rst = IMX_GPIO_NR(1, 0),
  1220. .mezz_pwren = IMX_GPIO_NR(2, 19),
  1221. .mezz_irq = IMX_GPIO_NR(2, 18),
  1222. .otgpwr_en = IMX_GPIO_NR(3, 22),
  1223. },
  1224. };
  1225. #define SETUP_GPIO_OUTPUT(gpio, name, level) \
  1226. gpio_request(gpio, name); \
  1227. gpio_direction_output(gpio, level);
  1228. #define SETUP_GPIO_INPUT(gpio, name) \
  1229. gpio_request(gpio, name); \
  1230. gpio_direction_input(gpio);
  1231. void setup_iomux_gpio(int board, struct ventana_board_info *info)
  1232. {
  1233. int i;
  1234. if (board >= GW_UNKNOWN)
  1235. return;
  1236. /* board specific iomux */
  1237. imx_iomux_v3_setup_multiple_pads(gpio_cfg[board].gpio_pads,
  1238. gpio_cfg[board].num_pads);
  1239. /* RS232_EN# */
  1240. if (gpio_cfg[board].rs232_en) {
  1241. gpio_request(gpio_cfg[board].rs232_en, "rs232_en#");
  1242. gpio_direction_output(gpio_cfg[board].rs232_en, 0);
  1243. }
  1244. /* GW522x Uses GPIO3_IO23 for PCIE_RST# */
  1245. if (board == GW52xx && info->model[4] == '2')
  1246. gpio_cfg[board].pcie_rst = IMX_GPIO_NR(3, 23);
  1247. /* assert PCI_RST# */
  1248. gpio_request(gpio_cfg[board].pcie_rst, "pci_rst#");
  1249. gpio_direction_output(gpio_cfg[board].pcie_rst, 0);
  1250. /* turn off (active-high) user LED's */
  1251. for (i = 0; i < ARRAY_SIZE(gpio_cfg[board].leds); i++) {
  1252. char name[16];
  1253. if (gpio_cfg[board].leds[i]) {
  1254. sprintf(name, "led_user%d", i);
  1255. gpio_request(gpio_cfg[board].leds[i], name);
  1256. gpio_direction_output(gpio_cfg[board].leds[i], 1);
  1257. }
  1258. }
  1259. /* MSATA Enable - default to PCI */
  1260. if (gpio_cfg[board].msata_en) {
  1261. gpio_request(gpio_cfg[board].msata_en, "msata_en");
  1262. gpio_direction_output(gpio_cfg[board].msata_en, 0);
  1263. }
  1264. /* Expansion Mezzanine IO */
  1265. if (gpio_cfg[board].mezz_pwren) {
  1266. gpio_request(gpio_cfg[board].mezz_pwren, "mezz_pwr");
  1267. gpio_direction_output(gpio_cfg[board].mezz_pwren, 0);
  1268. }
  1269. if (gpio_cfg[board].mezz_irq) {
  1270. gpio_request(gpio_cfg[board].mezz_irq, "mezz_irq#");
  1271. gpio_direction_input(gpio_cfg[board].mezz_irq);
  1272. }
  1273. /* RS485 Transmit Enable */
  1274. if (gpio_cfg[board].rs485en) {
  1275. gpio_request(gpio_cfg[board].rs485en, "rs485_en");
  1276. gpio_direction_output(gpio_cfg[board].rs485en, 0);
  1277. }
  1278. /* GPS_SHDN */
  1279. if (gpio_cfg[board].gps_shdn) {
  1280. gpio_request(gpio_cfg[board].gps_shdn, "gps_shdn");
  1281. gpio_direction_output(gpio_cfg[board].gps_shdn, 1);
  1282. }
  1283. /* Analog video codec power enable */
  1284. if (gpio_cfg[board].vidin_en) {
  1285. gpio_request(gpio_cfg[board].vidin_en, "anavidin_en");
  1286. gpio_direction_output(gpio_cfg[board].vidin_en, 1);
  1287. }
  1288. /* DIOI2C_DIS# */
  1289. if (gpio_cfg[board].dioi2c_en) {
  1290. gpio_request(gpio_cfg[board].dioi2c_en, "dioi2c_dis#");
  1291. gpio_direction_output(gpio_cfg[board].dioi2c_en, 0);
  1292. }
  1293. /* PCICK_SSON: disable spread-spectrum clock */
  1294. if (gpio_cfg[board].pcie_sson) {
  1295. gpio_request(gpio_cfg[board].pcie_sson, "pci_sson");
  1296. gpio_direction_output(gpio_cfg[board].pcie_sson, 0);
  1297. }
  1298. /* USBOTG mux routing */
  1299. if (gpio_cfg[board].usb_sel) {
  1300. gpio_request(gpio_cfg[board].usb_sel, "usb_pcisel");
  1301. gpio_direction_output(gpio_cfg[board].usb_sel, 0);
  1302. }
  1303. /* PCISKT_WDIS# (Wireless disable GPIO to miniPCIe sockets) */
  1304. if (gpio_cfg[board].wdis) {
  1305. gpio_request(gpio_cfg[board].wdis, "wlan_dis");
  1306. gpio_direction_output(gpio_cfg[board].wdis, 1);
  1307. }
  1308. /* OTG power off */
  1309. if (gpio_cfg[board].otgpwr_en) {
  1310. gpio_request(gpio_cfg[board].otgpwr_en, "usbotg_pwr");
  1311. gpio_direction_output(gpio_cfg[board].otgpwr_en, 0);
  1312. }
  1313. /* sense vselect pin to see if we support uhs-i */
  1314. if (gpio_cfg[board].vsel_pin) {
  1315. gpio_request(gpio_cfg[board].vsel_pin, "sd3_vselect");
  1316. gpio_direction_input(gpio_cfg[board].vsel_pin);
  1317. gpio_cfg[board].usd_vsel = !gpio_get_value(gpio_cfg[board].vsel_pin);
  1318. }
  1319. /* microSD CD */
  1320. if (gpio_cfg[board].mmc_cd) {
  1321. gpio_request(gpio_cfg[board].mmc_cd, "sd_cd");
  1322. gpio_direction_input(gpio_cfg[board].mmc_cd);
  1323. }
  1324. /* Anything else board specific */
  1325. switch(board) {
  1326. case GW560x:
  1327. gpio_request(IMX_GPIO_NR(4, 26), "12p0_en");
  1328. gpio_direction_output(IMX_GPIO_NR(4, 26), 1);
  1329. break;
  1330. case GW5901:
  1331. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(1, 2), "can_stby", 0);
  1332. break;
  1333. case GW5902:
  1334. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(1, 2), "can1_stby", 0);
  1335. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(7, 3), "can2_stby", 0);
  1336. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(7, 12), "5P0V_EN", 1);
  1337. break;
  1338. case GW5903:
  1339. gpio_request(IMX_GPIO_NR(3, 31) , "usbh1-ehci_pwr");
  1340. gpio_direction_output(IMX_GPIO_NR(3, 31), 1);
  1341. gpio_request(IMX_GPIO_NR(4, 15) , "usbh2-otg_pwr");
  1342. gpio_direction_output(IMX_GPIO_NR(4, 15), 1);
  1343. gpio_request(IMX_GPIO_NR(4, 7) , "usbdpc_pwr");
  1344. gpio_direction_output(IMX_GPIO_NR(4, 15), 1);
  1345. gpio_request(IMX_GPIO_NR(1, 25) , "rgmii_en");
  1346. gpio_direction_output(IMX_GPIO_NR(1, 25), 1);
  1347. gpio_request(IMX_GPIO_NR(4, 6) , "touch_irq#");
  1348. gpio_direction_input(IMX_GPIO_NR(4, 6));
  1349. gpio_request(IMX_GPIO_NR(4, 8) , "touch_rst");
  1350. gpio_direction_output(IMX_GPIO_NR(4, 8), 1);
  1351. gpio_request(IMX_GPIO_NR(1, 7) , "bklt_12ven");
  1352. gpio_direction_output(IMX_GPIO_NR(1, 7), 1);
  1353. break;
  1354. case GW5909:
  1355. case GW5904:
  1356. gpio_request(IMX_GPIO_NR(4, 23), "rs485_en");
  1357. gpio_direction_output(IMX_GPIO_NR(4, 23), 0);
  1358. gpio_request(IMX_GPIO_NR(5, 11), "skt1_wdis#");
  1359. gpio_direction_output(IMX_GPIO_NR(5, 11), 1);
  1360. gpio_request(IMX_GPIO_NR(5, 12), "skt1_rst#");
  1361. gpio_direction_output(IMX_GPIO_NR(5, 12), 1);
  1362. gpio_request(IMX_GPIO_NR(5, 13), "skt2_wdis#");
  1363. gpio_direction_output(IMX_GPIO_NR(5, 13), 1);
  1364. gpio_request(IMX_GPIO_NR(1, 15), "m2_off#");
  1365. gpio_direction_output(IMX_GPIO_NR(1, 15), 1);
  1366. gpio_request(IMX_GPIO_NR(1, 14), "m2_wdis#");
  1367. gpio_direction_output(IMX_GPIO_NR(1, 14), 1);
  1368. gpio_request(IMX_GPIO_NR(1, 13), "m2_rst#");
  1369. gpio_direction_output(IMX_GPIO_NR(1, 13), 1);
  1370. break;
  1371. case GW5905:
  1372. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(1, 7), "usb_pcisel", 0);
  1373. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(1, 9), "lvds_cabc", 1);
  1374. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(1, 14), "mipi_pdwn", 1);
  1375. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(1, 15), "mipi_rst#", 0);
  1376. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(2, 3), "emmy_pdwn#", 1);
  1377. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(4, 5), "spk_shdn#", 0);
  1378. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(4, 8), "touch_rst", 0);
  1379. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(4, 6), "touch_irq", 0);
  1380. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(5, 5), "flash_en1", 0);
  1381. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(5, 6), "flash_en2", 0);
  1382. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(5, 14), "dect_rst#", 1);
  1383. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(5, 17), "codec_rst#", 0);
  1384. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(5, 26), "imu_den", 1);
  1385. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(7, 12), "lvds_cabc", 0);
  1386. mdelay(100);
  1387. /*
  1388. * gauruntee touch controller comes out of reset with INT
  1389. * low for address
  1390. */
  1391. SETUP_GPIO_OUTPUT(IMX_GPIO_NR(4, 8), "touch_rst", 1);
  1392. break;
  1393. }
  1394. }
  1395. /* setup GPIO pinmux and default configuration per baseboard and env */
  1396. void setup_board_gpio(int board, struct ventana_board_info *info)
  1397. {
  1398. const char *s;
  1399. char arg[10];
  1400. size_t len;
  1401. int i;
  1402. int quiet = simple_strtol(env_get("quiet"), NULL, 10);
  1403. if (board >= GW_UNKNOWN)
  1404. return;
  1405. /* RS232_EN# */
  1406. if (gpio_cfg[board].rs232_en) {
  1407. gpio_direction_output(gpio_cfg[board].rs232_en,
  1408. (hwconfig("rs232")) ? 0 : 1);
  1409. }
  1410. /* MSATA Enable */
  1411. if (gpio_cfg[board].msata_en && is_cpu_type(MXC_CPU_MX6Q)) {
  1412. gpio_direction_output(GP_MSATA_SEL,
  1413. (hwconfig("msata")) ? 1 : 0);
  1414. }
  1415. /* USBOTG Select (PCISKT or FrontPanel) */
  1416. if (gpio_cfg[board].usb_sel) {
  1417. gpio_direction_output(gpio_cfg[board].usb_sel,
  1418. (hwconfig("usb_pcisel")) ? 1 : 0);
  1419. }
  1420. /*
  1421. * Configure DIO pinmux/padctl registers
  1422. * see IMX6DQRM/IMX6SDLRM IOMUXC_SW_PAD_CTL_PAD_* register definitions
  1423. */
  1424. for (i = 0; i < gpio_cfg[board].dio_num; i++) {
  1425. struct dio_cfg *cfg = &gpio_cfg[board].dio_cfg[i];
  1426. iomux_v3_cfg_t ctrl = DIO_PAD_CFG;
  1427. unsigned cputype = is_cpu_type(MXC_CPU_MX6Q) ? 0 : 1;
  1428. if (!cfg->gpio_padmux[0] && !cfg->gpio_padmux[1])
  1429. continue;
  1430. sprintf(arg, "dio%d", i);
  1431. if (!hwconfig(arg))
  1432. continue;
  1433. s = hwconfig_subarg(arg, "padctrl", &len);
  1434. if (s) {
  1435. ctrl = MUX_PAD_CTRL(simple_strtoul(s, NULL, 16)
  1436. & 0x1ffff) | MUX_MODE_SION;
  1437. }
  1438. if (hwconfig_subarg_cmp(arg, "mode", "gpio")) {
  1439. if (!quiet) {
  1440. printf("DIO%d: GPIO%d_IO%02d (gpio-%d)\n", i,
  1441. (cfg->gpio_param/32)+1,
  1442. cfg->gpio_param%32,
  1443. cfg->gpio_param);
  1444. }
  1445. imx_iomux_v3_setup_pad(cfg->gpio_padmux[cputype] |
  1446. ctrl);
  1447. gpio_requestf(cfg->gpio_param, "dio%d", i);
  1448. gpio_direction_input(cfg->gpio_param);
  1449. } else if (hwconfig_subarg_cmp(arg, "mode", "pwm") &&
  1450. cfg->pwm_padmux) {
  1451. if (!cfg->pwm_param) {
  1452. printf("DIO%d: Error: pwm config invalid\n",
  1453. i);
  1454. continue;
  1455. }
  1456. if (!quiet)
  1457. printf("DIO%d: pwm%d\n", i, cfg->pwm_param);
  1458. imx_iomux_v3_setup_pad(cfg->pwm_padmux[cputype] |
  1459. MUX_PAD_CTRL(ctrl));
  1460. }
  1461. }
  1462. if (!quiet) {
  1463. if (gpio_cfg[board].msata_en && is_cpu_type(MXC_CPU_MX6Q)) {
  1464. printf("MSATA: %s\n", (hwconfig("msata") ?
  1465. "enabled" : "disabled"));
  1466. }
  1467. if (gpio_cfg[board].rs232_en) {
  1468. printf("RS232: %s\n", (hwconfig("rs232")) ?
  1469. "enabled" : "disabled");
  1470. }
  1471. }
  1472. }
  1473. /* setup board specific PMIC */
  1474. void setup_pmic(void)
  1475. {
  1476. struct pmic *p;
  1477. struct ventana_board_info ventana_info;
  1478. int board = read_eeprom(CONFIG_I2C_GSC, &ventana_info);
  1479. const int i2c_pmic = 1;
  1480. u32 reg;
  1481. i2c_set_bus_num(i2c_pmic);
  1482. /* configure PFUZE100 PMIC */
  1483. if (!i2c_probe(CONFIG_POWER_PFUZE100_I2C_ADDR)) {
  1484. debug("probed PFUZE100@0x%x\n", CONFIG_POWER_PFUZE100_I2C_ADDR);
  1485. power_pfuze100_init(i2c_pmic);
  1486. p = pmic_get("PFUZE100");
  1487. if (p && !pmic_probe(p)) {
  1488. pmic_reg_read(p, PFUZE100_DEVICEID, &reg);
  1489. printf("PMIC: PFUZE100 ID=0x%02x\n", reg);
  1490. /* Set VGEN1 to 1.5V and enable */
  1491. pmic_reg_read(p, PFUZE100_VGEN1VOL, &reg);
  1492. reg &= ~(LDO_VOL_MASK);
  1493. reg |= (LDOA_1_50V | LDO_EN);
  1494. pmic_reg_write(p, PFUZE100_VGEN1VOL, reg);
  1495. /* Set SWBST to 5.0V and enable */
  1496. pmic_reg_read(p, PFUZE100_SWBSTCON1, &reg);
  1497. reg &= ~(SWBST_MODE_MASK | SWBST_VOL_MASK);
  1498. reg |= (SWBST_5_00V | (SWBST_MODE_AUTO << SWBST_MODE_SHIFT));
  1499. pmic_reg_write(p, PFUZE100_SWBSTCON1, reg);
  1500. }
  1501. }
  1502. /* configure LTC3676 PMIC */
  1503. else if (!i2c_probe(CONFIG_POWER_LTC3676_I2C_ADDR)) {
  1504. debug("probed LTC3676@0x%x\n", CONFIG_POWER_LTC3676_I2C_ADDR);
  1505. power_ltc3676_init(i2c_pmic);
  1506. p = pmic_get("LTC3676_PMIC");
  1507. if (!p || pmic_probe(p))
  1508. return;
  1509. puts("PMIC: LTC3676\n");
  1510. /*
  1511. * set board-specific scalar for max CPU frequency
  1512. * per CPU based on the LDO enabled Operating Ranges
  1513. * defined in the respective IMX6DQ and IMX6SDL
  1514. * datasheets. The voltage resulting from the R1/R2
  1515. * feedback inputs on Ventana is 1308mV. Note that this
  1516. * is a bit shy of the Vmin of 1350mV in the datasheet
  1517. * for LDO enabled mode but is as high as we can go.
  1518. */
  1519. switch (board) {
  1520. case GW560x:
  1521. /* mask PGOOD during SW3 transition */
  1522. pmic_reg_write(p, LTC3676_DVB3B,
  1523. 0x1f | LTC3676_PGOOD_MASK);
  1524. /* set SW3 (VDD_ARM) */
  1525. pmic_reg_write(p, LTC3676_DVB3A, 0x1f);
  1526. break;
  1527. case GW5903:
  1528. /* mask PGOOD during SW3 transition */
  1529. pmic_reg_write(p, LTC3676_DVB3B,
  1530. 0x1f | LTC3676_PGOOD_MASK);
  1531. /* set SW3 (VDD_ARM) */
  1532. pmic_reg_write(p, LTC3676_DVB3A, 0x1f);
  1533. /* mask PGOOD during SW4 transition */
  1534. pmic_reg_write(p, LTC3676_DVB4B,
  1535. 0x1f | LTC3676_PGOOD_MASK);
  1536. /* set SW4 (VDD_SOC) */
  1537. pmic_reg_write(p, LTC3676_DVB4A, 0x1f);
  1538. break;
  1539. case GW5905:
  1540. /* mask PGOOD during SW1 transition */
  1541. pmic_reg_write(p, LTC3676_DVB1B,
  1542. 0x1f | LTC3676_PGOOD_MASK);
  1543. /* set SW1 (VDD_ARM) */
  1544. pmic_reg_write(p, LTC3676_DVB1A, 0x1f);
  1545. /* mask PGOOD during SW3 transition */
  1546. pmic_reg_write(p, LTC3676_DVB3B,
  1547. 0x1f | LTC3676_PGOOD_MASK);
  1548. /* set SW3 (VDD_SOC) */
  1549. pmic_reg_write(p, LTC3676_DVB3A, 0x1f);
  1550. break;
  1551. default:
  1552. /* mask PGOOD during SW1 transition */
  1553. pmic_reg_write(p, LTC3676_DVB1B,
  1554. 0x1f | LTC3676_PGOOD_MASK);
  1555. /* set SW1 (VDD_SOC) */
  1556. pmic_reg_write(p, LTC3676_DVB1A, 0x1f);
  1557. /* mask PGOOD during SW3 transition */
  1558. pmic_reg_write(p, LTC3676_DVB3B,
  1559. 0x1f | LTC3676_PGOOD_MASK);
  1560. /* set SW3 (VDD_ARM) */
  1561. pmic_reg_write(p, LTC3676_DVB3A, 0x1f);
  1562. }
  1563. }
  1564. }
  1565. #ifdef CONFIG_FSL_ESDHC_IMX
  1566. static struct fsl_esdhc_cfg usdhc_cfg[2];
  1567. int board_mmc_init(bd_t *bis)
  1568. {
  1569. struct ventana_board_info ventana_info;
  1570. int board_type = read_eeprom(CONFIG_I2C_GSC, &ventana_info);
  1571. int ret;
  1572. switch (board_type) {
  1573. case GW52xx:
  1574. case GW53xx:
  1575. case GW54xx:
  1576. case GW553x:
  1577. /* usdhc3: 4bit microSD */
  1578. SETUP_IOMUX_PADS(usdhc3_pads);
  1579. usdhc_cfg[0].esdhc_base = USDHC3_BASE_ADDR;
  1580. usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
  1581. usdhc_cfg[0].max_bus_width = 4;
  1582. return fsl_esdhc_initialize(bis, &usdhc_cfg[0]);
  1583. case GW560x:
  1584. /* usdhc2: 8-bit eMMC */
  1585. SETUP_IOMUX_PADS(gw560x_emmc_sd2_pads);
  1586. usdhc_cfg[0].esdhc_base = USDHC2_BASE_ADDR;
  1587. usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
  1588. usdhc_cfg[0].max_bus_width = 8;
  1589. ret = fsl_esdhc_initialize(bis, &usdhc_cfg[0]);
  1590. if (ret)
  1591. return ret;
  1592. /* usdhc3: 4-bit microSD */
  1593. SETUP_IOMUX_PADS(usdhc3_pads);
  1594. usdhc_cfg[1].esdhc_base = USDHC3_BASE_ADDR;
  1595. usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
  1596. usdhc_cfg[1].max_bus_width = 4;
  1597. return fsl_esdhc_initialize(bis, &usdhc_cfg[1]);
  1598. case GW5903:
  1599. /* usdhc3: 8-bit eMMC */
  1600. SETUP_IOMUX_PADS(gw5904_emmc_pads);
  1601. usdhc_cfg[0].esdhc_base = USDHC3_BASE_ADDR;
  1602. usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
  1603. usdhc_cfg[0].max_bus_width = 8;
  1604. ret = fsl_esdhc_initialize(bis, &usdhc_cfg[0]);
  1605. if (ret)
  1606. return ret;
  1607. /* usdhc2: 4-bit microSD */
  1608. SETUP_IOMUX_PADS(gw5904_mmc_pads);
  1609. usdhc_cfg[1].esdhc_base = USDHC2_BASE_ADDR;
  1610. usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
  1611. usdhc_cfg[1].max_bus_width = 4;
  1612. return fsl_esdhc_initialize(bis, &usdhc_cfg[1]);
  1613. case GW5904:
  1614. case GW5905:
  1615. case GW5909:
  1616. /* usdhc3: 8bit eMMC */
  1617. SETUP_IOMUX_PADS(gw5904_emmc_pads);
  1618. usdhc_cfg[0].esdhc_base = USDHC3_BASE_ADDR;
  1619. usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
  1620. usdhc_cfg[0].max_bus_width = 8;
  1621. return fsl_esdhc_initialize(bis, &usdhc_cfg[0]);
  1622. default:
  1623. /* doesn't have MMC */
  1624. return -1;
  1625. }
  1626. }
  1627. int board_mmc_getcd(struct mmc *mmc)
  1628. {
  1629. struct ventana_board_info ventana_info;
  1630. struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
  1631. int board = read_eeprom(CONFIG_I2C_GSC, &ventana_info);
  1632. int gpio = gpio_cfg[board].mmc_cd;
  1633. /* Card Detect */
  1634. switch (board) {
  1635. case GW560x:
  1636. /* emmc is always present */
  1637. if (cfg->esdhc_base == USDHC2_BASE_ADDR)
  1638. return 1;
  1639. break;
  1640. case GW5903:
  1641. case GW5904:
  1642. case GW5905:
  1643. case GW5909:
  1644. /* emmc is always present */
  1645. if (cfg->esdhc_base == USDHC3_BASE_ADDR)
  1646. return 1;
  1647. break;
  1648. }
  1649. if (gpio) {
  1650. debug("%s: gpio%d=%d\n", __func__, gpio, gpio_get_value(gpio));
  1651. return !gpio_get_value(gpio);
  1652. }
  1653. return -1;
  1654. }
  1655. #endif /* CONFIG_FSL_ESDHC_IMX */