2 * Copyright (C) 2013-2017 Broadcom
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.
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.
14 #include <linux/err.h>
16 #include <linux/init.h>
18 #include <linux/platform_device.h>
19 #include <linux/pinctrl/pinctrl.h>
20 #include <linux/pinctrl/pinmux.h>
21 #include <linux/pinctrl/pinconf.h>
22 #include <linux/pinctrl/pinconf-generic.h>
23 #include <linux/regmap.h>
24 #include <linux/slab.h>
26 #include "../pinctrl-utils.h"
28 /* BCM281XX Pin Control Registers Definitions */
30 /* Function Select bits are the same for all pin control registers */
31 #define BCM281XX_PIN_REG_F_SEL_MASK 0x0700
32 #define BCM281XX_PIN_REG_F_SEL_SHIFT 8
34 /* Standard pin register */
35 #define BCM281XX_STD_PIN_REG_DRV_STR_MASK 0x0007
36 #define BCM281XX_STD_PIN_REG_DRV_STR_SHIFT 0
37 #define BCM281XX_STD_PIN_REG_INPUT_DIS_MASK 0x0008
38 #define BCM281XX_STD_PIN_REG_INPUT_DIS_SHIFT 3
39 #define BCM281XX_STD_PIN_REG_SLEW_MASK 0x0010
40 #define BCM281XX_STD_PIN_REG_SLEW_SHIFT 4
41 #define BCM281XX_STD_PIN_REG_PULL_UP_MASK 0x0020
42 #define BCM281XX_STD_PIN_REG_PULL_UP_SHIFT 5
43 #define BCM281XX_STD_PIN_REG_PULL_DN_MASK 0x0040
44 #define BCM281XX_STD_PIN_REG_PULL_DN_SHIFT 6
45 #define BCM281XX_STD_PIN_REG_HYST_MASK 0x0080
46 #define BCM281XX_STD_PIN_REG_HYST_SHIFT 7
48 /* I2C pin register */
49 #define BCM281XX_I2C_PIN_REG_INPUT_DIS_MASK 0x0004
50 #define BCM281XX_I2C_PIN_REG_INPUT_DIS_SHIFT 2
51 #define BCM281XX_I2C_PIN_REG_SLEW_MASK 0x0008
52 #define BCM281XX_I2C_PIN_REG_SLEW_SHIFT 3
53 #define BCM281XX_I2C_PIN_REG_PULL_UP_STR_MASK 0x0070
54 #define BCM281XX_I2C_PIN_REG_PULL_UP_STR_SHIFT 4
56 /* HDMI pin register */
57 #define BCM281XX_HDMI_PIN_REG_INPUT_DIS_MASK 0x0008
58 #define BCM281XX_HDMI_PIN_REG_INPUT_DIS_SHIFT 3
59 #define BCM281XX_HDMI_PIN_REG_MODE_MASK 0x0010
60 #define BCM281XX_HDMI_PIN_REG_MODE_SHIFT 4
63 * bcm281xx_pin_type - types of pin register
65 enum bcm281xx_pin_type
{
66 BCM281XX_PIN_TYPE_UNKNOWN
= 0,
67 BCM281XX_PIN_TYPE_STD
,
68 BCM281XX_PIN_TYPE_I2C
,
69 BCM281XX_PIN_TYPE_HDMI
,
72 static enum bcm281xx_pin_type std_pin
= BCM281XX_PIN_TYPE_STD
;
73 static enum bcm281xx_pin_type i2c_pin
= BCM281XX_PIN_TYPE_I2C
;
74 static enum bcm281xx_pin_type hdmi_pin
= BCM281XX_PIN_TYPE_HDMI
;
77 * bcm281xx_pin_function- define pin function
79 struct bcm281xx_pin_function
{
81 const char * const *groups
;
82 const unsigned ngroups
;
86 * bcm281xx_pinctrl_data - Broadcom-specific pinctrl data
87 * @reg_base - base of pinctrl registers
89 struct bcm281xx_pinctrl_data
{
90 void __iomem
*reg_base
;
92 /* List of all pins */
93 const struct pinctrl_pin_desc
*pins
;
96 const struct bcm281xx_pin_function
*functions
;
97 const unsigned nfunctions
;
99 struct regmap
*regmap
;
103 * Pin number definition. The order here must be the same as defined in the
104 * PADCTRLREG block in the RDB.
106 #define BCM281XX_PIN_ADCSYNC 0
107 #define BCM281XX_PIN_BAT_RM 1
108 #define BCM281XX_PIN_BSC1_SCL 2
109 #define BCM281XX_PIN_BSC1_SDA 3
110 #define BCM281XX_PIN_BSC2_SCL 4
111 #define BCM281XX_PIN_BSC2_SDA 5
112 #define BCM281XX_PIN_CLASSGPWR 6
113 #define BCM281XX_PIN_CLK_CX8 7
114 #define BCM281XX_PIN_CLKOUT_0 8
115 #define BCM281XX_PIN_CLKOUT_1 9
116 #define BCM281XX_PIN_CLKOUT_2 10
117 #define BCM281XX_PIN_CLKOUT_3 11
118 #define BCM281XX_PIN_CLKREQ_IN_0 12
119 #define BCM281XX_PIN_CLKREQ_IN_1 13
120 #define BCM281XX_PIN_CWS_SYS_REQ1 14
121 #define BCM281XX_PIN_CWS_SYS_REQ2 15
122 #define BCM281XX_PIN_CWS_SYS_REQ3 16
123 #define BCM281XX_PIN_DIGMIC1_CLK 17
124 #define BCM281XX_PIN_DIGMIC1_DQ 18
125 #define BCM281XX_PIN_DIGMIC2_CLK 19
126 #define BCM281XX_PIN_DIGMIC2_DQ 20
127 #define BCM281XX_PIN_GPEN13 21
128 #define BCM281XX_PIN_GPEN14 22
129 #define BCM281XX_PIN_GPEN15 23
130 #define BCM281XX_PIN_GPIO00 24
131 #define BCM281XX_PIN_GPIO01 25
132 #define BCM281XX_PIN_GPIO02 26
133 #define BCM281XX_PIN_GPIO03 27
134 #define BCM281XX_PIN_GPIO04 28
135 #define BCM281XX_PIN_GPIO05 29
136 #define BCM281XX_PIN_GPIO06 30
137 #define BCM281XX_PIN_GPIO07 31
138 #define BCM281XX_PIN_GPIO08 32
139 #define BCM281XX_PIN_GPIO09 33
140 #define BCM281XX_PIN_GPIO10 34
141 #define BCM281XX_PIN_GPIO11 35
142 #define BCM281XX_PIN_GPIO12 36
143 #define BCM281XX_PIN_GPIO13 37
144 #define BCM281XX_PIN_GPIO14 38
145 #define BCM281XX_PIN_GPS_PABLANK 39
146 #define BCM281XX_PIN_GPS_TMARK 40
147 #define BCM281XX_PIN_HDMI_SCL 41
148 #define BCM281XX_PIN_HDMI_SDA 42
149 #define BCM281XX_PIN_IC_DM 43
150 #define BCM281XX_PIN_IC_DP 44
151 #define BCM281XX_PIN_KP_COL_IP_0 45
152 #define BCM281XX_PIN_KP_COL_IP_1 46
153 #define BCM281XX_PIN_KP_COL_IP_2 47
154 #define BCM281XX_PIN_KP_COL_IP_3 48
155 #define BCM281XX_PIN_KP_ROW_OP_0 49
156 #define BCM281XX_PIN_KP_ROW_OP_1 50
157 #define BCM281XX_PIN_KP_ROW_OP_2 51
158 #define BCM281XX_PIN_KP_ROW_OP_3 52
159 #define BCM281XX_PIN_LCD_B_0 53
160 #define BCM281XX_PIN_LCD_B_1 54
161 #define BCM281XX_PIN_LCD_B_2 55
162 #define BCM281XX_PIN_LCD_B_3 56
163 #define BCM281XX_PIN_LCD_B_4 57
164 #define BCM281XX_PIN_LCD_B_5 58
165 #define BCM281XX_PIN_LCD_B_6 59
166 #define BCM281XX_PIN_LCD_B_7 60
167 #define BCM281XX_PIN_LCD_G_0 61
168 #define BCM281XX_PIN_LCD_G_1 62
169 #define BCM281XX_PIN_LCD_G_2 63
170 #define BCM281XX_PIN_LCD_G_3 64
171 #define BCM281XX_PIN_LCD_G_4 65
172 #define BCM281XX_PIN_LCD_G_5 66
173 #define BCM281XX_PIN_LCD_G_6 67
174 #define BCM281XX_PIN_LCD_G_7 68
175 #define BCM281XX_PIN_LCD_HSYNC 69
176 #define BCM281XX_PIN_LCD_OE 70
177 #define BCM281XX_PIN_LCD_PCLK 71
178 #define BCM281XX_PIN_LCD_R_0 72
179 #define BCM281XX_PIN_LCD_R_1 73
180 #define BCM281XX_PIN_LCD_R_2 74
181 #define BCM281XX_PIN_LCD_R_3 75
182 #define BCM281XX_PIN_LCD_R_4 76
183 #define BCM281XX_PIN_LCD_R_5 77
184 #define BCM281XX_PIN_LCD_R_6 78
185 #define BCM281XX_PIN_LCD_R_7 79
186 #define BCM281XX_PIN_LCD_VSYNC 80
187 #define BCM281XX_PIN_MDMGPIO0 81
188 #define BCM281XX_PIN_MDMGPIO1 82
189 #define BCM281XX_PIN_MDMGPIO2 83
190 #define BCM281XX_PIN_MDMGPIO3 84
191 #define BCM281XX_PIN_MDMGPIO4 85
192 #define BCM281XX_PIN_MDMGPIO5 86
193 #define BCM281XX_PIN_MDMGPIO6 87
194 #define BCM281XX_PIN_MDMGPIO7 88
195 #define BCM281XX_PIN_MDMGPIO8 89
196 #define BCM281XX_PIN_MPHI_DATA_0 90
197 #define BCM281XX_PIN_MPHI_DATA_1 91
198 #define BCM281XX_PIN_MPHI_DATA_2 92
199 #define BCM281XX_PIN_MPHI_DATA_3 93
200 #define BCM281XX_PIN_MPHI_DATA_4 94
201 #define BCM281XX_PIN_MPHI_DATA_5 95
202 #define BCM281XX_PIN_MPHI_DATA_6 96
203 #define BCM281XX_PIN_MPHI_DATA_7 97
204 #define BCM281XX_PIN_MPHI_DATA_8 98
205 #define BCM281XX_PIN_MPHI_DATA_9 99
206 #define BCM281XX_PIN_MPHI_DATA_10 100
207 #define BCM281XX_PIN_MPHI_DATA_11 101
208 #define BCM281XX_PIN_MPHI_DATA_12 102
209 #define BCM281XX_PIN_MPHI_DATA_13 103
210 #define BCM281XX_PIN_MPHI_DATA_14 104
211 #define BCM281XX_PIN_MPHI_DATA_15 105
212 #define BCM281XX_PIN_MPHI_HA0 106
213 #define BCM281XX_PIN_MPHI_HAT0 107
214 #define BCM281XX_PIN_MPHI_HAT1 108
215 #define BCM281XX_PIN_MPHI_HCE0_N 109
216 #define BCM281XX_PIN_MPHI_HCE1_N 110
217 #define BCM281XX_PIN_MPHI_HRD_N 111
218 #define BCM281XX_PIN_MPHI_HWR_N 112
219 #define BCM281XX_PIN_MPHI_RUN0 113
220 #define BCM281XX_PIN_MPHI_RUN1 114
221 #define BCM281XX_PIN_MTX_SCAN_CLK 115
222 #define BCM281XX_PIN_MTX_SCAN_DATA 116
223 #define BCM281XX_PIN_NAND_AD_0 117
224 #define BCM281XX_PIN_NAND_AD_1 118
225 #define BCM281XX_PIN_NAND_AD_2 119
226 #define BCM281XX_PIN_NAND_AD_3 120
227 #define BCM281XX_PIN_NAND_AD_4 121
228 #define BCM281XX_PIN_NAND_AD_5 122
229 #define BCM281XX_PIN_NAND_AD_6 123
230 #define BCM281XX_PIN_NAND_AD_7 124
231 #define BCM281XX_PIN_NAND_ALE 125
232 #define BCM281XX_PIN_NAND_CEN_0 126
233 #define BCM281XX_PIN_NAND_CEN_1 127
234 #define BCM281XX_PIN_NAND_CLE 128
235 #define BCM281XX_PIN_NAND_OEN 129
236 #define BCM281XX_PIN_NAND_RDY_0 130
237 #define BCM281XX_PIN_NAND_RDY_1 131
238 #define BCM281XX_PIN_NAND_WEN 132
239 #define BCM281XX_PIN_NAND_WP 133
240 #define BCM281XX_PIN_PC1 134
241 #define BCM281XX_PIN_PC2 135
242 #define BCM281XX_PIN_PMU_INT 136
243 #define BCM281XX_PIN_PMU_SCL 137
244 #define BCM281XX_PIN_PMU_SDA 138
245 #define BCM281XX_PIN_RFST2G_MTSLOTEN3G 139
246 #define BCM281XX_PIN_RGMII_0_RX_CTL 140
247 #define BCM281XX_PIN_RGMII_0_RXC 141
248 #define BCM281XX_PIN_RGMII_0_RXD_0 142
249 #define BCM281XX_PIN_RGMII_0_RXD_1 143
250 #define BCM281XX_PIN_RGMII_0_RXD_2 144
251 #define BCM281XX_PIN_RGMII_0_RXD_3 145
252 #define BCM281XX_PIN_RGMII_0_TX_CTL 146
253 #define BCM281XX_PIN_RGMII_0_TXC 147
254 #define BCM281XX_PIN_RGMII_0_TXD_0 148
255 #define BCM281XX_PIN_RGMII_0_TXD_1 149
256 #define BCM281XX_PIN_RGMII_0_TXD_2 150
257 #define BCM281XX_PIN_RGMII_0_TXD_3 151
258 #define BCM281XX_PIN_RGMII_1_RX_CTL 152
259 #define BCM281XX_PIN_RGMII_1_RXC 153
260 #define BCM281XX_PIN_RGMII_1_RXD_0 154
261 #define BCM281XX_PIN_RGMII_1_RXD_1 155
262 #define BCM281XX_PIN_RGMII_1_RXD_2 156
263 #define BCM281XX_PIN_RGMII_1_RXD_3 157
264 #define BCM281XX_PIN_RGMII_1_TX_CTL 158
265 #define BCM281XX_PIN_RGMII_1_TXC 159
266 #define BCM281XX_PIN_RGMII_1_TXD_0 160
267 #define BCM281XX_PIN_RGMII_1_TXD_1 161
268 #define BCM281XX_PIN_RGMII_1_TXD_2 162
269 #define BCM281XX_PIN_RGMII_1_TXD_3 163
270 #define BCM281XX_PIN_RGMII_GPIO_0 164
271 #define BCM281XX_PIN_RGMII_GPIO_1 165
272 #define BCM281XX_PIN_RGMII_GPIO_2 166
273 #define BCM281XX_PIN_RGMII_GPIO_3 167
274 #define BCM281XX_PIN_RTXDATA2G_TXDATA3G1 168
275 #define BCM281XX_PIN_RTXEN2G_TXDATA3G2 169
276 #define BCM281XX_PIN_RXDATA3G0 170
277 #define BCM281XX_PIN_RXDATA3G1 171
278 #define BCM281XX_PIN_RXDATA3G2 172
279 #define BCM281XX_PIN_SDIO1_CLK 173
280 #define BCM281XX_PIN_SDIO1_CMD 174
281 #define BCM281XX_PIN_SDIO1_DATA_0 175
282 #define BCM281XX_PIN_SDIO1_DATA_1 176
283 #define BCM281XX_PIN_SDIO1_DATA_2 177
284 #define BCM281XX_PIN_SDIO1_DATA_3 178
285 #define BCM281XX_PIN_SDIO4_CLK 179
286 #define BCM281XX_PIN_SDIO4_CMD 180
287 #define BCM281XX_PIN_SDIO4_DATA_0 181
288 #define BCM281XX_PIN_SDIO4_DATA_1 182
289 #define BCM281XX_PIN_SDIO4_DATA_2 183
290 #define BCM281XX_PIN_SDIO4_DATA_3 184
291 #define BCM281XX_PIN_SIM_CLK 185
292 #define BCM281XX_PIN_SIM_DATA 186
293 #define BCM281XX_PIN_SIM_DET 187
294 #define BCM281XX_PIN_SIM_RESETN 188
295 #define BCM281XX_PIN_SIM2_CLK 189
296 #define BCM281XX_PIN_SIM2_DATA 190
297 #define BCM281XX_PIN_SIM2_DET 191
298 #define BCM281XX_PIN_SIM2_RESETN 192
299 #define BCM281XX_PIN_SRI_C 193
300 #define BCM281XX_PIN_SRI_D 194
301 #define BCM281XX_PIN_SRI_E 195
302 #define BCM281XX_PIN_SSP_EXTCLK 196
303 #define BCM281XX_PIN_SSP0_CLK 197
304 #define BCM281XX_PIN_SSP0_FS 198
305 #define BCM281XX_PIN_SSP0_RXD 199
306 #define BCM281XX_PIN_SSP0_TXD 200
307 #define BCM281XX_PIN_SSP2_CLK 201
308 #define BCM281XX_PIN_SSP2_FS_0 202
309 #define BCM281XX_PIN_SSP2_FS_1 203
310 #define BCM281XX_PIN_SSP2_FS_2 204
311 #define BCM281XX_PIN_SSP2_FS_3 205
312 #define BCM281XX_PIN_SSP2_RXD_0 206
313 #define BCM281XX_PIN_SSP2_RXD_1 207
314 #define BCM281XX_PIN_SSP2_TXD_0 208
315 #define BCM281XX_PIN_SSP2_TXD_1 209
316 #define BCM281XX_PIN_SSP3_CLK 210
317 #define BCM281XX_PIN_SSP3_FS 211
318 #define BCM281XX_PIN_SSP3_RXD 212
319 #define BCM281XX_PIN_SSP3_TXD 213
320 #define BCM281XX_PIN_SSP4_CLK 214
321 #define BCM281XX_PIN_SSP4_FS 215
322 #define BCM281XX_PIN_SSP4_RXD 216
323 #define BCM281XX_PIN_SSP4_TXD 217
324 #define BCM281XX_PIN_SSP5_CLK 218
325 #define BCM281XX_PIN_SSP5_FS 219
326 #define BCM281XX_PIN_SSP5_RXD 220
327 #define BCM281XX_PIN_SSP5_TXD 221
328 #define BCM281XX_PIN_SSP6_CLK 222
329 #define BCM281XX_PIN_SSP6_FS 223
330 #define BCM281XX_PIN_SSP6_RXD 224
331 #define BCM281XX_PIN_SSP6_TXD 225
332 #define BCM281XX_PIN_STAT_1 226
333 #define BCM281XX_PIN_STAT_2 227
334 #define BCM281XX_PIN_SYSCLKEN 228
335 #define BCM281XX_PIN_TRACECLK 229
336 #define BCM281XX_PIN_TRACEDT00 230
337 #define BCM281XX_PIN_TRACEDT01 231
338 #define BCM281XX_PIN_TRACEDT02 232
339 #define BCM281XX_PIN_TRACEDT03 233
340 #define BCM281XX_PIN_TRACEDT04 234
341 #define BCM281XX_PIN_TRACEDT05 235
342 #define BCM281XX_PIN_TRACEDT06 236
343 #define BCM281XX_PIN_TRACEDT07 237
344 #define BCM281XX_PIN_TRACEDT08 238
345 #define BCM281XX_PIN_TRACEDT09 239
346 #define BCM281XX_PIN_TRACEDT10 240
347 #define BCM281XX_PIN_TRACEDT11 241
348 #define BCM281XX_PIN_TRACEDT12 242
349 #define BCM281XX_PIN_TRACEDT13 243
350 #define BCM281XX_PIN_TRACEDT14 244
351 #define BCM281XX_PIN_TRACEDT15 245
352 #define BCM281XX_PIN_TXDATA3G0 246
353 #define BCM281XX_PIN_TXPWRIND 247
354 #define BCM281XX_PIN_UARTB1_UCTS 248
355 #define BCM281XX_PIN_UARTB1_URTS 249
356 #define BCM281XX_PIN_UARTB1_URXD 250
357 #define BCM281XX_PIN_UARTB1_UTXD 251
358 #define BCM281XX_PIN_UARTB2_URXD 252
359 #define BCM281XX_PIN_UARTB2_UTXD 253
360 #define BCM281XX_PIN_UARTB3_UCTS 254
361 #define BCM281XX_PIN_UARTB3_URTS 255
362 #define BCM281XX_PIN_UARTB3_URXD 256
363 #define BCM281XX_PIN_UARTB3_UTXD 257
364 #define BCM281XX_PIN_UARTB4_UCTS 258
365 #define BCM281XX_PIN_UARTB4_URTS 259
366 #define BCM281XX_PIN_UARTB4_URXD 260
367 #define BCM281XX_PIN_UARTB4_UTXD 261
368 #define BCM281XX_PIN_VC_CAM1_SCL 262
369 #define BCM281XX_PIN_VC_CAM1_SDA 263
370 #define BCM281XX_PIN_VC_CAM2_SCL 264
371 #define BCM281XX_PIN_VC_CAM2_SDA 265
372 #define BCM281XX_PIN_VC_CAM3_SCL 266
373 #define BCM281XX_PIN_VC_CAM3_SDA 267
375 #define BCM281XX_PIN_DESC(a, b, c) \
376 { .number = a, .name = b, .drv_data = &c##_pin }
379 * Pin description definition. The order here must be the same as defined in
380 * the PADCTRLREG block in the RDB, since the pin number is used as an index
383 static const struct pinctrl_pin_desc bcm281xx_pinctrl_pins
[] = {
384 BCM281XX_PIN_DESC(BCM281XX_PIN_ADCSYNC
, "adcsync", std
),
385 BCM281XX_PIN_DESC(BCM281XX_PIN_BAT_RM
, "bat_rm", std
),
386 BCM281XX_PIN_DESC(BCM281XX_PIN_BSC1_SCL
, "bsc1_scl", i2c
),
387 BCM281XX_PIN_DESC(BCM281XX_PIN_BSC1_SDA
, "bsc1_sda", i2c
),
388 BCM281XX_PIN_DESC(BCM281XX_PIN_BSC2_SCL
, "bsc2_scl", i2c
),
389 BCM281XX_PIN_DESC(BCM281XX_PIN_BSC2_SDA
, "bsc2_sda", i2c
),
390 BCM281XX_PIN_DESC(BCM281XX_PIN_CLASSGPWR
, "classgpwr", std
),
391 BCM281XX_PIN_DESC(BCM281XX_PIN_CLK_CX8
, "clk_cx8", std
),
392 BCM281XX_PIN_DESC(BCM281XX_PIN_CLKOUT_0
, "clkout_0", std
),
393 BCM281XX_PIN_DESC(BCM281XX_PIN_CLKOUT_1
, "clkout_1", std
),
394 BCM281XX_PIN_DESC(BCM281XX_PIN_CLKOUT_2
, "clkout_2", std
),
395 BCM281XX_PIN_DESC(BCM281XX_PIN_CLKOUT_3
, "clkout_3", std
),
396 BCM281XX_PIN_DESC(BCM281XX_PIN_CLKREQ_IN_0
, "clkreq_in_0", std
),
397 BCM281XX_PIN_DESC(BCM281XX_PIN_CLKREQ_IN_1
, "clkreq_in_1", std
),
398 BCM281XX_PIN_DESC(BCM281XX_PIN_CWS_SYS_REQ1
, "cws_sys_req1", std
),
399 BCM281XX_PIN_DESC(BCM281XX_PIN_CWS_SYS_REQ2
, "cws_sys_req2", std
),
400 BCM281XX_PIN_DESC(BCM281XX_PIN_CWS_SYS_REQ3
, "cws_sys_req3", std
),
401 BCM281XX_PIN_DESC(BCM281XX_PIN_DIGMIC1_CLK
, "digmic1_clk", std
),
402 BCM281XX_PIN_DESC(BCM281XX_PIN_DIGMIC1_DQ
, "digmic1_dq", std
),
403 BCM281XX_PIN_DESC(BCM281XX_PIN_DIGMIC2_CLK
, "digmic2_clk", std
),
404 BCM281XX_PIN_DESC(BCM281XX_PIN_DIGMIC2_DQ
, "digmic2_dq", std
),
405 BCM281XX_PIN_DESC(BCM281XX_PIN_GPEN13
, "gpen13", std
),
406 BCM281XX_PIN_DESC(BCM281XX_PIN_GPEN14
, "gpen14", std
),
407 BCM281XX_PIN_DESC(BCM281XX_PIN_GPEN15
, "gpen15", std
),
408 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO00
, "gpio00", std
),
409 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO01
, "gpio01", std
),
410 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO02
, "gpio02", std
),
411 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO03
, "gpio03", std
),
412 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO04
, "gpio04", std
),
413 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO05
, "gpio05", std
),
414 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO06
, "gpio06", std
),
415 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO07
, "gpio07", std
),
416 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO08
, "gpio08", std
),
417 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO09
, "gpio09", std
),
418 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO10
, "gpio10", std
),
419 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO11
, "gpio11", std
),
420 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO12
, "gpio12", std
),
421 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO13
, "gpio13", std
),
422 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO14
, "gpio14", std
),
423 BCM281XX_PIN_DESC(BCM281XX_PIN_GPS_PABLANK
, "gps_pablank", std
),
424 BCM281XX_PIN_DESC(BCM281XX_PIN_GPS_TMARK
, "gps_tmark", std
),
425 BCM281XX_PIN_DESC(BCM281XX_PIN_HDMI_SCL
, "hdmi_scl", hdmi
),
426 BCM281XX_PIN_DESC(BCM281XX_PIN_HDMI_SDA
, "hdmi_sda", hdmi
),
427 BCM281XX_PIN_DESC(BCM281XX_PIN_IC_DM
, "ic_dm", std
),
428 BCM281XX_PIN_DESC(BCM281XX_PIN_IC_DP
, "ic_dp", std
),
429 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_COL_IP_0
, "kp_col_ip_0", std
),
430 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_COL_IP_1
, "kp_col_ip_1", std
),
431 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_COL_IP_2
, "kp_col_ip_2", std
),
432 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_COL_IP_3
, "kp_col_ip_3", std
),
433 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_ROW_OP_0
, "kp_row_op_0", std
),
434 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_ROW_OP_1
, "kp_row_op_1", std
),
435 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_ROW_OP_2
, "kp_row_op_2", std
),
436 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_ROW_OP_3
, "kp_row_op_3", std
),
437 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_0
, "lcd_b_0", std
),
438 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_1
, "lcd_b_1", std
),
439 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_2
, "lcd_b_2", std
),
440 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_3
, "lcd_b_3", std
),
441 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_4
, "lcd_b_4", std
),
442 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_5
, "lcd_b_5", std
),
443 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_6
, "lcd_b_6", std
),
444 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_7
, "lcd_b_7", std
),
445 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_0
, "lcd_g_0", std
),
446 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_1
, "lcd_g_1", std
),
447 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_2
, "lcd_g_2", std
),
448 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_3
, "lcd_g_3", std
),
449 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_4
, "lcd_g_4", std
),
450 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_5
, "lcd_g_5", std
),
451 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_6
, "lcd_g_6", std
),
452 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_7
, "lcd_g_7", std
),
453 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_HSYNC
, "lcd_hsync", std
),
454 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_OE
, "lcd_oe", std
),
455 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_PCLK
, "lcd_pclk", std
),
456 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_0
, "lcd_r_0", std
),
457 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_1
, "lcd_r_1", std
),
458 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_2
, "lcd_r_2", std
),
459 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_3
, "lcd_r_3", std
),
460 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_4
, "lcd_r_4", std
),
461 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_5
, "lcd_r_5", std
),
462 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_6
, "lcd_r_6", std
),
463 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_7
, "lcd_r_7", std
),
464 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_VSYNC
, "lcd_vsync", std
),
465 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO0
, "mdmgpio0", std
),
466 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO1
, "mdmgpio1", std
),
467 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO2
, "mdmgpio2", std
),
468 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO3
, "mdmgpio3", std
),
469 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO4
, "mdmgpio4", std
),
470 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO5
, "mdmgpio5", std
),
471 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO6
, "mdmgpio6", std
),
472 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO7
, "mdmgpio7", std
),
473 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO8
, "mdmgpio8", std
),
474 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_0
, "mphi_data_0", std
),
475 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_1
, "mphi_data_1", std
),
476 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_2
, "mphi_data_2", std
),
477 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_3
, "mphi_data_3", std
),
478 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_4
, "mphi_data_4", std
),
479 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_5
, "mphi_data_5", std
),
480 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_6
, "mphi_data_6", std
),
481 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_7
, "mphi_data_7", std
),
482 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_8
, "mphi_data_8", std
),
483 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_9
, "mphi_data_9", std
),
484 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_10
, "mphi_data_10", std
),
485 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_11
, "mphi_data_11", std
),
486 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_12
, "mphi_data_12", std
),
487 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_13
, "mphi_data_13", std
),
488 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_14
, "mphi_data_14", std
),
489 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_15
, "mphi_data_15", std
),
490 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HA0
, "mphi_ha0", std
),
491 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HAT0
, "mphi_hat0", std
),
492 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HAT1
, "mphi_hat1", std
),
493 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HCE0_N
, "mphi_hce0_n", std
),
494 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HCE1_N
, "mphi_hce1_n", std
),
495 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HRD_N
, "mphi_hrd_n", std
),
496 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HWR_N
, "mphi_hwr_n", std
),
497 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_RUN0
, "mphi_run0", std
),
498 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_RUN1
, "mphi_run1", std
),
499 BCM281XX_PIN_DESC(BCM281XX_PIN_MTX_SCAN_CLK
, "mtx_scan_clk", std
),
500 BCM281XX_PIN_DESC(BCM281XX_PIN_MTX_SCAN_DATA
, "mtx_scan_data", std
),
501 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_0
, "nand_ad_0", std
),
502 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_1
, "nand_ad_1", std
),
503 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_2
, "nand_ad_2", std
),
504 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_3
, "nand_ad_3", std
),
505 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_4
, "nand_ad_4", std
),
506 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_5
, "nand_ad_5", std
),
507 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_6
, "nand_ad_6", std
),
508 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_7
, "nand_ad_7", std
),
509 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_ALE
, "nand_ale", std
),
510 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_CEN_0
, "nand_cen_0", std
),
511 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_CEN_1
, "nand_cen_1", std
),
512 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_CLE
, "nand_cle", std
),
513 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_OEN
, "nand_oen", std
),
514 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_RDY_0
, "nand_rdy_0", std
),
515 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_RDY_1
, "nand_rdy_1", std
),
516 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_WEN
, "nand_wen", std
),
517 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_WP
, "nand_wp", std
),
518 BCM281XX_PIN_DESC(BCM281XX_PIN_PC1
, "pc1", std
),
519 BCM281XX_PIN_DESC(BCM281XX_PIN_PC2
, "pc2", std
),
520 BCM281XX_PIN_DESC(BCM281XX_PIN_PMU_INT
, "pmu_int", std
),
521 BCM281XX_PIN_DESC(BCM281XX_PIN_PMU_SCL
, "pmu_scl", i2c
),
522 BCM281XX_PIN_DESC(BCM281XX_PIN_PMU_SDA
, "pmu_sda", i2c
),
523 BCM281XX_PIN_DESC(BCM281XX_PIN_RFST2G_MTSLOTEN3G
, "rfst2g_mtsloten3g",
525 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RX_CTL
, "rgmii_0_rx_ctl", std
),
526 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXC
, "rgmii_0_rxc", std
),
527 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXD_0
, "rgmii_0_rxd_0", std
),
528 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXD_1
, "rgmii_0_rxd_1", std
),
529 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXD_2
, "rgmii_0_rxd_2", std
),
530 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXD_3
, "rgmii_0_rxd_3", std
),
531 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TX_CTL
, "rgmii_0_tx_ctl", std
),
532 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXC
, "rgmii_0_txc", std
),
533 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXD_0
, "rgmii_0_txd_0", std
),
534 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXD_1
, "rgmii_0_txd_1", std
),
535 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXD_2
, "rgmii_0_txd_2", std
),
536 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXD_3
, "rgmii_0_txd_3", std
),
537 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RX_CTL
, "rgmii_1_rx_ctl", std
),
538 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXC
, "rgmii_1_rxc", std
),
539 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXD_0
, "rgmii_1_rxd_0", std
),
540 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXD_1
, "rgmii_1_rxd_1", std
),
541 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXD_2
, "rgmii_1_rxd_2", std
),
542 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXD_3
, "rgmii_1_rxd_3", std
),
543 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TX_CTL
, "rgmii_1_tx_ctl", std
),
544 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXC
, "rgmii_1_txc", std
),
545 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXD_0
, "rgmii_1_txd_0", std
),
546 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXD_1
, "rgmii_1_txd_1", std
),
547 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXD_2
, "rgmii_1_txd_2", std
),
548 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXD_3
, "rgmii_1_txd_3", std
),
549 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_GPIO_0
, "rgmii_gpio_0", std
),
550 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_GPIO_1
, "rgmii_gpio_1", std
),
551 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_GPIO_2
, "rgmii_gpio_2", std
),
552 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_GPIO_3
, "rgmii_gpio_3", std
),
553 BCM281XX_PIN_DESC(BCM281XX_PIN_RTXDATA2G_TXDATA3G1
,
554 "rtxdata2g_txdata3g1", std
),
555 BCM281XX_PIN_DESC(BCM281XX_PIN_RTXEN2G_TXDATA3G2
, "rtxen2g_txdata3g2",
557 BCM281XX_PIN_DESC(BCM281XX_PIN_RXDATA3G0
, "rxdata3g0", std
),
558 BCM281XX_PIN_DESC(BCM281XX_PIN_RXDATA3G1
, "rxdata3g1", std
),
559 BCM281XX_PIN_DESC(BCM281XX_PIN_RXDATA3G2
, "rxdata3g2", std
),
560 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_CLK
, "sdio1_clk", std
),
561 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_CMD
, "sdio1_cmd", std
),
562 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_DATA_0
, "sdio1_data_0", std
),
563 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_DATA_1
, "sdio1_data_1", std
),
564 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_DATA_2
, "sdio1_data_2", std
),
565 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_DATA_3
, "sdio1_data_3", std
),
566 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_CLK
, "sdio4_clk", std
),
567 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_CMD
, "sdio4_cmd", std
),
568 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_DATA_0
, "sdio4_data_0", std
),
569 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_DATA_1
, "sdio4_data_1", std
),
570 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_DATA_2
, "sdio4_data_2", std
),
571 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_DATA_3
, "sdio4_data_3", std
),
572 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM_CLK
, "sim_clk", std
),
573 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM_DATA
, "sim_data", std
),
574 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM_DET
, "sim_det", std
),
575 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM_RESETN
, "sim_resetn", std
),
576 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM2_CLK
, "sim2_clk", std
),
577 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM2_DATA
, "sim2_data", std
),
578 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM2_DET
, "sim2_det", std
),
579 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM2_RESETN
, "sim2_resetn", std
),
580 BCM281XX_PIN_DESC(BCM281XX_PIN_SRI_C
, "sri_c", std
),
581 BCM281XX_PIN_DESC(BCM281XX_PIN_SRI_D
, "sri_d", std
),
582 BCM281XX_PIN_DESC(BCM281XX_PIN_SRI_E
, "sri_e", std
),
583 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP_EXTCLK
, "ssp_extclk", std
),
584 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP0_CLK
, "ssp0_clk", std
),
585 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP0_FS
, "ssp0_fs", std
),
586 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP0_RXD
, "ssp0_rxd", std
),
587 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP0_TXD
, "ssp0_txd", std
),
588 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_CLK
, "ssp2_clk", std
),
589 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_FS_0
, "ssp2_fs_0", std
),
590 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_FS_1
, "ssp2_fs_1", std
),
591 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_FS_2
, "ssp2_fs_2", std
),
592 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_FS_3
, "ssp2_fs_3", std
),
593 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_RXD_0
, "ssp2_rxd_0", std
),
594 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_RXD_1
, "ssp2_rxd_1", std
),
595 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_TXD_0
, "ssp2_txd_0", std
),
596 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_TXD_1
, "ssp2_txd_1", std
),
597 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP3_CLK
, "ssp3_clk", std
),
598 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP3_FS
, "ssp3_fs", std
),
599 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP3_RXD
, "ssp3_rxd", std
),
600 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP3_TXD
, "ssp3_txd", std
),
601 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP4_CLK
, "ssp4_clk", std
),
602 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP4_FS
, "ssp4_fs", std
),
603 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP4_RXD
, "ssp4_rxd", std
),
604 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP4_TXD
, "ssp4_txd", std
),
605 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP5_CLK
, "ssp5_clk", std
),
606 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP5_FS
, "ssp5_fs", std
),
607 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP5_RXD
, "ssp5_rxd", std
),
608 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP5_TXD
, "ssp5_txd", std
),
609 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP6_CLK
, "ssp6_clk", std
),
610 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP6_FS
, "ssp6_fs", std
),
611 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP6_RXD
, "ssp6_rxd", std
),
612 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP6_TXD
, "ssp6_txd", std
),
613 BCM281XX_PIN_DESC(BCM281XX_PIN_STAT_1
, "stat_1", std
),
614 BCM281XX_PIN_DESC(BCM281XX_PIN_STAT_2
, "stat_2", std
),
615 BCM281XX_PIN_DESC(BCM281XX_PIN_SYSCLKEN
, "sysclken", std
),
616 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACECLK
, "traceclk", std
),
617 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT00
, "tracedt00", std
),
618 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT01
, "tracedt01", std
),
619 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT02
, "tracedt02", std
),
620 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT03
, "tracedt03", std
),
621 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT04
, "tracedt04", std
),
622 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT05
, "tracedt05", std
),
623 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT06
, "tracedt06", std
),
624 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT07
, "tracedt07", std
),
625 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT08
, "tracedt08", std
),
626 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT09
, "tracedt09", std
),
627 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT10
, "tracedt10", std
),
628 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT11
, "tracedt11", std
),
629 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT12
, "tracedt12", std
),
630 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT13
, "tracedt13", std
),
631 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT14
, "tracedt14", std
),
632 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT15
, "tracedt15", std
),
633 BCM281XX_PIN_DESC(BCM281XX_PIN_TXDATA3G0
, "txdata3g0", std
),
634 BCM281XX_PIN_DESC(BCM281XX_PIN_TXPWRIND
, "txpwrind", std
),
635 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB1_UCTS
, "uartb1_ucts", std
),
636 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB1_URTS
, "uartb1_urts", std
),
637 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB1_URXD
, "uartb1_urxd", std
),
638 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB1_UTXD
, "uartb1_utxd", std
),
639 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB2_URXD
, "uartb2_urxd", std
),
640 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB2_UTXD
, "uartb2_utxd", std
),
641 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB3_UCTS
, "uartb3_ucts", std
),
642 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB3_URTS
, "uartb3_urts", std
),
643 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB3_URXD
, "uartb3_urxd", std
),
644 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB3_UTXD
, "uartb3_utxd", std
),
645 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB4_UCTS
, "uartb4_ucts", std
),
646 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB4_URTS
, "uartb4_urts", std
),
647 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB4_URXD
, "uartb4_urxd", std
),
648 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB4_UTXD
, "uartb4_utxd", std
),
649 BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM1_SCL
, "vc_cam1_scl", i2c
),
650 BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM1_SDA
, "vc_cam1_sda", i2c
),
651 BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM2_SCL
, "vc_cam2_scl", i2c
),
652 BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM2_SDA
, "vc_cam2_sda", i2c
),
653 BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM3_SCL
, "vc_cam3_scl", i2c
),
654 BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM3_SDA
, "vc_cam3_sda", i2c
),
657 static const char * const bcm281xx_alt_groups
[] = {
826 "rtxdata2g_txdata3g1",
928 /* Every pin can implement all ALT1-ALT4 functions */
929 #define BCM281XX_PIN_FUNCTION(fcn_name) \
932 .groups = bcm281xx_alt_groups, \
933 .ngroups = ARRAY_SIZE(bcm281xx_alt_groups), \
936 static const struct bcm281xx_pin_function bcm281xx_functions
[] = {
937 BCM281XX_PIN_FUNCTION(alt1
),
938 BCM281XX_PIN_FUNCTION(alt2
),
939 BCM281XX_PIN_FUNCTION(alt3
),
940 BCM281XX_PIN_FUNCTION(alt4
),
943 static struct bcm281xx_pinctrl_data bcm281xx_pinctrl
= {
944 .pins
= bcm281xx_pinctrl_pins
,
945 .npins
= ARRAY_SIZE(bcm281xx_pinctrl_pins
),
946 .functions
= bcm281xx_functions
,
947 .nfunctions
= ARRAY_SIZE(bcm281xx_functions
),
950 static inline enum bcm281xx_pin_type
pin_type_get(struct pinctrl_dev
*pctldev
,
953 struct bcm281xx_pinctrl_data
*pdata
= pinctrl_dev_get_drvdata(pctldev
);
955 if (pin
>= pdata
->npins
)
956 return BCM281XX_PIN_TYPE_UNKNOWN
;
958 return *(enum bcm281xx_pin_type
*)(pdata
->pins
[pin
].drv_data
);
961 #define BCM281XX_PIN_SHIFT(type, param) \
962 (BCM281XX_ ## type ## _PIN_REG_ ## param ## _SHIFT)
964 #define BCM281XX_PIN_MASK(type, param) \
965 (BCM281XX_ ## type ## _PIN_REG_ ## param ## _MASK)
968 * This helper function is used to build up the value and mask used to write to
969 * a pin register, but does not actually write to the register.
971 static inline void bcm281xx_pin_update(u32
*reg_val
, u32
*reg_mask
,
972 u32 param_val
, u32 param_shift
,
975 *reg_val
&= ~param_mask
;
976 *reg_val
|= (param_val
<< param_shift
) & param_mask
;
977 *reg_mask
|= param_mask
;
980 static const struct regmap_config bcm281xx_pinctrl_regmap_config
= {
984 .max_register
= BCM281XX_PIN_VC_CAM3_SDA
,
987 static int bcm281xx_pinctrl_get_groups_count(struct pinctrl_dev
*pctldev
)
989 struct bcm281xx_pinctrl_data
*pdata
= pinctrl_dev_get_drvdata(pctldev
);
994 static const char *bcm281xx_pinctrl_get_group_name(struct pinctrl_dev
*pctldev
,
997 struct bcm281xx_pinctrl_data
*pdata
= pinctrl_dev_get_drvdata(pctldev
);
999 return pdata
->pins
[group
].name
;
1002 static int bcm281xx_pinctrl_get_group_pins(struct pinctrl_dev
*pctldev
,
1004 const unsigned **pins
,
1007 struct bcm281xx_pinctrl_data
*pdata
= pinctrl_dev_get_drvdata(pctldev
);
1009 *pins
= &pdata
->pins
[group
].number
;
1015 static void bcm281xx_pinctrl_pin_dbg_show(struct pinctrl_dev
*pctldev
,
1019 seq_printf(s
, " %s", dev_name(pctldev
->dev
));
1022 static const struct pinctrl_ops bcm281xx_pinctrl_ops
= {
1023 .get_groups_count
= bcm281xx_pinctrl_get_groups_count
,
1024 .get_group_name
= bcm281xx_pinctrl_get_group_name
,
1025 .get_group_pins
= bcm281xx_pinctrl_get_group_pins
,
1026 .pin_dbg_show
= bcm281xx_pinctrl_pin_dbg_show
,
1027 .dt_node_to_map
= pinconf_generic_dt_node_to_map_pin
,
1028 .dt_free_map
= pinctrl_utils_free_map
,
1031 static int bcm281xx_pinctrl_get_fcns_count(struct pinctrl_dev
*pctldev
)
1033 struct bcm281xx_pinctrl_data
*pdata
= pinctrl_dev_get_drvdata(pctldev
);
1035 return pdata
->nfunctions
;
1038 static const char *bcm281xx_pinctrl_get_fcn_name(struct pinctrl_dev
*pctldev
,
1041 struct bcm281xx_pinctrl_data
*pdata
= pinctrl_dev_get_drvdata(pctldev
);
1043 return pdata
->functions
[function
].name
;
1046 static int bcm281xx_pinctrl_get_fcn_groups(struct pinctrl_dev
*pctldev
,
1048 const char * const **groups
,
1049 unsigned * const num_groups
)
1051 struct bcm281xx_pinctrl_data
*pdata
= pinctrl_dev_get_drvdata(pctldev
);
1053 *groups
= pdata
->functions
[function
].groups
;
1054 *num_groups
= pdata
->functions
[function
].ngroups
;
1059 static int bcm281xx_pinmux_set(struct pinctrl_dev
*pctldev
,
1063 struct bcm281xx_pinctrl_data
*pdata
= pinctrl_dev_get_drvdata(pctldev
);
1064 const struct bcm281xx_pin_function
*f
= &pdata
->functions
[function
];
1065 u32 offset
= 4 * pdata
->pins
[group
].number
;
1068 dev_dbg(pctldev
->dev
,
1069 "%s(): Enable function %s (%d) of pin %s (%d) @offset 0x%x.\n",
1070 __func__
, f
->name
, function
, pdata
->pins
[group
].name
,
1071 pdata
->pins
[group
].number
, offset
);
1073 rc
= regmap_update_bits(pdata
->regmap
, offset
,
1074 BCM281XX_PIN_REG_F_SEL_MASK
,
1075 function
<< BCM281XX_PIN_REG_F_SEL_SHIFT
);
1077 dev_err(pctldev
->dev
,
1078 "Error updating register for pin %s (%d).\n",
1079 pdata
->pins
[group
].name
, pdata
->pins
[group
].number
);
1084 static const struct pinmux_ops bcm281xx_pinctrl_pinmux_ops
= {
1085 .get_functions_count
= bcm281xx_pinctrl_get_fcns_count
,
1086 .get_function_name
= bcm281xx_pinctrl_get_fcn_name
,
1087 .get_function_groups
= bcm281xx_pinctrl_get_fcn_groups
,
1088 .set_mux
= bcm281xx_pinmux_set
,
1091 static int bcm281xx_pinctrl_pin_config_get(struct pinctrl_dev
*pctldev
,
1093 unsigned long *config
)
1099 /* Goes through the configs and update register val/mask */
1100 static int bcm281xx_std_pin_update(struct pinctrl_dev
*pctldev
,
1102 unsigned long *configs
,
1103 unsigned num_configs
,
1107 struct bcm281xx_pinctrl_data
*pdata
= pinctrl_dev_get_drvdata(pctldev
);
1109 enum pin_config_param param
;
1112 for (i
= 0; i
< num_configs
; i
++) {
1113 param
= pinconf_to_config_param(configs
[i
]);
1114 arg
= pinconf_to_config_argument(configs
[i
]);
1117 case PIN_CONFIG_INPUT_SCHMITT_ENABLE
:
1118 arg
= (arg
>= 1 ? 1 : 0);
1119 bcm281xx_pin_update(val
, mask
, arg
,
1120 BCM281XX_PIN_SHIFT(STD
, HYST
),
1121 BCM281XX_PIN_MASK(STD
, HYST
));
1124 * The pin bias can only be one of pull-up, pull-down, or
1125 * disable. The user does not need to specify a value for the
1126 * property, and the default value from pinconf-generic is
1129 case PIN_CONFIG_BIAS_DISABLE
:
1130 bcm281xx_pin_update(val
, mask
, 0,
1131 BCM281XX_PIN_SHIFT(STD
, PULL_UP
),
1132 BCM281XX_PIN_MASK(STD
, PULL_UP
));
1133 bcm281xx_pin_update(val
, mask
, 0,
1134 BCM281XX_PIN_SHIFT(STD
, PULL_DN
),
1135 BCM281XX_PIN_MASK(STD
, PULL_DN
));
1138 case PIN_CONFIG_BIAS_PULL_UP
:
1139 bcm281xx_pin_update(val
, mask
, 1,
1140 BCM281XX_PIN_SHIFT(STD
, PULL_UP
),
1141 BCM281XX_PIN_MASK(STD
, PULL_UP
));
1142 bcm281xx_pin_update(val
, mask
, 0,
1143 BCM281XX_PIN_SHIFT(STD
, PULL_DN
),
1144 BCM281XX_PIN_MASK(STD
, PULL_DN
));
1147 case PIN_CONFIG_BIAS_PULL_DOWN
:
1148 bcm281xx_pin_update(val
, mask
, 0,
1149 BCM281XX_PIN_SHIFT(STD
, PULL_UP
),
1150 BCM281XX_PIN_MASK(STD
, PULL_UP
));
1151 bcm281xx_pin_update(val
, mask
, 1,
1152 BCM281XX_PIN_SHIFT(STD
, PULL_DN
),
1153 BCM281XX_PIN_MASK(STD
, PULL_DN
));
1156 case PIN_CONFIG_SLEW_RATE
:
1157 arg
= (arg
>= 1 ? 1 : 0);
1158 bcm281xx_pin_update(val
, mask
, arg
,
1159 BCM281XX_PIN_SHIFT(STD
, SLEW
),
1160 BCM281XX_PIN_MASK(STD
, SLEW
));
1163 case PIN_CONFIG_INPUT_ENABLE
:
1164 /* inversed since register is for input _disable_ */
1165 arg
= (arg
>= 1 ? 0 : 1);
1166 bcm281xx_pin_update(val
, mask
, arg
,
1167 BCM281XX_PIN_SHIFT(STD
, INPUT_DIS
),
1168 BCM281XX_PIN_MASK(STD
, INPUT_DIS
));
1171 case PIN_CONFIG_DRIVE_STRENGTH
:
1172 /* Valid range is 2-16 mA, even numbers only */
1173 if ((arg
< 2) || (arg
> 16) || (arg
% 2)) {
1174 dev_err(pctldev
->dev
,
1175 "Invalid Drive Strength value (%d) for "
1176 "pin %s (%d). Valid values are "
1177 "(2..16) mA, even numbers only.\n",
1178 arg
, pdata
->pins
[pin
].name
, pin
);
1181 bcm281xx_pin_update(val
, mask
, (arg
/2)-1,
1182 BCM281XX_PIN_SHIFT(STD
, DRV_STR
),
1183 BCM281XX_PIN_MASK(STD
, DRV_STR
));
1187 dev_err(pctldev
->dev
,
1188 "Unrecognized pin config %d for pin %s (%d).\n",
1189 param
, pdata
->pins
[pin
].name
, pin
);
1192 } /* switch config */
1193 } /* for each config */
1199 * The pull-up strength for an I2C pin is represented by bits 4-6 in the
1200 * register with the following mapping:
1209 * This array maps pull-up strength in Ohms to register values (1+index).
1211 static const u16 bcm281xx_pullup_map
[] = {
1212 1200, 1800, 720, 2700, 831, 1080, 568
1215 /* Goes through the configs and update register val/mask */
1216 static int bcm281xx_i2c_pin_update(struct pinctrl_dev
*pctldev
,
1218 unsigned long *configs
,
1219 unsigned num_configs
,
1223 struct bcm281xx_pinctrl_data
*pdata
= pinctrl_dev_get_drvdata(pctldev
);
1225 enum pin_config_param param
;
1228 for (i
= 0; i
< num_configs
; i
++) {
1229 param
= pinconf_to_config_param(configs
[i
]);
1230 arg
= pinconf_to_config_argument(configs
[i
]);
1233 case PIN_CONFIG_BIAS_PULL_UP
:
1234 for (j
= 0; j
< ARRAY_SIZE(bcm281xx_pullup_map
); j
++)
1235 if (bcm281xx_pullup_map
[j
] == arg
)
1238 if (j
== ARRAY_SIZE(bcm281xx_pullup_map
)) {
1239 dev_err(pctldev
->dev
,
1240 "Invalid pull-up value (%d) for pin %s "
1241 "(%d). Valid values are 568, 720, 831, "
1242 "1080, 1200, 1800, 2700 Ohms.\n",
1243 arg
, pdata
->pins
[pin
].name
, pin
);
1247 bcm281xx_pin_update(val
, mask
, j
+1,
1248 BCM281XX_PIN_SHIFT(I2C
, PULL_UP_STR
),
1249 BCM281XX_PIN_MASK(I2C
, PULL_UP_STR
));
1252 case PIN_CONFIG_BIAS_DISABLE
:
1253 bcm281xx_pin_update(val
, mask
, 0,
1254 BCM281XX_PIN_SHIFT(I2C
, PULL_UP_STR
),
1255 BCM281XX_PIN_MASK(I2C
, PULL_UP_STR
));
1258 case PIN_CONFIG_SLEW_RATE
:
1259 arg
= (arg
>= 1 ? 1 : 0);
1260 bcm281xx_pin_update(val
, mask
, arg
,
1261 BCM281XX_PIN_SHIFT(I2C
, SLEW
),
1262 BCM281XX_PIN_MASK(I2C
, SLEW
));
1265 case PIN_CONFIG_INPUT_ENABLE
:
1266 /* inversed since register is for input _disable_ */
1267 arg
= (arg
>= 1 ? 0 : 1);
1268 bcm281xx_pin_update(val
, mask
, arg
,
1269 BCM281XX_PIN_SHIFT(I2C
, INPUT_DIS
),
1270 BCM281XX_PIN_MASK(I2C
, INPUT_DIS
));
1274 dev_err(pctldev
->dev
,
1275 "Unrecognized pin config %d for pin %s (%d).\n",
1276 param
, pdata
->pins
[pin
].name
, pin
);
1279 } /* switch config */
1280 } /* for each config */
1285 /* Goes through the configs and update register val/mask */
1286 static int bcm281xx_hdmi_pin_update(struct pinctrl_dev
*pctldev
,
1288 unsigned long *configs
,
1289 unsigned num_configs
,
1293 struct bcm281xx_pinctrl_data
*pdata
= pinctrl_dev_get_drvdata(pctldev
);
1295 enum pin_config_param param
;
1298 for (i
= 0; i
< num_configs
; i
++) {
1299 param
= pinconf_to_config_param(configs
[i
]);
1300 arg
= pinconf_to_config_argument(configs
[i
]);
1303 case PIN_CONFIG_SLEW_RATE
:
1304 arg
= (arg
>= 1 ? 1 : 0);
1305 bcm281xx_pin_update(val
, mask
, arg
,
1306 BCM281XX_PIN_SHIFT(HDMI
, MODE
),
1307 BCM281XX_PIN_MASK(HDMI
, MODE
));
1310 case PIN_CONFIG_INPUT_ENABLE
:
1311 /* inversed since register is for input _disable_ */
1312 arg
= (arg
>= 1 ? 0 : 1);
1313 bcm281xx_pin_update(val
, mask
, arg
,
1314 BCM281XX_PIN_SHIFT(HDMI
, INPUT_DIS
),
1315 BCM281XX_PIN_MASK(HDMI
, INPUT_DIS
));
1319 dev_err(pctldev
->dev
,
1320 "Unrecognized pin config %d for pin %s (%d).\n",
1321 param
, pdata
->pins
[pin
].name
, pin
);
1324 } /* switch config */
1325 } /* for each config */
1330 static int bcm281xx_pinctrl_pin_config_set(struct pinctrl_dev
*pctldev
,
1332 unsigned long *configs
,
1333 unsigned num_configs
)
1335 struct bcm281xx_pinctrl_data
*pdata
= pinctrl_dev_get_drvdata(pctldev
);
1336 enum bcm281xx_pin_type pin_type
;
1337 u32 offset
= 4 * pin
;
1338 u32 cfg_val
, cfg_mask
;
1343 pin_type
= pin_type_get(pctldev
, pin
);
1345 /* Different pins have different configuration options */
1347 case BCM281XX_PIN_TYPE_STD
:
1348 rc
= bcm281xx_std_pin_update(pctldev
, pin
, configs
,
1349 num_configs
, &cfg_val
, &cfg_mask
);
1352 case BCM281XX_PIN_TYPE_I2C
:
1353 rc
= bcm281xx_i2c_pin_update(pctldev
, pin
, configs
,
1354 num_configs
, &cfg_val
, &cfg_mask
);
1357 case BCM281XX_PIN_TYPE_HDMI
:
1358 rc
= bcm281xx_hdmi_pin_update(pctldev
, pin
, configs
,
1359 num_configs
, &cfg_val
, &cfg_mask
);
1363 dev_err(pctldev
->dev
, "Unknown pin type for pin %s (%d).\n",
1364 pdata
->pins
[pin
].name
, pin
);
1367 } /* switch pin type */
1372 dev_dbg(pctldev
->dev
,
1373 "%s(): Set pin %s (%d) with config 0x%x, mask 0x%x\n",
1374 __func__
, pdata
->pins
[pin
].name
, pin
, cfg_val
, cfg_mask
);
1376 rc
= regmap_update_bits(pdata
->regmap
, offset
, cfg_mask
, cfg_val
);
1378 dev_err(pctldev
->dev
,
1379 "Error updating register for pin %s (%d).\n",
1380 pdata
->pins
[pin
].name
, pin
);
1387 static const struct pinconf_ops bcm281xx_pinctrl_pinconf_ops
= {
1388 .pin_config_get
= bcm281xx_pinctrl_pin_config_get
,
1389 .pin_config_set
= bcm281xx_pinctrl_pin_config_set
,
1392 static struct pinctrl_desc bcm281xx_pinctrl_desc
= {
1393 /* name, pins, npins members initialized in probe function */
1394 .pctlops
= &bcm281xx_pinctrl_ops
,
1395 .pmxops
= &bcm281xx_pinctrl_pinmux_ops
,
1396 .confops
= &bcm281xx_pinctrl_pinconf_ops
,
1397 .owner
= THIS_MODULE
,
1400 static int __init
bcm281xx_pinctrl_probe(struct platform_device
*pdev
)
1402 struct bcm281xx_pinctrl_data
*pdata
= &bcm281xx_pinctrl
;
1403 struct resource
*res
;
1404 struct pinctrl_dev
*pctl
;
1406 /* So far We can assume there is only 1 bank of registers */
1407 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1408 pdata
->reg_base
= devm_ioremap_resource(&pdev
->dev
, res
);
1409 if (IS_ERR(pdata
->reg_base
)) {
1410 dev_err(&pdev
->dev
, "Failed to ioremap MEM resource\n");
1414 /* Initialize the dynamic part of pinctrl_desc */
1415 pdata
->regmap
= devm_regmap_init_mmio(&pdev
->dev
, pdata
->reg_base
,
1416 &bcm281xx_pinctrl_regmap_config
);
1417 if (IS_ERR(pdata
->regmap
)) {
1418 dev_err(&pdev
->dev
, "Regmap MMIO init failed.\n");
1422 bcm281xx_pinctrl_desc
.name
= dev_name(&pdev
->dev
);
1423 bcm281xx_pinctrl_desc
.pins
= bcm281xx_pinctrl
.pins
;
1424 bcm281xx_pinctrl_desc
.npins
= bcm281xx_pinctrl
.npins
;
1426 pctl
= devm_pinctrl_register(&pdev
->dev
, &bcm281xx_pinctrl_desc
, pdata
);
1428 dev_err(&pdev
->dev
, "Failed to register pinctrl\n");
1429 return PTR_ERR(pctl
);
1432 platform_set_drvdata(pdev
, pdata
);
1437 static const struct of_device_id bcm281xx_pinctrl_of_match
[] = {
1438 { .compatible
= "brcm,bcm11351-pinctrl", },
1442 static struct platform_driver bcm281xx_pinctrl_driver
= {
1444 .name
= "bcm281xx-pinctrl",
1445 .of_match_table
= bcm281xx_pinctrl_of_match
,
1448 builtin_platform_driver_probe(bcm281xx_pinctrl_driver
, bcm281xx_pinctrl_probe
);