iomux.h 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. /*
  2. * (C) Copyright 2011
  3. * Stefano Babic, DENX Software Engineering, sbabic@denx.de.
  4. *
  5. * Copyright 2008-2009 Freescale Semiconductor, Inc. All Rights Reserved.
  6. *
  7. * See file CREDITS for list of people who contributed to this
  8. * project.
  9. *
  10. * This program is free software; you can redistribute it and/or
  11. * modify it under the terms of the GNU General Public License as
  12. * published by the Free Software Foundation; either version 2 of
  13. * the License, or (at your option) any later version.
  14. *
  15. * This program is distributed in the hope that it will be useful,
  16. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18. * GNU General Public License for more details.
  19. *
  20. * You should have received a copy of the GNU General Public License
  21. * along with this program; if not, write to the Free Software
  22. * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  23. * MA 02111-1307 USA
  24. */
  25. #ifndef __MACH_MX35_IOMUX_H__
  26. #define __MACH_MX35_IOMUX_H__
  27. #include <asm/arch/imx-regs.h>
  28. /*
  29. * various IOMUX functions
  30. */
  31. typedef enum iomux_pin_config {
  32. MUX_CONFIG_FUNC = 0, /* used as function */
  33. MUX_CONFIG_ALT1, /* used as alternate function 1 */
  34. MUX_CONFIG_ALT2, /* used as alternate function 2 */
  35. MUX_CONFIG_ALT3, /* used as alternate function 3 */
  36. MUX_CONFIG_ALT4, /* used as alternate function 4 */
  37. MUX_CONFIG_ALT5, /* used as alternate function 5 */
  38. MUX_CONFIG_ALT6, /* used as alternate function 6 */
  39. MUX_CONFIG_ALT7, /* used as alternate function 7 */
  40. MUX_CONFIG_SION = 0x1 << 4, /* used as LOOPBACK:MUX SION bit */
  41. MUX_CONFIG_GPIO = MUX_CONFIG_ALT5, /* used as GPIO */
  42. } iomux_pin_cfg_t;
  43. /*
  44. * various IOMUX pad functions
  45. */
  46. typedef enum iomux_pad_config {
  47. PAD_CTL_DRV_3_3V = 0x0 << 13,
  48. PAD_CTL_DRV_1_8V = 0x1 << 13,
  49. PAD_CTL_HYS_CMOS = 0x0 << 8,
  50. PAD_CTL_HYS_SCHMITZ = 0x1 << 8,
  51. PAD_CTL_PKE_NONE = 0x0 << 7,
  52. PAD_CTL_PKE_ENABLE = 0x1 << 7,
  53. PAD_CTL_PUE_KEEPER = 0x0 << 6,
  54. PAD_CTL_PUE_PUD = 0x1 << 6,
  55. PAD_CTL_100K_PD = 0x0 << 4,
  56. PAD_CTL_47K_PU = 0x1 << 4,
  57. PAD_CTL_100K_PU = 0x2 << 4,
  58. PAD_CTL_22K_PU = 0x3 << 4,
  59. PAD_CTL_ODE_CMOS = 0x0 << 3,
  60. PAD_CTL_ODE_OpenDrain = 0x1 << 3,
  61. PAD_CTL_DRV_NORMAL = 0x0 << 1,
  62. PAD_CTL_DRV_HIGH = 0x1 << 1,
  63. PAD_CTL_DRV_MAX = 0x2 << 1,
  64. PAD_CTL_SRE_SLOW = 0x0 << 0,
  65. PAD_CTL_SRE_FAST = 0x1 << 0
  66. } iomux_pad_config_t;
  67. /*
  68. * various IOMUX general purpose functions
  69. */
  70. typedef enum iomux_gp_func {
  71. MUX_SDCTL_CSD0_SEL = 0x1 << 0,
  72. MUX_SDCTL_CSD1_SEL = 0x1 << 1,
  73. MUX_TAMPER_DETECT_EN = 0x1 << 2,
  74. } iomux_gp_func_t;
  75. /*
  76. * various IOMUX input select register index
  77. */
  78. typedef enum iomux_input_select {
  79. MUX_IN_AMX_P5_RXCLK = 0,
  80. MUX_IN_AMX_P5_RXFS,
  81. MUX_IN_AMX_P6_DA,
  82. MUX_IN_AMX_P6_DB,
  83. MUX_IN_AMX_P6_RXCLK,
  84. MUX_IN_AMX_P6_RXFS,
  85. MUX_IN_AMX_P6_TXCLK,
  86. MUX_IN_AMX_P6_TXFS,
  87. MUX_IN_CAN1_CANRX,
  88. MUX_IN_CAN2_CANRX,
  89. MUX_IN_CCM_32K_MUXED,
  90. MUX_IN_CCM_PMIC_RDY,
  91. MUX_IN_CSPI1_SS2_B,
  92. MUX_IN_CSPI1_SS3_B,
  93. MUX_IN_CSPI2_CLK_IN,
  94. MUX_IN_CSPI2_DATAREADY_B,
  95. MUX_IN_CSPI2_MISO,
  96. MUX_IN_CSPI2_MOSI,
  97. MUX_IN_CSPI2_SS0_B,
  98. MUX_IN_CSPI2_SS1_B,
  99. MUX_IN_CSPI2_SS2_B,
  100. MUX_IN_CSPI2_SS3_B,
  101. MUX_IN_EMI_WEIM_DTACK_B,
  102. MUX_IN_ESDHC1_DAT4_IN,
  103. MUX_IN_ESDHC1_DAT5_IN,
  104. MUX_IN_ESDHC1_DAT6_IN,
  105. MUX_IN_ESDHC1_DAT7_IN,
  106. MUX_IN_ESDHC3_CARD_CLK_IN,
  107. MUX_IN_ESDHC3_CMD_IN,
  108. MUX_IN_ESDHC3_DAT0,
  109. MUX_IN_ESDHC3_DAT1,
  110. MUX_IN_ESDHC3_DAT2,
  111. MUX_IN_ESDHC3_DAT3,
  112. MUX_IN_GPIO1_IN_0,
  113. MUX_IN_GPIO1_IN_10,
  114. MUX_IN_GPIO1_IN_11,
  115. MUX_IN_GPIO1_IN_1,
  116. MUX_IN_GPIO1_IN_20,
  117. MUX_IN_GPIO1_IN_21,
  118. MUX_IN_GPIO1_IN_22,
  119. MUX_IN_GPIO1_IN_2,
  120. MUX_IN_GPIO1_IN_3,
  121. MUX_IN_GPIO1_IN_4,
  122. MUX_IN_GPIO1_IN_5,
  123. MUX_IN_GPIO1_IN_6,
  124. MUX_IN_GPIO1_IN_7,
  125. MUX_IN_GPIO1_IN_8,
  126. MUX_IN_GPIO1_IN_9,
  127. MUX_IN_GPIO2_IN_0,
  128. MUX_IN_GPIO2_IN_10,
  129. MUX_IN_GPIO2_IN_11,
  130. MUX_IN_GPIO2_IN_12,
  131. MUX_IN_GPIO2_IN_13,
  132. MUX_IN_GPIO2_IN_14,
  133. MUX_IN_GPIO2_IN_15,
  134. MUX_IN_GPIO2_IN_16,
  135. MUX_IN_GPIO2_IN_17,
  136. MUX_IN_GPIO2_IN_18,
  137. MUX_IN_GPIO2_IN_19,
  138. MUX_IN_GPIO2_IN_1,
  139. MUX_IN_GPIO2_IN_20,
  140. MUX_IN_GPIO2_IN_21,
  141. MUX_IN_GPIO2_IN_22,
  142. MUX_IN_GPIO2_IN_23,
  143. MUX_IN_GPIO2_IN_24,
  144. MUX_IN_GPIO2_IN_25,
  145. MUX_IN_GPIO2_IN_26,
  146. MUX_IN_GPIO2_IN_27,
  147. MUX_IN_GPIO2_IN_28,
  148. MUX_IN_GPIO2_IN_29,
  149. MUX_IN_GPIO2_IN_2,
  150. MUX_IN_GPIO2_IN_30,
  151. MUX_IN_GPIO2_IN_31,
  152. MUX_IN_GPIO2_IN_3,
  153. MUX_IN_GPIO2_IN_4,
  154. MUX_IN_GPIO2_IN_5,
  155. MUX_IN_GPIO2_IN_6,
  156. MUX_IN_GPIO2_IN_7,
  157. MUX_IN_GPIO2_IN_8,
  158. MUX_IN_GPIO2_IN_9,
  159. MUX_IN_GPIO3_IN_0,
  160. MUX_IN_GPIO3_IN_10,
  161. MUX_IN_GPIO3_IN_11,
  162. MUX_IN_GPIO3_IN_12,
  163. MUX_IN_GPIO3_IN_13,
  164. MUX_IN_GPIO3_IN_14,
  165. MUX_IN_GPIO3_IN_15,
  166. MUX_IN_GPIO3_IN_4,
  167. MUX_IN_GPIO3_IN_5,
  168. MUX_IN_GPIO3_IN_6,
  169. MUX_IN_GPIO3_IN_7,
  170. MUX_IN_GPIO3_IN_8,
  171. MUX_IN_GPIO3_IN_9,
  172. MUX_IN_I2C3_SCL_IN,
  173. MUX_IN_I2C3_SDA_IN,
  174. MUX_IN_IPU_DISPB_D0_VSYNC,
  175. MUX_IN_IPU_DISPB_D12_VSYNC,
  176. MUX_IN_IPU_DISPB_SD_D,
  177. MUX_IN_IPU_SENSB_DATA_0,
  178. MUX_IN_IPU_SENSB_DATA_1,
  179. MUX_IN_IPU_SENSB_DATA_2,
  180. MUX_IN_IPU_SENSB_DATA_3,
  181. MUX_IN_IPU_SENSB_DATA_4,
  182. MUX_IN_IPU_SENSB_DATA_5,
  183. MUX_IN_IPU_SENSB_DATA_6,
  184. MUX_IN_IPU_SENSB_DATA_7,
  185. MUX_IN_KPP_COL_0,
  186. MUX_IN_KPP_COL_1,
  187. MUX_IN_KPP_COL_2,
  188. MUX_IN_KPP_COL_3,
  189. MUX_IN_KPP_COL_4,
  190. MUX_IN_KPP_COL_5,
  191. MUX_IN_KPP_COL_6,
  192. MUX_IN_KPP_COL_7,
  193. MUX_IN_KPP_ROW_0,
  194. MUX_IN_KPP_ROW_1,
  195. MUX_IN_KPP_ROW_2,
  196. MUX_IN_KPP_ROW_3,
  197. MUX_IN_KPP_ROW_4,
  198. MUX_IN_KPP_ROW_5,
  199. MUX_IN_KPP_ROW_6,
  200. MUX_IN_KPP_ROW_7,
  201. MUX_IN_OWIRE_BATTERY_LINE,
  202. MUX_IN_SPDIF_HCKT_CLK2,
  203. MUX_IN_SPDIF_SPDIF_IN1,
  204. MUX_IN_UART3_UART_RTS_B,
  205. MUX_IN_UART3_UART_RXD_MUX,
  206. MUX_IN_USB_OTG_DATA_0,
  207. MUX_IN_USB_OTG_DATA_1,
  208. MUX_IN_USB_OTG_DATA_2,
  209. MUX_IN_USB_OTG_DATA_3,
  210. MUX_IN_USB_OTG_DATA_4,
  211. MUX_IN_USB_OTG_DATA_5,
  212. MUX_IN_USB_OTG_DATA_6,
  213. MUX_IN_USB_OTG_DATA_7,
  214. MUX_IN_USB_OTG_DIR,
  215. MUX_IN_USB_OTG_NXT,
  216. MUX_IN_USB_UH2_DATA_0,
  217. MUX_IN_USB_UH2_DATA_1,
  218. MUX_IN_USB_UH2_DATA_2,
  219. MUX_IN_USB_UH2_DATA_3,
  220. MUX_IN_USB_UH2_DATA_4,
  221. MUX_IN_USB_UH2_DATA_5,
  222. MUX_IN_USB_UH2_DATA_6,
  223. MUX_IN_USB_UH2_DATA_7,
  224. MUX_IN_USB_UH2_DIR,
  225. MUX_IN_USB_UH2_NXT,
  226. MUX_IN_USB_UH2_USB_OC,
  227. } iomux_input_select_t;
  228. /*
  229. * various IOMUX input functions
  230. */
  231. typedef enum iomux_input_config {
  232. INPUT_CTL_PATH0 = 0x0,
  233. INPUT_CTL_PATH1,
  234. INPUT_CTL_PATH2,
  235. INPUT_CTL_PATH3,
  236. INPUT_CTL_PATH4,
  237. INPUT_CTL_PATH5,
  238. INPUT_CTL_PATH6,
  239. INPUT_CTL_PATH7,
  240. } iomux_input_cfg_t;
  241. /*
  242. * Request ownership for an IO pin. This function has to be the first one
  243. * being called before that pin is used. The caller has to check the
  244. * return value to make sure it returns 0.
  245. *
  246. * @param pin a name defined by iomux_pin_name_t
  247. * @param cfg an input function as defined in iomux_pin_cfg_t
  248. *
  249. * @return 0 if successful; Non-zero otherwise
  250. */
  251. void mxc_request_iomux(iomux_pin_name_t pin, iomux_pin_cfg_t cfg);
  252. /*
  253. * Release ownership for an IO pin
  254. *
  255. * @param pin a name defined by iomux_pin_name_t
  256. * @param cfg an input function as defined in iomux_pin_cfg_t
  257. */
  258. void mxc_free_iomux(iomux_pin_name_t pin, iomux_pin_cfg_t cfg);
  259. /*
  260. * This function enables/disables the general purpose function for a particular
  261. * signal.
  262. *
  263. * @param gp one signal as defined in iomux_gp_func_t
  264. * @param en 1 to enable; 0 to disable
  265. */
  266. void mxc_iomux_set_gpr(iomux_gp_func_t gp, int en);
  267. /*
  268. * This function configures the pad value for a IOMUX pin.
  269. *
  270. * @param pin a pin number as defined in iomux_pin_name_t
  271. * @param config the ORed value of elements defined in
  272. * iomux_pad_config_t
  273. */
  274. void mxc_iomux_set_pad(iomux_pin_name_t pin, u32 config);
  275. /*
  276. * This function configures input path.
  277. *
  278. * @param input index of input select register as defined in
  279. * iomux_input_select_t
  280. * @param config the binary value of elements defined in
  281. * iomux_input_cfg_t
  282. */
  283. void mxc_iomux_set_input(iomux_input_select_t input, u32 config);
  284. #endif