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