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