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