pinmux.h 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. /*
  2. * linux/arch/arm/mach-tegra/include/mach/pinmux.h
  3. *
  4. * Copyright (C) 2010 Google, Inc.
  5. *
  6. * This software is licensed under the terms of the GNU General Public
  7. * License version 2, as published by the Free Software Foundation, and
  8. * may be copied, distributed, and modified under those terms.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. */
  16. #ifndef __MACH_TEGRA_PINMUX_H
  17. #define __MACH_TEGRA_PINMUX_H
  18. enum tegra_pingroup {
  19. TEGRA_PINGROUP_ATA = 0,
  20. TEGRA_PINGROUP_ATB,
  21. TEGRA_PINGROUP_ATC,
  22. TEGRA_PINGROUP_ATD,
  23. TEGRA_PINGROUP_ATE,
  24. TEGRA_PINGROUP_CDEV1,
  25. TEGRA_PINGROUP_CDEV2,
  26. TEGRA_PINGROUP_CRTP,
  27. TEGRA_PINGROUP_CSUS,
  28. TEGRA_PINGROUP_DAP1,
  29. TEGRA_PINGROUP_DAP2,
  30. TEGRA_PINGROUP_DAP3,
  31. TEGRA_PINGROUP_DAP4,
  32. TEGRA_PINGROUP_DDC,
  33. TEGRA_PINGROUP_DTA,
  34. TEGRA_PINGROUP_DTB,
  35. TEGRA_PINGROUP_DTC,
  36. TEGRA_PINGROUP_DTD,
  37. TEGRA_PINGROUP_DTE,
  38. TEGRA_PINGROUP_DTF,
  39. TEGRA_PINGROUP_GMA,
  40. TEGRA_PINGROUP_GMB,
  41. TEGRA_PINGROUP_GMC,
  42. TEGRA_PINGROUP_GMD,
  43. TEGRA_PINGROUP_GME,
  44. TEGRA_PINGROUP_GPU,
  45. TEGRA_PINGROUP_GPU7,
  46. TEGRA_PINGROUP_GPV,
  47. TEGRA_PINGROUP_HDINT,
  48. TEGRA_PINGROUP_I2CP,
  49. TEGRA_PINGROUP_IRRX,
  50. TEGRA_PINGROUP_IRTX,
  51. TEGRA_PINGROUP_KBCA,
  52. TEGRA_PINGROUP_KBCB,
  53. TEGRA_PINGROUP_KBCC,
  54. TEGRA_PINGROUP_KBCD,
  55. TEGRA_PINGROUP_KBCE,
  56. TEGRA_PINGROUP_KBCF,
  57. TEGRA_PINGROUP_LCSN,
  58. TEGRA_PINGROUP_LD0,
  59. TEGRA_PINGROUP_LD1,
  60. TEGRA_PINGROUP_LD10,
  61. TEGRA_PINGROUP_LD11,
  62. TEGRA_PINGROUP_LD12,
  63. TEGRA_PINGROUP_LD13,
  64. TEGRA_PINGROUP_LD14,
  65. TEGRA_PINGROUP_LD15,
  66. TEGRA_PINGROUP_LD16,
  67. TEGRA_PINGROUP_LD17,
  68. TEGRA_PINGROUP_LD2,
  69. TEGRA_PINGROUP_LD3,
  70. TEGRA_PINGROUP_LD4,
  71. TEGRA_PINGROUP_LD5,
  72. TEGRA_PINGROUP_LD6,
  73. TEGRA_PINGROUP_LD7,
  74. TEGRA_PINGROUP_LD8,
  75. TEGRA_PINGROUP_LD9,
  76. TEGRA_PINGROUP_LDC,
  77. TEGRA_PINGROUP_LDI,
  78. TEGRA_PINGROUP_LHP0,
  79. TEGRA_PINGROUP_LHP1,
  80. TEGRA_PINGROUP_LHP2,
  81. TEGRA_PINGROUP_LHS,
  82. TEGRA_PINGROUP_LM0,
  83. TEGRA_PINGROUP_LM1,
  84. TEGRA_PINGROUP_LPP,
  85. TEGRA_PINGROUP_LPW0,
  86. TEGRA_PINGROUP_LPW1,
  87. TEGRA_PINGROUP_LPW2,
  88. TEGRA_PINGROUP_LSC0,
  89. TEGRA_PINGROUP_LSC1,
  90. TEGRA_PINGROUP_LSCK,
  91. TEGRA_PINGROUP_LSDA,
  92. TEGRA_PINGROUP_LSDI,
  93. TEGRA_PINGROUP_LSPI,
  94. TEGRA_PINGROUP_LVP0,
  95. TEGRA_PINGROUP_LVP1,
  96. TEGRA_PINGROUP_LVS,
  97. TEGRA_PINGROUP_OWC,
  98. TEGRA_PINGROUP_PMC,
  99. TEGRA_PINGROUP_PTA,
  100. TEGRA_PINGROUP_RM,
  101. TEGRA_PINGROUP_SDB,
  102. TEGRA_PINGROUP_SDC,
  103. TEGRA_PINGROUP_SDD,
  104. TEGRA_PINGROUP_SDIO1,
  105. TEGRA_PINGROUP_SLXA,
  106. TEGRA_PINGROUP_SLXC,
  107. TEGRA_PINGROUP_SLXD,
  108. TEGRA_PINGROUP_SLXK,
  109. TEGRA_PINGROUP_SPDI,
  110. TEGRA_PINGROUP_SPDO,
  111. TEGRA_PINGROUP_SPIA,
  112. TEGRA_PINGROUP_SPIB,
  113. TEGRA_PINGROUP_SPIC,
  114. TEGRA_PINGROUP_SPID,
  115. TEGRA_PINGROUP_SPIE,
  116. TEGRA_PINGROUP_SPIF,
  117. TEGRA_PINGROUP_SPIG,
  118. TEGRA_PINGROUP_SPIH,
  119. TEGRA_PINGROUP_UAA,
  120. TEGRA_PINGROUP_UAB,
  121. TEGRA_PINGROUP_UAC,
  122. TEGRA_PINGROUP_UAD,
  123. TEGRA_PINGROUP_UCA,
  124. TEGRA_PINGROUP_UCB,
  125. TEGRA_PINGROUP_UDA,
  126. /* these pin groups only have pullup and pull down control */
  127. TEGRA_PINGROUP_CK32,
  128. TEGRA_PINGROUP_DDRC,
  129. TEGRA_PINGROUP_PMCA,
  130. TEGRA_PINGROUP_PMCB,
  131. TEGRA_PINGROUP_PMCC,
  132. TEGRA_PINGROUP_PMCD,
  133. TEGRA_PINGROUP_PMCE,
  134. TEGRA_PINGROUP_XM2C,
  135. TEGRA_PINGROUP_XM2D,
  136. TEGRA_MAX_PINGROUP,
  137. };
  138. enum tegra_mux_func {
  139. TEGRA_MUX_RSVD = 0x8000,
  140. TEGRA_MUX_RSVD1 = 0x8000,
  141. TEGRA_MUX_RSVD2 = 0x8001,
  142. TEGRA_MUX_RSVD3 = 0x8002,
  143. TEGRA_MUX_RSVD4 = 0x8003,
  144. TEGRA_MUX_NONE = -1,
  145. TEGRA_MUX_AHB_CLK,
  146. TEGRA_MUX_APB_CLK,
  147. TEGRA_MUX_AUDIO_SYNC,
  148. TEGRA_MUX_CRT,
  149. TEGRA_MUX_DAP1,
  150. TEGRA_MUX_DAP2,
  151. TEGRA_MUX_DAP3,
  152. TEGRA_MUX_DAP4,
  153. TEGRA_MUX_DAP5,
  154. TEGRA_MUX_DISPLAYA,
  155. TEGRA_MUX_DISPLAYB,
  156. TEGRA_MUX_EMC_TEST0_DLL,
  157. TEGRA_MUX_EMC_TEST1_DLL,
  158. TEGRA_MUX_GMI,
  159. TEGRA_MUX_GMI_INT,
  160. TEGRA_MUX_HDMI,
  161. TEGRA_MUX_I2C,
  162. TEGRA_MUX_I2C2,
  163. TEGRA_MUX_I2C3,
  164. TEGRA_MUX_IDE,
  165. TEGRA_MUX_IRDA,
  166. TEGRA_MUX_KBC,
  167. TEGRA_MUX_MIO,
  168. TEGRA_MUX_MIPI_HS,
  169. TEGRA_MUX_NAND,
  170. TEGRA_MUX_OSC,
  171. TEGRA_MUX_OWR,
  172. TEGRA_MUX_PCIE,
  173. TEGRA_MUX_PLLA_OUT,
  174. TEGRA_MUX_PLLC_OUT1,
  175. TEGRA_MUX_PLLM_OUT1,
  176. TEGRA_MUX_PLLP_OUT2,
  177. TEGRA_MUX_PLLP_OUT3,
  178. TEGRA_MUX_PLLP_OUT4,
  179. TEGRA_MUX_PWM,
  180. TEGRA_MUX_PWR_INTR,
  181. TEGRA_MUX_PWR_ON,
  182. TEGRA_MUX_RTCK,
  183. TEGRA_MUX_SDIO1,
  184. TEGRA_MUX_SDIO2,
  185. TEGRA_MUX_SDIO3,
  186. TEGRA_MUX_SDIO4,
  187. TEGRA_MUX_SFLASH,
  188. TEGRA_MUX_SPDIF,
  189. TEGRA_MUX_SPI1,
  190. TEGRA_MUX_SPI2,
  191. TEGRA_MUX_SPI2_ALT,
  192. TEGRA_MUX_SPI3,
  193. TEGRA_MUX_SPI4,
  194. TEGRA_MUX_TRACE,
  195. TEGRA_MUX_TWC,
  196. TEGRA_MUX_UARTA,
  197. TEGRA_MUX_UARTB,
  198. TEGRA_MUX_UARTC,
  199. TEGRA_MUX_UARTD,
  200. TEGRA_MUX_UARTE,
  201. TEGRA_MUX_ULPI,
  202. TEGRA_MUX_VI,
  203. TEGRA_MUX_VI_SENSOR_CLK,
  204. TEGRA_MUX_XIO,
  205. TEGRA_MAX_MUX,
  206. };
  207. enum tegra_pullupdown {
  208. TEGRA_PUPD_NORMAL = 0,
  209. TEGRA_PUPD_PULL_DOWN,
  210. TEGRA_PUPD_PULL_UP,
  211. };
  212. enum tegra_tristate {
  213. TEGRA_TRI_NORMAL = 0,
  214. TEGRA_TRI_TRISTATE = 1,
  215. };
  216. struct tegra_pingroup_config {
  217. enum tegra_pingroup pingroup;
  218. enum tegra_mux_func func;
  219. enum tegra_pullupdown pupd;
  220. enum tegra_tristate tristate;
  221. };
  222. enum tegra_slew {
  223. TEGRA_SLEW_FASTEST = 0,
  224. TEGRA_SLEW_FAST,
  225. TEGRA_SLEW_SLOW,
  226. TEGRA_SLEW_SLOWEST,
  227. TEGRA_MAX_SLEW,
  228. };
  229. enum tegra_pull_strength {
  230. TEGRA_PULL_0 = 0,
  231. TEGRA_PULL_1,
  232. TEGRA_PULL_2,
  233. TEGRA_PULL_3,
  234. TEGRA_PULL_4,
  235. TEGRA_PULL_5,
  236. TEGRA_PULL_6,
  237. TEGRA_PULL_7,
  238. TEGRA_PULL_8,
  239. TEGRA_PULL_9,
  240. TEGRA_PULL_10,
  241. TEGRA_PULL_11,
  242. TEGRA_PULL_12,
  243. TEGRA_PULL_13,
  244. TEGRA_PULL_14,
  245. TEGRA_PULL_15,
  246. TEGRA_PULL_16,
  247. TEGRA_PULL_17,
  248. TEGRA_PULL_18,
  249. TEGRA_PULL_19,
  250. TEGRA_PULL_20,
  251. TEGRA_PULL_21,
  252. TEGRA_PULL_22,
  253. TEGRA_PULL_23,
  254. TEGRA_PULL_24,
  255. TEGRA_PULL_25,
  256. TEGRA_PULL_26,
  257. TEGRA_PULL_27,
  258. TEGRA_PULL_28,
  259. TEGRA_PULL_29,
  260. TEGRA_PULL_30,
  261. TEGRA_PULL_31,
  262. TEGRA_MAX_PULL,
  263. };
  264. enum tegra_drive_pingroup {
  265. TEGRA_DRIVE_PINGROUP_AO1 = 0,
  266. TEGRA_DRIVE_PINGROUP_AO2,
  267. TEGRA_DRIVE_PINGROUP_AT1,
  268. TEGRA_DRIVE_PINGROUP_AT2,
  269. TEGRA_DRIVE_PINGROUP_CDEV1,
  270. TEGRA_DRIVE_PINGROUP_CDEV2,
  271. TEGRA_DRIVE_PINGROUP_CSUS,
  272. TEGRA_DRIVE_PINGROUP_DAP1,
  273. TEGRA_DRIVE_PINGROUP_DAP2,
  274. TEGRA_DRIVE_PINGROUP_DAP3,
  275. TEGRA_DRIVE_PINGROUP_DAP4,
  276. TEGRA_DRIVE_PINGROUP_DBG,
  277. TEGRA_DRIVE_PINGROUP_LCD1,
  278. TEGRA_DRIVE_PINGROUP_LCD2,
  279. TEGRA_DRIVE_PINGROUP_SDMMC2,
  280. TEGRA_DRIVE_PINGROUP_SDMMC3,
  281. TEGRA_DRIVE_PINGROUP_SPI,
  282. TEGRA_DRIVE_PINGROUP_UAA,
  283. TEGRA_DRIVE_PINGROUP_UAB,
  284. TEGRA_DRIVE_PINGROUP_UART2,
  285. TEGRA_DRIVE_PINGROUP_UART3,
  286. TEGRA_DRIVE_PINGROUP_VI1,
  287. TEGRA_DRIVE_PINGROUP_VI2,
  288. TEGRA_DRIVE_PINGROUP_XM2A,
  289. TEGRA_DRIVE_PINGROUP_XM2C,
  290. TEGRA_DRIVE_PINGROUP_XM2D,
  291. TEGRA_DRIVE_PINGROUP_XM2CLK,
  292. TEGRA_DRIVE_PINGROUP_MEMCOMP,
  293. TEGRA_MAX_DRIVE_PINGROUP,
  294. };
  295. enum tegra_drive {
  296. TEGRA_DRIVE_DIV_8 = 0,
  297. TEGRA_DRIVE_DIV_4,
  298. TEGRA_DRIVE_DIV_2,
  299. TEGRA_DRIVE_DIV_1,
  300. TEGRA_MAX_DRIVE,
  301. };
  302. enum tegra_hsm {
  303. TEGRA_HSM_DISABLE = 0,
  304. TEGRA_HSM_ENABLE,
  305. };
  306. enum tegra_schmitt {
  307. TEGRA_SCHMITT_DISABLE = 0,
  308. TEGRA_SCHMITT_ENABLE,
  309. };
  310. struct tegra_drive_pingroup_config {
  311. enum tegra_drive_pingroup pingroup;
  312. enum tegra_hsm hsm;
  313. enum tegra_schmitt schmitt;
  314. enum tegra_drive drive;
  315. enum tegra_pull_strength pull_down;
  316. enum tegra_pull_strength pull_up;
  317. enum tegra_slew slew_rising;
  318. enum tegra_slew slew_falling;
  319. };
  320. int tegra_pinmux_set_func(enum tegra_pingroup pg, enum tegra_mux_func func);
  321. int tegra_pinmux_set_tristate(enum tegra_pingroup pg, enum tegra_tristate tristate);
  322. int tegra_pinmux_set_pullupdown(enum tegra_pingroup pg, enum tegra_pullupdown pupd);
  323. void tegra_pinmux_config_pingroup(enum tegra_pingroup pingroup,
  324. enum tegra_mux_func func, enum tegra_pullupdown pupd,
  325. enum tegra_tristate tristate);
  326. void tegra_pinmux_config_table(struct tegra_pingroup_config *config, int len);
  327. void tegra_drive_pinmux_config_table(struct tegra_drive_pingroup_config *config,
  328. int len);
  329. #endif