/*
 * Copyright (C) 2013 Broadcom Corporation
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation version 2.
 *
 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
 * kind, whether express or implied; without even the implied warranty
 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */
#include <linux/err.h>
#include <linux/io.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pinctrl/pinctrl.h>
#include <linux/pinctrl/pinmux.h>
#include <linux/pinctrl/pinconf.h>
#include <linux/pinctrl/pinconf-generic.h>
#include <linux/regmap.h>
#include <linux/slab.h>
#include "core.h"
#include "pinctrl-utils.h"

/* Capri Pin Control Registers Definitions */

/* Function Select bits are the same for all pin control registers */
#define CAPRI_PIN_REG_F_SEL_MASK		0x0700
#define CAPRI_PIN_REG_F_SEL_SHIFT		8

/* Standard pin register */
#define CAPRI_STD_PIN_REG_DRV_STR_MASK		0x0007
#define CAPRI_STD_PIN_REG_DRV_STR_SHIFT		0
#define CAPRI_STD_PIN_REG_INPUT_DIS_MASK	0x0008
#define CAPRI_STD_PIN_REG_INPUT_DIS_SHIFT	3
#define CAPRI_STD_PIN_REG_SLEW_MASK		0x0010
#define CAPRI_STD_PIN_REG_SLEW_SHIFT		4
#define CAPRI_STD_PIN_REG_PULL_UP_MASK		0x0020
#define CAPRI_STD_PIN_REG_PULL_UP_SHIFT		5
#define CAPRI_STD_PIN_REG_PULL_DN_MASK		0x0040
#define CAPRI_STD_PIN_REG_PULL_DN_SHIFT		6
#define CAPRI_STD_PIN_REG_HYST_MASK		0x0080
#define CAPRI_STD_PIN_REG_HYST_SHIFT		7

/* I2C pin register */
#define CAPRI_I2C_PIN_REG_INPUT_DIS_MASK	0x0004
#define CAPRI_I2C_PIN_REG_INPUT_DIS_SHIFT	2
#define CAPRI_I2C_PIN_REG_SLEW_MASK		0x0008
#define CAPRI_I2C_PIN_REG_SLEW_SHIFT		3
#define CAPRI_I2C_PIN_REG_PULL_UP_STR_MASK	0x0070
#define CAPRI_I2C_PIN_REG_PULL_UP_STR_SHIFT	4

/* HDMI pin register */
#define CAPRI_HDMI_PIN_REG_INPUT_DIS_MASK	0x0008
#define CAPRI_HDMI_PIN_REG_INPUT_DIS_SHIFT	3
#define CAPRI_HDMI_PIN_REG_MODE_MASK		0x0010
#define CAPRI_HDMI_PIN_REG_MODE_SHIFT		4

/**
 * capri_pin_type - types of pin register
 */
enum capri_pin_type {
	CAPRI_PIN_TYPE_UNKNOWN = 0,
	CAPRI_PIN_TYPE_STD,
	CAPRI_PIN_TYPE_I2C,
	CAPRI_PIN_TYPE_HDMI,
};

static enum capri_pin_type std_pin = CAPRI_PIN_TYPE_STD;
static enum capri_pin_type i2c_pin = CAPRI_PIN_TYPE_I2C;
static enum capri_pin_type hdmi_pin = CAPRI_PIN_TYPE_HDMI;

/**
 * capri_pin_function- define pin function
 */
struct capri_pin_function {
	const char *name;
	const char * const *groups;
	const unsigned ngroups;
};

/**
 * capri_pinctrl_data - Broadcom-specific pinctrl data
 * @reg_base - base of pinctrl registers
 */
struct capri_pinctrl_data {
	void __iomem *reg_base;

	/* List of all pins */
	const struct pinctrl_pin_desc *pins;
	const unsigned npins;

	const struct capri_pin_function *functions;
	const unsigned nfunctions;

	struct regmap *regmap;
};

/*
 * Pin number definition.  The order here must be the same as defined in the
 * PADCTRLREG block in the RDB.
 */
#define CAPRI_PIN_ADCSYNC		0
#define CAPRI_PIN_BAT_RM		1
#define CAPRI_PIN_BSC1_SCL		2
#define CAPRI_PIN_BSC1_SDA		3
#define CAPRI_PIN_BSC2_SCL		4
#define CAPRI_PIN_BSC2_SDA		5
#define CAPRI_PIN_CLASSGPWR		6
#define CAPRI_PIN_CLK_CX8		7
#define CAPRI_PIN_CLKOUT_0		8
#define CAPRI_PIN_CLKOUT_1		9
#define CAPRI_PIN_CLKOUT_2		10
#define CAPRI_PIN_CLKOUT_3		11
#define CAPRI_PIN_CLKREQ_IN_0		12
#define CAPRI_PIN_CLKREQ_IN_1		13
#define CAPRI_PIN_CWS_SYS_REQ1		14
#define CAPRI_PIN_CWS_SYS_REQ2		15
#define CAPRI_PIN_CWS_SYS_REQ3		16
#define CAPRI_PIN_DIGMIC1_CLK		17
#define CAPRI_PIN_DIGMIC1_DQ		18
#define CAPRI_PIN_DIGMIC2_CLK		19
#define CAPRI_PIN_DIGMIC2_DQ		20
#define CAPRI_PIN_GPEN13		21
#define CAPRI_PIN_GPEN14		22
#define CAPRI_PIN_GPEN15		23
#define CAPRI_PIN_GPIO00		24
#define CAPRI_PIN_GPIO01		25
#define CAPRI_PIN_GPIO02		26
#define CAPRI_PIN_GPIO03		27
#define CAPRI_PIN_GPIO04		28
#define CAPRI_PIN_GPIO05		29
#define CAPRI_PIN_GPIO06		30
#define CAPRI_PIN_GPIO07		31
#define CAPRI_PIN_GPIO08		32
#define CAPRI_PIN_GPIO09		33
#define CAPRI_PIN_GPIO10		34
#define CAPRI_PIN_GPIO11		35
#define CAPRI_PIN_GPIO12		36
#define CAPRI_PIN_GPIO13		37
#define CAPRI_PIN_GPIO14		38
#define CAPRI_PIN_GPS_PABLANK		39
#define CAPRI_PIN_GPS_TMARK		40
#define CAPRI_PIN_HDMI_SCL		41
#define CAPRI_PIN_HDMI_SDA		42
#define CAPRI_PIN_IC_DM			43
#define CAPRI_PIN_IC_DP			44
#define CAPRI_PIN_KP_COL_IP_0		45
#define CAPRI_PIN_KP_COL_IP_1		46
#define CAPRI_PIN_KP_COL_IP_2		47
#define CAPRI_PIN_KP_COL_IP_3		48
#define CAPRI_PIN_KP_ROW_OP_0		49
#define CAPRI_PIN_KP_ROW_OP_1		50
#define CAPRI_PIN_KP_ROW_OP_2		51
#define CAPRI_PIN_KP_ROW_OP_3		52
#define CAPRI_PIN_LCD_B_0		53
#define CAPRI_PIN_LCD_B_1		54
#define CAPRI_PIN_LCD_B_2		55
#define CAPRI_PIN_LCD_B_3		56
#define CAPRI_PIN_LCD_B_4		57
#define CAPRI_PIN_LCD_B_5		58
#define CAPRI_PIN_LCD_B_6		59
#define CAPRI_PIN_LCD_B_7		60
#define CAPRI_PIN_LCD_G_0		61
#define CAPRI_PIN_LCD_G_1		62
#define CAPRI_PIN_LCD_G_2		63
#define CAPRI_PIN_LCD_G_3		64
#define CAPRI_PIN_LCD_G_4		65
#define CAPRI_PIN_LCD_G_5		66
#define CAPRI_PIN_LCD_G_6		67
#define CAPRI_PIN_LCD_G_7		68
#define CAPRI_PIN_LCD_HSYNC		69
#define CAPRI_PIN_LCD_OE		70
#define CAPRI_PIN_LCD_PCLK		71
#define CAPRI_PIN_LCD_R_0		72
#define CAPRI_PIN_LCD_R_1		73
#define CAPRI_PIN_LCD_R_2		74
#define CAPRI_PIN_LCD_R_3		75
#define CAPRI_PIN_LCD_R_4		76
#define CAPRI_PIN_LCD_R_5		77
#define CAPRI_PIN_LCD_R_6		78
#define CAPRI_PIN_LCD_R_7		79
#define CAPRI_PIN_LCD_VSYNC		80
#define CAPRI_PIN_MDMGPIO0		81
#define CAPRI_PIN_MDMGPIO1		82
#define CAPRI_PIN_MDMGPIO2		83
#define CAPRI_PIN_MDMGPIO3		84
#define CAPRI_PIN_MDMGPIO4		85
#define CAPRI_PIN_MDMGPIO5		86
#define CAPRI_PIN_MDMGPIO6		87
#define CAPRI_PIN_MDMGPIO7		88
#define CAPRI_PIN_MDMGPIO8		89
#define CAPRI_PIN_MPHI_DATA_0		90
#define CAPRI_PIN_MPHI_DATA_1		91
#define CAPRI_PIN_MPHI_DATA_2		92
#define CAPRI_PIN_MPHI_DATA_3		93
#define CAPRI_PIN_MPHI_DATA_4		94
#define CAPRI_PIN_MPHI_DATA_5		95
#define CAPRI_PIN_MPHI_DATA_6		96
#define CAPRI_PIN_MPHI_DATA_7		97
#define CAPRI_PIN_MPHI_DATA_8		98
#define CAPRI_PIN_MPHI_DATA_9		99
#define CAPRI_PIN_MPHI_DATA_10		100
#define CAPRI_PIN_MPHI_DATA_11		101
#define CAPRI_PIN_MPHI_DATA_12		102
#define CAPRI_PIN_MPHI_DATA_13		103
#define CAPRI_PIN_MPHI_DATA_14		104
#define CAPRI_PIN_MPHI_DATA_15		105
#define CAPRI_PIN_MPHI_HA0		106
#define CAPRI_PIN_MPHI_HAT0		107
#define CAPRI_PIN_MPHI_HAT1		108
#define CAPRI_PIN_MPHI_HCE0_N		109
#define CAPRI_PIN_MPHI_HCE1_N		110
#define CAPRI_PIN_MPHI_HRD_N		111
#define CAPRI_PIN_MPHI_HWR_N		112
#define CAPRI_PIN_MPHI_RUN0		113
#define CAPRI_PIN_MPHI_RUN1		114
#define CAPRI_PIN_MTX_SCAN_CLK		115
#define CAPRI_PIN_MTX_SCAN_DATA		116
#define CAPRI_PIN_NAND_AD_0		117
#define CAPRI_PIN_NAND_AD_1		118
#define CAPRI_PIN_NAND_AD_2		119
#define CAPRI_PIN_NAND_AD_3		120
#define CAPRI_PIN_NAND_AD_4		121
#define CAPRI_PIN_NAND_AD_5		122
#define CAPRI_PIN_NAND_AD_6		123
#define CAPRI_PIN_NAND_AD_7		124
#define CAPRI_PIN_NAND_ALE		125
#define CAPRI_PIN_NAND_CEN_0		126
#define CAPRI_PIN_NAND_CEN_1		127
#define CAPRI_PIN_NAND_CLE		128
#define CAPRI_PIN_NAND_OEN		129
#define CAPRI_PIN_NAND_RDY_0		130
#define CAPRI_PIN_NAND_RDY_1		131
#define CAPRI_PIN_NAND_WEN		132
#define CAPRI_PIN_NAND_WP		133
#define CAPRI_PIN_PC1			134
#define CAPRI_PIN_PC2			135
#define CAPRI_PIN_PMU_INT		136
#define CAPRI_PIN_PMU_SCL		137
#define CAPRI_PIN_PMU_SDA		138
#define CAPRI_PIN_RFST2G_MTSLOTEN3G	139
#define CAPRI_PIN_RGMII_0_RX_CTL	140
#define CAPRI_PIN_RGMII_0_RXC		141
#define CAPRI_PIN_RGMII_0_RXD_0		142
#define CAPRI_PIN_RGMII_0_RXD_1		143
#define CAPRI_PIN_RGMII_0_RXD_2		144
#define CAPRI_PIN_RGMII_0_RXD_3		145
#define CAPRI_PIN_RGMII_0_TX_CTL	146
#define CAPRI_PIN_RGMII_0_TXC		147
#define CAPRI_PIN_RGMII_0_TXD_0		148
#define CAPRI_PIN_RGMII_0_TXD_1		149
#define CAPRI_PIN_RGMII_0_TXD_2		150
#define CAPRI_PIN_RGMII_0_TXD_3		151
#define CAPRI_PIN_RGMII_1_RX_CTL	152
#define CAPRI_PIN_RGMII_1_RXC		153
#define CAPRI_PIN_RGMII_1_RXD_0		154
#define CAPRI_PIN_RGMII_1_RXD_1		155
#define CAPRI_PIN_RGMII_1_RXD_2		156
#define CAPRI_PIN_RGMII_1_RXD_3		157
#define CAPRI_PIN_RGMII_1_TX_CTL	158
#define CAPRI_PIN_RGMII_1_TXC		159
#define CAPRI_PIN_RGMII_1_TXD_0		160
#define CAPRI_PIN_RGMII_1_TXD_1		161
#define CAPRI_PIN_RGMII_1_TXD_2		162
#define CAPRI_PIN_RGMII_1_TXD_3		163
#define CAPRI_PIN_RGMII_GPIO_0		164
#define CAPRI_PIN_RGMII_GPIO_1		165
#define CAPRI_PIN_RGMII_GPIO_2		166
#define CAPRI_PIN_RGMII_GPIO_3		167
#define CAPRI_PIN_RTXDATA2G_TXDATA3G1	168
#define CAPRI_PIN_RTXEN2G_TXDATA3G2	169
#define CAPRI_PIN_RXDATA3G0		170
#define CAPRI_PIN_RXDATA3G1		171
#define CAPRI_PIN_RXDATA3G2		172
#define CAPRI_PIN_SDIO1_CLK		173
#define CAPRI_PIN_SDIO1_CMD		174
#define CAPRI_PIN_SDIO1_DATA_0		175
#define CAPRI_PIN_SDIO1_DATA_1		176
#define CAPRI_PIN_SDIO1_DATA_2		177
#define CAPRI_PIN_SDIO1_DATA_3		178
#define CAPRI_PIN_SDIO4_CLK		179
#define CAPRI_PIN_SDIO4_CMD		180
#define CAPRI_PIN_SDIO4_DATA_0		181
#define CAPRI_PIN_SDIO4_DATA_1		182
#define CAPRI_PIN_SDIO4_DATA_2		183
#define CAPRI_PIN_SDIO4_DATA_3		184
#define CAPRI_PIN_SIM_CLK		185
#define CAPRI_PIN_SIM_DATA		186
#define CAPRI_PIN_SIM_DET		187
#define CAPRI_PIN_SIM_RESETN		188
#define CAPRI_PIN_SIM2_CLK		189
#define CAPRI_PIN_SIM2_DATA		190
#define CAPRI_PIN_SIM2_DET		191
#define CAPRI_PIN_SIM2_RESETN		192
#define CAPRI_PIN_SRI_C			193
#define CAPRI_PIN_SRI_D			194
#define CAPRI_PIN_SRI_E			195
#define CAPRI_PIN_SSP_EXTCLK		196
#define CAPRI_PIN_SSP0_CLK		197
#define CAPRI_PIN_SSP0_FS		198
#define CAPRI_PIN_SSP0_RXD		199
#define CAPRI_PIN_SSP0_TXD		200
#define CAPRI_PIN_SSP2_CLK		201
#define CAPRI_PIN_SSP2_FS_0		202
#define CAPRI_PIN_SSP2_FS_1		203
#define CAPRI_PIN_SSP2_FS_2		204
#define CAPRI_PIN_SSP2_FS_3		205
#define CAPRI_PIN_SSP2_RXD_0		206
#define CAPRI_PIN_SSP2_RXD_1		207
#define CAPRI_PIN_SSP2_TXD_0		208
#define CAPRI_PIN_SSP2_TXD_1		209
#define CAPRI_PIN_SSP3_CLK		210
#define CAPRI_PIN_SSP3_FS		211
#define CAPRI_PIN_SSP3_RXD		212
#define CAPRI_PIN_SSP3_TXD		213
#define CAPRI_PIN_SSP4_CLK		214
#define CAPRI_PIN_SSP4_FS		215
#define CAPRI_PIN_SSP4_RXD		216
#define CAPRI_PIN_SSP4_TXD		217
#define CAPRI_PIN_SSP5_CLK		218
#define CAPRI_PIN_SSP5_FS		219
#define CAPRI_PIN_SSP5_RXD		220
#define CAPRI_PIN_SSP5_TXD		221
#define CAPRI_PIN_SSP6_CLK		222
#define CAPRI_PIN_SSP6_FS		223
#define CAPRI_PIN_SSP6_RXD		224
#define CAPRI_PIN_SSP6_TXD		225
#define CAPRI_PIN_STAT_1		226
#define CAPRI_PIN_STAT_2		227
#define CAPRI_PIN_SYSCLKEN		228
#define CAPRI_PIN_TRACECLK		229
#define CAPRI_PIN_TRACEDT00		230
#define CAPRI_PIN_TRACEDT01		231
#define CAPRI_PIN_TRACEDT02		232
#define CAPRI_PIN_TRACEDT03		233
#define CAPRI_PIN_TRACEDT04		234
#define CAPRI_PIN_TRACEDT05		235
#define CAPRI_PIN_TRACEDT06		236
#define CAPRI_PIN_TRACEDT07		237
#define CAPRI_PIN_TRACEDT08		238
#define CAPRI_PIN_TRACEDT09		239
#define CAPRI_PIN_TRACEDT10		240
#define CAPRI_PIN_TRACEDT11		241
#define CAPRI_PIN_TRACEDT12		242
#define CAPRI_PIN_TRACEDT13		243
#define CAPRI_PIN_TRACEDT14		244
#define CAPRI_PIN_TRACEDT15		245
#define CAPRI_PIN_TXDATA3G0		246
#define CAPRI_PIN_TXPWRIND		247
#define CAPRI_PIN_UARTB1_UCTS		248
#define CAPRI_PIN_UARTB1_URTS		249
#define CAPRI_PIN_UARTB1_URXD		250
#define CAPRI_PIN_UARTB1_UTXD		251
#define CAPRI_PIN_UARTB2_URXD		252
#define CAPRI_PIN_UARTB2_UTXD		253
#define CAPRI_PIN_UARTB3_UCTS		254
#define CAPRI_PIN_UARTB3_URTS		255
#define CAPRI_PIN_UARTB3_URXD		256
#define CAPRI_PIN_UARTB3_UTXD		257
#define CAPRI_PIN_UARTB4_UCTS		258
#define CAPRI_PIN_UARTB4_URTS		259
#define CAPRI_PIN_UARTB4_URXD		260
#define CAPRI_PIN_UARTB4_UTXD		261
#define CAPRI_PIN_VC_CAM1_SCL		262
#define CAPRI_PIN_VC_CAM1_SDA		263
#define CAPRI_PIN_VC_CAM2_SCL		264
#define CAPRI_PIN_VC_CAM2_SDA		265
#define CAPRI_PIN_VC_CAM3_SCL		266
#define CAPRI_PIN_VC_CAM3_SDA		267

#define CAPRI_PIN_DESC(a, b, c) \
	{ .number = a, .name = b, .drv_data = &c##_pin }

/*
 * Pin description definition.  The order here must be the same as defined in
 * the PADCTRLREG block in the RDB, since the pin number is used as an index
 * into this array.
 */
static const struct pinctrl_pin_desc capri_pinctrl_pins[] = {
	CAPRI_PIN_DESC(CAPRI_PIN_ADCSYNC, "adcsync", std),
	CAPRI_PIN_DESC(CAPRI_PIN_BAT_RM, "bat_rm", std),
	CAPRI_PIN_DESC(CAPRI_PIN_BSC1_SCL, "bsc1_scl", i2c),
	CAPRI_PIN_DESC(CAPRI_PIN_BSC1_SDA, "bsc1_sda", i2c),
	CAPRI_PIN_DESC(CAPRI_PIN_BSC2_SCL, "bsc2_scl", i2c),
	CAPRI_PIN_DESC(CAPRI_PIN_BSC2_SDA, "bsc2_sda", i2c),
	CAPRI_PIN_DESC(CAPRI_PIN_CLASSGPWR, "classgpwr", std),
	CAPRI_PIN_DESC(CAPRI_PIN_CLK_CX8, "clk_cx8", std),
	CAPRI_PIN_DESC(CAPRI_PIN_CLKOUT_0, "clkout_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_CLKOUT_1, "clkout_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_CLKOUT_2, "clkout_2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_CLKOUT_3, "clkout_3", std),
	CAPRI_PIN_DESC(CAPRI_PIN_CLKREQ_IN_0, "clkreq_in_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_CLKREQ_IN_1, "clkreq_in_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_CWS_SYS_REQ1, "cws_sys_req1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_CWS_SYS_REQ2, "cws_sys_req2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_CWS_SYS_REQ3, "cws_sys_req3", std),
	CAPRI_PIN_DESC(CAPRI_PIN_DIGMIC1_CLK, "digmic1_clk", std),
	CAPRI_PIN_DESC(CAPRI_PIN_DIGMIC1_DQ, "digmic1_dq", std),
	CAPRI_PIN_DESC(CAPRI_PIN_DIGMIC2_CLK, "digmic2_clk", std),
	CAPRI_PIN_DESC(CAPRI_PIN_DIGMIC2_DQ, "digmic2_dq", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPEN13, "gpen13", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPEN14, "gpen14", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPEN15, "gpen15", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPIO00, "gpio00", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPIO01, "gpio01", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPIO02, "gpio02", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPIO03, "gpio03", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPIO04, "gpio04", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPIO05, "gpio05", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPIO06, "gpio06", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPIO07, "gpio07", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPIO08, "gpio08", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPIO09, "gpio09", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPIO10, "gpio10", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPIO11, "gpio11", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPIO12, "gpio12", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPIO13, "gpio13", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPIO14, "gpio14", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPS_PABLANK, "gps_pablank", std),
	CAPRI_PIN_DESC(CAPRI_PIN_GPS_TMARK, "gps_tmark", std),
	CAPRI_PIN_DESC(CAPRI_PIN_HDMI_SCL, "hdmi_scl", hdmi),
	CAPRI_PIN_DESC(CAPRI_PIN_HDMI_SDA, "hdmi_sda", hdmi),
	CAPRI_PIN_DESC(CAPRI_PIN_IC_DM, "ic_dm", std),
	CAPRI_PIN_DESC(CAPRI_PIN_IC_DP, "ic_dp", std),
	CAPRI_PIN_DESC(CAPRI_PIN_KP_COL_IP_0, "kp_col_ip_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_KP_COL_IP_1, "kp_col_ip_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_KP_COL_IP_2, "kp_col_ip_2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_KP_COL_IP_3, "kp_col_ip_3", std),
	CAPRI_PIN_DESC(CAPRI_PIN_KP_ROW_OP_0, "kp_row_op_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_KP_ROW_OP_1, "kp_row_op_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_KP_ROW_OP_2, "kp_row_op_2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_KP_ROW_OP_3, "kp_row_op_3", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_0, "lcd_b_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_1, "lcd_b_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_2, "lcd_b_2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_3, "lcd_b_3", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_4, "lcd_b_4", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_5, "lcd_b_5", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_6, "lcd_b_6", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_B_7, "lcd_b_7", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_0, "lcd_g_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_1, "lcd_g_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_2, "lcd_g_2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_3, "lcd_g_3", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_4, "lcd_g_4", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_5, "lcd_g_5", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_6, "lcd_g_6", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_G_7, "lcd_g_7", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_HSYNC, "lcd_hsync", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_OE, "lcd_oe", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_PCLK, "lcd_pclk", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_0, "lcd_r_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_1, "lcd_r_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_2, "lcd_r_2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_3, "lcd_r_3", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_4, "lcd_r_4", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_5, "lcd_r_5", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_6, "lcd_r_6", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_R_7, "lcd_r_7", std),
	CAPRI_PIN_DESC(CAPRI_PIN_LCD_VSYNC, "lcd_vsync", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO0, "mdmgpio0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO1, "mdmgpio1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO2, "mdmgpio2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO3, "mdmgpio3", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO4, "mdmgpio4", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO5, "mdmgpio5", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO6, "mdmgpio6", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO7, "mdmgpio7", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MDMGPIO8, "mdmgpio8", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_0, "mphi_data_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_1, "mphi_data_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_2, "mphi_data_2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_3, "mphi_data_3", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_4, "mphi_data_4", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_5, "mphi_data_5", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_6, "mphi_data_6", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_7, "mphi_data_7", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_8, "mphi_data_8", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_9, "mphi_data_9", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_10, "mphi_data_10", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_11, "mphi_data_11", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_12, "mphi_data_12", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_13, "mphi_data_13", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_14, "mphi_data_14", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_DATA_15, "mphi_data_15", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HA0, "mphi_ha0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HAT0, "mphi_hat0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HAT1, "mphi_hat1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HCE0_N, "mphi_hce0_n", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HCE1_N, "mphi_hce1_n", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HRD_N, "mphi_hrd_n", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_HWR_N, "mphi_hwr_n", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_RUN0, "mphi_run0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MPHI_RUN1, "mphi_run1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MTX_SCAN_CLK, "mtx_scan_clk", std),
	CAPRI_PIN_DESC(CAPRI_PIN_MTX_SCAN_DATA, "mtx_scan_data", std),
	CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_0, "nand_ad_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_1, "nand_ad_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_2, "nand_ad_2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_3, "nand_ad_3", std),
	CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_4, "nand_ad_4", std),
	CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_5, "nand_ad_5", std),
	CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_6, "nand_ad_6", std),
	CAPRI_PIN_DESC(CAPRI_PIN_NAND_AD_7, "nand_ad_7", std),
	CAPRI_PIN_DESC(CAPRI_PIN_NAND_ALE, "nand_ale", std),
	CAPRI_PIN_DESC(CAPRI_PIN_NAND_CEN_0, "nand_cen_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_NAND_CEN_1, "nand_cen_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_NAND_CLE, "nand_cle", std),
	CAPRI_PIN_DESC(CAPRI_PIN_NAND_OEN, "nand_oen", std),
	CAPRI_PIN_DESC(CAPRI_PIN_NAND_RDY_0, "nand_rdy_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_NAND_RDY_1, "nand_rdy_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_NAND_WEN, "nand_wen", std),
	CAPRI_PIN_DESC(CAPRI_PIN_NAND_WP, "nand_wp", std),
	CAPRI_PIN_DESC(CAPRI_PIN_PC1, "pc1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_PC2, "pc2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_PMU_INT, "pmu_int", std),
	CAPRI_PIN_DESC(CAPRI_PIN_PMU_SCL, "pmu_scl", i2c),
	CAPRI_PIN_DESC(CAPRI_PIN_PMU_SDA, "pmu_sda", i2c),
	CAPRI_PIN_DESC(CAPRI_PIN_RFST2G_MTSLOTEN3G, "rfst2g_mtsloten3g", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_RX_CTL, "rgmii_0_rx_ctl", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_RXC, "rgmii_0_rxc", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_RXD_0, "rgmii_0_rxd_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_RXD_1, "rgmii_0_rxd_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_RXD_2, "rgmii_0_rxd_2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_RXD_3, "rgmii_0_rxd_3", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_TX_CTL, "rgmii_0_tx_ctl", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_TXC, "rgmii_0_txc", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_TXD_0, "rgmii_0_txd_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_TXD_1, "rgmii_0_txd_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_TXD_2, "rgmii_0_txd_2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_0_TXD_3, "rgmii_0_txd_3", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_RX_CTL, "rgmii_1_rx_ctl", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_RXC, "rgmii_1_rxc", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_RXD_0, "rgmii_1_rxd_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_RXD_1, "rgmii_1_rxd_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_RXD_2, "rgmii_1_rxd_2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_RXD_3, "rgmii_1_rxd_3", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_TX_CTL, "rgmii_1_tx_ctl", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_TXC, "rgmii_1_txc", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_TXD_0, "rgmii_1_txd_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_TXD_1, "rgmii_1_txd_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_TXD_2, "rgmii_1_txd_2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_1_TXD_3, "rgmii_1_txd_3", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_GPIO_0, "rgmii_gpio_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_GPIO_1, "rgmii_gpio_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_GPIO_2, "rgmii_gpio_2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RGMII_GPIO_3, "rgmii_gpio_3", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RTXDATA2G_TXDATA3G1, "rtxdata2g_txdata3g1",
		std),
	CAPRI_PIN_DESC(CAPRI_PIN_RTXEN2G_TXDATA3G2, "rtxen2g_txdata3g2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RXDATA3G0, "rxdata3g0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RXDATA3G1, "rxdata3g1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_RXDATA3G2, "rxdata3g2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SDIO1_CLK, "sdio1_clk", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SDIO1_CMD, "sdio1_cmd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SDIO1_DATA_0, "sdio1_data_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SDIO1_DATA_1, "sdio1_data_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SDIO1_DATA_2, "sdio1_data_2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SDIO1_DATA_3, "sdio1_data_3", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SDIO4_CLK, "sdio4_clk", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SDIO4_CMD, "sdio4_cmd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SDIO4_DATA_0, "sdio4_data_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SDIO4_DATA_1, "sdio4_data_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SDIO4_DATA_2, "sdio4_data_2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SDIO4_DATA_3, "sdio4_data_3", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SIM_CLK, "sim_clk", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SIM_DATA, "sim_data", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SIM_DET, "sim_det", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SIM_RESETN, "sim_resetn", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SIM2_CLK, "sim2_clk", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SIM2_DATA, "sim2_data", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SIM2_DET, "sim2_det", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SIM2_RESETN, "sim2_resetn", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SRI_C, "sri_c", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SRI_D, "sri_d", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SRI_E, "sri_e", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP_EXTCLK, "ssp_extclk", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP0_CLK, "ssp0_clk", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP0_FS, "ssp0_fs", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP0_RXD, "ssp0_rxd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP0_TXD, "ssp0_txd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP2_CLK, "ssp2_clk", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP2_FS_0, "ssp2_fs_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP2_FS_1, "ssp2_fs_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP2_FS_2, "ssp2_fs_2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP2_FS_3, "ssp2_fs_3", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP2_RXD_0, "ssp2_rxd_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP2_RXD_1, "ssp2_rxd_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP2_TXD_0, "ssp2_txd_0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP2_TXD_1, "ssp2_txd_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP3_CLK, "ssp3_clk", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP3_FS, "ssp3_fs", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP3_RXD, "ssp3_rxd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP3_TXD, "ssp3_txd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP4_CLK, "ssp4_clk", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP4_FS, "ssp4_fs", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP4_RXD, "ssp4_rxd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP4_TXD, "ssp4_txd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP5_CLK, "ssp5_clk", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP5_FS, "ssp5_fs", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP5_RXD, "ssp5_rxd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP5_TXD, "ssp5_txd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP6_CLK, "ssp6_clk", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP6_FS, "ssp6_fs", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP6_RXD, "ssp6_rxd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SSP6_TXD, "ssp6_txd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_STAT_1, "stat_1", std),
	CAPRI_PIN_DESC(CAPRI_PIN_STAT_2, "stat_2", std),
	CAPRI_PIN_DESC(CAPRI_PIN_SYSCLKEN, "sysclken", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TRACECLK, "traceclk", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT00, "tracedt00", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT01, "tracedt01", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT02, "tracedt02", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT03, "tracedt03", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT04, "tracedt04", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT05, "tracedt05", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT06, "tracedt06", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT07, "tracedt07", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT08, "tracedt08", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT09, "tracedt09", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT10, "tracedt10", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT11, "tracedt11", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT12, "tracedt12", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT13, "tracedt13", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT14, "tracedt14", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TRACEDT15, "tracedt15", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TXDATA3G0, "txdata3g0", std),
	CAPRI_PIN_DESC(CAPRI_PIN_TXPWRIND, "txpwrind", std),
	CAPRI_PIN_DESC(CAPRI_PIN_UARTB1_UCTS, "uartb1_ucts", std),
	CAPRI_PIN_DESC(CAPRI_PIN_UARTB1_URTS, "uartb1_urts", std),
	CAPRI_PIN_DESC(CAPRI_PIN_UARTB1_URXD, "uartb1_urxd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_UARTB1_UTXD, "uartb1_utxd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_UARTB2_URXD, "uartb2_urxd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_UARTB2_UTXD, "uartb2_utxd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_UARTB3_UCTS, "uartb3_ucts", std),
	CAPRI_PIN_DESC(CAPRI_PIN_UARTB3_URTS, "uartb3_urts", std),
	CAPRI_PIN_DESC(CAPRI_PIN_UARTB3_URXD, "uartb3_urxd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_UARTB3_UTXD, "uartb3_utxd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_UARTB4_UCTS, "uartb4_ucts", std),
	CAPRI_PIN_DESC(CAPRI_PIN_UARTB4_URTS, "uartb4_urts", std),
	CAPRI_PIN_DESC(CAPRI_PIN_UARTB4_URXD, "uartb4_urxd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_UARTB4_UTXD, "uartb4_utxd", std),
	CAPRI_PIN_DESC(CAPRI_PIN_VC_CAM1_SCL, "vc_cam1_scl", i2c),
	CAPRI_PIN_DESC(CAPRI_PIN_VC_CAM1_SDA, "vc_cam1_sda", i2c),
	CAPRI_PIN_DESC(CAPRI_PIN_VC_CAM2_SCL, "vc_cam2_scl", i2c),
	CAPRI_PIN_DESC(CAPRI_PIN_VC_CAM2_SDA, "vc_cam2_sda", i2c),
	CAPRI_PIN_DESC(CAPRI_PIN_VC_CAM3_SCL, "vc_cam3_scl", i2c),
	CAPRI_PIN_DESC(CAPRI_PIN_VC_CAM3_SDA, "vc_cam3_sda", i2c),
};

static const char * const capri_alt_groups[] = {
	"adcsync",
	"bat_rm",
	"bsc1_scl",
	"bsc1_sda",
	"bsc2_scl",
	"bsc2_sda",
	"classgpwr",
	"clk_cx8",
	"clkout_0",
	"clkout_1",
	"clkout_2",
	"clkout_3",
	"clkreq_in_0",
	"clkreq_in_1",
	"cws_sys_req1",
	"cws_sys_req2",
	"cws_sys_req3",
	"digmic1_clk",
	"digmic1_dq",
	"digmic2_clk",
	"digmic2_dq",
	"gpen13",
	"gpen14",
	"gpen15",
	"gpio00",
	"gpio01",
	"gpio02",
	"gpio03",
	"gpio04",
	"gpio05",
	"gpio06",
	"gpio07",
	"gpio08",
	"gpio09",
	"gpio10",
	"gpio11",
	"gpio12",
	"gpio13",
	"gpio14",
	"gps_pablank",
	"gps_tmark",
	"hdmi_scl",
	"hdmi_sda",
	"ic_dm",
	"ic_dp",
	"kp_col_ip_0",
	"kp_col_ip_1",
	"kp_col_ip_2",
	"kp_col_ip_3",
	"kp_row_op_0",
	"kp_row_op_1",
	"kp_row_op_2",
	"kp_row_op_3",
	"lcd_b_0",
	"lcd_b_1",
	"lcd_b_2",
	"lcd_b_3",
	"lcd_b_4",
	"lcd_b_5",
	"lcd_b_6",
	"lcd_b_7",
	"lcd_g_0",
	"lcd_g_1",
	"lcd_g_2",
	"lcd_g_3",
	"lcd_g_4",
	"lcd_g_5",
	"lcd_g_6",
	"lcd_g_7",
	"lcd_hsync",
	"lcd_oe",
	"lcd_pclk",
	"lcd_r_0",
	"lcd_r_1",
	"lcd_r_2",
	"lcd_r_3",
	"lcd_r_4",
	"lcd_r_5",
	"lcd_r_6",
	"lcd_r_7",
	"lcd_vsync",
	"mdmgpio0",
	"mdmgpio1",
	"mdmgpio2",
	"mdmgpio3",
	"mdmgpio4",
	"mdmgpio5",
	"mdmgpio6",
	"mdmgpio7",
	"mdmgpio8",
	"mphi_data_0",
	"mphi_data_1",
	"mphi_data_2",
	"mphi_data_3",
	"mphi_data_4",
	"mphi_data_5",
	"mphi_data_6",
	"mphi_data_7",
	"mphi_data_8",
	"mphi_data_9",
	"mphi_data_10",
	"mphi_data_11",
	"mphi_data_12",
	"mphi_data_13",
	"mphi_data_14",
	"mphi_data_15",
	"mphi_ha0",
	"mphi_hat0",
	"mphi_hat1",
	"mphi_hce0_n",
	"mphi_hce1_n",
	"mphi_hrd_n",
	"mphi_hwr_n",
	"mphi_run0",
	"mphi_run1",
	"mtx_scan_clk",
	"mtx_scan_data",
	"nand_ad_0",
	"nand_ad_1",
	"nand_ad_2",
	"nand_ad_3",
	"nand_ad_4",
	"nand_ad_5",
	"nand_ad_6",
	"nand_ad_7",
	"nand_ale",
	"nand_cen_0",
	"nand_cen_1",
	"nand_cle",
	"nand_oen",
	"nand_rdy_0",
	"nand_rdy_1",
	"nand_wen",
	"nand_wp",
	"pc1",
	"pc2",
	"pmu_int",
	"pmu_scl",
	"pmu_sda",
	"rfst2g_mtsloten3g",
	"rgmii_0_rx_ctl",
	"rgmii_0_rxc",
	"rgmii_0_rxd_0",
	"rgmii_0_rxd_1",
	"rgmii_0_rxd_2",
	"rgmii_0_rxd_3",
	"rgmii_0_tx_ctl",
	"rgmii_0_txc",
	"rgmii_0_txd_0",
	"rgmii_0_txd_1",
	"rgmii_0_txd_2",
	"rgmii_0_txd_3",
	"rgmii_1_rx_ctl",
	"rgmii_1_rxc",
	"rgmii_1_rxd_0",
	"rgmii_1_rxd_1",
	"rgmii_1_rxd_2",
	"rgmii_1_rxd_3",
	"rgmii_1_tx_ctl",
	"rgmii_1_txc",
	"rgmii_1_txd_0",
	"rgmii_1_txd_1",
	"rgmii_1_txd_2",
	"rgmii_1_txd_3",
	"rgmii_gpio_0",
	"rgmii_gpio_1",
	"rgmii_gpio_2",
	"rgmii_gpio_3",
	"rtxdata2g_txdata3g1",
	"rtxen2g_txdata3g2",
	"rxdata3g0",
	"rxdata3g1",
	"rxdata3g2",
	"sdio1_clk",
	"sdio1_cmd",
	"sdio1_data_0",
	"sdio1_data_1",
	"sdio1_data_2",
	"sdio1_data_3",
	"sdio4_clk",
	"sdio4_cmd",
	"sdio4_data_0",
	"sdio4_data_1",
	"sdio4_data_2",
	"sdio4_data_3",
	"sim_clk",
	"sim_data",
	"sim_det",
	"sim_resetn",
	"sim2_clk",
	"sim2_data",
	"sim2_det",
	"sim2_resetn",
	"sri_c",
	"sri_d",
	"sri_e",
	"ssp_extclk",
	"ssp0_clk",
	"ssp0_fs",
	"ssp0_rxd",
	"ssp0_txd",
	"ssp2_clk",
	"ssp2_fs_0",
	"ssp2_fs_1",
	"ssp2_fs_2",
	"ssp2_fs_3",
	"ssp2_rxd_0",
	"ssp2_rxd_1",
	"ssp2_txd_0",
	"ssp2_txd_1",
	"ssp3_clk",
	"ssp3_fs",
	"ssp3_rxd",
	"ssp3_txd",
	"ssp4_clk",
	"ssp4_fs",
	"ssp4_rxd",
	"ssp4_txd",
	"ssp5_clk",
	"ssp5_fs",
	"ssp5_rxd",
	"ssp5_txd",
	"ssp6_clk",
	"ssp6_fs",
	"ssp6_rxd",
	"ssp6_txd",
	"stat_1",
	"stat_2",
	"sysclken",
	"traceclk",
	"tracedt00",
	"tracedt01",
	"tracedt02",
	"tracedt03",
	"tracedt04",
	"tracedt05",
	"tracedt06",
	"tracedt07",
	"tracedt08",
	"tracedt09",
	"tracedt10",
	"tracedt11",
	"tracedt12",
	"tracedt13",
	"tracedt14",
	"tracedt15",
	"txdata3g0",
	"txpwrind",
	"uartb1_ucts",
	"uartb1_urts",
	"uartb1_urxd",
	"uartb1_utxd",
	"uartb2_urxd",
	"uartb2_utxd",
	"uartb3_ucts",
	"uartb3_urts",
	"uartb3_urxd",
	"uartb3_utxd",
	"uartb4_ucts",
	"uartb4_urts",
	"uartb4_urxd",
	"uartb4_utxd",
	"vc_cam1_scl",
	"vc_cam1_sda",
	"vc_cam2_scl",
	"vc_cam2_sda",
	"vc_cam3_scl",
	"vc_cam3_sda",
};

/* Every pin can implement all ALT1-ALT4 functions */
#define CAPRI_PIN_FUNCTION(fcn_name)			\
{							\
	.name = #fcn_name,				\
	.groups = capri_alt_groups,			\
	.ngroups = ARRAY_SIZE(capri_alt_groups),	\
}

static const struct capri_pin_function capri_functions[] = {
	CAPRI_PIN_FUNCTION(alt1),
	CAPRI_PIN_FUNCTION(alt2),
	CAPRI_PIN_FUNCTION(alt3),
	CAPRI_PIN_FUNCTION(alt4),
};

static struct capri_pinctrl_data capri_pinctrl = {
	.pins = capri_pinctrl_pins,
	.npins = ARRAY_SIZE(capri_pinctrl_pins),
	.functions = capri_functions,
	.nfunctions = ARRAY_SIZE(capri_functions),
};

static inline enum capri_pin_type pin_type_get(struct pinctrl_dev *pctldev,
					       unsigned pin)
{
	struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);

	if (pin >= pdata->npins)
		return CAPRI_PIN_TYPE_UNKNOWN;

	return *(enum capri_pin_type *)(pdata->pins[pin].drv_data);
}

#define CAPRI_PIN_SHIFT(type, param) \
	(CAPRI_ ## type ## _PIN_REG_ ## param ## _SHIFT)

#define CAPRI_PIN_MASK(type, param) \
	(CAPRI_ ## type ## _PIN_REG_ ## param ## _MASK)

/*
 * This helper function is used to build up the value and mask used to write to
 * a pin register, but does not actually write to the register.
 */
static inline void capri_pin_update(u32 *reg_val, u32 *reg_mask, u32 param_val,
				    u32 param_shift, u32 param_mask)
{
	*reg_val &= ~param_mask;
	*reg_val |= (param_val << param_shift) & param_mask;
	*reg_mask |= param_mask;
}

static struct regmap_config capri_pinctrl_regmap_config = {
	.reg_bits = 32,
	.reg_stride = 4,
	.val_bits = 32,
	.max_register = CAPRI_PIN_VC_CAM3_SDA,
};

static int capri_pinctrl_get_groups_count(struct pinctrl_dev *pctldev)
{
	struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);

	return pdata->npins;
}

static const char *capri_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
						unsigned group)
{
	struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);

	return pdata->pins[group].name;
}

static int capri_pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
					unsigned group,
					const unsigned **pins,
					unsigned *num_pins)
{
	struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);

	*pins = &pdata->pins[group].number;
	*num_pins = 1;

	return 0;
}

static void capri_pinctrl_pin_dbg_show(struct pinctrl_dev *pctldev,
				       struct seq_file *s,
				       unsigned offset)
{
	seq_printf(s, " %s", dev_name(pctldev->dev));
}

static struct pinctrl_ops capri_pinctrl_ops = {
	.get_groups_count = capri_pinctrl_get_groups_count,
	.get_group_name = capri_pinctrl_get_group_name,
	.get_group_pins = capri_pinctrl_get_group_pins,
	.pin_dbg_show = capri_pinctrl_pin_dbg_show,
	.dt_node_to_map = pinconf_generic_dt_node_to_map_pin,
	.dt_free_map = pinctrl_utils_dt_free_map,
};

static int capri_pinctrl_get_fcns_count(struct pinctrl_dev *pctldev)
{
	struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);

	return pdata->nfunctions;
}

static const char *capri_pinctrl_get_fcn_name(struct pinctrl_dev *pctldev,
					      unsigned function)
{
	struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);

	return pdata->functions[function].name;
}

static int capri_pinctrl_get_fcn_groups(struct pinctrl_dev *pctldev,
					unsigned function,
					const char * const **groups,
					unsigned * const num_groups)
{
	struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);

	*groups = pdata->functions[function].groups;
	*num_groups = pdata->functions[function].ngroups;

	return 0;
}

static int capri_pinmux_enable(struct pinctrl_dev *pctldev,
			       unsigned function,
			       unsigned group)
{
	struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
	const struct capri_pin_function *f = &pdata->functions[function];
	u32 offset = 4 * pdata->pins[group].number;
	int rc = 0;

	dev_dbg(pctldev->dev,
		"%s(): Enable function %s (%d) of pin %s (%d) @offset 0x%x.\n",
		__func__, f->name, function, pdata->pins[group].name,
		pdata->pins[group].number, offset);

	rc = regmap_update_bits(pdata->regmap, offset, CAPRI_PIN_REG_F_SEL_MASK,
			function << CAPRI_PIN_REG_F_SEL_SHIFT);
	if (rc)
		dev_err(pctldev->dev,
			"Error updating register for pin %s (%d).\n",
			pdata->pins[group].name, pdata->pins[group].number);

	return rc;
}

static struct pinmux_ops capri_pinctrl_pinmux_ops = {
	.get_functions_count = capri_pinctrl_get_fcns_count,
	.get_function_name = capri_pinctrl_get_fcn_name,
	.get_function_groups = capri_pinctrl_get_fcn_groups,
	.enable = capri_pinmux_enable,
};

static int capri_pinctrl_pin_config_get(struct pinctrl_dev *pctldev,
					unsigned pin,
					unsigned long *config)
{
	return -ENOTSUPP;
}


/* Goes through the configs and update register val/mask */
static int capri_std_pin_update(struct pinctrl_dev *pctldev,
				unsigned pin,
				unsigned long *configs,
				unsigned num_configs,
				u32 *val,
				u32 *mask)
{
	struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
	int i;
	enum pin_config_param param;
	u16 arg;

	for (i = 0; i < num_configs; i++) {
		param = pinconf_to_config_param(configs[i]);
		arg = pinconf_to_config_argument(configs[i]);

		switch (param) {
		case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
			arg = (arg >= 1 ? 1 : 0);
			capri_pin_update(val, mask, arg,
					CAPRI_PIN_SHIFT(STD, HYST),
					CAPRI_PIN_MASK(STD, HYST));
			break;
		/*
		 * The pin bias can only be one of pull-up, pull-down, or
		 * disable.  The user does not need to specify a value for the
		 * property, and the default value from pinconf-generic is
		 * ignored.
		 */
		case PIN_CONFIG_BIAS_DISABLE:
			capri_pin_update(val, mask, 0,
					CAPRI_PIN_SHIFT(STD, PULL_UP),
					CAPRI_PIN_MASK(STD, PULL_UP));
			capri_pin_update(val, mask, 0,
					CAPRI_PIN_SHIFT(STD, PULL_DN),
					CAPRI_PIN_MASK(STD, PULL_DN));
			break;

		case PIN_CONFIG_BIAS_PULL_UP:
			capri_pin_update(val, mask, 1,
					CAPRI_PIN_SHIFT(STD, PULL_UP),
					CAPRI_PIN_MASK(STD, PULL_UP));
			capri_pin_update(val, mask, 0,
					CAPRI_PIN_SHIFT(STD, PULL_DN),
					CAPRI_PIN_MASK(STD, PULL_DN));
			break;

		case PIN_CONFIG_BIAS_PULL_DOWN:
			capri_pin_update(val, mask, 0,
					CAPRI_PIN_SHIFT(STD, PULL_UP),
					CAPRI_PIN_MASK(STD, PULL_UP));
			capri_pin_update(val, mask, 1,
					CAPRI_PIN_SHIFT(STD, PULL_DN),
					CAPRI_PIN_MASK(STD, PULL_DN));
			break;

		case PIN_CONFIG_SLEW_RATE:
			arg = (arg >= 1 ? 1 : 0);
			capri_pin_update(val, mask, arg,
					CAPRI_PIN_SHIFT(STD, SLEW),
					CAPRI_PIN_MASK(STD, SLEW));
			break;

		case PIN_CONFIG_INPUT_ENABLE:
			/* inversed since register is for input _disable_ */
			arg = (arg >= 1 ? 0 : 1);
			capri_pin_update(val, mask, arg,
					CAPRI_PIN_SHIFT(STD, INPUT_DIS),
					CAPRI_PIN_MASK(STD, INPUT_DIS));
			break;

		case PIN_CONFIG_DRIVE_STRENGTH:
			/* Valid range is 2-16 mA, even numbers only */
			if ((arg < 2) || (arg > 16) || (arg % 2)) {
				dev_err(pctldev->dev,
					"Invalid Drive Strength value (%d) for "
					"pin %s (%d). Valid values are "
					"(2..16) mA, even numbers only.\n",
					arg, pdata->pins[pin].name, pin);
				return -EINVAL;
			}
			capri_pin_update(val, mask, (arg/2)-1,
					CAPRI_PIN_SHIFT(STD, DRV_STR),
					CAPRI_PIN_MASK(STD, DRV_STR));
			break;

		default:
			dev_err(pctldev->dev,
				"Unrecognized pin config %d for pin %s (%d).\n",
				param, pdata->pins[pin].name, pin);
			return -EINVAL;

		} /* switch config */
	} /* for each config */

	return 0;
}

/*
 * The pull-up strength for an I2C pin is represented by bits 4-6 in the
 * register with the following mapping:
 *   0b000: No pull-up
 *   0b001: 1200 Ohm
 *   0b010: 1800 Ohm
 *   0b011: 720 Ohm
 *   0b100: 2700 Ohm
 *   0b101: 831 Ohm
 *   0b110: 1080 Ohm
 *   0b111: 568 Ohm
 * This array maps pull-up strength in Ohms to register values (1+index).
 */
static const u16 capri_pullup_map[] = {1200, 1800, 720, 2700, 831, 1080, 568};

/* Goes through the configs and update register val/mask */
static int capri_i2c_pin_update(struct pinctrl_dev *pctldev,
				unsigned pin,
				unsigned long *configs,
				unsigned num_configs,
				u32 *val,
				u32 *mask)
{
	struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
	int i, j;
	enum pin_config_param param;
	u16 arg;

	for (i = 0; i < num_configs; i++) {
		param = pinconf_to_config_param(configs[i]);
		arg = pinconf_to_config_argument(configs[i]);

		switch (param) {
		case PIN_CONFIG_BIAS_PULL_UP:
			for (j = 0; j < ARRAY_SIZE(capri_pullup_map); j++)
				if (capri_pullup_map[j] == arg)
					break;

			if (j == ARRAY_SIZE(capri_pullup_map)) {
				dev_err(pctldev->dev,
					"Invalid pull-up value (%d) for pin %s "
					"(%d). Valid values are 568, 720, 831, "
					"1080, 1200, 1800, 2700 Ohms.\n",
					arg, pdata->pins[pin].name, pin);
				return -EINVAL;
			}

			capri_pin_update(val, mask, j+1,
					CAPRI_PIN_SHIFT(I2C, PULL_UP_STR),
					CAPRI_PIN_MASK(I2C, PULL_UP_STR));
			break;

		case PIN_CONFIG_BIAS_DISABLE:
			capri_pin_update(val, mask, 0,
					CAPRI_PIN_SHIFT(I2C, PULL_UP_STR),
					CAPRI_PIN_MASK(I2C, PULL_UP_STR));
			break;

		case PIN_CONFIG_SLEW_RATE:
			arg = (arg >= 1 ? 1 : 0);
			capri_pin_update(val, mask, arg,
					CAPRI_PIN_SHIFT(I2C, SLEW),
					CAPRI_PIN_MASK(I2C, SLEW));
			break;

		case PIN_CONFIG_INPUT_ENABLE:
			/* inversed since register is for input _disable_ */
			arg = (arg >= 1 ? 0 : 1);
			capri_pin_update(val, mask, arg,
					CAPRI_PIN_SHIFT(I2C, INPUT_DIS),
					CAPRI_PIN_MASK(I2C, INPUT_DIS));
			break;

		default:
			dev_err(pctldev->dev,
				"Unrecognized pin config %d for pin %s (%d).\n",
				param, pdata->pins[pin].name, pin);
			return -EINVAL;

		} /* switch config */
	} /* for each config */

	return 0;
}

/* Goes through the configs and update register val/mask */
static int capri_hdmi_pin_update(struct pinctrl_dev *pctldev,
				 unsigned pin,
				 unsigned long *configs,
				 unsigned num_configs,
				 u32 *val,
				 u32 *mask)
{
	struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
	int i;
	enum pin_config_param param;
	u16 arg;

	for (i = 0; i < num_configs; i++) {
		param = pinconf_to_config_param(configs[i]);
		arg = pinconf_to_config_argument(configs[i]);

		switch (param) {
		case PIN_CONFIG_SLEW_RATE:
			arg = (arg >= 1 ? 1 : 0);
			capri_pin_update(val, mask, arg,
					CAPRI_PIN_SHIFT(HDMI, MODE),
					CAPRI_PIN_MASK(HDMI, MODE));
			break;

		case PIN_CONFIG_INPUT_ENABLE:
			/* inversed since register is for input _disable_ */
			arg = (arg >= 1 ? 0 : 1);
			capri_pin_update(val, mask, arg,
					CAPRI_PIN_SHIFT(HDMI, INPUT_DIS),
					CAPRI_PIN_MASK(HDMI, INPUT_DIS));
			break;

		default:
			dev_err(pctldev->dev,
				"Unrecognized pin config %d for pin %s (%d).\n",
				param, pdata->pins[pin].name, pin);
			return -EINVAL;

		} /* switch config */
	} /* for each config */

	return 0;
}

static int capri_pinctrl_pin_config_set(struct pinctrl_dev *pctldev,
					unsigned pin,
					unsigned long *configs,
					unsigned num_configs)
{
	struct capri_pinctrl_data *pdata = pinctrl_dev_get_drvdata(pctldev);
	enum capri_pin_type pin_type;
	u32 offset = 4 * pin;
	u32 cfg_val, cfg_mask;
	int rc;

	cfg_val = 0;
	cfg_mask = 0;
	pin_type = pin_type_get(pctldev, pin);

	/* Different pins have different configuration options */
	switch (pin_type) {
	case CAPRI_PIN_TYPE_STD:
		rc = capri_std_pin_update(pctldev, pin, configs, num_configs,
			&cfg_val, &cfg_mask);
		break;

	case CAPRI_PIN_TYPE_I2C:
		rc = capri_i2c_pin_update(pctldev, pin, configs, num_configs,
			&cfg_val, &cfg_mask);
		break;

	case CAPRI_PIN_TYPE_HDMI:
		rc = capri_hdmi_pin_update(pctldev, pin, configs, num_configs,
			&cfg_val, &cfg_mask);
		break;

	default:
		dev_err(pctldev->dev, "Unknown pin type for pin %s (%d).\n",
			pdata->pins[pin].name, pin);
		return -EINVAL;

	} /* switch pin type */

	if (rc)
		return rc;

	dev_dbg(pctldev->dev,
		"%s(): Set pin %s (%d) with config 0x%x, mask 0x%x\n",
		__func__, pdata->pins[pin].name, pin, cfg_val, cfg_mask);

	rc = regmap_update_bits(pdata->regmap, offset, cfg_mask, cfg_val);
	if (rc) {
		dev_err(pctldev->dev,
			"Error updating register for pin %s (%d).\n",
			pdata->pins[pin].name, pin);
		return rc;
	}

	return 0;
}

static struct pinconf_ops capri_pinctrl_pinconf_ops = {
	.pin_config_get = capri_pinctrl_pin_config_get,
	.pin_config_set = capri_pinctrl_pin_config_set,
};

static struct pinctrl_desc capri_pinctrl_desc = {
	/* name, pins, npins members initialized in probe function */
	.pctlops = &capri_pinctrl_ops,
	.pmxops = &capri_pinctrl_pinmux_ops,
	.confops = &capri_pinctrl_pinconf_ops,
	.owner = THIS_MODULE,
};

int __init capri_pinctrl_probe(struct platform_device *pdev)
{
	struct capri_pinctrl_data *pdata = &capri_pinctrl;
	struct resource *res;
	struct pinctrl_dev *pctl;

	/* So far We can assume there is only 1 bank of registers */
	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	if (!res) {
		dev_err(&pdev->dev, "Missing MEM resource\n");
		return -ENODEV;
	}

	pdata->reg_base = devm_ioremap_resource(&pdev->dev, res);
	if (IS_ERR(pdata->reg_base)) {
		dev_err(&pdev->dev, "Failed to ioremap MEM resource\n");
		return -ENODEV;
	}

	/* Initialize the dynamic part of pinctrl_desc */
	pdata->regmap = devm_regmap_init_mmio(&pdev->dev, pdata->reg_base,
		&capri_pinctrl_regmap_config);
	if (IS_ERR(pdata->regmap)) {
		dev_err(&pdev->dev, "Regmap MMIO init failed.\n");
		return -ENODEV;
	}

	capri_pinctrl_desc.name = dev_name(&pdev->dev);
	capri_pinctrl_desc.pins = capri_pinctrl.pins;
	capri_pinctrl_desc.npins = capri_pinctrl.npins;

	pctl = pinctrl_register(&capri_pinctrl_desc,
				&pdev->dev,
				pdata);
	if (!pctl) {
		dev_err(&pdev->dev, "Failed to register pinctrl\n");
		return -ENODEV;
	}

	platform_set_drvdata(pdev, pdata);

	return 0;
}

static struct of_device_id capri_pinctrl_of_match[] = {
	{ .compatible = "brcm,capri-pinctrl", },
	{ },
};

static struct platform_driver capri_pinctrl_driver = {
	.driver = {
		.name = "bcm-capri-pinctrl",
		.owner = THIS_MODULE,
		.of_match_table = capri_pinctrl_of_match,
	},
};

module_platform_driver_probe(capri_pinctrl_driver, capri_pinctrl_probe);

MODULE_AUTHOR("Sherman Yin <syin@broadcom.com>");
MODULE_DESCRIPTION("Broadcom Capri pinctrl driver");
MODULE_LICENSE("GPL v2");
