1 // SPDX-License-Identifier: GPL-2.0
3 * Pinctrl GPIO driver for Intel Baytrail
5 * Copyright (c) 2012-2013, Intel Corporation
6 * Author: Mathias Nyman <mathias.nyman@linux.intel.com>
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>
17 #include <linux/module.h>
18 #include <linux/types.h>
19 #include <linux/platform_device.h>
21 #include <linux/property.h>
22 #include <linux/seq_file.h>
23 #include <linux/string_helpers.h>
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>
30 #include "pinctrl-intel.h"
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
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)
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)
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)
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
82 #define BYT_NGPIO_SCORE 102
83 #define BYT_NGPIO_NCORE 28
84 #define BYT_NGPIO_SUS 44
86 #define BYT_SCORE_ACPI_UID "1"
87 #define BYT_NCORE_ACPI_UID "2"
88 #define BYT_SUS_ACPI_UID "3"
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.
96 #define BYT_DEFAULT_GPIO_MUX 0
97 #define BYT_ALTER_GPIO_MUX 1
99 struct intel_pad_context {
104 #define COMMUNITY(p, n, map) \
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"),
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,
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 };
235 static const unsigned int byt_score_pwm0_pins[] = { 94 };
236 static const unsigned int byt_score_pwm1_pins[] = { 95 };
238 static const unsigned int byt_score_sio_spi_pins[] = { 66, 67, 68, 69 };
240 static const unsigned int byt_score_i2c5_pins[] = { 88, 89 };
241 static const unsigned int byt_score_i2c6_pins[] = { 90, 91 };
242 static const unsigned int byt_score_i2c4_pins[] = { 86, 87 };
243 static const unsigned int byt_score_i2c3_pins[] = { 84, 85 };
244 static const unsigned int byt_score_i2c2_pins[] = { 82, 83 };
245 static const unsigned int byt_score_i2c1_pins[] = { 80, 81 };
246 static const unsigned int byt_score_i2c0_pins[] = { 78, 79 };
248 static const unsigned int byt_score_ssp0_pins[] = { 8, 9, 10, 11 };
249 static const unsigned int byt_score_ssp1_pins[] = { 12, 13, 14, 15 };
250 static const unsigned int byt_score_ssp2_pins[] = { 62, 63, 64, 65 };
252 static const unsigned int byt_score_sdcard_pins[] = {
253 7, 33, 34, 35, 36, 37, 38, 39, 40, 41,
255 static const unsigned int byt_score_sdcard_mux_values[] = {
256 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
259 static const unsigned int byt_score_sdio_pins[] = { 27, 28, 29, 30, 31, 32 };
261 static const unsigned int byt_score_emmc_pins[] = {
262 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
265 static const unsigned int byt_score_ilb_lpc_pins[] = {
266 42, 43, 44, 45, 46, 47, 48, 49, 50,
269 static const unsigned int byt_score_sata_pins[] = { 0, 1, 2 };
271 static const unsigned int byt_score_plt_clk0_pins[] = { 96 };
272 static const unsigned int byt_score_plt_clk1_pins[] = { 97 };
273 static const unsigned int byt_score_plt_clk2_pins[] = { 98 };
274 static const unsigned int byt_score_plt_clk3_pins[] = { 99 };
275 static const unsigned int byt_score_plt_clk4_pins[] = { 100 };
276 static const unsigned int byt_score_plt_clk5_pins[] = { 101 };
278 static const unsigned int byt_score_smbus_pins[] = { 51, 52, 53 };
280 static const struct intel_pingroup byt_score_groups[] = {
281 PIN_GROUP("uart1_grp", byt_score_uart1_pins, 1),
282 PIN_GROUP("uart2_grp", byt_score_uart2_pins, 1),
283 PIN_GROUP("pwm0_grp", byt_score_pwm0_pins, 1),
284 PIN_GROUP("pwm1_grp", byt_score_pwm1_pins, 1),
285 PIN_GROUP("ssp2_grp", byt_score_ssp2_pins, 1),
286 PIN_GROUP("sio_spi_grp", byt_score_sio_spi_pins, 1),
287 PIN_GROUP("i2c5_grp", byt_score_i2c5_pins, 1),
288 PIN_GROUP("i2c6_grp", byt_score_i2c6_pins, 1),
289 PIN_GROUP("i2c4_grp", byt_score_i2c4_pins, 1),
290 PIN_GROUP("i2c3_grp", byt_score_i2c3_pins, 1),
291 PIN_GROUP("i2c2_grp", byt_score_i2c2_pins, 1),
292 PIN_GROUP("i2c1_grp", byt_score_i2c1_pins, 1),
293 PIN_GROUP("i2c0_grp", byt_score_i2c0_pins, 1),
294 PIN_GROUP("ssp0_grp", byt_score_ssp0_pins, 1),
295 PIN_GROUP("ssp1_grp", byt_score_ssp1_pins, 1),
296 PIN_GROUP("sdcard_grp", byt_score_sdcard_pins, byt_score_sdcard_mux_values),
297 PIN_GROUP("sdio_grp", byt_score_sdio_pins, 1),
298 PIN_GROUP("emmc_grp", byt_score_emmc_pins, 1),
299 PIN_GROUP("lpc_grp", byt_score_ilb_lpc_pins, 1),
300 PIN_GROUP("sata_grp", byt_score_sata_pins, 1),
301 PIN_GROUP("plt_clk0_grp", byt_score_plt_clk0_pins, 1),
302 PIN_GROUP("plt_clk1_grp", byt_score_plt_clk1_pins, 1),
303 PIN_GROUP("plt_clk2_grp", byt_score_plt_clk2_pins, 1),
304 PIN_GROUP("plt_clk3_grp", byt_score_plt_clk3_pins, 1),
305 PIN_GROUP("plt_clk4_grp", byt_score_plt_clk4_pins, 1),
306 PIN_GROUP("plt_clk5_grp", byt_score_plt_clk5_pins, 1),
307 PIN_GROUP("smbus_grp", byt_score_smbus_pins, 1),
310 static const char * const byt_score_uart_groups[] = {
311 "uart1_grp", "uart2_grp",
313 static const char * const byt_score_pwm_groups[] = {
314 "pwm0_grp", "pwm1_grp",
316 static const char * const byt_score_ssp_groups[] = {
317 "ssp0_grp", "ssp1_grp", "ssp2_grp",
319 static const char * const byt_score_spi_groups[] = { "sio_spi_grp" };
320 static const char * const byt_score_i2c_groups[] = {
321 "i2c0_grp", "i2c1_grp", "i2c2_grp", "i2c3_grp", "i2c4_grp", "i2c5_grp",
324 static const char * const byt_score_sdcard_groups[] = { "sdcard_grp" };
325 static const char * const byt_score_sdio_groups[] = { "sdio_grp" };
326 static const char * const byt_score_emmc_groups[] = { "emmc_grp" };
327 static const char * const byt_score_lpc_groups[] = { "lpc_grp" };
328 static const char * const byt_score_sata_groups[] = { "sata_grp" };
329 static const char * const byt_score_plt_clk_groups[] = {
330 "plt_clk0_grp", "plt_clk1_grp", "plt_clk2_grp", "plt_clk3_grp",
331 "plt_clk4_grp", "plt_clk5_grp",
333 static const char * const byt_score_smbus_groups[] = { "smbus_grp" };
334 static const char * const byt_score_gpio_groups[] = {
335 "uart1_grp", "uart2_grp", "pwm0_grp", "pwm1_grp", "ssp0_grp",
336 "ssp1_grp", "ssp2_grp", "sio_spi_grp", "i2c0_grp", "i2c1_grp",
337 "i2c2_grp", "i2c3_grp", "i2c4_grp", "i2c5_grp", "i2c6_grp",
338 "sdcard_grp", "sdio_grp", "emmc_grp", "lpc_grp", "sata_grp",
339 "plt_clk0_grp", "plt_clk1_grp", "plt_clk2_grp", "plt_clk3_grp",
340 "plt_clk4_grp", "plt_clk5_grp", "smbus_grp",
343 static const struct intel_function byt_score_functions[] = {
344 FUNCTION("uart", byt_score_uart_groups),
345 FUNCTION("pwm", byt_score_pwm_groups),
346 FUNCTION("ssp", byt_score_ssp_groups),
347 FUNCTION("spi", byt_score_spi_groups),
348 FUNCTION("i2c", byt_score_i2c_groups),
349 FUNCTION("sdcard", byt_score_sdcard_groups),
350 FUNCTION("sdio", byt_score_sdio_groups),
351 FUNCTION("emmc", byt_score_emmc_groups),
352 FUNCTION("lpc", byt_score_lpc_groups),
353 FUNCTION("sata", byt_score_sata_groups),
354 FUNCTION("plt_clk", byt_score_plt_clk_groups),
355 FUNCTION("smbus", byt_score_smbus_groups),
356 FUNCTION("gpio", byt_score_gpio_groups),
359 static const struct intel_community byt_score_communities[] = {
360 COMMUNITY(0, BYT_NGPIO_SCORE, byt_score_pins_map),
363 static const struct intel_pinctrl_soc_data byt_score_soc_data = {
364 .uid = BYT_SCORE_ACPI_UID,
365 .pins = byt_score_pins,
366 .npins = ARRAY_SIZE(byt_score_pins),
367 .groups = byt_score_groups,
368 .ngroups = ARRAY_SIZE(byt_score_groups),
369 .functions = byt_score_functions,
370 .nfunctions = ARRAY_SIZE(byt_score_functions),
371 .communities = byt_score_communities,
372 .ncommunities = ARRAY_SIZE(byt_score_communities),
375 /* SUS pins, aka GPIOS_<pin_no> or GPIO_S5[<pin_no>] */
376 static const struct pinctrl_pin_desc byt_sus_pins[] = {
377 PINCTRL_PIN(0, "GPIO_S50"),
378 PINCTRL_PIN(1, "GPIO_S51"),
379 PINCTRL_PIN(2, "GPIO_S52"),
380 PINCTRL_PIN(3, "GPIO_S53"),
381 PINCTRL_PIN(4, "GPIO_S54"),
382 PINCTRL_PIN(5, "GPIO_S55"),
383 PINCTRL_PIN(6, "GPIO_S56"),
384 PINCTRL_PIN(7, "GPIO_S57"),
385 PINCTRL_PIN(8, "GPIO_S58"),
386 PINCTRL_PIN(9, "GPIO_S59"),
387 PINCTRL_PIN(10, "GPIO_S510"),
388 PINCTRL_PIN(11, "PMC_SUSPWRDNACK"),
389 PINCTRL_PIN(12, "PMC_SUSCLK0"),
390 PINCTRL_PIN(13, "GPIO_S513"),
391 PINCTRL_PIN(14, "USB_ULPI_RST"),
392 PINCTRL_PIN(15, "PMC_WAKE_PCIE0#"),
393 PINCTRL_PIN(16, "PMC_PWRBTN"),
394 PINCTRL_PIN(17, "GPIO_S517"),
395 PINCTRL_PIN(18, "PMC_SUS_STAT"),
396 PINCTRL_PIN(19, "USB_OC0"),
397 PINCTRL_PIN(20, "USB_OC1"),
398 PINCTRL_PIN(21, "PCU_SPI_CS1"),
399 PINCTRL_PIN(22, "GPIO_S522"),
400 PINCTRL_PIN(23, "GPIO_S523"),
401 PINCTRL_PIN(24, "GPIO_S524"),
402 PINCTRL_PIN(25, "GPIO_S525"),
403 PINCTRL_PIN(26, "GPIO_S526"),
404 PINCTRL_PIN(27, "GPIO_S527"),
405 PINCTRL_PIN(28, "GPIO_S528"),
406 PINCTRL_PIN(29, "GPIO_S529"),
407 PINCTRL_PIN(30, "GPIO_S530"),
408 PINCTRL_PIN(31, "USB_ULPI_CLK"),
409 PINCTRL_PIN(32, "USB_ULPI_DATA0"),
410 PINCTRL_PIN(33, "USB_ULPI_DATA1"),
411 PINCTRL_PIN(34, "USB_ULPI_DATA2"),
412 PINCTRL_PIN(35, "USB_ULPI_DATA3"),
413 PINCTRL_PIN(36, "USB_ULPI_DATA4"),
414 PINCTRL_PIN(37, "USB_ULPI_DATA5"),
415 PINCTRL_PIN(38, "USB_ULPI_DATA6"),
416 PINCTRL_PIN(39, "USB_ULPI_DATA7"),
417 PINCTRL_PIN(40, "USB_ULPI_DIR"),
418 PINCTRL_PIN(41, "USB_ULPI_NXT"),
419 PINCTRL_PIN(42, "USB_ULPI_STP"),
420 PINCTRL_PIN(43, "USB_ULPI_REFCLK"),
423 static const unsigned int byt_sus_pins_map[BYT_NGPIO_SUS] = {
424 29, 33, 30, 31, 32, 34, 36, 35, 38, 37,
425 18, 7, 11, 20, 17, 1, 8, 10, 19, 12,
426 0, 2, 23, 39, 28, 27, 22, 21, 24, 25,
427 26, 51, 56, 54, 49, 55, 48, 57, 50, 58,
431 static const unsigned int byt_sus_usb_over_current_pins[] = { 19, 20 };
432 static const unsigned int byt_sus_usb_over_current_mode_values[] = { 0, 0 };
433 static const unsigned int byt_sus_usb_over_current_gpio_mode_values[] = { 1, 1 };
435 static const unsigned int byt_sus_usb_ulpi_pins[] = {
436 14, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
438 static const unsigned int byt_sus_usb_ulpi_mode_values[] = {
439 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
441 static const unsigned int byt_sus_usb_ulpi_gpio_mode_values[] = {
442 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
445 static const unsigned int byt_sus_pcu_spi_pins[] = { 21 };
446 static const unsigned int byt_sus_pcu_spi_mode_values[] = { 0 };
447 static const unsigned int byt_sus_pcu_spi_gpio_mode_values[] = { 1 };
449 static const unsigned int byt_sus_pmu_clk1_pins[] = { 5 };
450 static const unsigned int byt_sus_pmu_clk2_pins[] = { 6 };
452 static const struct intel_pingroup byt_sus_groups[] = {
453 PIN_GROUP("usb_oc_grp", byt_sus_usb_over_current_pins, byt_sus_usb_over_current_mode_values),
454 PIN_GROUP("usb_ulpi_grp", byt_sus_usb_ulpi_pins, byt_sus_usb_ulpi_mode_values),
455 PIN_GROUP("pcu_spi_grp", byt_sus_pcu_spi_pins, byt_sus_pcu_spi_mode_values),
456 PIN_GROUP("usb_oc_grp_gpio", byt_sus_usb_over_current_pins, byt_sus_usb_over_current_gpio_mode_values),
457 PIN_GROUP("usb_ulpi_grp_gpio", byt_sus_usb_ulpi_pins, byt_sus_usb_ulpi_gpio_mode_values),
458 PIN_GROUP("pcu_spi_grp_gpio", byt_sus_pcu_spi_pins, byt_sus_pcu_spi_gpio_mode_values),
459 PIN_GROUP("pmu_clk1_grp", byt_sus_pmu_clk1_pins, 1),
460 PIN_GROUP("pmu_clk2_grp", byt_sus_pmu_clk2_pins, 1),
463 static const char * const byt_sus_usb_groups[] = {
464 "usb_oc_grp", "usb_ulpi_grp",
466 static const char * const byt_sus_spi_groups[] = { "pcu_spi_grp" };
467 static const char * const byt_sus_pmu_clk_groups[] = {
468 "pmu_clk1_grp", "pmu_clk2_grp",
470 static const char * const byt_sus_gpio_groups[] = {
471 "usb_oc_grp_gpio", "usb_ulpi_grp_gpio", "pcu_spi_grp_gpio",
472 "pmu_clk1_grp", "pmu_clk2_grp",
475 static const struct intel_function byt_sus_functions[] = {
476 FUNCTION("usb", byt_sus_usb_groups),
477 FUNCTION("spi", byt_sus_spi_groups),
478 FUNCTION("gpio", byt_sus_gpio_groups),
479 FUNCTION("pmu_clk", byt_sus_pmu_clk_groups),
482 static const struct intel_community byt_sus_communities[] = {
483 COMMUNITY(0, BYT_NGPIO_SUS, byt_sus_pins_map),
486 static const struct intel_pinctrl_soc_data byt_sus_soc_data = {
487 .uid = BYT_SUS_ACPI_UID,
488 .pins = byt_sus_pins,
489 .npins = ARRAY_SIZE(byt_sus_pins),
490 .groups = byt_sus_groups,
491 .ngroups = ARRAY_SIZE(byt_sus_groups),
492 .functions = byt_sus_functions,
493 .nfunctions = ARRAY_SIZE(byt_sus_functions),
494 .communities = byt_sus_communities,
495 .ncommunities = ARRAY_SIZE(byt_sus_communities),
498 static const struct pinctrl_pin_desc byt_ncore_pins[] = {
499 PINCTRL_PIN(0, "HV_DDI0_HPD"),
500 PINCTRL_PIN(1, "HV_DDI0_DDC_SDA"),
501 PINCTRL_PIN(2, "HV_DDI0_DDC_SCL"),
502 PINCTRL_PIN(3, "PANEL0_VDDEN"),
503 PINCTRL_PIN(4, "PANEL0_BKLTEN"),
504 PINCTRL_PIN(5, "PANEL0_BKLTCTL"),
505 PINCTRL_PIN(6, "HV_DDI1_HPD"),
506 PINCTRL_PIN(7, "HV_DDI1_DDC_SDA"),
507 PINCTRL_PIN(8, "HV_DDI1_DDC_SCL"),
508 PINCTRL_PIN(9, "PANEL1_VDDEN"),
509 PINCTRL_PIN(10, "PANEL1_BKLTEN"),
510 PINCTRL_PIN(11, "PANEL1_BKLTCTL"),
511 PINCTRL_PIN(12, "GP_INTD_DSI_TE1"),
512 PINCTRL_PIN(13, "HV_DDI2_DDC_SDA"),
513 PINCTRL_PIN(14, "HV_DDI2_DDC_SCL"),
514 PINCTRL_PIN(15, "GP_CAMERASB00"),
515 PINCTRL_PIN(16, "GP_CAMERASB01"),
516 PINCTRL_PIN(17, "GP_CAMERASB02"),
517 PINCTRL_PIN(18, "GP_CAMERASB03"),
518 PINCTRL_PIN(19, "GP_CAMERASB04"),
519 PINCTRL_PIN(20, "GP_CAMERASB05"),
520 PINCTRL_PIN(21, "GP_CAMERASB06"),
521 PINCTRL_PIN(22, "GP_CAMERASB07"),
522 PINCTRL_PIN(23, "GP_CAMERASB08"),
523 PINCTRL_PIN(24, "GP_CAMERASB09"),
524 PINCTRL_PIN(25, "GP_CAMERASB10"),
525 PINCTRL_PIN(26, "GP_CAMERASB11"),
526 PINCTRL_PIN(27, "GP_INTD_DSI_TE2"),
529 static const unsigned int byt_ncore_pins_map[BYT_NGPIO_NCORE] = {
530 19, 18, 17, 20, 21, 22, 24, 25, 23, 16,
531 14, 15, 12, 26, 27, 1, 4, 8, 11, 0,
532 3, 6, 10, 13, 2, 5, 9, 7,
535 static const struct intel_community byt_ncore_communities[] = {
536 COMMUNITY(0, BYT_NGPIO_NCORE, byt_ncore_pins_map),
539 static const struct intel_pinctrl_soc_data byt_ncore_soc_data = {
540 .uid = BYT_NCORE_ACPI_UID,
541 .pins = byt_ncore_pins,
542 .npins = ARRAY_SIZE(byt_ncore_pins),
543 .communities = byt_ncore_communities,
544 .ncommunities = ARRAY_SIZE(byt_ncore_communities),
547 static const struct intel_pinctrl_soc_data *byt_soc_data[] = {
554 static DEFINE_RAW_SPINLOCK(byt_lock);
556 static void __iomem *byt_gpio_reg(struct intel_pinctrl *vg, unsigned int offset,
559 struct intel_community *comm = intel_get_community(vg, offset);
565 offset -= comm->pin_base;
567 case BYT_INT_STAT_REG:
568 reg_offset = (offset / 32) * 4;
570 case BYT_DEBOUNCE_REG:
574 reg_offset = comm->pad_map[offset] * 16;
578 return comm->pad_regs + reg_offset + reg;
581 static const struct pinctrl_ops byt_pinctrl_ops = {
582 .get_groups_count = intel_get_groups_count,
583 .get_group_name = intel_get_group_name,
584 .get_group_pins = intel_get_group_pins,
587 static void byt_set_group_simple_mux(struct intel_pinctrl *vg,
588 const struct intel_pingroup group,
593 guard(raw_spinlock_irqsave)(&byt_lock);
595 for (i = 0; i < group.grp.npins; i++) {
596 void __iomem *padcfg0;
599 padcfg0 = byt_gpio_reg(vg, group.grp.pins[i], BYT_CONF0_REG);
601 dev_warn(vg->dev, "Group %s, pin %i not muxed (can't retrieve CONF0)\n",
606 value = readl(padcfg0);
607 value &= ~BYT_PIN_MUX;
609 writel(value, padcfg0);
613 static void byt_set_group_mixed_mux(struct intel_pinctrl *vg,
614 const struct intel_pingroup group,
615 const unsigned int *func)
619 guard(raw_spinlock_irqsave)(&byt_lock);
621 for (i = 0; i < group.grp.npins; i++) {
622 void __iomem *padcfg0;
625 padcfg0 = byt_gpio_reg(vg, group.grp.pins[i], BYT_CONF0_REG);
627 dev_warn(vg->dev, "Group %s, pin %i not muxed (can't retrieve CONF0)\n",
632 value = readl(padcfg0);
633 value &= ~BYT_PIN_MUX;
635 writel(value, padcfg0);
639 static int byt_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector,
640 unsigned int group_selector)
642 struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctldev);
643 const struct intel_function func = vg->soc->functions[func_selector];
644 const struct intel_pingroup group = vg->soc->groups[group_selector];
647 byt_set_group_mixed_mux(vg, group, group.modes);
648 else if (!strcmp(func.func.name, "gpio"))
649 byt_set_group_simple_mux(vg, group, BYT_DEFAULT_GPIO_MUX);
651 byt_set_group_simple_mux(vg, group, group.mode);
656 static u32 byt_get_gpio_mux(struct intel_pinctrl *vg, unsigned int offset)
658 /* SCORE pin 92-93 */
659 if (!strcmp(vg->soc->uid, BYT_SCORE_ACPI_UID) &&
660 offset >= 92 && offset <= 93)
661 return BYT_ALTER_GPIO_MUX;
664 if (!strcmp(vg->soc->uid, BYT_SUS_ACPI_UID) &&
665 offset >= 11 && offset <= 21)
666 return BYT_ALTER_GPIO_MUX;
668 return BYT_DEFAULT_GPIO_MUX;
671 static void byt_gpio_clear_triggering(struct intel_pinctrl *vg, unsigned int offset)
673 void __iomem *reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
676 guard(raw_spinlock_irqsave)(&byt_lock);
680 /* Do not clear direct-irq enabled IRQs (from gpio_disable_free) */
681 if (!(value & BYT_DIRECT_IRQ_EN))
682 value &= ~(BYT_TRIG_POS | BYT_TRIG_NEG | BYT_TRIG_LVL);
687 static int byt_gpio_request_enable(struct pinctrl_dev *pctl_dev,
688 struct pinctrl_gpio_range *range,
691 struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
692 void __iomem *reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
695 guard(raw_spinlock_irqsave)(&byt_lock);
698 * In most cases, func pin mux 000 means GPIO function.
699 * But, some pins may have func pin mux 001 represents
702 * Because there are devices out there where some pins were not
703 * configured correctly we allow changing the mux value from
704 * request (but print out warning about that).
706 value = readl(reg) & BYT_PIN_MUX;
707 gpio_mux = byt_get_gpio_mux(vg, offset);
708 if (gpio_mux == value)
711 value = readl(reg) & ~BYT_PIN_MUX;
715 dev_warn(vg->dev, FW_BUG "Pin %i: forcibly re-configured as GPIO\n", offset);
720 static void byt_gpio_disable_free(struct pinctrl_dev *pctl_dev,
721 struct pinctrl_gpio_range *range,
724 struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
726 byt_gpio_clear_triggering(vg, offset);
729 static void byt_gpio_direct_irq_check(struct intel_pinctrl *vg,
732 void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
735 * Before making any direction modifications, do a check if gpio is set
736 * for direct IRQ. On Bay Trail, setting GPIO to output does not make
737 * sense, so let's at least inform the caller before they shoot
738 * themselves in the foot.
740 if (readl(conf_reg) & BYT_DIRECT_IRQ_EN)
741 dev_info_once(vg->dev,
742 "Potential Error: Pin %i: forcibly set GPIO with DIRECT_IRQ_EN to output\n",
746 static int byt_gpio_set_direction(struct pinctrl_dev *pctl_dev,
747 struct pinctrl_gpio_range *range,
751 struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
752 void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
755 guard(raw_spinlock_irqsave)(&byt_lock);
757 value = readl(val_reg);
758 value &= ~BYT_DIR_MASK;
760 value |= BYT_OUTPUT_EN;
762 byt_gpio_direct_irq_check(vg, offset);
764 writel(value, val_reg);
769 static const struct pinmux_ops byt_pinmux_ops = {
770 .get_functions_count = intel_get_functions_count,
771 .get_function_name = intel_get_function_name,
772 .get_function_groups = intel_get_function_groups,
773 .set_mux = byt_set_mux,
774 .gpio_request_enable = byt_gpio_request_enable,
775 .gpio_disable_free = byt_gpio_disable_free,
776 .gpio_set_direction = byt_gpio_set_direction,
779 static void byt_get_pull_strength(u32 reg, u16 *strength)
781 switch (reg & BYT_PULL_STR_MASK) {
782 case BYT_PULL_STR_2K:
785 case BYT_PULL_STR_10K:
788 case BYT_PULL_STR_20K:
791 case BYT_PULL_STR_40K:
797 static int byt_set_pull_strength(u32 *reg, u16 strength)
799 *reg &= ~BYT_PULL_STR_MASK;
802 case 1: /* Set default strength value in case none is given */
804 *reg |= BYT_PULL_STR_2K;
807 *reg |= BYT_PULL_STR_10K;
810 *reg |= BYT_PULL_STR_20K;
813 *reg |= BYT_PULL_STR_40K;
822 static void byt_gpio_force_input_mode(struct intel_pinctrl *vg, unsigned int offset)
824 void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
828 if (!(value & BYT_INPUT_EN))
832 * Pull assignment is only applicable in input mode. If
833 * chip is not in input mode, set it and warn about it.
835 value &= ~BYT_INPUT_EN;
837 dev_warn(vg->dev, "Pin %i: forcibly set to input mode\n", offset);
840 static int byt_pin_config_get(struct pinctrl_dev *pctl_dev, unsigned int offset,
841 unsigned long *config)
843 struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
844 enum pin_config_param param = pinconf_to_config_param(*config);
845 void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
846 void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
847 void __iomem *db_reg = byt_gpio_reg(vg, offset, BYT_DEBOUNCE_REG);
848 u32 conf, pull, val, debounce;
851 scoped_guard(raw_spinlock_irqsave, &byt_lock) {
852 conf = readl(conf_reg);
853 val = readl(val_reg);
856 pull = conf & BYT_PULL_ASSIGN_MASK;
859 case PIN_CONFIG_BIAS_DISABLE:
863 case PIN_CONFIG_BIAS_PULL_DOWN:
864 /* Pull assignment is only applicable in input mode */
865 if ((val & BYT_INPUT_EN) || pull != BYT_PULL_ASSIGN_DOWN)
868 byt_get_pull_strength(conf, &arg);
871 case PIN_CONFIG_BIAS_PULL_UP:
872 /* Pull assignment is only applicable in input mode */
873 if ((val & BYT_INPUT_EN) || pull != BYT_PULL_ASSIGN_UP)
876 byt_get_pull_strength(conf, &arg);
879 case PIN_CONFIG_INPUT_DEBOUNCE:
880 if (!(conf & BYT_DEBOUNCE_EN))
883 scoped_guard(raw_spinlock_irqsave, &byt_lock)
884 debounce = readl(db_reg);
886 switch (debounce & BYT_DEBOUNCE_PULSE_MASK) {
887 case BYT_DEBOUNCE_PULSE_375US:
890 case BYT_DEBOUNCE_PULSE_750US:
893 case BYT_DEBOUNCE_PULSE_1500US:
896 case BYT_DEBOUNCE_PULSE_3MS:
899 case BYT_DEBOUNCE_PULSE_6MS:
902 case BYT_DEBOUNCE_PULSE_12MS:
905 case BYT_DEBOUNCE_PULSE_24MS:
917 *config = pinconf_to_config_packed(param, arg);
922 static int byt_pin_config_set(struct pinctrl_dev *pctl_dev,
924 unsigned long *configs,
925 unsigned int num_configs)
927 struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
928 void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
929 void __iomem *db_reg = byt_gpio_reg(vg, offset, BYT_DEBOUNCE_REG);
930 u32 conf, db_pulse, debounce;
931 enum pin_config_param param;
935 guard(raw_spinlock_irqsave)(&byt_lock);
937 conf = readl(conf_reg);
939 for (i = 0; i < num_configs; i++) {
940 param = pinconf_to_config_param(configs[i]);
941 arg = pinconf_to_config_argument(configs[i]);
944 case PIN_CONFIG_BIAS_DISABLE:
945 conf &= ~BYT_PULL_ASSIGN_MASK;
947 case PIN_CONFIG_BIAS_PULL_DOWN:
948 byt_gpio_force_input_mode(vg, offset);
950 conf &= ~BYT_PULL_ASSIGN_MASK;
951 conf |= BYT_PULL_ASSIGN_DOWN;
952 ret = byt_set_pull_strength(&conf, arg);
957 case PIN_CONFIG_BIAS_PULL_UP:
958 byt_gpio_force_input_mode(vg, offset);
960 conf &= ~BYT_PULL_ASSIGN_MASK;
961 conf |= BYT_PULL_ASSIGN_UP;
962 ret = byt_set_pull_strength(&conf, arg);
967 case PIN_CONFIG_INPUT_DEBOUNCE:
973 db_pulse = BYT_DEBOUNCE_PULSE_375US;
976 db_pulse = BYT_DEBOUNCE_PULSE_750US;
979 db_pulse = BYT_DEBOUNCE_PULSE_1500US;
982 db_pulse = BYT_DEBOUNCE_PULSE_3MS;
985 db_pulse = BYT_DEBOUNCE_PULSE_6MS;
988 db_pulse = BYT_DEBOUNCE_PULSE_12MS;
991 db_pulse = BYT_DEBOUNCE_PULSE_24MS;
998 debounce = readl(db_reg);
999 debounce = (debounce & ~BYT_DEBOUNCE_PULSE_MASK) | db_pulse;
1000 writel(debounce, db_reg);
1002 conf |= BYT_DEBOUNCE_EN;
1004 conf &= ~BYT_DEBOUNCE_EN;
1013 writel(conf, conf_reg);
1018 static const struct pinconf_ops byt_pinconf_ops = {
1020 .pin_config_get = byt_pin_config_get,
1021 .pin_config_set = byt_pin_config_set,
1024 static const struct pinctrl_desc byt_pinctrl_desc = {
1025 .pctlops = &byt_pinctrl_ops,
1026 .pmxops = &byt_pinmux_ops,
1027 .confops = &byt_pinconf_ops,
1028 .owner = THIS_MODULE,
1031 static int byt_gpio_get(struct gpio_chip *chip, unsigned int offset)
1033 struct intel_pinctrl *vg = gpiochip_get_data(chip);
1034 void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1037 scoped_guard(raw_spinlock_irqsave, &byt_lock)
1040 return !!(val & BYT_LEVEL);
1043 static void byt_gpio_set(struct gpio_chip *chip, unsigned int offset, int value)
1045 struct intel_pinctrl *vg = gpiochip_get_data(chip);
1049 reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1053 guard(raw_spinlock_irqsave)(&byt_lock);
1055 old_val = readl(reg);
1057 writel(old_val | BYT_LEVEL, reg);
1059 writel(old_val & ~BYT_LEVEL, reg);
1062 static int byt_gpio_get_direction(struct gpio_chip *chip, unsigned int offset)
1064 struct intel_pinctrl *vg = gpiochip_get_data(chip);
1068 reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1072 scoped_guard(raw_spinlock_irqsave, &byt_lock)
1075 if (!(value & BYT_OUTPUT_EN))
1076 return GPIO_LINE_DIRECTION_OUT;
1077 if (!(value & BYT_INPUT_EN))
1078 return GPIO_LINE_DIRECTION_IN;
1083 static int byt_gpio_direction_input(struct gpio_chip *chip, unsigned int offset)
1085 struct intel_pinctrl *vg = gpiochip_get_data(chip);
1086 void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1089 guard(raw_spinlock_irqsave)(&byt_lock);
1091 reg = readl(val_reg);
1092 reg &= ~BYT_DIR_MASK;
1093 reg |= BYT_OUTPUT_EN;
1094 writel(reg, val_reg);
1100 * Note despite the temptation this MUST NOT be converted into a call to
1101 * pinctrl_gpio_direction_output() + byt_gpio_set() that does not work this
1102 * MUST be done as a single BYT_VAL_REG register write.
1103 * See the commit message of the commit adding this comment for details.
1105 static int byt_gpio_direction_output(struct gpio_chip *chip,
1106 unsigned int offset, int value)
1108 struct intel_pinctrl *vg = gpiochip_get_data(chip);
1109 void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1112 guard(raw_spinlock_irqsave)(&byt_lock);
1114 byt_gpio_direct_irq_check(vg, offset);
1116 reg = readl(val_reg);
1117 reg &= ~BYT_DIR_MASK;
1123 writel(reg, val_reg);
1128 static void byt_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
1130 struct intel_pinctrl *vg = gpiochip_get_data(chip);
1134 for (i = 0; i < vg->soc->npins; i++) {
1135 const struct intel_community *comm;
1136 void __iomem *conf_reg, *val_reg;
1137 const char *pull_str = NULL;
1138 const char *pull = NULL;
1141 pin = vg->soc->pins[i].number;
1143 conf_reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
1145 seq_printf(s, "Pin %i: can't retrieve CONF0\n", pin);
1149 val_reg = byt_gpio_reg(vg, pin, BYT_VAL_REG);
1151 seq_printf(s, "Pin %i: can't retrieve VAL\n", pin);
1155 scoped_guard(raw_spinlock_irqsave, &byt_lock) {
1156 conf0 = readl(conf_reg);
1157 val = readl(val_reg);
1160 comm = intel_get_community(vg, pin);
1162 seq_printf(s, "Pin %i: can't retrieve community\n", pin);
1166 char *label __free(kfree) = gpiochip_dup_line_label(chip, i);
1170 switch (conf0 & BYT_PULL_ASSIGN_MASK) {
1171 case BYT_PULL_ASSIGN_UP:
1174 case BYT_PULL_ASSIGN_DOWN:
1179 switch (conf0 & BYT_PULL_STR_MASK) {
1180 case BYT_PULL_STR_2K:
1183 case BYT_PULL_STR_10K:
1186 case BYT_PULL_STR_20K:
1189 case BYT_PULL_STR_40K:
1195 " gpio-%-3d (%-20.20s) %s %s %s pad-%-3d offset:0x%03x mux:%d %s%s%s",
1197 label ?: "Unrequested",
1198 val & BYT_INPUT_EN ? " " : "in",
1199 val & BYT_OUTPUT_EN ? " " : "out",
1200 str_hi_lo(val & BYT_LEVEL),
1201 comm->pad_map[i], comm->pad_map[i] * 16,
1203 conf0 & BYT_TRIG_NEG ? " fall" : " ",
1204 conf0 & BYT_TRIG_POS ? " rise" : " ",
1205 conf0 & BYT_TRIG_LVL ? " level" : " ");
1207 if (pull && pull_str)
1208 seq_printf(s, " %-4s %-3s", pull, pull_str);
1212 if (conf0 & BYT_IODEN)
1213 seq_puts(s, " open-drain");
1219 static const struct gpio_chip byt_gpio_chip = {
1220 .owner = THIS_MODULE,
1221 .request = gpiochip_generic_request,
1222 .free = gpiochip_generic_free,
1223 .get_direction = byt_gpio_get_direction,
1224 .direction_input = byt_gpio_direction_input,
1225 .direction_output = byt_gpio_direction_output,
1226 .get = byt_gpio_get,
1227 .set = byt_gpio_set,
1228 .set_config = gpiochip_generic_config,
1229 .dbg_show = byt_gpio_dbg_show,
1232 static void byt_irq_ack(struct irq_data *d)
1234 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1235 struct intel_pinctrl *vg = gpiochip_get_data(gc);
1236 irq_hw_number_t hwirq = irqd_to_hwirq(d);
1239 reg = byt_gpio_reg(vg, hwirq, BYT_INT_STAT_REG);
1243 guard(raw_spinlock)(&byt_lock);
1245 writel(BIT(hwirq % 32), reg);
1248 static void byt_irq_mask(struct irq_data *d)
1250 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1251 struct intel_pinctrl *vg = gpiochip_get_data(gc);
1252 irq_hw_number_t hwirq = irqd_to_hwirq(d);
1254 byt_gpio_clear_triggering(vg, hwirq);
1255 gpiochip_disable_irq(gc, hwirq);
1258 static void byt_irq_unmask(struct irq_data *d)
1260 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1261 struct intel_pinctrl *vg = gpiochip_get_data(gc);
1262 irq_hw_number_t hwirq = irqd_to_hwirq(d);
1266 gpiochip_enable_irq(gc, hwirq);
1268 reg = byt_gpio_reg(vg, hwirq, BYT_CONF0_REG);
1272 guard(raw_spinlock_irqsave)(&byt_lock);
1276 switch (irqd_get_trigger_type(d)) {
1277 case IRQ_TYPE_LEVEL_HIGH:
1278 value |= BYT_TRIG_LVL;
1280 case IRQ_TYPE_EDGE_RISING:
1281 value |= BYT_TRIG_POS;
1283 case IRQ_TYPE_LEVEL_LOW:
1284 value |= BYT_TRIG_LVL;
1286 case IRQ_TYPE_EDGE_FALLING:
1287 value |= BYT_TRIG_NEG;
1289 case IRQ_TYPE_EDGE_BOTH:
1290 value |= (BYT_TRIG_NEG | BYT_TRIG_POS);
1297 static int byt_irq_type(struct irq_data *d, unsigned int type)
1299 struct intel_pinctrl *vg = gpiochip_get_data(irq_data_get_irq_chip_data(d));
1300 irq_hw_number_t hwirq = irqd_to_hwirq(d);
1304 reg = byt_gpio_reg(vg, hwirq, BYT_CONF0_REG);
1308 guard(raw_spinlock_irqsave)(&byt_lock);
1312 WARN(value & BYT_DIRECT_IRQ_EN,
1313 "Bad pad config for IO mode, force DIRECT_IRQ_EN bit clearing");
1315 /* For level trigges the BYT_TRIG_POS and BYT_TRIG_NEG bits
1316 * are used to indicate high and low level triggering
1318 value &= ~(BYT_DIRECT_IRQ_EN | BYT_TRIG_POS | BYT_TRIG_NEG |
1320 /* Enable glitch filtering */
1321 value |= BYT_GLITCH_FILTER_EN | BYT_GLITCH_F_SLOW_CLK |
1322 BYT_GLITCH_F_FAST_CLK;
1326 if (type & IRQ_TYPE_EDGE_BOTH)
1327 irq_set_handler_locked(d, handle_edge_irq);
1328 else if (type & IRQ_TYPE_LEVEL_MASK)
1329 irq_set_handler_locked(d, handle_level_irq);
1334 static const struct irq_chip byt_gpio_irq_chip = {
1336 .irq_ack = byt_irq_ack,
1337 .irq_mask = byt_irq_mask,
1338 .irq_unmask = byt_irq_unmask,
1339 .irq_set_type = byt_irq_type,
1340 .flags = IRQCHIP_SKIP_SET_WAKE | IRQCHIP_SET_TYPE_MASKED | IRQCHIP_IMMUTABLE,
1341 GPIOCHIP_IRQ_RESOURCE_HELPERS,
1344 static void byt_gpio_irq_handler(struct irq_desc *desc)
1346 struct irq_data *data = irq_desc_get_irq_data(desc);
1347 struct intel_pinctrl *vg = gpiochip_get_data(irq_desc_get_handler_data(desc));
1348 struct irq_chip *chip = irq_data_get_irq_chip(data);
1351 unsigned long pending;
1353 /* check from GPIO controller which pin triggered the interrupt */
1354 for (base = 0; base < vg->chip.ngpio; base += 32) {
1355 reg = byt_gpio_reg(vg, base, BYT_INT_STAT_REG);
1358 dev_warn(vg->dev, "Pin %i: can't retrieve INT_STAT%u\n", base / 32, base);
1362 scoped_guard(raw_spinlock, &byt_lock)
1363 pending = readl(reg);
1364 for_each_set_bit(pin, &pending, 32)
1365 generic_handle_domain_irq(vg->chip.irq.domain, base + pin);
1367 chip->irq_eoi(data);
1370 static bool byt_direct_irq_sanity_check(struct intel_pinctrl *vg, int pin, u32 conf0)
1372 int direct_irq, ioapic_direct_irq_base;
1373 u8 *match, direct_irq_mux[16];
1376 memcpy_fromio(direct_irq_mux, vg->communities->pad_regs + BYT_DIRECT_IRQ_REG,
1377 sizeof(direct_irq_mux));
1378 match = memchr(direct_irq_mux, pin, sizeof(direct_irq_mux));
1380 dev_warn(vg->dev, FW_BUG "Pin %i: DIRECT_IRQ_EN set but no IRQ assigned, clearing\n", pin);
1384 direct_irq = match - direct_irq_mux;
1385 /* Base IO-APIC pin numbers come from atom-e3800-family-datasheet.pdf */
1386 ioapic_direct_irq_base = (vg->communities->npins == BYT_NGPIO_SCORE) ? 51 : 67;
1387 dev_dbg(vg->dev, "Pin %i: uses direct IRQ %d (IO-APIC %d)\n", pin,
1388 direct_irq, direct_irq + ioapic_direct_irq_base);
1391 * Testing has shown that the way direct IRQs work is that the combination of the
1392 * direct-irq-en flag and the direct IRQ mux connect the output of the GPIO's IRQ
1393 * trigger block, which normally sets the status flag in the IRQ status reg at
1394 * 0x800, to one of the IO-APIC pins according to the mux registers.
1397 * 1. The TRIG_MASK bits must be set to configure the GPIO's IRQ trigger block
1398 * 2. The TRIG_LVL bit *must* be set, so that the GPIO's input value is directly
1399 * passed (1:1 or inverted) to the IO-APIC pin, if TRIG_LVL is not set,
1400 * selecting edge mode operation then on the first edge the IO-APIC pin goes
1401 * high, but since no write-to-clear write will be done to the IRQ status reg
1402 * at 0x800, the detected edge condition will never get cleared.
1404 trig = conf0 & BYT_TRIG_MASK;
1405 if (trig != (BYT_TRIG_POS | BYT_TRIG_LVL) &&
1406 trig != (BYT_TRIG_NEG | BYT_TRIG_LVL)) {
1408 FW_BUG "Pin %i: DIRECT_IRQ_EN set without trigger (CONF0: %#08x), clearing\n",
1416 static void byt_init_irq_valid_mask(struct gpio_chip *chip,
1417 unsigned long *valid_mask,
1418 unsigned int ngpios)
1420 struct intel_pinctrl *vg = gpiochip_get_data(chip);
1426 * Clear interrupt triggers for all pins that are GPIOs and
1427 * do not use direct IRQ mode. This will prevent spurious
1428 * interrupts from misconfigured pins.
1430 for (i = 0; i < vg->soc->npins; i++) {
1431 unsigned int pin = vg->soc->pins[i].number;
1433 reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
1435 dev_warn(vg->dev, "Pin %i: could not retrieve CONF0\n", i);
1440 if (value & BYT_DIRECT_IRQ_EN) {
1441 if (byt_direct_irq_sanity_check(vg, i, value)) {
1442 clear_bit(i, valid_mask);
1444 value &= ~(BYT_DIRECT_IRQ_EN | BYT_TRIG_POS |
1445 BYT_TRIG_NEG | BYT_TRIG_LVL);
1448 } else if ((value & BYT_PIN_MUX) == byt_get_gpio_mux(vg, i)) {
1449 byt_gpio_clear_triggering(vg, i);
1450 dev_dbg(vg->dev, "disabling GPIO %d\n", i);
1455 static int byt_gpio_irq_init_hw(struct gpio_chip *chip)
1457 struct intel_pinctrl *vg = gpiochip_get_data(chip);
1461 /* clear interrupt status trigger registers */
1462 for (base = 0; base < vg->soc->npins; base += 32) {
1463 reg = byt_gpio_reg(vg, base, BYT_INT_STAT_REG);
1466 dev_warn(vg->dev, "Pin %i: can't retrieve INT_STAT%u\n", base / 32, base);
1470 writel(0xffffffff, reg);
1471 /* make sure trigger bits are cleared, if not then a pin
1472 might be misconfigured in bios */
1476 "GPIO interrupt error, pins misconfigured. INT_STAT%u: %#08x\n",
1483 static int byt_gpio_add_pin_ranges(struct gpio_chip *chip)
1485 struct intel_pinctrl *vg = gpiochip_get_data(chip);
1486 struct device *dev = vg->dev;
1489 ret = gpiochip_add_pin_range(chip, dev_name(dev), 0, 0, vg->soc->npins);
1491 dev_err(dev, "failed to add GPIO pin range\n");
1496 static int byt_gpio_probe(struct intel_pinctrl *vg)
1498 struct platform_device *pdev = to_platform_device(vg->dev);
1499 struct gpio_chip *gc;
1502 /* Set up gpio chip */
1503 vg->chip = byt_gpio_chip;
1505 gc->label = dev_name(vg->dev);
1507 gc->can_sleep = false;
1508 gc->add_pin_ranges = byt_gpio_add_pin_ranges;
1509 gc->parent = vg->dev;
1510 gc->ngpio = vg->soc->npins;
1512 #ifdef CONFIG_PM_SLEEP
1513 vg->context.pads = devm_kcalloc(vg->dev, gc->ngpio, sizeof(*vg->context.pads),
1515 if (!vg->context.pads)
1519 /* set up interrupts */
1520 irq = platform_get_irq_optional(pdev, 0);
1522 struct gpio_irq_chip *girq;
1525 gpio_irq_chip_set_chip(girq, &byt_gpio_irq_chip);
1526 girq->init_hw = byt_gpio_irq_init_hw;
1527 girq->init_valid_mask = byt_init_irq_valid_mask;
1528 girq->parent_handler = byt_gpio_irq_handler;
1529 girq->num_parents = 1;
1530 girq->parents = devm_kcalloc(vg->dev, girq->num_parents,
1531 sizeof(*girq->parents), GFP_KERNEL);
1534 girq->parents[0] = irq;
1535 girq->default_type = IRQ_TYPE_NONE;
1536 girq->handler = handle_bad_irq;
1539 ret = devm_gpiochip_add_data(vg->dev, gc, vg);
1541 dev_err(vg->dev, "failed adding byt-gpio chip\n");
1548 static int byt_set_soc_data(struct intel_pinctrl *vg,
1549 const struct intel_pinctrl_soc_data *soc)
1551 struct platform_device *pdev = to_platform_device(vg->dev);
1556 vg->ncommunities = vg->soc->ncommunities;
1557 vg->communities = devm_kcalloc(vg->dev, vg->ncommunities,
1558 sizeof(*vg->communities), GFP_KERNEL);
1559 if (!vg->communities)
1562 for (i = 0; i < vg->soc->ncommunities; i++) {
1563 struct intel_community *comm = vg->communities + i;
1565 *comm = vg->soc->communities[i];
1567 comm->pad_regs = devm_platform_ioremap_resource(pdev, 0);
1568 if (IS_ERR(comm->pad_regs))
1569 return PTR_ERR(comm->pad_regs);
1575 static const struct acpi_device_id byt_gpio_acpi_match[] = {
1576 { "INT33B2", (kernel_ulong_t)byt_soc_data },
1577 { "INT33FC", (kernel_ulong_t)byt_soc_data },
1581 static int byt_pinctrl_probe(struct platform_device *pdev)
1583 const struct intel_pinctrl_soc_data *soc_data;
1584 struct device *dev = &pdev->dev;
1585 struct intel_pinctrl *vg;
1588 soc_data = intel_pinctrl_get_soc_data(pdev);
1589 if (IS_ERR(soc_data))
1590 return PTR_ERR(soc_data);
1592 vg = devm_kzalloc(dev, sizeof(*vg), GFP_KERNEL);
1597 ret = byt_set_soc_data(vg, soc_data);
1599 dev_err(dev, "failed to set soc data\n");
1603 vg->pctldesc = byt_pinctrl_desc;
1604 vg->pctldesc.name = dev_name(dev);
1605 vg->pctldesc.pins = vg->soc->pins;
1606 vg->pctldesc.npins = vg->soc->npins;
1608 vg->pctldev = devm_pinctrl_register(dev, &vg->pctldesc, vg);
1609 if (IS_ERR(vg->pctldev)) {
1610 dev_err(dev, "failed to register pinctrl driver\n");
1611 return PTR_ERR(vg->pctldev);
1614 ret = byt_gpio_probe(vg);
1618 platform_set_drvdata(pdev, vg);
1623 static int byt_gpio_suspend(struct device *dev)
1625 struct intel_pinctrl *vg = dev_get_drvdata(dev);
1628 guard(raw_spinlock_irqsave)(&byt_lock);
1630 for (i = 0; i < vg->soc->npins; i++) {
1633 unsigned int pin = vg->soc->pins[i].number;
1635 reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
1637 dev_warn(vg->dev, "Pin %i: can't retrieve CONF0\n", i);
1640 value = readl(reg) & BYT_CONF0_RESTORE_MASK;
1641 vg->context.pads[i].conf0 = value;
1643 reg = byt_gpio_reg(vg, pin, BYT_VAL_REG);
1645 dev_warn(vg->dev, "Pin %i: can't retrieve VAL\n", i);
1648 value = readl(reg) & BYT_VAL_RESTORE_MASK;
1649 vg->context.pads[i].val = value;
1655 static int byt_gpio_resume(struct device *dev)
1657 struct intel_pinctrl *vg = dev_get_drvdata(dev);
1660 guard(raw_spinlock_irqsave)(&byt_lock);
1662 for (i = 0; i < vg->soc->npins; i++) {
1665 unsigned int pin = vg->soc->pins[i].number;
1667 reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
1669 dev_warn(vg->dev, "Pin %i: can't retrieve CONF0\n", i);
1673 if ((value & BYT_CONF0_RESTORE_MASK) !=
1674 vg->context.pads[i].conf0) {
1675 value &= ~BYT_CONF0_RESTORE_MASK;
1676 value |= vg->context.pads[i].conf0;
1678 dev_info(dev, "restored pin %d CONF0 %#08x", i, value);
1681 reg = byt_gpio_reg(vg, pin, BYT_VAL_REG);
1683 dev_warn(vg->dev, "Pin %i: can't retrieve VAL\n", i);
1687 if ((value & BYT_VAL_RESTORE_MASK) !=
1688 vg->context.pads[i].val) {
1691 v = value & ~BYT_VAL_RESTORE_MASK;
1692 v |= vg->context.pads[i].val;
1695 dev_dbg(dev, "restored pin %d VAL %#08x\n", i, v);
1703 static const struct dev_pm_ops byt_gpio_pm_ops = {
1704 LATE_SYSTEM_SLEEP_PM_OPS(byt_gpio_suspend, byt_gpio_resume)
1707 static struct platform_driver byt_gpio_driver = {
1708 .probe = byt_pinctrl_probe,
1711 .pm = pm_sleep_ptr(&byt_gpio_pm_ops),
1712 .acpi_match_table = byt_gpio_acpi_match,
1713 .suppress_bind_attrs = true,
1717 static int __init byt_gpio_init(void)
1719 return platform_driver_register(&byt_gpio_driver);
1721 subsys_initcall(byt_gpio_init);
1723 MODULE_IMPORT_NS(PINCTRL_INTEL);