pinctrl-capri.c 44 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454
  1. /*
  2. * Copyright (C) 2013 Broadcom Corporation
  3. *
  4. * This program is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU General Public License as
  6. * published by the Free Software Foundation version 2.
  7. *
  8. * This program is distributed "as is" WITHOUT ANY WARRANTY of any
  9. * kind, whether express or implied; without even the implied warranty
  10. * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. */
  13. #include <linux/err.h>
  14. #include <linux/io.h>
  15. #include <linux/module.h>
  16. #include <linux/of.h>
  17. #include <linux/platform_device.h>
  18. #include <linux/pinctrl/pinctrl.h>
  19. #include <linux/pinctrl/pinmux.h>
  20. #include <linux/pinctrl/pinconf.h>
  21. #include <linux/pinctrl/pinconf-generic.h>
  22. #include <linux/regmap.h>
  23. #include <linux/slab.h>
  24. #include "core.h"
  25. #include "pinctrl-utils.h"
  26. /* Capri Pin Control Registers Definitions */
  27. /* Function Select bits are the same for all pin control registers */
  28. #define CAPRI_PIN_REG_F_SEL_MASK 0x0700
  29. #define CAPRI_PIN_REG_F_SEL_SHIFT 8
  30. /* Standard pin register */
  31. #define CAPRI_STD_PIN_REG_DRV_STR_MASK 0x0007
  32. #define CAPRI_STD_PIN_REG_DRV_STR_SHIFT 0
  33. #define CAPRI_STD_PIN_REG_INPUT_DIS_MASK 0x0008
  34. #define CAPRI_STD_PIN_REG_INPUT_DIS_SHIFT 3
  35. #define CAPRI_STD_PIN_REG_SLEW_MASK 0x0010
  36. #define CAPRI_STD_PIN_REG_SLEW_SHIFT 4
  37. #define CAPRI_STD_PIN_REG_PULL_UP_MASK 0x0020
  38. #define CAPRI_STD_PIN_REG_PULL_UP_SHIFT 5
  39. #define CAPRI_STD_PIN_REG_PULL_DN_MASK 0x0040
  40. #define CAPRI_STD_PIN_REG_PULL_DN_SHIFT 6
  41. #define CAPRI_STD_PIN_REG_HYST_MASK 0x0080
  42. #define CAPRI_STD_PIN_REG_HYST_SHIFT 7
  43. /* I2C pin register */
  44. #define CAPRI_I2C_PIN_REG_INPUT_DIS_MASK 0x0004
  45. #define CAPRI_I2C_PIN_REG_INPUT_DIS_SHIFT 2
  46. #define CAPRI_I2C_PIN_REG_SLEW_MASK 0x0008
  47. #define CAPRI_I2C_PIN_REG_SLEW_SHIFT 3
  48. #define CAPRI_I2C_PIN_REG_PULL_UP_STR_MASK 0x0070
  49. #define CAPRI_I2C_PIN_REG_PULL_UP_STR_SHIFT 4
  50. /* HDMI pin register */
  51. #define CAPRI_HDMI_PIN_REG_INPUT_DIS_MASK 0x0008
  52. #define CAPRI_HDMI_PIN_REG_INPUT_DIS_SHIFT 3
  53. #define CAPRI_HDMI_PIN_REG_MODE_MASK 0x0010
  54. #define CAPRI_HDMI_PIN_REG_MODE_SHIFT 4
  55. /**
  56. * capri_pin_type - types of pin register
  57. */
  58. enum capri_pin_type {
  59. CAPRI_PIN_TYPE_UNKNOWN = 0,
  60. CAPRI_PIN_TYPE_STD,
  61. CAPRI_PIN_TYPE_I2C,
  62. CAPRI_PIN_TYPE_HDMI,
  63. };
  64. static enum capri_pin_type std_pin = CAPRI_PIN_TYPE_STD;
  65. static enum capri_pin_type i2c_pin = CAPRI_PIN_TYPE_I2C;
  66. static enum capri_pin_type hdmi_pin = CAPRI_PIN_TYPE_HDMI;
  67. /**
  68. * capri_pin_function- define pin function
  69. */
  70. struct capri_pin_function {
  71. const char *name;
  72. const char * const *groups;
  73. const unsigned ngroups;
  74. };
  75. /**
  76. * capri_pinctrl_data - Broadcom-specific pinctrl data
  77. * @reg_base - base of pinctrl registers
  78. */
  79. struct capri_pinctrl_data {
  80. void __iomem *reg_base;
  81. /* List of all pins */
  82. const struct pinctrl_pin_desc *pins;
  83. const unsigned npins;
  84. const struct capri_pin_function *functions;
  85. const unsigned nfunctions;
  86. struct regmap *regmap;
  87. };
  88. /*
  89. * Pin number definition. The order here must be the same as defined in the
  90. * PADCTRLREG block in the RDB.
  91. */
  92. #define CAPRI_PIN_ADCSYNC 0
  93. #define CAPRI_PIN_BAT_RM 1
  94. #define CAPRI_PIN_BSC1_SCL 2
  95. #define CAPRI_PIN_BSC1_SDA 3
  96. #define CAPRI_PIN_BSC2_SCL 4
  97. #define CAPRI_PIN_BSC2_SDA 5
  98. #define CAPRI_PIN_CLASSGPWR 6
  99. #define CAPRI_PIN_CLK_CX8 7
  100. #define CAPRI_PIN_CLKOUT_0 8
  101. #define CAPRI_PIN_CLKOUT_1 9
  102. #define CAPRI_PIN_CLKOUT_2 10
  103. #define CAPRI_PIN_CLKOUT_3 11
  104. #define CAPRI_PIN_CLKREQ_IN_0 12
  105. #define CAPRI_PIN_CLKREQ_IN_1 13
  106. #define CAPRI_PIN_CWS_SYS_REQ1 14
  107. #define CAPRI_PIN_CWS_SYS_REQ2 15
  108. #define CAPRI_PIN_CWS_SYS_REQ3 16
  109. #define CAPRI_PIN_DIGMIC1_CLK 17
  110. #define CAPRI_PIN_DIGMIC1_DQ 18
  111. #define CAPRI_PIN_DIGMIC2_CLK 19
  112. #define CAPRI_PIN_DIGMIC2_DQ 20
  113. #define CAPRI_PIN_GPEN13 21
  114. #define CAPRI_PIN_GPEN14 22
  115. #define CAPRI_PIN_GPEN15 23
  116. #define CAPRI_PIN_GPIO00 24
  117. #define CAPRI_PIN_GPIO01 25
  118. #define CAPRI_PIN_GPIO02 26
  119. #define CAPRI_PIN_GPIO03 27
  120. #define CAPRI_PIN_GPIO04 28
  121. #define CAPRI_PIN_GPIO05 29
  122. #define CAPRI_PIN_GPIO06 30
  123. #define CAPRI_PIN_GPIO07 31
  124. #define CAPRI_PIN_GPIO08 32
  125. #define CAPRI_PIN_GPIO09 33
  126. #define CAPRI_PIN_GPIO10 34
  127. #define CAPRI_PIN_GPIO11 35
  128. #define CAPRI_PIN_GPIO12 36
  129. #define CAPRI_PIN_GPIO13 37
  130. #define CAPRI_PIN_GPIO14 38
  131. #define CAPRI_PIN_GPS_PABLANK 39
  132. #define CAPRI_PIN_GPS_TMARK 40
  133. #define CAPRI_PIN_HDMI_SCL 41
  134. #define CAPRI_PIN_HDMI_SDA 42
  135. #define CAPRI_PIN_IC_DM 43
  136. #define CAPRI_PIN_IC_DP 44
  137. #define CAPRI_PIN_KP_COL_IP_0 45
  138. #define CAPRI_PIN_KP_COL_IP_1 46
  139. #define CAPRI_PIN_KP_COL_IP_2 47
  140. #define CAPRI_PIN_KP_COL_IP_3 48
  141. #define CAPRI_PIN_KP_ROW_OP_0 49
  142. #define CAPRI_PIN_KP_ROW_OP_1 50
  143. #define CAPRI_PIN_KP_ROW_OP_2 51
  144. #define CAPRI_PIN_KP_ROW_OP_3 52
  145. #define CAPRI_PIN_LCD_B_0 53
  146. #define CAPRI_PIN_LCD_B_1 54
  147. #define CAPRI_PIN_LCD_B_2 55
  148. #define CAPRI_PIN_LCD_B_3 56
  149. #define CAPRI_PIN_LCD_B_4 57
  150. #define CAPRI_PIN_LCD_B_5 58
  151. #define CAPRI_PIN_LCD_B_6 59
  152. #define CAPRI_PIN_LCD_B_7 60
  153. #define CAPRI_PIN_LCD_G_0 61
  154. #define CAPRI_PIN_LCD_G_1 62
  155. #define CAPRI_PIN_LCD_G_2 63
  156. #define CAPRI_PIN_LCD_G_3 64
  157. #define CAPRI_PIN_LCD_G_4 65
  158. #define CAPRI_PIN_LCD_G_5 66
  159. #define CAPRI_PIN_LCD_G_6 67
  160. #define CAPRI_PIN_LCD_G_7 68
  161. #define CAPRI_PIN_LCD_HSYNC 69
  162. #define CAPRI_PIN_LCD_OE 70
  163. #define CAPRI_PIN_LCD_PCLK 71
  164. #define CAPRI_PIN_LCD_R_0 72
  165. #define CAPRI_PIN_LCD_R_1 73
  166. #define CAPRI_PIN_LCD_R_2 74
  167. #define CAPRI_PIN_LCD_R_3 75
  168. #define CAPRI_PIN_LCD_R_4 76
  169. #define CAPRI_PIN_LCD_R_5 77
  170. #define CAPRI_PIN_LCD_R_6 78
  171. #define CAPRI_PIN_LCD_R_7 79
  172. #define CAPRI_PIN_LCD_VSYNC 80
  173. #define CAPRI_PIN_MDMGPIO0 81
  174. #define CAPRI_PIN_MDMGPIO1 82
  175. #define CAPRI_PIN_MDMGPIO2 83
  176. #define CAPRI_PIN_MDMGPIO3 84
  177. #define CAPRI_PIN_MDMGPIO4 85
  178. #define CAPRI_PIN_MDMGPIO5 86
  179. #define CAPRI_PIN_MDMGPIO6 87
  180. #define CAPRI_PIN_MDMGPIO7 88
  181. #define CAPRI_PIN_MDMGPIO8 89
  182. #define CAPRI_PIN_MPHI_DATA_0 90
  183. #define CAPRI_PIN_MPHI_DATA_1 91
  184. #define CAPRI_PIN_MPHI_DATA_2 92
  185. #define CAPRI_PIN_MPHI_DATA_3 93
  186. #define CAPRI_PIN_MPHI_DATA_4 94
  187. #define CAPRI_PIN_MPHI_DATA_5 95
  188. #define CAPRI_PIN_MPHI_DATA_6 96
  189. #define CAPRI_PIN_MPHI_DATA_7 97
  190. #define CAPRI_PIN_MPHI_DATA_8 98
  191. #define CAPRI_PIN_MPHI_DATA_9 99
  192. #define CAPRI_PIN_MPHI_DATA_10 100
  193. #define CAPRI_PIN_MPHI_DATA_11 101
  194. #define CAPRI_PIN_MPHI_DATA_12 102
  195. #define CAPRI_PIN_MPHI_DATA_13 103
  196. #define CAPRI_PIN_MPHI_DATA_14 104
  197. #define CAPRI_PIN_MPHI_DATA_15 105
  198. #define CAPRI_PIN_MPHI_HA0 106
  199. #define CAPRI_PIN_MPHI_HAT0 107
  200. #define CAPRI_PIN_MPHI_HAT1 108
  201. #define CAPRI_PIN_MPHI_HCE0_N 109
  202. #define CAPRI_PIN_MPHI_HCE1_N 110
  203. #define CAPRI_PIN_MPHI_HRD_N 111
  204. #define CAPRI_PIN_MPHI_HWR_N 112
  205. #define CAPRI_PIN_MPHI_RUN0 113
  206. #define CAPRI_PIN_MPHI_RUN1 114
  207. #define CAPRI_PIN_MTX_SCAN_CLK 115
  208. #define CAPRI_PIN_MTX_SCAN_DATA 116
  209. #define CAPRI_PIN_NAND_AD_0 117
  210. #define CAPRI_PIN_NAND_AD_1 118
  211. #define CAPRI_PIN_NAND_AD_2 119
  212. #define CAPRI_PIN_NAND_AD_3 120
  213. #define CAPRI_PIN_NAND_AD_4 121
  214. #define CAPRI_PIN_NAND_AD_5 122
  215. #define CAPRI_PIN_NAND_AD_6 123
  216. #define CAPRI_PIN_NAND_AD_7 124
  217. #define CAPRI_PIN_NAND_ALE 125
  218. #define CAPRI_PIN_NAND_CEN_0 126
  219. #define CAPRI_PIN_NAND_CEN_1 127
  220. #define CAPRI_PIN_NAND_CLE 128
  221. #define CAPRI_PIN_NAND_OEN 129
  222. #define CAPRI_PIN_NAND_RDY_0 130
  223. #define CAPRI_PIN_NAND_RDY_1 131
  224. #define CAPRI_PIN_NAND_WEN 132
  225. #define CAPRI_PIN_NAND_WP 133
  226. #define CAPRI_PIN_PC1 134
  227. #define CAPRI_PIN_PC2 135
  228. #define CAPRI_PIN_PMU_INT 136
  229. #define CAPRI_PIN_PMU_SCL 137
  230. #define CAPRI_PIN_PMU_SDA 138
  231. #define CAPRI_PIN_RFST2G_MTSLOTEN3G 139
  232. #define CAPRI_PIN_RGMII_0_RX_CTL 140
  233. #define CAPRI_PIN_RGMII_0_RXC 141
  234. #define CAPRI_PIN_RGMII_0_RXD_0 142
  235. #define CAPRI_PIN_RGMII_0_RXD_1 143
  236. #define CAPRI_PIN_RGMII_0_RXD_2 144
  237. #define CAPRI_PIN_RGMII_0_RXD_3 145
  238. #define CAPRI_PIN_RGMII_0_TX_CTL 146
  239. #define CAPRI_PIN_RGMII_0_TXC 147
  240. #define CAPRI_PIN_RGMII_0_TXD_0 148
  241. #define CAPRI_PIN_RGMII_0_TXD_1 149
  242. #define CAPRI_PIN_RGMII_0_TXD_2 150
  243. #define CAPRI_PIN_RGMII_0_TXD_3 151
  244. #define CAPRI_PIN_RGMII_1_RX_CTL 152
  245. #define CAPRI_PIN_RGMII_1_RXC 153
  246. #define CAPRI_PIN_RGMII_1_RXD_0 154
  247. #define CAPRI_PIN_RGMII_1_RXD_1 155
  248. #define CAPRI_PIN_RGMII_1_RXD_2 156
  249. #define CAPRI_PIN_RGMII_1_RXD_3 157
  250. #define CAPRI_PIN_RGMII_1_TX_CTL 158
  251. #define CAPRI_PIN_RGMII_1_TXC 159
  252. #define CAPRI_PIN_RGMII_1_TXD_0 160
  253. #define CAPRI_PIN_RGMII_1_TXD_1 161
  254. #define CAPRI_PIN_RGMII_1_TXD_2 162
  255. #define CAPRI_PIN_RGMII_1_TXD_3 163
  256. #define CAPRI_PIN_RGMII_GPIO_0 164
  257. #define CAPRI_PIN_RGMII_GPIO_1 165
  258. #define CAPRI_PIN_RGMII_GPIO_2 166
  259. #define CAPRI_PIN_RGMII_GPIO_3 167
  260. #define CAPRI_PIN_RTXDATA2G_TXDATA3G1 168
  261. #define CAPRI_PIN_RTXEN2G_TXDATA3G2 169
  262. #define CAPRI_PIN_RXDATA3G0 170
  263. #define CAPRI_PIN_RXDATA3G1 171
  264. #define CAPRI_PIN_RXDATA3G2 172
  265. #define CAPRI_PIN_SDIO1_CLK 173
  266. #define CAPRI_PIN_SDIO1_CMD 174
  267. #define CAPRI_PIN_SDIO1_DATA_0 175
  268. #define CAPRI_PIN_SDIO1_DATA_1 176
  269. #define CAPRI_PIN_SDIO1_DATA_2 177
  270. #define CAPRI_PIN_SDIO1_DATA_3 178
  271. #define CAPRI_PIN_SDIO4_CLK 179
  272. #define CAPRI_PIN_SDIO4_CMD 180
  273. #define CAPRI_PIN_SDIO4_DATA_0 181
  274. #define CAPRI_PIN_SDIO4_DATA_1 182
  275. #define CAPRI_PIN_SDIO4_DATA_2 183
  276. #define CAPRI_PIN_SDIO4_DATA_3 184
  277. #define CAPRI_PIN_SIM_CLK 185
  278. #define CAPRI_PIN_SIM_DATA 186
  279. #define CAPRI_PIN_SIM_DET 187
  280. #define CAPRI_PIN_SIM_RESETN 188
  281. #define CAPRI_PIN_SIM2_CLK 189
  282. #define CAPRI_PIN_SIM2_DATA 190
  283. #define CAPRI_PIN_SIM2_DET 191
  284. #define CAPRI_PIN_SIM2_RESETN 192
  285. #define CAPRI_PIN_SRI_C 193
  286. #define CAPRI_PIN_SRI_D 194
  287. #define CAPRI_PIN_SRI_E 195
  288. #define CAPRI_PIN_SSP_EXTCLK 196
  289. #define CAPRI_PIN_SSP0_CLK 197
  290. #define CAPRI_PIN_SSP0_FS 198
  291. #define CAPRI_PIN_SSP0_RXD 199
  292. #define CAPRI_PIN_SSP0_TXD 200
  293. #define CAPRI_PIN_SSP2_CLK 201
  294. #define CAPRI_PIN_SSP2_FS_0 202
  295. #define CAPRI_PIN_SSP2_FS_1 203
  296. #define CAPRI_PIN_SSP2_FS_2 204
  297. #define CAPRI_PIN_SSP2_FS_3 205
  298. #define CAPRI_PIN_SSP2_RXD_0 206
  299. #define CAPRI_PIN_SSP2_RXD_1 207
  300. #define CAPRI_PIN_SSP2_TXD_0 208
  301. #define CAPRI_PIN_SSP2_TXD_1 209
  302. #define CAPRI_PIN_SSP3_CLK 210
  303. #define CAPRI_PIN_SSP3_FS 211
  304. #define CAPRI_PIN_SSP3_RXD 212
  305. #define CAPRI_PIN_SSP3_TXD 213
  306. #define CAPRI_PIN_SSP4_CLK 214
  307. #define CAPRI_PIN_SSP4_FS 215
  308. #define CAPRI_PIN_SSP4_RXD 216
  309. #define CAPRI_PIN_SSP4_TXD 217
  310. #define CAPRI_PIN_SSP5_CLK 218
  311. #define CAPRI_PIN_SSP5_FS 219
  312. #define CAPRI_PIN_SSP5_RXD 220
  313. #define CAPRI_PIN_SSP5_TXD 221
  314. #define CAPRI_PIN_SSP6_CLK 222
  315. #define CAPRI_PIN_SSP6_FS 223
  316. #define CAPRI_PIN_SSP6_RXD 224
  317. #define CAPRI_PIN_SSP6_TXD 225
  318. #define CAPRI_PIN_STAT_1 226
  319. #define CAPRI_PIN_STAT_2 227
  320. #define CAPRI_PIN_SYSCLKEN 228
  321. #define CAPRI_PIN_TRACECLK 229
  322. #define CAPRI_PIN_TRACEDT00 230
  323. #define CAPRI_PIN_TRACEDT01 231
  324. #define CAPRI_PIN_TRACEDT02 232
  325. #define CAPRI_PIN_TRACEDT03 233
  326. #define CAPRI_PIN_TRACEDT04 234
  327. #define CAPRI_PIN_TRACEDT05 235
  328. #define CAPRI_PIN_TRACEDT06 236
  329. #define CAPRI_PIN_TRACEDT07 237
  330. #define CAPRI_PIN_TRACEDT08 238
  331. #define CAPRI_PIN_TRACEDT09 239
  332. #define CAPRI_PIN_TRACEDT10 240
  333. #define CAPRI_PIN_TRACEDT11 241
  334. #define CAPRI_PIN_TRACEDT12 242
  335. #define CAPRI_PIN_TRACEDT13 243
  336. #define CAPRI_PIN_TRACEDT14 244
  337. #define CAPRI_PIN_TRACEDT15 245
  338. #define CAPRI_PIN_TXDATA3G0 246
  339. #define CAPRI_PIN_TXPWRIND 247
  340. #define CAPRI_PIN_UARTB1_UCTS 248
  341. #define CAPRI_PIN_UARTB1_URTS 249
  342. #define CAPRI_PIN_UARTB1_URXD 250
  343. #define CAPRI_PIN_UARTB1_UTXD 251
  344. #define CAPRI_PIN_UARTB2_URXD 252
  345. #define CAPRI_PIN_UARTB2_UTXD 253
  346. #define CAPRI_PIN_UARTB3_UCTS 254
  347. #define CAPRI_PIN_UARTB3_URTS 255
  348. #define CAPRI_PIN_UARTB3_URXD 256
  349. #define CAPRI_PIN_UARTB3_UTXD 257
  350. #define CAPRI_PIN_UARTB4_UCTS 258
  351. #define CAPRI_PIN_UARTB4_URTS 259
  352. #define CAPRI_PIN_UARTB4_URXD 260
  353. #define CAPRI_PIN_UARTB4_UTXD 261
  354. #define CAPRI_PIN_VC_CAM1_SCL 262
  355. #define CAPRI_PIN_VC_CAM1_SDA 263
  356. #define CAPRI_PIN_VC_CAM2_SCL 264
  357. #define CAPRI_PIN_VC_CAM2_SDA 265
  358. #define CAPRI_PIN_VC_CAM3_SCL 266
  359. #define CAPRI_PIN_VC_CAM3_SDA 267
  360. #define CAPRI_PIN_DESC(a, b, c) \
  361. { .number = a, .name = b, .drv_data = &c##_pin }
  362. /*
  363. * Pin description definition. The order here must be the same as defined in
  364. * the PADCTRLREG block in the RDB, since the pin number is used as an index
  365. * into this array.
  366. */
  367. static const struct pinctrl_pin_desc capri_pinctrl_pins[] = {
  368. CAPRI_PIN_DESC(CAPRI_PIN_ADCSYNC, "adcsync", std),
  369. CAPRI_PIN_DESC(CAPRI_PIN_BAT_RM, "bat_rm", std),
  370. CAPRI_PIN_DESC(CAPRI_PIN_BSC1_SCL, "bsc1_scl", i2c),
  371. CAPRI_PIN_DESC(CAPRI_PIN_BSC1_SDA, "bsc1_sda", i2c),
  372. CAPRI_PIN_DESC(CAPRI_PIN_BSC2_SCL, "bsc2_scl", i2c),
  373. CAPRI_PIN_DESC(CAPRI_PIN_BSC2_SDA, "bsc2_sda", i2c),
  374. CAPRI_PIN_DESC(CAPRI_PIN_CLASSGPWR, "classgpwr", std),
  375. CAPRI_PIN_DESC(CAPRI_PIN_CLK_CX8, "clk_cx8", std),
  376. CAPRI_PIN_DESC(CAPRI_PIN_CLKOUT_0, "clkout_0", std),
  377. CAPRI_PIN_DESC(CAPRI_PIN_CLKOUT_1, "clkout_1", std),
  378. CAPRI_PIN_DESC(CAPRI_PIN_CLKOUT_2, "clkout_2", std),
  379. CAPRI_PIN_DESC(CAPRI_PIN_CLKOUT_3, "clkout_3", std),
  380. CAPRI_PIN_DESC(CAPRI_PIN_CLKREQ_IN_0, "clkreq_in_0", std),
  381. CAPRI_PIN_DESC(CAPRI_PIN_CLKREQ_IN_1, "clkreq_in_1", std),
  382. CAPRI_PIN_DESC(CAPRI_PIN_CWS_SYS_REQ1, "cws_sys_req1", std),
  383. CAPRI_PIN_DESC(CAPRI_PIN_CWS_SYS_REQ2, "cws_sys_req2", std),
  384. CAPRI_PIN_DESC(CAPRI_PIN_CWS_SYS_REQ3, "cws_sys_req3", std),
  385. CAPRI_PIN_DESC(CAPRI_PIN_DIGMIC1_CLK, "digmic1_clk", std),
  386. CAPRI_PIN_DESC(CAPRI_PIN_DIGMIC1_DQ, "digmic1_dq", std),
  387. CAPRI_PIN_DESC(CAPRI_PIN_DIGMIC2_CLK, "digmic2_clk", std),
  388. CAPRI_PIN_DESC(CAPRI_PIN_DIGMIC2_DQ, "digmic2_dq", std),
  389. CAPRI_PIN_DESC(CAPRI_PIN_GPEN13, "gpen13", std),
  390. CAPRI_PIN_DESC(CAPRI_PIN_GPEN14, "gpen14", std),
  391. CAPRI_PIN_DESC(CAPRI_PIN_GPEN15, "gpen15", std),
  392. CAPRI_PIN_DESC(CAPRI_PIN_GPIO00, "gpio00", std),
  393. CAPRI_PIN_DESC(CAPRI_PIN_GPIO01, "gpio01", std),
  394. CAPRI_PIN_DESC(CAPRI_PIN_GPIO02, "gpio02", std),
  395. CAPRI_PIN_DESC(CAPRI_PIN_GPIO03, "gpio03", std),
  396. CAPRI_PIN_DESC(CAPRI_PIN_GPIO04, "gpio04", std),
  397. CAPRI_PIN_DESC(CAPRI_PIN_GPIO05, "gpio05", std),
  398. CAPRI_PIN_DESC(CAPRI_PIN_GPIO06, "gpio06", std),
  399. CAPRI_PIN_DESC(CAPRI_PIN_GPIO07, "gpio07", std),
  400. CAPRI_PIN_DESC(CAPRI_PIN_GPIO08, "gpio08", std),
  401. CAPRI_PIN_DESC(CAPRI_PIN_GPIO09, "gpio09", std),
  402. CAPRI_PIN_DESC(CAPRI_PIN_GPIO10, "gpio10", std),
  403. CAPRI_PIN_DESC(CAPRI_PIN_GPIO11, "gpio11", std),
  404. CAPRI_PIN_DESC(CAPRI_PIN_GPIO12, "gpio12", std),
  405. CAPRI_PIN_DESC(CAPRI_PIN_GPIO13, "gpio13", std),
  406. CAPRI_PIN_DESC(CAPRI_PIN_GPIO14, "gpio14", std),
  407. CAPRI_PIN_DESC(CAPRI_PIN_GPS_PABLANK, "gps_pablank", std),
  408. CAPRI_PIN_DESC(CAPRI_PIN_GPS_TMARK, "gps_tmark", std),
  409. CAPRI_PIN_DESC(CAPRI_PIN_HDMI_SCL, "hdmi_scl", hdmi),
  410. CAPRI_PIN_DESC(CAPRI_PIN_HDMI_SDA, "hdmi_sda", hdmi),
  411. CAPRI_PIN_DESC(CAPRI_PIN_IC_DM, "ic_dm", std),
  412. CAPRI_PIN_DESC(CAPRI_PIN_IC_DP, "ic_dp", std),
  413. CAPRI_PIN_DESC(CAPRI_PIN_KP_COL_IP_0, "kp_col_ip_0", std),
  414. CAPRI_PIN_DESC(CAPRI_PIN_KP_COL_IP_1, "kp_col_ip_1", std),
  415. CAPRI_PIN_DESC(CAPRI_PIN_KP_COL_IP_2, "kp_col_ip_2", std),
  416. CAPRI_PIN_DESC(CAPRI_PIN_KP_COL_IP_3, "kp_col_ip_3", std),
  417. CAPRI_PIN_DESC(CAPRI_PIN_KP_ROW_OP_0, "kp_row_op_0", std),
  418. CAPRI_PIN_DESC(CAPRI_PIN_KP_ROW_OP_1, "kp_row_op_1", std),
  419. CAPRI_PIN_DESC(CAPRI_PIN_KP_ROW_OP_2, "kp_row_op_2", std),
  420. CAPRI_PIN_DESC(CAPRI_PIN_KP_ROW_OP_3, "kp_row_op_3", std),
  421. CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_0, "lcd_b_0", std),
  422. CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_1, "lcd_b_1", std),
  423. CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_2, "lcd_b_2", std),
  424. CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_3, "lcd_b_3", std),
  425. CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_4, "lcd_b_4", std),
  426. CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_5, "lcd_b_5", std),
  427. CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_6, "lcd_b_6", std),
  428. CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_7, "lcd_b_7", std),
  429. CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_0, "lcd_g_0", std),
  430. CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_1, "lcd_g_1", std),
  431. CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_2, "lcd_g_2", std),
  432. CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_3, "lcd_g_3", std),
  433. CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_4, "lcd_g_4", std),
  434. CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_5, "lcd_g_5", std),
  435. CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_6, "lcd_g_6", std),
  436. CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_7, "lcd_g_7", std),
  437. CAPRI_PIN_DESC(CAPRI_PIN_LCD_HSYNC, "lcd_hsync", std),
  438. CAPRI_PIN_DESC(CAPRI_PIN_LCD_OE, "lcd_oe", std),
  439. CAPRI_PIN_DESC(CAPRI_PIN_LCD_PCLK, "lcd_pclk", std),
  440. CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_0, "lcd_r_0", std),
  441. CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_1, "lcd_r_1", std),
  442. CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_2, "lcd_r_2", std),
  443. CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_3, "lcd_r_3", std),
  444. CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_4, "lcd_r_4", std),
  445. CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_5, "lcd_r_5", std),
  446. CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_6, "lcd_r_6", std),
  447. CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_7, "lcd_r_7", std),
  448. CAPRI_PIN_DESC(CAPRI_PIN_LCD_VSYNC, "lcd_vsync", std),
  449. CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO0, "mdmgpio0", std),
  450. CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO1, "mdmgpio1", std),
  451. CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO2, "mdmgpio2", std),
  452. CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO3, "mdmgpio3", std),
  453. CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO4, "mdmgpio4", std),
  454. CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO5, "mdmgpio5", std),
  455. CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO6, "mdmgpio6", std),
  456. CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO7, "mdmgpio7", std),
  457. CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO8, "mdmgpio8", std),
  458. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_0, "mphi_data_0", std),
  459. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_1, "mphi_data_1", std),
  460. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_2, "mphi_data_2", std),
  461. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_3, "mphi_data_3", std),
  462. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_4, "mphi_data_4", std),
  463. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_5, "mphi_data_5", std),
  464. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_6, "mphi_data_6", std),
  465. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_7, "mphi_data_7", std),
  466. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_8, "mphi_data_8", std),
  467. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_9, "mphi_data_9", std),
  468. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_10, "mphi_data_10", std),
  469. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_11, "mphi_data_11", std),
  470. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_12, "mphi_data_12", std),
  471. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_13, "mphi_data_13", std),
  472. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_14, "mphi_data_14", std),
  473. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_15, "mphi_data_15", std),
  474. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HA0, "mphi_ha0", std),
  475. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HAT0, "mphi_hat0", std),
  476. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HAT1, "mphi_hat1", std),
  477. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HCE0_N, "mphi_hce0_n", std),
  478. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HCE1_N, "mphi_hce1_n", std),
  479. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HRD_N, "mphi_hrd_n", std),
  480. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HWR_N, "mphi_hwr_n", std),
  481. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_RUN0, "mphi_run0", std),
  482. CAPRI_PIN_DESC(CAPRI_PIN_MPHI_RUN1, "mphi_run1", std),
  483. CAPRI_PIN_DESC(CAPRI_PIN_MTX_SCAN_CLK, "mtx_scan_clk", std),
  484. CAPRI_PIN_DESC(CAPRI_PIN_MTX_SCAN_DATA, "mtx_scan_data", std),
  485. CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_0, "nand_ad_0", std),
  486. CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_1, "nand_ad_1", std),
  487. CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_2, "nand_ad_2", std),
  488. CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_3, "nand_ad_3", std),
  489. CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_4, "nand_ad_4", std),
  490. CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_5, "nand_ad_5", std),
  491. CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_6, "nand_ad_6", std),
  492. CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_7, "nand_ad_7", std),
  493. CAPRI_PIN_DESC(CAPRI_PIN_NAND_ALE, "nand_ale", std),
  494. CAPRI_PIN_DESC(CAPRI_PIN_NAND_CEN_0, "nand_cen_0", std),
  495. CAPRI_PIN_DESC(CAPRI_PIN_NAND_CEN_1, "nand_cen_1", std),
  496. CAPRI_PIN_DESC(CAPRI_PIN_NAND_CLE, "nand_cle", std),
  497. CAPRI_PIN_DESC(CAPRI_PIN_NAND_OEN, "nand_oen", std),
  498. CAPRI_PIN_DESC(CAPRI_PIN_NAND_RDY_0, "nand_rdy_0", std),
  499. CAPRI_PIN_DESC(CAPRI_PIN_NAND_RDY_1, "nand_rdy_1", std),
  500. CAPRI_PIN_DESC(CAPRI_PIN_NAND_WEN, "nand_wen", std),
  501. CAPRI_PIN_DESC(CAPRI_PIN_NAND_WP, "nand_wp", std),
  502. CAPRI_PIN_DESC(CAPRI_PIN_PC1, "pc1", std),
  503. CAPRI_PIN_DESC(CAPRI_PIN_PC2, "pc2", std),
  504. CAPRI_PIN_DESC(CAPRI_PIN_PMU_INT, "pmu_int", std),
  505. CAPRI_PIN_DESC(CAPRI_PIN_PMU_SCL, "pmu_scl", i2c),
  506. CAPRI_PIN_DESC(CAPRI_PIN_PMU_SDA, "pmu_sda", i2c),
  507. CAPRI_PIN_DESC(CAPRI_PIN_RFST2G_MTSLOTEN3G, "rfst2g_mtsloten3g", std),
  508. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_RX_CTL, "rgmii_0_rx_ctl", std),
  509. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_RXC, "rgmii_0_rxc", std),
  510. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_RXD_0, "rgmii_0_rxd_0", std),
  511. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_RXD_1, "rgmii_0_rxd_1", std),
  512. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_RXD_2, "rgmii_0_rxd_2", std),
  513. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_RXD_3, "rgmii_0_rxd_3", std),
  514. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_TX_CTL, "rgmii_0_tx_ctl", std),
  515. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_TXC, "rgmii_0_txc", std),
  516. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_TXD_0, "rgmii_0_txd_0", std),
  517. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_TXD_1, "rgmii_0_txd_1", std),
  518. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_TXD_2, "rgmii_0_txd_2", std),
  519. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_TXD_3, "rgmii_0_txd_3", std),
  520. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_RX_CTL, "rgmii_1_rx_ctl", std),
  521. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_RXC, "rgmii_1_rxc", std),
  522. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_RXD_0, "rgmii_1_rxd_0", std),
  523. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_RXD_1, "rgmii_1_rxd_1", std),
  524. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_RXD_2, "rgmii_1_rxd_2", std),
  525. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_RXD_3, "rgmii_1_rxd_3", std),
  526. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_TX_CTL, "rgmii_1_tx_ctl", std),
  527. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_TXC, "rgmii_1_txc", std),
  528. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_TXD_0, "rgmii_1_txd_0", std),
  529. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_TXD_1, "rgmii_1_txd_1", std),
  530. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_TXD_2, "rgmii_1_txd_2", std),
  531. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_TXD_3, "rgmii_1_txd_3", std),
  532. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_GPIO_0, "rgmii_gpio_0", std),
  533. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_GPIO_1, "rgmii_gpio_1", std),
  534. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_GPIO_2, "rgmii_gpio_2", std),
  535. CAPRI_PIN_DESC(CAPRI_PIN_RGMII_GPIO_3, "rgmii_gpio_3", std),
  536. CAPRI_PIN_DESC(CAPRI_PIN_RTXDATA2G_TXDATA3G1, "rtxdata2g_txdata3g1",
  537. std),
  538. CAPRI_PIN_DESC(CAPRI_PIN_RTXEN2G_TXDATA3G2, "rtxen2g_txdata3g2", std),
  539. CAPRI_PIN_DESC(CAPRI_PIN_RXDATA3G0, "rxdata3g0", std),
  540. CAPRI_PIN_DESC(CAPRI_PIN_RXDATA3G1, "rxdata3g1", std),
  541. CAPRI_PIN_DESC(CAPRI_PIN_RXDATA3G2, "rxdata3g2", std),
  542. CAPRI_PIN_DESC(CAPRI_PIN_SDIO1_CLK, "sdio1_clk", std),
  543. CAPRI_PIN_DESC(CAPRI_PIN_SDIO1_CMD, "sdio1_cmd", std),
  544. CAPRI_PIN_DESC(CAPRI_PIN_SDIO1_DATA_0, "sdio1_data_0", std),
  545. CAPRI_PIN_DESC(CAPRI_PIN_SDIO1_DATA_1, "sdio1_data_1", std),
  546. CAPRI_PIN_DESC(CAPRI_PIN_SDIO1_DATA_2, "sdio1_data_2", std),
  547. CAPRI_PIN_DESC(CAPRI_PIN_SDIO1_DATA_3, "sdio1_data_3", std),
  548. CAPRI_PIN_DESC(CAPRI_PIN_SDIO4_CLK, "sdio4_clk", std),
  549. CAPRI_PIN_DESC(CAPRI_PIN_SDIO4_CMD, "sdio4_cmd", std),
  550. CAPRI_PIN_DESC(CAPRI_PIN_SDIO4_DATA_0, "sdio4_data_0", std),
  551. CAPRI_PIN_DESC(CAPRI_PIN_SDIO4_DATA_1, "sdio4_data_1", std),
  552. CAPRI_PIN_DESC(CAPRI_PIN_SDIO4_DATA_2, "sdio4_data_2", std),
  553. CAPRI_PIN_DESC(CAPRI_PIN_SDIO4_DATA_3, "sdio4_data_3", std),
  554. CAPRI_PIN_DESC(CAPRI_PIN_SIM_CLK, "sim_clk", std),
  555. CAPRI_PIN_DESC(CAPRI_PIN_SIM_DATA, "sim_data", std),
  556. CAPRI_PIN_DESC(CAPRI_PIN_SIM_DET, "sim_det", std),
  557. CAPRI_PIN_DESC(CAPRI_PIN_SIM_RESETN, "sim_resetn", std),
  558. CAPRI_PIN_DESC(CAPRI_PIN_SIM2_CLK, "sim2_clk", std),
  559. CAPRI_PIN_DESC(CAPRI_PIN_SIM2_DATA, "sim2_data", std),
  560. CAPRI_PIN_DESC(CAPRI_PIN_SIM2_DET, "sim2_det", std),
  561. CAPRI_PIN_DESC(CAPRI_PIN_SIM2_RESETN, "sim2_resetn", std),
  562. CAPRI_PIN_DESC(CAPRI_PIN_SRI_C, "sri_c", std),
  563. CAPRI_PIN_DESC(CAPRI_PIN_SRI_D, "sri_d", std),
  564. CAPRI_PIN_DESC(CAPRI_PIN_SRI_E, "sri_e", std),
  565. CAPRI_PIN_DESC(CAPRI_PIN_SSP_EXTCLK, "ssp_extclk", std),
  566. CAPRI_PIN_DESC(CAPRI_PIN_SSP0_CLK, "ssp0_clk", std),
  567. CAPRI_PIN_DESC(CAPRI_PIN_SSP0_FS, "ssp0_fs", std),
  568. CAPRI_PIN_DESC(CAPRI_PIN_SSP0_RXD, "ssp0_rxd", std),
  569. CAPRI_PIN_DESC(CAPRI_PIN_SSP0_TXD, "ssp0_txd", std),
  570. CAPRI_PIN_DESC(CAPRI_PIN_SSP2_CLK, "ssp2_clk", std),
  571. CAPRI_PIN_DESC(CAPRI_PIN_SSP2_FS_0, "ssp2_fs_0", std),
  572. CAPRI_PIN_DESC(CAPRI_PIN_SSP2_FS_1, "ssp2_fs_1", std),
  573. CAPRI_PIN_DESC(CAPRI_PIN_SSP2_FS_2, "ssp2_fs_2", std),
  574. CAPRI_PIN_DESC(CAPRI_PIN_SSP2_FS_3, "ssp2_fs_3", std),
  575. CAPRI_PIN_DESC(CAPRI_PIN_SSP2_RXD_0, "ssp2_rxd_0", std),
  576. CAPRI_PIN_DESC(CAPRI_PIN_SSP2_RXD_1, "ssp2_rxd_1", std),
  577. CAPRI_PIN_DESC(CAPRI_PIN_SSP2_TXD_0, "ssp2_txd_0", std),
  578. CAPRI_PIN_DESC(CAPRI_PIN_SSP2_TXD_1, "ssp2_txd_1", std),
  579. CAPRI_PIN_DESC(CAPRI_PIN_SSP3_CLK, "ssp3_clk", std),
  580. CAPRI_PIN_DESC(CAPRI_PIN_SSP3_FS, "ssp3_fs", std),
  581. CAPRI_PIN_DESC(CAPRI_PIN_SSP3_RXD, "ssp3_rxd", std),
  582. CAPRI_PIN_DESC(CAPRI_PIN_SSP3_TXD, "ssp3_txd", std),
  583. CAPRI_PIN_DESC(CAPRI_PIN_SSP4_CLK, "ssp4_clk", std),
  584. CAPRI_PIN_DESC(CAPRI_PIN_SSP4_FS, "ssp4_fs", std),
  585. CAPRI_PIN_DESC(CAPRI_PIN_SSP4_RXD, "ssp4_rxd", std),
  586. CAPRI_PIN_DESC(CAPRI_PIN_SSP4_TXD, "ssp4_txd", std),
  587. CAPRI_PIN_DESC(CAPRI_PIN_SSP5_CLK, "ssp5_clk", std),
  588. CAPRI_PIN_DESC(CAPRI_PIN_SSP5_FS, "ssp5_fs", std),
  589. CAPRI_PIN_DESC(CAPRI_PIN_SSP5_RXD, "ssp5_rxd", std),
  590. CAPRI_PIN_DESC(CAPRI_PIN_SSP5_TXD, "ssp5_txd", std),
  591. CAPRI_PIN_DESC(CAPRI_PIN_SSP6_CLK, "ssp6_clk", std),
  592. CAPRI_PIN_DESC(CAPRI_PIN_SSP6_FS, "ssp6_fs", std),
  593. CAPRI_PIN_DESC(CAPRI_PIN_SSP6_RXD, "ssp6_rxd", std),
  594. CAPRI_PIN_DESC(CAPRI_PIN_SSP6_TXD, "ssp6_txd", std),
  595. CAPRI_PIN_DESC(CAPRI_PIN_STAT_1, "stat_1", std),
  596. CAPRI_PIN_DESC(CAPRI_PIN_STAT_2, "stat_2", std),
  597. CAPRI_PIN_DESC(CAPRI_PIN_SYSCLKEN, "sysclken", std),
  598. CAPRI_PIN_DESC(CAPRI_PIN_TRACECLK, "traceclk", std),
  599. CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT00, "tracedt00", std),
  600. CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT01, "tracedt01", std),
  601. CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT02, "tracedt02", std),
  602. CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT03, "tracedt03", std),
  603. CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT04, "tracedt04", std),
  604. CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT05, "tracedt05", std),
  605. CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT06, "tracedt06", std),
  606. CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT07, "tracedt07", std),
  607. CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT08, "tracedt08", std),
  608. CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT09, "tracedt09", std),
  609. CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT10, "tracedt10", std),
  610. CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT11, "tracedt11", std),
  611. CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT12, "tracedt12", std),
  612. CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT13, "tracedt13", std),
  613. CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT14, "tracedt14", std),
  614. CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT15, "tracedt15", std),
  615. CAPRI_PIN_DESC(CAPRI_PIN_TXDATA3G0, "txdata3g0", std),
  616. CAPRI_PIN_DESC(CAPRI_PIN_TXPWRIND, "txpwrind", std),
  617. CAPRI_PIN_DESC(CAPRI_PIN_UARTB1_UCTS, "uartb1_ucts", std),
  618. CAPRI_PIN_DESC(CAPRI_PIN_UARTB1_URTS, "uartb1_urts", std),
  619. CAPRI_PIN_DESC(CAPRI_PIN_UARTB1_URXD, "uartb1_urxd", std),
  620. CAPRI_PIN_DESC(CAPRI_PIN_UARTB1_UTXD, "uartb1_utxd", std),
  621. CAPRI_PIN_DESC(CAPRI_PIN_UARTB2_URXD, "uartb2_urxd", std),
  622. CAPRI_PIN_DESC(CAPRI_PIN_UARTB2_UTXD, "uartb2_utxd", std),
  623. CAPRI_PIN_DESC(CAPRI_PIN_UARTB3_UCTS, "uartb3_ucts", std),
  624. CAPRI_PIN_DESC(CAPRI_PIN_UARTB3_URTS, "uartb3_urts", std),
  625. CAPRI_PIN_DESC(CAPRI_PIN_UARTB3_URXD, "uartb3_urxd", std),
  626. CAPRI_PIN_DESC(CAPRI_PIN_UARTB3_UTXD, "uartb3_utxd", std),
  627. CAPRI_PIN_DESC(CAPRI_PIN_UARTB4_UCTS, "uartb4_ucts", std),
  628. CAPRI_PIN_DESC(CAPRI_PIN_UARTB4_URTS, "uartb4_urts", std),
  629. CAPRI_PIN_DESC(CAPRI_PIN_UARTB4_URXD, "uartb4_urxd", std),
  630. CAPRI_PIN_DESC(CAPRI_PIN_UARTB4_UTXD, "uartb4_utxd", std),
  631. CAPRI_PIN_DESC(CAPRI_PIN_VC_CAM1_SCL, "vc_cam1_scl", i2c),
  632. CAPRI_PIN_DESC(CAPRI_PIN_VC_CAM1_SDA, "vc_cam1_sda", i2c),
  633. CAPRI_PIN_DESC(CAPRI_PIN_VC_CAM2_SCL, "vc_cam2_scl", i2c),
  634. CAPRI_PIN_DESC(CAPRI_PIN_VC_CAM2_SDA, "vc_cam2_sda", i2c),
  635. CAPRI_PIN_DESC(CAPRI_PIN_VC_CAM3_SCL, "vc_cam3_scl", i2c),
  636. CAPRI_PIN_DESC(CAPRI_PIN_VC_CAM3_SDA, "vc_cam3_sda", i2c),
  637. };
  638. static const char * const capri_alt_groups[] = {
  639. "adcsync",
  640. "bat_rm",
  641. "bsc1_scl",
  642. "bsc1_sda",
  643. "bsc2_scl",
  644. "bsc2_sda",
  645. "classgpwr",
  646. "clk_cx8",
  647. "clkout_0",
  648. "clkout_1",
  649. "clkout_2",
  650. "clkout_3",
  651. "clkreq_in_0",
  652. "clkreq_in_1",
  653. "cws_sys_req1",
  654. "cws_sys_req2",
  655. "cws_sys_req3",
  656. "digmic1_clk",
  657. "digmic1_dq",
  658. "digmic2_clk",
  659. "digmic2_dq",
  660. "gpen13",
  661. "gpen14",
  662. "gpen15",
  663. "gpio00",
  664. "gpio01",
  665. "gpio02",
  666. "gpio03",
  667. "gpio04",
  668. "gpio05",
  669. "gpio06",
  670. "gpio07",
  671. "gpio08",
  672. "gpio09",
  673. "gpio10",
  674. "gpio11",
  675. "gpio12",
  676. "gpio13",
  677. "gpio14",
  678. "gps_pablank",
  679. "gps_tmark",
  680. "hdmi_scl",
  681. "hdmi_sda",
  682. "ic_dm",
  683. "ic_dp",
  684. "kp_col_ip_0",
  685. "kp_col_ip_1",
  686. "kp_col_ip_2",
  687. "kp_col_ip_3",
  688. "kp_row_op_0",
  689. "kp_row_op_1",
  690. "kp_row_op_2",
  691. "kp_row_op_3",
  692. "lcd_b_0",
  693. "lcd_b_1",
  694. "lcd_b_2",
  695. "lcd_b_3",
  696. "lcd_b_4",
  697. "lcd_b_5",
  698. "lcd_b_6",
  699. "lcd_b_7",
  700. "lcd_g_0",
  701. "lcd_g_1",
  702. "lcd_g_2",
  703. "lcd_g_3",
  704. "lcd_g_4",
  705. "lcd_g_5",
  706. "lcd_g_6",
  707. "lcd_g_7",
  708. "lcd_hsync",
  709. "lcd_oe",
  710. "lcd_pclk",
  711. "lcd_r_0",
  712. "lcd_r_1",
  713. "lcd_r_2",
  714. "lcd_r_3",
  715. "lcd_r_4",
  716. "lcd_r_5",
  717. "lcd_r_6",
  718. "lcd_r_7",
  719. "lcd_vsync",
  720. "mdmgpio0",
  721. "mdmgpio1",
  722. "mdmgpio2",
  723. "mdmgpio3",
  724. "mdmgpio4",
  725. "mdmgpio5",
  726. "mdmgpio6",
  727. "mdmgpio7",
  728. "mdmgpio8",
  729. "mphi_data_0",
  730. "mphi_data_1",
  731. "mphi_data_2",
  732. "mphi_data_3",
  733. "mphi_data_4",
  734. "mphi_data_5",
  735. "mphi_data_6",
  736. "mphi_data_7",
  737. "mphi_data_8",
  738. "mphi_data_9",
  739. "mphi_data_10",
  740. "mphi_data_11",
  741. "mphi_data_12",
  742. "mphi_data_13",
  743. "mphi_data_14",
  744. "mphi_data_15",
  745. "mphi_ha0",
  746. "mphi_hat0",
  747. "mphi_hat1",
  748. "mphi_hce0_n",
  749. "mphi_hce1_n",
  750. "mphi_hrd_n",
  751. "mphi_hwr_n",
  752. "mphi_run0",
  753. "mphi_run1",
  754. "mtx_scan_clk",
  755. "mtx_scan_data",
  756. "nand_ad_0",
  757. "nand_ad_1",
  758. "nand_ad_2",
  759. "nand_ad_3",
  760. "nand_ad_4",
  761. "nand_ad_5",
  762. "nand_ad_6",
  763. "nand_ad_7",
  764. "nand_ale",
  765. "nand_cen_0",
  766. "nand_cen_1",
  767. "nand_cle",
  768. "nand_oen",
  769. "nand_rdy_0",
  770. "nand_rdy_1",
  771. "nand_wen",
  772. "nand_wp",
  773. "pc1",
  774. "pc2",
  775. "pmu_int",
  776. "pmu_scl",
  777. "pmu_sda",
  778. "rfst2g_mtsloten3g",
  779. "rgmii_0_rx_ctl",
  780. "rgmii_0_rxc",
  781. "rgmii_0_rxd_0",
  782. "rgmii_0_rxd_1",
  783. "rgmii_0_rxd_2",
  784. "rgmii_0_rxd_3",
  785. "rgmii_0_tx_ctl",
  786. "rgmii_0_txc",
  787. "rgmii_0_txd_0",
  788. "rgmii_0_txd_1",
  789. "rgmii_0_txd_2",
  790. "rgmii_0_txd_3",
  791. "rgmii_1_rx_ctl",
  792. "rgmii_1_rxc",
  793. "rgmii_1_rxd_0",
  794. "rgmii_1_rxd_1",
  795. "rgmii_1_rxd_2",
  796. "rgmii_1_rxd_3",
  797. "rgmii_1_tx_ctl",
  798. "rgmii_1_txc",
  799. "rgmii_1_txd_0",
  800. "rgmii_1_txd_1",
  801. "rgmii_1_txd_2",
  802. "rgmii_1_txd_3",
  803. "rgmii_gpio_0",
  804. "rgmii_gpio_1",
  805. "rgmii_gpio_2",
  806. "rgmii_gpio_3",
  807. "rtxdata2g_txdata3g1",
  808. "rtxen2g_txdata3g2",
  809. "rxdata3g0",
  810. "rxdata3g1",
  811. "rxdata3g2",
  812. "sdio1_clk",
  813. "sdio1_cmd",
  814. "sdio1_data_0",
  815. "sdio1_data_1",
  816. "sdio1_data_2",
  817. "sdio1_data_3",
  818. "sdio4_clk",
  819. "sdio4_cmd",
  820. "sdio4_data_0",
  821. "sdio4_data_1",
  822. "sdio4_data_2",
  823. "sdio4_data_3",
  824. "sim_clk",
  825. "sim_data",
  826. "sim_det",
  827. "sim_resetn",
  828. "sim2_clk",
  829. "sim2_data",
  830. "sim2_det",
  831. "sim2_resetn",
  832. "sri_c",
  833. "sri_d",
  834. "sri_e",
  835. "ssp_extclk",
  836. "ssp0_clk",
  837. "ssp0_fs",
  838. "ssp0_rxd",
  839. "ssp0_txd",
  840. "ssp2_clk",
  841. "ssp2_fs_0",
  842. "ssp2_fs_1",
  843. "ssp2_fs_2",
  844. "ssp2_fs_3",
  845. "ssp2_rxd_0",
  846. "ssp2_rxd_1",
  847. "ssp2_txd_0",
  848. "ssp2_txd_1",
  849. "ssp3_clk",
  850. "ssp3_fs",
  851. "ssp3_rxd",
  852. "ssp3_txd",
  853. "ssp4_clk",
  854. "ssp4_fs",
  855. "ssp4_rxd",
  856. "ssp4_txd",
  857. "ssp5_clk",
  858. "ssp5_fs",
  859. "ssp5_rxd",
  860. "ssp5_txd",
  861. "ssp6_clk",
  862. "ssp6_fs",
  863. "ssp6_rxd",
  864. "ssp6_txd",
  865. "stat_1",
  866. "stat_2",
  867. "sysclken",
  868. "traceclk",
  869. "tracedt00",
  870. "tracedt01",
  871. "tracedt02",
  872. "tracedt03",
  873. "tracedt04",
  874. "tracedt05",
  875. "tracedt06",
  876. "tracedt07",
  877. "tracedt08",
  878. "tracedt09",
  879. "tracedt10",
  880. "tracedt11",
  881. "tracedt12",
  882. "tracedt13",
  883. "tracedt14",
  884. "tracedt15",
  885. "txdata3g0",
  886. "txpwrind",
  887. "uartb1_ucts",
  888. "uartb1_urts",
  889. "uartb1_urxd",
  890. "uartb1_utxd",
  891. "uartb2_urxd",
  892. "uartb2_utxd",
  893. "uartb3_ucts",
  894. "uartb3_urts",
  895. "uartb3_urxd",
  896. "uartb3_utxd",
  897. "uartb4_ucts",
  898. "uartb4_urts",
  899. "uartb4_urxd",
  900. "uartb4_utxd",
  901. "vc_cam1_scl",
  902. "vc_cam1_sda",
  903. "vc_cam2_scl",
  904. "vc_cam2_sda",
  905. "vc_cam3_scl",
  906. "vc_cam3_sda",
  907. };
  908. /* Every pin can implement all ALT1-ALT4 functions */
  909. #define CAPRI_PIN_FUNCTION(fcn_name) \
  910. { \
  911. .name = #fcn_name, \
  912. .groups = capri_alt_groups, \
  913. .ngroups = ARRAY_SIZE(capri_alt_groups), \
  914. }
  915. static const struct capri_pin_function capri_functions[] = {
  916. CAPRI_PIN_FUNCTION(alt1),
  917. CAPRI_PIN_FUNCTION(alt2),
  918. CAPRI_PIN_FUNCTION(alt3),
  919. CAPRI_PIN_FUNCTION(alt4),
  920. };
  921. static struct capri_pinctrl_data capri_pinctrl = {
  922. .pins = capri_pinctrl_pins,
  923. .npins = ARRAY_SIZE(capri_pinctrl_pins),
  924. .functions = capri_functions,
  925. .nfunctions = ARRAY_SIZE(capri_functions),
  926. };
  927. static inline enum capri_pin_type pin_type_get(struct pinctrl_dev *pctldev,
  928. unsigned pin)
  929. {
  930. struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
  931. if (pin >= pdata->npins)
  932. return CAPRI_PIN_TYPE_UNKNOWN;
  933. return *(enum capri_pin_type *)(pdata->pins[pin].drv_data);
  934. }
  935. #define CAPRI_PIN_SHIFT(type, param) \
  936. (CAPRI_ ## type ## _PIN_REG_ ## param ## _SHIFT)
  937. #define CAPRI_PIN_MASK(type, param) \
  938. (CAPRI_ ## type ## _PIN_REG_ ## param ## _MASK)
  939. /*
  940. * This helper function is used to build up the value and mask used to write to
  941. * a pin register, but does not actually write to the register.
  942. */
  943. static inline void capri_pin_update(u32 *reg_val, u32 *reg_mask, u32 param_val,
  944. u32 param_shift, u32 param_mask)
  945. {
  946. *reg_val &= ~param_mask;
  947. *reg_val |= (param_val << param_shift) & param_mask;
  948. *reg_mask |= param_mask;
  949. }
  950. static struct regmap_config capri_pinctrl_regmap_config = {
  951. .reg_bits = 32,
  952. .reg_stride = 4,
  953. .val_bits = 32,
  954. .max_register = CAPRI_PIN_VC_CAM3_SDA,
  955. };
  956. static int capri_pinctrl_get_groups_count(struct pinctrl_dev *pctldev)
  957. {
  958. struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
  959. return pdata->npins;
  960. }
  961. static const char *capri_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
  962. unsigned group)
  963. {
  964. struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
  965. return pdata->pins[group].name;
  966. }
  967. static int capri_pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
  968. unsigned group,
  969. const unsigned **pins,
  970. unsigned *num_pins)
  971. {
  972. struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
  973. *pins = &pdata->pins[group].number;
  974. *num_pins = 1;
  975. return 0;
  976. }
  977. static void capri_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev,
  978. struct seq_file *s,
  979. unsigned offset)
  980. {
  981. seq_printf(s, " %s", dev_name(pctldev->dev));
  982. }
  983. static struct pinctrl_ops capri_pinctrl_ops = {
  984. .get_groups_count = capri_pinctrl_get_groups_count,
  985. .get_group_name = capri_pinctrl_get_group_name,
  986. .get_group_pins = capri_pinctrl_get_group_pins,
  987. .pin_dbg_show = capri_pinctrl_pin_dbg_show,
  988. .dt_node_to_map = pinconf_generic_dt_node_to_map_pin,
  989. .dt_free_map = pinctrl_utils_dt_free_map,
  990. };
  991. static int capri_pinctrl_get_fcns_count(struct pinctrl_dev *pctldev)
  992. {
  993. struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
  994. return pdata->nfunctions;
  995. }
  996. static const char *capri_pinctrl_get_fcn_name(struct pinctrl_dev *pctldev,
  997. unsigned function)
  998. {
  999. struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
  1000. return pdata->functions[function].name;
  1001. }
  1002. static int capri_pinctrl_get_fcn_groups(struct pinctrl_dev *pctldev,
  1003. unsigned function,
  1004. const char * const **groups,
  1005. unsigned * const num_groups)
  1006. {
  1007. struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
  1008. *groups = pdata->functions[function].groups;
  1009. *num_groups = pdata->functions[function].ngroups;
  1010. return 0;
  1011. }
  1012. static int capri_pinmux_enable(struct pinctrl_dev *pctldev,
  1013. unsigned function,
  1014. unsigned group)
  1015. {
  1016. struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
  1017. const struct capri_pin_function *f = &pdata->functions[function];
  1018. u32 offset = 4 * pdata->pins[group].number;
  1019. int rc = 0;
  1020. dev_dbg(pctldev->dev,
  1021. "%s(): Enable function %s (%d) of pin %s (%d) @offset 0x%x.\n",
  1022. __func__, f->name, function, pdata->pins[group].name,
  1023. pdata->pins[group].number, offset);
  1024. rc = regmap_update_bits(pdata->regmap, offset, CAPRI_PIN_REG_F_SEL_MASK,
  1025. function << CAPRI_PIN_REG_F_SEL_SHIFT);
  1026. if (rc)
  1027. dev_err(pctldev->dev,
  1028. "Error updating register for pin %s (%d).\n",
  1029. pdata->pins[group].name, pdata->pins[group].number);
  1030. return rc;
  1031. }
  1032. static struct pinmux_ops capri_pinctrl_pinmux_ops = {
  1033. .get_functions_count = capri_pinctrl_get_fcns_count,
  1034. .get_function_name = capri_pinctrl_get_fcn_name,
  1035. .get_function_groups = capri_pinctrl_get_fcn_groups,
  1036. .enable = capri_pinmux_enable,
  1037. };
  1038. static int capri_pinctrl_pin_config_get(struct pinctrl_dev *pctldev,
  1039. unsigned pin,
  1040. unsigned long *config)
  1041. {
  1042. return -ENOTSUPP;
  1043. }
  1044. /* Goes through the configs and update register val/mask */
  1045. static int capri_std_pin_update(struct pinctrl_dev *pctldev,
  1046. unsigned pin,
  1047. unsigned long *configs,
  1048. unsigned num_configs,
  1049. u32 *val,
  1050. u32 *mask)
  1051. {
  1052. struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
  1053. int i;
  1054. enum pin_config_param param;
  1055. u16 arg;
  1056. for (i = 0; i < num_configs; i++) {
  1057. param = pinconf_to_config_param(configs[i]);
  1058. arg = pinconf_to_config_argument(configs[i]);
  1059. switch (param) {
  1060. case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
  1061. arg = (arg >= 1 ? 1 : 0);
  1062. capri_pin_update(val, mask, arg,
  1063. CAPRI_PIN_SHIFT(STD, HYST),
  1064. CAPRI_PIN_MASK(STD, HYST));
  1065. break;
  1066. /*
  1067. * The pin bias can only be one of pull-up, pull-down, or
  1068. * disable. The user does not need to specify a value for the
  1069. * property, and the default value from pinconf-generic is
  1070. * ignored.
  1071. */
  1072. case PIN_CONFIG_BIAS_DISABLE:
  1073. capri_pin_update(val, mask, 0,
  1074. CAPRI_PIN_SHIFT(STD, PULL_UP),
  1075. CAPRI_PIN_MASK(STD, PULL_UP));
  1076. capri_pin_update(val, mask, 0,
  1077. CAPRI_PIN_SHIFT(STD, PULL_DN),
  1078. CAPRI_PIN_MASK(STD, PULL_DN));
  1079. break;
  1080. case PIN_CONFIG_BIAS_PULL_UP:
  1081. capri_pin_update(val, mask, 1,
  1082. CAPRI_PIN_SHIFT(STD, PULL_UP),
  1083. CAPRI_PIN_MASK(STD, PULL_UP));
  1084. capri_pin_update(val, mask, 0,
  1085. CAPRI_PIN_SHIFT(STD, PULL_DN),
  1086. CAPRI_PIN_MASK(STD, PULL_DN));
  1087. break;
  1088. case PIN_CONFIG_BIAS_PULL_DOWN:
  1089. capri_pin_update(val, mask, 0,
  1090. CAPRI_PIN_SHIFT(STD, PULL_UP),
  1091. CAPRI_PIN_MASK(STD, PULL_UP));
  1092. capri_pin_update(val, mask, 1,
  1093. CAPRI_PIN_SHIFT(STD, PULL_DN),
  1094. CAPRI_PIN_MASK(STD, PULL_DN));
  1095. break;
  1096. case PIN_CONFIG_SLEW_RATE:
  1097. arg = (arg >= 1 ? 1 : 0);
  1098. capri_pin_update(val, mask, arg,
  1099. CAPRI_PIN_SHIFT(STD, SLEW),
  1100. CAPRI_PIN_MASK(STD, SLEW));
  1101. break;
  1102. case PIN_CONFIG_INPUT_ENABLE:
  1103. /* inversed since register is for input _disable_ */
  1104. arg = (arg >= 1 ? 0 : 1);
  1105. capri_pin_update(val, mask, arg,
  1106. CAPRI_PIN_SHIFT(STD, INPUT_DIS),
  1107. CAPRI_PIN_MASK(STD, INPUT_DIS));
  1108. break;
  1109. case PIN_CONFIG_DRIVE_STRENGTH:
  1110. /* Valid range is 2-16 mA, even numbers only */
  1111. if ((arg < 2) || (arg > 16) || (arg % 2)) {
  1112. dev_err(pctldev->dev,
  1113. "Invalid Drive Strength value (%d) for "
  1114. "pin %s (%d). Valid values are "
  1115. "(2..16) mA, even numbers only.\n",
  1116. arg, pdata->pins[pin].name, pin);
  1117. return -EINVAL;
  1118. }
  1119. capri_pin_update(val, mask, (arg/2)-1,
  1120. CAPRI_PIN_SHIFT(STD, DRV_STR),
  1121. CAPRI_PIN_MASK(STD, DRV_STR));
  1122. break;
  1123. default:
  1124. dev_err(pctldev->dev,
  1125. "Unrecognized pin config %d for pin %s (%d).\n",
  1126. param, pdata->pins[pin].name, pin);
  1127. return -EINVAL;
  1128. } /* switch config */
  1129. } /* for each config */
  1130. return 0;
  1131. }
  1132. /*
  1133. * The pull-up strength for an I2C pin is represented by bits 4-6 in the
  1134. * register with the following mapping:
  1135. * 0b000: No pull-up
  1136. * 0b001: 1200 Ohm
  1137. * 0b010: 1800 Ohm
  1138. * 0b011: 720 Ohm
  1139. * 0b100: 2700 Ohm
  1140. * 0b101: 831 Ohm
  1141. * 0b110: 1080 Ohm
  1142. * 0b111: 568 Ohm
  1143. * This array maps pull-up strength in Ohms to register values (1+index).
  1144. */
  1145. static const u16 capri_pullup_map[] = {1200, 1800, 720, 2700, 831, 1080, 568};
  1146. /* Goes through the configs and update register val/mask */
  1147. static int capri_i2c_pin_update(struct pinctrl_dev *pctldev,
  1148. unsigned pin,
  1149. unsigned long *configs,
  1150. unsigned num_configs,
  1151. u32 *val,
  1152. u32 *mask)
  1153. {
  1154. struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
  1155. int i, j;
  1156. enum pin_config_param param;
  1157. u16 arg;
  1158. for (i = 0; i < num_configs; i++) {
  1159. param = pinconf_to_config_param(configs[i]);
  1160. arg = pinconf_to_config_argument(configs[i]);
  1161. switch (param) {
  1162. case PIN_CONFIG_BIAS_PULL_UP:
  1163. for (j = 0; j < ARRAY_SIZE(capri_pullup_map); j++)
  1164. if (capri_pullup_map[j] == arg)
  1165. break;
  1166. if (j == ARRAY_SIZE(capri_pullup_map)) {
  1167. dev_err(pctldev->dev,
  1168. "Invalid pull-up value (%d) for pin %s "
  1169. "(%d). Valid values are 568, 720, 831, "
  1170. "1080, 1200, 1800, 2700 Ohms.\n",
  1171. arg, pdata->pins[pin].name, pin);
  1172. return -EINVAL;
  1173. }
  1174. capri_pin_update(val, mask, j+1,
  1175. CAPRI_PIN_SHIFT(I2C, PULL_UP_STR),
  1176. CAPRI_PIN_MASK(I2C, PULL_UP_STR));
  1177. break;
  1178. case PIN_CONFIG_BIAS_DISABLE:
  1179. capri_pin_update(val, mask, 0,
  1180. CAPRI_PIN_SHIFT(I2C, PULL_UP_STR),
  1181. CAPRI_PIN_MASK(I2C, PULL_UP_STR));
  1182. break;
  1183. case PIN_CONFIG_SLEW_RATE:
  1184. arg = (arg >= 1 ? 1 : 0);
  1185. capri_pin_update(val, mask, arg,
  1186. CAPRI_PIN_SHIFT(I2C, SLEW),
  1187. CAPRI_PIN_MASK(I2C, SLEW));
  1188. break;
  1189. case PIN_CONFIG_INPUT_ENABLE:
  1190. /* inversed since register is for input _disable_ */
  1191. arg = (arg >= 1 ? 0 : 1);
  1192. capri_pin_update(val, mask, arg,
  1193. CAPRI_PIN_SHIFT(I2C, INPUT_DIS),
  1194. CAPRI_PIN_MASK(I2C, INPUT_DIS));
  1195. break;
  1196. default:
  1197. dev_err(pctldev->dev,
  1198. "Unrecognized pin config %d for pin %s (%d).\n",
  1199. param, pdata->pins[pin].name, pin);
  1200. return -EINVAL;
  1201. } /* switch config */
  1202. } /* for each config */
  1203. return 0;
  1204. }
  1205. /* Goes through the configs and update register val/mask */
  1206. static int capri_hdmi_pin_update(struct pinctrl_dev *pctldev,
  1207. unsigned pin,
  1208. unsigned long *configs,
  1209. unsigned num_configs,
  1210. u32 *val,
  1211. u32 *mask)
  1212. {
  1213. struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
  1214. int i;
  1215. enum pin_config_param param;
  1216. u16 arg;
  1217. for (i = 0; i < num_configs; i++) {
  1218. param = pinconf_to_config_param(configs[i]);
  1219. arg = pinconf_to_config_argument(configs[i]);
  1220. switch (param) {
  1221. case PIN_CONFIG_SLEW_RATE:
  1222. arg = (arg >= 1 ? 1 : 0);
  1223. capri_pin_update(val, mask, arg,
  1224. CAPRI_PIN_SHIFT(HDMI, MODE),
  1225. CAPRI_PIN_MASK(HDMI, MODE));
  1226. break;
  1227. case PIN_CONFIG_INPUT_ENABLE:
  1228. /* inversed since register is for input _disable_ */
  1229. arg = (arg >= 1 ? 0 : 1);
  1230. capri_pin_update(val, mask, arg,
  1231. CAPRI_PIN_SHIFT(HDMI, INPUT_DIS),
  1232. CAPRI_PIN_MASK(HDMI, INPUT_DIS));
  1233. break;
  1234. default:
  1235. dev_err(pctldev->dev,
  1236. "Unrecognized pin config %d for pin %s (%d).\n",
  1237. param, pdata->pins[pin].name, pin);
  1238. return -EINVAL;
  1239. } /* switch config */
  1240. } /* for each config */
  1241. return 0;
  1242. }
  1243. static int capri_pinctrl_pin_config_set(struct pinctrl_dev *pctldev,
  1244. unsigned pin,
  1245. unsigned long *configs,
  1246. unsigned num_configs)
  1247. {
  1248. struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
  1249. enum capri_pin_type pin_type;
  1250. u32 offset = 4 * pin;
  1251. u32 cfg_val, cfg_mask;
  1252. int rc;
  1253. cfg_val = 0;
  1254. cfg_mask = 0;
  1255. pin_type = pin_type_get(pctldev, pin);
  1256. /* Different pins have different configuration options */
  1257. switch (pin_type) {
  1258. case CAPRI_PIN_TYPE_STD:
  1259. rc = capri_std_pin_update(pctldev, pin, configs, num_configs,
  1260. &cfg_val, &cfg_mask);
  1261. break;
  1262. case CAPRI_PIN_TYPE_I2C:
  1263. rc = capri_i2c_pin_update(pctldev, pin, configs, num_configs,
  1264. &cfg_val, &cfg_mask);
  1265. break;
  1266. case CAPRI_PIN_TYPE_HDMI:
  1267. rc = capri_hdmi_pin_update(pctldev, pin, configs, num_configs,
  1268. &cfg_val, &cfg_mask);
  1269. break;
  1270. default:
  1271. dev_err(pctldev->dev, "Unknown pin type for pin %s (%d).\n",
  1272. pdata->pins[pin].name, pin);
  1273. return -EINVAL;
  1274. } /* switch pin type */
  1275. if (rc)
  1276. return rc;
  1277. dev_dbg(pctldev->dev,
  1278. "%s(): Set pin %s (%d) with config 0x%x, mask 0x%x\n",
  1279. __func__, pdata->pins[pin].name, pin, cfg_val, cfg_mask);
  1280. rc = regmap_update_bits(pdata->regmap, offset, cfg_mask, cfg_val);
  1281. if (rc) {
  1282. dev_err(pctldev->dev,
  1283. "Error updating register for pin %s (%d).\n",
  1284. pdata->pins[pin].name, pin);
  1285. return rc;
  1286. }
  1287. return 0;
  1288. }
  1289. static struct pinconf_ops capri_pinctrl_pinconf_ops = {
  1290. .pin_config_get = capri_pinctrl_pin_config_get,
  1291. .pin_config_set = capri_pinctrl_pin_config_set,
  1292. };
  1293. static struct pinctrl_desc capri_pinctrl_desc = {
  1294. /* name, pins, npins members initialized in probe function */
  1295. .pctlops = &capri_pinctrl_ops,
  1296. .pmxops = &capri_pinctrl_pinmux_ops,
  1297. .confops = &capri_pinctrl_pinconf_ops,
  1298. .owner = THIS_MODULE,
  1299. };
  1300. int __init capri_pinctrl_probe(struct platform_device *pdev)
  1301. {
  1302. struct capri_pinctrl_data *pdata = &capri_pinctrl;
  1303. struct resource *res;
  1304. struct pinctrl_dev *pctl;
  1305. /* So far We can assume there is only 1 bank of registers */
  1306. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  1307. if (!res) {
  1308. dev_err(&pdev->dev, "Missing MEM resource\n");
  1309. return -ENODEV;
  1310. }
  1311. pdata->reg_base = devm_ioremap_resource(&pdev->dev, res);
  1312. if (IS_ERR(pdata->reg_base)) {
  1313. dev_err(&pdev->dev, "Failed to ioremap MEM resource\n");
  1314. return -ENODEV;
  1315. }
  1316. /* Initialize the dynamic part of pinctrl_desc */
  1317. pdata->regmap = devm_regmap_init_mmio(&pdev->dev, pdata->reg_base,
  1318. &capri_pinctrl_regmap_config);
  1319. if (IS_ERR(pdata->regmap)) {
  1320. dev_err(&pdev->dev, "Regmap MMIO init failed.\n");
  1321. return -ENODEV;
  1322. }
  1323. capri_pinctrl_desc.name = dev_name(&pdev->dev);
  1324. capri_pinctrl_desc.pins = capri_pinctrl.pins;
  1325. capri_pinctrl_desc.npins = capri_pinctrl.npins;
  1326. pctl = pinctrl_register(&capri_pinctrl_desc,
  1327. &pdev->dev,
  1328. pdata);
  1329. if (!pctl) {
  1330. dev_err(&pdev->dev, "Failed to register pinctrl\n");
  1331. return -ENODEV;
  1332. }
  1333. platform_set_drvdata(pdev, pdata);
  1334. return 0;
  1335. }
  1336. static struct of_device_id capri_pinctrl_of_match[] = {
  1337. { .compatible = "brcm,bcm11351-pinctrl", },
  1338. { },
  1339. };
  1340. static struct platform_driver capri_pinctrl_driver = {
  1341. .driver = {
  1342. .name = "bcm-capri-pinctrl",
  1343. .owner = THIS_MODULE,
  1344. .of_match_table = capri_pinctrl_of_match,
  1345. },
  1346. };
  1347. module_platform_driver_probe(capri_pinctrl_driver, capri_pinctrl_probe);
  1348. MODULE_AUTHOR("Sherman Yin <syin@broadcom.com>");
  1349. MODULE_DESCRIPTION("Broadcom Capri pinctrl driver");
  1350. MODULE_LICENSE("GPL v2");