17418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin/* 27418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * Copyright (C) 2013 Broadcom Corporation 37418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * 47418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * This program is free software; you can redistribute it and/or 57418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * modify it under the terms of the GNU General Public License as 67418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * published by the Free Software Foundation version 2. 77418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * 87418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * This program is distributed "as is" WITHOUT ANY WARRANTY of any 97418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * kind, whether express or implied; without even the implied warranty 107418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 117418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * GNU General Public License for more details. 127418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin */ 137418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#include <linux/err.h> 147418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#include <linux/io.h> 157418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#include <linux/module.h> 167418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#include <linux/of.h> 177418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#include <linux/platform_device.h> 187418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#include <linux/pinctrl/pinctrl.h> 197418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#include <linux/pinctrl/pinmux.h> 207418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#include <linux/pinctrl/pinconf.h> 217418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#include <linux/pinctrl/pinconf-generic.h> 227418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#include <linux/regmap.h> 237418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#include <linux/slab.h> 247418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#include "core.h" 257418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#include "pinctrl-utils.h" 267418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 277418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin/* BCM281XX Pin Control Registers Definitions */ 287418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 297418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin/* Function Select bits are the same for all pin control registers */ 307418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_REG_F_SEL_MASK 0x0700 317418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_REG_F_SEL_SHIFT 8 327418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 337418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin/* Standard pin register */ 347418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_STD_PIN_REG_DRV_STR_MASK 0x0007 357418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_STD_PIN_REG_DRV_STR_SHIFT 0 367418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_STD_PIN_REG_INPUT_DIS_MASK 0x0008 377418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_STD_PIN_REG_INPUT_DIS_SHIFT 3 387418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_STD_PIN_REG_SLEW_MASK 0x0010 397418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_STD_PIN_REG_SLEW_SHIFT 4 407418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_STD_PIN_REG_PULL_UP_MASK 0x0020 417418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_STD_PIN_REG_PULL_UP_SHIFT 5 427418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_STD_PIN_REG_PULL_DN_MASK 0x0040 437418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_STD_PIN_REG_PULL_DN_SHIFT 6 447418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_STD_PIN_REG_HYST_MASK 0x0080 457418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_STD_PIN_REG_HYST_SHIFT 7 467418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 477418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin/* I2C pin register */ 487418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_I2C_PIN_REG_INPUT_DIS_MASK 0x0004 497418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_I2C_PIN_REG_INPUT_DIS_SHIFT 2 507418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_I2C_PIN_REG_SLEW_MASK 0x0008 517418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_I2C_PIN_REG_SLEW_SHIFT 3 527418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_I2C_PIN_REG_PULL_UP_STR_MASK 0x0070 537418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_I2C_PIN_REG_PULL_UP_STR_SHIFT 4 547418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 557418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin/* HDMI pin register */ 567418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_HDMI_PIN_REG_INPUT_DIS_MASK 0x0008 577418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_HDMI_PIN_REG_INPUT_DIS_SHIFT 3 587418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_HDMI_PIN_REG_MODE_MASK 0x0010 597418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_HDMI_PIN_REG_MODE_SHIFT 4 607418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 617418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin/** 627418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * bcm281xx_pin_type - types of pin register 637418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin */ 647418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinenum bcm281xx_pin_type { 657418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_TYPE_UNKNOWN = 0, 667418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_TYPE_STD, 677418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_TYPE_I2C, 687418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_TYPE_HDMI, 697418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin}; 707418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 717418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic enum bcm281xx_pin_type std_pin = BCM281XX_PIN_TYPE_STD; 727418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic enum bcm281xx_pin_type i2c_pin = BCM281XX_PIN_TYPE_I2C; 737418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic enum bcm281xx_pin_type hdmi_pin = BCM281XX_PIN_TYPE_HDMI; 747418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 757418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin/** 767418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * bcm281xx_pin_function- define pin function 777418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin */ 787418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstruct bcm281xx_pin_function { 797418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin const char *name; 807418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin const char * const *groups; 817418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin const unsigned ngroups; 827418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin}; 837418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 847418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin/** 857418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * bcm281xx_pinctrl_data - Broadcom-specific pinctrl data 867418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * @reg_base - base of pinctrl registers 877418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin */ 887418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstruct bcm281xx_pinctrl_data { 897418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin void __iomem *reg_base; 907418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 917418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin /* List of all pins */ 927418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin const struct pinctrl_pin_desc *pins; 937418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin const unsigned npins; 947418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 957418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin const struct bcm281xx_pin_function *functions; 967418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin const unsigned nfunctions; 977418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 987418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin struct regmap *regmap; 997418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin}; 1007418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 1017418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin/* 1027418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * Pin number definition. The order here must be the same as defined in the 1037418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * PADCTRLREG block in the RDB. 1047418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin */ 1057418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_ADCSYNC 0 1067418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_BAT_RM 1 1077418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_BSC1_SCL 2 1087418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_BSC1_SDA 3 1097418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_BSC2_SCL 4 1107418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_BSC2_SDA 5 1117418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_CLASSGPWR 6 1127418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_CLK_CX8 7 1137418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_CLKOUT_0 8 1147418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_CLKOUT_1 9 1157418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_CLKOUT_2 10 1167418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_CLKOUT_3 11 1177418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_CLKREQ_IN_0 12 1187418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_CLKREQ_IN_1 13 1197418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_CWS_SYS_REQ1 14 1207418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_CWS_SYS_REQ2 15 1217418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_CWS_SYS_REQ3 16 1227418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_DIGMIC1_CLK 17 1237418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_DIGMIC1_DQ 18 1247418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_DIGMIC2_CLK 19 1257418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_DIGMIC2_DQ 20 1267418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPEN13 21 1277418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPEN14 22 1287418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPEN15 23 1297418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPIO00 24 1307418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPIO01 25 1317418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPIO02 26 1327418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPIO03 27 1337418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPIO04 28 1347418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPIO05 29 1357418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPIO06 30 1367418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPIO07 31 1377418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPIO08 32 1387418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPIO09 33 1397418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPIO10 34 1407418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPIO11 35 1417418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPIO12 36 1427418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPIO13 37 1437418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPIO14 38 1447418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPS_PABLANK 39 1457418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_GPS_TMARK 40 1467418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_HDMI_SCL 41 1477418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_HDMI_SDA 42 1487418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_IC_DM 43 1497418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_IC_DP 44 1507418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_KP_COL_IP_0 45 1517418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_KP_COL_IP_1 46 1527418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_KP_COL_IP_2 47 1537418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_KP_COL_IP_3 48 1547418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_KP_ROW_OP_0 49 1557418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_KP_ROW_OP_1 50 1567418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_KP_ROW_OP_2 51 1577418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_KP_ROW_OP_3 52 1587418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_B_0 53 1597418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_B_1 54 1607418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_B_2 55 1617418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_B_3 56 1627418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_B_4 57 1637418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_B_5 58 1647418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_B_6 59 1657418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_B_7 60 1667418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_G_0 61 1677418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_G_1 62 1687418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_G_2 63 1697418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_G_3 64 1707418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_G_4 65 1717418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_G_5 66 1727418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_G_6 67 1737418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_G_7 68 1747418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_HSYNC 69 1757418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_OE 70 1767418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_PCLK 71 1777418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_R_0 72 1787418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_R_1 73 1797418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_R_2 74 1807418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_R_3 75 1817418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_R_4 76 1827418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_R_5 77 1837418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_R_6 78 1847418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_R_7 79 1857418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_LCD_VSYNC 80 1867418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MDMGPIO0 81 1877418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MDMGPIO1 82 1887418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MDMGPIO2 83 1897418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MDMGPIO3 84 1907418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MDMGPIO4 85 1917418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MDMGPIO5 86 1927418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MDMGPIO6 87 1937418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MDMGPIO7 88 1947418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MDMGPIO8 89 1957418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_DATA_0 90 1967418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_DATA_1 91 1977418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_DATA_2 92 1987418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_DATA_3 93 1997418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_DATA_4 94 2007418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_DATA_5 95 2017418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_DATA_6 96 2027418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_DATA_7 97 2037418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_DATA_8 98 2047418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_DATA_9 99 2057418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_DATA_10 100 2067418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_DATA_11 101 2077418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_DATA_12 102 2087418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_DATA_13 103 2097418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_DATA_14 104 2107418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_DATA_15 105 2117418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_HA0 106 2127418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_HAT0 107 2137418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_HAT1 108 2147418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_HCE0_N 109 2157418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_HCE1_N 110 2167418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_HRD_N 111 2177418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_HWR_N 112 2187418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_RUN0 113 2197418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MPHI_RUN1 114 2207418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MTX_SCAN_CLK 115 2217418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MTX_SCAN_DATA 116 2227418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_NAND_AD_0 117 2237418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_NAND_AD_1 118 2247418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_NAND_AD_2 119 2257418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_NAND_AD_3 120 2267418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_NAND_AD_4 121 2277418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_NAND_AD_5 122 2287418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_NAND_AD_6 123 2297418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_NAND_AD_7 124 2307418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_NAND_ALE 125 2317418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_NAND_CEN_0 126 2327418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_NAND_CEN_1 127 2337418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_NAND_CLE 128 2347418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_NAND_OEN 129 2357418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_NAND_RDY_0 130 2367418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_NAND_RDY_1 131 2377418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_NAND_WEN 132 2387418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_NAND_WP 133 2397418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_PC1 134 2407418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_PC2 135 2417418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_PMU_INT 136 2427418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_PMU_SCL 137 2437418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_PMU_SDA 138 2447418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RFST2G_MTSLOTEN3G 139 2457418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_0_RX_CTL 140 2467418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_0_RXC 141 2477418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_0_RXD_0 142 2487418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_0_RXD_1 143 2497418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_0_RXD_2 144 2507418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_0_RXD_3 145 2517418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_0_TX_CTL 146 2527418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_0_TXC 147 2537418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_0_TXD_0 148 2547418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_0_TXD_1 149 2557418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_0_TXD_2 150 2567418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_0_TXD_3 151 2577418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_1_RX_CTL 152 2587418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_1_RXC 153 2597418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_1_RXD_0 154 2607418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_1_RXD_1 155 2617418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_1_RXD_2 156 2627418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_1_RXD_3 157 2637418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_1_TX_CTL 158 2647418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_1_TXC 159 2657418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_1_TXD_0 160 2667418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_1_TXD_1 161 2677418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_1_TXD_2 162 2687418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_1_TXD_3 163 2697418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_GPIO_0 164 2707418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_GPIO_1 165 2717418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_GPIO_2 166 2727418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RGMII_GPIO_3 167 2737418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RTXDATA2G_TXDATA3G1 168 2747418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RTXEN2G_TXDATA3G2 169 2757418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RXDATA3G0 170 2767418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RXDATA3G1 171 2777418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_RXDATA3G2 172 2787418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SDIO1_CLK 173 2797418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SDIO1_CMD 174 2807418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SDIO1_DATA_0 175 2817418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SDIO1_DATA_1 176 2827418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SDIO1_DATA_2 177 2837418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SDIO1_DATA_3 178 2847418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SDIO4_CLK 179 2857418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SDIO4_CMD 180 2867418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SDIO4_DATA_0 181 2877418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SDIO4_DATA_1 182 2887418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SDIO4_DATA_2 183 2897418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SDIO4_DATA_3 184 2907418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SIM_CLK 185 2917418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SIM_DATA 186 2927418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SIM_DET 187 2937418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SIM_RESETN 188 2947418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SIM2_CLK 189 2957418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SIM2_DATA 190 2967418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SIM2_DET 191 2977418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SIM2_RESETN 192 2987418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SRI_C 193 2997418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SRI_D 194 3007418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SRI_E 195 3017418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP_EXTCLK 196 3027418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP0_CLK 197 3037418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP0_FS 198 3047418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP0_RXD 199 3057418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP0_TXD 200 3067418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP2_CLK 201 3077418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP2_FS_0 202 3087418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP2_FS_1 203 3097418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP2_FS_2 204 3107418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP2_FS_3 205 3117418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP2_RXD_0 206 3127418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP2_RXD_1 207 3137418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP2_TXD_0 208 3147418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP2_TXD_1 209 3157418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP3_CLK 210 3167418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP3_FS 211 3177418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP3_RXD 212 3187418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP3_TXD 213 3197418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP4_CLK 214 3207418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP4_FS 215 3217418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP4_RXD 216 3227418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP4_TXD 217 3237418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP5_CLK 218 3247418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP5_FS 219 3257418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP5_RXD 220 3267418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP5_TXD 221 3277418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP6_CLK 222 3287418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP6_FS 223 3297418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP6_RXD 224 3307418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SSP6_TXD 225 3317418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_STAT_1 226 3327418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_STAT_2 227 3337418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SYSCLKEN 228 3347418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TRACECLK 229 3357418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TRACEDT00 230 3367418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TRACEDT01 231 3377418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TRACEDT02 232 3387418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TRACEDT03 233 3397418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TRACEDT04 234 3407418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TRACEDT05 235 3417418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TRACEDT06 236 3427418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TRACEDT07 237 3437418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TRACEDT08 238 3447418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TRACEDT09 239 3457418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TRACEDT10 240 3467418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TRACEDT11 241 3477418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TRACEDT12 242 3487418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TRACEDT13 243 3497418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TRACEDT14 244 3507418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TRACEDT15 245 3517418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TXDATA3G0 246 3527418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_TXPWRIND 247 3537418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_UARTB1_UCTS 248 3547418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_UARTB1_URTS 249 3557418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_UARTB1_URXD 250 3567418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_UARTB1_UTXD 251 3577418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_UARTB2_URXD 252 3587418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_UARTB2_UTXD 253 3597418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_UARTB3_UCTS 254 3607418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_UARTB3_URTS 255 3617418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_UARTB3_URXD 256 3627418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_UARTB3_UTXD 257 3637418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_UARTB4_UCTS 258 3647418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_UARTB4_URTS 259 3657418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_UARTB4_URXD 260 3667418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_UARTB4_UTXD 261 3677418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_VC_CAM1_SCL 262 3687418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_VC_CAM1_SDA 263 3697418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_VC_CAM2_SCL 264 3707418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_VC_CAM2_SDA 265 3717418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_VC_CAM3_SCL 266 3727418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_VC_CAM3_SDA 267 3737418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 3747418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_DESC(a, b, c) \ 3757418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin { .number = a, .name = b, .drv_data = &c##_pin } 3767418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 3777418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin/* 3787418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * Pin description definition. The order here must be the same as defined in 3797418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * the PADCTRLREG block in the RDB, since the pin number is used as an index 3807418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * into this array. 3817418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin */ 3827418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic const struct pinctrl_pin_desc bcm281xx_pinctrl_pins[] = { 3837418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_ADCSYNC, "adcsync", std), 3847418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_BAT_RM, "bat_rm", std), 3857418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_BSC1_SCL, "bsc1_scl", i2c), 3867418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_BSC1_SDA, "bsc1_sda", i2c), 3877418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_BSC2_SCL, "bsc2_scl", i2c), 3887418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_BSC2_SDA, "bsc2_sda", i2c), 3897418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_CLASSGPWR, "classgpwr", std), 3907418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_CLK_CX8, "clk_cx8", std), 3917418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_CLKOUT_0, "clkout_0", std), 3927418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_CLKOUT_1, "clkout_1", std), 3937418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_CLKOUT_2, "clkout_2", std), 3947418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_CLKOUT_3, "clkout_3", std), 3957418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_CLKREQ_IN_0, "clkreq_in_0", std), 3967418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_CLKREQ_IN_1, "clkreq_in_1", std), 3977418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_CWS_SYS_REQ1, "cws_sys_req1", std), 3987418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_CWS_SYS_REQ2, "cws_sys_req2", std), 3997418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_CWS_SYS_REQ3, "cws_sys_req3", std), 4007418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_DIGMIC1_CLK, "digmic1_clk", std), 4017418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_DIGMIC1_DQ, "digmic1_dq", std), 4027418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_DIGMIC2_CLK, "digmic2_clk", std), 4037418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_DIGMIC2_DQ, "digmic2_dq", std), 4047418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPEN13, "gpen13", std), 4057418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPEN14, "gpen14", std), 4067418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPEN15, "gpen15", std), 4077418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO00, "gpio00", std), 4087418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO01, "gpio01", std), 4097418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO02, "gpio02", std), 4107418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO03, "gpio03", std), 4117418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO04, "gpio04", std), 4127418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO05, "gpio05", std), 4137418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO06, "gpio06", std), 4147418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO07, "gpio07", std), 4157418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO08, "gpio08", std), 4167418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO09, "gpio09", std), 4177418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO10, "gpio10", std), 4187418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO11, "gpio11", std), 4197418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO12, "gpio12", std), 4207418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO13, "gpio13", std), 4217418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPIO14, "gpio14", std), 4227418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPS_PABLANK, "gps_pablank", std), 4237418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_GPS_TMARK, "gps_tmark", std), 4247418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_HDMI_SCL, "hdmi_scl", hdmi), 4257418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_HDMI_SDA, "hdmi_sda", hdmi), 4267418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_IC_DM, "ic_dm", std), 4277418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_IC_DP, "ic_dp", std), 4287418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_KP_COL_IP_0, "kp_col_ip_0", std), 4297418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_KP_COL_IP_1, "kp_col_ip_1", std), 4307418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_KP_COL_IP_2, "kp_col_ip_2", std), 4317418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_KP_COL_IP_3, "kp_col_ip_3", std), 4327418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_KP_ROW_OP_0, "kp_row_op_0", std), 4337418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_KP_ROW_OP_1, "kp_row_op_1", std), 4347418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_KP_ROW_OP_2, "kp_row_op_2", std), 4357418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_KP_ROW_OP_3, "kp_row_op_3", std), 4367418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_0, "lcd_b_0", std), 4377418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_1, "lcd_b_1", std), 4387418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_2, "lcd_b_2", std), 4397418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_3, "lcd_b_3", std), 4407418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_4, "lcd_b_4", std), 4417418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_5, "lcd_b_5", std), 4427418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_6, "lcd_b_6", std), 4437418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_B_7, "lcd_b_7", std), 4447418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_0, "lcd_g_0", std), 4457418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_1, "lcd_g_1", std), 4467418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_2, "lcd_g_2", std), 4477418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_3, "lcd_g_3", std), 4487418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_4, "lcd_g_4", std), 4497418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_5, "lcd_g_5", std), 4507418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_6, "lcd_g_6", std), 4517418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_G_7, "lcd_g_7", std), 4527418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_HSYNC, "lcd_hsync", std), 4537418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_OE, "lcd_oe", std), 4547418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_PCLK, "lcd_pclk", std), 4557418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_0, "lcd_r_0", std), 4567418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_1, "lcd_r_1", std), 4577418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_2, "lcd_r_2", std), 4587418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_3, "lcd_r_3", std), 4597418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_4, "lcd_r_4", std), 4607418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_5, "lcd_r_5", std), 4617418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_6, "lcd_r_6", std), 4627418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_R_7, "lcd_r_7", std), 4637418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_LCD_VSYNC, "lcd_vsync", std), 4647418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO0, "mdmgpio0", std), 4657418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO1, "mdmgpio1", std), 4667418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO2, "mdmgpio2", std), 4677418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO3, "mdmgpio3", std), 4687418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO4, "mdmgpio4", std), 4697418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO5, "mdmgpio5", std), 4707418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO6, "mdmgpio6", std), 4717418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO7, "mdmgpio7", std), 4727418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MDMGPIO8, "mdmgpio8", std), 4737418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_0, "mphi_data_0", std), 4747418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_1, "mphi_data_1", std), 4757418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_2, "mphi_data_2", std), 4767418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_3, "mphi_data_3", std), 4777418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_4, "mphi_data_4", std), 4787418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_5, "mphi_data_5", std), 4797418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_6, "mphi_data_6", std), 4807418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_7, "mphi_data_7", std), 4817418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_8, "mphi_data_8", std), 4827418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_9, "mphi_data_9", std), 4837418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_10, "mphi_data_10", std), 4847418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_11, "mphi_data_11", std), 4857418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_12, "mphi_data_12", std), 4867418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_13, "mphi_data_13", std), 4877418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_14, "mphi_data_14", std), 4887418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_DATA_15, "mphi_data_15", std), 4897418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HA0, "mphi_ha0", std), 4907418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HAT0, "mphi_hat0", std), 4917418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HAT1, "mphi_hat1", std), 4927418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HCE0_N, "mphi_hce0_n", std), 4937418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HCE1_N, "mphi_hce1_n", std), 4947418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HRD_N, "mphi_hrd_n", std), 4957418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_HWR_N, "mphi_hwr_n", std), 4967418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_RUN0, "mphi_run0", std), 4977418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MPHI_RUN1, "mphi_run1", std), 4987418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MTX_SCAN_CLK, "mtx_scan_clk", std), 4997418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_MTX_SCAN_DATA, "mtx_scan_data", std), 5007418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_0, "nand_ad_0", std), 5017418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_1, "nand_ad_1", std), 5027418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_2, "nand_ad_2", std), 5037418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_3, "nand_ad_3", std), 5047418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_4, "nand_ad_4", std), 5057418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_5, "nand_ad_5", std), 5067418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_6, "nand_ad_6", std), 5077418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_AD_7, "nand_ad_7", std), 5087418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_ALE, "nand_ale", std), 5097418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_CEN_0, "nand_cen_0", std), 5107418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_CEN_1, "nand_cen_1", std), 5117418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_CLE, "nand_cle", std), 5127418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_OEN, "nand_oen", std), 5137418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_RDY_0, "nand_rdy_0", std), 5147418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_RDY_1, "nand_rdy_1", std), 5157418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_WEN, "nand_wen", std), 5167418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_NAND_WP, "nand_wp", std), 5177418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_PC1, "pc1", std), 5187418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_PC2, "pc2", std), 5197418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_PMU_INT, "pmu_int", std), 5207418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_PMU_SCL, "pmu_scl", i2c), 5217418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_PMU_SDA, "pmu_sda", i2c), 5227418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RFST2G_MTSLOTEN3G, "rfst2g_mtsloten3g", 5237418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin std), 5247418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RX_CTL, "rgmii_0_rx_ctl", std), 5257418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXC, "rgmii_0_rxc", std), 5267418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXD_0, "rgmii_0_rxd_0", std), 5277418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXD_1, "rgmii_0_rxd_1", std), 5287418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXD_2, "rgmii_0_rxd_2", std), 5297418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_RXD_3, "rgmii_0_rxd_3", std), 5307418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TX_CTL, "rgmii_0_tx_ctl", std), 5317418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXC, "rgmii_0_txc", std), 5327418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXD_0, "rgmii_0_txd_0", std), 5337418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXD_1, "rgmii_0_txd_1", std), 5347418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXD_2, "rgmii_0_txd_2", std), 5357418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_0_TXD_3, "rgmii_0_txd_3", std), 5367418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RX_CTL, "rgmii_1_rx_ctl", std), 5377418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXC, "rgmii_1_rxc", std), 5387418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXD_0, "rgmii_1_rxd_0", std), 5397418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXD_1, "rgmii_1_rxd_1", std), 5407418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXD_2, "rgmii_1_rxd_2", std), 5417418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_RXD_3, "rgmii_1_rxd_3", std), 5427418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TX_CTL, "rgmii_1_tx_ctl", std), 5437418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXC, "rgmii_1_txc", std), 5447418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXD_0, "rgmii_1_txd_0", std), 5457418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXD_1, "rgmii_1_txd_1", std), 5467418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXD_2, "rgmii_1_txd_2", std), 5477418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_1_TXD_3, "rgmii_1_txd_3", std), 5487418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_GPIO_0, "rgmii_gpio_0", std), 5497418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_GPIO_1, "rgmii_gpio_1", std), 5507418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_GPIO_2, "rgmii_gpio_2", std), 5517418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RGMII_GPIO_3, "rgmii_gpio_3", std), 5527418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RTXDATA2G_TXDATA3G1, 5537418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rtxdata2g_txdata3g1", std), 5547418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RTXEN2G_TXDATA3G2, "rtxen2g_txdata3g2", 5557418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin std), 5567418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RXDATA3G0, "rxdata3g0", std), 5577418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RXDATA3G1, "rxdata3g1", std), 5587418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_RXDATA3G2, "rxdata3g2", std), 5597418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_CLK, "sdio1_clk", std), 5607418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_CMD, "sdio1_cmd", std), 5617418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_DATA_0, "sdio1_data_0", std), 5627418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_DATA_1, "sdio1_data_1", std), 5637418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_DATA_2, "sdio1_data_2", std), 5647418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO1_DATA_3, "sdio1_data_3", std), 5657418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_CLK, "sdio4_clk", std), 5667418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_CMD, "sdio4_cmd", std), 5677418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_DATA_0, "sdio4_data_0", std), 5687418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_DATA_1, "sdio4_data_1", std), 5697418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_DATA_2, "sdio4_data_2", std), 5707418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SDIO4_DATA_3, "sdio4_data_3", std), 5717418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SIM_CLK, "sim_clk", std), 5727418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SIM_DATA, "sim_data", std), 5737418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SIM_DET, "sim_det", std), 5747418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SIM_RESETN, "sim_resetn", std), 5757418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SIM2_CLK, "sim2_clk", std), 5767418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SIM2_DATA, "sim2_data", std), 5777418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SIM2_DET, "sim2_det", std), 5787418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SIM2_RESETN, "sim2_resetn", std), 5797418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SRI_C, "sri_c", std), 5807418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SRI_D, "sri_d", std), 5817418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SRI_E, "sri_e", std), 5827418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP_EXTCLK, "ssp_extclk", std), 5837418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP0_CLK, "ssp0_clk", std), 5847418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP0_FS, "ssp0_fs", std), 5857418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP0_RXD, "ssp0_rxd", std), 5867418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP0_TXD, "ssp0_txd", std), 5877418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_CLK, "ssp2_clk", std), 5887418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_FS_0, "ssp2_fs_0", std), 5897418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_FS_1, "ssp2_fs_1", std), 5907418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_FS_2, "ssp2_fs_2", std), 5917418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_FS_3, "ssp2_fs_3", std), 5927418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_RXD_0, "ssp2_rxd_0", std), 5937418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_RXD_1, "ssp2_rxd_1", std), 5947418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_TXD_0, "ssp2_txd_0", std), 5957418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP2_TXD_1, "ssp2_txd_1", std), 5967418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP3_CLK, "ssp3_clk", std), 5977418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP3_FS, "ssp3_fs", std), 5987418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP3_RXD, "ssp3_rxd", std), 5997418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP3_TXD, "ssp3_txd", std), 6007418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP4_CLK, "ssp4_clk", std), 6017418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP4_FS, "ssp4_fs", std), 6027418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP4_RXD, "ssp4_rxd", std), 6037418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP4_TXD, "ssp4_txd", std), 6047418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP5_CLK, "ssp5_clk", std), 6057418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP5_FS, "ssp5_fs", std), 6067418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP5_RXD, "ssp5_rxd", std), 6077418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP5_TXD, "ssp5_txd", std), 6087418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP6_CLK, "ssp6_clk", std), 6097418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP6_FS, "ssp6_fs", std), 6107418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP6_RXD, "ssp6_rxd", std), 6117418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SSP6_TXD, "ssp6_txd", std), 6127418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_STAT_1, "stat_1", std), 6137418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_STAT_2, "stat_2", std), 6147418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_SYSCLKEN, "sysclken", std), 6157418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TRACECLK, "traceclk", std), 6167418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT00, "tracedt00", std), 6177418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT01, "tracedt01", std), 6187418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT02, "tracedt02", std), 6197418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT03, "tracedt03", std), 6207418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT04, "tracedt04", std), 6217418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT05, "tracedt05", std), 6227418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT06, "tracedt06", std), 6237418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT07, "tracedt07", std), 6247418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT08, "tracedt08", std), 6257418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT09, "tracedt09", std), 6267418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT10, "tracedt10", std), 6277418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT11, "tracedt11", std), 6287418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT12, "tracedt12", std), 6297418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT13, "tracedt13", std), 6307418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT14, "tracedt14", std), 6317418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TRACEDT15, "tracedt15", std), 6327418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TXDATA3G0, "txdata3g0", std), 6337418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_TXPWRIND, "txpwrind", std), 6347418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB1_UCTS, "uartb1_ucts", std), 6357418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB1_URTS, "uartb1_urts", std), 6367418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB1_URXD, "uartb1_urxd", std), 6377418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB1_UTXD, "uartb1_utxd", std), 6387418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB2_URXD, "uartb2_urxd", std), 6397418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB2_UTXD, "uartb2_utxd", std), 6407418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB3_UCTS, "uartb3_ucts", std), 6417418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB3_URTS, "uartb3_urts", std), 6427418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB3_URXD, "uartb3_urxd", std), 6437418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB3_UTXD, "uartb3_utxd", std), 6447418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB4_UCTS, "uartb4_ucts", std), 6457418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB4_URTS, "uartb4_urts", std), 6467418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB4_URXD, "uartb4_urxd", std), 6477418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_UARTB4_UTXD, "uartb4_utxd", std), 6487418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM1_SCL, "vc_cam1_scl", i2c), 6497418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM1_SDA, "vc_cam1_sda", i2c), 6507418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM2_SCL, "vc_cam2_scl", i2c), 6517418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM2_SDA, "vc_cam2_sda", i2c), 6527418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM3_SCL, "vc_cam3_scl", i2c), 6537418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_DESC(BCM281XX_PIN_VC_CAM3_SDA, "vc_cam3_sda", i2c), 6547418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin}; 6557418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 6567418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic const char * const bcm281xx_alt_groups[] = { 6577418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "adcsync", 6587418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "bat_rm", 6597418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "bsc1_scl", 6607418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "bsc1_sda", 6617418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "bsc2_scl", 6627418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "bsc2_sda", 6637418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "classgpwr", 6647418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "clk_cx8", 6657418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "clkout_0", 6667418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "clkout_1", 6677418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "clkout_2", 6687418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "clkout_3", 6697418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "clkreq_in_0", 6707418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "clkreq_in_1", 6717418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "cws_sys_req1", 6727418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "cws_sys_req2", 6737418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "cws_sys_req3", 6747418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "digmic1_clk", 6757418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "digmic1_dq", 6767418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "digmic2_clk", 6777418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "digmic2_dq", 6787418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gpen13", 6797418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gpen14", 6807418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gpen15", 6817418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gpio00", 6827418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gpio01", 6837418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gpio02", 6847418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gpio03", 6857418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gpio04", 6867418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gpio05", 6877418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gpio06", 6887418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gpio07", 6897418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gpio08", 6907418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gpio09", 6917418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gpio10", 6927418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gpio11", 6937418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gpio12", 6947418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gpio13", 6957418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gpio14", 6967418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gps_pablank", 6977418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "gps_tmark", 6987418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "hdmi_scl", 6997418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "hdmi_sda", 7007418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ic_dm", 7017418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ic_dp", 7027418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "kp_col_ip_0", 7037418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "kp_col_ip_1", 7047418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "kp_col_ip_2", 7057418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "kp_col_ip_3", 7067418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "kp_row_op_0", 7077418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "kp_row_op_1", 7087418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "kp_row_op_2", 7097418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "kp_row_op_3", 7107418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_b_0", 7117418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_b_1", 7127418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_b_2", 7137418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_b_3", 7147418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_b_4", 7157418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_b_5", 7167418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_b_6", 7177418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_b_7", 7187418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_g_0", 7197418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_g_1", 7207418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_g_2", 7217418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_g_3", 7227418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_g_4", 7237418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_g_5", 7247418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_g_6", 7257418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_g_7", 7267418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_hsync", 7277418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_oe", 7287418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_pclk", 7297418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_r_0", 7307418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_r_1", 7317418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_r_2", 7327418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_r_3", 7337418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_r_4", 7347418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_r_5", 7357418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_r_6", 7367418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_r_7", 7377418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "lcd_vsync", 7387418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mdmgpio0", 7397418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mdmgpio1", 7407418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mdmgpio2", 7417418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mdmgpio3", 7427418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mdmgpio4", 7437418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mdmgpio5", 7447418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mdmgpio6", 7457418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mdmgpio7", 7467418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mdmgpio8", 7477418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_data_0", 7487418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_data_1", 7497418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_data_2", 7507418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_data_3", 7517418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_data_4", 7527418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_data_5", 7537418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_data_6", 7547418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_data_7", 7557418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_data_8", 7567418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_data_9", 7577418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_data_10", 7587418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_data_11", 7597418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_data_12", 7607418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_data_13", 7617418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_data_14", 7627418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_data_15", 7637418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_ha0", 7647418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_hat0", 7657418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_hat1", 7667418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_hce0_n", 7677418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_hce1_n", 7687418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_hrd_n", 7697418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_hwr_n", 7707418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_run0", 7717418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mphi_run1", 7727418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mtx_scan_clk", 7737418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "mtx_scan_data", 7747418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "nand_ad_0", 7757418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "nand_ad_1", 7767418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "nand_ad_2", 7777418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "nand_ad_3", 7787418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "nand_ad_4", 7797418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "nand_ad_5", 7807418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "nand_ad_6", 7817418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "nand_ad_7", 7827418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "nand_ale", 7837418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "nand_cen_0", 7847418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "nand_cen_1", 7857418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "nand_cle", 7867418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "nand_oen", 7877418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "nand_rdy_0", 7887418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "nand_rdy_1", 7897418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "nand_wen", 7907418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "nand_wp", 7917418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "pc1", 7927418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "pc2", 7937418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "pmu_int", 7947418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "pmu_scl", 7957418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "pmu_sda", 7967418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rfst2g_mtsloten3g", 7977418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_0_rx_ctl", 7987418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_0_rxc", 7997418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_0_rxd_0", 8007418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_0_rxd_1", 8017418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_0_rxd_2", 8027418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_0_rxd_3", 8037418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_0_tx_ctl", 8047418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_0_txc", 8057418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_0_txd_0", 8067418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_0_txd_1", 8077418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_0_txd_2", 8087418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_0_txd_3", 8097418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_1_rx_ctl", 8107418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_1_rxc", 8117418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_1_rxd_0", 8127418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_1_rxd_1", 8137418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_1_rxd_2", 8147418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_1_rxd_3", 8157418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_1_tx_ctl", 8167418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_1_txc", 8177418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_1_txd_0", 8187418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_1_txd_1", 8197418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_1_txd_2", 8207418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_1_txd_3", 8217418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_gpio_0", 8227418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_gpio_1", 8237418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_gpio_2", 8247418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rgmii_gpio_3", 8257418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rtxdata2g_txdata3g1", 8267418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rtxen2g_txdata3g2", 8277418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rxdata3g0", 8287418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rxdata3g1", 8297418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "rxdata3g2", 8307418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sdio1_clk", 8317418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sdio1_cmd", 8327418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sdio1_data_0", 8337418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sdio1_data_1", 8347418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sdio1_data_2", 8357418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sdio1_data_3", 8367418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sdio4_clk", 8377418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sdio4_cmd", 8387418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sdio4_data_0", 8397418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sdio4_data_1", 8407418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sdio4_data_2", 8417418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sdio4_data_3", 8427418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sim_clk", 8437418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sim_data", 8447418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sim_det", 8457418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sim_resetn", 8467418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sim2_clk", 8477418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sim2_data", 8487418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sim2_det", 8497418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sim2_resetn", 8507418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sri_c", 8517418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sri_d", 8527418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sri_e", 8537418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp_extclk", 8547418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp0_clk", 8557418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp0_fs", 8567418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp0_rxd", 8577418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp0_txd", 8587418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp2_clk", 8597418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp2_fs_0", 8607418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp2_fs_1", 8617418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp2_fs_2", 8627418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp2_fs_3", 8637418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp2_rxd_0", 8647418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp2_rxd_1", 8657418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp2_txd_0", 8667418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp2_txd_1", 8677418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp3_clk", 8687418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp3_fs", 8697418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp3_rxd", 8707418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp3_txd", 8717418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp4_clk", 8727418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp4_fs", 8737418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp4_rxd", 8747418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp4_txd", 8757418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp5_clk", 8767418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp5_fs", 8777418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp5_rxd", 8787418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp5_txd", 8797418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp6_clk", 8807418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp6_fs", 8817418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp6_rxd", 8827418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "ssp6_txd", 8837418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "stat_1", 8847418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "stat_2", 8857418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "sysclken", 8867418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "traceclk", 8877418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "tracedt00", 8887418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "tracedt01", 8897418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "tracedt02", 8907418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "tracedt03", 8917418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "tracedt04", 8927418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "tracedt05", 8937418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "tracedt06", 8947418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "tracedt07", 8957418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "tracedt08", 8967418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "tracedt09", 8977418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "tracedt10", 8987418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "tracedt11", 8997418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "tracedt12", 9007418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "tracedt13", 9017418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "tracedt14", 9027418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "tracedt15", 9037418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "txdata3g0", 9047418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "txpwrind", 9057418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "uartb1_ucts", 9067418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "uartb1_urts", 9077418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "uartb1_urxd", 9087418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "uartb1_utxd", 9097418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "uartb2_urxd", 9107418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "uartb2_utxd", 9117418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "uartb3_ucts", 9127418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "uartb3_urts", 9137418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "uartb3_urxd", 9147418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "uartb3_utxd", 9157418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "uartb4_ucts", 9167418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "uartb4_urts", 9177418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "uartb4_urxd", 9187418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "uartb4_utxd", 9197418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "vc_cam1_scl", 9207418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "vc_cam1_sda", 9217418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "vc_cam2_scl", 9227418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "vc_cam2_sda", 9237418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "vc_cam3_scl", 9247418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "vc_cam3_sda", 9257418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin}; 9267418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 9277418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin/* Every pin can implement all ALT1-ALT4 functions */ 9287418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_FUNCTION(fcn_name) \ 9297418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin{ \ 9307418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .name = #fcn_name, \ 9317418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .groups = bcm281xx_alt_groups, \ 9327418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .ngroups = ARRAY_SIZE(bcm281xx_alt_groups), \ 9337418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin} 9347418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 9357418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic const struct bcm281xx_pin_function bcm281xx_functions[] = { 9367418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_FUNCTION(alt1), 9377418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_FUNCTION(alt2), 9387418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_FUNCTION(alt3), 9397418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_FUNCTION(alt4), 9407418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin}; 9417418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 9427418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic struct bcm281xx_pinctrl_data bcm281xx_pinctrl = { 9437418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .pins = bcm281xx_pinctrl_pins, 9447418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .npins = ARRAY_SIZE(bcm281xx_pinctrl_pins), 9457418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .functions = bcm281xx_functions, 9467418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .nfunctions = ARRAY_SIZE(bcm281xx_functions), 9477418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin}; 9487418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 9497418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic inline enum bcm281xx_pin_type pin_type_get(struct pinctrl_dev *pctldev, 9507418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned pin) 9517418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin{ 9527418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 9537418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 9547418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin if (pin >= pdata->npins) 9557418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return BCM281XX_PIN_TYPE_UNKNOWN; 9567418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 9577418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return *(enum bcm281xx_pin_type *)(pdata->pins[pin].drv_data); 9587418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin} 9597418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 9607418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_SHIFT(type, param) \ 9617418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin (BCM281XX_ ## type ## _PIN_REG_ ## param ## _SHIFT) 9627418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 9637418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin#define BCM281XX_PIN_MASK(type, param) \ 9647418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin (BCM281XX_ ## type ## _PIN_REG_ ## param ## _MASK) 9657418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 9667418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin/* 9677418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * This helper function is used to build up the value and mask used to write to 9687418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * a pin register, but does not actually write to the register. 9697418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin */ 9707418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic inline void bcm281xx_pin_update(u32 *reg_val, u32 *reg_mask, 9717418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin u32 param_val, u32 param_shift, 9727418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin u32 param_mask) 9737418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin{ 9747418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin *reg_val &= ~param_mask; 9757418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin *reg_val |= (param_val << param_shift) & param_mask; 9767418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin *reg_mask |= param_mask; 9777418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin} 9787418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 9797418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic struct regmap_config bcm281xx_pinctrl_regmap_config = { 9807418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .reg_bits = 32, 9817418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .reg_stride = 4, 9827418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .val_bits = 32, 9837418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .max_register = BCM281XX_PIN_VC_CAM3_SDA, 9847418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin}; 9857418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 9867418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic int bcm281xx_pinctrl_get_groups_count(struct pinctrl_dev *pctldev) 9877418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin{ 9887418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 9897418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 9907418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return pdata->npins; 9917418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin} 9927418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 9937418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic const char *bcm281xx_pinctrl_get_group_name(struct pinctrl_dev *pctldev, 9947418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned group) 9957418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin{ 9967418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 9977418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 9987418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return pdata->pins[group].name; 9997418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin} 10007418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10017418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic int bcm281xx_pinctrl_get_group_pins(struct pinctrl_dev *pctldev, 10027418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned group, 10037418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin const unsigned **pins, 10047418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned *num_pins) 10057418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin{ 10067418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 10077418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10087418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin *pins = &pdata->pins[group].number; 10097418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin *num_pins = 1; 10107418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10117418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return 0; 10127418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin} 10137418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10147418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic void bcm281xx_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev, 10157418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin struct seq_file *s, 10167418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned offset) 10177418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin{ 10187418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin seq_printf(s, " %s", dev_name(pctldev->dev)); 10197418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin} 10207418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10217418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic struct pinctrl_ops bcm281xx_pinctrl_ops = { 10227418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .get_groups_count = bcm281xx_pinctrl_get_groups_count, 10237418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .get_group_name = bcm281xx_pinctrl_get_group_name, 10247418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .get_group_pins = bcm281xx_pinctrl_get_group_pins, 10257418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .pin_dbg_show = bcm281xx_pinctrl_pin_dbg_show, 10267418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .dt_node_to_map = pinconf_generic_dt_node_to_map_pin, 10277418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .dt_free_map = pinctrl_utils_dt_free_map, 10287418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin}; 10297418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10307418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic int bcm281xx_pinctrl_get_fcns_count(struct pinctrl_dev *pctldev) 10317418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin{ 10327418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 10337418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10347418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return pdata->nfunctions; 10357418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin} 10367418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10377418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic const char *bcm281xx_pinctrl_get_fcn_name(struct pinctrl_dev *pctldev, 10387418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned function) 10397418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin{ 10407418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 10417418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10427418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return pdata->functions[function].name; 10437418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin} 10447418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10457418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic int bcm281xx_pinctrl_get_fcn_groups(struct pinctrl_dev *pctldev, 10467418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned function, 10477418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin const char * const **groups, 10487418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned * const num_groups) 10497418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin{ 10507418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 10517418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10527418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin *groups = pdata->functions[function].groups; 10537418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin *num_groups = pdata->functions[function].ngroups; 10547418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10557418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return 0; 10567418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin} 10577418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 105803e9f0cac5da6af85758276cb4624caf5911f2b9Linus Walleijstatic int bcm281xx_pinmux_set(struct pinctrl_dev *pctldev, 105903e9f0cac5da6af85758276cb4624caf5911f2b9Linus Walleij unsigned function, 106003e9f0cac5da6af85758276cb4624caf5911f2b9Linus Walleij unsigned group) 10617418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin{ 10627418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 10637418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin const struct bcm281xx_pin_function *f = &pdata->functions[function]; 10647418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin u32 offset = 4 * pdata->pins[group].number; 10657418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin int rc = 0; 10667418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10677418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin dev_dbg(pctldev->dev, 10687418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "%s(): Enable function %s (%d) of pin %s (%d) @offset 0x%x.\n", 10697418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin __func__, f->name, function, pdata->pins[group].name, 10707418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin pdata->pins[group].number, offset); 10717418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10727418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin rc = regmap_update_bits(pdata->regmap, offset, 10737418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_REG_F_SEL_MASK, 10747418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin function << BCM281XX_PIN_REG_F_SEL_SHIFT); 10757418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin if (rc) 10767418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin dev_err(pctldev->dev, 10777418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "Error updating register for pin %s (%d).\n", 10787418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin pdata->pins[group].name, pdata->pins[group].number); 10797418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10807418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return rc; 10817418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin} 10827418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10837418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic struct pinmux_ops bcm281xx_pinctrl_pinmux_ops = { 10847418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .get_functions_count = bcm281xx_pinctrl_get_fcns_count, 10857418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .get_function_name = bcm281xx_pinctrl_get_fcn_name, 10867418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .get_function_groups = bcm281xx_pinctrl_get_fcn_groups, 108703e9f0cac5da6af85758276cb4624caf5911f2b9Linus Walleij .set_mux = bcm281xx_pinmux_set, 10887418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin}; 10897418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10907418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic int bcm281xx_pinctrl_pin_config_get(struct pinctrl_dev *pctldev, 10917418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned pin, 10927418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned long *config) 10937418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin{ 10947418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return -ENOTSUPP; 10957418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin} 10967418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10977418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 10987418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin/* Goes through the configs and update register val/mask */ 10997418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic int bcm281xx_std_pin_update(struct pinctrl_dev *pctldev, 11007418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned pin, 11017418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned long *configs, 11027418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned num_configs, 11037418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin u32 *val, 11047418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin u32 *mask) 11057418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin{ 11067418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 11077418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin int i; 11087418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin enum pin_config_param param; 11097418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin u16 arg; 11107418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 11117418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin for (i = 0; i < num_configs; i++) { 11127418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin param = pinconf_to_config_param(configs[i]); 11137418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin arg = pinconf_to_config_argument(configs[i]); 11147418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 11157418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin switch (param) { 11167418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin case PIN_CONFIG_INPUT_SCHMITT_ENABLE: 11177418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin arg = (arg >= 1 ? 1 : 0); 11187418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pin_update(val, mask, arg, 11197418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_SHIFT(STD, HYST), 11207418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_MASK(STD, HYST)); 11217418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin break; 11227418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin /* 11237418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * The pin bias can only be one of pull-up, pull-down, or 11247418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * disable. The user does not need to specify a value for the 11257418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * property, and the default value from pinconf-generic is 11267418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * ignored. 11277418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin */ 11287418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin case PIN_CONFIG_BIAS_DISABLE: 11297418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pin_update(val, mask, 0, 11307418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_SHIFT(STD, PULL_UP), 11317418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_MASK(STD, PULL_UP)); 11327418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pin_update(val, mask, 0, 11337418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_SHIFT(STD, PULL_DN), 11347418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_MASK(STD, PULL_DN)); 11357418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin break; 11367418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 11377418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin case PIN_CONFIG_BIAS_PULL_UP: 11387418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pin_update(val, mask, 1, 11397418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_SHIFT(STD, PULL_UP), 11407418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_MASK(STD, PULL_UP)); 11417418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pin_update(val, mask, 0, 11427418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_SHIFT(STD, PULL_DN), 11437418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_MASK(STD, PULL_DN)); 11447418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin break; 11457418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 11467418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin case PIN_CONFIG_BIAS_PULL_DOWN: 11477418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pin_update(val, mask, 0, 11487418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_SHIFT(STD, PULL_UP), 11497418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_MASK(STD, PULL_UP)); 11507418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pin_update(val, mask, 1, 11517418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_SHIFT(STD, PULL_DN), 11527418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_MASK(STD, PULL_DN)); 11537418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin break; 11547418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 11557418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin case PIN_CONFIG_SLEW_RATE: 11567418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin arg = (arg >= 1 ? 1 : 0); 11577418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pin_update(val, mask, arg, 11587418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_SHIFT(STD, SLEW), 11597418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_MASK(STD, SLEW)); 11607418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin break; 11617418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 11627418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin case PIN_CONFIG_INPUT_ENABLE: 11637418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin /* inversed since register is for input _disable_ */ 11647418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin arg = (arg >= 1 ? 0 : 1); 11657418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pin_update(val, mask, arg, 11667418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_SHIFT(STD, INPUT_DIS), 11677418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_MASK(STD, INPUT_DIS)); 11687418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin break; 11697418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 11707418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin case PIN_CONFIG_DRIVE_STRENGTH: 11717418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin /* Valid range is 2-16 mA, even numbers only */ 11727418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin if ((arg < 2) || (arg > 16) || (arg % 2)) { 11737418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin dev_err(pctldev->dev, 11747418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "Invalid Drive Strength value (%d) for " 11757418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "pin %s (%d). Valid values are " 11767418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "(2..16) mA, even numbers only.\n", 11777418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin arg, pdata->pins[pin].name, pin); 11787418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return -EINVAL; 11797418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin } 11807418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pin_update(val, mask, (arg/2)-1, 11817418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_SHIFT(STD, DRV_STR), 11827418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_MASK(STD, DRV_STR)); 11837418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin break; 11847418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 11857418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin default: 11867418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin dev_err(pctldev->dev, 11877418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "Unrecognized pin config %d for pin %s (%d).\n", 11887418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin param, pdata->pins[pin].name, pin); 11897418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return -EINVAL; 11907418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 11917418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin } /* switch config */ 11927418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin } /* for each config */ 11937418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 11947418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return 0; 11957418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin} 11967418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 11977418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin/* 11987418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * The pull-up strength for an I2C pin is represented by bits 4-6 in the 11997418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * register with the following mapping: 12007418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * 0b000: No pull-up 12017418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * 0b001: 1200 Ohm 12027418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * 0b010: 1800 Ohm 12037418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * 0b011: 720 Ohm 12047418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * 0b100: 2700 Ohm 12057418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * 0b101: 831 Ohm 12067418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * 0b110: 1080 Ohm 12077418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * 0b111: 568 Ohm 12087418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin * This array maps pull-up strength in Ohms to register values (1+index). 12097418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin */ 12107418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic const u16 bcm281xx_pullup_map[] = { 12117418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 1200, 1800, 720, 2700, 831, 1080, 568 12127418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin}; 12137418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 12147418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin/* Goes through the configs and update register val/mask */ 12157418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic int bcm281xx_i2c_pin_update(struct pinctrl_dev *pctldev, 12167418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned pin, 12177418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned long *configs, 12187418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned num_configs, 12197418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin u32 *val, 12207418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin u32 *mask) 12217418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin{ 12227418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 12237418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin int i, j; 12247418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin enum pin_config_param param; 12257418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin u16 arg; 12267418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 12277418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin for (i = 0; i < num_configs; i++) { 12287418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin param = pinconf_to_config_param(configs[i]); 12297418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin arg = pinconf_to_config_argument(configs[i]); 12307418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 12317418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin switch (param) { 12327418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin case PIN_CONFIG_BIAS_PULL_UP: 12337418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin for (j = 0; j < ARRAY_SIZE(bcm281xx_pullup_map); j++) 12347418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin if (bcm281xx_pullup_map[j] == arg) 12357418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin break; 12367418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 12377418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin if (j == ARRAY_SIZE(bcm281xx_pullup_map)) { 12387418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin dev_err(pctldev->dev, 12397418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "Invalid pull-up value (%d) for pin %s " 12407418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "(%d). Valid values are 568, 720, 831, " 12417418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "1080, 1200, 1800, 2700 Ohms.\n", 12427418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin arg, pdata->pins[pin].name, pin); 12437418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return -EINVAL; 12447418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin } 12457418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 12467418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pin_update(val, mask, j+1, 12477418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_SHIFT(I2C, PULL_UP_STR), 12487418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_MASK(I2C, PULL_UP_STR)); 12497418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin break; 12507418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 12517418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin case PIN_CONFIG_BIAS_DISABLE: 12527418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pin_update(val, mask, 0, 12537418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_SHIFT(I2C, PULL_UP_STR), 12547418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_MASK(I2C, PULL_UP_STR)); 12557418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin break; 12567418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 12577418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin case PIN_CONFIG_SLEW_RATE: 12587418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin arg = (arg >= 1 ? 1 : 0); 12597418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pin_update(val, mask, arg, 12607418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_SHIFT(I2C, SLEW), 12617418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_MASK(I2C, SLEW)); 12627418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin break; 12637418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 12647418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin case PIN_CONFIG_INPUT_ENABLE: 12657418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin /* inversed since register is for input _disable_ */ 12667418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin arg = (arg >= 1 ? 0 : 1); 12677418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pin_update(val, mask, arg, 12687418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_SHIFT(I2C, INPUT_DIS), 12697418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_MASK(I2C, INPUT_DIS)); 12707418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin break; 12717418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 12727418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin default: 12737418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin dev_err(pctldev->dev, 12747418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "Unrecognized pin config %d for pin %s (%d).\n", 12757418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin param, pdata->pins[pin].name, pin); 12767418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return -EINVAL; 12777418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 12787418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin } /* switch config */ 12797418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin } /* for each config */ 12807418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 12817418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return 0; 12827418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin} 12837418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 12847418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin/* Goes through the configs and update register val/mask */ 12857418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic int bcm281xx_hdmi_pin_update(struct pinctrl_dev *pctldev, 12867418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned pin, 12877418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned long *configs, 12887418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned num_configs, 12897418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin u32 *val, 12907418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin u32 *mask) 12917418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin{ 12927418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 12937418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin int i; 12947418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin enum pin_config_param param; 12957418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin u16 arg; 12967418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 12977418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin for (i = 0; i < num_configs; i++) { 12987418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin param = pinconf_to_config_param(configs[i]); 12997418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin arg = pinconf_to_config_argument(configs[i]); 13007418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 13017418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin switch (param) { 13027418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin case PIN_CONFIG_SLEW_RATE: 13037418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin arg = (arg >= 1 ? 1 : 0); 13047418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pin_update(val, mask, arg, 13057418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_SHIFT(HDMI, MODE), 13067418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_MASK(HDMI, MODE)); 13077418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin break; 13087418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 13097418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin case PIN_CONFIG_INPUT_ENABLE: 13107418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin /* inversed since register is for input _disable_ */ 13117418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin arg = (arg >= 1 ? 0 : 1); 13127418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pin_update(val, mask, arg, 13137418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_SHIFT(HDMI, INPUT_DIS), 13147418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin BCM281XX_PIN_MASK(HDMI, INPUT_DIS)); 13157418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin break; 13167418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 13177418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin default: 13187418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin dev_err(pctldev->dev, 13197418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "Unrecognized pin config %d for pin %s (%d).\n", 13207418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin param, pdata->pins[pin].name, pin); 13217418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return -EINVAL; 13227418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 13237418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin } /* switch config */ 13247418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin } /* for each config */ 13257418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 13267418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return 0; 13277418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin} 13287418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 13297418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic int bcm281xx_pinctrl_pin_config_set(struct pinctrl_dev *pctldev, 13307418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned pin, 13317418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned long *configs, 13327418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin unsigned num_configs) 13337418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin{ 13347418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin struct bcm281xx_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev); 13357418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin enum bcm281xx_pin_type pin_type; 13367418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin u32 offset = 4 * pin; 13377418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin u32 cfg_val, cfg_mask; 13387418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin int rc; 13397418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 13407418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin cfg_val = 0; 13417418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin cfg_mask = 0; 13427418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin pin_type = pin_type_get(pctldev, pin); 13437418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 13447418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin /* Different pins have different configuration options */ 13457418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin switch (pin_type) { 13467418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin case BCM281XX_PIN_TYPE_STD: 13477418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin rc = bcm281xx_std_pin_update(pctldev, pin, configs, 13487418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin num_configs, &cfg_val, &cfg_mask); 13497418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin break; 13507418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 13517418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin case BCM281XX_PIN_TYPE_I2C: 13527418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin rc = bcm281xx_i2c_pin_update(pctldev, pin, configs, 13537418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin num_configs, &cfg_val, &cfg_mask); 13547418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin break; 13557418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 13567418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin case BCM281XX_PIN_TYPE_HDMI: 13577418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin rc = bcm281xx_hdmi_pin_update(pctldev, pin, configs, 13587418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin num_configs, &cfg_val, &cfg_mask); 13597418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin break; 13607418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 13617418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin default: 13627418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin dev_err(pctldev->dev, "Unknown pin type for pin %s (%d).\n", 13637418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin pdata->pins[pin].name, pin); 13647418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return -EINVAL; 13657418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 13667418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin } /* switch pin type */ 13677418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 13687418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin if (rc) 13697418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return rc; 13707418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 13717418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin dev_dbg(pctldev->dev, 13727418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "%s(): Set pin %s (%d) with config 0x%x, mask 0x%x\n", 13737418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin __func__, pdata->pins[pin].name, pin, cfg_val, cfg_mask); 13747418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 13757418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin rc = regmap_update_bits(pdata->regmap, offset, cfg_mask, cfg_val); 13767418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin if (rc) { 13777418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin dev_err(pctldev->dev, 13787418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin "Error updating register for pin %s (%d).\n", 13797418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin pdata->pins[pin].name, pin); 13807418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return rc; 13817418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin } 13827418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 13837418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return 0; 13847418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin} 13857418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 13867418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic struct pinconf_ops bcm281xx_pinctrl_pinconf_ops = { 13877418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .pin_config_get = bcm281xx_pinctrl_pin_config_get, 13887418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .pin_config_set = bcm281xx_pinctrl_pin_config_set, 13897418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin}; 13907418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 13917418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic struct pinctrl_desc bcm281xx_pinctrl_desc = { 13927418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin /* name, pins, npins members initialized in probe function */ 13937418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .pctlops = &bcm281xx_pinctrl_ops, 13947418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .pmxops = &bcm281xx_pinctrl_pinmux_ops, 13957418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .confops = &bcm281xx_pinctrl_pinconf_ops, 13967418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .owner = THIS_MODULE, 13977418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin}; 13987418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 1399776667a8092d3c28c357191db595494349e83919Sachin Kamatstatic int __init bcm281xx_pinctrl_probe(struct platform_device *pdev) 14007418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin{ 14017418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin struct bcm281xx_pinctrl_data *pdata = &bcm281xx_pinctrl; 14027418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin struct resource *res; 14037418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin struct pinctrl_dev *pctl; 14047418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 14057418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin /* So far We can assume there is only 1 bank of registers */ 14067418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 14077418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin if (!res) { 14087418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin dev_err(&pdev->dev, "Missing MEM resource\n"); 14097418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return -ENODEV; 14107418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin } 14117418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 14127418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin pdata->reg_base = devm_ioremap_resource(&pdev->dev, res); 14137418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin if (IS_ERR(pdata->reg_base)) { 14147418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin dev_err(&pdev->dev, "Failed to ioremap MEM resource\n"); 14157418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return -ENODEV; 14167418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin } 14177418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 14187418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin /* Initialize the dynamic part of pinctrl_desc */ 14197418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin pdata->regmap = devm_regmap_init_mmio(&pdev->dev, pdata->reg_base, 14207418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin &bcm281xx_pinctrl_regmap_config); 14217418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin if (IS_ERR(pdata->regmap)) { 14227418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin dev_err(&pdev->dev, "Regmap MMIO init failed.\n"); 14237418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return -ENODEV; 14247418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin } 14257418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 14267418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pinctrl_desc.name = dev_name(&pdev->dev); 14277418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pinctrl_desc.pins = bcm281xx_pinctrl.pins; 14287418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin bcm281xx_pinctrl_desc.npins = bcm281xx_pinctrl.npins; 14297418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 14307418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin pctl = pinctrl_register(&bcm281xx_pinctrl_desc, 14317418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin &pdev->dev, 14327418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin pdata); 14337418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin if (!pctl) { 14347418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin dev_err(&pdev->dev, "Failed to register pinctrl\n"); 14357418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return -ENODEV; 14367418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin } 14377418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 14387418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin platform_set_drvdata(pdev, pdata); 14397418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 14407418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin return 0; 14417418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin} 14427418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 14437418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic struct of_device_id bcm281xx_pinctrl_of_match[] = { 14447418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin { .compatible = "brcm,bcm11351-pinctrl", }, 14457418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin { }, 14467418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin}; 14477418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 14487418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinstatic struct platform_driver bcm281xx_pinctrl_driver = { 14497418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .driver = { 14507418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .name = "bcm281xx-pinctrl", 14517418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .owner = THIS_MODULE, 14527418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin .of_match_table = bcm281xx_pinctrl_of_match, 14537418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin }, 14547418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin}; 14557418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 14567418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yinmodule_platform_driver_probe(bcm281xx_pinctrl_driver, bcm281xx_pinctrl_probe); 14577418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman Yin 14587418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman YinMODULE_AUTHOR("Broadcom Corporation <bcm-kernel-feedback-list@broadcom.com>"); 14597418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman YinMODULE_AUTHOR("Sherman Yin <syin@broadcom.com>"); 14607418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman YinMODULE_DESCRIPTION("Broadcom BCM281xx pinctrl driver"); 14617418b5cc81185e4ae1fec66156c464eb0b8d8f5aSherman YinMODULE_LICENSE("GPL v2"); 1462