mt8193_pinmux.h 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. #ifndef MT8193_PINMUX_H
  2. #define MT8193_PINMUX_H
  3. #include <generated/autoconf.h>
  4. #include <linux/mm.h>
  5. #include <linux/init.h>
  6. #include <linux/fb.h>
  7. #include <linux/delay.h>
  8. #include <linux/device.h>
  9. #include <linux/platform_device.h>
  10. #include <linux/kthread.h>
  11. #include <linux/rtpm_prio.h>
  12. #include <linux/vmalloc.h>
  13. #include <asm/uaccess.h>
  14. #include <asm/atomic.h>
  15. #include <asm/cacheflush.h>
  16. #include <asm/io.h>
  17. #include <mach/irqs.h>
  18. #include <linux/miscdevice.h>
  19. #include <linux/fs.h>
  20. #include <linux/file.h>
  21. #include <linux/cdev.h>
  22. #include <asm/tlbflush.h>
  23. #include <asm/page.h>
  24. #include <linux/slab.h>
  25. #include <linux/module.h>
  26. #include "mt8193.h"
  27. /* ret code */
  28. #define PINMUX_RET_OK 0
  29. #define PINMUX_RET_INVALID_ARG (-1)
  30. #define PINMUX_RET_FAIL (-2)
  31. #define PINMUX_FUNCTION0 0
  32. #define PINMUX_FUNCTION1 1
  33. #define PINMUX_FUNCTION2 2
  34. #define PINMUX_FUNCTION3 3
  35. #define PINMUX_FUNCTION4 4
  36. #define PINMUX_FUNCTION5 5
  37. #define PINMUX_FUNCTION6 6
  38. #define PINMUX_FUNCTION7 7
  39. #define PINMUX_FUNCTION_MAX 8
  40. enum MT8193_APD_PIN {
  41. PIN_UNSUPPORTED = -1,
  42. PIN_NFD6,
  43. PIN_NFD5,
  44. PIN_NFD4,
  45. PIN_NFD3,
  46. PIN_NFD2,
  47. PIN_NFD1,
  48. PIN_NFD0,
  49. PIN_TP_VPLL,
  50. PIN_AO0N,
  51. PIN_AO0P,
  52. PIN_AO1N,
  53. PIN_AO1P,
  54. PIN_AO2N,
  55. PIN_AO2P,
  56. PIN_AOCK0N,
  57. PIN_AOCK0P,
  58. PIN_AO3N,
  59. PIN_AO3P,
  60. PIN_G0,
  61. PIN_B5,
  62. PIN_B4,
  63. PIN_B3,
  64. PIN_B2,
  65. PIN_B1,
  66. PIN_B0,
  67. PIN_DE,
  68. PIN_VCLK,
  69. PIN_HSYNC,
  70. PIN_VSYNC,
  71. PIN_CEC,
  72. PIN_HDMISCK,
  73. PIN_HDMISD,
  74. PIN_HTPLG,
  75. PIN_I2S_DATA,
  76. PIN_I2S_LRCK,
  77. PIN_I2S_BCK,
  78. PIN_DPI1CK,
  79. PIN_DPI1D7,
  80. PIN_DPI1D6,
  81. PIN_DPI1D5,
  82. PIN_DPI1D4,
  83. PIN_DPI1D3,
  84. PIN_DPI1D2,
  85. PIN_DPI1D1,
  86. PIN_DPI1D0,
  87. PIN_DPI0CK,
  88. PIN_DPI0HSYNC,
  89. PIN_DPI0VSYNC,
  90. PIN_DPI0D11,
  91. PIN_DPI0D10,
  92. PIN_DPI0D9,
  93. PIN_DPI0D8,
  94. PIN_DPI0D7,
  95. PIN_DPI0D6,
  96. PIN_DPI0D5,
  97. PIN_DPI0D4,
  98. PIN_DPI0D3,
  99. PIN_DPI0D2,
  100. PIN_DPI0D1,
  101. PIN_DPI0D0,
  102. PIN_SDA,
  103. PIN_SCL,
  104. PIN_NRNB,
  105. PIN_NCLE,
  106. PIN_NALE,
  107. PIN_NWEB,
  108. PIN_NREB,
  109. PIN_NLD7,
  110. PIN_NLD6,
  111. PIN_NLD5,
  112. PIN_NLD4,
  113. PIN_NLD3,
  114. PIN_NLD2,
  115. PIN_NLD1,
  116. PIN_NLD0,
  117. PIN_RTC_32K_CK,
  118. PIN_INT,
  119. PIN_RESET,
  120. PIN_EN_BB,
  121. PIN_CK_SEL,
  122. PIN_NFRBN,
  123. PIN_NFCLE,
  124. PIN_NFALE,
  125. PIN_NFWEN,
  126. PIN_NFREN,
  127. PIN_NFCEN,
  128. PIN_NFD7,
  129. PIN_PROT0,
  130. PIN_PROT1,
  131. PIN_PROT2,
  132. PIN_PROT3,
  133. PIN_PROT4,
  134. PIN_PROT5,
  135. PIN_MAX
  136. };
  137. /*
  138. function table
  139. [pin][2 * function]
  140. pin0: func_pmux, func_sel (<<), func_mask
  141. pin1: func_pmux, func_sel, func_mask
  142. pin2: func_pmux, func_sel, func_mask
  143. */
  144. static const u32 _au4PinmuxFuncTbl[PIN_MAX][3] = {
  145. /* PIN_NFD6, */ {REG_RW_PMUX1, 0, 0x7},
  146. /* PIN_NFD5, */ {REG_RW_PMUX1, 3, 0x38},
  147. /* PIN_NFD4, */ {REG_RW_PMUX1, 6, 0x1C0},
  148. /* PIN_NFD3, */ {REG_RW_PMUX1, 9, 0xE00},
  149. /* PIN_NFD2, */ {REG_RW_PMUX1, 12, 0x7000},
  150. /* PIN_NFD1, */ {REG_RW_PMUX1, 15, 0x38000},
  151. /* PIN_NFD0, */ {REG_RW_PMUX1, 18, 0x1C0000},
  152. /* PIN_TP_VPLL, */ {REG_RW_PMUX8, 18, 0x1C0000},
  153. /* PIN_AO0N, */ {REG_RW_PMUX8, 21, 0xE00000},
  154. /* PIN_AO0P, */ {REG_RW_PMUX8, 24, 0x7000000},
  155. /* PIN_AO1N, */ {REG_RW_PMUX8, 27, 0x38000000},
  156. /* PIN_AO1P, */ {REG_RW_PMUX9, 0, 0x7},
  157. /* PIN_AO2N, */ {REG_RW_PMUX9, 3, 0x38},
  158. /* PIN_AO2P, */ {REG_RW_PMUX9, 6, 0x1C0},
  159. /* PIN_AOCK0N, */ {REG_RW_PMUX9, 9, 0xE00},
  160. /* PIN_AOCK0P, */ {REG_RW_PMUX9, 12, 0x7000},
  161. /* PIN_AO3N, */ {REG_RW_PMUX9, 15, 0x38000},
  162. /* PIN_AO3P, */ {REG_RW_PMUX9, 18, 0x1C0000},
  163. /* PIN_G0, */ {REG_RW_PMUX1, 21, 0xE00000},
  164. /* PIN_B5, */ {REG_RW_PMUX1, 24, 0x7000000},
  165. /* PIN_B4, */ {REG_RW_PMUX1, 27, 0x38000000},
  166. /* PIN_B3, */ {REG_RW_PMUX2, 0, 0x7},
  167. /* PIN_B2, */ {REG_RW_PMUX2, 3, 0x38},
  168. /* PIN_B1, */ {REG_RW_PMUX2, 6, 0x1C0},
  169. /* PIN_B0, */ {REG_RW_PMUX2, 9, 0xE00},
  170. /* PIN_DE, */ {REG_RW_PMUX2, 12, 0x7000},
  171. /* PIN_VCLK, */ {REG_RW_PMUX2, 15, 0x38000},
  172. /* PIN_HSYNC, */ {REG_RW_PMUX2, 18, 0x1C0000},
  173. /* PIN_VSYNC, */ {REG_RW_PMUX2, 21, 0xE00000},
  174. /* PIN_CEC, */ {REG_RW_PMUX2, 24, 0x7000000},
  175. /* PIN_HDMISCK, */ {REG_RW_PMUX2, 27, 0x38000000},
  176. /* PIN_HDMISD, */ {REG_RW_PMUX3, 0, 0x7},
  177. /* PIN_HTPLG, */ {REG_RW_PMUX3, 3, 0x38},
  178. /* PIN_I2S_DATA, */ {REG_RW_PMUX3, 6, 0x1C0},
  179. /* PIN_I2S_LRCK, */ {REG_RW_PMUX3, 9, 0xE00},
  180. /* PIN_I2S_BCK, */ {REG_RW_PMUX3, 12, 0x7000},
  181. /* PIN_DPI1CK, */ {REG_RW_PMUX3, 15, 0x38000},
  182. /* PIN_DPI1D7, */ {REG_RW_PMUX3, 18, 0x1C0000},
  183. /* PIN_DPI1D6, */ {REG_RW_PMUX3, 21, 0xE00000},
  184. /* PIN_DPI1D5, */ {REG_RW_PMUX3, 24, 0x7000000},
  185. /* PIN_DPI1D4, */ {REG_RW_PMUX3, 27, 0x38000000},
  186. /* PIN_DPI1D3, */ {REG_RW_PMUX4, 0, 0x7},
  187. /* PIN_DPI1D2, */ {REG_RW_PMUX4, 3, 0x38},
  188. /* PIN_DPI1D1, */ {REG_RW_PMUX4, 6, 0x1C0},
  189. /* PIN_DPI1D0, */ {REG_RW_PMUX4, 9, 0xE00},
  190. /* PIN_DPI0CK, */ {REG_RW_PMUX4, 12, 0x7000},
  191. /* PIN_DPI0HSYNC, */ {REG_RW_PMUX4, 15, 0x38000},
  192. /* PIN_DPI0VSYNC, */ {REG_RW_PMUX4, 18, 0x1C0000},
  193. /* PIN_DPI0D11, */ {REG_RW_PMUX4, 21, 0xE00000},
  194. /* PIN_DPI0D10, */ {REG_RW_PMUX4, 24, 0x7000000},
  195. /* PIN_DPI0D9, */ {REG_RW_PMUX4, 27, 0x38000000},
  196. /* PIN_DPI0D8, */ {REG_RW_PMUX5, 0, 0x7},
  197. /* PIN_DPI0D7, */ {REG_RW_PMUX5, 3, 0x38},
  198. /* PIN_DPI0D6, */ {REG_RW_PMUX5, 6, 0x1C0},
  199. /* PIN_DPI0D5, */ {REG_RW_PMUX5, 9, 0xE00},
  200. /* PIN_DPI0D4, */ {REG_RW_PMUX5, 12, 0x7000},
  201. /* PIN_DPI0D3, */ {REG_RW_PMUX5, 15, 0x38000},
  202. /* PIN_DPI0D2, */ {REG_RW_PMUX5, 18, 0x1C0000},
  203. /* PIN_DPI0D1, */ {REG_RW_PMUX5, 21, 0xE00000},
  204. /* PIN_DPI0D0, */ {REG_RW_PMUX5, 24, 0x7000000},
  205. /* PIN_SDA, */ {REG_RW_PMUX5, 27, 0x38000000},
  206. /* PIN_SCL, */ {REG_RW_PMUX6, 0, 0x7},
  207. /* PIN_NRNB, */ {REG_RW_PMUX6, 3, 0x38},
  208. /* PIN_NCLE, */ {REG_RW_PMUX6, 6, 0x1C0},
  209. /* PIN_NALE, */ {REG_RW_PMUX6, 9, 0xE00},
  210. /* PIN_NWEB, */ {REG_RW_PMUX6, 12, 0x7000},
  211. /* PIN_NREB, */ {REG_RW_PMUX6, 15, 0x38000},
  212. /* PIN_NLD7, */ {REG_RW_PMUX6, 18, 0x1C0000},
  213. /* PIN_NLD6, */ {REG_RW_PMUX6, 21, 0xE00000},
  214. /* PIN_NLD5, */ {REG_RW_PMUX6, 24, 0x7000000},
  215. /* PIN_NLD4, */ {REG_RW_PMUX6, 27, 0x38000000},
  216. /* PIN_NLD3, */ {REG_RW_PMUX7, 0, 0x7},
  217. /* PIN_NLD2, */ {REG_RW_PMUX7, 3, 0x38},
  218. /* PIN_NLD1, */ {REG_RW_PMUX7, 6, 0x1C0},
  219. /* PIN_NLD0, */ {REG_RW_PMUX7, 9, 0xE00},
  220. /* PIN_RTC_32K_CK, */ {REG_RW_PMUX7, 12, 0x7000},
  221. /* PIN_INT, */ {REG_RW_PMUX7, 15, 0x38000},
  222. /* PIN_RESET, */ {REG_RW_PMUX7, 18, 0x1C0000},
  223. /* PIN_EN_BB, */ {REG_RW_PMUX7, 21, 0xE00000},
  224. /* PIN_CK_SEL, */ {REG_RW_PMUX7, 24, 0x7000000},
  225. /* PIN_NFRBN, */ {REG_RW_PMUX7, 27, 0x38000000},
  226. /* PIN_NFCLE, */ {REG_RW_PMUX8, 0, 0x7},
  227. /* PIN_NFALE, */ {REG_RW_PMUX8, 3, 0x38},
  228. /* PIN_NFWEN, */ {REG_RW_PMUX8, 6, 0x1C0},
  229. /* PIN_NFREN, */ {REG_RW_PMUX8, 9, 0xE00},
  230. /* PIN_NFCEN, */ {REG_RW_PMUX8, 12, 0x7000},
  231. /* PIN_NFD7, */ {REG_RW_PMUX8, 15, 0x38000},
  232. /* PIN_PROT0, */ {REG_RW_PMUX9, 21, 0x100000},
  233. /* PIN_PROT1, */ {REG_RW_PMUX9, 22, 0x200000},
  234. /* PIN_PROT2, */ {REG_RW_PMUX9, 23, 0x400000},
  235. /* PIN_PROT3, */ {REG_RW_PMUX9, 24, 0x800000},
  236. /* PIN_PROT4, */ {REG_RW_PMUX9, 25, 0x1000000},
  237. /* PIN_PROT5, */ {REG_RW_PMUX9, 26, 0x2000000},
  238. };
  239. /* pu shift, pd shift*/
  240. static const u32 _au4PinmuxPadPuPdTbl[PIN_MAX][2] = {
  241. /* PIN_NFD6, */ {0, 0},
  242. /* PIN_NFD5, */ {1, 1},
  243. /* PIN_NFD4, */ {2, 2},
  244. /* PIN_NFD3, */ {3, 3},
  245. /* PIN_NFD2, */ {4, 4},
  246. /* PIN_NFD1, */ {5, 5},
  247. /* PIN_NFD0, */ {6, 6},
  248. /* PIN_TP_VPLL, */ {0, 0},
  249. /* PIN_AO0N, */ {0, 0},
  250. /* PIN_AO0P, */ {0, 0},
  251. /* PIN_AO1N, */ {0, 0},
  252. /* PIN_AO1P, */ {0, 0},
  253. /* PIN_AO2N, */ {0, 0},
  254. /* PIN_AO2P, */ {0, 0},
  255. /* PIN_AOCK0N, */ {0, 0},
  256. /* PIN_AOCK0P, */ {0, 0},
  257. /* PIN_AO3N, */ {0, 0},
  258. /* PIN_AO3P, */ {0, 0},
  259. /* PIN_G0, */ {7, 7},
  260. /* PIN_B5, */ {8, 8},
  261. /* PIN_B4, */ {9, 9},
  262. /* PIN_B3, */ {10, 10},
  263. /* PIN_B2, */ {11, 11},
  264. /* PIN_B1, */ {12, 12},
  265. /* PIN_B0, */ {13, 13},
  266. /* PIN_DE, */ {14, 14},
  267. /* PIN_VCLK, */ {17, 17},
  268. /* PIN_HSYNC, */ {16, 16},
  269. /* PIN_VSYNC, */ {15, 15},
  270. /* PIN_CEC, */ {0, 0},
  271. /* PIN_HDMISCK, */ {19, 19},
  272. /* PIN_HDMISD, */ {20, 20},
  273. /* PIN_HTPLG, */ {21, 21},
  274. /* PIN_I2S_DATA, */ {22, 22},
  275. /* PIN_I2S_LRCK, */ {23, 23},
  276. /* PIN_I2S_BCK, */ {24, 24},
  277. /* PIN_DPI1CK, */ {25, 25},
  278. /* PIN_DPI1D7, */ {26, 26},
  279. /* PIN_DPI1D6, */ {27, 27},
  280. /* PIN_DPI1D5, */ {28, 28},
  281. /* PIN_DPI1D4, */ {29, 29},
  282. /* PIN_DPI1D3, */ {30, 30},
  283. /* PIN_DPI1D2, */ {31, 31},
  284. /* PIN_DPI1D1, */ {32, 32},
  285. /* PIN_DPI1D0, */ {33, 33},
  286. /* PIN_DPI0CK, */ {34, 34},
  287. /* PIN_DPI0HSYNC, */ {35, 35},
  288. /* PIN_DPI0VSYNC, */ {36, 36},
  289. /* PIN_DPI0D11, */ {37, 37},
  290. /* PIN_DPI0D10, */ {38, 38},
  291. /* PIN_DPI0D9, */ {39, 39},
  292. /* PIN_DPI0D8, */ {40, 40},
  293. /* PIN_DPI0D7, */ {41, 41},
  294. /* PIN_DPI0D6, */ {42, 42},
  295. /* PIN_DPI0D5, */ {43, 43},
  296. /* PIN_DPI0D4, */ {44, 44},
  297. /* PIN_DPI0D3, */ {45, 45},
  298. /* PIN_DPI0D2, */ {46, 46},
  299. /* PIN_DPI0D1, */ {47, 47},
  300. /* PIN_DPI0D0, */ {48, 48},
  301. /* PIN_SDA, */ {49, 49},
  302. /* PIN_SCL, */ {50, 50},
  303. /* PIN_NRNB, */ {51, 51},
  304. /* PIN_NCLE, */ {52, 52},
  305. /* PIN_NALE, */ {53, 53},
  306. /* PIN_NWEB, */ {54, 54},
  307. /* PIN_NREB, */ {55, 55},
  308. /* PIN_NLD7, */ {56, 56},
  309. /* PIN_NLD6, */ {57, 57},
  310. /* PIN_NLD5, */ {58, 58},
  311. /* PIN_NLD4, */ {59, 59},
  312. /* PIN_NLD3, */ {60, 60},
  313. /* PIN_NLD2, */ {61, 16},
  314. /* PIN_NLD1, */ {62, 62},
  315. /* PIN_NLD0, */ {63, 63},
  316. /* PIN_RTC_32K_CK, */ {0, 0},
  317. /* PIN_INT, */ {64, 64},
  318. /* PIN_RESET, */ {0, 0},
  319. /* PIN_EN_BB, */ {0, 0},
  320. /* PIN_CK_SEL, */ {0, 0},
  321. /* PIN_NFRBN, */ {0, 0},
  322. /* PIN_NFCLE, */ {0, 0},
  323. /* PIN_NFALE, */ {0, 0},
  324. /* PIN_NFWEN, */ {0, 0},
  325. /* PIN_NFREN, */ {0, 0},
  326. /* PIN_NFCEN, */ {0, 0},
  327. /* PIN_NFD7, */ {0, 0},
  328. /* PIN_PROT0, */ {0, 0},
  329. /* PIN_PROT1, */ {0, 0},
  330. /* PIN_PROT2, */ {0, 0},
  331. /* PIN_PROT3, */ {0, 0},
  332. /* PIN_PROT4, */ {0, 0},
  333. /* PIN_PROT5, */ {0, 0},
  334. };
  335. extern int mt8193_pinset(u32 pin_num, u32 function);
  336. #endif /* MT8193_H */