xref: /linux/drivers/pinctrl/intel/pinctrl-baytrail.c (revision b8e85e6f3a09fc56b0ff574887798962ef8a8f80)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Pinctrl GPIO driver for Intel Baytrail
4  *
5  * Copyright (c) 2012-2013, Intel Corporation
6  * Author: Mathias Nyman <mathias.nyman@linux.intel.com>
7  */
8 
9 #include <linux/acpi.h>
10 #include <linux/array_size.h>
11 #include <linux/bitops.h>
12 #include <linux/cleanup.h>
13 #include <linux/gpio/driver.h>
14 #include <linux/init.h>
15 #include <linux/interrupt.h>
16 #include <linux/io.h>
17 #include <linux/module.h>
18 #include <linux/types.h>
19 #include <linux/platform_device.h>
20 #include <linux/pm.h>
21 #include <linux/property.h>
22 #include <linux/seq_file.h>
23 #include <linux/string_helpers.h>
24 
25 #include <linux/pinctrl/pinctrl.h>
26 #include <linux/pinctrl/pinmux.h>
27 #include <linux/pinctrl/pinconf.h>
28 #include <linux/pinctrl/pinconf-generic.h>
29 
30 #include "pinctrl-intel.h"
31 
32 /* memory mapped register offsets */
33 #define BYT_CONF0_REG		0x000
34 #define BYT_CONF1_REG		0x004
35 #define BYT_VAL_REG		0x008
36 #define BYT_DFT_REG		0x00c
37 #define BYT_INT_STAT_REG	0x800
38 #define BYT_DIRECT_IRQ_REG	0x980
39 #define BYT_DEBOUNCE_REG	0x9d0
40 
41 /* BYT_CONF0_REG register bits */
42 #define BYT_IODEN		BIT(31)
43 #define BYT_DIRECT_IRQ_EN	BIT(27)
44 #define BYT_TRIG_MASK		GENMASK(26, 24)
45 #define BYT_TRIG_NEG		BIT(26)
46 #define BYT_TRIG_POS		BIT(25)
47 #define BYT_TRIG_LVL		BIT(24)
48 #define BYT_DEBOUNCE_EN		BIT(20)
49 #define BYT_GLITCH_FILTER_EN	BIT(19)
50 #define BYT_GLITCH_F_SLOW_CLK	BIT(17)
51 #define BYT_GLITCH_F_FAST_CLK	BIT(16)
52 #define BYT_PULL_STR_SHIFT	9
53 #define BYT_PULL_STR_MASK	GENMASK(10, 9)
54 #define BYT_PULL_STR_2K		(0 << BYT_PULL_STR_SHIFT)
55 #define BYT_PULL_STR_10K	(1 << BYT_PULL_STR_SHIFT)
56 #define BYT_PULL_STR_20K	(2 << BYT_PULL_STR_SHIFT)
57 #define BYT_PULL_STR_40K	(3 << BYT_PULL_STR_SHIFT)
58 #define BYT_PULL_ASSIGN_MASK	GENMASK(8, 7)
59 #define BYT_PULL_ASSIGN_DOWN	BIT(8)
60 #define BYT_PULL_ASSIGN_UP	BIT(7)
61 #define BYT_PIN_MUX		GENMASK(2, 0)
62 
63 /* BYT_VAL_REG register bits */
64 #define BYT_DIR_MASK		GENMASK(2, 1)
65 #define BYT_INPUT_EN		BIT(2)  /* 0: input enabled (active low)*/
66 #define BYT_OUTPUT_EN		BIT(1)  /* 0: output enabled (active low)*/
67 #define BYT_LEVEL		BIT(0)
68 
69 #define BYT_CONF0_RESTORE_MASK	(BYT_DIRECT_IRQ_EN | BYT_TRIG_MASK | BYT_PIN_MUX)
70 #define BYT_VAL_RESTORE_MASK	(BYT_DIR_MASK | BYT_LEVEL)
71 
72 /* BYT_DEBOUNCE_REG bits */
73 #define BYT_DEBOUNCE_PULSE_MASK		GENMASK(2, 0)
74 #define BYT_DEBOUNCE_PULSE_375US	1
75 #define BYT_DEBOUNCE_PULSE_750US	2
76 #define BYT_DEBOUNCE_PULSE_1500US	3
77 #define BYT_DEBOUNCE_PULSE_3MS		4
78 #define BYT_DEBOUNCE_PULSE_6MS		5
79 #define BYT_DEBOUNCE_PULSE_12MS		6
80 #define BYT_DEBOUNCE_PULSE_24MS		7
81 
82 #define BYT_NGPIO_SCORE		102
83 #define BYT_NGPIO_NCORE		28
84 #define BYT_NGPIO_SUS		44
85 
86 #define BYT_SCORE_ACPI_UID	"1"
87 #define BYT_NCORE_ACPI_UID	"2"
88 #define BYT_SUS_ACPI_UID	"3"
89 
90 /*
91  * This is the function value most pins have for GPIO muxing. If the value
92  * differs from the default one, it must be explicitly mentioned. Otherwise, the
93  * pin control implementation will set the muxing value to default GPIO if it
94  * does not find a match for the requested function.
95  */
96 #define BYT_DEFAULT_GPIO_MUX	0
97 #define BYT_ALTER_GPIO_MUX	1
98 
99 struct intel_pad_context {
100 	u32 conf0;
101 	u32 val;
102 };
103 
104 #define COMMUNITY(p, n, map)		\
105 	{				\
106 		.pin_base	= (p),	\
107 		.npins		= (n),	\
108 		.pad_map	= (map),\
109 	}
110 
111 /* SCORE pins, aka GPIOC_<pin_no> or GPIO_S0_SC[<pin_no>] */
112 static const struct pinctrl_pin_desc byt_score_pins[] = {
113 	PINCTRL_PIN(0, "SATA_GP0"),
114 	PINCTRL_PIN(1, "SATA_GP1"),
115 	PINCTRL_PIN(2, "SATA_LED#"),
116 	PINCTRL_PIN(3, "PCIE_CLKREQ0"),
117 	PINCTRL_PIN(4, "PCIE_CLKREQ1"),
118 	PINCTRL_PIN(5, "PCIE_CLKREQ2"),
119 	PINCTRL_PIN(6, "PCIE_CLKREQ3"),
120 	PINCTRL_PIN(7, "SD3_WP"),
121 	PINCTRL_PIN(8, "HDA_RST"),
122 	PINCTRL_PIN(9, "HDA_SYNC"),
123 	PINCTRL_PIN(10, "HDA_CLK"),
124 	PINCTRL_PIN(11, "HDA_SDO"),
125 	PINCTRL_PIN(12, "HDA_SDI0"),
126 	PINCTRL_PIN(13, "HDA_SDI1"),
127 	PINCTRL_PIN(14, "GPIO_S0_SC14"),
128 	PINCTRL_PIN(15, "GPIO_S0_SC15"),
129 	PINCTRL_PIN(16, "MMC1_CLK"),
130 	PINCTRL_PIN(17, "MMC1_D0"),
131 	PINCTRL_PIN(18, "MMC1_D1"),
132 	PINCTRL_PIN(19, "MMC1_D2"),
133 	PINCTRL_PIN(20, "MMC1_D3"),
134 	PINCTRL_PIN(21, "MMC1_D4"),
135 	PINCTRL_PIN(22, "MMC1_D5"),
136 	PINCTRL_PIN(23, "MMC1_D6"),
137 	PINCTRL_PIN(24, "MMC1_D7"),
138 	PINCTRL_PIN(25, "MMC1_CMD"),
139 	PINCTRL_PIN(26, "MMC1_RST"),
140 	PINCTRL_PIN(27, "SD2_CLK"),
141 	PINCTRL_PIN(28, "SD2_D0"),
142 	PINCTRL_PIN(29, "SD2_D1"),
143 	PINCTRL_PIN(30, "SD2_D2"),
144 	PINCTRL_PIN(31, "SD2_D3_CD"),
145 	PINCTRL_PIN(32, "SD2_CMD"),
146 	PINCTRL_PIN(33, "SD3_CLK"),
147 	PINCTRL_PIN(34, "SD3_D0"),
148 	PINCTRL_PIN(35, "SD3_D1"),
149 	PINCTRL_PIN(36, "SD3_D2"),
150 	PINCTRL_PIN(37, "SD3_D3"),
151 	PINCTRL_PIN(38, "SD3_CD"),
152 	PINCTRL_PIN(39, "SD3_CMD"),
153 	PINCTRL_PIN(40, "SD3_1P8EN"),
154 	PINCTRL_PIN(41, "SD3_PWREN#"),
155 	PINCTRL_PIN(42, "ILB_LPC_AD0"),
156 	PINCTRL_PIN(43, "ILB_LPC_AD1"),
157 	PINCTRL_PIN(44, "ILB_LPC_AD2"),
158 	PINCTRL_PIN(45, "ILB_LPC_AD3"),
159 	PINCTRL_PIN(46, "ILB_LPC_FRAME"),
160 	PINCTRL_PIN(47, "ILB_LPC_CLK0"),
161 	PINCTRL_PIN(48, "ILB_LPC_CLK1"),
162 	PINCTRL_PIN(49, "ILB_LPC_CLKRUN"),
163 	PINCTRL_PIN(50, "ILB_LPC_SERIRQ"),
164 	PINCTRL_PIN(51, "PCU_SMB_DATA"),
165 	PINCTRL_PIN(52, "PCU_SMB_CLK"),
166 	PINCTRL_PIN(53, "PCU_SMB_ALERT"),
167 	PINCTRL_PIN(54, "ILB_8254_SPKR"),
168 	PINCTRL_PIN(55, "GPIO_S0_SC55"),
169 	PINCTRL_PIN(56, "GPIO_S0_SC56"),
170 	PINCTRL_PIN(57, "GPIO_S0_SC57"),
171 	PINCTRL_PIN(58, "GPIO_S0_SC58"),
172 	PINCTRL_PIN(59, "GPIO_S0_SC59"),
173 	PINCTRL_PIN(60, "GPIO_S0_SC60"),
174 	PINCTRL_PIN(61, "GPIO_S0_SC61"),
175 	PINCTRL_PIN(62, "LPE_I2S2_CLK"),
176 	PINCTRL_PIN(63, "LPE_I2S2_FRM"),
177 	PINCTRL_PIN(64, "LPE_I2S2_DATAIN"),
178 	PINCTRL_PIN(65, "LPE_I2S2_DATAOUT"),
179 	PINCTRL_PIN(66, "SIO_SPI_CS"),
180 	PINCTRL_PIN(67, "SIO_SPI_MISO"),
181 	PINCTRL_PIN(68, "SIO_SPI_MOSI"),
182 	PINCTRL_PIN(69, "SIO_SPI_CLK"),
183 	PINCTRL_PIN(70, "SIO_UART1_RXD"),
184 	PINCTRL_PIN(71, "SIO_UART1_TXD"),
185 	PINCTRL_PIN(72, "SIO_UART1_RTS"),
186 	PINCTRL_PIN(73, "SIO_UART1_CTS"),
187 	PINCTRL_PIN(74, "SIO_UART2_RXD"),
188 	PINCTRL_PIN(75, "SIO_UART2_TXD"),
189 	PINCTRL_PIN(76, "SIO_UART2_RTS"),
190 	PINCTRL_PIN(77, "SIO_UART2_CTS"),
191 	PINCTRL_PIN(78, "SIO_I2C0_DATA"),
192 	PINCTRL_PIN(79, "SIO_I2C0_CLK"),
193 	PINCTRL_PIN(80, "SIO_I2C1_DATA"),
194 	PINCTRL_PIN(81, "SIO_I2C1_CLK"),
195 	PINCTRL_PIN(82, "SIO_I2C2_DATA"),
196 	PINCTRL_PIN(83, "SIO_I2C2_CLK"),
197 	PINCTRL_PIN(84, "SIO_I2C3_DATA"),
198 	PINCTRL_PIN(85, "SIO_I2C3_CLK"),
199 	PINCTRL_PIN(86, "SIO_I2C4_DATA"),
200 	PINCTRL_PIN(87, "SIO_I2C4_CLK"),
201 	PINCTRL_PIN(88, "SIO_I2C5_DATA"),
202 	PINCTRL_PIN(89, "SIO_I2C5_CLK"),
203 	PINCTRL_PIN(90, "SIO_I2C6_DATA"),
204 	PINCTRL_PIN(91, "SIO_I2C6_CLK"),
205 	PINCTRL_PIN(92, "GPIO_S0_SC92"),
206 	PINCTRL_PIN(93, "GPIO_S0_SC93"),
207 	PINCTRL_PIN(94, "SIO_PWM0"),
208 	PINCTRL_PIN(95, "SIO_PWM1"),
209 	PINCTRL_PIN(96, "PMC_PLT_CLK0"),
210 	PINCTRL_PIN(97, "PMC_PLT_CLK1"),
211 	PINCTRL_PIN(98, "PMC_PLT_CLK2"),
212 	PINCTRL_PIN(99, "PMC_PLT_CLK3"),
213 	PINCTRL_PIN(100, "PMC_PLT_CLK4"),
214 	PINCTRL_PIN(101, "PMC_PLT_CLK5"),
215 };
216 
217 static const unsigned int byt_score_pins_map[BYT_NGPIO_SCORE] = {
218 	85, 89, 93, 96, 99, 102, 98, 101, 34, 37,
219 	36, 38, 39, 35, 40, 84, 62, 61, 64, 59,
220 	54, 56, 60, 55, 63, 57, 51, 50, 53, 47,
221 	52, 49, 48, 43, 46, 41, 45, 42, 58, 44,
222 	95, 105, 70, 68, 67, 66, 69, 71, 65, 72,
223 	86, 90, 88, 92, 103, 77, 79, 83, 78, 81,
224 	80, 82, 13, 12, 15, 14, 17, 18, 19, 16,
225 	2, 1, 0, 4, 6, 7, 9, 8, 33, 32,
226 	31, 30, 29, 27, 25, 28, 26, 23, 21, 20,
227 	24, 22, 5, 3, 10, 11, 106, 87, 91, 104,
228 	97, 100,
229 };
230 
231 /* SCORE groups */
232 static const unsigned int byt_score_uart1_pins[] = { 70, 71, 72, 73 };
233 static const unsigned int byt_score_uart2_pins[] = { 74, 75, 76, 77 };
234 
235 static const unsigned int byt_score_pwm0_pins[] = { 94 };
236 static const unsigned int byt_score_pwm1_pins[] = { 95 };
237 
238 static const unsigned int byt_score_sio_spi_pins[] = { 66, 67, 68, 69 };
239 
240 static const unsigned int byt_score_i2c5_pins[] = { 88, 89 };
241 static const unsigned int byt_score_i2c6_pins[] = { 90, 91 };
242 static const unsigned int byt_score_i2c4_pins[] = { 86, 87 };
243 static const unsigned int byt_score_i2c3_pins[] = { 84, 85 };
244 static const unsigned int byt_score_i2c2_pins[] = { 82, 83 };
245 static const unsigned int byt_score_i2c1_pins[] = { 80, 81 };
246 static const unsigned int byt_score_i2c0_pins[] = { 78, 79 };
247 
248 static const unsigned int byt_score_ssp0_pins[] = { 8, 9, 10, 11 };
249 static const unsigned int byt_score_ssp1_pins[] = { 12, 13, 14, 15 };
250 static const unsigned int byt_score_ssp2_pins[] = { 62, 63, 64, 65 };
251 
252 static const unsigned int byt_score_sdcard_pins[] = {
253 	7, 33, 34, 35, 36, 37, 38, 39, 40, 41,
254 };
255 static const unsigned int byt_score_sdcard_mux_values[] = {
256 	2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
257 };
258 
259 static const unsigned int byt_score_sdio_pins[] = { 27, 28, 29, 30, 31, 32 };
260 
261 static const unsigned int byt_score_emmc_pins[] = {
262 	16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
263 };
264 
265 static const unsigned int byt_score_ilb_lpc_pins[] = {
266 	42, 43, 44, 45, 46, 47, 48, 49, 50,
267 };
268 
269 static const unsigned int byt_score_sata_pins[] = { 0, 1, 2 };
270 
271 static const unsigned int byt_score_plt_clk0_pins[] = { 96 };
272 static const unsigned int byt_score_plt_clk1_pins[] = { 97 };
273 static const unsigned int byt_score_plt_clk2_pins[] = { 98 };
274 static const unsigned int byt_score_plt_clk3_pins[] = { 99 };
275 static const unsigned int byt_score_plt_clk4_pins[] = { 100 };
276 static const unsigned int byt_score_plt_clk5_pins[] = { 101 };
277 
278 static const unsigned int byt_score_smbus_pins[] = { 51, 52, 53 };
279 
280 static const struct intel_pingroup byt_score_groups[] = {
281 	PIN_GROUP("uart1_grp", byt_score_uart1_pins, 1),
282 	PIN_GROUP("uart2_grp", byt_score_uart2_pins, 1),
283 	PIN_GROUP("pwm0_grp", byt_score_pwm0_pins, 1),
284 	PIN_GROUP("pwm1_grp", byt_score_pwm1_pins, 1),
285 	PIN_GROUP("ssp2_grp", byt_score_ssp2_pins, 1),
286 	PIN_GROUP("sio_spi_grp", byt_score_sio_spi_pins, 1),
287 	PIN_GROUP("i2c5_grp", byt_score_i2c5_pins, 1),
288 	PIN_GROUP("i2c6_grp", byt_score_i2c6_pins, 1),
289 	PIN_GROUP("i2c4_grp", byt_score_i2c4_pins, 1),
290 	PIN_GROUP("i2c3_grp", byt_score_i2c3_pins, 1),
291 	PIN_GROUP("i2c2_grp", byt_score_i2c2_pins, 1),
292 	PIN_GROUP("i2c1_grp", byt_score_i2c1_pins, 1),
293 	PIN_GROUP("i2c0_grp", byt_score_i2c0_pins, 1),
294 	PIN_GROUP("ssp0_grp", byt_score_ssp0_pins, 1),
295 	PIN_GROUP("ssp1_grp", byt_score_ssp1_pins, 1),
296 	PIN_GROUP("sdcard_grp", byt_score_sdcard_pins, byt_score_sdcard_mux_values),
297 	PIN_GROUP("sdio_grp", byt_score_sdio_pins, 1),
298 	PIN_GROUP("emmc_grp", byt_score_emmc_pins, 1),
299 	PIN_GROUP("lpc_grp", byt_score_ilb_lpc_pins, 1),
300 	PIN_GROUP("sata_grp", byt_score_sata_pins, 1),
301 	PIN_GROUP("plt_clk0_grp", byt_score_plt_clk0_pins, 1),
302 	PIN_GROUP("plt_clk1_grp", byt_score_plt_clk1_pins, 1),
303 	PIN_GROUP("plt_clk2_grp", byt_score_plt_clk2_pins, 1),
304 	PIN_GROUP("plt_clk3_grp", byt_score_plt_clk3_pins, 1),
305 	PIN_GROUP("plt_clk4_grp", byt_score_plt_clk4_pins, 1),
306 	PIN_GROUP("plt_clk5_grp", byt_score_plt_clk5_pins, 1),
307 	PIN_GROUP("smbus_grp", byt_score_smbus_pins, 1),
308 };
309 
310 static const char * const byt_score_uart_groups[] = {
311 	"uart1_grp", "uart2_grp",
312 };
313 static const char * const byt_score_pwm_groups[] = {
314 	"pwm0_grp", "pwm1_grp",
315 };
316 static const char * const byt_score_ssp_groups[] = {
317 	"ssp0_grp", "ssp1_grp", "ssp2_grp",
318 };
319 static const char * const byt_score_spi_groups[] = { "sio_spi_grp" };
320 static const char * const byt_score_i2c_groups[] = {
321 	"i2c0_grp", "i2c1_grp", "i2c2_grp", "i2c3_grp", "i2c4_grp", "i2c5_grp",
322 	"i2c6_grp",
323 };
324 static const char * const byt_score_sdcard_groups[] = { "sdcard_grp" };
325 static const char * const byt_score_sdio_groups[] = { "sdio_grp" };
326 static const char * const byt_score_emmc_groups[] = { "emmc_grp" };
327 static const char * const byt_score_lpc_groups[] = { "lpc_grp" };
328 static const char * const byt_score_sata_groups[] = { "sata_grp" };
329 static const char * const byt_score_plt_clk_groups[] = {
330 	"plt_clk0_grp", "plt_clk1_grp", "plt_clk2_grp", "plt_clk3_grp",
331 	"plt_clk4_grp", "plt_clk5_grp",
332 };
333 static const char * const byt_score_smbus_groups[] = { "smbus_grp" };
334 static const char * const byt_score_gpio_groups[] = {
335 	"uart1_grp", "uart2_grp", "pwm0_grp", "pwm1_grp", "ssp0_grp",
336 	"ssp1_grp", "ssp2_grp", "sio_spi_grp", "i2c0_grp", "i2c1_grp",
337 	"i2c2_grp", "i2c3_grp", "i2c4_grp", "i2c5_grp", "i2c6_grp",
338 	"sdcard_grp", "sdio_grp", "emmc_grp", "lpc_grp", "sata_grp",
339 	"plt_clk0_grp", "plt_clk1_grp", "plt_clk2_grp", "plt_clk3_grp",
340 	"plt_clk4_grp", "plt_clk5_grp", "smbus_grp",
341 };
342 
343 static const struct intel_function byt_score_functions[] = {
344 	FUNCTION("uart", byt_score_uart_groups),
345 	FUNCTION("pwm", byt_score_pwm_groups),
346 	FUNCTION("ssp", byt_score_ssp_groups),
347 	FUNCTION("spi", byt_score_spi_groups),
348 	FUNCTION("i2c", byt_score_i2c_groups),
349 	FUNCTION("sdcard", byt_score_sdcard_groups),
350 	FUNCTION("sdio", byt_score_sdio_groups),
351 	FUNCTION("emmc", byt_score_emmc_groups),
352 	FUNCTION("lpc", byt_score_lpc_groups),
353 	FUNCTION("sata", byt_score_sata_groups),
354 	FUNCTION("plt_clk", byt_score_plt_clk_groups),
355 	FUNCTION("smbus", byt_score_smbus_groups),
356 	FUNCTION("gpio", byt_score_gpio_groups),
357 };
358 
359 static const struct intel_community byt_score_communities[] = {
360 	COMMUNITY(0, BYT_NGPIO_SCORE, byt_score_pins_map),
361 };
362 
363 static const struct intel_pinctrl_soc_data byt_score_soc_data = {
364 	.uid		= BYT_SCORE_ACPI_UID,
365 	.pins		= byt_score_pins,
366 	.npins		= ARRAY_SIZE(byt_score_pins),
367 	.groups		= byt_score_groups,
368 	.ngroups	= ARRAY_SIZE(byt_score_groups),
369 	.functions	= byt_score_functions,
370 	.nfunctions	= ARRAY_SIZE(byt_score_functions),
371 	.communities	= byt_score_communities,
372 	.ncommunities	= ARRAY_SIZE(byt_score_communities),
373 };
374 
375 /* SUS pins, aka GPIOS_<pin_no> or GPIO_S5[<pin_no>]  */
376 static const struct pinctrl_pin_desc byt_sus_pins[] = {
377 	PINCTRL_PIN(0, "GPIO_S50"),
378 	PINCTRL_PIN(1, "GPIO_S51"),
379 	PINCTRL_PIN(2, "GPIO_S52"),
380 	PINCTRL_PIN(3, "GPIO_S53"),
381 	PINCTRL_PIN(4, "GPIO_S54"),
382 	PINCTRL_PIN(5, "GPIO_S55"),
383 	PINCTRL_PIN(6, "GPIO_S56"),
384 	PINCTRL_PIN(7, "GPIO_S57"),
385 	PINCTRL_PIN(8, "GPIO_S58"),
386 	PINCTRL_PIN(9, "GPIO_S59"),
387 	PINCTRL_PIN(10, "GPIO_S510"),
388 	PINCTRL_PIN(11, "PMC_SUSPWRDNACK"),
389 	PINCTRL_PIN(12, "PMC_SUSCLK0"),
390 	PINCTRL_PIN(13, "GPIO_S513"),
391 	PINCTRL_PIN(14, "USB_ULPI_RST"),
392 	PINCTRL_PIN(15, "PMC_WAKE_PCIE0#"),
393 	PINCTRL_PIN(16, "PMC_PWRBTN"),
394 	PINCTRL_PIN(17, "GPIO_S517"),
395 	PINCTRL_PIN(18, "PMC_SUS_STAT"),
396 	PINCTRL_PIN(19, "USB_OC0"),
397 	PINCTRL_PIN(20, "USB_OC1"),
398 	PINCTRL_PIN(21, "PCU_SPI_CS1"),
399 	PINCTRL_PIN(22, "GPIO_S522"),
400 	PINCTRL_PIN(23, "GPIO_S523"),
401 	PINCTRL_PIN(24, "GPIO_S524"),
402 	PINCTRL_PIN(25, "GPIO_S525"),
403 	PINCTRL_PIN(26, "GPIO_S526"),
404 	PINCTRL_PIN(27, "GPIO_S527"),
405 	PINCTRL_PIN(28, "GPIO_S528"),
406 	PINCTRL_PIN(29, "GPIO_S529"),
407 	PINCTRL_PIN(30, "GPIO_S530"),
408 	PINCTRL_PIN(31, "USB_ULPI_CLK"),
409 	PINCTRL_PIN(32, "USB_ULPI_DATA0"),
410 	PINCTRL_PIN(33, "USB_ULPI_DATA1"),
411 	PINCTRL_PIN(34, "USB_ULPI_DATA2"),
412 	PINCTRL_PIN(35, "USB_ULPI_DATA3"),
413 	PINCTRL_PIN(36, "USB_ULPI_DATA4"),
414 	PINCTRL_PIN(37, "USB_ULPI_DATA5"),
415 	PINCTRL_PIN(38, "USB_ULPI_DATA6"),
416 	PINCTRL_PIN(39, "USB_ULPI_DATA7"),
417 	PINCTRL_PIN(40, "USB_ULPI_DIR"),
418 	PINCTRL_PIN(41, "USB_ULPI_NXT"),
419 	PINCTRL_PIN(42, "USB_ULPI_STP"),
420 	PINCTRL_PIN(43, "USB_ULPI_REFCLK"),
421 };
422 
423 static const unsigned int byt_sus_pins_map[BYT_NGPIO_SUS] = {
424 	29, 33, 30, 31, 32, 34, 36, 35, 38, 37,
425 	18, 7, 11, 20, 17, 1, 8, 10, 19, 12,
426 	0, 2, 23, 39, 28, 27, 22, 21, 24, 25,
427 	26, 51, 56, 54, 49, 55, 48, 57, 50, 58,
428 	52, 53, 59, 40,
429 };
430 
431 static const unsigned int byt_sus_usb_over_current_pins[] = { 19, 20 };
432 static const unsigned int byt_sus_usb_over_current_mode_values[] = { 0, 0 };
433 static const unsigned int byt_sus_usb_over_current_gpio_mode_values[] = { 1, 1 };
434 
435 static const unsigned int byt_sus_usb_ulpi_pins[] = {
436 	14, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
437 };
438 static const unsigned int byt_sus_usb_ulpi_mode_values[] = {
439 	2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
440 };
441 static const unsigned int byt_sus_usb_ulpi_gpio_mode_values[] = {
442 	1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
443 };
444 
445 static const unsigned int byt_sus_pcu_spi_pins[] = { 21 };
446 static const unsigned int byt_sus_pcu_spi_mode_values[] = { 0 };
447 static const unsigned int byt_sus_pcu_spi_gpio_mode_values[] = { 1 };
448 
449 static const unsigned int byt_sus_pmu_clk1_pins[] = { 5 };
450 static const unsigned int byt_sus_pmu_clk2_pins[] = { 6 };
451 
452 static const struct intel_pingroup byt_sus_groups[] = {
453 	PIN_GROUP("usb_oc_grp", byt_sus_usb_over_current_pins, byt_sus_usb_over_current_mode_values),
454 	PIN_GROUP("usb_ulpi_grp", byt_sus_usb_ulpi_pins, byt_sus_usb_ulpi_mode_values),
455 	PIN_GROUP("pcu_spi_grp", byt_sus_pcu_spi_pins, byt_sus_pcu_spi_mode_values),
456 	PIN_GROUP("usb_oc_grp_gpio", byt_sus_usb_over_current_pins, byt_sus_usb_over_current_gpio_mode_values),
457 	PIN_GROUP("usb_ulpi_grp_gpio", byt_sus_usb_ulpi_pins, byt_sus_usb_ulpi_gpio_mode_values),
458 	PIN_GROUP("pcu_spi_grp_gpio", byt_sus_pcu_spi_pins, byt_sus_pcu_spi_gpio_mode_values),
459 	PIN_GROUP("pmu_clk1_grp", byt_sus_pmu_clk1_pins, 1),
460 	PIN_GROUP("pmu_clk2_grp", byt_sus_pmu_clk2_pins, 1),
461 };
462 
463 static const char * const byt_sus_usb_groups[] = {
464 	"usb_oc_grp", "usb_ulpi_grp",
465 };
466 static const char * const byt_sus_spi_groups[] = { "pcu_spi_grp" };
467 static const char * const byt_sus_pmu_clk_groups[] = {
468 	"pmu_clk1_grp", "pmu_clk2_grp",
469 };
470 static const char * const byt_sus_gpio_groups[] = {
471 	"usb_oc_grp_gpio", "usb_ulpi_grp_gpio", "pcu_spi_grp_gpio",
472 	"pmu_clk1_grp", "pmu_clk2_grp",
473 };
474 
475 static const struct intel_function byt_sus_functions[] = {
476 	FUNCTION("usb", byt_sus_usb_groups),
477 	FUNCTION("spi", byt_sus_spi_groups),
478 	FUNCTION("gpio", byt_sus_gpio_groups),
479 	FUNCTION("pmu_clk", byt_sus_pmu_clk_groups),
480 };
481 
482 static const struct intel_community byt_sus_communities[] = {
483 	COMMUNITY(0, BYT_NGPIO_SUS, byt_sus_pins_map),
484 };
485 
486 static const struct intel_pinctrl_soc_data byt_sus_soc_data = {
487 	.uid		= BYT_SUS_ACPI_UID,
488 	.pins		= byt_sus_pins,
489 	.npins		= ARRAY_SIZE(byt_sus_pins),
490 	.groups		= byt_sus_groups,
491 	.ngroups	= ARRAY_SIZE(byt_sus_groups),
492 	.functions	= byt_sus_functions,
493 	.nfunctions	= ARRAY_SIZE(byt_sus_functions),
494 	.communities	= byt_sus_communities,
495 	.ncommunities	= ARRAY_SIZE(byt_sus_communities),
496 };
497 
498 static const struct pinctrl_pin_desc byt_ncore_pins[] = {
499 	PINCTRL_PIN(0, "HV_DDI0_HPD"),
500 	PINCTRL_PIN(1, "HV_DDI0_DDC_SDA"),
501 	PINCTRL_PIN(2, "HV_DDI0_DDC_SCL"),
502 	PINCTRL_PIN(3, "PANEL0_VDDEN"),
503 	PINCTRL_PIN(4, "PANEL0_BKLTEN"),
504 	PINCTRL_PIN(5, "PANEL0_BKLTCTL"),
505 	PINCTRL_PIN(6, "HV_DDI1_HPD"),
506 	PINCTRL_PIN(7, "HV_DDI1_DDC_SDA"),
507 	PINCTRL_PIN(8, "HV_DDI1_DDC_SCL"),
508 	PINCTRL_PIN(9, "PANEL1_VDDEN"),
509 	PINCTRL_PIN(10, "PANEL1_BKLTEN"),
510 	PINCTRL_PIN(11, "PANEL1_BKLTCTL"),
511 	PINCTRL_PIN(12, "GP_INTD_DSI_TE1"),
512 	PINCTRL_PIN(13, "HV_DDI2_DDC_SDA"),
513 	PINCTRL_PIN(14, "HV_DDI2_DDC_SCL"),
514 	PINCTRL_PIN(15, "GP_CAMERASB00"),
515 	PINCTRL_PIN(16, "GP_CAMERASB01"),
516 	PINCTRL_PIN(17, "GP_CAMERASB02"),
517 	PINCTRL_PIN(18, "GP_CAMERASB03"),
518 	PINCTRL_PIN(19, "GP_CAMERASB04"),
519 	PINCTRL_PIN(20, "GP_CAMERASB05"),
520 	PINCTRL_PIN(21, "GP_CAMERASB06"),
521 	PINCTRL_PIN(22, "GP_CAMERASB07"),
522 	PINCTRL_PIN(23, "GP_CAMERASB08"),
523 	PINCTRL_PIN(24, "GP_CAMERASB09"),
524 	PINCTRL_PIN(25, "GP_CAMERASB10"),
525 	PINCTRL_PIN(26, "GP_CAMERASB11"),
526 	PINCTRL_PIN(27, "GP_INTD_DSI_TE2"),
527 };
528 
529 static const unsigned int byt_ncore_pins_map[BYT_NGPIO_NCORE] = {
530 	19, 18, 17, 20, 21, 22, 24, 25, 23, 16,
531 	14, 15, 12, 26, 27, 1, 4, 8, 11, 0,
532 	3, 6, 10, 13, 2, 5, 9, 7,
533 };
534 
535 static const struct intel_community byt_ncore_communities[] = {
536 	COMMUNITY(0, BYT_NGPIO_NCORE, byt_ncore_pins_map),
537 };
538 
539 static const struct intel_pinctrl_soc_data byt_ncore_soc_data = {
540 	.uid		= BYT_NCORE_ACPI_UID,
541 	.pins		= byt_ncore_pins,
542 	.npins		= ARRAY_SIZE(byt_ncore_pins),
543 	.communities	= byt_ncore_communities,
544 	.ncommunities	= ARRAY_SIZE(byt_ncore_communities),
545 };
546 
547 static const struct intel_pinctrl_soc_data *byt_soc_data[] = {
548 	&byt_score_soc_data,
549 	&byt_sus_soc_data,
550 	&byt_ncore_soc_data,
551 	NULL
552 };
553 
554 static DEFINE_RAW_SPINLOCK(byt_lock);
555 
556 static void __iomem *byt_gpio_reg(struct intel_pinctrl *vg, unsigned int offset,
557 				  int reg)
558 {
559 	struct intel_community *comm = intel_get_community(vg, offset);
560 	u32 reg_offset;
561 
562 	if (!comm)
563 		return NULL;
564 
565 	offset -= comm->pin_base;
566 	switch (reg) {
567 	case BYT_INT_STAT_REG:
568 		reg_offset = (offset / 32) * 4;
569 		break;
570 	case BYT_DEBOUNCE_REG:
571 		reg_offset = 0;
572 		break;
573 	default:
574 		reg_offset = comm->pad_map[offset] * 16;
575 		break;
576 	}
577 
578 	return comm->pad_regs + reg_offset + reg;
579 }
580 
581 static const struct pinctrl_ops byt_pinctrl_ops = {
582 	.get_groups_count	= intel_get_groups_count,
583 	.get_group_name		= intel_get_group_name,
584 	.get_group_pins		= intel_get_group_pins,
585 };
586 
587 static void byt_set_group_simple_mux(struct intel_pinctrl *vg,
588 				     const struct intel_pingroup group,
589 				     unsigned int func)
590 {
591 	int i;
592 
593 	guard(raw_spinlock_irqsave)(&byt_lock);
594 
595 	for (i = 0; i < group.grp.npins; i++) {
596 		void __iomem *padcfg0;
597 		u32 value;
598 
599 		padcfg0 = byt_gpio_reg(vg, group.grp.pins[i], BYT_CONF0_REG);
600 		if (!padcfg0) {
601 			dev_warn(vg->dev, "Group %s, pin %i not muxed (can't retrieve CONF0)\n",
602 				 group.grp.name, i);
603 			continue;
604 		}
605 
606 		value = readl(padcfg0);
607 		value &= ~BYT_PIN_MUX;
608 		value |= func;
609 		writel(value, padcfg0);
610 	}
611 }
612 
613 static void byt_set_group_mixed_mux(struct intel_pinctrl *vg,
614 				    const struct intel_pingroup group,
615 				    const unsigned int *func)
616 {
617 	int i;
618 
619 	guard(raw_spinlock_irqsave)(&byt_lock);
620 
621 	for (i = 0; i < group.grp.npins; i++) {
622 		void __iomem *padcfg0;
623 		u32 value;
624 
625 		padcfg0 = byt_gpio_reg(vg, group.grp.pins[i], BYT_CONF0_REG);
626 		if (!padcfg0) {
627 			dev_warn(vg->dev, "Group %s, pin %i not muxed (can't retrieve CONF0)\n",
628 				 group.grp.name, i);
629 			continue;
630 		}
631 
632 		value = readl(padcfg0);
633 		value &= ~BYT_PIN_MUX;
634 		value |= func[i];
635 		writel(value, padcfg0);
636 	}
637 }
638 
639 static int byt_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector,
640 		       unsigned int group_selector)
641 {
642 	struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctldev);
643 	const struct intel_function func = vg->soc->functions[func_selector];
644 	const struct intel_pingroup group = vg->soc->groups[group_selector];
645 
646 	if (group.modes)
647 		byt_set_group_mixed_mux(vg, group, group.modes);
648 	else if (!strcmp(func.func.name, "gpio"))
649 		byt_set_group_simple_mux(vg, group, BYT_DEFAULT_GPIO_MUX);
650 	else
651 		byt_set_group_simple_mux(vg, group, group.mode);
652 
653 	return 0;
654 }
655 
656 static u32 byt_get_gpio_mux(struct intel_pinctrl *vg, unsigned int offset)
657 {
658 	/* SCORE pin 92-93 */
659 	if (!strcmp(vg->soc->uid, BYT_SCORE_ACPI_UID) &&
660 	    offset >= 92 && offset <= 93)
661 		return BYT_ALTER_GPIO_MUX;
662 
663 	/* SUS pin 11-21 */
664 	if (!strcmp(vg->soc->uid, BYT_SUS_ACPI_UID) &&
665 	    offset >= 11 && offset <= 21)
666 		return BYT_ALTER_GPIO_MUX;
667 
668 	return BYT_DEFAULT_GPIO_MUX;
669 }
670 
671 static void byt_gpio_clear_triggering(struct intel_pinctrl *vg, unsigned int offset)
672 {
673 	void __iomem *reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
674 	u32 value;
675 
676 	guard(raw_spinlock_irqsave)(&byt_lock);
677 
678 	value = readl(reg);
679 
680 	/* Do not clear direct-irq enabled IRQs (from gpio_disable_free) */
681 	if (!(value & BYT_DIRECT_IRQ_EN))
682 		value &= ~(BYT_TRIG_POS | BYT_TRIG_NEG | BYT_TRIG_LVL);
683 
684 	writel(value, reg);
685 }
686 
687 static int byt_gpio_request_enable(struct pinctrl_dev *pctl_dev,
688 				   struct pinctrl_gpio_range *range,
689 				   unsigned int offset)
690 {
691 	struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
692 	void __iomem *reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
693 	u32 value, gpio_mux;
694 
695 	guard(raw_spinlock_irqsave)(&byt_lock);
696 
697 	/*
698 	 * In most cases, func pin mux 000 means GPIO function.
699 	 * But, some pins may have func pin mux 001 represents
700 	 * GPIO function.
701 	 *
702 	 * Because there are devices out there where some pins were not
703 	 * configured correctly we allow changing the mux value from
704 	 * request (but print out warning about that).
705 	 */
706 	value = readl(reg) & BYT_PIN_MUX;
707 	gpio_mux = byt_get_gpio_mux(vg, offset);
708 	if (gpio_mux == value)
709 		return 0;
710 
711 	value = readl(reg) & ~BYT_PIN_MUX;
712 	value |= gpio_mux;
713 	writel(value, reg);
714 
715 	dev_warn(vg->dev, FW_BUG "Pin %i: forcibly re-configured as GPIO\n", offset);
716 
717 	return 0;
718 }
719 
720 static void byt_gpio_disable_free(struct pinctrl_dev *pctl_dev,
721 				  struct pinctrl_gpio_range *range,
722 				  unsigned int offset)
723 {
724 	struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
725 
726 	byt_gpio_clear_triggering(vg, offset);
727 }
728 
729 static void byt_gpio_direct_irq_check(struct intel_pinctrl *vg,
730 				      unsigned int offset)
731 {
732 	void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
733 
734 	/*
735 	 * Before making any direction modifications, do a check if gpio is set
736 	 * for direct IRQ. On Bay Trail, setting GPIO to output does not make
737 	 * sense, so let's at least inform the caller before they shoot
738 	 * themselves in the foot.
739 	 */
740 	if (readl(conf_reg) & BYT_DIRECT_IRQ_EN)
741 		dev_info_once(vg->dev,
742 			      "Potential Error: Pin %i: forcibly set GPIO with DIRECT_IRQ_EN to output\n",
743 			      offset);
744 }
745 
746 static int byt_gpio_set_direction(struct pinctrl_dev *pctl_dev,
747 				  struct pinctrl_gpio_range *range,
748 				  unsigned int offset,
749 				  bool input)
750 {
751 	struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
752 	void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
753 	u32 value;
754 
755 	guard(raw_spinlock_irqsave)(&byt_lock);
756 
757 	value = readl(val_reg);
758 	value &= ~BYT_DIR_MASK;
759 	if (input)
760 		value |= BYT_OUTPUT_EN;
761 	else
762 		byt_gpio_direct_irq_check(vg, offset);
763 
764 	writel(value, val_reg);
765 
766 	return 0;
767 }
768 
769 static const struct pinmux_ops byt_pinmux_ops = {
770 	.get_functions_count	= intel_get_functions_count,
771 	.get_function_name	= intel_get_function_name,
772 	.get_function_groups	= intel_get_function_groups,
773 	.set_mux		= byt_set_mux,
774 	.gpio_request_enable	= byt_gpio_request_enable,
775 	.gpio_disable_free	= byt_gpio_disable_free,
776 	.gpio_set_direction	= byt_gpio_set_direction,
777 };
778 
779 static void byt_get_pull_strength(u32 reg, u16 *strength)
780 {
781 	switch (reg & BYT_PULL_STR_MASK) {
782 	case BYT_PULL_STR_2K:
783 		*strength = 2000;
784 		break;
785 	case BYT_PULL_STR_10K:
786 		*strength = 10000;
787 		break;
788 	case BYT_PULL_STR_20K:
789 		*strength = 20000;
790 		break;
791 	case BYT_PULL_STR_40K:
792 		*strength = 40000;
793 		break;
794 	}
795 }
796 
797 static int byt_set_pull_strength(u32 *reg, u16 strength)
798 {
799 	*reg &= ~BYT_PULL_STR_MASK;
800 
801 	switch (strength) {
802 	case 1: /* Set default strength value in case none is given */
803 	case 2000:
804 		*reg |= BYT_PULL_STR_2K;
805 		break;
806 	case 10000:
807 		*reg |= BYT_PULL_STR_10K;
808 		break;
809 	case 20000:
810 		*reg |= BYT_PULL_STR_20K;
811 		break;
812 	case 40000:
813 		*reg |= BYT_PULL_STR_40K;
814 		break;
815 	default:
816 		return -EINVAL;
817 	}
818 
819 	return 0;
820 }
821 
822 static void byt_gpio_force_input_mode(struct intel_pinctrl *vg, unsigned int offset)
823 {
824 	void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
825 	u32 value;
826 
827 	value = readl(reg);
828 	if (!(value & BYT_INPUT_EN))
829 		return;
830 
831 	/*
832 	 * Pull assignment is only applicable in input mode. If
833 	 * chip is not in input mode, set it and warn about it.
834 	 */
835 	value &= ~BYT_INPUT_EN;
836 	writel(value, reg);
837 	dev_warn(vg->dev, "Pin %i: forcibly set to input mode\n", offset);
838 }
839 
840 static int byt_pin_config_get(struct pinctrl_dev *pctl_dev, unsigned int offset,
841 			      unsigned long *config)
842 {
843 	struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
844 	enum pin_config_param param = pinconf_to_config_param(*config);
845 	void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
846 	void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
847 	void __iomem *db_reg = byt_gpio_reg(vg, offset, BYT_DEBOUNCE_REG);
848 	u32 conf, pull, val, debounce;
849 	u16 arg = 0;
850 
851 	scoped_guard(raw_spinlock_irqsave, &byt_lock) {
852 		conf = readl(conf_reg);
853 		val = readl(val_reg);
854 	}
855 
856 	pull = conf & BYT_PULL_ASSIGN_MASK;
857 
858 	switch (param) {
859 	case PIN_CONFIG_BIAS_DISABLE:
860 		if (pull)
861 			return -EINVAL;
862 		break;
863 	case PIN_CONFIG_BIAS_PULL_DOWN:
864 		/* Pull assignment is only applicable in input mode */
865 		if ((val & BYT_INPUT_EN) || pull != BYT_PULL_ASSIGN_DOWN)
866 			return -EINVAL;
867 
868 		byt_get_pull_strength(conf, &arg);
869 
870 		break;
871 	case PIN_CONFIG_BIAS_PULL_UP:
872 		/* Pull assignment is only applicable in input mode */
873 		if ((val & BYT_INPUT_EN) || pull != BYT_PULL_ASSIGN_UP)
874 			return -EINVAL;
875 
876 		byt_get_pull_strength(conf, &arg);
877 
878 		break;
879 	case PIN_CONFIG_INPUT_DEBOUNCE:
880 		if (!(conf & BYT_DEBOUNCE_EN))
881 			return -EINVAL;
882 
883 		scoped_guard(raw_spinlock_irqsave, &byt_lock)
884 			debounce = readl(db_reg);
885 
886 		switch (debounce & BYT_DEBOUNCE_PULSE_MASK) {
887 		case BYT_DEBOUNCE_PULSE_375US:
888 			arg = 375;
889 			break;
890 		case BYT_DEBOUNCE_PULSE_750US:
891 			arg = 750;
892 			break;
893 		case BYT_DEBOUNCE_PULSE_1500US:
894 			arg = 1500;
895 			break;
896 		case BYT_DEBOUNCE_PULSE_3MS:
897 			arg = 3000;
898 			break;
899 		case BYT_DEBOUNCE_PULSE_6MS:
900 			arg = 6000;
901 			break;
902 		case BYT_DEBOUNCE_PULSE_12MS:
903 			arg = 12000;
904 			break;
905 		case BYT_DEBOUNCE_PULSE_24MS:
906 			arg = 24000;
907 			break;
908 		default:
909 			return -EINVAL;
910 		}
911 
912 		break;
913 	default:
914 		return -ENOTSUPP;
915 	}
916 
917 	*config = pinconf_to_config_packed(param, arg);
918 
919 	return 0;
920 }
921 
922 static int byt_pin_config_set(struct pinctrl_dev *pctl_dev,
923 			      unsigned int offset,
924 			      unsigned long *configs,
925 			      unsigned int num_configs)
926 {
927 	struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
928 	void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
929 	void __iomem *db_reg = byt_gpio_reg(vg, offset, BYT_DEBOUNCE_REG);
930 	u32 conf, db_pulse, debounce;
931 	enum pin_config_param param;
932 	int i, ret;
933 	u32 arg;
934 
935 	guard(raw_spinlock_irqsave)(&byt_lock);
936 
937 	conf = readl(conf_reg);
938 
939 	for (i = 0; i < num_configs; i++) {
940 		param = pinconf_to_config_param(configs[i]);
941 		arg = pinconf_to_config_argument(configs[i]);
942 
943 		switch (param) {
944 		case PIN_CONFIG_BIAS_DISABLE:
945 			conf &= ~BYT_PULL_ASSIGN_MASK;
946 			break;
947 		case PIN_CONFIG_BIAS_PULL_DOWN:
948 			byt_gpio_force_input_mode(vg, offset);
949 
950 			conf &= ~BYT_PULL_ASSIGN_MASK;
951 			conf |= BYT_PULL_ASSIGN_DOWN;
952 			ret = byt_set_pull_strength(&conf, arg);
953 			if (ret)
954 				return ret;
955 
956 			break;
957 		case PIN_CONFIG_BIAS_PULL_UP:
958 			byt_gpio_force_input_mode(vg, offset);
959 
960 			conf &= ~BYT_PULL_ASSIGN_MASK;
961 			conf |= BYT_PULL_ASSIGN_UP;
962 			ret = byt_set_pull_strength(&conf, arg);
963 			if (ret)
964 				return ret;
965 
966 			break;
967 		case PIN_CONFIG_INPUT_DEBOUNCE:
968 			switch (arg) {
969 			case 0:
970 				db_pulse = 0;
971 				break;
972 			case 375:
973 				db_pulse = BYT_DEBOUNCE_PULSE_375US;
974 				break;
975 			case 750:
976 				db_pulse = BYT_DEBOUNCE_PULSE_750US;
977 				break;
978 			case 1500:
979 				db_pulse = BYT_DEBOUNCE_PULSE_1500US;
980 				break;
981 			case 3000:
982 				db_pulse = BYT_DEBOUNCE_PULSE_3MS;
983 				break;
984 			case 6000:
985 				db_pulse = BYT_DEBOUNCE_PULSE_6MS;
986 				break;
987 			case 12000:
988 				db_pulse = BYT_DEBOUNCE_PULSE_12MS;
989 				break;
990 			case 24000:
991 				db_pulse = BYT_DEBOUNCE_PULSE_24MS;
992 				break;
993 			default:
994 				return -EINVAL;
995 			}
996 
997 			if (db_pulse) {
998 				debounce = readl(db_reg);
999 				debounce = (debounce & ~BYT_DEBOUNCE_PULSE_MASK) | db_pulse;
1000 				writel(debounce, db_reg);
1001 
1002 				conf |= BYT_DEBOUNCE_EN;
1003 			} else {
1004 				conf &= ~BYT_DEBOUNCE_EN;
1005 			}
1006 
1007 			break;
1008 		default:
1009 			return -ENOTSUPP;
1010 		}
1011 	}
1012 
1013 	writel(conf, conf_reg);
1014 
1015 	return 0;
1016 }
1017 
1018 static const struct pinconf_ops byt_pinconf_ops = {
1019 	.is_generic	= true,
1020 	.pin_config_get	= byt_pin_config_get,
1021 	.pin_config_set	= byt_pin_config_set,
1022 };
1023 
1024 static const struct pinctrl_desc byt_pinctrl_desc = {
1025 	.pctlops	= &byt_pinctrl_ops,
1026 	.pmxops		= &byt_pinmux_ops,
1027 	.confops	= &byt_pinconf_ops,
1028 	.owner		= THIS_MODULE,
1029 };
1030 
1031 static int byt_gpio_get(struct gpio_chip *chip, unsigned int offset)
1032 {
1033 	struct intel_pinctrl *vg = gpiochip_get_data(chip);
1034 	void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1035 	u32 val;
1036 
1037 	scoped_guard(raw_spinlock_irqsave, &byt_lock)
1038 		val = readl(reg);
1039 
1040 	return !!(val & BYT_LEVEL);
1041 }
1042 
1043 static void byt_gpio_set(struct gpio_chip *chip, unsigned int offset, int value)
1044 {
1045 	struct intel_pinctrl *vg = gpiochip_get_data(chip);
1046 	void __iomem *reg;
1047 	u32 old_val;
1048 
1049 	reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1050 	if (!reg)
1051 		return;
1052 
1053 	guard(raw_spinlock_irqsave)(&byt_lock);
1054 
1055 	old_val = readl(reg);
1056 	if (value)
1057 		writel(old_val | BYT_LEVEL, reg);
1058 	else
1059 		writel(old_val & ~BYT_LEVEL, reg);
1060 }
1061 
1062 static int byt_gpio_get_direction(struct gpio_chip *chip, unsigned int offset)
1063 {
1064 	struct intel_pinctrl *vg = gpiochip_get_data(chip);
1065 	void __iomem *reg;
1066 	u32 value;
1067 
1068 	reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1069 	if (!reg)
1070 		return -EINVAL;
1071 
1072 	scoped_guard(raw_spinlock_irqsave, &byt_lock)
1073 		value = readl(reg);
1074 
1075 	if (!(value & BYT_OUTPUT_EN))
1076 		return GPIO_LINE_DIRECTION_OUT;
1077 	if (!(value & BYT_INPUT_EN))
1078 		return GPIO_LINE_DIRECTION_IN;
1079 
1080 	return -EINVAL;
1081 }
1082 
1083 static int byt_gpio_direction_input(struct gpio_chip *chip, unsigned int offset)
1084 {
1085 	struct intel_pinctrl *vg = gpiochip_get_data(chip);
1086 	void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1087 	u32 reg;
1088 
1089 	guard(raw_spinlock_irqsave)(&byt_lock);
1090 
1091 	reg = readl(val_reg);
1092 	reg &= ~BYT_DIR_MASK;
1093 	reg |= BYT_OUTPUT_EN;
1094 	writel(reg, val_reg);
1095 
1096 	return 0;
1097 }
1098 
1099 /*
1100  * Note despite the temptation this MUST NOT be converted into a call to
1101  * pinctrl_gpio_direction_output() + byt_gpio_set() that does not work this
1102  * MUST be done as a single BYT_VAL_REG register write.
1103  * See the commit message of the commit adding this comment for details.
1104  */
1105 static int byt_gpio_direction_output(struct gpio_chip *chip,
1106 				     unsigned int offset, int value)
1107 {
1108 	struct intel_pinctrl *vg = gpiochip_get_data(chip);
1109 	void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1110 	u32 reg;
1111 
1112 	guard(raw_spinlock_irqsave)(&byt_lock);
1113 
1114 	byt_gpio_direct_irq_check(vg, offset);
1115 
1116 	reg = readl(val_reg);
1117 	reg &= ~BYT_DIR_MASK;
1118 	if (value)
1119 		reg |= BYT_LEVEL;
1120 	else
1121 		reg &= ~BYT_LEVEL;
1122 
1123 	writel(reg, val_reg);
1124 
1125 	return 0;
1126 }
1127 
1128 static void byt_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
1129 {
1130 	struct intel_pinctrl *vg = gpiochip_get_data(chip);
1131 	int i;
1132 	u32 conf0, val;
1133 
1134 	for (i = 0; i < vg->soc->npins; i++) {
1135 		const struct intel_community *comm;
1136 		void __iomem *conf_reg, *val_reg;
1137 		const char *pull_str = NULL;
1138 		const char *pull = NULL;
1139 		unsigned int pin;
1140 
1141 		pin = vg->soc->pins[i].number;
1142 
1143 		conf_reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
1144 		if (!conf_reg) {
1145 			seq_printf(s, "Pin %i: can't retrieve CONF0\n", pin);
1146 			continue;
1147 		}
1148 
1149 		val_reg = byt_gpio_reg(vg, pin, BYT_VAL_REG);
1150 		if (!val_reg) {
1151 			seq_printf(s, "Pin %i: can't retrieve VAL\n", pin);
1152 			continue;
1153 		}
1154 
1155 		scoped_guard(raw_spinlock_irqsave, &byt_lock) {
1156 			conf0 = readl(conf_reg);
1157 			val = readl(val_reg);
1158 		}
1159 
1160 		comm = intel_get_community(vg, pin);
1161 		if (!comm) {
1162 			seq_printf(s, "Pin %i: can't retrieve community\n", pin);
1163 			continue;
1164 		}
1165 
1166 		char *label __free(kfree) = gpiochip_dup_line_label(chip, i);
1167 		if (IS_ERR(label))
1168 			continue;
1169 
1170 		switch (conf0 & BYT_PULL_ASSIGN_MASK) {
1171 		case BYT_PULL_ASSIGN_UP:
1172 			pull = "up";
1173 			break;
1174 		case BYT_PULL_ASSIGN_DOWN:
1175 			pull = "down";
1176 			break;
1177 		}
1178 
1179 		switch (conf0 & BYT_PULL_STR_MASK) {
1180 		case BYT_PULL_STR_2K:
1181 			pull_str = "2k";
1182 			break;
1183 		case BYT_PULL_STR_10K:
1184 			pull_str = "10k";
1185 			break;
1186 		case BYT_PULL_STR_20K:
1187 			pull_str = "20k";
1188 			break;
1189 		case BYT_PULL_STR_40K:
1190 			pull_str = "40k";
1191 			break;
1192 		}
1193 
1194 		seq_printf(s,
1195 			   " gpio-%-3d (%-20.20s) %s %s %s pad-%-3d offset:0x%03x mux:%d %s%s%s",
1196 			   pin,
1197 			   label ?: "Unrequested",
1198 			   val & BYT_INPUT_EN ? "  " : "in",
1199 			   val & BYT_OUTPUT_EN ? "   " : "out",
1200 			   str_hi_lo(val & BYT_LEVEL),
1201 			   comm->pad_map[i], comm->pad_map[i] * 16,
1202 			   conf0 & 0x7,
1203 			   conf0 & BYT_TRIG_NEG ? " fall" : "     ",
1204 			   conf0 & BYT_TRIG_POS ? " rise" : "     ",
1205 			   conf0 & BYT_TRIG_LVL ? " level" : "      ");
1206 
1207 		if (pull && pull_str)
1208 			seq_printf(s, " %-4s %-3s", pull, pull_str);
1209 		else
1210 			seq_puts(s, "          ");
1211 
1212 		if (conf0 & BYT_IODEN)
1213 			seq_puts(s, " open-drain");
1214 
1215 		seq_puts(s, "\n");
1216 	}
1217 }
1218 
1219 static const struct gpio_chip byt_gpio_chip = {
1220 	.owner			= THIS_MODULE,
1221 	.request		= gpiochip_generic_request,
1222 	.free			= gpiochip_generic_free,
1223 	.get_direction		= byt_gpio_get_direction,
1224 	.direction_input	= byt_gpio_direction_input,
1225 	.direction_output	= byt_gpio_direction_output,
1226 	.get			= byt_gpio_get,
1227 	.set			= byt_gpio_set,
1228 	.set_config		= gpiochip_generic_config,
1229 	.dbg_show		= byt_gpio_dbg_show,
1230 };
1231 
1232 static void byt_irq_ack(struct irq_data *d)
1233 {
1234 	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1235 	struct intel_pinctrl *vg = gpiochip_get_data(gc);
1236 	irq_hw_number_t hwirq = irqd_to_hwirq(d);
1237 	void __iomem *reg;
1238 
1239 	reg = byt_gpio_reg(vg, hwirq, BYT_INT_STAT_REG);
1240 	if (!reg)
1241 		return;
1242 
1243 	guard(raw_spinlock)(&byt_lock);
1244 
1245 	writel(BIT(hwirq % 32), reg);
1246 }
1247 
1248 static void byt_irq_mask(struct irq_data *d)
1249 {
1250 	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1251 	struct intel_pinctrl *vg = gpiochip_get_data(gc);
1252 	irq_hw_number_t hwirq = irqd_to_hwirq(d);
1253 
1254 	byt_gpio_clear_triggering(vg, hwirq);
1255 	gpiochip_disable_irq(gc, hwirq);
1256 }
1257 
1258 static void byt_irq_unmask(struct irq_data *d)
1259 {
1260 	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1261 	struct intel_pinctrl *vg = gpiochip_get_data(gc);
1262 	irq_hw_number_t hwirq = irqd_to_hwirq(d);
1263 	void __iomem *reg;
1264 	u32 value;
1265 
1266 	gpiochip_enable_irq(gc, hwirq);
1267 
1268 	reg = byt_gpio_reg(vg, hwirq, BYT_CONF0_REG);
1269 	if (!reg)
1270 		return;
1271 
1272 	guard(raw_spinlock_irqsave)(&byt_lock);
1273 
1274 	value = readl(reg);
1275 
1276 	switch (irqd_get_trigger_type(d)) {
1277 	case IRQ_TYPE_LEVEL_HIGH:
1278 		value |= BYT_TRIG_LVL;
1279 		fallthrough;
1280 	case IRQ_TYPE_EDGE_RISING:
1281 		value |= BYT_TRIG_POS;
1282 		break;
1283 	case IRQ_TYPE_LEVEL_LOW:
1284 		value |= BYT_TRIG_LVL;
1285 		fallthrough;
1286 	case IRQ_TYPE_EDGE_FALLING:
1287 		value |= BYT_TRIG_NEG;
1288 		break;
1289 	case IRQ_TYPE_EDGE_BOTH:
1290 		value |= (BYT_TRIG_NEG | BYT_TRIG_POS);
1291 		break;
1292 	}
1293 
1294 	writel(value, reg);
1295 }
1296 
1297 static int byt_irq_type(struct irq_data *d, unsigned int type)
1298 {
1299 	struct intel_pinctrl *vg = gpiochip_get_data(irq_data_get_irq_chip_data(d));
1300 	irq_hw_number_t hwirq = irqd_to_hwirq(d);
1301 	void __iomem *reg;
1302 	u32 value;
1303 
1304 	reg = byt_gpio_reg(vg, hwirq, BYT_CONF0_REG);
1305 	if (!reg)
1306 		return -EINVAL;
1307 
1308 	guard(raw_spinlock_irqsave)(&byt_lock);
1309 
1310 	value = readl(reg);
1311 
1312 	WARN(value & BYT_DIRECT_IRQ_EN,
1313 	     "Bad pad config for IO mode, force DIRECT_IRQ_EN bit clearing");
1314 
1315 	/* For level trigges the BYT_TRIG_POS and BYT_TRIG_NEG bits
1316 	 * are used to indicate high and low level triggering
1317 	 */
1318 	value &= ~(BYT_DIRECT_IRQ_EN | BYT_TRIG_POS | BYT_TRIG_NEG |
1319 		   BYT_TRIG_LVL);
1320 	/* Enable glitch filtering */
1321 	value |= BYT_GLITCH_FILTER_EN | BYT_GLITCH_F_SLOW_CLK |
1322 		 BYT_GLITCH_F_FAST_CLK;
1323 
1324 	writel(value, reg);
1325 
1326 	if (type & IRQ_TYPE_EDGE_BOTH)
1327 		irq_set_handler_locked(d, handle_edge_irq);
1328 	else if (type & IRQ_TYPE_LEVEL_MASK)
1329 		irq_set_handler_locked(d, handle_level_irq);
1330 
1331 	return 0;
1332 }
1333 
1334 static const struct irq_chip byt_gpio_irq_chip = {
1335 	.name		= "BYT-GPIO",
1336 	.irq_ack	= byt_irq_ack,
1337 	.irq_mask	= byt_irq_mask,
1338 	.irq_unmask	= byt_irq_unmask,
1339 	.irq_set_type	= byt_irq_type,
1340 	.flags		= IRQCHIP_SKIP_SET_WAKE | IRQCHIP_SET_TYPE_MASKED | IRQCHIP_IMMUTABLE,
1341 	GPIOCHIP_IRQ_RESOURCE_HELPERS,
1342 };
1343 
1344 static void byt_gpio_irq_handler(struct irq_desc *desc)
1345 {
1346 	struct irq_data *data = irq_desc_get_irq_data(desc);
1347 	struct intel_pinctrl *vg = gpiochip_get_data(irq_desc_get_handler_data(desc));
1348 	struct irq_chip *chip = irq_data_get_irq_chip(data);
1349 	u32 base, pin;
1350 	void __iomem *reg;
1351 	unsigned long pending;
1352 
1353 	/* check from GPIO controller which pin triggered the interrupt */
1354 	for (base = 0; base < vg->chip.ngpio; base += 32) {
1355 		reg = byt_gpio_reg(vg, base, BYT_INT_STAT_REG);
1356 
1357 		if (!reg) {
1358 			dev_warn(vg->dev, "Pin %i: can't retrieve INT_STAT%u\n", base / 32, base);
1359 			continue;
1360 		}
1361 
1362 		scoped_guard(raw_spinlock, &byt_lock)
1363 			pending = readl(reg);
1364 		for_each_set_bit(pin, &pending, 32)
1365 			generic_handle_domain_irq(vg->chip.irq.domain, base + pin);
1366 	}
1367 	chip->irq_eoi(data);
1368 }
1369 
1370 static bool byt_direct_irq_sanity_check(struct intel_pinctrl *vg, int pin, u32 conf0)
1371 {
1372 	int direct_irq, ioapic_direct_irq_base;
1373 	u8 *match, direct_irq_mux[16];
1374 	u32 trig;
1375 
1376 	memcpy_fromio(direct_irq_mux, vg->communities->pad_regs + BYT_DIRECT_IRQ_REG,
1377 		      sizeof(direct_irq_mux));
1378 	match = memchr(direct_irq_mux, pin, sizeof(direct_irq_mux));
1379 	if (!match) {
1380 		dev_warn(vg->dev, FW_BUG "Pin %i: DIRECT_IRQ_EN set but no IRQ assigned, clearing\n", pin);
1381 		return false;
1382 	}
1383 
1384 	direct_irq = match - direct_irq_mux;
1385 	/* Base IO-APIC pin numbers come from atom-e3800-family-datasheet.pdf */
1386 	ioapic_direct_irq_base = (vg->communities->npins == BYT_NGPIO_SCORE) ? 51 : 67;
1387 	dev_dbg(vg->dev, "Pin %i: uses direct IRQ %d (IO-APIC %d)\n", pin,
1388 		direct_irq, direct_irq + ioapic_direct_irq_base);
1389 
1390 	/*
1391 	 * Testing has shown that the way direct IRQs work is that the combination of the
1392 	 * direct-irq-en flag and the direct IRQ mux connect the output of the GPIO's IRQ
1393 	 * trigger block, which normally sets the status flag in the IRQ status reg at
1394 	 * 0x800, to one of the IO-APIC pins according to the mux registers.
1395 	 *
1396 	 * This means that:
1397 	 * 1. The TRIG_MASK bits must be set to configure the GPIO's IRQ trigger block
1398 	 * 2. The TRIG_LVL bit *must* be set, so that the GPIO's input value is directly
1399 	 *    passed (1:1 or inverted) to the IO-APIC pin, if TRIG_LVL is not set,
1400 	 *    selecting edge mode operation then on the first edge the IO-APIC pin goes
1401 	 *    high, but since no write-to-clear write will be done to the IRQ status reg
1402 	 *    at 0x800, the detected edge condition will never get cleared.
1403 	 */
1404 	trig = conf0 & BYT_TRIG_MASK;
1405 	if (trig != (BYT_TRIG_POS | BYT_TRIG_LVL) &&
1406 	    trig != (BYT_TRIG_NEG | BYT_TRIG_LVL)) {
1407 		dev_warn(vg->dev,
1408 			 FW_BUG "Pin %i: DIRECT_IRQ_EN set without trigger (CONF0: %#08x), clearing\n",
1409 			 pin, conf0);
1410 		return false;
1411 	}
1412 
1413 	return true;
1414 }
1415 
1416 static void byt_init_irq_valid_mask(struct gpio_chip *chip,
1417 				    unsigned long *valid_mask,
1418 				    unsigned int ngpios)
1419 {
1420 	struct intel_pinctrl *vg = gpiochip_get_data(chip);
1421 	void __iomem *reg;
1422 	u32 value;
1423 	int i;
1424 
1425 	/*
1426 	 * Clear interrupt triggers for all pins that are GPIOs and
1427 	 * do not use direct IRQ mode. This will prevent spurious
1428 	 * interrupts from misconfigured pins.
1429 	 */
1430 	for (i = 0; i < vg->soc->npins; i++) {
1431 		unsigned int pin = vg->soc->pins[i].number;
1432 
1433 		reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
1434 		if (!reg) {
1435 			dev_warn(vg->dev, "Pin %i: could not retrieve CONF0\n", i);
1436 			continue;
1437 		}
1438 
1439 		value = readl(reg);
1440 		if (value & BYT_DIRECT_IRQ_EN) {
1441 			if (byt_direct_irq_sanity_check(vg, i, value)) {
1442 				clear_bit(i, valid_mask);
1443 			} else {
1444 				value &= ~(BYT_DIRECT_IRQ_EN | BYT_TRIG_POS |
1445 					   BYT_TRIG_NEG | BYT_TRIG_LVL);
1446 				writel(value, reg);
1447 			}
1448 		} else if ((value & BYT_PIN_MUX) == byt_get_gpio_mux(vg, i)) {
1449 			byt_gpio_clear_triggering(vg, i);
1450 			dev_dbg(vg->dev, "disabling GPIO %d\n", i);
1451 		}
1452 	}
1453 }
1454 
1455 static int byt_gpio_irq_init_hw(struct gpio_chip *chip)
1456 {
1457 	struct intel_pinctrl *vg = gpiochip_get_data(chip);
1458 	void __iomem *reg;
1459 	u32 base, value;
1460 
1461 	/* clear interrupt status trigger registers */
1462 	for (base = 0; base < vg->soc->npins; base += 32) {
1463 		reg = byt_gpio_reg(vg, base, BYT_INT_STAT_REG);
1464 
1465 		if (!reg) {
1466 			dev_warn(vg->dev, "Pin %i: can't retrieve INT_STAT%u\n", base / 32, base);
1467 			continue;
1468 		}
1469 
1470 		writel(0xffffffff, reg);
1471 		/* make sure trigger bits are cleared, if not then a pin
1472 		   might be misconfigured in bios */
1473 		value = readl(reg);
1474 		if (value)
1475 			dev_err(vg->dev,
1476 				"GPIO interrupt error, pins misconfigured. INT_STAT%u: %#08x\n",
1477 				base / 32, value);
1478 	}
1479 
1480 	return 0;
1481 }
1482 
1483 static int byt_gpio_add_pin_ranges(struct gpio_chip *chip)
1484 {
1485 	struct intel_pinctrl *vg = gpiochip_get_data(chip);
1486 	struct device *dev = vg->dev;
1487 	int ret;
1488 
1489 	ret = gpiochip_add_pin_range(chip, dev_name(dev), 0, 0, vg->soc->npins);
1490 	if (ret)
1491 		dev_err(dev, "failed to add GPIO pin range\n");
1492 
1493 	return ret;
1494 }
1495 
1496 static int byt_gpio_probe(struct intel_pinctrl *vg)
1497 {
1498 	struct platform_device *pdev = to_platform_device(vg->dev);
1499 	struct gpio_chip *gc;
1500 	int irq, ret;
1501 
1502 	/* Set up gpio chip */
1503 	vg->chip	= byt_gpio_chip;
1504 	gc		= &vg->chip;
1505 	gc->label	= dev_name(vg->dev);
1506 	gc->base	= -1;
1507 	gc->can_sleep	= false;
1508 	gc->add_pin_ranges = byt_gpio_add_pin_ranges;
1509 	gc->parent	= vg->dev;
1510 	gc->ngpio	= vg->soc->npins;
1511 
1512 #ifdef CONFIG_PM_SLEEP
1513 	vg->context.pads = devm_kcalloc(vg->dev, gc->ngpio, sizeof(*vg->context.pads),
1514 					GFP_KERNEL);
1515 	if (!vg->context.pads)
1516 		return -ENOMEM;
1517 #endif
1518 
1519 	/* set up interrupts  */
1520 	irq = platform_get_irq_optional(pdev, 0);
1521 	if (irq > 0) {
1522 		struct gpio_irq_chip *girq;
1523 
1524 		girq = &gc->irq;
1525 		gpio_irq_chip_set_chip(girq, &byt_gpio_irq_chip);
1526 		girq->init_hw = byt_gpio_irq_init_hw;
1527 		girq->init_valid_mask = byt_init_irq_valid_mask;
1528 		girq->parent_handler = byt_gpio_irq_handler;
1529 		girq->num_parents = 1;
1530 		girq->parents = devm_kcalloc(vg->dev, girq->num_parents,
1531 					     sizeof(*girq->parents), GFP_KERNEL);
1532 		if (!girq->parents)
1533 			return -ENOMEM;
1534 		girq->parents[0] = irq;
1535 		girq->default_type = IRQ_TYPE_NONE;
1536 		girq->handler = handle_bad_irq;
1537 	}
1538 
1539 	ret = devm_gpiochip_add_data(vg->dev, gc, vg);
1540 	if (ret) {
1541 		dev_err(vg->dev, "failed adding byt-gpio chip\n");
1542 		return ret;
1543 	}
1544 
1545 	return ret;
1546 }
1547 
1548 static int byt_set_soc_data(struct intel_pinctrl *vg,
1549 			    const struct intel_pinctrl_soc_data *soc)
1550 {
1551 	struct platform_device *pdev = to_platform_device(vg->dev);
1552 	int i;
1553 
1554 	vg->soc = soc;
1555 
1556 	vg->ncommunities = vg->soc->ncommunities;
1557 	vg->communities = devm_kcalloc(vg->dev, vg->ncommunities,
1558 				       sizeof(*vg->communities), GFP_KERNEL);
1559 	if (!vg->communities)
1560 		return -ENOMEM;
1561 
1562 	for (i = 0; i < vg->soc->ncommunities; i++) {
1563 		struct intel_community *comm = vg->communities + i;
1564 
1565 		*comm = vg->soc->communities[i];
1566 
1567 		comm->pad_regs = devm_platform_ioremap_resource(pdev, 0);
1568 		if (IS_ERR(comm->pad_regs))
1569 			return PTR_ERR(comm->pad_regs);
1570 	}
1571 
1572 	return 0;
1573 }
1574 
1575 static const struct acpi_device_id byt_gpio_acpi_match[] = {
1576 	{ "INT33B2", (kernel_ulong_t)byt_soc_data },
1577 	{ "INT33FC", (kernel_ulong_t)byt_soc_data },
1578 	{ }
1579 };
1580 
1581 static int byt_pinctrl_probe(struct platform_device *pdev)
1582 {
1583 	const struct intel_pinctrl_soc_data *soc_data;
1584 	struct device *dev = &pdev->dev;
1585 	struct intel_pinctrl *vg;
1586 	int ret;
1587 
1588 	soc_data = intel_pinctrl_get_soc_data(pdev);
1589 	if (IS_ERR(soc_data))
1590 		return PTR_ERR(soc_data);
1591 
1592 	vg = devm_kzalloc(dev, sizeof(*vg), GFP_KERNEL);
1593 	if (!vg)
1594 		return -ENOMEM;
1595 
1596 	vg->dev = dev;
1597 	ret = byt_set_soc_data(vg, soc_data);
1598 	if (ret) {
1599 		dev_err(dev, "failed to set soc data\n");
1600 		return ret;
1601 	}
1602 
1603 	vg->pctldesc		= byt_pinctrl_desc;
1604 	vg->pctldesc.name	= dev_name(dev);
1605 	vg->pctldesc.pins	= vg->soc->pins;
1606 	vg->pctldesc.npins	= vg->soc->npins;
1607 
1608 	vg->pctldev = devm_pinctrl_register(dev, &vg->pctldesc, vg);
1609 	if (IS_ERR(vg->pctldev)) {
1610 		dev_err(dev, "failed to register pinctrl driver\n");
1611 		return PTR_ERR(vg->pctldev);
1612 	}
1613 
1614 	ret = byt_gpio_probe(vg);
1615 	if (ret)
1616 		return ret;
1617 
1618 	platform_set_drvdata(pdev, vg);
1619 
1620 	return 0;
1621 }
1622 
1623 static int byt_gpio_suspend(struct device *dev)
1624 {
1625 	struct intel_pinctrl *vg = dev_get_drvdata(dev);
1626 	int i;
1627 
1628 	guard(raw_spinlock_irqsave)(&byt_lock);
1629 
1630 	for (i = 0; i < vg->soc->npins; i++) {
1631 		void __iomem *reg;
1632 		u32 value;
1633 		unsigned int pin = vg->soc->pins[i].number;
1634 
1635 		reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
1636 		if (!reg) {
1637 			dev_warn(vg->dev, "Pin %i: can't retrieve CONF0\n", i);
1638 			continue;
1639 		}
1640 		value = readl(reg) & BYT_CONF0_RESTORE_MASK;
1641 		vg->context.pads[i].conf0 = value;
1642 
1643 		reg = byt_gpio_reg(vg, pin, BYT_VAL_REG);
1644 		if (!reg) {
1645 			dev_warn(vg->dev, "Pin %i: can't retrieve VAL\n", i);
1646 			continue;
1647 		}
1648 		value = readl(reg) & BYT_VAL_RESTORE_MASK;
1649 		vg->context.pads[i].val = value;
1650 	}
1651 
1652 	return 0;
1653 }
1654 
1655 static int byt_gpio_resume(struct device *dev)
1656 {
1657 	struct intel_pinctrl *vg = dev_get_drvdata(dev);
1658 	int i;
1659 
1660 	guard(raw_spinlock_irqsave)(&byt_lock);
1661 
1662 	for (i = 0; i < vg->soc->npins; i++) {
1663 		void __iomem *reg;
1664 		u32 value;
1665 		unsigned int pin = vg->soc->pins[i].number;
1666 
1667 		reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
1668 		if (!reg) {
1669 			dev_warn(vg->dev, "Pin %i: can't retrieve CONF0\n", i);
1670 			continue;
1671 		}
1672 		value = readl(reg);
1673 		if ((value & BYT_CONF0_RESTORE_MASK) !=
1674 		     vg->context.pads[i].conf0) {
1675 			value &= ~BYT_CONF0_RESTORE_MASK;
1676 			value |= vg->context.pads[i].conf0;
1677 			writel(value, reg);
1678 			dev_info(dev, "restored pin %d CONF0 %#08x", i, value);
1679 		}
1680 
1681 		reg = byt_gpio_reg(vg, pin, BYT_VAL_REG);
1682 		if (!reg) {
1683 			dev_warn(vg->dev, "Pin %i: can't retrieve VAL\n", i);
1684 			continue;
1685 		}
1686 		value = readl(reg);
1687 		if ((value & BYT_VAL_RESTORE_MASK) !=
1688 		     vg->context.pads[i].val) {
1689 			u32 v;
1690 
1691 			v = value & ~BYT_VAL_RESTORE_MASK;
1692 			v |= vg->context.pads[i].val;
1693 			if (v != value) {
1694 				writel(v, reg);
1695 				dev_dbg(dev, "restored pin %d VAL %#08x\n", i, v);
1696 			}
1697 		}
1698 	}
1699 
1700 	return 0;
1701 }
1702 
1703 static const struct dev_pm_ops byt_gpio_pm_ops = {
1704 	LATE_SYSTEM_SLEEP_PM_OPS(byt_gpio_suspend, byt_gpio_resume)
1705 };
1706 
1707 static struct platform_driver byt_gpio_driver = {
1708 	.probe          = byt_pinctrl_probe,
1709 	.driver         = {
1710 		.name			= "byt_gpio",
1711 		.pm			= pm_sleep_ptr(&byt_gpio_pm_ops),
1712 		.acpi_match_table	= byt_gpio_acpi_match,
1713 		.suppress_bind_attrs	= true,
1714 	},
1715 };
1716 
1717 static int __init byt_gpio_init(void)
1718 {
1719 	return platform_driver_register(&byt_gpio_driver);
1720 }
1721 subsys_initcall(byt_gpio_init);
1722 
1723 MODULE_IMPORT_NS(PINCTRL_INTEL);
1724