pinmux.h 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  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. #if defined(CONFIG_ARCH_TEGRA_2x_SOC)
  19. #include "pinmux-t2.h"
  20. #else
  21. #error "Undefined Tegra architecture"
  22. #endif
  23. enum tegra_mux_func {
  24. TEGRA_MUX_RSVD = 0x8000,
  25. TEGRA_MUX_RSVD1 = 0x8000,
  26. TEGRA_MUX_RSVD2 = 0x8001,
  27. TEGRA_MUX_RSVD3 = 0x8002,
  28. TEGRA_MUX_RSVD4 = 0x8003,
  29. TEGRA_MUX_NONE = -1,
  30. TEGRA_MUX_AHB_CLK,
  31. TEGRA_MUX_APB_CLK,
  32. TEGRA_MUX_AUDIO_SYNC,
  33. TEGRA_MUX_CRT,
  34. TEGRA_MUX_DAP1,
  35. TEGRA_MUX_DAP2,
  36. TEGRA_MUX_DAP3,
  37. TEGRA_MUX_DAP4,
  38. TEGRA_MUX_DAP5,
  39. TEGRA_MUX_DISPLAYA,
  40. TEGRA_MUX_DISPLAYB,
  41. TEGRA_MUX_EMC_TEST0_DLL,
  42. TEGRA_MUX_EMC_TEST1_DLL,
  43. TEGRA_MUX_GMI,
  44. TEGRA_MUX_GMI_INT,
  45. TEGRA_MUX_HDMI,
  46. TEGRA_MUX_I2C,
  47. TEGRA_MUX_I2C2,
  48. TEGRA_MUX_I2C3,
  49. TEGRA_MUX_IDE,
  50. TEGRA_MUX_IRDA,
  51. TEGRA_MUX_KBC,
  52. TEGRA_MUX_MIO,
  53. TEGRA_MUX_MIPI_HS,
  54. TEGRA_MUX_NAND,
  55. TEGRA_MUX_OSC,
  56. TEGRA_MUX_OWR,
  57. TEGRA_MUX_PCIE,
  58. TEGRA_MUX_PLLA_OUT,
  59. TEGRA_MUX_PLLC_OUT1,
  60. TEGRA_MUX_PLLM_OUT1,
  61. TEGRA_MUX_PLLP_OUT2,
  62. TEGRA_MUX_PLLP_OUT3,
  63. TEGRA_MUX_PLLP_OUT4,
  64. TEGRA_MUX_PWM,
  65. TEGRA_MUX_PWR_INTR,
  66. TEGRA_MUX_PWR_ON,
  67. TEGRA_MUX_RTCK,
  68. TEGRA_MUX_SDIO1,
  69. TEGRA_MUX_SDIO2,
  70. TEGRA_MUX_SDIO3,
  71. TEGRA_MUX_SDIO4,
  72. TEGRA_MUX_SFLASH,
  73. TEGRA_MUX_SPDIF,
  74. TEGRA_MUX_SPI1,
  75. TEGRA_MUX_SPI2,
  76. TEGRA_MUX_SPI2_ALT,
  77. TEGRA_MUX_SPI3,
  78. TEGRA_MUX_SPI4,
  79. TEGRA_MUX_TRACE,
  80. TEGRA_MUX_TWC,
  81. TEGRA_MUX_UARTA,
  82. TEGRA_MUX_UARTB,
  83. TEGRA_MUX_UARTC,
  84. TEGRA_MUX_UARTD,
  85. TEGRA_MUX_UARTE,
  86. TEGRA_MUX_ULPI,
  87. TEGRA_MUX_VI,
  88. TEGRA_MUX_VI_SENSOR_CLK,
  89. TEGRA_MUX_XIO,
  90. TEGRA_MUX_SAFE,
  91. TEGRA_MAX_MUX,
  92. };
  93. enum tegra_pullupdown {
  94. TEGRA_PUPD_NORMAL = 0,
  95. TEGRA_PUPD_PULL_DOWN,
  96. TEGRA_PUPD_PULL_UP,
  97. };
  98. enum tegra_tristate {
  99. TEGRA_TRI_NORMAL = 0,
  100. TEGRA_TRI_TRISTATE = 1,
  101. };
  102. enum tegra_vddio {
  103. TEGRA_VDDIO_BB = 0,
  104. TEGRA_VDDIO_LCD,
  105. TEGRA_VDDIO_VI,
  106. TEGRA_VDDIO_UART,
  107. TEGRA_VDDIO_DDR,
  108. TEGRA_VDDIO_NAND,
  109. TEGRA_VDDIO_SYS,
  110. TEGRA_VDDIO_AUDIO,
  111. TEGRA_VDDIO_SD,
  112. };
  113. struct tegra_pingroup_config {
  114. enum tegra_pingroup pingroup;
  115. enum tegra_mux_func func;
  116. enum tegra_pullupdown pupd;
  117. enum tegra_tristate tristate;
  118. };
  119. enum tegra_slew {
  120. TEGRA_SLEW_FASTEST = 0,
  121. TEGRA_SLEW_FAST,
  122. TEGRA_SLEW_SLOW,
  123. TEGRA_SLEW_SLOWEST,
  124. TEGRA_MAX_SLEW,
  125. };
  126. enum tegra_pull_strength {
  127. TEGRA_PULL_0 = 0,
  128. TEGRA_PULL_1,
  129. TEGRA_PULL_2,
  130. TEGRA_PULL_3,
  131. TEGRA_PULL_4,
  132. TEGRA_PULL_5,
  133. TEGRA_PULL_6,
  134. TEGRA_PULL_7,
  135. TEGRA_PULL_8,
  136. TEGRA_PULL_9,
  137. TEGRA_PULL_10,
  138. TEGRA_PULL_11,
  139. TEGRA_PULL_12,
  140. TEGRA_PULL_13,
  141. TEGRA_PULL_14,
  142. TEGRA_PULL_15,
  143. TEGRA_PULL_16,
  144. TEGRA_PULL_17,
  145. TEGRA_PULL_18,
  146. TEGRA_PULL_19,
  147. TEGRA_PULL_20,
  148. TEGRA_PULL_21,
  149. TEGRA_PULL_22,
  150. TEGRA_PULL_23,
  151. TEGRA_PULL_24,
  152. TEGRA_PULL_25,
  153. TEGRA_PULL_26,
  154. TEGRA_PULL_27,
  155. TEGRA_PULL_28,
  156. TEGRA_PULL_29,
  157. TEGRA_PULL_30,
  158. TEGRA_PULL_31,
  159. TEGRA_MAX_PULL,
  160. };
  161. enum tegra_drive {
  162. TEGRA_DRIVE_DIV_8 = 0,
  163. TEGRA_DRIVE_DIV_4,
  164. TEGRA_DRIVE_DIV_2,
  165. TEGRA_DRIVE_DIV_1,
  166. TEGRA_MAX_DRIVE,
  167. };
  168. enum tegra_hsm {
  169. TEGRA_HSM_DISABLE = 0,
  170. TEGRA_HSM_ENABLE,
  171. };
  172. enum tegra_schmitt {
  173. TEGRA_SCHMITT_DISABLE = 0,
  174. TEGRA_SCHMITT_ENABLE,
  175. };
  176. struct tegra_drive_pingroup_config {
  177. enum tegra_drive_pingroup pingroup;
  178. enum tegra_hsm hsm;
  179. enum tegra_schmitt schmitt;
  180. enum tegra_drive drive;
  181. enum tegra_pull_strength pull_down;
  182. enum tegra_pull_strength pull_up;
  183. enum tegra_slew slew_rising;
  184. enum tegra_slew slew_falling;
  185. };
  186. struct tegra_drive_pingroup_desc {
  187. const char *name;
  188. s16 reg;
  189. };
  190. struct tegra_pingroup_desc {
  191. const char *name;
  192. int funcs[4];
  193. int func_safe;
  194. int vddio;
  195. s16 tri_reg; /* offset into the TRISTATE_REG_* register bank */
  196. s16 mux_reg; /* offset into the PIN_MUX_CTL_* register bank */
  197. s16 pupd_reg; /* offset into the PULL_UPDOWN_REG_* register bank */
  198. s8 tri_bit; /* offset into the TRISTATE_REG_* register bit */
  199. s8 mux_bit; /* offset into the PIN_MUX_CTL_* register bit */
  200. s8 pupd_bit; /* offset into the PULL_UPDOWN_REG_* register bit */
  201. };
  202. extern const struct tegra_pingroup_desc tegra_soc_pingroups[];
  203. extern const struct tegra_drive_pingroup_desc tegra_soc_drive_pingroups[];
  204. int tegra_pinmux_set_tristate(enum tegra_pingroup pg,
  205. enum tegra_tristate tristate);
  206. int tegra_pinmux_set_pullupdown(enum tegra_pingroup pg,
  207. enum tegra_pullupdown pupd);
  208. void tegra_pinmux_config_table(const struct tegra_pingroup_config *config,
  209. int len);
  210. void tegra_drive_pinmux_config_table(struct tegra_drive_pingroup_config *config,
  211. int len);
  212. void tegra_pinmux_set_safe_pinmux_table(const struct tegra_pingroup_config *config,
  213. int len);
  214. void tegra_pinmux_config_pinmux_table(const struct tegra_pingroup_config *config,
  215. int len);
  216. void tegra_pinmux_config_tristate_table(const struct tegra_pingroup_config *config,
  217. int len, enum tegra_tristate tristate);
  218. void tegra_pinmux_config_pullupdown_table(const struct tegra_pingroup_config *config,
  219. int len, enum tegra_pullupdown pupd);
  220. #endif