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