xref: /OK3568_Linux_fs/kernel/drivers/pinctrl/intel/pinctrl-broxton.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Intel Broxton SoC pinctrl/GPIO driver
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2015, 2016 Intel Corporation
6*4882a593Smuzhiyun  * Author: Mika Westerberg <mika.westerberg@linux.intel.com>
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include <linux/mod_devicetable.h>
10*4882a593Smuzhiyun #include <linux/module.h>
11*4882a593Smuzhiyun #include <linux/platform_device.h>
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #include <linux/pinctrl/pinctrl.h>
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #include "pinctrl-intel.h"
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #define BXT_PAD_OWN	0x020
18*4882a593Smuzhiyun #define BXT_PADCFGLOCK	0x060
19*4882a593Smuzhiyun #define BXT_HOSTSW_OWN	0x080
20*4882a593Smuzhiyun #define BXT_GPI_IS	0x100
21*4882a593Smuzhiyun #define BXT_GPI_IE	0x110
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun #define BXT_COMMUNITY(s, e)				\
24*4882a593Smuzhiyun 	{						\
25*4882a593Smuzhiyun 		.padown_offset = BXT_PAD_OWN,		\
26*4882a593Smuzhiyun 		.padcfglock_offset = BXT_PADCFGLOCK,	\
27*4882a593Smuzhiyun 		.hostown_offset = BXT_HOSTSW_OWN,	\
28*4882a593Smuzhiyun 		.is_offset = BXT_GPI_IS,		\
29*4882a593Smuzhiyun 		.ie_offset = BXT_GPI_IE,		\
30*4882a593Smuzhiyun 		.gpp_size = 32,                         \
31*4882a593Smuzhiyun 		.pin_base = (s),			\
32*4882a593Smuzhiyun 		.npins = ((e) - (s) + 1),		\
33*4882a593Smuzhiyun 	}
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun /* BXT */
36*4882a593Smuzhiyun static const struct pinctrl_pin_desc bxt_north_pins[] = {
37*4882a593Smuzhiyun 	PINCTRL_PIN(0, "GPIO_0"),
38*4882a593Smuzhiyun 	PINCTRL_PIN(1, "GPIO_1"),
39*4882a593Smuzhiyun 	PINCTRL_PIN(2, "GPIO_2"),
40*4882a593Smuzhiyun 	PINCTRL_PIN(3, "GPIO_3"),
41*4882a593Smuzhiyun 	PINCTRL_PIN(4, "GPIO_4"),
42*4882a593Smuzhiyun 	PINCTRL_PIN(5, "GPIO_5"),
43*4882a593Smuzhiyun 	PINCTRL_PIN(6, "GPIO_6"),
44*4882a593Smuzhiyun 	PINCTRL_PIN(7, "GPIO_7"),
45*4882a593Smuzhiyun 	PINCTRL_PIN(8, "GPIO_8"),
46*4882a593Smuzhiyun 	PINCTRL_PIN(9, "GPIO_9"),
47*4882a593Smuzhiyun 	PINCTRL_PIN(10, "GPIO_10"),
48*4882a593Smuzhiyun 	PINCTRL_PIN(11, "GPIO_11"),
49*4882a593Smuzhiyun 	PINCTRL_PIN(12, "GPIO_12"),
50*4882a593Smuzhiyun 	PINCTRL_PIN(13, "GPIO_13"),
51*4882a593Smuzhiyun 	PINCTRL_PIN(14, "GPIO_14"),
52*4882a593Smuzhiyun 	PINCTRL_PIN(15, "GPIO_15"),
53*4882a593Smuzhiyun 	PINCTRL_PIN(16, "GPIO_16"),
54*4882a593Smuzhiyun 	PINCTRL_PIN(17, "GPIO_17"),
55*4882a593Smuzhiyun 	PINCTRL_PIN(18, "GPIO_18"),
56*4882a593Smuzhiyun 	PINCTRL_PIN(19, "GPIO_19"),
57*4882a593Smuzhiyun 	PINCTRL_PIN(20, "GPIO_20"),
58*4882a593Smuzhiyun 	PINCTRL_PIN(21, "GPIO_21"),
59*4882a593Smuzhiyun 	PINCTRL_PIN(22, "GPIO_22"),
60*4882a593Smuzhiyun 	PINCTRL_PIN(23, "GPIO_23"),
61*4882a593Smuzhiyun 	PINCTRL_PIN(24, "GPIO_24"),
62*4882a593Smuzhiyun 	PINCTRL_PIN(25, "GPIO_25"),
63*4882a593Smuzhiyun 	PINCTRL_PIN(26, "GPIO_26"),
64*4882a593Smuzhiyun 	PINCTRL_PIN(27, "GPIO_27"),
65*4882a593Smuzhiyun 	PINCTRL_PIN(28, "GPIO_28"),
66*4882a593Smuzhiyun 	PINCTRL_PIN(29, "GPIO_29"),
67*4882a593Smuzhiyun 	PINCTRL_PIN(30, "GPIO_30"),
68*4882a593Smuzhiyun 	PINCTRL_PIN(31, "GPIO_31"),
69*4882a593Smuzhiyun 	PINCTRL_PIN(32, "GPIO_32"),
70*4882a593Smuzhiyun 	PINCTRL_PIN(33, "GPIO_33"),
71*4882a593Smuzhiyun 	PINCTRL_PIN(34, "PWM0"),
72*4882a593Smuzhiyun 	PINCTRL_PIN(35, "PWM1"),
73*4882a593Smuzhiyun 	PINCTRL_PIN(36, "PWM2"),
74*4882a593Smuzhiyun 	PINCTRL_PIN(37, "PWM3"),
75*4882a593Smuzhiyun 	PINCTRL_PIN(38, "LPSS_UART0_RXD"),
76*4882a593Smuzhiyun 	PINCTRL_PIN(39, "LPSS_UART0_TXD"),
77*4882a593Smuzhiyun 	PINCTRL_PIN(40, "LPSS_UART0_RTS_B"),
78*4882a593Smuzhiyun 	PINCTRL_PIN(41, "LPSS_UART0_CTS_B"),
79*4882a593Smuzhiyun 	PINCTRL_PIN(42, "LPSS_UART1_RXD"),
80*4882a593Smuzhiyun 	PINCTRL_PIN(43, "LPSS_UART1_TXD"),
81*4882a593Smuzhiyun 	PINCTRL_PIN(44, "LPSS_UART1_RTS_B"),
82*4882a593Smuzhiyun 	PINCTRL_PIN(45, "LPSS_UART1_CTS_B"),
83*4882a593Smuzhiyun 	PINCTRL_PIN(46, "LPSS_UART2_RXD"),
84*4882a593Smuzhiyun 	PINCTRL_PIN(47, "LPSS_UART2_TXD"),
85*4882a593Smuzhiyun 	PINCTRL_PIN(48, "LPSS_UART2_RTS_B"),
86*4882a593Smuzhiyun 	PINCTRL_PIN(49, "LPSS_UART2_CTS_B"),
87*4882a593Smuzhiyun 	PINCTRL_PIN(50, "ISH_UART0_RXD"),
88*4882a593Smuzhiyun 	PINCTRL_PIN(51, "ISH_UART0_TXT"),
89*4882a593Smuzhiyun 	PINCTRL_PIN(52, "ISH_UART0_RTS_B"),
90*4882a593Smuzhiyun 	PINCTRL_PIN(53, "ISH_UART0_CTS_B"),
91*4882a593Smuzhiyun 	PINCTRL_PIN(54, "ISH_UART1_RXD"),
92*4882a593Smuzhiyun 	PINCTRL_PIN(55, "ISH_UART1_TXT"),
93*4882a593Smuzhiyun 	PINCTRL_PIN(56, "ISH_UART1_RTS_B"),
94*4882a593Smuzhiyun 	PINCTRL_PIN(57, "ISH_UART1_CTS_B"),
95*4882a593Smuzhiyun 	PINCTRL_PIN(58, "ISH_UART2_RXD"),
96*4882a593Smuzhiyun 	PINCTRL_PIN(59, "ISH_UART2_TXD"),
97*4882a593Smuzhiyun 	PINCTRL_PIN(60, "ISH_UART2_RTS_B"),
98*4882a593Smuzhiyun 	PINCTRL_PIN(61, "ISH_UART2_CTS_B"),
99*4882a593Smuzhiyun 	PINCTRL_PIN(62, "GP_CAMERASB00"),
100*4882a593Smuzhiyun 	PINCTRL_PIN(63, "GP_CAMERASB01"),
101*4882a593Smuzhiyun 	PINCTRL_PIN(64, "GP_CAMERASB02"),
102*4882a593Smuzhiyun 	PINCTRL_PIN(65, "GP_CAMERASB03"),
103*4882a593Smuzhiyun 	PINCTRL_PIN(66, "GP_CAMERASB04"),
104*4882a593Smuzhiyun 	PINCTRL_PIN(67, "GP_CAMERASB05"),
105*4882a593Smuzhiyun 	PINCTRL_PIN(68, "GP_CAMERASB06"),
106*4882a593Smuzhiyun 	PINCTRL_PIN(69, "GP_CAMERASB07"),
107*4882a593Smuzhiyun 	PINCTRL_PIN(70, "GP_CAMERASB08"),
108*4882a593Smuzhiyun 	PINCTRL_PIN(71, "GP_CAMERASB09"),
109*4882a593Smuzhiyun 	PINCTRL_PIN(72, "GP_CAMERASB10"),
110*4882a593Smuzhiyun 	PINCTRL_PIN(73, "GP_CAMERASB11"),
111*4882a593Smuzhiyun 	PINCTRL_PIN(74, "TCK"),
112*4882a593Smuzhiyun 	PINCTRL_PIN(75, "TRST_B"),
113*4882a593Smuzhiyun 	PINCTRL_PIN(76, "TMS"),
114*4882a593Smuzhiyun 	PINCTRL_PIN(77, "TDI"),
115*4882a593Smuzhiyun 	PINCTRL_PIN(78, "CX_PMODE"),
116*4882a593Smuzhiyun 	PINCTRL_PIN(79, "CX_PREQ_B"),
117*4882a593Smuzhiyun 	PINCTRL_PIN(80, "JTAGX"),
118*4882a593Smuzhiyun 	PINCTRL_PIN(81, "CX_PRDY_B"),
119*4882a593Smuzhiyun 	PINCTRL_PIN(82, "TDO"),
120*4882a593Smuzhiyun };
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun static const unsigned int bxt_north_pwm0_pins[] = { 34 };
123*4882a593Smuzhiyun static const unsigned int bxt_north_pwm1_pins[] = { 35 };
124*4882a593Smuzhiyun static const unsigned int bxt_north_pwm2_pins[] = { 36 };
125*4882a593Smuzhiyun static const unsigned int bxt_north_pwm3_pins[] = { 37 };
126*4882a593Smuzhiyun static const unsigned int bxt_north_uart0_pins[] = { 38, 39, 40, 41 };
127*4882a593Smuzhiyun static const unsigned int bxt_north_uart1_pins[] = { 42, 43, 44, 45 };
128*4882a593Smuzhiyun static const unsigned int bxt_north_uart2_pins[] = { 46, 47, 48, 49 };
129*4882a593Smuzhiyun static const unsigned int bxt_north_uart0b_pins[] = { 50, 51, 52, 53 };
130*4882a593Smuzhiyun static const unsigned int bxt_north_uart1b_pins[] = { 54, 55, 56, 57 };
131*4882a593Smuzhiyun static const unsigned int bxt_north_uart2b_pins[] = { 58, 59, 60, 61 };
132*4882a593Smuzhiyun static const unsigned int bxt_north_uart3_pins[] = { 58, 59, 60, 61 };
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun static const struct intel_pingroup bxt_north_groups[] = {
135*4882a593Smuzhiyun 	PIN_GROUP("pwm0_grp", bxt_north_pwm0_pins, 1),
136*4882a593Smuzhiyun 	PIN_GROUP("pwm1_grp", bxt_north_pwm1_pins, 1),
137*4882a593Smuzhiyun 	PIN_GROUP("pwm2_grp", bxt_north_pwm2_pins, 1),
138*4882a593Smuzhiyun 	PIN_GROUP("pwm3_grp", bxt_north_pwm3_pins, 1),
139*4882a593Smuzhiyun 	PIN_GROUP("uart0_grp", bxt_north_uart0_pins, 1),
140*4882a593Smuzhiyun 	PIN_GROUP("uart1_grp", bxt_north_uart1_pins, 1),
141*4882a593Smuzhiyun 	PIN_GROUP("uart2_grp", bxt_north_uart2_pins, 1),
142*4882a593Smuzhiyun 	PIN_GROUP("uart0b_grp", bxt_north_uart0b_pins, 2),
143*4882a593Smuzhiyun 	PIN_GROUP("uart1b_grp", bxt_north_uart1b_pins, 2),
144*4882a593Smuzhiyun 	PIN_GROUP("uart2b_grp", bxt_north_uart2b_pins, 2),
145*4882a593Smuzhiyun 	PIN_GROUP("uart3_grp", bxt_north_uart3_pins, 3),
146*4882a593Smuzhiyun };
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun static const char * const bxt_north_pwm0_groups[] = { "pwm0_grp" };
149*4882a593Smuzhiyun static const char * const bxt_north_pwm1_groups[] = { "pwm1_grp" };
150*4882a593Smuzhiyun static const char * const bxt_north_pwm2_groups[] = { "pwm2_grp" };
151*4882a593Smuzhiyun static const char * const bxt_north_pwm3_groups[] = { "pwm3_grp" };
152*4882a593Smuzhiyun static const char * const bxt_north_uart0_groups[] = {
153*4882a593Smuzhiyun 	"uart0_grp", "uart0b_grp",
154*4882a593Smuzhiyun };
155*4882a593Smuzhiyun static const char * const bxt_north_uart1_groups[] = {
156*4882a593Smuzhiyun 	"uart1_grp", "uart1b_grp",
157*4882a593Smuzhiyun };
158*4882a593Smuzhiyun static const char * const bxt_north_uart2_groups[] = {
159*4882a593Smuzhiyun 	"uart2_grp", "uart2b_grp",
160*4882a593Smuzhiyun };
161*4882a593Smuzhiyun static const char * const bxt_north_uart3_groups[] = { "uart3_grp" };
162*4882a593Smuzhiyun 
163*4882a593Smuzhiyun static const struct intel_function bxt_north_functions[] = {
164*4882a593Smuzhiyun 	FUNCTION("pwm0", bxt_north_pwm0_groups),
165*4882a593Smuzhiyun 	FUNCTION("pwm1", bxt_north_pwm1_groups),
166*4882a593Smuzhiyun 	FUNCTION("pwm2", bxt_north_pwm2_groups),
167*4882a593Smuzhiyun 	FUNCTION("pwm3", bxt_north_pwm3_groups),
168*4882a593Smuzhiyun 	FUNCTION("uart0", bxt_north_uart0_groups),
169*4882a593Smuzhiyun 	FUNCTION("uart1", bxt_north_uart1_groups),
170*4882a593Smuzhiyun 	FUNCTION("uart2", bxt_north_uart2_groups),
171*4882a593Smuzhiyun 	FUNCTION("uart3", bxt_north_uart3_groups),
172*4882a593Smuzhiyun };
173*4882a593Smuzhiyun 
174*4882a593Smuzhiyun static const struct intel_community bxt_north_communities[] = {
175*4882a593Smuzhiyun 	BXT_COMMUNITY(0, 82),
176*4882a593Smuzhiyun };
177*4882a593Smuzhiyun 
178*4882a593Smuzhiyun static const struct intel_pinctrl_soc_data bxt_north_soc_data = {
179*4882a593Smuzhiyun 	.uid = "1",
180*4882a593Smuzhiyun 	.pins = bxt_north_pins,
181*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(bxt_north_pins),
182*4882a593Smuzhiyun 	.groups = bxt_north_groups,
183*4882a593Smuzhiyun 	.ngroups = ARRAY_SIZE(bxt_north_groups),
184*4882a593Smuzhiyun 	.functions = bxt_north_functions,
185*4882a593Smuzhiyun 	.nfunctions = ARRAY_SIZE(bxt_north_functions),
186*4882a593Smuzhiyun 	.communities = bxt_north_communities,
187*4882a593Smuzhiyun 	.ncommunities = ARRAY_SIZE(bxt_north_communities),
188*4882a593Smuzhiyun };
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun static const struct pinctrl_pin_desc bxt_northwest_pins[] = {
191*4882a593Smuzhiyun 	PINCTRL_PIN(0, "PMC_SPI_FS0"),
192*4882a593Smuzhiyun 	PINCTRL_PIN(1, "PMC_SPI_FS1"),
193*4882a593Smuzhiyun 	PINCTRL_PIN(2, "PMC_SPI_FS2"),
194*4882a593Smuzhiyun 	PINCTRL_PIN(3, "PMC_SPI_RXD"),
195*4882a593Smuzhiyun 	PINCTRL_PIN(4, "PMC_SPI_TXD"),
196*4882a593Smuzhiyun 	PINCTRL_PIN(5, "PMC_SPI_CLK"),
197*4882a593Smuzhiyun 	PINCTRL_PIN(6, "PMC_UART_RXD"),
198*4882a593Smuzhiyun 	PINCTRL_PIN(7, "PMC_UART_TXD"),
199*4882a593Smuzhiyun 	PINCTRL_PIN(8, "PMIC_PWRGOOD"),
200*4882a593Smuzhiyun 	PINCTRL_PIN(9, "PMIC_RESET_B"),
201*4882a593Smuzhiyun 	PINCTRL_PIN(10, "RTC_CLK"),
202*4882a593Smuzhiyun 	PINCTRL_PIN(11, "PMIC_SDWN_B"),
203*4882a593Smuzhiyun 	PINCTRL_PIN(12, "PMIC_BCUDISW2"),
204*4882a593Smuzhiyun 	PINCTRL_PIN(13, "PMIC_BCUDISCRIT"),
205*4882a593Smuzhiyun 	PINCTRL_PIN(14, "PMIC_THERMTRIP_B"),
206*4882a593Smuzhiyun 	PINCTRL_PIN(15, "PMIC_STDBY"),
207*4882a593Smuzhiyun 	PINCTRL_PIN(16, "SVID0_ALERT_B"),
208*4882a593Smuzhiyun 	PINCTRL_PIN(17, "SVID0_DATA"),
209*4882a593Smuzhiyun 	PINCTRL_PIN(18, "SVID0_CLK"),
210*4882a593Smuzhiyun 	PINCTRL_PIN(19, "PMIC_I2C_SCL"),
211*4882a593Smuzhiyun 	PINCTRL_PIN(20, "PMIC_I2C_SDA"),
212*4882a593Smuzhiyun 	PINCTRL_PIN(21, "AVS_I2S1_MCLK"),
213*4882a593Smuzhiyun 	PINCTRL_PIN(22, "AVS_I2S1_BCLK"),
214*4882a593Smuzhiyun 	PINCTRL_PIN(23, "AVS_I2S1_WS_SYNC"),
215*4882a593Smuzhiyun 	PINCTRL_PIN(24, "AVS_I2S1_SDI"),
216*4882a593Smuzhiyun 	PINCTRL_PIN(25, "AVS_I2S1_SDO"),
217*4882a593Smuzhiyun 	PINCTRL_PIN(26, "AVS_M_CLK_A1"),
218*4882a593Smuzhiyun 	PINCTRL_PIN(27, "AVS_M_CLK_B1"),
219*4882a593Smuzhiyun 	PINCTRL_PIN(28, "AVS_M_DATA_1"),
220*4882a593Smuzhiyun 	PINCTRL_PIN(29, "AVS_M_CLK_AB2"),
221*4882a593Smuzhiyun 	PINCTRL_PIN(30, "AVS_M_DATA_2"),
222*4882a593Smuzhiyun 	PINCTRL_PIN(31, "AVS_I2S2_MCLK"),
223*4882a593Smuzhiyun 	PINCTRL_PIN(32, "AVS_I2S2_BCLK"),
224*4882a593Smuzhiyun 	PINCTRL_PIN(33, "AVS_I2S2_WS_SYNC"),
225*4882a593Smuzhiyun 	PINCTRL_PIN(34, "AVS_I2S2_SDI"),
226*4882a593Smuzhiyun 	PINCTRL_PIN(35, "AVS_I2S2_SDOK"),
227*4882a593Smuzhiyun 	PINCTRL_PIN(36, "AVS_I2S3_BCLK"),
228*4882a593Smuzhiyun 	PINCTRL_PIN(37, "AVS_I2S3_WS_SYNC"),
229*4882a593Smuzhiyun 	PINCTRL_PIN(38, "AVS_I2S3_SDI"),
230*4882a593Smuzhiyun 	PINCTRL_PIN(39, "AVS_I2S3_SDO"),
231*4882a593Smuzhiyun 	PINCTRL_PIN(40, "AVS_I2S4_BCLK"),
232*4882a593Smuzhiyun 	PINCTRL_PIN(41, "AVS_I2S4_WS_SYNC"),
233*4882a593Smuzhiyun 	PINCTRL_PIN(42, "AVS_I2S4_SDI"),
234*4882a593Smuzhiyun 	PINCTRL_PIN(43, "AVS_I2S4_SDO"),
235*4882a593Smuzhiyun 	PINCTRL_PIN(44, "PROCHOT_B"),
236*4882a593Smuzhiyun 	PINCTRL_PIN(45, "FST_SPI_CS0_B"),
237*4882a593Smuzhiyun 	PINCTRL_PIN(46, "FST_SPI_CS1_B"),
238*4882a593Smuzhiyun 	PINCTRL_PIN(47, "FST_SPI_MOSI_IO0"),
239*4882a593Smuzhiyun 	PINCTRL_PIN(48, "FST_SPI_MISO_IO1"),
240*4882a593Smuzhiyun 	PINCTRL_PIN(49, "FST_SPI_IO2"),
241*4882a593Smuzhiyun 	PINCTRL_PIN(50, "FST_SPI_IO3"),
242*4882a593Smuzhiyun 	PINCTRL_PIN(51, "FST_SPI_CLK"),
243*4882a593Smuzhiyun 	PINCTRL_PIN(52, "FST_SPI_CLK_FB"),
244*4882a593Smuzhiyun 	PINCTRL_PIN(53, "GP_SSP_0_CLK"),
245*4882a593Smuzhiyun 	PINCTRL_PIN(54, "GP_SSP_0_FS0"),
246*4882a593Smuzhiyun 	PINCTRL_PIN(55, "GP_SSP_0_FS1"),
247*4882a593Smuzhiyun 	PINCTRL_PIN(56, "GP_SSP_0_FS2"),
248*4882a593Smuzhiyun 	PINCTRL_PIN(57, "GP_SSP_0_RXD"),
249*4882a593Smuzhiyun 	PINCTRL_PIN(58, "GP_SSP_0_TXD"),
250*4882a593Smuzhiyun 	PINCTRL_PIN(59, "GP_SSP_1_CLK"),
251*4882a593Smuzhiyun 	PINCTRL_PIN(60, "GP_SSP_1_FS0"),
252*4882a593Smuzhiyun 	PINCTRL_PIN(61, "GP_SSP_1_FS1"),
253*4882a593Smuzhiyun 	PINCTRL_PIN(62, "GP_SSP_1_FS2"),
254*4882a593Smuzhiyun 	PINCTRL_PIN(63, "GP_SSP_1_FS3"),
255*4882a593Smuzhiyun 	PINCTRL_PIN(64, "GP_SSP_1_RXD"),
256*4882a593Smuzhiyun 	PINCTRL_PIN(65, "GP_SSP_1_TXD"),
257*4882a593Smuzhiyun 	PINCTRL_PIN(66, "GP_SSP_2_CLK"),
258*4882a593Smuzhiyun 	PINCTRL_PIN(67, "GP_SSP_2_FS0"),
259*4882a593Smuzhiyun 	PINCTRL_PIN(68, "GP_SSP_2_FS1"),
260*4882a593Smuzhiyun 	PINCTRL_PIN(69, "GP_SSP_2_FS2"),
261*4882a593Smuzhiyun 	PINCTRL_PIN(70, "GP_SSP_2_RXD"),
262*4882a593Smuzhiyun 	PINCTRL_PIN(71, "GP_SSP_2_TXD"),
263*4882a593Smuzhiyun };
264*4882a593Smuzhiyun 
265*4882a593Smuzhiyun static const unsigned int bxt_northwest_ssp0_pins[] = { 53, 54, 55, 56, 57, 58 };
266*4882a593Smuzhiyun static const unsigned int bxt_northwest_ssp1_pins[] = {
267*4882a593Smuzhiyun 	59, 60, 61, 62, 63, 64, 65
268*4882a593Smuzhiyun };
269*4882a593Smuzhiyun static const unsigned int bxt_northwest_ssp2_pins[] = { 66, 67, 68, 69, 70, 71 };
270*4882a593Smuzhiyun static const unsigned int bxt_northwest_uart3_pins[] = { 67, 68, 69, 70 };
271*4882a593Smuzhiyun 
272*4882a593Smuzhiyun static const struct intel_pingroup bxt_northwest_groups[] = {
273*4882a593Smuzhiyun 	PIN_GROUP("ssp0_grp", bxt_northwest_ssp0_pins, 1),
274*4882a593Smuzhiyun 	PIN_GROUP("ssp1_grp", bxt_northwest_ssp1_pins, 1),
275*4882a593Smuzhiyun 	PIN_GROUP("ssp2_grp", bxt_northwest_ssp2_pins, 1),
276*4882a593Smuzhiyun 	PIN_GROUP("uart3_grp", bxt_northwest_uart3_pins, 2),
277*4882a593Smuzhiyun };
278*4882a593Smuzhiyun 
279*4882a593Smuzhiyun static const char * const bxt_northwest_ssp0_groups[] = { "ssp0_grp" };
280*4882a593Smuzhiyun static const char * const bxt_northwest_ssp1_groups[] = { "ssp1_grp" };
281*4882a593Smuzhiyun static const char * const bxt_northwest_ssp2_groups[] = { "ssp2_grp" };
282*4882a593Smuzhiyun static const char * const bxt_northwest_uart3_groups[] = { "uart3_grp" };
283*4882a593Smuzhiyun 
284*4882a593Smuzhiyun static const struct intel_function bxt_northwest_functions[] = {
285*4882a593Smuzhiyun 	FUNCTION("ssp0", bxt_northwest_ssp0_groups),
286*4882a593Smuzhiyun 	FUNCTION("ssp1", bxt_northwest_ssp1_groups),
287*4882a593Smuzhiyun 	FUNCTION("ssp2", bxt_northwest_ssp2_groups),
288*4882a593Smuzhiyun 	FUNCTION("uart3", bxt_northwest_uart3_groups),
289*4882a593Smuzhiyun };
290*4882a593Smuzhiyun 
291*4882a593Smuzhiyun static const struct intel_community bxt_northwest_communities[] = {
292*4882a593Smuzhiyun 	BXT_COMMUNITY(0, 71),
293*4882a593Smuzhiyun };
294*4882a593Smuzhiyun 
295*4882a593Smuzhiyun static const struct intel_pinctrl_soc_data bxt_northwest_soc_data = {
296*4882a593Smuzhiyun 	.uid = "2",
297*4882a593Smuzhiyun 	.pins = bxt_northwest_pins,
298*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(bxt_northwest_pins),
299*4882a593Smuzhiyun 	.groups = bxt_northwest_groups,
300*4882a593Smuzhiyun 	.ngroups = ARRAY_SIZE(bxt_northwest_groups),
301*4882a593Smuzhiyun 	.functions = bxt_northwest_functions,
302*4882a593Smuzhiyun 	.nfunctions = ARRAY_SIZE(bxt_northwest_functions),
303*4882a593Smuzhiyun 	.communities = bxt_northwest_communities,
304*4882a593Smuzhiyun 	.ncommunities = ARRAY_SIZE(bxt_northwest_communities),
305*4882a593Smuzhiyun };
306*4882a593Smuzhiyun 
307*4882a593Smuzhiyun static const struct pinctrl_pin_desc bxt_west_pins[] = {
308*4882a593Smuzhiyun 	PINCTRL_PIN(0, "LPSS_I2C0_SDA"),
309*4882a593Smuzhiyun 	PINCTRL_PIN(1, "LPSS_I2C0_SCL"),
310*4882a593Smuzhiyun 	PINCTRL_PIN(2, "LPSS_I2C1_SDA"),
311*4882a593Smuzhiyun 	PINCTRL_PIN(3, "LPSS_I2C1_SCL"),
312*4882a593Smuzhiyun 	PINCTRL_PIN(4, "LPSS_I2C2_SDA"),
313*4882a593Smuzhiyun 	PINCTRL_PIN(5, "LPSS_I2C2_SCL"),
314*4882a593Smuzhiyun 	PINCTRL_PIN(6, "LPSS_I2C3_SDA"),
315*4882a593Smuzhiyun 	PINCTRL_PIN(7, "LPSS_I2C3_SCL"),
316*4882a593Smuzhiyun 	PINCTRL_PIN(8, "LPSS_I2C4_SDA"),
317*4882a593Smuzhiyun 	PINCTRL_PIN(9, "LPSS_I2C4_SCL"),
318*4882a593Smuzhiyun 	PINCTRL_PIN(10, "LPSS_I2C5_SDA"),
319*4882a593Smuzhiyun 	PINCTRL_PIN(11, "LPSS_I2C5_SCL"),
320*4882a593Smuzhiyun 	PINCTRL_PIN(12, "LPSS_I2C6_SDA"),
321*4882a593Smuzhiyun 	PINCTRL_PIN(13, "LPSS_I2C6_SCL"),
322*4882a593Smuzhiyun 	PINCTRL_PIN(14, "LPSS_I2C7_SDA"),
323*4882a593Smuzhiyun 	PINCTRL_PIN(15, "LPSS_I2C7_SCL"),
324*4882a593Smuzhiyun 	PINCTRL_PIN(16, "ISH_I2C0_SDA"),
325*4882a593Smuzhiyun 	PINCTRL_PIN(17, "ISH_I2C0_SCL"),
326*4882a593Smuzhiyun 	PINCTRL_PIN(18, "ISH_I2C1_SDA"),
327*4882a593Smuzhiyun 	PINCTRL_PIN(19, "ISH_I2C1_SCL"),
328*4882a593Smuzhiyun 	PINCTRL_PIN(20, "ISH_I2C2_SDA"),
329*4882a593Smuzhiyun 	PINCTRL_PIN(21, "ISH_I2C2_SCL"),
330*4882a593Smuzhiyun 	PINCTRL_PIN(22, "ISH_GPIO_0"),
331*4882a593Smuzhiyun 	PINCTRL_PIN(23, "ISH_GPIO_1"),
332*4882a593Smuzhiyun 	PINCTRL_PIN(24, "ISH_GPIO_2"),
333*4882a593Smuzhiyun 	PINCTRL_PIN(25, "ISH_GPIO_3"),
334*4882a593Smuzhiyun 	PINCTRL_PIN(26, "ISH_GPIO_4"),
335*4882a593Smuzhiyun 	PINCTRL_PIN(27, "ISH_GPIO_5"),
336*4882a593Smuzhiyun 	PINCTRL_PIN(28, "ISH_GPIO_6"),
337*4882a593Smuzhiyun 	PINCTRL_PIN(29, "ISH_GPIO_7"),
338*4882a593Smuzhiyun 	PINCTRL_PIN(30, "ISH_GPIO_8"),
339*4882a593Smuzhiyun 	PINCTRL_PIN(31, "ISH_GPIO_9"),
340*4882a593Smuzhiyun 	PINCTRL_PIN(32, "MODEM_CLKREQ"),
341*4882a593Smuzhiyun 	PINCTRL_PIN(33, "DGCLKDBG_PMC_0"),
342*4882a593Smuzhiyun 	PINCTRL_PIN(34, "DGCLKDBG_PMC_1"),
343*4882a593Smuzhiyun 	PINCTRL_PIN(35, "DGCLKDBG_PMC_2"),
344*4882a593Smuzhiyun 	PINCTRL_PIN(36, "DGCLKDBG_ICLK_0"),
345*4882a593Smuzhiyun 	PINCTRL_PIN(37, "DGCLKDBG_ICLK_1"),
346*4882a593Smuzhiyun 	PINCTRL_PIN(38, "OSC_CLK_OUT_0"),
347*4882a593Smuzhiyun 	PINCTRL_PIN(39, "OSC_CLK_OUT_1"),
348*4882a593Smuzhiyun 	PINCTRL_PIN(40, "OSC_CLK_OUT_2"),
349*4882a593Smuzhiyun 	PINCTRL_PIN(41, "OSC_CLK_OUT_3"),
350*4882a593Smuzhiyun };
351*4882a593Smuzhiyun 
352*4882a593Smuzhiyun static const unsigned int bxt_west_i2c0_pins[] = { 0, 1 };
353*4882a593Smuzhiyun static const unsigned int bxt_west_i2c1_pins[] = { 2, 3 };
354*4882a593Smuzhiyun static const unsigned int bxt_west_i2c2_pins[] = { 4, 5 };
355*4882a593Smuzhiyun static const unsigned int bxt_west_i2c3_pins[] = { 6, 7 };
356*4882a593Smuzhiyun static const unsigned int bxt_west_i2c4_pins[] = { 8, 9 };
357*4882a593Smuzhiyun static const unsigned int bxt_west_i2c5_pins[] = { 10, 11 };
358*4882a593Smuzhiyun static const unsigned int bxt_west_i2c6_pins[] = { 12, 13 };
359*4882a593Smuzhiyun static const unsigned int bxt_west_i2c7_pins[] = { 14, 15 };
360*4882a593Smuzhiyun static const unsigned int bxt_west_i2c5b_pins[] = { 16, 17 };
361*4882a593Smuzhiyun static const unsigned int bxt_west_i2c6b_pins[] = { 18, 19 };
362*4882a593Smuzhiyun static const unsigned int bxt_west_i2c7b_pins[] = { 20, 21 };
363*4882a593Smuzhiyun 
364*4882a593Smuzhiyun static const struct intel_pingroup bxt_west_groups[] = {
365*4882a593Smuzhiyun 	PIN_GROUP("i2c0_grp", bxt_west_i2c0_pins, 1),
366*4882a593Smuzhiyun 	PIN_GROUP("i2c1_grp", bxt_west_i2c1_pins, 1),
367*4882a593Smuzhiyun 	PIN_GROUP("i2c2_grp", bxt_west_i2c2_pins, 1),
368*4882a593Smuzhiyun 	PIN_GROUP("i2c3_grp", bxt_west_i2c3_pins, 1),
369*4882a593Smuzhiyun 	PIN_GROUP("i2c4_grp", bxt_west_i2c4_pins, 1),
370*4882a593Smuzhiyun 	PIN_GROUP("i2c5_grp", bxt_west_i2c5_pins, 1),
371*4882a593Smuzhiyun 	PIN_GROUP("i2c6_grp", bxt_west_i2c6_pins, 1),
372*4882a593Smuzhiyun 	PIN_GROUP("i2c7_grp", bxt_west_i2c7_pins, 1),
373*4882a593Smuzhiyun 	PIN_GROUP("i2c5b_grp", bxt_west_i2c5b_pins, 2),
374*4882a593Smuzhiyun 	PIN_GROUP("i2c6b_grp", bxt_west_i2c6b_pins, 2),
375*4882a593Smuzhiyun 	PIN_GROUP("i2c7b_grp", bxt_west_i2c7b_pins, 2),
376*4882a593Smuzhiyun };
377*4882a593Smuzhiyun 
378*4882a593Smuzhiyun static const char * const bxt_west_i2c0_groups[] = { "i2c0_grp" };
379*4882a593Smuzhiyun static const char * const bxt_west_i2c1_groups[] = { "i2c1_grp" };
380*4882a593Smuzhiyun static const char * const bxt_west_i2c2_groups[] = { "i2c2_grp" };
381*4882a593Smuzhiyun static const char * const bxt_west_i2c3_groups[] = { "i2c3_grp" };
382*4882a593Smuzhiyun static const char * const bxt_west_i2c4_groups[] = { "i2c4_grp" };
383*4882a593Smuzhiyun static const char * const bxt_west_i2c5_groups[] = { "i2c5_grp", "i2c5b_grp" };
384*4882a593Smuzhiyun static const char * const bxt_west_i2c6_groups[] = { "i2c6_grp", "i2c6b_grp" };
385*4882a593Smuzhiyun static const char * const bxt_west_i2c7_groups[] = { "i2c7_grp", "i2c7b_grp" };
386*4882a593Smuzhiyun 
387*4882a593Smuzhiyun static const struct intel_function bxt_west_functions[] = {
388*4882a593Smuzhiyun 	FUNCTION("i2c0", bxt_west_i2c0_groups),
389*4882a593Smuzhiyun 	FUNCTION("i2c1", bxt_west_i2c1_groups),
390*4882a593Smuzhiyun 	FUNCTION("i2c2", bxt_west_i2c2_groups),
391*4882a593Smuzhiyun 	FUNCTION("i2c3", bxt_west_i2c3_groups),
392*4882a593Smuzhiyun 	FUNCTION("i2c4", bxt_west_i2c4_groups),
393*4882a593Smuzhiyun 	FUNCTION("i2c5", bxt_west_i2c5_groups),
394*4882a593Smuzhiyun 	FUNCTION("i2c6", bxt_west_i2c6_groups),
395*4882a593Smuzhiyun 	FUNCTION("i2c7", bxt_west_i2c7_groups),
396*4882a593Smuzhiyun };
397*4882a593Smuzhiyun 
398*4882a593Smuzhiyun static const struct intel_community bxt_west_communities[] = {
399*4882a593Smuzhiyun 	BXT_COMMUNITY(0, 41),
400*4882a593Smuzhiyun };
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun static const struct intel_pinctrl_soc_data bxt_west_soc_data = {
403*4882a593Smuzhiyun 	.uid = "3",
404*4882a593Smuzhiyun 	.pins = bxt_west_pins,
405*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(bxt_west_pins),
406*4882a593Smuzhiyun 	.groups = bxt_west_groups,
407*4882a593Smuzhiyun 	.ngroups = ARRAY_SIZE(bxt_west_groups),
408*4882a593Smuzhiyun 	.functions = bxt_west_functions,
409*4882a593Smuzhiyun 	.nfunctions = ARRAY_SIZE(bxt_west_functions),
410*4882a593Smuzhiyun 	.communities = bxt_west_communities,
411*4882a593Smuzhiyun 	.ncommunities = ARRAY_SIZE(bxt_west_communities),
412*4882a593Smuzhiyun };
413*4882a593Smuzhiyun 
414*4882a593Smuzhiyun static const struct pinctrl_pin_desc bxt_southwest_pins[] = {
415*4882a593Smuzhiyun 	PINCTRL_PIN(0, "EMMC0_CLK"),
416*4882a593Smuzhiyun 	PINCTRL_PIN(1, "EMMC0_D0"),
417*4882a593Smuzhiyun 	PINCTRL_PIN(2, "EMMC0_D1"),
418*4882a593Smuzhiyun 	PINCTRL_PIN(3, "EMMC0_D2"),
419*4882a593Smuzhiyun 	PINCTRL_PIN(4, "EMMC0_D3"),
420*4882a593Smuzhiyun 	PINCTRL_PIN(5, "EMMC0_D4"),
421*4882a593Smuzhiyun 	PINCTRL_PIN(6, "EMMC0_D5"),
422*4882a593Smuzhiyun 	PINCTRL_PIN(7, "EMMC0_D6"),
423*4882a593Smuzhiyun 	PINCTRL_PIN(8, "EMMC0_D7"),
424*4882a593Smuzhiyun 	PINCTRL_PIN(9, "EMMC0_CMD"),
425*4882a593Smuzhiyun 	PINCTRL_PIN(10, "SDIO_CLK"),
426*4882a593Smuzhiyun 	PINCTRL_PIN(11, "SDIO_D0"),
427*4882a593Smuzhiyun 	PINCTRL_PIN(12, "SDIO_D1"),
428*4882a593Smuzhiyun 	PINCTRL_PIN(13, "SDIO_D2"),
429*4882a593Smuzhiyun 	PINCTRL_PIN(14, "SDIO_D3"),
430*4882a593Smuzhiyun 	PINCTRL_PIN(15, "SDIO_CMD"),
431*4882a593Smuzhiyun 	PINCTRL_PIN(16, "SDCARD_CLK"),
432*4882a593Smuzhiyun 	PINCTRL_PIN(17, "SDCARD_D0"),
433*4882a593Smuzhiyun 	PINCTRL_PIN(18, "SDCARD_D1"),
434*4882a593Smuzhiyun 	PINCTRL_PIN(19, "SDCARD_D2"),
435*4882a593Smuzhiyun 	PINCTRL_PIN(20, "SDCARD_D3"),
436*4882a593Smuzhiyun 	PINCTRL_PIN(21, "SDCARD_CD_B"),
437*4882a593Smuzhiyun 	PINCTRL_PIN(22, "SDCARD_CMD"),
438*4882a593Smuzhiyun 	PINCTRL_PIN(23, "SDCARD_LVL_CLK_FB"),
439*4882a593Smuzhiyun 	PINCTRL_PIN(24, "SDCARD_LVL_CMD_DIR"),
440*4882a593Smuzhiyun 	PINCTRL_PIN(25, "SDCARD_LVL_DAT_DIR"),
441*4882a593Smuzhiyun 	PINCTRL_PIN(26, "EMMC0_STROBE"),
442*4882a593Smuzhiyun 	PINCTRL_PIN(27, "SDIO_PWR_DOWN_B"),
443*4882a593Smuzhiyun 	PINCTRL_PIN(28, "SDCARD_PWR_DOWN_B"),
444*4882a593Smuzhiyun 	PINCTRL_PIN(29, "SDCARD_LVL_SEL"),
445*4882a593Smuzhiyun 	PINCTRL_PIN(30, "SDCARD_LVL_WP"),
446*4882a593Smuzhiyun };
447*4882a593Smuzhiyun 
448*4882a593Smuzhiyun static const unsigned int bxt_southwest_emmc0_pins[] = {
449*4882a593Smuzhiyun 	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 26,
450*4882a593Smuzhiyun };
451*4882a593Smuzhiyun static const unsigned int bxt_southwest_sdio_pins[] = {
452*4882a593Smuzhiyun 	10, 11, 12, 13, 14, 15, 27,
453*4882a593Smuzhiyun };
454*4882a593Smuzhiyun static const unsigned int bxt_southwest_sdcard_pins[] = {
455*4882a593Smuzhiyun 	16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30,
456*4882a593Smuzhiyun };
457*4882a593Smuzhiyun 
458*4882a593Smuzhiyun static const struct intel_pingroup bxt_southwest_groups[] = {
459*4882a593Smuzhiyun 	PIN_GROUP("emmc0_grp", bxt_southwest_emmc0_pins, 1),
460*4882a593Smuzhiyun 	PIN_GROUP("sdio_grp", bxt_southwest_sdio_pins, 1),
461*4882a593Smuzhiyun 	PIN_GROUP("sdcard_grp", bxt_southwest_sdcard_pins, 1),
462*4882a593Smuzhiyun };
463*4882a593Smuzhiyun 
464*4882a593Smuzhiyun static const char * const bxt_southwest_emmc0_groups[] = { "emmc0_grp" };
465*4882a593Smuzhiyun static const char * const bxt_southwest_sdio_groups[] = { "sdio_grp" };
466*4882a593Smuzhiyun static const char * const bxt_southwest_sdcard_groups[] = { "sdcard_grp" };
467*4882a593Smuzhiyun 
468*4882a593Smuzhiyun static const struct intel_function bxt_southwest_functions[] = {
469*4882a593Smuzhiyun 	FUNCTION("emmc0", bxt_southwest_emmc0_groups),
470*4882a593Smuzhiyun 	FUNCTION("sdio", bxt_southwest_sdio_groups),
471*4882a593Smuzhiyun 	FUNCTION("sdcard", bxt_southwest_sdcard_groups),
472*4882a593Smuzhiyun };
473*4882a593Smuzhiyun 
474*4882a593Smuzhiyun static const struct intel_community bxt_southwest_communities[] = {
475*4882a593Smuzhiyun 	BXT_COMMUNITY(0, 30),
476*4882a593Smuzhiyun };
477*4882a593Smuzhiyun 
478*4882a593Smuzhiyun static const struct intel_pinctrl_soc_data bxt_southwest_soc_data = {
479*4882a593Smuzhiyun 	.uid = "4",
480*4882a593Smuzhiyun 	.pins = bxt_southwest_pins,
481*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(bxt_southwest_pins),
482*4882a593Smuzhiyun 	.groups = bxt_southwest_groups,
483*4882a593Smuzhiyun 	.ngroups = ARRAY_SIZE(bxt_southwest_groups),
484*4882a593Smuzhiyun 	.functions = bxt_southwest_functions,
485*4882a593Smuzhiyun 	.nfunctions = ARRAY_SIZE(bxt_southwest_functions),
486*4882a593Smuzhiyun 	.communities = bxt_southwest_communities,
487*4882a593Smuzhiyun 	.ncommunities = ARRAY_SIZE(bxt_southwest_communities),
488*4882a593Smuzhiyun };
489*4882a593Smuzhiyun 
490*4882a593Smuzhiyun static const struct pinctrl_pin_desc bxt_south_pins[] = {
491*4882a593Smuzhiyun 	PINCTRL_PIN(0, "HV_DDI0_DDC_SDA"),
492*4882a593Smuzhiyun 	PINCTRL_PIN(1, "HV_DDI0_DDC_SCL"),
493*4882a593Smuzhiyun 	PINCTRL_PIN(2, "HV_DDI1_DDC_SDA"),
494*4882a593Smuzhiyun 	PINCTRL_PIN(3, "HV_DDI1_DDC_SCL"),
495*4882a593Smuzhiyun 	PINCTRL_PIN(4, "DBI_SDA"),
496*4882a593Smuzhiyun 	PINCTRL_PIN(5, "DBI_SCL"),
497*4882a593Smuzhiyun 	PINCTRL_PIN(6, "PANEL0_VDDEN"),
498*4882a593Smuzhiyun 	PINCTRL_PIN(7, "PANEL0_BKLTEN"),
499*4882a593Smuzhiyun 	PINCTRL_PIN(8, "PANEL0_BKLTCTL"),
500*4882a593Smuzhiyun 	PINCTRL_PIN(9, "PANEL1_VDDEN"),
501*4882a593Smuzhiyun 	PINCTRL_PIN(10, "PANEL1_BKLTEN"),
502*4882a593Smuzhiyun 	PINCTRL_PIN(11, "PANEL1_BKLTCTL"),
503*4882a593Smuzhiyun 	PINCTRL_PIN(12, "DBI_CSX"),
504*4882a593Smuzhiyun 	PINCTRL_PIN(13, "DBI_RESX"),
505*4882a593Smuzhiyun 	PINCTRL_PIN(14, "GP_INTD_DSI_TE1"),
506*4882a593Smuzhiyun 	PINCTRL_PIN(15, "GP_INTD_DSI_TE2"),
507*4882a593Smuzhiyun 	PINCTRL_PIN(16, "USB_OC0_B"),
508*4882a593Smuzhiyun 	PINCTRL_PIN(17, "USB_OC1_B"),
509*4882a593Smuzhiyun 	PINCTRL_PIN(18, "MEX_WAKE0_B"),
510*4882a593Smuzhiyun 	PINCTRL_PIN(19, "MEX_WAKE1_B"),
511*4882a593Smuzhiyun };
512*4882a593Smuzhiyun 
513*4882a593Smuzhiyun static const struct intel_community bxt_south_communities[] = {
514*4882a593Smuzhiyun 	BXT_COMMUNITY(0, 19),
515*4882a593Smuzhiyun };
516*4882a593Smuzhiyun 
517*4882a593Smuzhiyun static const struct intel_pinctrl_soc_data bxt_south_soc_data = {
518*4882a593Smuzhiyun 	.uid = "5",
519*4882a593Smuzhiyun 	.pins = bxt_south_pins,
520*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(bxt_south_pins),
521*4882a593Smuzhiyun 	.communities = bxt_south_communities,
522*4882a593Smuzhiyun 	.ncommunities = ARRAY_SIZE(bxt_south_communities),
523*4882a593Smuzhiyun };
524*4882a593Smuzhiyun 
525*4882a593Smuzhiyun static const struct intel_pinctrl_soc_data *bxt_pinctrl_soc_data[] = {
526*4882a593Smuzhiyun 	&bxt_north_soc_data,
527*4882a593Smuzhiyun 	&bxt_northwest_soc_data,
528*4882a593Smuzhiyun 	&bxt_west_soc_data,
529*4882a593Smuzhiyun 	&bxt_southwest_soc_data,
530*4882a593Smuzhiyun 	&bxt_south_soc_data,
531*4882a593Smuzhiyun 	NULL
532*4882a593Smuzhiyun };
533*4882a593Smuzhiyun 
534*4882a593Smuzhiyun /* APL */
535*4882a593Smuzhiyun static const struct pinctrl_pin_desc apl_north_pins[] = {
536*4882a593Smuzhiyun 	PINCTRL_PIN(0, "GPIO_0"),
537*4882a593Smuzhiyun 	PINCTRL_PIN(1, "GPIO_1"),
538*4882a593Smuzhiyun 	PINCTRL_PIN(2, "GPIO_2"),
539*4882a593Smuzhiyun 	PINCTRL_PIN(3, "GPIO_3"),
540*4882a593Smuzhiyun 	PINCTRL_PIN(4, "GPIO_4"),
541*4882a593Smuzhiyun 	PINCTRL_PIN(5, "GPIO_5"),
542*4882a593Smuzhiyun 	PINCTRL_PIN(6, "GPIO_6"),
543*4882a593Smuzhiyun 	PINCTRL_PIN(7, "GPIO_7"),
544*4882a593Smuzhiyun 	PINCTRL_PIN(8, "GPIO_8"),
545*4882a593Smuzhiyun 	PINCTRL_PIN(9, "GPIO_9"),
546*4882a593Smuzhiyun 	PINCTRL_PIN(10, "GPIO_10"),
547*4882a593Smuzhiyun 	PINCTRL_PIN(11, "GPIO_11"),
548*4882a593Smuzhiyun 	PINCTRL_PIN(12, "GPIO_12"),
549*4882a593Smuzhiyun 	PINCTRL_PIN(13, "GPIO_13"),
550*4882a593Smuzhiyun 	PINCTRL_PIN(14, "GPIO_14"),
551*4882a593Smuzhiyun 	PINCTRL_PIN(15, "GPIO_15"),
552*4882a593Smuzhiyun 	PINCTRL_PIN(16, "GPIO_16"),
553*4882a593Smuzhiyun 	PINCTRL_PIN(17, "GPIO_17"),
554*4882a593Smuzhiyun 	PINCTRL_PIN(18, "GPIO_18"),
555*4882a593Smuzhiyun 	PINCTRL_PIN(19, "GPIO_19"),
556*4882a593Smuzhiyun 	PINCTRL_PIN(20, "GPIO_20"),
557*4882a593Smuzhiyun 	PINCTRL_PIN(21, "GPIO_21"),
558*4882a593Smuzhiyun 	PINCTRL_PIN(22, "GPIO_22"),
559*4882a593Smuzhiyun 	PINCTRL_PIN(23, "GPIO_23"),
560*4882a593Smuzhiyun 	PINCTRL_PIN(24, "GPIO_24"),
561*4882a593Smuzhiyun 	PINCTRL_PIN(25, "GPIO_25"),
562*4882a593Smuzhiyun 	PINCTRL_PIN(26, "GPIO_26"),
563*4882a593Smuzhiyun 	PINCTRL_PIN(27, "GPIO_27"),
564*4882a593Smuzhiyun 	PINCTRL_PIN(28, "GPIO_28"),
565*4882a593Smuzhiyun 	PINCTRL_PIN(29, "GPIO_29"),
566*4882a593Smuzhiyun 	PINCTRL_PIN(30, "GPIO_30"),
567*4882a593Smuzhiyun 	PINCTRL_PIN(31, "GPIO_31"),
568*4882a593Smuzhiyun 	PINCTRL_PIN(32, "GPIO_32"),
569*4882a593Smuzhiyun 	PINCTRL_PIN(33, "GPIO_33"),
570*4882a593Smuzhiyun 	PINCTRL_PIN(34, "PWM0"),
571*4882a593Smuzhiyun 	PINCTRL_PIN(35, "PWM1"),
572*4882a593Smuzhiyun 	PINCTRL_PIN(36, "PWM2"),
573*4882a593Smuzhiyun 	PINCTRL_PIN(37, "PWM3"),
574*4882a593Smuzhiyun 	PINCTRL_PIN(38, "LPSS_UART0_RXD"),
575*4882a593Smuzhiyun 	PINCTRL_PIN(39, "LPSS_UART0_TXD"),
576*4882a593Smuzhiyun 	PINCTRL_PIN(40, "LPSS_UART0_RTS_B"),
577*4882a593Smuzhiyun 	PINCTRL_PIN(41, "LPSS_UART0_CTS_B"),
578*4882a593Smuzhiyun 	PINCTRL_PIN(42, "LPSS_UART1_RXD"),
579*4882a593Smuzhiyun 	PINCTRL_PIN(43, "LPSS_UART1_TXD"),
580*4882a593Smuzhiyun 	PINCTRL_PIN(44, "LPSS_UART1_RTS_B"),
581*4882a593Smuzhiyun 	PINCTRL_PIN(45, "LPSS_UART1_CTS_B"),
582*4882a593Smuzhiyun 	PINCTRL_PIN(46, "LPSS_UART2_RXD"),
583*4882a593Smuzhiyun 	PINCTRL_PIN(47, "LPSS_UART2_TXD"),
584*4882a593Smuzhiyun 	PINCTRL_PIN(48, "LPSS_UART2_RTS_B"),
585*4882a593Smuzhiyun 	PINCTRL_PIN(49, "LPSS_UART2_CTS_B"),
586*4882a593Smuzhiyun 	PINCTRL_PIN(50, "GP_CAMERASB00"),
587*4882a593Smuzhiyun 	PINCTRL_PIN(51, "GP_CAMERASB01"),
588*4882a593Smuzhiyun 	PINCTRL_PIN(52, "GP_CAMERASB02"),
589*4882a593Smuzhiyun 	PINCTRL_PIN(53, "GP_CAMERASB03"),
590*4882a593Smuzhiyun 	PINCTRL_PIN(54, "GP_CAMERASB04"),
591*4882a593Smuzhiyun 	PINCTRL_PIN(55, "GP_CAMERASB05"),
592*4882a593Smuzhiyun 	PINCTRL_PIN(56, "GP_CAMERASB06"),
593*4882a593Smuzhiyun 	PINCTRL_PIN(57, "GP_CAMERASB07"),
594*4882a593Smuzhiyun 	PINCTRL_PIN(58, "GP_CAMERASB08"),
595*4882a593Smuzhiyun 	PINCTRL_PIN(59, "GP_CAMERASB09"),
596*4882a593Smuzhiyun 	PINCTRL_PIN(60, "GP_CAMERASB10"),
597*4882a593Smuzhiyun 	PINCTRL_PIN(61, "GP_CAMERASB11"),
598*4882a593Smuzhiyun 	PINCTRL_PIN(62, "TCK"),
599*4882a593Smuzhiyun 	PINCTRL_PIN(63, "TRST_B"),
600*4882a593Smuzhiyun 	PINCTRL_PIN(64, "TMS"),
601*4882a593Smuzhiyun 	PINCTRL_PIN(65, "TDI"),
602*4882a593Smuzhiyun 	PINCTRL_PIN(66, "CX_PMODE"),
603*4882a593Smuzhiyun 	PINCTRL_PIN(67, "CX_PREQ_B"),
604*4882a593Smuzhiyun 	PINCTRL_PIN(68, "JTAGX"),
605*4882a593Smuzhiyun 	PINCTRL_PIN(69, "CX_PRDY_B"),
606*4882a593Smuzhiyun 	PINCTRL_PIN(70, "TDO"),
607*4882a593Smuzhiyun 	PINCTRL_PIN(71, "CNV_BRI_DT"),
608*4882a593Smuzhiyun 	PINCTRL_PIN(72, "CNV_BRI_RSP"),
609*4882a593Smuzhiyun 	PINCTRL_PIN(73, "CNV_RGI_DT"),
610*4882a593Smuzhiyun 	PINCTRL_PIN(74, "CNV_RGI_RSP"),
611*4882a593Smuzhiyun 	PINCTRL_PIN(75, "SVID0_ALERT_B"),
612*4882a593Smuzhiyun 	PINCTRL_PIN(76, "SVID0_DATA"),
613*4882a593Smuzhiyun 	PINCTRL_PIN(77, "SVID0_CLK"),
614*4882a593Smuzhiyun };
615*4882a593Smuzhiyun 
616*4882a593Smuzhiyun static const unsigned int apl_north_pwm0_pins[] = { 34 };
617*4882a593Smuzhiyun static const unsigned int apl_north_pwm1_pins[] = { 35 };
618*4882a593Smuzhiyun static const unsigned int apl_north_pwm2_pins[] = { 36 };
619*4882a593Smuzhiyun static const unsigned int apl_north_pwm3_pins[] = { 37 };
620*4882a593Smuzhiyun static const unsigned int apl_north_uart0_pins[] = { 38, 39, 40, 41 };
621*4882a593Smuzhiyun static const unsigned int apl_north_uart1_pins[] = { 42, 43, 44, 45 };
622*4882a593Smuzhiyun static const unsigned int apl_north_uart2_pins[] = { 46, 47, 48, 49 };
623*4882a593Smuzhiyun 
624*4882a593Smuzhiyun static const struct intel_pingroup apl_north_groups[] = {
625*4882a593Smuzhiyun 	PIN_GROUP("pwm0_grp", apl_north_pwm0_pins, 1),
626*4882a593Smuzhiyun 	PIN_GROUP("pwm1_grp", apl_north_pwm1_pins, 1),
627*4882a593Smuzhiyun 	PIN_GROUP("pwm2_grp", apl_north_pwm2_pins, 1),
628*4882a593Smuzhiyun 	PIN_GROUP("pwm3_grp", apl_north_pwm3_pins, 1),
629*4882a593Smuzhiyun 	PIN_GROUP("uart0_grp", apl_north_uart0_pins, 1),
630*4882a593Smuzhiyun 	PIN_GROUP("uart1_grp", apl_north_uart1_pins, 1),
631*4882a593Smuzhiyun 	PIN_GROUP("uart2_grp", apl_north_uart2_pins, 1),
632*4882a593Smuzhiyun };
633*4882a593Smuzhiyun 
634*4882a593Smuzhiyun static const char * const apl_north_pwm0_groups[] = { "pwm0_grp" };
635*4882a593Smuzhiyun static const char * const apl_north_pwm1_groups[] = { "pwm1_grp" };
636*4882a593Smuzhiyun static const char * const apl_north_pwm2_groups[] = { "pwm2_grp" };
637*4882a593Smuzhiyun static const char * const apl_north_pwm3_groups[] = { "pwm3_grp" };
638*4882a593Smuzhiyun static const char * const apl_north_uart0_groups[] = { "uart0_grp" };
639*4882a593Smuzhiyun static const char * const apl_north_uart1_groups[] = { "uart1_grp" };
640*4882a593Smuzhiyun static const char * const apl_north_uart2_groups[] = { "uart2_grp" };
641*4882a593Smuzhiyun 
642*4882a593Smuzhiyun static const struct intel_function apl_north_functions[] = {
643*4882a593Smuzhiyun 	FUNCTION("pwm0", apl_north_pwm0_groups),
644*4882a593Smuzhiyun 	FUNCTION("pwm1", apl_north_pwm1_groups),
645*4882a593Smuzhiyun 	FUNCTION("pwm2", apl_north_pwm2_groups),
646*4882a593Smuzhiyun 	FUNCTION("pwm3", apl_north_pwm3_groups),
647*4882a593Smuzhiyun 	FUNCTION("uart0", apl_north_uart0_groups),
648*4882a593Smuzhiyun 	FUNCTION("uart1", apl_north_uart1_groups),
649*4882a593Smuzhiyun 	FUNCTION("uart2", apl_north_uart2_groups),
650*4882a593Smuzhiyun };
651*4882a593Smuzhiyun 
652*4882a593Smuzhiyun static const struct intel_community apl_north_communities[] = {
653*4882a593Smuzhiyun 	BXT_COMMUNITY(0, 77),
654*4882a593Smuzhiyun };
655*4882a593Smuzhiyun 
656*4882a593Smuzhiyun static const struct intel_pinctrl_soc_data apl_north_soc_data = {
657*4882a593Smuzhiyun 	.uid = "1",
658*4882a593Smuzhiyun 	.pins = apl_north_pins,
659*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(apl_north_pins),
660*4882a593Smuzhiyun 	.groups = apl_north_groups,
661*4882a593Smuzhiyun 	.ngroups = ARRAY_SIZE(apl_north_groups),
662*4882a593Smuzhiyun 	.functions = apl_north_functions,
663*4882a593Smuzhiyun 	.nfunctions = ARRAY_SIZE(apl_north_functions),
664*4882a593Smuzhiyun 	.communities = apl_north_communities,
665*4882a593Smuzhiyun 	.ncommunities = ARRAY_SIZE(apl_north_communities),
666*4882a593Smuzhiyun };
667*4882a593Smuzhiyun 
668*4882a593Smuzhiyun static const struct pinctrl_pin_desc apl_northwest_pins[] = {
669*4882a593Smuzhiyun 	PINCTRL_PIN(0, "HV_DDI0_DDC_SDA"),
670*4882a593Smuzhiyun 	PINCTRL_PIN(1, "HV_DDI0_DDC_SCL"),
671*4882a593Smuzhiyun 	PINCTRL_PIN(2, "HV_DDI1_DDC_SDA"),
672*4882a593Smuzhiyun 	PINCTRL_PIN(3, "HV_DDI1_DDC_SCL"),
673*4882a593Smuzhiyun 	PINCTRL_PIN(4, "DBI_SDA"),
674*4882a593Smuzhiyun 	PINCTRL_PIN(5, "DBI_SCL"),
675*4882a593Smuzhiyun 	PINCTRL_PIN(6, "PANEL0_VDDEN"),
676*4882a593Smuzhiyun 	PINCTRL_PIN(7, "PANEL0_BKLTEN"),
677*4882a593Smuzhiyun 	PINCTRL_PIN(8, "PANEL0_BKLTCTL"),
678*4882a593Smuzhiyun 	PINCTRL_PIN(9, "PANEL1_VDDEN"),
679*4882a593Smuzhiyun 	PINCTRL_PIN(10, "PANEL1_BKLTEN"),
680*4882a593Smuzhiyun 	PINCTRL_PIN(11, "PANEL1_BKLTCTL"),
681*4882a593Smuzhiyun 	PINCTRL_PIN(12, "DBI_CSX"),
682*4882a593Smuzhiyun 	PINCTRL_PIN(13, "DBI_RESX"),
683*4882a593Smuzhiyun 	PINCTRL_PIN(14, "GP_INTD_DSI_TE1"),
684*4882a593Smuzhiyun 	PINCTRL_PIN(15, "GP_INTD_DSI_TE2"),
685*4882a593Smuzhiyun 	PINCTRL_PIN(16, "USB_OC0_B"),
686*4882a593Smuzhiyun 	PINCTRL_PIN(17, "USB_OC1_B"),
687*4882a593Smuzhiyun 	PINCTRL_PIN(18, "PMC_SPI_FS0"),
688*4882a593Smuzhiyun 	PINCTRL_PIN(19, "PMC_SPI_FS1"),
689*4882a593Smuzhiyun 	PINCTRL_PIN(20, "PMC_SPI_FS2"),
690*4882a593Smuzhiyun 	PINCTRL_PIN(21, "PMC_SPI_RXD"),
691*4882a593Smuzhiyun 	PINCTRL_PIN(22, "PMC_SPI_TXD"),
692*4882a593Smuzhiyun 	PINCTRL_PIN(23, "PMC_SPI_CLK"),
693*4882a593Smuzhiyun 	PINCTRL_PIN(24, "PMIC_PWRGOOD"),
694*4882a593Smuzhiyun 	PINCTRL_PIN(25, "PMIC_RESET_B"),
695*4882a593Smuzhiyun 	PINCTRL_PIN(26, "PMIC_SDWN_B"),
696*4882a593Smuzhiyun 	PINCTRL_PIN(27, "PMIC_BCUDISW2"),
697*4882a593Smuzhiyun 	PINCTRL_PIN(28, "PMIC_BCUDISCRIT"),
698*4882a593Smuzhiyun 	PINCTRL_PIN(29, "PMIC_THERMTRIP_B"),
699*4882a593Smuzhiyun 	PINCTRL_PIN(30, "PMIC_STDBY"),
700*4882a593Smuzhiyun 	PINCTRL_PIN(31, "PROCHOT_B"),
701*4882a593Smuzhiyun 	PINCTRL_PIN(32, "PMIC_I2C_SCL"),
702*4882a593Smuzhiyun 	PINCTRL_PIN(33, "PMIC_I2C_SDA"),
703*4882a593Smuzhiyun 	PINCTRL_PIN(34, "AVS_I2S1_MCLK"),
704*4882a593Smuzhiyun 	PINCTRL_PIN(35, "AVS_I2S1_BCLK"),
705*4882a593Smuzhiyun 	PINCTRL_PIN(36, "AVS_I2S1_WS_SYNC"),
706*4882a593Smuzhiyun 	PINCTRL_PIN(37, "AVS_I2S1_SDI"),
707*4882a593Smuzhiyun 	PINCTRL_PIN(38, "AVS_I2S1_SDO"),
708*4882a593Smuzhiyun 	PINCTRL_PIN(39, "AVS_M_CLK_A1"),
709*4882a593Smuzhiyun 	PINCTRL_PIN(40, "AVS_M_CLK_B1"),
710*4882a593Smuzhiyun 	PINCTRL_PIN(41, "AVS_M_DATA_1"),
711*4882a593Smuzhiyun 	PINCTRL_PIN(42, "AVS_M_CLK_AB2"),
712*4882a593Smuzhiyun 	PINCTRL_PIN(43, "AVS_M_DATA_2"),
713*4882a593Smuzhiyun 	PINCTRL_PIN(44, "AVS_I2S2_MCLK"),
714*4882a593Smuzhiyun 	PINCTRL_PIN(45, "AVS_I2S2_BCLK"),
715*4882a593Smuzhiyun 	PINCTRL_PIN(46, "AVS_I2S2_WS_SYNC"),
716*4882a593Smuzhiyun 	PINCTRL_PIN(47, "AVS_I2S2_SDI"),
717*4882a593Smuzhiyun 	PINCTRL_PIN(48, "AVS_I2S2_SDO"),
718*4882a593Smuzhiyun 	PINCTRL_PIN(49, "AVS_I2S3_BCLK"),
719*4882a593Smuzhiyun 	PINCTRL_PIN(50, "AVS_I2S3_WS_SYNC"),
720*4882a593Smuzhiyun 	PINCTRL_PIN(51, "AVS_I2S3_SDI"),
721*4882a593Smuzhiyun 	PINCTRL_PIN(52, "AVS_I2S3_SDO"),
722*4882a593Smuzhiyun 	PINCTRL_PIN(53, "FST_SPI_CS0_B"),
723*4882a593Smuzhiyun 	PINCTRL_PIN(54, "FST_SPI_CS1_B"),
724*4882a593Smuzhiyun 	PINCTRL_PIN(55, "FST_SPI_MOSI_IO0"),
725*4882a593Smuzhiyun 	PINCTRL_PIN(56, "FST_SPI_MISO_IO1"),
726*4882a593Smuzhiyun 	PINCTRL_PIN(57, "FST_SPI_IO2"),
727*4882a593Smuzhiyun 	PINCTRL_PIN(58, "FST_SPI_IO3"),
728*4882a593Smuzhiyun 	PINCTRL_PIN(59, "FST_SPI_CLK"),
729*4882a593Smuzhiyun 	PINCTRL_PIN(60, "FST_SPI_CLK_FB"),
730*4882a593Smuzhiyun 	PINCTRL_PIN(61, "GP_SSP_0_CLK"),
731*4882a593Smuzhiyun 	PINCTRL_PIN(62, "GP_SSP_0_FS0"),
732*4882a593Smuzhiyun 	PINCTRL_PIN(63, "GP_SSP_0_FS1"),
733*4882a593Smuzhiyun 	PINCTRL_PIN(64, "GP_SSP_0_RXD"),
734*4882a593Smuzhiyun 	PINCTRL_PIN(65, "GP_SSP_0_TXD"),
735*4882a593Smuzhiyun 	PINCTRL_PIN(66, "GP_SSP_1_CLK"),
736*4882a593Smuzhiyun 	PINCTRL_PIN(67, "GP_SSP_1_FS0"),
737*4882a593Smuzhiyun 	PINCTRL_PIN(68, "GP_SSP_1_FS1"),
738*4882a593Smuzhiyun 	PINCTRL_PIN(69, "GP_SSP_1_RXD"),
739*4882a593Smuzhiyun 	PINCTRL_PIN(70, "GP_SSP_1_TXD"),
740*4882a593Smuzhiyun 	PINCTRL_PIN(71, "GP_SSP_2_CLK"),
741*4882a593Smuzhiyun 	PINCTRL_PIN(72, "GP_SSP_2_FS0"),
742*4882a593Smuzhiyun 	PINCTRL_PIN(73, "GP_SSP_2_FS1"),
743*4882a593Smuzhiyun 	PINCTRL_PIN(74, "GP_SSP_2_FS2"),
744*4882a593Smuzhiyun 	PINCTRL_PIN(75, "GP_SSP_2_RXD"),
745*4882a593Smuzhiyun 	PINCTRL_PIN(76, "GP_SSP_2_TXD"),
746*4882a593Smuzhiyun };
747*4882a593Smuzhiyun 
748*4882a593Smuzhiyun static const unsigned int apl_northwest_ssp0_pins[] = { 61, 62, 63, 64, 65 };
749*4882a593Smuzhiyun static const unsigned int apl_northwest_ssp1_pins[] = { 66, 67, 68, 69, 70 };
750*4882a593Smuzhiyun static const unsigned int apl_northwest_ssp2_pins[] = { 71, 72, 73, 74, 75, 76 };
751*4882a593Smuzhiyun static const unsigned int apl_northwest_uart3_pins[] = { 67, 68, 69, 70 };
752*4882a593Smuzhiyun 
753*4882a593Smuzhiyun static const struct intel_pingroup apl_northwest_groups[] = {
754*4882a593Smuzhiyun 	PIN_GROUP("ssp0_grp", apl_northwest_ssp0_pins, 1),
755*4882a593Smuzhiyun 	PIN_GROUP("ssp1_grp", apl_northwest_ssp1_pins, 1),
756*4882a593Smuzhiyun 	PIN_GROUP("ssp2_grp", apl_northwest_ssp2_pins, 1),
757*4882a593Smuzhiyun 	PIN_GROUP("uart3_grp", apl_northwest_uart3_pins, 2),
758*4882a593Smuzhiyun };
759*4882a593Smuzhiyun 
760*4882a593Smuzhiyun static const char * const apl_northwest_ssp0_groups[] = { "ssp0_grp" };
761*4882a593Smuzhiyun static const char * const apl_northwest_ssp1_groups[] = { "ssp1_grp" };
762*4882a593Smuzhiyun static const char * const apl_northwest_ssp2_groups[] = { "ssp2_grp" };
763*4882a593Smuzhiyun static const char * const apl_northwest_uart3_groups[] = { "uart3_grp" };
764*4882a593Smuzhiyun 
765*4882a593Smuzhiyun static const struct intel_function apl_northwest_functions[] = {
766*4882a593Smuzhiyun 	FUNCTION("ssp0", apl_northwest_ssp0_groups),
767*4882a593Smuzhiyun 	FUNCTION("ssp1", apl_northwest_ssp1_groups),
768*4882a593Smuzhiyun 	FUNCTION("ssp2", apl_northwest_ssp2_groups),
769*4882a593Smuzhiyun 	FUNCTION("uart3", apl_northwest_uart3_groups),
770*4882a593Smuzhiyun };
771*4882a593Smuzhiyun 
772*4882a593Smuzhiyun static const struct intel_community apl_northwest_communities[] = {
773*4882a593Smuzhiyun 	BXT_COMMUNITY(0, 76),
774*4882a593Smuzhiyun };
775*4882a593Smuzhiyun 
776*4882a593Smuzhiyun static const struct intel_pinctrl_soc_data apl_northwest_soc_data = {
777*4882a593Smuzhiyun 	.uid = "2",
778*4882a593Smuzhiyun 	.pins = apl_northwest_pins,
779*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(apl_northwest_pins),
780*4882a593Smuzhiyun 	.groups = apl_northwest_groups,
781*4882a593Smuzhiyun 	.ngroups = ARRAY_SIZE(apl_northwest_groups),
782*4882a593Smuzhiyun 	.functions = apl_northwest_functions,
783*4882a593Smuzhiyun 	.nfunctions = ARRAY_SIZE(apl_northwest_functions),
784*4882a593Smuzhiyun 	.communities = apl_northwest_communities,
785*4882a593Smuzhiyun 	.ncommunities = ARRAY_SIZE(apl_northwest_communities),
786*4882a593Smuzhiyun };
787*4882a593Smuzhiyun 
788*4882a593Smuzhiyun static const struct pinctrl_pin_desc apl_west_pins[] = {
789*4882a593Smuzhiyun 	PINCTRL_PIN(0, "LPSS_I2C0_SDA"),
790*4882a593Smuzhiyun 	PINCTRL_PIN(1, "LPSS_I2C0_SCL"),
791*4882a593Smuzhiyun 	PINCTRL_PIN(2, "LPSS_I2C1_SDA"),
792*4882a593Smuzhiyun 	PINCTRL_PIN(3, "LPSS_I2C1_SCL"),
793*4882a593Smuzhiyun 	PINCTRL_PIN(4, "LPSS_I2C2_SDA"),
794*4882a593Smuzhiyun 	PINCTRL_PIN(5, "LPSS_I2C2_SCL"),
795*4882a593Smuzhiyun 	PINCTRL_PIN(6, "LPSS_I2C3_SDA"),
796*4882a593Smuzhiyun 	PINCTRL_PIN(7, "LPSS_I2C3_SCL"),
797*4882a593Smuzhiyun 	PINCTRL_PIN(8, "LPSS_I2C4_SDA"),
798*4882a593Smuzhiyun 	PINCTRL_PIN(9, "LPSS_I2C4_SCL"),
799*4882a593Smuzhiyun 	PINCTRL_PIN(10, "LPSS_I2C5_SDA"),
800*4882a593Smuzhiyun 	PINCTRL_PIN(11, "LPSS_I2C5_SCL"),
801*4882a593Smuzhiyun 	PINCTRL_PIN(12, "LPSS_I2C6_SDA"),
802*4882a593Smuzhiyun 	PINCTRL_PIN(13, "LPSS_I2C6_SCL"),
803*4882a593Smuzhiyun 	PINCTRL_PIN(14, "LPSS_I2C7_SDA"),
804*4882a593Smuzhiyun 	PINCTRL_PIN(15, "LPSS_I2C7_SCL"),
805*4882a593Smuzhiyun 	PINCTRL_PIN(16, "ISH_GPIO_0"),
806*4882a593Smuzhiyun 	PINCTRL_PIN(17, "ISH_GPIO_1"),
807*4882a593Smuzhiyun 	PINCTRL_PIN(18, "ISH_GPIO_2"),
808*4882a593Smuzhiyun 	PINCTRL_PIN(19, "ISH_GPIO_3"),
809*4882a593Smuzhiyun 	PINCTRL_PIN(20, "ISH_GPIO_4"),
810*4882a593Smuzhiyun 	PINCTRL_PIN(21, "ISH_GPIO_5"),
811*4882a593Smuzhiyun 	PINCTRL_PIN(22, "ISH_GPIO_6"),
812*4882a593Smuzhiyun 	PINCTRL_PIN(23, "ISH_GPIO_7"),
813*4882a593Smuzhiyun 	PINCTRL_PIN(24, "ISH_GPIO_8"),
814*4882a593Smuzhiyun 	PINCTRL_PIN(25, "ISH_GPIO_9"),
815*4882a593Smuzhiyun 	PINCTRL_PIN(26, "PCIE_CLKREQ0_B"),
816*4882a593Smuzhiyun 	PINCTRL_PIN(27, "PCIE_CLKREQ1_B"),
817*4882a593Smuzhiyun 	PINCTRL_PIN(28, "PCIE_CLKREQ2_B"),
818*4882a593Smuzhiyun 	PINCTRL_PIN(29, "PCIE_CLKREQ3_B"),
819*4882a593Smuzhiyun 	PINCTRL_PIN(30, "OSC_CLK_OUT_0"),
820*4882a593Smuzhiyun 	PINCTRL_PIN(31, "OSC_CLK_OUT_1"),
821*4882a593Smuzhiyun 	PINCTRL_PIN(32, "OSC_CLK_OUT_2"),
822*4882a593Smuzhiyun 	PINCTRL_PIN(33, "OSC_CLK_OUT_3"),
823*4882a593Smuzhiyun 	PINCTRL_PIN(34, "OSC_CLK_OUT_4"),
824*4882a593Smuzhiyun 	PINCTRL_PIN(35, "PMU_AC_PRESENT"),
825*4882a593Smuzhiyun 	PINCTRL_PIN(36, "PMU_BATLOW_B"),
826*4882a593Smuzhiyun 	PINCTRL_PIN(37, "PMU_PLTRST_B"),
827*4882a593Smuzhiyun 	PINCTRL_PIN(38, "PMU_PWRBTN_B"),
828*4882a593Smuzhiyun 	PINCTRL_PIN(39, "PMU_RESETBUTTON_B"),
829*4882a593Smuzhiyun 	PINCTRL_PIN(40, "PMU_SLP_S0_B"),
830*4882a593Smuzhiyun 	PINCTRL_PIN(41, "PMU_SLP_S3_B"),
831*4882a593Smuzhiyun 	PINCTRL_PIN(42, "PMU_SLP_S4_B"),
832*4882a593Smuzhiyun 	PINCTRL_PIN(43, "PMU_SUSCLK"),
833*4882a593Smuzhiyun 	PINCTRL_PIN(44, "PMU_WAKE_B"),
834*4882a593Smuzhiyun 	PINCTRL_PIN(45, "SUS_STAT_B"),
835*4882a593Smuzhiyun 	PINCTRL_PIN(46, "SUSPWRDNACK"),
836*4882a593Smuzhiyun };
837*4882a593Smuzhiyun 
838*4882a593Smuzhiyun static const unsigned int apl_west_i2c0_pins[] = { 0, 1 };
839*4882a593Smuzhiyun static const unsigned int apl_west_i2c1_pins[] = { 2, 3 };
840*4882a593Smuzhiyun static const unsigned int apl_west_i2c2_pins[] = { 4, 5 };
841*4882a593Smuzhiyun static const unsigned int apl_west_i2c3_pins[] = { 6, 7 };
842*4882a593Smuzhiyun static const unsigned int apl_west_i2c4_pins[] = { 8, 9 };
843*4882a593Smuzhiyun static const unsigned int apl_west_i2c5_pins[] = { 10, 11 };
844*4882a593Smuzhiyun static const unsigned int apl_west_i2c6_pins[] = { 12, 13 };
845*4882a593Smuzhiyun static const unsigned int apl_west_i2c7_pins[] = { 14, 15 };
846*4882a593Smuzhiyun static const unsigned int apl_west_uart2_pins[] = { 20, 21, 22, 34 };
847*4882a593Smuzhiyun 
848*4882a593Smuzhiyun static const struct intel_pingroup apl_west_groups[] = {
849*4882a593Smuzhiyun 	PIN_GROUP("i2c0_grp", apl_west_i2c0_pins, 1),
850*4882a593Smuzhiyun 	PIN_GROUP("i2c1_grp", apl_west_i2c1_pins, 1),
851*4882a593Smuzhiyun 	PIN_GROUP("i2c2_grp", apl_west_i2c2_pins, 1),
852*4882a593Smuzhiyun 	PIN_GROUP("i2c3_grp", apl_west_i2c3_pins, 1),
853*4882a593Smuzhiyun 	PIN_GROUP("i2c4_grp", apl_west_i2c4_pins, 1),
854*4882a593Smuzhiyun 	PIN_GROUP("i2c5_grp", apl_west_i2c5_pins, 1),
855*4882a593Smuzhiyun 	PIN_GROUP("i2c6_grp", apl_west_i2c6_pins, 1),
856*4882a593Smuzhiyun 	PIN_GROUP("i2c7_grp", apl_west_i2c7_pins, 1),
857*4882a593Smuzhiyun 	PIN_GROUP("uart2_grp", apl_west_uart2_pins, 3),
858*4882a593Smuzhiyun };
859*4882a593Smuzhiyun 
860*4882a593Smuzhiyun static const char * const apl_west_i2c0_groups[] = { "i2c0_grp" };
861*4882a593Smuzhiyun static const char * const apl_west_i2c1_groups[] = { "i2c1_grp" };
862*4882a593Smuzhiyun static const char * const apl_west_i2c2_groups[] = { "i2c2_grp" };
863*4882a593Smuzhiyun static const char * const apl_west_i2c3_groups[] = { "i2c3_grp" };
864*4882a593Smuzhiyun static const char * const apl_west_i2c4_groups[] = { "i2c4_grp" };
865*4882a593Smuzhiyun static const char * const apl_west_i2c5_groups[] = { "i2c5_grp" };
866*4882a593Smuzhiyun static const char * const apl_west_i2c6_groups[] = { "i2c6_grp" };
867*4882a593Smuzhiyun static const char * const apl_west_i2c7_groups[] = { "i2c7_grp" };
868*4882a593Smuzhiyun static const char * const apl_west_uart2_groups[] = { "uart2_grp" };
869*4882a593Smuzhiyun 
870*4882a593Smuzhiyun static const struct intel_function apl_west_functions[] = {
871*4882a593Smuzhiyun 	FUNCTION("i2c0", apl_west_i2c0_groups),
872*4882a593Smuzhiyun 	FUNCTION("i2c1", apl_west_i2c1_groups),
873*4882a593Smuzhiyun 	FUNCTION("i2c2", apl_west_i2c2_groups),
874*4882a593Smuzhiyun 	FUNCTION("i2c3", apl_west_i2c3_groups),
875*4882a593Smuzhiyun 	FUNCTION("i2c4", apl_west_i2c4_groups),
876*4882a593Smuzhiyun 	FUNCTION("i2c5", apl_west_i2c5_groups),
877*4882a593Smuzhiyun 	FUNCTION("i2c6", apl_west_i2c6_groups),
878*4882a593Smuzhiyun 	FUNCTION("i2c7", apl_west_i2c7_groups),
879*4882a593Smuzhiyun 	FUNCTION("uart2", apl_west_uart2_groups),
880*4882a593Smuzhiyun };
881*4882a593Smuzhiyun 
882*4882a593Smuzhiyun static const struct intel_community apl_west_communities[] = {
883*4882a593Smuzhiyun 	BXT_COMMUNITY(0, 46),
884*4882a593Smuzhiyun };
885*4882a593Smuzhiyun 
886*4882a593Smuzhiyun static const struct intel_pinctrl_soc_data apl_west_soc_data = {
887*4882a593Smuzhiyun 	.uid = "3",
888*4882a593Smuzhiyun 	.pins = apl_west_pins,
889*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(apl_west_pins),
890*4882a593Smuzhiyun 	.groups = apl_west_groups,
891*4882a593Smuzhiyun 	.ngroups = ARRAY_SIZE(apl_west_groups),
892*4882a593Smuzhiyun 	.functions = apl_west_functions,
893*4882a593Smuzhiyun 	.nfunctions = ARRAY_SIZE(apl_west_functions),
894*4882a593Smuzhiyun 	.communities = apl_west_communities,
895*4882a593Smuzhiyun 	.ncommunities = ARRAY_SIZE(apl_west_communities),
896*4882a593Smuzhiyun };
897*4882a593Smuzhiyun 
898*4882a593Smuzhiyun static const struct pinctrl_pin_desc apl_southwest_pins[] = {
899*4882a593Smuzhiyun 	PINCTRL_PIN(0, "PCIE_WAKE0_B"),
900*4882a593Smuzhiyun 	PINCTRL_PIN(1, "PCIE_WAKE1_B"),
901*4882a593Smuzhiyun 	PINCTRL_PIN(2, "PCIE_WAKE2_B"),
902*4882a593Smuzhiyun 	PINCTRL_PIN(3, "PCIE_WAKE3_B"),
903*4882a593Smuzhiyun 	PINCTRL_PIN(4, "EMMC0_CLK"),
904*4882a593Smuzhiyun 	PINCTRL_PIN(5, "EMMC0_D0"),
905*4882a593Smuzhiyun 	PINCTRL_PIN(6, "EMMC0_D1"),
906*4882a593Smuzhiyun 	PINCTRL_PIN(7, "EMMC0_D2"),
907*4882a593Smuzhiyun 	PINCTRL_PIN(8, "EMMC0_D3"),
908*4882a593Smuzhiyun 	PINCTRL_PIN(9, "EMMC0_D4"),
909*4882a593Smuzhiyun 	PINCTRL_PIN(10, "EMMC0_D5"),
910*4882a593Smuzhiyun 	PINCTRL_PIN(11, "EMMC0_D6"),
911*4882a593Smuzhiyun 	PINCTRL_PIN(12, "EMMC0_D7"),
912*4882a593Smuzhiyun 	PINCTRL_PIN(13, "EMMC0_CMD"),
913*4882a593Smuzhiyun 	PINCTRL_PIN(14, "SDIO_CLK"),
914*4882a593Smuzhiyun 	PINCTRL_PIN(15, "SDIO_D0"),
915*4882a593Smuzhiyun 	PINCTRL_PIN(16, "SDIO_D1"),
916*4882a593Smuzhiyun 	PINCTRL_PIN(17, "SDIO_D2"),
917*4882a593Smuzhiyun 	PINCTRL_PIN(18, "SDIO_D3"),
918*4882a593Smuzhiyun 	PINCTRL_PIN(19, "SDIO_CMD"),
919*4882a593Smuzhiyun 	PINCTRL_PIN(20, "SDCARD_CLK"),
920*4882a593Smuzhiyun 	PINCTRL_PIN(21, "SDCARD_CLK_FB"),
921*4882a593Smuzhiyun 	PINCTRL_PIN(22, "SDCARD_D0"),
922*4882a593Smuzhiyun 	PINCTRL_PIN(23, "SDCARD_D1"),
923*4882a593Smuzhiyun 	PINCTRL_PIN(24, "SDCARD_D2"),
924*4882a593Smuzhiyun 	PINCTRL_PIN(25, "SDCARD_D3"),
925*4882a593Smuzhiyun 	PINCTRL_PIN(26, "SDCARD_CD_B"),
926*4882a593Smuzhiyun 	PINCTRL_PIN(27, "SDCARD_CMD"),
927*4882a593Smuzhiyun 	PINCTRL_PIN(28, "SDCARD_LVL_WP"),
928*4882a593Smuzhiyun 	PINCTRL_PIN(29, "EMMC0_STROBE"),
929*4882a593Smuzhiyun 	PINCTRL_PIN(30, "SDIO_PWR_DOWN_B"),
930*4882a593Smuzhiyun 	PINCTRL_PIN(31, "SMB_ALERTB"),
931*4882a593Smuzhiyun 	PINCTRL_PIN(32, "SMB_CLK"),
932*4882a593Smuzhiyun 	PINCTRL_PIN(33, "SMB_DATA"),
933*4882a593Smuzhiyun 	PINCTRL_PIN(34, "LPC_ILB_SERIRQ"),
934*4882a593Smuzhiyun 	PINCTRL_PIN(35, "LPC_CLKOUT0"),
935*4882a593Smuzhiyun 	PINCTRL_PIN(36, "LPC_CLKOUT1"),
936*4882a593Smuzhiyun 	PINCTRL_PIN(37, "LPC_AD0"),
937*4882a593Smuzhiyun 	PINCTRL_PIN(38, "LPC_AD1"),
938*4882a593Smuzhiyun 	PINCTRL_PIN(39, "LPC_AD2"),
939*4882a593Smuzhiyun 	PINCTRL_PIN(40, "LPC_AD3"),
940*4882a593Smuzhiyun 	PINCTRL_PIN(41, "LPC_CLKRUNB"),
941*4882a593Smuzhiyun 	PINCTRL_PIN(42, "LPC_FRAMEB"),
942*4882a593Smuzhiyun };
943*4882a593Smuzhiyun 
944*4882a593Smuzhiyun static const unsigned int apl_southwest_emmc0_pins[] = {
945*4882a593Smuzhiyun 	4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 29,
946*4882a593Smuzhiyun };
947*4882a593Smuzhiyun static const unsigned int apl_southwest_sdio_pins[] = {
948*4882a593Smuzhiyun 	14, 15, 16, 17, 18, 19, 30,
949*4882a593Smuzhiyun };
950*4882a593Smuzhiyun static const unsigned int apl_southwest_sdcard_pins[] = {
951*4882a593Smuzhiyun 	20, 21, 22, 23, 24, 25, 26, 27, 28,
952*4882a593Smuzhiyun };
953*4882a593Smuzhiyun static const unsigned int apl_southwest_i2c7_pins[] = { 32, 33 };
954*4882a593Smuzhiyun 
955*4882a593Smuzhiyun static const struct intel_pingroup apl_southwest_groups[] = {
956*4882a593Smuzhiyun 	PIN_GROUP("emmc0_grp", apl_southwest_emmc0_pins, 1),
957*4882a593Smuzhiyun 	PIN_GROUP("sdio_grp", apl_southwest_sdio_pins, 1),
958*4882a593Smuzhiyun 	PIN_GROUP("sdcard_grp", apl_southwest_sdcard_pins, 1),
959*4882a593Smuzhiyun 	PIN_GROUP("i2c7_grp", apl_southwest_i2c7_pins, 2),
960*4882a593Smuzhiyun };
961*4882a593Smuzhiyun 
962*4882a593Smuzhiyun static const char * const apl_southwest_emmc0_groups[] = { "emmc0_grp" };
963*4882a593Smuzhiyun static const char * const apl_southwest_sdio_groups[] = { "sdio_grp" };
964*4882a593Smuzhiyun static const char * const apl_southwest_sdcard_groups[] = { "sdcard_grp" };
965*4882a593Smuzhiyun static const char * const apl_southwest_i2c7_groups[] = { "i2c7_grp" };
966*4882a593Smuzhiyun 
967*4882a593Smuzhiyun static const struct intel_function apl_southwest_functions[] = {
968*4882a593Smuzhiyun 	FUNCTION("emmc0", apl_southwest_emmc0_groups),
969*4882a593Smuzhiyun 	FUNCTION("sdio", apl_southwest_sdio_groups),
970*4882a593Smuzhiyun 	FUNCTION("sdcard", apl_southwest_sdcard_groups),
971*4882a593Smuzhiyun 	FUNCTION("i2c7", apl_southwest_i2c7_groups),
972*4882a593Smuzhiyun };
973*4882a593Smuzhiyun 
974*4882a593Smuzhiyun static const struct intel_community apl_southwest_communities[] = {
975*4882a593Smuzhiyun 	BXT_COMMUNITY(0, 42),
976*4882a593Smuzhiyun };
977*4882a593Smuzhiyun 
978*4882a593Smuzhiyun static const struct intel_pinctrl_soc_data apl_southwest_soc_data = {
979*4882a593Smuzhiyun 	.uid = "4",
980*4882a593Smuzhiyun 	.pins = apl_southwest_pins,
981*4882a593Smuzhiyun 	.npins = ARRAY_SIZE(apl_southwest_pins),
982*4882a593Smuzhiyun 	.groups = apl_southwest_groups,
983*4882a593Smuzhiyun 	.ngroups = ARRAY_SIZE(apl_southwest_groups),
984*4882a593Smuzhiyun 	.functions = apl_southwest_functions,
985*4882a593Smuzhiyun 	.nfunctions = ARRAY_SIZE(apl_southwest_functions),
986*4882a593Smuzhiyun 	.communities = apl_southwest_communities,
987*4882a593Smuzhiyun 	.ncommunities = ARRAY_SIZE(apl_southwest_communities),
988*4882a593Smuzhiyun };
989*4882a593Smuzhiyun 
990*4882a593Smuzhiyun static const struct intel_pinctrl_soc_data *apl_pinctrl_soc_data[] = {
991*4882a593Smuzhiyun 	&apl_north_soc_data,
992*4882a593Smuzhiyun 	&apl_northwest_soc_data,
993*4882a593Smuzhiyun 	&apl_west_soc_data,
994*4882a593Smuzhiyun 	&apl_southwest_soc_data,
995*4882a593Smuzhiyun 	NULL
996*4882a593Smuzhiyun };
997*4882a593Smuzhiyun 
998*4882a593Smuzhiyun static const struct acpi_device_id bxt_pinctrl_acpi_match[] = {
999*4882a593Smuzhiyun 	{ "INT3452", (kernel_ulong_t)apl_pinctrl_soc_data },
1000*4882a593Smuzhiyun 	{ "INT34D1", (kernel_ulong_t)bxt_pinctrl_soc_data },
1001*4882a593Smuzhiyun 	{ }
1002*4882a593Smuzhiyun };
1003*4882a593Smuzhiyun MODULE_DEVICE_TABLE(acpi, bxt_pinctrl_acpi_match);
1004*4882a593Smuzhiyun 
1005*4882a593Smuzhiyun static const struct platform_device_id bxt_pinctrl_platform_ids[] = {
1006*4882a593Smuzhiyun 	{ "apollolake-pinctrl", (kernel_ulong_t)apl_pinctrl_soc_data },
1007*4882a593Smuzhiyun 	{ "broxton-pinctrl", (kernel_ulong_t)bxt_pinctrl_soc_data },
1008*4882a593Smuzhiyun 	{ }
1009*4882a593Smuzhiyun };
1010*4882a593Smuzhiyun 
1011*4882a593Smuzhiyun static INTEL_PINCTRL_PM_OPS(bxt_pinctrl_pm_ops);
1012*4882a593Smuzhiyun 
1013*4882a593Smuzhiyun static struct platform_driver bxt_pinctrl_driver = {
1014*4882a593Smuzhiyun 	.probe = intel_pinctrl_probe_by_uid,
1015*4882a593Smuzhiyun 	.driver = {
1016*4882a593Smuzhiyun 		.name = "broxton-pinctrl",
1017*4882a593Smuzhiyun 		.acpi_match_table = bxt_pinctrl_acpi_match,
1018*4882a593Smuzhiyun 		.pm = &bxt_pinctrl_pm_ops,
1019*4882a593Smuzhiyun 	},
1020*4882a593Smuzhiyun 	.id_table = bxt_pinctrl_platform_ids,
1021*4882a593Smuzhiyun };
1022*4882a593Smuzhiyun 
bxt_pinctrl_init(void)1023*4882a593Smuzhiyun static int __init bxt_pinctrl_init(void)
1024*4882a593Smuzhiyun {
1025*4882a593Smuzhiyun 	return platform_driver_register(&bxt_pinctrl_driver);
1026*4882a593Smuzhiyun }
1027*4882a593Smuzhiyun subsys_initcall(bxt_pinctrl_init);
1028*4882a593Smuzhiyun 
bxt_pinctrl_exit(void)1029*4882a593Smuzhiyun static void __exit bxt_pinctrl_exit(void)
1030*4882a593Smuzhiyun {
1031*4882a593Smuzhiyun 	platform_driver_unregister(&bxt_pinctrl_driver);
1032*4882a593Smuzhiyun }
1033*4882a593Smuzhiyun module_exit(bxt_pinctrl_exit);
1034*4882a593Smuzhiyun 
1035*4882a593Smuzhiyun MODULE_AUTHOR("Mika Westerberg <mika.westerberg@linux.intel.com>");
1036*4882a593Smuzhiyun MODULE_DESCRIPTION("Intel Broxton SoC pinctrl/GPIO driver");
1037*4882a593Smuzhiyun MODULE_LICENSE("GPL v2");
1038*4882a593Smuzhiyun MODULE_ALIAS("platform:broxton-pinctrl");
1039