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