common.c 46 KB

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