common.c 38 KB

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