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