1 // SPDX-License-Identifier: GPL-2.0-only 2 // Copyright (C) 2013-2017 Broadcom 3 4 #include <linux/err.h> 5 #include <linux/init.h> 6 #include <linux/io.h> 7 #include <linux/of.h> 8 #include <linux/platform_device.h> 9 #include <linux/regmap.h> 10 #include <linux/seq_file.h> 11 #include <linux/slab.h> 12 13 #include <linux/pinctrl/pinconf-generic.h> 14 #include <linux/pinctrl/pinconf.h> 15 #include <linux/pinctrl/pinctrl.h> 16 #include <linux/pinctrl/pinmux.h> 17 18 #include "../core.h" 19 #include "../pinctrl-utils.h" 20 21 /* BCM281XX Pin Control Registers Definitions */ 22 23 /* Function Select bits are the same for all pin control registers */ 24 #define BCM281XX_PIN_REG_F_SEL_MASK 0x0700 25 #define BCM281XX_PIN_REG_F_SEL_SHIFT 8 26 27 /* Standard pin register */ 28 #define BCM281XX_STD_PIN_REG_DRV_STR_MASK 0x0007 29 #define BCM281XX_STD_PIN_REG_DRV_STR_SHIFT 0 30 #define BCM281XX_STD_PIN_REG_INPUT_DIS_MASK 0x0008 31 #define BCM281XX_STD_PIN_REG_INPUT_DIS_SHIFT 3 32 #define BCM281XX_STD_PIN_REG_SLEW_MASK 0x0010 33 #define BCM281XX_STD_PIN_REG_SLEW_SHIFT 4 34 #define BCM281XX_STD_PIN_REG_PULL_UP_MASK 0x0020 35 #define BCM281XX_STD_PIN_REG_PULL_UP_SHIFT 5 36 #define BCM281XX_STD_PIN_REG_PULL_DN_MASK 0x0040 37 #define BCM281XX_STD_PIN_REG_PULL_DN_SHIFT 6 38 #define BCM281XX_STD_PIN_REG_HYST_MASK 0x0080 39 #define BCM281XX_STD_PIN_REG_HYST_SHIFT 7 40 41 /* I2C pin register */ 42 #define BCM281XX_I2C_PIN_REG_INPUT_DIS_MASK 0x0004 43 #define BCM281XX_I2C_PIN_REG_INPUT_DIS_SHIFT 2 44 #define BCM281XX_I2C_PIN_REG_SLEW_MASK 0x0008 45 #define BCM281XX_I2C_PIN_REG_SLEW_SHIFT 3 46 #define BCM281XX_I2C_PIN_REG_PULL_UP_STR_MASK 0x0070 47 #define BCM281XX_I2C_PIN_REG_PULL_UP_STR_SHIFT 4 48 49 /* HDMI pin register */ 50 #define BCM281XX_HDMI_PIN_REG_INPUT_DIS_MASK 0x0008 51 #define BCM281XX_HDMI_PIN_REG_INPUT_DIS_SHIFT 3 52 #define BCM281XX_HDMI_PIN_REG_MODE_MASK 0x0010 53 #define BCM281XX_HDMI_PIN_REG_MODE_SHIFT 4 54 55 /* BCM21664 access lock registers */ 56 #define BCM21664_WR_ACCESS_OFFSET 0x07F0 57 #define BCM21664_WR_ACCESS_PASSWORD 0xA5A501 58 #define BCM21664_ACCESS_LOCK_OFFSET(lock) (0x0780 + (lock * 4)) 59 #define BCM21664_ACCESS_LOCK_COUNT 5 60 61 /* 62 * bcm281xx_pin_type - types of pin register 63 */ 64 enum bcm281xx_pin_type { 65 BCM281XX_PIN_TYPE_UNKNOWN = 0, 66 BCM281XX_PIN_TYPE_STD, 67 BCM281XX_PIN_TYPE_I2C, 68 BCM281XX_PIN_TYPE_HDMI, 69 }; 70 71 static enum bcm281xx_pin_type std_pin = BCM281XX_PIN_TYPE_STD; 72 static enum bcm281xx_pin_type i2c_pin = BCM281XX_PIN_TYPE_I2C; 73 static enum bcm281xx_pin_type hdmi_pin = BCM281XX_PIN_TYPE_HDMI; 74 75 /* 76 * bcm281xx_pin_function- define pin function 77 */ 78 struct bcm281xx_pin_function { 79 const char *name; 80 const char * const *groups; 81 const unsigned int ngroups; 82 }; 83 84 /* 85 * Device types (used in bcm281xx_pinctrl_desc to differentiate 86 * the two device types from each other) 87 */ 88 enum bcm281xx_pinctrl_type { 89 BCM281XX_PINCTRL_TYPE, 90 BCM21664_PINCTRL_TYPE, 91 }; 92 93 /* 94 * bcm281xx_pinctrl_info - description of a pinctrl device supported 95 * by this driver, intended to be used as a provider of OF match data. 96 */ 97 struct bcm281xx_pinctrl_info { 98 enum bcm281xx_pinctrl_type device_type; 99 100 /* List of all pins */ 101 const struct pinctrl_pin_desc *pins; 102 unsigned int npins; 103 104 const struct bcm281xx_pin_function *functions; 105 unsigned int nfunctions; 106 107 const struct regmap_config *regmap_config; 108 }; 109 110 /* 111 * bcm281xx_pinctrl_data - Broadcom-specific pinctrl data 112 * @reg_base - base of pinctrl registers 113 */ 114 struct bcm281xx_pinctrl_data { 115 struct device *dev; 116 void __iomem *reg_base; 117 118 struct regmap *regmap; 119 const struct bcm281xx_pinctrl_info *info; 120 }; 121 122 /* 123 * Pin number definition. The order here must be the same as defined in the 124 * PADCTRLREG block in the RDB. 125 */ 126 #define BCM281XX_PIN_ADCSYNC 0 127 #define BCM281XX_PIN_BAT_RM 1 128 #define BCM281XX_PIN_BSC1_SCL 2 129 #define BCM281XX_PIN_BSC1_SDA 3 130 #define BCM281XX_PIN_BSC2_SCL 4 131 #define BCM281XX_PIN_BSC2_SDA 5 132 #define BCM281XX_PIN_CLASSGPWR 6 133 #define BCM281XX_PIN_CLK_CX8 7 134 #define BCM281XX_PIN_CLKOUT_0 8 135 #define BCM281XX_PIN_CLKOUT_1 9 136 #define BCM281XX_PIN_CLKOUT_2 10 137 #define BCM281XX_PIN_CLKOUT_3 11 138 #define BCM281XX_PIN_CLKREQ_IN_0 12 139 #define BCM281XX_PIN_CLKREQ_IN_1 13 140 #define BCM281XX_PIN_CWS_SYS_REQ1 14 141 #define BCM281XX_PIN_CWS_SYS_REQ2 15 142 #define BCM281XX_PIN_CWS_SYS_REQ3 16 143 #define BCM281XX_PIN_DIGMIC1_CLK 17 144 #define BCM281XX_PIN_DIGMIC1_DQ 18 145 #define BCM281XX_PIN_DIGMIC2_CLK 19 146 #define BCM281XX_PIN_DIGMIC2_DQ 20 147 #define BCM281XX_PIN_GPEN13 21 148 #define BCM281XX_PIN_GPEN14 22 149 #define BCM281XX_PIN_GPEN15 23 150 #define BCM281XX_PIN_GPIO00 24 151 #define BCM281XX_PIN_GPIO01 25 152 #define BCM281XX_PIN_GPIO02 26 153 #define BCM281XX_PIN_GPIO03 27 154 #define BCM281XX_PIN_GPIO04 28 155 #define BCM281XX_PIN_GPIO05 29 156 #define BCM281XX_PIN_GPIO06 30 157 #define BCM281XX_PIN_GPIO07 31 158 #define BCM281XX_PIN_GPIO08 32 159 #define BCM281XX_PIN_GPIO09 33 160 #define BCM281XX_PIN_GPIO10 34 161 #define BCM281XX_PIN_GPIO11 35 162 #define BCM281XX_PIN_GPIO12 36 163 #define BCM281XX_PIN_GPIO13 37 164 #define BCM281XX_PIN_GPIO14 38 165 #define BCM281XX_PIN_GPS_PABLANK 39 166 #define BCM281XX_PIN_GPS_TMARK 40 167 #define BCM281XX_PIN_HDMI_SCL 41 168 #define BCM281XX_PIN_HDMI_SDA 42 169 #define BCM281XX_PIN_IC_DM 43 170 #define BCM281XX_PIN_IC_DP 44 171 #define BCM281XX_PIN_KP_COL_IP_0 45 172 #define BCM281XX_PIN_KP_COL_IP_1 46 173 #define BCM281XX_PIN_KP_COL_IP_2 47 174 #define BCM281XX_PIN_KP_COL_IP_3 48 175 #define BCM281XX_PIN_KP_ROW_OP_0 49 176 #define BCM281XX_PIN_KP_ROW_OP_1 50 177 #define BCM281XX_PIN_KP_ROW_OP_2 51 178 #define BCM281XX_PIN_KP_ROW_OP_3 52 179 #define BCM281XX_PIN_LCD_B_0 53 180 #define BCM281XX_PIN_LCD_B_1 54 181 #define BCM281XX_PIN_LCD_B_2 55 182 #define BCM281XX_PIN_LCD_B_3 56 183 #define BCM281XX_PIN_LCD_B_4 57 184 #define BCM281XX_PIN_LCD_B_5 58 185 #define BCM281XX_PIN_LCD_B_6 59 186 #define BCM281XX_PIN_LCD_B_7 60 187 #define BCM281XX_PIN_LCD_G_0 61 188 #define BCM281XX_PIN_LCD_G_1 62 189 #define BCM281XX_PIN_LCD_G_2 63 190 #define BCM281XX_PIN_LCD_G_3 64 191 #define BCM281XX_PIN_LCD_G_4 65 192 #define BCM281XX_PIN_LCD_G_5 66 193 #define BCM281XX_PIN_LCD_G_6 67 194 #define BCM281XX_PIN_LCD_G_7 68 195 #define BCM281XX_PIN_LCD_HSYNC 69 196 #define BCM281XX_PIN_LCD_OE 70 197 #define BCM281XX_PIN_LCD_PCLK 71 198 #define BCM281XX_PIN_LCD_R_0 72 199 #define BCM281XX_PIN_LCD_R_1 73 200 #define BCM281XX_PIN_LCD_R_2 74 201 #define BCM281XX_PIN_LCD_R_3 75 202 #define BCM281XX_PIN_LCD_R_4 76 203 #define BCM281XX_PIN_LCD_R_5 77 204 #define BCM281XX_PIN_LCD_R_6 78 205 #define BCM281XX_PIN_LCD_R_7 79 206 #define BCM281XX_PIN_LCD_VSYNC 80 207 #define BCM281XX_PIN_MDMGPIO0 81 208 #define BCM281XX_PIN_MDMGPIO1 82 209 #define BCM281XX_PIN_MDMGPIO2 83 210 #define BCM281XX_PIN_MDMGPIO3 84 211 #define BCM281XX_PIN_MDMGPIO4 85 212 #define BCM281XX_PIN_MDMGPIO5 86 213 #define BCM281XX_PIN_MDMGPIO6 87 214 #define BCM281XX_PIN_MDMGPIO7 88 215 #define BCM281XX_PIN_MDMGPIO8 89 216 #define BCM281XX_PIN_MPHI_DATA_0 90 217 #define BCM281XX_PIN_MPHI_DATA_1 91 218 #define BCM281XX_PIN_MPHI_DATA_2 92 219 #define BCM281XX_PIN_MPHI_DATA_3 93 220 #define BCM281XX_PIN_MPHI_DATA_4 94 221 #define BCM281XX_PIN_MPHI_DATA_5 95 222 #define BCM281XX_PIN_MPHI_DATA_6 96 223 #define BCM281XX_PIN_MPHI_DATA_7 97 224 #define BCM281XX_PIN_MPHI_DATA_8 98 225 #define BCM281XX_PIN_MPHI_DATA_9 99 226 #define BCM281XX_PIN_MPHI_DATA_10 100 227 #define BCM281XX_PIN_MPHI_DATA_11 101 228 #define BCM281XX_PIN_MPHI_DATA_12 102 229 #define BCM281XX_PIN_MPHI_DATA_13 103 230 #define BCM281XX_PIN_MPHI_DATA_14 104 231 #define BCM281XX_PIN_MPHI_DATA_15 105 232 #define BCM281XX_PIN_MPHI_HA0 106 233 #define BCM281XX_PIN_MPHI_HAT0 107 234 #define BCM281XX_PIN_MPHI_HAT1 108 235 #define BCM281XX_PIN_MPHI_HCE0_N 109 236 #define BCM281XX_PIN_MPHI_HCE1_N 110 237 #define BCM281XX_PIN_MPHI_HRD_N 111 238 #define BCM281XX_PIN_MPHI_HWR_N 112 239 #define BCM281XX_PIN_MPHI_RUN0 113 240 #define BCM281XX_PIN_MPHI_RUN1 114 241 #define BCM281XX_PIN_MTX_SCAN_CLK 115 242 #define BCM281XX_PIN_MTX_SCAN_DATA 116 243 #define BCM281XX_PIN_NAND_AD_0 117 244 #define BCM281XX_PIN_NAND_AD_1 118 245 #define BCM281XX_PIN_NAND_AD_2 119 246 #define BCM281XX_PIN_NAND_AD_3 120 247 #define BCM281XX_PIN_NAND_AD_4 121 248 #define BCM281XX_PIN_NAND_AD_5 122 249 #define BCM281XX_PIN_NAND_AD_6 123 250 #define BCM281XX_PIN_NAND_AD_7 124 251 #define BCM281XX_PIN_NAND_ALE 125 252 #define BCM281XX_PIN_NAND_CEN_0 126 253 #define BCM281XX_PIN_NAND_CEN_1 127 254 #define BCM281XX_PIN_NAND_CLE 128 255 #define BCM281XX_PIN_NAND_OEN 129 256 #define BCM281XX_PIN_NAND_RDY_0 130 257 #define BCM281XX_PIN_NAND_RDY_1 131 258 #define BCM281XX_PIN_NAND_WEN 132 259 #define BCM281XX_PIN_NAND_WP 133 260 #define BCM281XX_PIN_PC1 134 261 #define BCM281XX_PIN_PC2 135 262 #define BCM281XX_PIN_PMU_INT 136 263 #define BCM281XX_PIN_PMU_SCL 137 264 #define BCM281XX_PIN_PMU_SDA 138 265 #define BCM281XX_PIN_RFST2G_MTSLOTEN3G 139 266 #define BCM281XX_PIN_RGMII_0_RX_CTL 140 267 #define BCM281XX_PIN_RGMII_0_RXC 141 268 #define BCM281XX_PIN_RGMII_0_RXD_0 142 269 #define BCM281XX_PIN_RGMII_0_RXD_1 143 270 #define BCM281XX_PIN_RGMII_0_RXD_2 144 271 #define BCM281XX_PIN_RGMII_0_RXD_3 145 272 #define BCM281XX_PIN_RGMII_0_TX_CTL 146 273 #define BCM281XX_PIN_RGMII_0_TXC 147 274 #define BCM281XX_PIN_RGMII_0_TXD_0 148 275 #define BCM281XX_PIN_RGMII_0_TXD_1 149 276 #define BCM281XX_PIN_RGMII_0_TXD_2 150 277 #define BCM281XX_PIN_RGMII_0_TXD_3 151 278 #define BCM281XX_PIN_RGMII_1_RX_CTL 152 279 #define BCM281XX_PIN_RGMII_1_RXC 153 280 #define BCM281XX_PIN_RGMII_1_RXD_0 154 281 #define BCM281XX_PIN_RGMII_1_RXD_1 155 282 #define BCM281XX_PIN_RGMII_1_RXD_2 156 283 #define BCM281XX_PIN_RGMII_1_RXD_3 157 284 #define BCM281XX_PIN_RGMII_1_TX_CTL 158 285 #define BCM281XX_PIN_RGMII_1_TXC 159 286 #define BCM281XX_PIN_RGMII_1_TXD_0 160 287 #define BCM281XX_PIN_RGMII_1_TXD_1 161 288 #define BCM281XX_PIN_RGMII_1_TXD_2 162 289 #define BCM281XX_PIN_RGMII_1_TXD_3 163 290 #define BCM281XX_PIN_RGMII_GPIO_0 164 291 #define BCM281XX_PIN_RGMII_GPIO_1 165 292 #define BCM281XX_PIN_RGMII_GPIO_2 166 293 #define BCM281XX_PIN_RGMII_GPIO_3 167 294 #define BCM281XX_PIN_RTXDATA2G_TXDATA3G1 168 295 #define BCM281XX_PIN_RTXEN2G_TXDATA3G2 169 296 #define BCM281XX_PIN_RXDATA3G0 170 297 #define BCM281XX_PIN_RXDATA3G1 171 298 #define BCM281XX_PIN_RXDATA3G2 172 299 #define BCM281XX_PIN_SDIO1_CLK 173 300 #define BCM281XX_PIN_SDIO1_CMD 174 301 #define BCM281XX_PIN_SDIO1_DATA_0 175 302 #define BCM281XX_PIN_SDIO1_DATA_1 176 303 #define BCM281XX_PIN_SDIO1_DATA_2 177 304 #define BCM281XX_PIN_SDIO1_DATA_3 178 305 #define BCM281XX_PIN_SDIO4_CLK 179 306 #define BCM281XX_PIN_SDIO4_CMD 180 307 #define BCM281XX_PIN_SDIO4_DATA_0 181 308 #define BCM281XX_PIN_SDIO4_DATA_1 182 309 #define BCM281XX_PIN_SDIO4_DATA_2 183 310 #define BCM281XX_PIN_SDIO4_DATA_3 184 311 #define BCM281XX_PIN_SIM_CLK 185 312 #define BCM281XX_PIN_SIM_DATA 186 313 #define BCM281XX_PIN_SIM_DET 187 314 #define BCM281XX_PIN_SIM_RESETN 188 315 #define BCM281XX_PIN_SIM2_CLK 189 316 #define BCM281XX_PIN_SIM2_DATA 190 317 #define BCM281XX_PIN_SIM2_DET 191 318 #define BCM281XX_PIN_SIM2_RESETN 192 319 #define BCM281XX_PIN_SRI_C 193 320 #define BCM281XX_PIN_SRI_D 194 321 #define BCM281XX_PIN_SRI_E 195 322 #define BCM281XX_PIN_SSP_EXTCLK 196 323 #define BCM281XX_PIN_SSP0_CLK 197 324 #define BCM281XX_PIN_SSP0_FS 198 325 #define BCM281XX_PIN_SSP0_RXD 199 326 #define BCM281XX_PIN_SSP0_TXD 200 327 #define BCM281XX_PIN_SSP2_CLK 201 328 #define BCM281XX_PIN_SSP2_FS_0 202 329 #define BCM281XX_PIN_SSP2_FS_1 203 330 #define BCM281XX_PIN_SSP2_FS_2 204 331 #define BCM281XX_PIN_SSP2_FS_3 205 332 #define BCM281XX_PIN_SSP2_RXD_0 206 333 #define BCM281XX_PIN_SSP2_RXD_1 207 334 #define BCM281XX_PIN_SSP2_TXD_0 208 335 #define BCM281XX_PIN_SSP2_TXD_1 209 336 #define BCM281XX_PIN_SSP3_CLK 210 337 #define BCM281XX_PIN_SSP3_FS 211 338 #define BCM281XX_PIN_SSP3_RXD 212 339 #define BCM281XX_PIN_SSP3_TXD 213 340 #define BCM281XX_PIN_SSP4_CLK 214 341 #define BCM281XX_PIN_SSP4_FS 215 342 #define BCM281XX_PIN_SSP4_RXD 216 343 #define BCM281XX_PIN_SSP4_TXD 217 344 #define BCM281XX_PIN_SSP5_CLK 218 345 #define BCM281XX_PIN_SSP5_FS 219 346 #define BCM281XX_PIN_SSP5_RXD 220 347 #define BCM281XX_PIN_SSP5_TXD 221 348 #define BCM281XX_PIN_SSP6_CLK 222 349 #define BCM281XX_PIN_SSP6_FS 223 350 #define BCM281XX_PIN_SSP6_RXD 224 351 #define BCM281XX_PIN_SSP6_TXD 225 352 #define BCM281XX_PIN_STAT_1 226 353 #define BCM281XX_PIN_STAT_2 227 354 #define BCM281XX_PIN_SYSCLKEN 228 355 #define BCM281XX_PIN_TRACECLK 229 356 #define BCM281XX_PIN_TRACEDT00 230 357 #define BCM281XX_PIN_TRACEDT01 231 358 #define BCM281XX_PIN_TRACEDT02 232 359 #define BCM281XX_PIN_TRACEDT03 233 360 #define BCM281XX_PIN_TRACEDT04 234 361 #define BCM281XX_PIN_TRACEDT05 235 362 #define BCM281XX_PIN_TRACEDT06 236 363 #define BCM281XX_PIN_TRACEDT07 237 364 #define BCM281XX_PIN_TRACEDT08 238 365 #define BCM281XX_PIN_TRACEDT09 239 366 #define BCM281XX_PIN_TRACEDT10 240 367 #define BCM281XX_PIN_TRACEDT11 241 368 #define BCM281XX_PIN_TRACEDT12 242 369 #define BCM281XX_PIN_TRACEDT13 243 370 #define BCM281XX_PIN_TRACEDT14 244 371 #define BCM281XX_PIN_TRACEDT15 245 372 #define BCM281XX_PIN_TXDATA3G0 246 373 #define BCM281XX_PIN_TXPWRIND 247 374 #define BCM281XX_PIN_UARTB1_UCTS 248 375 #define BCM281XX_PIN_UARTB1_URTS 249 376 #define BCM281XX_PIN_UARTB1_URXD 250 377 #define BCM281XX_PIN_UARTB1_UTXD 251 378 #define BCM281XX_PIN_UARTB2_URXD 252 379 #define BCM281XX_PIN_UARTB2_UTXD 253 380 #define BCM281XX_PIN_UARTB3_UCTS 254 381 #define BCM281XX_PIN_UARTB3_URTS 255 382 #define BCM281XX_PIN_UARTB3_URXD 256 383 #define BCM281XX_PIN_UARTB3_UTXD 257 384 #define BCM281XX_PIN_UARTB4_UCTS 258 385 #define BCM281XX_PIN_UARTB4_URTS 259 386 #define BCM281XX_PIN_UARTB4_URXD 260 387 #define BCM281XX_PIN_UARTB4_UTXD 261 388 #define BCM281XX_PIN_VC_CAM1_SCL 262 389 #define BCM281XX_PIN_VC_CAM1_SDA 263 390 #define BCM281XX_PIN_VC_CAM2_SCL 264 391 #define BCM281XX_PIN_VC_CAM2_SDA 265 392 #define BCM281XX_PIN_VC_CAM3_SCL 266 393 #define BCM281XX_PIN_VC_CAM3_SDA 267 394 395 #define BCM281XX_PIN_DESC(a, b, c) \ 396 { .number = a, .name = b, .drv_data = &c##_pin } 397 398 /* 399 * Pin description definition. The order here must be the same as defined in 400 * the PADCTRLREG block in the RDB, since the pin number is used as an index 401 * into this array. 402 */ 403 static const struct pinctrl_pin_desc bcm281xx_pinctrl_pins[] = { 404 BCM281XX_PIN_DESC(BCM281XX_PIN_ADCSYNC, "adcsync", std), 405 BCM281XX_PIN_DESC(BCM281XX_PIN_BAT_RM, "bat_rm", std), 406 BCM281XX_PIN_DESC(BCM281XX_PIN_BSC1_SCL, "bsc1_scl", i2c), 407 BCM281XX_PIN_DESC(BCM281XX_PIN_BSC1_SDA, "bsc1_sda", i2c), 408 BCM281XX_PIN_DESC(BCM281XX_PIN_BSC2_SCL, "bsc2_scl", i2c), 409 BCM281XX_PIN_DESC(BCM281XX_PIN_BSC2_SDA, "bsc2_sda", i2c), 410 BCM281XX_PIN_DESC(BCM281XX_PIN_CLASSGPWR, "classgpwr", std), 411 BCM281XX_PIN_DESC(BCM281XX_PIN_CLK_CX8, "clk_cx8", std), 412 BCM281XX_PIN_DESC(BCM281XX_PIN_CLKOUT_0, "clkout_0", std), 413 BCM281XX_PIN_DESC(BCM281XX_PIN_CLKOUT_1, "clkout_1", std), 414 BCM281XX_PIN_DESC(BCM281XX_PIN_CLKOUT_2, "clkout_2", std), 415 BCM281XX_PIN_DESC(BCM281XX_PIN_CLKOUT_3, "clkout_3", std), 416 BCM281XX_PIN_DESC(BCM281XX_PIN_CLKREQ_IN_0, "clkreq_in_0", std), 417 BCM281XX_PIN_DESC(BCM281XX_PIN_CLKREQ_IN_1, "clkreq_in_1", std), 418 BCM281XX_PIN_DESC(BCM281XX_PIN_CWS_SYS_REQ1, "cws_sys_req1", std), 419 BCM281XX_PIN_DESC(BCM281XX_PIN_CWS_SYS_REQ2, "cws_sys_req2", std), 420 BCM281XX_PIN_DESC(BCM281XX_PIN_CWS_SYS_REQ3, "cws_sys_req3", std), 421 BCM281XX_PIN_DESC(BCM281XX_PIN_DIGMIC1_CLK, "digmic1_clk", std), 422 BCM281XX_PIN_DESC(BCM281XX_PIN_DIGMIC1_DQ, "digmic1_dq", std), 423 BCM281XX_PIN_DESC(BCM281XX_PIN_DIGMIC2_CLK, "digmic2_clk", std), 424 BCM281XX_PIN_DESC(BCM281XX_PIN_DIGMIC2_DQ, "digmic2_dq", std), 425 BCM281XX_PIN_DESC(BCM281XX_PIN_GPEN13, "gpen13", std), 426 BCM281XX_PIN_DESC(BCM281XX_PIN_GPEN14, "gpen14", std), 427 BCM281XX_PIN_DESC(BCM281XX_PIN_GPEN15, "gpen15", std), 428 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO00, "gpio00", std), 429 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO01, "gpio01", std), 430 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO02, "gpio02", std), 431 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO03, "gpio03", std), 432 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO04, "gpio04", std), 433 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO05, "gpio05", std), 434 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO06, "gpio06", std), 435 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO07, "gpio07", std), 436 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO08, "gpio08", std), 437 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO09, "gpio09", std), 438 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO10, "gpio10", std), 439 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO11, "gpio11", std), 440 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO12, "gpio12", std), 441 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO13, "gpio13", std), 442 BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO14, "gpio14", std), 443 BCM281XX_PIN_DESC(BCM281XX_PIN_GPS_PABLANK, "gps_pablank", std), 444 BCM281XX_PIN_DESC(BCM281XX_PIN_GPS_TMARK, "gps_tmark", std), 445 BCM281XX_PIN_DESC(BCM281XX_PIN_HDMI_SCL, "hdmi_scl", hdmi), 446 BCM281XX_PIN_DESC(BCM281XX_PIN_HDMI_SDA, "hdmi_sda", hdmi), 447 BCM281XX_PIN_DESC(BCM281XX_PIN_IC_DM, "ic_dm", std), 448 BCM281XX_PIN_DESC(BCM281XX_PIN_IC_DP, "ic_dp", std), 449 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_COL_IP_0, "kp_col_ip_0", std), 450 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_COL_IP_1, "kp_col_ip_1", std), 451 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_COL_IP_2, "kp_col_ip_2", std), 452 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_COL_IP_3, "kp_col_ip_3", std), 453 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_ROW_OP_0, "kp_row_op_0", std), 454 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_ROW_OP_1, "kp_row_op_1", std), 455 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_ROW_OP_2, "kp_row_op_2", std), 456 BCM281XX_PIN_DESC(BCM281XX_PIN_KP_ROW_OP_3, "kp_row_op_3", std), 457 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_0, "lcd_b_0", std), 458 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_1, "lcd_b_1", std), 459 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_2, "lcd_b_2", std), 460 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_3, "lcd_b_3", std), 461 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_4, "lcd_b_4", std), 462 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_5, "lcd_b_5", std), 463 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_6, "lcd_b_6", std), 464 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_7, "lcd_b_7", std), 465 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_0, "lcd_g_0", std), 466 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_1, "lcd_g_1", std), 467 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_2, "lcd_g_2", std), 468 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_3, "lcd_g_3", std), 469 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_4, "lcd_g_4", std), 470 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_5, "lcd_g_5", std), 471 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_6, "lcd_g_6", std), 472 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_7, "lcd_g_7", std), 473 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_HSYNC, "lcd_hsync", std), 474 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_OE, "lcd_oe", std), 475 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_PCLK, "lcd_pclk", std), 476 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_0, "lcd_r_0", std), 477 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_1, "lcd_r_1", std), 478 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_2, "lcd_r_2", std), 479 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_3, "lcd_r_3", std), 480 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_4, "lcd_r_4", std), 481 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_5, "lcd_r_5", std), 482 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_6, "lcd_r_6", std), 483 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_7, "lcd_r_7", std), 484 BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_VSYNC, "lcd_vsync", std), 485 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO0, "mdmgpio0", std), 486 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO1, "mdmgpio1", std), 487 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO2, "mdmgpio2", std), 488 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO3, "mdmgpio3", std), 489 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO4, "mdmgpio4", std), 490 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO5, "mdmgpio5", std), 491 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO6, "mdmgpio6", std), 492 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO7, "mdmgpio7", std), 493 BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO8, "mdmgpio8", std), 494 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_0, "mphi_data_0", std), 495 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_1, "mphi_data_1", std), 496 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_2, "mphi_data_2", std), 497 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_3, "mphi_data_3", std), 498 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_4, "mphi_data_4", std), 499 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_5, "mphi_data_5", std), 500 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_6, "mphi_data_6", std), 501 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_7, "mphi_data_7", std), 502 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_8, "mphi_data_8", std), 503 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_9, "mphi_data_9", std), 504 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_10, "mphi_data_10", std), 505 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_11, "mphi_data_11", std), 506 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_12, "mphi_data_12", std), 507 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_13, "mphi_data_13", std), 508 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_14, "mphi_data_14", std), 509 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_15, "mphi_data_15", std), 510 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HA0, "mphi_ha0", std), 511 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HAT0, "mphi_hat0", std), 512 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HAT1, "mphi_hat1", std), 513 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HCE0_N, "mphi_hce0_n", std), 514 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HCE1_N, "mphi_hce1_n", std), 515 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HRD_N, "mphi_hrd_n", std), 516 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HWR_N, "mphi_hwr_n", std), 517 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_RUN0, "mphi_run0", std), 518 BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_RUN1, "mphi_run1", std), 519 BCM281XX_PIN_DESC(BCM281XX_PIN_MTX_SCAN_CLK, "mtx_scan_clk", std), 520 BCM281XX_PIN_DESC(BCM281XX_PIN_MTX_SCAN_DATA, "mtx_scan_data", std), 521 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_0, "nand_ad_0", std), 522 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_1, "nand_ad_1", std), 523 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_2, "nand_ad_2", std), 524 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_3, "nand_ad_3", std), 525 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_4, "nand_ad_4", std), 526 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_5, "nand_ad_5", std), 527 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_6, "nand_ad_6", std), 528 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_7, "nand_ad_7", std), 529 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_ALE, "nand_ale", std), 530 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_CEN_0, "nand_cen_0", std), 531 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_CEN_1, "nand_cen_1", std), 532 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_CLE, "nand_cle", std), 533 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_OEN, "nand_oen", std), 534 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_RDY_0, "nand_rdy_0", std), 535 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_RDY_1, "nand_rdy_1", std), 536 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_WEN, "nand_wen", std), 537 BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_WP, "nand_wp", std), 538 BCM281XX_PIN_DESC(BCM281XX_PIN_PC1, "pc1", std), 539 BCM281XX_PIN_DESC(BCM281XX_PIN_PC2, "pc2", std), 540 BCM281XX_PIN_DESC(BCM281XX_PIN_PMU_INT, "pmu_int", std), 541 BCM281XX_PIN_DESC(BCM281XX_PIN_PMU_SCL, "pmu_scl", i2c), 542 BCM281XX_PIN_DESC(BCM281XX_PIN_PMU_SDA, "pmu_sda", i2c), 543 BCM281XX_PIN_DESC(BCM281XX_PIN_RFST2G_MTSLOTEN3G, "rfst2g_mtsloten3g", 544 std), 545 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RX_CTL, "rgmii_0_rx_ctl", std), 546 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXC, "rgmii_0_rxc", std), 547 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXD_0, "rgmii_0_rxd_0", std), 548 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXD_1, "rgmii_0_rxd_1", std), 549 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXD_2, "rgmii_0_rxd_2", std), 550 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXD_3, "rgmii_0_rxd_3", std), 551 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TX_CTL, "rgmii_0_tx_ctl", std), 552 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXC, "rgmii_0_txc", std), 553 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXD_0, "rgmii_0_txd_0", std), 554 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXD_1, "rgmii_0_txd_1", std), 555 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXD_2, "rgmii_0_txd_2", std), 556 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXD_3, "rgmii_0_txd_3", std), 557 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RX_CTL, "rgmii_1_rx_ctl", std), 558 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXC, "rgmii_1_rxc", std), 559 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXD_0, "rgmii_1_rxd_0", std), 560 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXD_1, "rgmii_1_rxd_1", std), 561 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXD_2, "rgmii_1_rxd_2", std), 562 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXD_3, "rgmii_1_rxd_3", std), 563 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TX_CTL, "rgmii_1_tx_ctl", std), 564 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXC, "rgmii_1_txc", std), 565 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXD_0, "rgmii_1_txd_0", std), 566 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXD_1, "rgmii_1_txd_1", std), 567 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXD_2, "rgmii_1_txd_2", std), 568 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXD_3, "rgmii_1_txd_3", std), 569 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_GPIO_0, "rgmii_gpio_0", std), 570 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_GPIO_1, "rgmii_gpio_1", std), 571 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_GPIO_2, "rgmii_gpio_2", std), 572 BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_GPIO_3, "rgmii_gpio_3", std), 573 BCM281XX_PIN_DESC(BCM281XX_PIN_RTXDATA2G_TXDATA3G1, 574 "rtxdata2g_txdata3g1", std), 575 BCM281XX_PIN_DESC(BCM281XX_PIN_RTXEN2G_TXDATA3G2, "rtxen2g_txdata3g2", 576 std), 577 BCM281XX_PIN_DESC(BCM281XX_PIN_RXDATA3G0, "rxdata3g0", std), 578 BCM281XX_PIN_DESC(BCM281XX_PIN_RXDATA3G1, "rxdata3g1", std), 579 BCM281XX_PIN_DESC(BCM281XX_PIN_RXDATA3G2, "rxdata3g2", std), 580 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_CLK, "sdio1_clk", std), 581 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_CMD, "sdio1_cmd", std), 582 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_DATA_0, "sdio1_data_0", std), 583 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_DATA_1, "sdio1_data_1", std), 584 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_DATA_2, "sdio1_data_2", std), 585 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_DATA_3, "sdio1_data_3", std), 586 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_CLK, "sdio4_clk", std), 587 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_CMD, "sdio4_cmd", std), 588 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_DATA_0, "sdio4_data_0", std), 589 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_DATA_1, "sdio4_data_1", std), 590 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_DATA_2, "sdio4_data_2", std), 591 BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_DATA_3, "sdio4_data_3", std), 592 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM_CLK, "sim_clk", std), 593 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM_DATA, "sim_data", std), 594 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM_DET, "sim_det", std), 595 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM_RESETN, "sim_resetn", std), 596 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM2_CLK, "sim2_clk", std), 597 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM2_DATA, "sim2_data", std), 598 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM2_DET, "sim2_det", std), 599 BCM281XX_PIN_DESC(BCM281XX_PIN_SIM2_RESETN, "sim2_resetn", std), 600 BCM281XX_PIN_DESC(BCM281XX_PIN_SRI_C, "sri_c", std), 601 BCM281XX_PIN_DESC(BCM281XX_PIN_SRI_D, "sri_d", std), 602 BCM281XX_PIN_DESC(BCM281XX_PIN_SRI_E, "sri_e", std), 603 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP_EXTCLK, "ssp_extclk", std), 604 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP0_CLK, "ssp0_clk", std), 605 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP0_FS, "ssp0_fs", std), 606 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP0_RXD, "ssp0_rxd", std), 607 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP0_TXD, "ssp0_txd", std), 608 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_CLK, "ssp2_clk", std), 609 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_FS_0, "ssp2_fs_0", std), 610 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_FS_1, "ssp2_fs_1", std), 611 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_FS_2, "ssp2_fs_2", std), 612 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_FS_3, "ssp2_fs_3", std), 613 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_RXD_0, "ssp2_rxd_0", std), 614 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_RXD_1, "ssp2_rxd_1", std), 615 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_TXD_0, "ssp2_txd_0", std), 616 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_TXD_1, "ssp2_txd_1", std), 617 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP3_CLK, "ssp3_clk", std), 618 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP3_FS, "ssp3_fs", std), 619 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP3_RXD, "ssp3_rxd", std), 620 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP3_TXD, "ssp3_txd", std), 621 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP4_CLK, "ssp4_clk", std), 622 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP4_FS, "ssp4_fs", std), 623 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP4_RXD, "ssp4_rxd", std), 624 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP4_TXD, "ssp4_txd", std), 625 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP5_CLK, "ssp5_clk", std), 626 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP5_FS, "ssp5_fs", std), 627 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP5_RXD, "ssp5_rxd", std), 628 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP5_TXD, "ssp5_txd", std), 629 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP6_CLK, "ssp6_clk", std), 630 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP6_FS, "ssp6_fs", std), 631 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP6_RXD, "ssp6_rxd", std), 632 BCM281XX_PIN_DESC(BCM281XX_PIN_SSP6_TXD, "ssp6_txd", std), 633 BCM281XX_PIN_DESC(BCM281XX_PIN_STAT_1, "stat_1", std), 634 BCM281XX_PIN_DESC(BCM281XX_PIN_STAT_2, "stat_2", std), 635 BCM281XX_PIN_DESC(BCM281XX_PIN_SYSCLKEN, "sysclken", std), 636 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACECLK, "traceclk", std), 637 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT00, "tracedt00", std), 638 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT01, "tracedt01", std), 639 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT02, "tracedt02", std), 640 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT03, "tracedt03", std), 641 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT04, "tracedt04", std), 642 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT05, "tracedt05", std), 643 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT06, "tracedt06", std), 644 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT07, "tracedt07", std), 645 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT08, "tracedt08", std), 646 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT09, "tracedt09", std), 647 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT10, "tracedt10", std), 648 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT11, "tracedt11", std), 649 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT12, "tracedt12", std), 650 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT13, "tracedt13", std), 651 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT14, "tracedt14", std), 652 BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT15, "tracedt15", std), 653 BCM281XX_PIN_DESC(BCM281XX_PIN_TXDATA3G0, "txdata3g0", std), 654 BCM281XX_PIN_DESC(BCM281XX_PIN_TXPWRIND, "txpwrind", std), 655 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB1_UCTS, "uartb1_ucts", std), 656 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB1_URTS, "uartb1_urts", std), 657 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB1_URXD, "uartb1_urxd", std), 658 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB1_UTXD, "uartb1_utxd", std), 659 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB2_URXD, "uartb2_urxd", std), 660 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB2_UTXD, "uartb2_utxd", std), 661 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB3_UCTS, "uartb3_ucts", std), 662 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB3_URTS, "uartb3_urts", std), 663 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB3_URXD, "uartb3_urxd", std), 664 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB3_UTXD, "uartb3_utxd", std), 665 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB4_UCTS, "uartb4_ucts", std), 666 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB4_URTS, "uartb4_urts", std), 667 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB4_URXD, "uartb4_urxd", std), 668 BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB4_UTXD, "uartb4_utxd", std), 669 BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM1_SCL, "vc_cam1_scl", i2c), 670 BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM1_SDA, "vc_cam1_sda", i2c), 671 BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM2_SCL, "vc_cam2_scl", i2c), 672 BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM2_SDA, "vc_cam2_sda", i2c), 673 BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM3_SCL, "vc_cam3_scl", i2c), 674 BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM3_SDA, "vc_cam3_sda", i2c), 675 }; 676 677 static const char * const bcm281xx_alt_groups[] = { 678 "adcsync", 679 "bat_rm", 680 "bsc1_scl", 681 "bsc1_sda", 682 "bsc2_scl", 683 "bsc2_sda", 684 "classgpwr", 685 "clk_cx8", 686 "clkout_0", 687 "clkout_1", 688 "clkout_2", 689 "clkout_3", 690 "clkreq_in_0", 691 "clkreq_in_1", 692 "cws_sys_req1", 693 "cws_sys_req2", 694 "cws_sys_req3", 695 "digmic1_clk", 696 "digmic1_dq", 697 "digmic2_clk", 698 "digmic2_dq", 699 "gpen13", 700 "gpen14", 701 "gpen15", 702 "gpio00", 703 "gpio01", 704 "gpio02", 705 "gpio03", 706 "gpio04", 707 "gpio05", 708 "gpio06", 709 "gpio07", 710 "gpio08", 711 "gpio09", 712 "gpio10", 713 "gpio11", 714 "gpio12", 715 "gpio13", 716 "gpio14", 717 "gps_pablank", 718 "gps_tmark", 719 "hdmi_scl", 720 "hdmi_sda", 721 "ic_dm", 722 "ic_dp", 723 "kp_col_ip_0", 724 "kp_col_ip_1", 725 "kp_col_ip_2", 726 "kp_col_ip_3", 727 "kp_row_op_0", 728 "kp_row_op_1", 729 "kp_row_op_2", 730 "kp_row_op_3", 731 "lcd_b_0", 732 "lcd_b_1", 733 "lcd_b_2", 734 "lcd_b_3", 735 "lcd_b_4", 736 "lcd_b_5", 737 "lcd_b_6", 738 "lcd_b_7", 739 "lcd_g_0", 740 "lcd_g_1", 741 "lcd_g_2", 742 "lcd_g_3", 743 "lcd_g_4", 744 "lcd_g_5", 745 "lcd_g_6", 746 "lcd_g_7", 747 "lcd_hsync", 748 "lcd_oe", 749 "lcd_pclk", 750 "lcd_r_0", 751 "lcd_r_1", 752 "lcd_r_2", 753 "lcd_r_3", 754 "lcd_r_4", 755 "lcd_r_5", 756 "lcd_r_6", 757 "lcd_r_7", 758 "lcd_vsync", 759 "mdmgpio0", 760 "mdmgpio1", 761 "mdmgpio2", 762 "mdmgpio3", 763 "mdmgpio4", 764 "mdmgpio5", 765 "mdmgpio6", 766 "mdmgpio7", 767 "mdmgpio8", 768 "mphi_data_0", 769 "mphi_data_1", 770 "mphi_data_2", 771 "mphi_data_3", 772 "mphi_data_4", 773 "mphi_data_5", 774 "mphi_data_6", 775 "mphi_data_7", 776 "mphi_data_8", 777 "mphi_data_9", 778 "mphi_data_10", 779 "mphi_data_11", 780 "mphi_data_12", 781 "mphi_data_13", 782 "mphi_data_14", 783 "mphi_data_15", 784 "mphi_ha0", 785 "mphi_hat0", 786 "mphi_hat1", 787 "mphi_hce0_n", 788 "mphi_hce1_n", 789 "mphi_hrd_n", 790 "mphi_hwr_n", 791 "mphi_run0", 792 "mphi_run1", 793 "mtx_scan_clk", 794 "mtx_scan_data", 795 "nand_ad_0", 796 "nand_ad_1", 797 "nand_ad_2", 798 "nand_ad_3", 799 "nand_ad_4", 800 "nand_ad_5", 801 "nand_ad_6", 802 "nand_ad_7", 803 "nand_ale", 804 "nand_cen_0", 805 "nand_cen_1", 806 "nand_cle", 807 "nand_oen", 808 "nand_rdy_0", 809 "nand_rdy_1", 810 "nand_wen", 811 "nand_wp", 812 "pc1", 813 "pc2", 814 "pmu_int", 815 "pmu_scl", 816 "pmu_sda", 817 "rfst2g_mtsloten3g", 818 "rgmii_0_rx_ctl", 819 "rgmii_0_rxc", 820 "rgmii_0_rxd_0", 821 "rgmii_0_rxd_1", 822 "rgmii_0_rxd_2", 823 "rgmii_0_rxd_3", 824 "rgmii_0_tx_ctl", 825 "rgmii_0_txc", 826 "rgmii_0_txd_0", 827 "rgmii_0_txd_1", 828 "rgmii_0_txd_2", 829 "rgmii_0_txd_3", 830 "rgmii_1_rx_ctl", 831 "rgmii_1_rxc", 832 "rgmii_1_rxd_0", 833 "rgmii_1_rxd_1", 834 "rgmii_1_rxd_2", 835 "rgmii_1_rxd_3", 836 "rgmii_1_tx_ctl", 837 "rgmii_1_txc", 838 "rgmii_1_txd_0", 839 "rgmii_1_txd_1", 840 "rgmii_1_txd_2", 841 "rgmii_1_txd_3", 842 "rgmii_gpio_0", 843 "rgmii_gpio_1", 844 "rgmii_gpio_2", 845 "rgmii_gpio_3", 846 "rtxdata2g_txdata3g1", 847 "rtxen2g_txdata3g2", 848 "rxdata3g0", 849 "rxdata3g1", 850 "rxdata3g2", 851 "sdio1_clk", 852 "sdio1_cmd", 853 "sdio1_data_0", 854 "sdio1_data_1", 855 "sdio1_data_2", 856 "sdio1_data_3", 857 "sdio4_clk", 858 "sdio4_cmd", 859 "sdio4_data_0", 860 "sdio4_data_1", 861 "sdio4_data_2", 862 "sdio4_data_3", 863 "sim_clk", 864 "sim_data", 865 "sim_det", 866 "sim_resetn", 867 "sim2_clk", 868 "sim2_data", 869 "sim2_det", 870 "sim2_resetn", 871 "sri_c", 872 "sri_d", 873 "sri_e", 874 "ssp_extclk", 875 "ssp0_clk", 876 "ssp0_fs", 877 "ssp0_rxd", 878 "ssp0_txd", 879 "ssp2_clk", 880 "ssp2_fs_0", 881 "ssp2_fs_1", 882 "ssp2_fs_2", 883 "ssp2_fs_3", 884 "ssp2_rxd_0", 885 "ssp2_rxd_1", 886 "ssp2_txd_0", 887 "ssp2_txd_1", 888 "ssp3_clk", 889 "ssp3_fs", 890 "ssp3_rxd", 891 "ssp3_txd", 892 "ssp4_clk", 893 "ssp4_fs", 894 "ssp4_rxd", 895 "ssp4_txd", 896 "ssp5_clk", 897 "ssp5_fs", 898 "ssp5_rxd", 899 "ssp5_txd", 900 "ssp6_clk", 901 "ssp6_fs", 902 "ssp6_rxd", 903 "ssp6_txd", 904 "stat_1", 905 "stat_2", 906 "sysclken", 907 "traceclk", 908 "tracedt00", 909 "tracedt01", 910 "tracedt02", 911 "tracedt03", 912 "tracedt04", 913 "tracedt05", 914 "tracedt06", 915 "tracedt07", 916 "tracedt08", 917 "tracedt09", 918 "tracedt10", 919 "tracedt11", 920 "tracedt12", 921 "tracedt13", 922 "tracedt14", 923 "tracedt15", 924 "txdata3g0", 925 "txpwrind", 926 "uartb1_ucts", 927 "uartb1_urts", 928 "uartb1_urxd", 929 "uartb1_utxd", 930 "uartb2_urxd", 931 "uartb2_utxd", 932 "uartb3_ucts", 933 "uartb3_urts", 934 "uartb3_urxd", 935 "uartb3_utxd", 936 "uartb4_ucts", 937 "uartb4_urts", 938 "uartb4_urxd", 939 "uartb4_utxd", 940 "vc_cam1_scl", 941 "vc_cam1_sda", 942 "vc_cam2_scl", 943 "vc_cam2_sda", 944 "vc_cam3_scl", 945 "vc_cam3_sda", 946 }; 947 948 /* Every pin can implement all ALT1-ALT4 functions */ 949 #define BCM281XX_PIN_FUNCTION(fcn_name) \ 950 { \ 951 .name = #fcn_name, \ 952 .groups = bcm281xx_alt_groups, \ 953 .ngroups = ARRAY_SIZE(bcm281xx_alt_groups), \ 954 } 955 956 static const struct bcm281xx_pin_function bcm281xx_functions[] = { 957 BCM281XX_PIN_FUNCTION(alt1), 958 BCM281XX_PIN_FUNCTION(alt2), 959 BCM281XX_PIN_FUNCTION(alt3), 960 BCM281XX_PIN_FUNCTION(alt4), 961 }; 962 963 static const struct regmap_config bcm281xx_pinctrl_regmap_config = { 964 .reg_bits = 32, 965 .reg_stride = 4, 966 .val_bits = 32, 967 .max_register = BCM281XX_PIN_VC_CAM3_SDA * 4, 968 }; 969 970 static const struct bcm281xx_pinctrl_info bcm281xx_pinctrl = { 971 .device_type = BCM281XX_PINCTRL_TYPE, 972 973 .pins = bcm281xx_pinctrl_pins, 974 .npins = ARRAY_SIZE(bcm281xx_pinctrl_pins), 975 .functions = bcm281xx_functions, 976 .nfunctions = ARRAY_SIZE(bcm281xx_functions), 977 978 .regmap_config = &bcm281xx_pinctrl_regmap_config, 979 }; 980 981 /* BCM21664 data */ 982 #define BCM21664_PIN_ADCSYN 0 983 #define BCM21664_PIN_BATRM 1 984 #define BCM21664_PIN_BSC1CLK 2 985 #define BCM21664_PIN_BSC1DAT 3 986 #define BCM21664_PIN_CAMCS0 4 987 #define BCM21664_PIN_CAMCS1 5 988 #define BCM21664_PIN_CLK32K 6 989 #define BCM21664_PIN_CLK_CX8 7 990 #define BCM21664_PIN_DCLK1 8 991 #define BCM21664_PIN_DCLK4 9 992 #define BCM21664_PIN_DCLKREQ1 10 993 #define BCM21664_PIN_DCLKREQ4 11 994 #define BCM21664_PIN_DMIC0CLK 12 995 #define BCM21664_PIN_DMIC0DQ 13 996 #define BCM21664_PIN_DSI0TE 14 997 #define BCM21664_PIN_GPIO00 15 998 #define BCM21664_PIN_GPIO01 16 999 #define BCM21664_PIN_GPIO02 17 1000 #define BCM21664_PIN_GPIO03 18 1001 #define BCM21664_PIN_GPIO04 19 1002 #define BCM21664_PIN_GPIO05 20 1003 #define BCM21664_PIN_GPIO06 21 1004 #define BCM21664_PIN_GPIO07 22 1005 #define BCM21664_PIN_GPIO08 23 1006 #define BCM21664_PIN_GPIO09 24 1007 #define BCM21664_PIN_GPIO10 25 1008 #define BCM21664_PIN_GPIO11 26 1009 #define BCM21664_PIN_GPIO12 27 1010 #define BCM21664_PIN_GPIO13 28 1011 #define BCM21664_PIN_GPIO14 29 1012 #define BCM21664_PIN_GPIO15 30 1013 #define BCM21664_PIN_GPIO16 31 1014 #define BCM21664_PIN_GPIO17 32 1015 #define BCM21664_PIN_GPIO18 33 1016 #define BCM21664_PIN_GPIO19 34 1017 #define BCM21664_PIN_GPIO20 35 1018 #define BCM21664_PIN_GPIO21 36 1019 #define BCM21664_PIN_GPIO22 37 1020 #define BCM21664_PIN_GPIO23 38 1021 #define BCM21664_PIN_GPIO24 39 1022 #define BCM21664_PIN_GPIO25 40 1023 #define BCM21664_PIN_GPIO26 41 1024 #define BCM21664_PIN_GPIO27 42 1025 #define BCM21664_PIN_GPIO28 43 1026 #define BCM21664_PIN_GPIO32 44 1027 #define BCM21664_PIN_GPIO33 45 1028 #define BCM21664_PIN_GPIO34 46 1029 #define BCM21664_PIN_GPS_CALREQ 47 1030 #define BCM21664_PIN_GPS_HOSTREQ 48 1031 #define BCM21664_PIN_GPS_PABLANK 49 1032 #define BCM21664_PIN_GPS_TMARK 50 1033 #define BCM21664_PIN_ICUSBDM 51 1034 #define BCM21664_PIN_ICUSBDP 52 1035 #define BCM21664_PIN_LCDCS0 53 1036 #define BCM21664_PIN_LCDRES 54 1037 #define BCM21664_PIN_LCDSCL 55 1038 #define BCM21664_PIN_LCDSDA 56 1039 #define BCM21664_PIN_LCDTE 57 1040 #define BCM21664_PIN_MDMGPIO00 58 1041 #define BCM21664_PIN_MDMGPIO01 59 1042 #define BCM21664_PIN_MDMGPIO02 60 1043 #define BCM21664_PIN_MDMGPIO03 61 1044 #define BCM21664_PIN_MDMGPIO04 62 1045 #define BCM21664_PIN_MDMGPIO05 63 1046 #define BCM21664_PIN_MDMGPIO06 64 1047 #define BCM21664_PIN_MDMGPIO07 65 1048 #define BCM21664_PIN_MDMGPIO08 66 1049 #define BCM21664_PIN_MMC0CK 67 1050 #define BCM21664_PIN_MMC0CMD 68 1051 #define BCM21664_PIN_MMC0DAT0 69 1052 #define BCM21664_PIN_MMC0DAT1 70 1053 #define BCM21664_PIN_MMC0DAT2 71 1054 #define BCM21664_PIN_MMC0DAT3 72 1055 #define BCM21664_PIN_MMC0DAT4 73 1056 #define BCM21664_PIN_MMC0DAT5 74 1057 #define BCM21664_PIN_MMC0DAT6 75 1058 #define BCM21664_PIN_MMC0DAT7 76 1059 #define BCM21664_PIN_MMC0RST 77 1060 #define BCM21664_PIN_MMC1CK 78 1061 #define BCM21664_PIN_MMC1CMD 79 1062 #define BCM21664_PIN_MMC1DAT0 80 1063 #define BCM21664_PIN_MMC1DAT1 81 1064 #define BCM21664_PIN_MMC1DAT2 82 1065 #define BCM21664_PIN_MMC1DAT3 83 1066 #define BCM21664_PIN_MMC1DAT4 84 1067 #define BCM21664_PIN_MMC1DAT5 85 1068 #define BCM21664_PIN_MMC1DAT6 86 1069 #define BCM21664_PIN_MMC1DAT7 87 1070 #define BCM21664_PIN_MMC1RST 88 1071 #define BCM21664_PIN_PC1 89 1072 #define BCM21664_PIN_PC2 90 1073 #define BCM21664_PIN_PMBSCCLK 91 1074 #define BCM21664_PIN_PMBSCDAT 92 1075 #define BCM21664_PIN_PMUINT 93 1076 #define BCM21664_PIN_RESETN 94 1077 #define BCM21664_PIN_RFST2G_MTSLOTEN3G 95 1078 #define BCM21664_PIN_RTXDATA2G_TXDATA3G1 96 1079 #define BCM21664_PIN_RTXEN2G_TXDATA3G2 97 1080 #define BCM21664_PIN_RXDATA3G0 98 1081 #define BCM21664_PIN_RXDATA3G1 99 1082 #define BCM21664_PIN_RXDATA3G2 100 1083 #define BCM21664_PIN_SDCK 101 1084 #define BCM21664_PIN_SDCMD 102 1085 #define BCM21664_PIN_SDDAT0 103 1086 #define BCM21664_PIN_SDDAT1 104 1087 #define BCM21664_PIN_SDDAT2 105 1088 #define BCM21664_PIN_SDDAT3 106 1089 #define BCM21664_PIN_SIMCLK 107 1090 #define BCM21664_PIN_SIMDAT 108 1091 #define BCM21664_PIN_SIMDET 109 1092 #define BCM21664_PIN_SIMRST 110 1093 #define BCM21664_PIN_GPIO93 111 1094 #define BCM21664_PIN_GPIO94 112 1095 #define BCM21664_PIN_SPI0CLK 113 1096 #define BCM21664_PIN_SPI0FSS 114 1097 #define BCM21664_PIN_SPI0RXD 115 1098 #define BCM21664_PIN_SPI0TXD 116 1099 #define BCM21664_PIN_SRI_C 117 1100 #define BCM21664_PIN_SRI_D 118 1101 #define BCM21664_PIN_SRI_E 119 1102 #define BCM21664_PIN_SSPCK 120 1103 #define BCM21664_PIN_SSPDI 121 1104 #define BCM21664_PIN_SSPDO 122 1105 #define BCM21664_PIN_SSPSYN 123 1106 #define BCM21664_PIN_STAT1 124 1107 #define BCM21664_PIN_STAT2 125 1108 #define BCM21664_PIN_SWCLKTCK 126 1109 #define BCM21664_PIN_SWDIOTMS 127 1110 #define BCM21664_PIN_SYSCLKEN 128 1111 #define BCM21664_PIN_TDI 129 1112 #define BCM21664_PIN_TDO 130 1113 #define BCM21664_PIN_TESTMODE 131 1114 #define BCM21664_PIN_TRACECLK 132 1115 #define BCM21664_PIN_TRACEDT00 133 1116 #define BCM21664_PIN_TRACEDT01 134 1117 #define BCM21664_PIN_TRACEDT02 135 1118 #define BCM21664_PIN_TRACEDT03 136 1119 #define BCM21664_PIN_TRACEDT04 137 1120 #define BCM21664_PIN_TRACEDT05 138 1121 #define BCM21664_PIN_TRACEDT06 139 1122 #define BCM21664_PIN_TRACEDT07 140 1123 #define BCM21664_PIN_TRSTB 141 1124 #define BCM21664_PIN_TXDATA3G0 142 1125 #define BCM21664_PIN_UBCTSN 143 1126 #define BCM21664_PIN_UBRTSN 144 1127 #define BCM21664_PIN_UBRX 145 1128 #define BCM21664_PIN_UBTX 146 1129 #define BCM21664_PIN_TRACEDT08 147 1130 #define BCM21664_PIN_TRACEDT09 148 1131 #define BCM21664_PIN_TRACEDT10 149 1132 #define BCM21664_PIN_TRACEDT11 150 1133 #define BCM21664_PIN_TRACEDT12 151 1134 #define BCM21664_PIN_TRACEDT13 152 1135 #define BCM21664_PIN_TRACEDT14 153 1136 #define BCM21664_PIN_TRACEDT15 154 1137 1138 static const struct pinctrl_pin_desc bcm21664_pinctrl_pins[] = { 1139 BCM281XX_PIN_DESC(BCM21664_PIN_ADCSYN, "adcsyn", std), 1140 BCM281XX_PIN_DESC(BCM21664_PIN_BATRM, "batrm", std), 1141 BCM281XX_PIN_DESC(BCM21664_PIN_BSC1CLK, "bsc1clk", i2c), 1142 BCM281XX_PIN_DESC(BCM21664_PIN_BSC1DAT, "bsc1dat", i2c), 1143 BCM281XX_PIN_DESC(BCM21664_PIN_CAMCS0, "camcs0", std), 1144 BCM281XX_PIN_DESC(BCM21664_PIN_CAMCS1, "camcs1", std), 1145 BCM281XX_PIN_DESC(BCM21664_PIN_CLK32K, "clk32k", std), 1146 BCM281XX_PIN_DESC(BCM21664_PIN_CLK_CX8, "clk_cx8", std), 1147 BCM281XX_PIN_DESC(BCM21664_PIN_DCLK1, "dclk1", std), 1148 BCM281XX_PIN_DESC(BCM21664_PIN_DCLK4, "dclk4", std), 1149 BCM281XX_PIN_DESC(BCM21664_PIN_DCLKREQ1, "dclkreq1", std), 1150 BCM281XX_PIN_DESC(BCM21664_PIN_DCLKREQ4, "dclkreq4", std), 1151 BCM281XX_PIN_DESC(BCM21664_PIN_DMIC0CLK, "dmic0clk", std), 1152 BCM281XX_PIN_DESC(BCM21664_PIN_DMIC0DQ, "dmic0dq", std), 1153 BCM281XX_PIN_DESC(BCM21664_PIN_DSI0TE, "dsi0te", std), 1154 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO00, "gpio00", std), 1155 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO01, "gpio01", std), 1156 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO02, "gpio02", std), 1157 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO03, "gpio03", std), 1158 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO04, "gpio04", std), 1159 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO05, "gpio05", std), 1160 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO06, "gpio06", std), 1161 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO07, "gpio07", std), 1162 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO08, "gpio08", std), 1163 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO09, "gpio09", std), 1164 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO10, "gpio10", std), 1165 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO11, "gpio11", std), 1166 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO12, "gpio12", std), 1167 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO13, "gpio13", std), 1168 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO14, "gpio14", std), 1169 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO15, "gpio15", std), 1170 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO16, "gpio16", i2c), 1171 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO17, "gpio17", i2c), 1172 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO18, "gpio18", std), 1173 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO19, "gpio19", std), 1174 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO20, "gpio20", std), 1175 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO21, "gpio21", std), 1176 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO22, "gpio22", std), 1177 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO23, "gpio23", std), 1178 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO24, "gpio24", std), 1179 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO25, "gpio25", std), 1180 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO26, "gpio26", std), 1181 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO27, "gpio27", std), 1182 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO28, "gpio28", std), 1183 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO32, "gpio32", std), 1184 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO33, "gpio33", std), 1185 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO34, "gpio34", std), 1186 BCM281XX_PIN_DESC(BCM21664_PIN_GPS_CALREQ, "gps_calreq", std), 1187 BCM281XX_PIN_DESC(BCM21664_PIN_GPS_HOSTREQ, "gps_hostreq", std), 1188 BCM281XX_PIN_DESC(BCM21664_PIN_GPS_PABLANK, "gps_pablank", std), 1189 BCM281XX_PIN_DESC(BCM21664_PIN_GPS_TMARK, "gps_tmark", std), 1190 BCM281XX_PIN_DESC(BCM21664_PIN_ICUSBDM, "icusbdm", std), 1191 BCM281XX_PIN_DESC(BCM21664_PIN_ICUSBDP, "icusbdp", std), 1192 BCM281XX_PIN_DESC(BCM21664_PIN_LCDCS0, "lcdcs0", std), 1193 BCM281XX_PIN_DESC(BCM21664_PIN_LCDRES, "lcdres", std), 1194 BCM281XX_PIN_DESC(BCM21664_PIN_LCDSCL, "lcdscl", std), 1195 BCM281XX_PIN_DESC(BCM21664_PIN_LCDSDA, "lcdsda", std), 1196 BCM281XX_PIN_DESC(BCM21664_PIN_LCDTE, "lcdte", std), 1197 BCM281XX_PIN_DESC(BCM21664_PIN_MDMGPIO00, "mdmgpio00", std), 1198 BCM281XX_PIN_DESC(BCM21664_PIN_MDMGPIO01, "mdmgpio01", std), 1199 BCM281XX_PIN_DESC(BCM21664_PIN_MDMGPIO02, "mdmgpio02", std), 1200 BCM281XX_PIN_DESC(BCM21664_PIN_MDMGPIO03, "mdmgpio03", std), 1201 BCM281XX_PIN_DESC(BCM21664_PIN_MDMGPIO04, "mdmgpio04", std), 1202 BCM281XX_PIN_DESC(BCM21664_PIN_MDMGPIO05, "mdmgpio05", std), 1203 BCM281XX_PIN_DESC(BCM21664_PIN_MDMGPIO06, "mdmgpio06", std), 1204 BCM281XX_PIN_DESC(BCM21664_PIN_MDMGPIO07, "mdmgpio07", std), 1205 BCM281XX_PIN_DESC(BCM21664_PIN_MDMGPIO08, "mdmgpio08", std), 1206 BCM281XX_PIN_DESC(BCM21664_PIN_MMC0CK, "mmc0ck", std), 1207 BCM281XX_PIN_DESC(BCM21664_PIN_MMC0CMD, "mmc0cmd", std), 1208 BCM281XX_PIN_DESC(BCM21664_PIN_MMC0DAT0, "mmc0dat0", std), 1209 BCM281XX_PIN_DESC(BCM21664_PIN_MMC0DAT1, "mmc0dat1", std), 1210 BCM281XX_PIN_DESC(BCM21664_PIN_MMC0DAT2, "mmc0dat2", std), 1211 BCM281XX_PIN_DESC(BCM21664_PIN_MMC0DAT3, "mmc0dat3", std), 1212 BCM281XX_PIN_DESC(BCM21664_PIN_MMC0DAT4, "mmc0dat4", std), 1213 BCM281XX_PIN_DESC(BCM21664_PIN_MMC0DAT5, "mmc0dat5", std), 1214 BCM281XX_PIN_DESC(BCM21664_PIN_MMC0DAT6, "mmc0dat6", std), 1215 BCM281XX_PIN_DESC(BCM21664_PIN_MMC0DAT7, "mmc0dat7", std), 1216 BCM281XX_PIN_DESC(BCM21664_PIN_MMC0RST, "mmc0rst", std), 1217 BCM281XX_PIN_DESC(BCM21664_PIN_MMC1CK, "mmc1ck", std), 1218 BCM281XX_PIN_DESC(BCM21664_PIN_MMC1CMD, "mmc1cmd", std), 1219 BCM281XX_PIN_DESC(BCM21664_PIN_MMC1DAT0, "mmc1dat0", std), 1220 BCM281XX_PIN_DESC(BCM21664_PIN_MMC1DAT1, "mmc1dat1", std), 1221 BCM281XX_PIN_DESC(BCM21664_PIN_MMC1DAT2, "mmc1dat2", std), 1222 BCM281XX_PIN_DESC(BCM21664_PIN_MMC1DAT3, "mmc1dat3", std), 1223 BCM281XX_PIN_DESC(BCM21664_PIN_MMC1DAT4, "mmc1dat4", std), 1224 BCM281XX_PIN_DESC(BCM21664_PIN_MMC1DAT5, "mmc1dat5", std), 1225 BCM281XX_PIN_DESC(BCM21664_PIN_MMC1DAT6, "mmc1dat6", std), 1226 BCM281XX_PIN_DESC(BCM21664_PIN_MMC1DAT7, "mmc1dat7", std), 1227 BCM281XX_PIN_DESC(BCM21664_PIN_MMC1RST, "mmc1rst", std), 1228 BCM281XX_PIN_DESC(BCM21664_PIN_PC1, "pc1", std), 1229 BCM281XX_PIN_DESC(BCM21664_PIN_PC2, "pc2", std), 1230 BCM281XX_PIN_DESC(BCM21664_PIN_PMBSCCLK, "pmbscclk", i2c), 1231 BCM281XX_PIN_DESC(BCM21664_PIN_PMBSCDAT, "pmbscdat", i2c), 1232 BCM281XX_PIN_DESC(BCM21664_PIN_PMUINT, "pmuint", std), 1233 BCM281XX_PIN_DESC(BCM21664_PIN_RESETN, "resetn", std), 1234 BCM281XX_PIN_DESC(BCM21664_PIN_RFST2G_MTSLOTEN3G, "rfst2g_mtsloten3g", std), 1235 BCM281XX_PIN_DESC(BCM21664_PIN_RTXDATA2G_TXDATA3G1, "rtxdata2g_txdata3g1", std), 1236 BCM281XX_PIN_DESC(BCM21664_PIN_RTXEN2G_TXDATA3G2, "rtxen2g_txdata3g2", std), 1237 BCM281XX_PIN_DESC(BCM21664_PIN_RXDATA3G0, "rxdata3g0", std), 1238 BCM281XX_PIN_DESC(BCM21664_PIN_RXDATA3G1, "rxdata3g1", std), 1239 BCM281XX_PIN_DESC(BCM21664_PIN_RXDATA3G2, "rxdata3g2", std), 1240 BCM281XX_PIN_DESC(BCM21664_PIN_SDCK, "sdck", std), 1241 BCM281XX_PIN_DESC(BCM21664_PIN_SDCMD, "sdcmd", std), 1242 BCM281XX_PIN_DESC(BCM21664_PIN_SDDAT0, "sddat0", std), 1243 BCM281XX_PIN_DESC(BCM21664_PIN_SDDAT1, "sddat1", std), 1244 BCM281XX_PIN_DESC(BCM21664_PIN_SDDAT2, "sddat2", std), 1245 BCM281XX_PIN_DESC(BCM21664_PIN_SDDAT3, "sddat3", std), 1246 BCM281XX_PIN_DESC(BCM21664_PIN_SIMCLK, "simclk", std), 1247 BCM281XX_PIN_DESC(BCM21664_PIN_SIMDAT, "simdat", std), 1248 BCM281XX_PIN_DESC(BCM21664_PIN_SIMDET, "simdet", std), 1249 BCM281XX_PIN_DESC(BCM21664_PIN_SIMRST, "simrst", std), 1250 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO93, "gpio93", std), 1251 BCM281XX_PIN_DESC(BCM21664_PIN_GPIO94, "gpio94", std), 1252 BCM281XX_PIN_DESC(BCM21664_PIN_SPI0CLK, "spi0clk", std), 1253 BCM281XX_PIN_DESC(BCM21664_PIN_SPI0FSS, "spi0fss", std), 1254 BCM281XX_PIN_DESC(BCM21664_PIN_SPI0RXD, "spi0rxd", std), 1255 BCM281XX_PIN_DESC(BCM21664_PIN_SPI0TXD, "spi0txd", std), 1256 BCM281XX_PIN_DESC(BCM21664_PIN_SRI_C, "sri_c", std), 1257 BCM281XX_PIN_DESC(BCM21664_PIN_SRI_D, "sri_d", std), 1258 BCM281XX_PIN_DESC(BCM21664_PIN_SRI_E, "sri_e", std), 1259 BCM281XX_PIN_DESC(BCM21664_PIN_SSPCK, "sspck", std), 1260 BCM281XX_PIN_DESC(BCM21664_PIN_SSPDI, "sspdi", std), 1261 BCM281XX_PIN_DESC(BCM21664_PIN_SSPDO, "sspdo", std), 1262 BCM281XX_PIN_DESC(BCM21664_PIN_SSPSYN, "sspsyn", std), 1263 BCM281XX_PIN_DESC(BCM21664_PIN_STAT1, "stat1", std), 1264 BCM281XX_PIN_DESC(BCM21664_PIN_STAT2, "stat2", std), 1265 BCM281XX_PIN_DESC(BCM21664_PIN_SWCLKTCK, "swclktck", std), 1266 BCM281XX_PIN_DESC(BCM21664_PIN_SWDIOTMS, "swdiotms", std), 1267 BCM281XX_PIN_DESC(BCM21664_PIN_SYSCLKEN, "sysclken", std), 1268 BCM281XX_PIN_DESC(BCM21664_PIN_TDI, "tdi", std), 1269 BCM281XX_PIN_DESC(BCM21664_PIN_TDO, "tdo", std), 1270 BCM281XX_PIN_DESC(BCM21664_PIN_TESTMODE, "testmode", std), 1271 BCM281XX_PIN_DESC(BCM21664_PIN_TRACECLK, "traceclk", std), 1272 BCM281XX_PIN_DESC(BCM21664_PIN_TRACEDT00, "tracedt00", std), 1273 BCM281XX_PIN_DESC(BCM21664_PIN_TRACEDT01, "tracedt01", std), 1274 BCM281XX_PIN_DESC(BCM21664_PIN_TRACEDT02, "tracedt02", std), 1275 BCM281XX_PIN_DESC(BCM21664_PIN_TRACEDT03, "tracedt03", std), 1276 BCM281XX_PIN_DESC(BCM21664_PIN_TRACEDT04, "tracedt04", std), 1277 BCM281XX_PIN_DESC(BCM21664_PIN_TRACEDT05, "tracedt05", std), 1278 BCM281XX_PIN_DESC(BCM21664_PIN_TRACEDT06, "tracedt06", std), 1279 BCM281XX_PIN_DESC(BCM21664_PIN_TRACEDT07, "tracedt07", std), 1280 BCM281XX_PIN_DESC(BCM21664_PIN_TRSTB, "trstb", std), 1281 BCM281XX_PIN_DESC(BCM21664_PIN_TXDATA3G0, "txdata3g0", std), 1282 BCM281XX_PIN_DESC(BCM21664_PIN_UBCTSN, "ubctsn", std), 1283 BCM281XX_PIN_DESC(BCM21664_PIN_UBRTSN, "ubrtsn", std), 1284 BCM281XX_PIN_DESC(BCM21664_PIN_UBRX, "ubrx", std), 1285 BCM281XX_PIN_DESC(BCM21664_PIN_UBTX, "ubtx", std), 1286 BCM281XX_PIN_DESC(BCM21664_PIN_TRACEDT08, "tracedt08", std), 1287 BCM281XX_PIN_DESC(BCM21664_PIN_TRACEDT09, "tracedt09", std), 1288 BCM281XX_PIN_DESC(BCM21664_PIN_TRACEDT10, "tracedt10", std), 1289 BCM281XX_PIN_DESC(BCM21664_PIN_TRACEDT11, "tracedt11", std), 1290 BCM281XX_PIN_DESC(BCM21664_PIN_TRACEDT12, "tracedt12", std), 1291 BCM281XX_PIN_DESC(BCM21664_PIN_TRACEDT13, "tracedt13", std), 1292 BCM281XX_PIN_DESC(BCM21664_PIN_TRACEDT14, "tracedt14", std), 1293 BCM281XX_PIN_DESC(BCM21664_PIN_TRACEDT15, "tracedt15", std), 1294 }; 1295 1296 static const char * const bcm21664_alt_groups[] = { 1297 "adcsyn", 1298 "batrm", 1299 "bsc1clk", 1300 "bsc1dat", 1301 "camcs0", 1302 "camcs1", 1303 "clk32k", 1304 "clk_cx8", 1305 "dclk1", 1306 "dclk4", 1307 "dclkreq1", 1308 "dclkreq4", 1309 "dmic0clk", 1310 "dmic0dq", 1311 "dsi0te", 1312 "gpio00", 1313 "gpio01", 1314 "gpio02", 1315 "gpio03", 1316 "gpio04", 1317 "gpio05", 1318 "gpio06", 1319 "gpio07", 1320 "gpio08", 1321 "gpio09", 1322 "gpio10", 1323 "gpio11", 1324 "gpio12", 1325 "gpio13", 1326 "gpio14", 1327 "gpio15", 1328 "gpio16", 1329 "gpio17", 1330 "gpio18", 1331 "gpio19", 1332 "gpio20", 1333 "gpio21", 1334 "gpio22", 1335 "gpio23", 1336 "gpio24", 1337 "gpio25", 1338 "gpio26", 1339 "gpio27", 1340 "gpio28", 1341 "gpio32", 1342 "gpio33", 1343 "gpio34", 1344 "gps_calreq", 1345 "gps_hostreq", 1346 "gps_pablank", 1347 "gps_tmark", 1348 "icusbdm", 1349 "icusbdp", 1350 "lcdcs0", 1351 "lcdres", 1352 "lcdscl", 1353 "lcdsda", 1354 "lcdte", 1355 "mdmgpio00", 1356 "mdmgpio01", 1357 "mdmgpio02", 1358 "mdmgpio03", 1359 "mdmgpio04", 1360 "mdmgpio05", 1361 "mdmgpio06", 1362 "mdmgpio07", 1363 "mdmgpio08", 1364 "mmc0ck", 1365 "mmc0cmd", 1366 "mmc0dat0", 1367 "mmc0dat1", 1368 "mmc0dat2", 1369 "mmc0dat3", 1370 "mmc0dat4", 1371 "mmc0dat5", 1372 "mmc0dat6", 1373 "mmc0dat7", 1374 "mmc0rst", 1375 "mmc1ck", 1376 "mmc1cmd", 1377 "mmc1dat0", 1378 "mmc1dat1", 1379 "mmc1dat2", 1380 "mmc1dat3", 1381 "mmc1dat4", 1382 "mmc1dat5", 1383 "mmc1dat6", 1384 "mmc1dat7", 1385 "mmc1rst", 1386 "pc1", 1387 "pc2", 1388 "pmbscclk", 1389 "pmbscdat", 1390 "pmuint", 1391 "resetn", 1392 "rfst2g_mtsloten3g", 1393 "rtxdata2g_txdata3g1", 1394 "rtxen2g_txdata3g2", 1395 "rxdata3g0", 1396 "rxdata3g1", 1397 "rxdata3g2", 1398 "sdck", 1399 "sdcmd", 1400 "sddat0", 1401 "sddat1", 1402 "sddat2", 1403 "sddat3", 1404 "simclk", 1405 "simdat", 1406 "simdet", 1407 "simrst", 1408 "gpio93", 1409 "gpio94", 1410 "spi0clk", 1411 "spi0fss", 1412 "spi0rxd", 1413 "spi0txd", 1414 "sri_c", 1415 "sri_d", 1416 "sri_e", 1417 "sspck", 1418 "sspdi", 1419 "sspdo", 1420 "sspsyn", 1421 "stat1", 1422 "stat2", 1423 "swclktck", 1424 "swdiotms", 1425 "sysclken", 1426 "tdi", 1427 "tdo", 1428 "testmode", 1429 "traceclk", 1430 "tracedt00", 1431 "tracedt01", 1432 "tracedt02", 1433 "tracedt03", 1434 "tracedt04", 1435 "tracedt05", 1436 "tracedt06", 1437 "tracedt07", 1438 "trstb", 1439 "txdata3g0", 1440 "ubctsn", 1441 "ubrtsn", 1442 "ubrx", 1443 "ubtx", 1444 "tracedt08", 1445 "tracedt09", 1446 "tracedt10", 1447 "tracedt11", 1448 "tracedt12", 1449 "tracedt13", 1450 "tracedt14", 1451 "tracedt15", 1452 }; 1453 1454 #define BCM21664_PIN_FUNCTION(fcn_name) \ 1455 { \ 1456 .name = #fcn_name, \ 1457 .groups = bcm21664_alt_groups, \ 1458 .ngroups = ARRAY_SIZE(bcm21664_alt_groups), \ 1459 } 1460 1461 static const struct bcm281xx_pin_function bcm21664_functions[] = { 1462 BCM21664_PIN_FUNCTION(alt1), 1463 BCM21664_PIN_FUNCTION(alt2), 1464 BCM21664_PIN_FUNCTION(alt3), 1465 BCM21664_PIN_FUNCTION(alt4), 1466 BCM21664_PIN_FUNCTION(alt5), 1467 BCM21664_PIN_FUNCTION(alt6), 1468 }; 1469 1470 static const struct regmap_config bcm21664_pinctrl_regmap_config = { 1471 .reg_bits = 32, 1472 .reg_stride = 4, 1473 .val_bits = 32, 1474 .max_register = BCM21664_WR_ACCESS_OFFSET, 1475 }; 1476 1477 static const struct bcm281xx_pinctrl_info bcm21664_pinctrl = { 1478 .device_type = BCM21664_PINCTRL_TYPE, 1479 1480 .pins = bcm21664_pinctrl_pins, 1481 .npins = ARRAY_SIZE(bcm21664_pinctrl_pins), 1482 .functions = bcm21664_functions, 1483 .nfunctions = ARRAY_SIZE(bcm21664_functions), 1484 1485 .regmap_config = &bcm21664_pinctrl_regmap_config, 1486 }; 1487 1488 /* BCM21664 pinctrl access lock handlers */ 1489 static int bcm21664_pinctrl_lock_all(struct bcm281xx_pinctrl_data *pdata) 1490 { 1491 int i, rc; 1492 1493 for (i = 0; i < BCM21664_ACCESS_LOCK_COUNT; i++) { 1494 rc = regmap_write(pdata->regmap, BCM21664_WR_ACCESS_OFFSET, 1495 BCM21664_WR_ACCESS_PASSWORD); 1496 if (rc) { 1497 dev_err(pdata->dev, "Failed to enable write access: %d\n", 1498 rc); 1499 return rc; 1500 } 1501 rc = regmap_write(pdata->regmap, BCM21664_ACCESS_LOCK_OFFSET(i), 1502 0xffffffff); 1503 if (rc) { 1504 dev_err(pdata->dev, "Failed to write access lock: %d\n", 1505 rc); 1506 return rc; 1507 } 1508 } 1509 1510 return 0; 1511 } 1512 1513 static int bcm21664_pinctrl_set_pin_lock(struct bcm281xx_pinctrl_data *pdata, 1514 unsigned int pin, bool lock) 1515 { 1516 unsigned int access_lock = pin / 32; 1517 int rc; 1518 1519 dev_dbg(pdata->dev, 1520 "%s(): %s pin %s (%d)\n", 1521 __func__, lock ? "Lock" : "Unlock", pdata->info->pins[pin].name, 1522 pin); 1523 1524 rc = regmap_write(pdata->regmap, BCM21664_WR_ACCESS_OFFSET, 1525 BCM21664_WR_ACCESS_PASSWORD); 1526 if (rc) { 1527 dev_err(pdata->dev, "Failed to enable write access: %d\n", 1528 rc); 1529 return rc; 1530 } 1531 1532 rc = regmap_update_bits(pdata->regmap, 1533 BCM21664_ACCESS_LOCK_OFFSET(access_lock), 1534 BIT(pin % 32), 1535 (int)lock << (pin % 32)); 1536 1537 if (rc) { 1538 dev_err(pdata->dev, "Failed to %s pin: %d\n", 1539 lock ? "lock" : "unlock", rc); 1540 return rc; 1541 } 1542 1543 return 0; 1544 } 1545 1546 static inline enum bcm281xx_pin_type pin_type_get(struct pinctrl_dev *pctldev, 1547 unsigned int pin) 1548 { 1549 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 1550 1551 if (pin >= pdata->info->npins) 1552 return BCM281XX_PIN_TYPE_UNKNOWN; 1553 1554 return *(enum bcm281xx_pin_type *)(pdata->info->pins[pin].drv_data); 1555 } 1556 1557 #define BCM281XX_PIN_SHIFT(type, param) \ 1558 (BCM281XX_ ## type ## _PIN_REG_ ## param ## _SHIFT) 1559 1560 #define BCM281XX_PIN_MASK(type, param) \ 1561 (BCM281XX_ ## type ## _PIN_REG_ ## param ## _MASK) 1562 1563 /* 1564 * This helper function is used to build up the value and mask used to write to 1565 * a pin register, but does not actually write to the register. 1566 */ 1567 static inline void bcm281xx_pin_update(u32 *reg_val, u32 *reg_mask, 1568 u32 param_val, u32 param_shift, 1569 u32 param_mask) 1570 { 1571 *reg_val &= ~param_mask; 1572 *reg_val |= (param_val << param_shift) & param_mask; 1573 *reg_mask |= param_mask; 1574 } 1575 1576 static int bcm281xx_pinctrl_get_groups_count(struct pinctrl_dev *pctldev) 1577 { 1578 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 1579 1580 return pdata->info->npins; 1581 } 1582 1583 static const char *bcm281xx_pinctrl_get_group_name(struct pinctrl_dev *pctldev, 1584 unsigned int group) 1585 { 1586 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 1587 1588 return pdata->info->pins[group].name; 1589 } 1590 1591 static int bcm281xx_pinctrl_get_group_pins(struct pinctrl_dev *pctldev, 1592 unsigned int group, 1593 const unsigned **pins, 1594 unsigned int *num_pins) 1595 { 1596 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 1597 1598 *pins = &pdata->info->pins[group].number; 1599 *num_pins = 1; 1600 1601 return 0; 1602 } 1603 1604 static void bcm281xx_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev, 1605 struct seq_file *s, 1606 unsigned int offset) 1607 { 1608 seq_printf(s, " %s", dev_name(pctldev->dev)); 1609 } 1610 1611 static const struct pinctrl_ops bcm281xx_pinctrl_ops = { 1612 .get_groups_count = bcm281xx_pinctrl_get_groups_count, 1613 .get_group_name = bcm281xx_pinctrl_get_group_name, 1614 .get_group_pins = bcm281xx_pinctrl_get_group_pins, 1615 .pin_dbg_show = bcm281xx_pinctrl_pin_dbg_show, 1616 .dt_node_to_map = pinconf_generic_dt_node_to_map_pin, 1617 .dt_free_map = pinctrl_utils_free_map, 1618 }; 1619 1620 static int bcm281xx_pinctrl_get_fcns_count(struct pinctrl_dev *pctldev) 1621 { 1622 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 1623 1624 return pdata->info->nfunctions; 1625 } 1626 1627 static const char *bcm281xx_pinctrl_get_fcn_name(struct pinctrl_dev *pctldev, 1628 unsigned int function) 1629 { 1630 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 1631 1632 return pdata->info->functions[function].name; 1633 } 1634 1635 static int bcm281xx_pinctrl_get_fcn_groups(struct pinctrl_dev *pctldev, 1636 unsigned int function, 1637 const char * const **groups, 1638 unsigned int * const num_groups) 1639 { 1640 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 1641 1642 *groups = pdata->info->functions[function].groups; 1643 *num_groups = pdata->info->functions[function].ngroups; 1644 1645 return 0; 1646 } 1647 1648 static int bcm281xx_pinmux_set(struct pinctrl_dev *pctldev, 1649 unsigned int function, 1650 unsigned int group) 1651 { 1652 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 1653 const struct bcm281xx_pin_function *f = &pdata->info->functions[function]; 1654 enum bcm281xx_pinctrl_type device_type = pdata->info->device_type; 1655 unsigned int pin = pdata->info->pins[group].number; 1656 u32 offset = 4 * pin; 1657 int rc = 0; 1658 1659 dev_dbg(pctldev->dev, 1660 "%s(): Enable function %s (%d) of pin %s (%d) @offset 0x%x.\n", 1661 __func__, f->name, function, pdata->info->pins[group].name, 1662 pin, offset); 1663 1664 if (device_type == BCM21664_PINCTRL_TYPE) { 1665 rc = bcm21664_pinctrl_set_pin_lock(pdata, pin, false); 1666 if (rc) { 1667 /* Error is printed in bcm21664_pinctrl_set_pin_lock */ 1668 return rc; 1669 } 1670 } 1671 1672 rc = regmap_update_bits(pdata->regmap, offset, 1673 BCM281XX_PIN_REG_F_SEL_MASK, 1674 function << BCM281XX_PIN_REG_F_SEL_SHIFT); 1675 if (rc) 1676 dev_err(pctldev->dev, 1677 "Error updating register for pin %s (%d).\n", 1678 pdata->info->pins[group].name, pin); 1679 1680 if (device_type == BCM21664_PINCTRL_TYPE) { 1681 rc = bcm21664_pinctrl_set_pin_lock(pdata, pin, true); 1682 if (rc) { 1683 /* Error is printed in bcm21664_pinctrl_set_pin_lock */ 1684 return rc; 1685 } 1686 } 1687 1688 return rc; 1689 } 1690 1691 static const struct pinmux_ops bcm281xx_pinctrl_pinmux_ops = { 1692 .get_functions_count = bcm281xx_pinctrl_get_fcns_count, 1693 .get_function_name = bcm281xx_pinctrl_get_fcn_name, 1694 .get_function_groups = bcm281xx_pinctrl_get_fcn_groups, 1695 .set_mux = bcm281xx_pinmux_set, 1696 }; 1697 1698 static int bcm281xx_pinctrl_pin_config_get(struct pinctrl_dev *pctldev, 1699 unsigned int pin, 1700 unsigned long *config) 1701 { 1702 return -ENOTSUPP; 1703 } 1704 1705 1706 /* Goes through the configs and update register val/mask */ 1707 static int bcm281xx_std_pin_update(struct pinctrl_dev *pctldev, 1708 unsigned int pin, 1709 unsigned long *configs, 1710 unsigned int num_configs, 1711 u32 *val, 1712 u32 *mask) 1713 { 1714 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 1715 int i; 1716 enum pin_config_param param; 1717 u32 arg; 1718 1719 for (i = 0; i < num_configs; i++) { 1720 param = pinconf_to_config_param(configs[i]); 1721 arg = pinconf_to_config_argument(configs[i]); 1722 1723 switch (param) { 1724 case PIN_CONFIG_INPUT_SCHMITT_ENABLE: 1725 arg = (arg >= 1 ? 1 : 0); 1726 bcm281xx_pin_update(val, mask, arg, 1727 BCM281XX_PIN_SHIFT(STD, HYST), 1728 BCM281XX_PIN_MASK(STD, HYST)); 1729 break; 1730 /* 1731 * The pin bias can only be one of pull-up, pull-down, or 1732 * disable. The user does not need to specify a value for the 1733 * property, and the default value from pinconf-generic is 1734 * ignored. 1735 */ 1736 case PIN_CONFIG_BIAS_DISABLE: 1737 bcm281xx_pin_update(val, mask, 0, 1738 BCM281XX_PIN_SHIFT(STD, PULL_UP), 1739 BCM281XX_PIN_MASK(STD, PULL_UP)); 1740 bcm281xx_pin_update(val, mask, 0, 1741 BCM281XX_PIN_SHIFT(STD, PULL_DN), 1742 BCM281XX_PIN_MASK(STD, PULL_DN)); 1743 break; 1744 1745 case PIN_CONFIG_BIAS_PULL_UP: 1746 bcm281xx_pin_update(val, mask, 1, 1747 BCM281XX_PIN_SHIFT(STD, PULL_UP), 1748 BCM281XX_PIN_MASK(STD, PULL_UP)); 1749 bcm281xx_pin_update(val, mask, 0, 1750 BCM281XX_PIN_SHIFT(STD, PULL_DN), 1751 BCM281XX_PIN_MASK(STD, PULL_DN)); 1752 break; 1753 1754 case PIN_CONFIG_BIAS_PULL_DOWN: 1755 bcm281xx_pin_update(val, mask, 0, 1756 BCM281XX_PIN_SHIFT(STD, PULL_UP), 1757 BCM281XX_PIN_MASK(STD, PULL_UP)); 1758 bcm281xx_pin_update(val, mask, 1, 1759 BCM281XX_PIN_SHIFT(STD, PULL_DN), 1760 BCM281XX_PIN_MASK(STD, PULL_DN)); 1761 break; 1762 1763 case PIN_CONFIG_SLEW_RATE: 1764 arg = (arg >= 1 ? 1 : 0); 1765 bcm281xx_pin_update(val, mask, arg, 1766 BCM281XX_PIN_SHIFT(STD, SLEW), 1767 BCM281XX_PIN_MASK(STD, SLEW)); 1768 break; 1769 1770 case PIN_CONFIG_INPUT_ENABLE: 1771 /* inversed since register is for input _disable_ */ 1772 arg = (arg >= 1 ? 0 : 1); 1773 bcm281xx_pin_update(val, mask, arg, 1774 BCM281XX_PIN_SHIFT(STD, INPUT_DIS), 1775 BCM281XX_PIN_MASK(STD, INPUT_DIS)); 1776 break; 1777 1778 case PIN_CONFIG_DRIVE_STRENGTH: 1779 /* Valid range is 2-16 mA, even numbers only */ 1780 if ((arg < 2) || (arg > 16) || (arg % 2)) { 1781 dev_err(pctldev->dev, 1782 "Invalid Drive Strength value (%d) for " 1783 "pin %s (%d). Valid values are " 1784 "(2..16) mA, even numbers only.\n", 1785 arg, pdata->info->pins[pin].name, pin); 1786 return -EINVAL; 1787 } 1788 bcm281xx_pin_update(val, mask, (arg/2)-1, 1789 BCM281XX_PIN_SHIFT(STD, DRV_STR), 1790 BCM281XX_PIN_MASK(STD, DRV_STR)); 1791 break; 1792 1793 default: 1794 dev_err(pctldev->dev, 1795 "Unrecognized pin config %d for pin %s (%d).\n", 1796 param, pdata->info->pins[pin].name, pin); 1797 return -EINVAL; 1798 1799 } /* switch config */ 1800 } /* for each config */ 1801 1802 return 0; 1803 } 1804 1805 /* 1806 * The pull-up strength for an I2C pin is represented by bits 4-6 in the 1807 * register with the following mapping: 1808 * 0b000: No pull-up 1809 * 0b001: 1200 Ohm 1810 * 0b010: 1800 Ohm 1811 * 0b011: 720 Ohm 1812 * 0b100: 2700 Ohm 1813 * 0b101: 831 Ohm 1814 * 0b110: 1080 Ohm 1815 * 0b111: 568 Ohm 1816 * This array maps pull-up strength in Ohms to register values (1+index). 1817 */ 1818 static const u16 bcm281xx_pullup_map[] = { 1819 1200, 1800, 720, 2700, 831, 1080, 568 1820 }; 1821 1822 /* Goes through the configs and update register val/mask */ 1823 static int bcm281xx_i2c_pin_update(struct pinctrl_dev *pctldev, 1824 unsigned int pin, 1825 unsigned long *configs, 1826 unsigned int num_configs, 1827 u32 *val, 1828 u32 *mask) 1829 { 1830 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 1831 int i, j; 1832 enum pin_config_param param; 1833 u32 arg; 1834 1835 for (i = 0; i < num_configs; i++) { 1836 param = pinconf_to_config_param(configs[i]); 1837 arg = pinconf_to_config_argument(configs[i]); 1838 1839 switch (param) { 1840 case PIN_CONFIG_BIAS_PULL_UP: 1841 for (j = 0; j < ARRAY_SIZE(bcm281xx_pullup_map); j++) 1842 if (bcm281xx_pullup_map[j] == arg) 1843 break; 1844 1845 if (j == ARRAY_SIZE(bcm281xx_pullup_map)) { 1846 dev_err(pctldev->dev, 1847 "Invalid pull-up value (%d) for pin %s " 1848 "(%d). Valid values are 568, 720, 831, " 1849 "1080, 1200, 1800, 2700 Ohms.\n", 1850 arg, pdata->info->pins[pin].name, pin); 1851 return -EINVAL; 1852 } 1853 1854 bcm281xx_pin_update(val, mask, j+1, 1855 BCM281XX_PIN_SHIFT(I2C, PULL_UP_STR), 1856 BCM281XX_PIN_MASK(I2C, PULL_UP_STR)); 1857 break; 1858 1859 case PIN_CONFIG_BIAS_DISABLE: 1860 bcm281xx_pin_update(val, mask, 0, 1861 BCM281XX_PIN_SHIFT(I2C, PULL_UP_STR), 1862 BCM281XX_PIN_MASK(I2C, PULL_UP_STR)); 1863 break; 1864 1865 case PIN_CONFIG_SLEW_RATE: 1866 arg = (arg >= 1 ? 1 : 0); 1867 bcm281xx_pin_update(val, mask, arg, 1868 BCM281XX_PIN_SHIFT(I2C, SLEW), 1869 BCM281XX_PIN_MASK(I2C, SLEW)); 1870 break; 1871 1872 case PIN_CONFIG_INPUT_ENABLE: 1873 /* inversed since register is for input _disable_ */ 1874 arg = (arg >= 1 ? 0 : 1); 1875 bcm281xx_pin_update(val, mask, arg, 1876 BCM281XX_PIN_SHIFT(I2C, INPUT_DIS), 1877 BCM281XX_PIN_MASK(I2C, INPUT_DIS)); 1878 break; 1879 1880 default: 1881 dev_err(pctldev->dev, 1882 "Unrecognized pin config %d for pin %s (%d).\n", 1883 param, pdata->info->pins[pin].name, pin); 1884 return -EINVAL; 1885 1886 } /* switch config */ 1887 } /* for each config */ 1888 1889 return 0; 1890 } 1891 1892 /* Goes through the configs and update register val/mask */ 1893 static int bcm21664_i2c_pin_update(struct pinctrl_dev *pctldev, 1894 unsigned int pin, 1895 unsigned long *configs, 1896 unsigned int num_configs, 1897 u32 *val, 1898 u32 *mask) 1899 { 1900 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 1901 int i; 1902 enum pin_config_param param; 1903 u32 arg; 1904 1905 for (i = 0; i < num_configs; i++) { 1906 param = pinconf_to_config_param(configs[i]); 1907 arg = pinconf_to_config_argument(configs[i]); 1908 1909 /* 1910 * BCM21664 I2C pins use the same config bits as standard pins, 1911 * but only pull up/none, slew rate and input enable/disable 1912 * options are supported. 1913 */ 1914 switch (param) { 1915 case PIN_CONFIG_BIAS_PULL_UP: 1916 bcm281xx_pin_update(val, mask, 1, 1917 BCM281XX_PIN_SHIFT(STD, PULL_UP), 1918 BCM281XX_PIN_MASK(STD, PULL_UP)); 1919 break; 1920 1921 case PIN_CONFIG_BIAS_DISABLE: 1922 bcm281xx_pin_update(val, mask, 0, 1923 BCM281XX_PIN_SHIFT(STD, PULL_UP), 1924 BCM281XX_PIN_MASK(STD, PULL_UP)); 1925 break; 1926 1927 case PIN_CONFIG_SLEW_RATE: 1928 arg = (arg >= 1 ? 1 : 0); 1929 bcm281xx_pin_update(val, mask, arg, 1930 BCM281XX_PIN_SHIFT(STD, SLEW), 1931 BCM281XX_PIN_MASK(STD, SLEW)); 1932 break; 1933 1934 case PIN_CONFIG_INPUT_ENABLE: 1935 /* inversed since register is for input _disable_ */ 1936 arg = (arg >= 1 ? 0 : 1); 1937 bcm281xx_pin_update(val, mask, arg, 1938 BCM281XX_PIN_SHIFT(STD, INPUT_DIS), 1939 BCM281XX_PIN_MASK(STD, INPUT_DIS)); 1940 break; 1941 1942 default: 1943 dev_err(pctldev->dev, 1944 "Unrecognized pin config %d for pin %s (%d).\n", 1945 param, pdata->info->pins[pin].name, pin); 1946 return -EINVAL; 1947 1948 } /* switch config */ 1949 } /* for each config */ 1950 1951 return 0; 1952 } 1953 1954 /* Goes through the configs and update register val/mask */ 1955 static int bcm281xx_hdmi_pin_update(struct pinctrl_dev *pctldev, 1956 unsigned int pin, 1957 unsigned long *configs, 1958 unsigned int num_configs, 1959 u32 *val, 1960 u32 *mask) 1961 { 1962 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 1963 int i; 1964 enum pin_config_param param; 1965 u32 arg; 1966 1967 for (i = 0; i < num_configs; i++) { 1968 param = pinconf_to_config_param(configs[i]); 1969 arg = pinconf_to_config_argument(configs[i]); 1970 1971 switch (param) { 1972 case PIN_CONFIG_SLEW_RATE: 1973 arg = (arg >= 1 ? 1 : 0); 1974 bcm281xx_pin_update(val, mask, arg, 1975 BCM281XX_PIN_SHIFT(HDMI, MODE), 1976 BCM281XX_PIN_MASK(HDMI, MODE)); 1977 break; 1978 1979 case PIN_CONFIG_INPUT_ENABLE: 1980 /* inversed since register is for input _disable_ */ 1981 arg = (arg >= 1 ? 0 : 1); 1982 bcm281xx_pin_update(val, mask, arg, 1983 BCM281XX_PIN_SHIFT(HDMI, INPUT_DIS), 1984 BCM281XX_PIN_MASK(HDMI, INPUT_DIS)); 1985 break; 1986 1987 default: 1988 dev_err(pctldev->dev, 1989 "Unrecognized pin config %d for pin %s (%d).\n", 1990 param, pdata->info->pins[pin].name, pin); 1991 return -EINVAL; 1992 1993 } /* switch config */ 1994 } /* for each config */ 1995 1996 return 0; 1997 } 1998 1999 static int bcm281xx_pinctrl_pin_config_set(struct pinctrl_dev *pctldev, 2000 unsigned int pin, 2001 unsigned long *configs, 2002 unsigned int num_configs) 2003 { 2004 struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 2005 enum bcm281xx_pinctrl_type device_type = pdata->info->device_type; 2006 enum bcm281xx_pin_type pin_type; 2007 u32 offset = 4 * pin; 2008 u32 cfg_val, cfg_mask; 2009 int rc; 2010 2011 cfg_val = 0; 2012 cfg_mask = 0; 2013 pin_type = pin_type_get(pctldev, pin); 2014 2015 /* Different pins have different configuration options */ 2016 switch (pin_type) { 2017 case BCM281XX_PIN_TYPE_STD: 2018 rc = bcm281xx_std_pin_update(pctldev, pin, configs, 2019 num_configs, &cfg_val, &cfg_mask); 2020 break; 2021 2022 case BCM281XX_PIN_TYPE_I2C: 2023 if (device_type == BCM21664_PINCTRL_TYPE) 2024 rc = bcm21664_i2c_pin_update(pctldev, pin, configs, 2025 num_configs, &cfg_val, &cfg_mask); 2026 else 2027 rc = bcm281xx_i2c_pin_update(pctldev, pin, configs, 2028 num_configs, &cfg_val, &cfg_mask); 2029 break; 2030 2031 case BCM281XX_PIN_TYPE_HDMI: 2032 rc = bcm281xx_hdmi_pin_update(pctldev, pin, configs, 2033 num_configs, &cfg_val, &cfg_mask); 2034 break; 2035 2036 default: 2037 dev_err(pctldev->dev, "Unknown pin type for pin %s (%d).\n", 2038 pdata->info->pins[pin].name, pin); 2039 return -EINVAL; 2040 2041 } /* switch pin type */ 2042 2043 if (rc) 2044 return rc; 2045 2046 dev_dbg(pctldev->dev, 2047 "%s(): Set pin %s (%d) with config 0x%x, mask 0x%x\n", 2048 __func__, pdata->info->pins[pin].name, pin, cfg_val, cfg_mask); 2049 2050 if (device_type == BCM21664_PINCTRL_TYPE) { 2051 rc = bcm21664_pinctrl_set_pin_lock(pdata, pin, false); 2052 if (rc) { 2053 /* Error is printed in bcm21664_pinctrl_set_pin_lock */ 2054 return rc; 2055 } 2056 } 2057 2058 rc = regmap_update_bits(pdata->regmap, offset, cfg_mask, cfg_val); 2059 if (rc) { 2060 dev_err(pctldev->dev, 2061 "Error updating register for pin %s (%d).\n", 2062 pdata->info->pins[pin].name, pin); 2063 return rc; 2064 } 2065 2066 if (device_type == BCM21664_PINCTRL_TYPE) { 2067 rc = bcm21664_pinctrl_set_pin_lock(pdata, pin, true); 2068 if (rc) { 2069 /* Error is printed in bcm21664_pinctrl_set_pin_lock */ 2070 return rc; 2071 } 2072 } 2073 2074 return 0; 2075 } 2076 2077 static const struct pinconf_ops bcm281xx_pinctrl_pinconf_ops = { 2078 .pin_config_get = bcm281xx_pinctrl_pin_config_get, 2079 .pin_config_set = bcm281xx_pinctrl_pin_config_set, 2080 }; 2081 2082 static struct pinctrl_desc bcm281xx_pinctrl_desc = { 2083 /* name, pins, npins members initialized in probe function */ 2084 .pctlops = &bcm281xx_pinctrl_ops, 2085 .pmxops = &bcm281xx_pinctrl_pinmux_ops, 2086 .confops = &bcm281xx_pinctrl_pinconf_ops, 2087 .owner = THIS_MODULE, 2088 }; 2089 2090 static struct bcm281xx_pinctrl_data bcm281xx_pinctrl_pdata; 2091 2092 static int __init bcm281xx_pinctrl_probe(struct platform_device *pdev) 2093 { 2094 struct bcm281xx_pinctrl_data *pdata = &bcm281xx_pinctrl_pdata; 2095 struct pinctrl_dev *pctl; 2096 int rc; 2097 2098 /* Set device pointer in platform data */ 2099 pdata->dev = &pdev->dev; 2100 2101 /* Get the data to use from OF match */ 2102 pdata->info = of_device_get_match_data(&pdev->dev); 2103 if (!pdata->info) { 2104 dev_err(&pdev->dev, "Failed to get data from OF match\n"); 2105 return -ENODEV; 2106 } 2107 2108 /* So far We can assume there is only 1 bank of registers */ 2109 pdata->reg_base = devm_platform_ioremap_resource(pdev, 0); 2110 if (IS_ERR(pdata->reg_base)) { 2111 dev_err(&pdev->dev, "Failed to ioremap MEM resource\n"); 2112 return PTR_ERR(pdata->reg_base); 2113 } 2114 2115 /* Initialize the dynamic part of pinctrl_desc */ 2116 pdata->regmap = devm_regmap_init_mmio(&pdev->dev, pdata->reg_base, 2117 pdata->info->regmap_config); 2118 if (IS_ERR(pdata->regmap)) { 2119 dev_err(&pdev->dev, "Regmap MMIO init failed.\n"); 2120 return -ENODEV; 2121 } 2122 2123 bcm281xx_pinctrl_desc.name = dev_name(&pdev->dev); 2124 bcm281xx_pinctrl_desc.pins = pdata->info->pins; 2125 bcm281xx_pinctrl_desc.npins = pdata->info->npins; 2126 2127 /* 2128 * For BCM21664, lock all pins by default; they will be unlocked 2129 * as needed 2130 */ 2131 if (pdata->info->device_type == BCM21664_PINCTRL_TYPE) { 2132 rc = bcm21664_pinctrl_lock_all(pdata); 2133 if (rc) { 2134 dev_err(&pdev->dev, "Failed to lock all pins\n"); 2135 return rc; 2136 } 2137 } 2138 2139 pctl = devm_pinctrl_register(&pdev->dev, &bcm281xx_pinctrl_desc, pdata); 2140 if (IS_ERR(pctl)) { 2141 dev_err(&pdev->dev, "Failed to register pinctrl\n"); 2142 return PTR_ERR(pctl); 2143 } 2144 2145 platform_set_drvdata(pdev, pdata); 2146 2147 return 0; 2148 } 2149 2150 static const struct of_device_id bcm281xx_pinctrl_of_match[] = { 2151 { .compatible = "brcm,bcm11351-pinctrl", .data = &bcm281xx_pinctrl }, 2152 { .compatible = "brcm,bcm21664-pinctrl", .data = &bcm21664_pinctrl }, 2153 { }, 2154 }; 2155 2156 static struct platform_driver bcm281xx_pinctrl_driver = { 2157 .driver = { 2158 .name = "bcm281xx-pinctrl", 2159 .of_match_table = bcm281xx_pinctrl_of_match, 2160 }, 2161 }; 2162 builtin_platform_driver_probe(bcm281xx_pinctrl_driver, bcm281xx_pinctrl_probe); 2163