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