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