1 // SPDX-License-Identifier: GPL-2.0
3 * Pinctrl GPIO driver for Intel Baytrail
5 * Copyright (c) 2012-2013, Intel Corporation
9 #include <linux/acpi.h>
10 #include <linux/bitops.h>
11 #include <linux/gpio/driver.h>
12 #include <linux/init.h>
13 #include <linux/interrupt.h>
15 #include <linux/kernel.h>
16 #include <linux/types.h>
17 #include <linux/platform_device.h>
18 #include <linux/pm_runtime.h>
19 #include <linux/property.h>
20 #include <linux/seq_file.h>
21 #include <linux/string_helpers.h>
23 #include <linux/pinctrl/pinctrl.h>
24 #include <linux/pinctrl/pinmux.h>
25 #include <linux/pinctrl/pinconf.h>
26 #include <linux/pinctrl/pinconf-generic.h>
28 #include "pinctrl-intel.h"
30 /* memory mapped register offsets */
31 #define BYT_CONF0_REG 0x000
32 #define BYT_CONF1_REG 0x004
33 #define BYT_VAL_REG 0x008
34 #define BYT_DFT_REG 0x00c
35 #define BYT_INT_STAT_REG 0x800
36 #define BYT_DIRECT_IRQ_REG 0x980
37 #define BYT_DEBOUNCE_REG 0x9d0
39 /* BYT_CONF0_REG register bits */
40 #define BYT_IODEN BIT(31)
41 #define BYT_DIRECT_IRQ_EN BIT(27)
42 #define BYT_TRIG_MASK GENMASK(26, 24)
43 #define BYT_TRIG_NEG BIT(26)
44 #define BYT_TRIG_POS BIT(25)
45 #define BYT_TRIG_LVL BIT(24)
46 #define BYT_DEBOUNCE_EN BIT(20)
47 #define BYT_GLITCH_FILTER_EN BIT(19)
48 #define BYT_GLITCH_F_SLOW_CLK BIT(17)
49 #define BYT_GLITCH_F_FAST_CLK BIT(16)
50 #define BYT_PULL_STR_SHIFT 9
51 #define BYT_PULL_STR_MASK GENMASK(10, 9)
52 #define BYT_PULL_STR_2K (0 << BYT_PULL_STR_SHIFT)
53 #define BYT_PULL_STR_10K (1 << BYT_PULL_STR_SHIFT)
54 #define BYT_PULL_STR_20K (2 << BYT_PULL_STR_SHIFT)
55 #define BYT_PULL_STR_40K (3 << BYT_PULL_STR_SHIFT)
56 #define BYT_PULL_ASSIGN_MASK GENMASK(8, 7)
57 #define BYT_PULL_ASSIGN_DOWN BIT(8)
58 #define BYT_PULL_ASSIGN_UP BIT(7)
59 #define BYT_PIN_MUX GENMASK(2, 0)
61 /* BYT_VAL_REG register bits */
62 #define BYT_DIR_MASK GENMASK(2, 1)
63 #define BYT_INPUT_EN BIT(2) /* 0: input enabled (active low)*/
64 #define BYT_OUTPUT_EN BIT(1) /* 0: output enabled (active low)*/
65 #define BYT_LEVEL BIT(0)
67 #define BYT_CONF0_RESTORE_MASK (BYT_DIRECT_IRQ_EN | BYT_TRIG_MASK | BYT_PIN_MUX)
68 #define BYT_VAL_RESTORE_MASK (BYT_DIR_MASK | BYT_LEVEL)
70 /* BYT_DEBOUNCE_REG bits */
71 #define BYT_DEBOUNCE_PULSE_MASK GENMASK(2, 0)
72 #define BYT_DEBOUNCE_PULSE_375US 1
73 #define BYT_DEBOUNCE_PULSE_750US 2
74 #define BYT_DEBOUNCE_PULSE_1500US 3
75 #define BYT_DEBOUNCE_PULSE_3MS 4
76 #define BYT_DEBOUNCE_PULSE_6MS 5
77 #define BYT_DEBOUNCE_PULSE_12MS 6
78 #define BYT_DEBOUNCE_PULSE_24MS 7
80 #define BYT_NGPIO_SCORE 102
81 #define BYT_NGPIO_NCORE 28
82 #define BYT_NGPIO_SUS 44
84 #define BYT_SCORE_ACPI_UID "1"
85 #define BYT_NCORE_ACPI_UID "2"
86 #define BYT_SUS_ACPI_UID "3"
89 * This is the function value most pins have for GPIO muxing. If the value
90 * differs from the default one, it must be explicitly mentioned. Otherwise, the
91 * pin control implementation will set the muxing value to default GPIO if it
92 * does not find a match for the requested function.
94 #define BYT_DEFAULT_GPIO_MUX 0
95 #define BYT_ALTER_GPIO_MUX 1
97 struct intel_pad_context {
102 #define COMMUNITY(p, n, map) \
109 /* SCORE pins, aka GPIOC_<pin_no> or GPIO_S0_SC[<pin_no>] */
110 static const struct pinctrl_pin_desc byt_score_pins[] = {
111 PINCTRL_PIN(0, "SATA_GP0"),
112 PINCTRL_PIN(1, "SATA_GP1"),
113 PINCTRL_PIN(2, "SATA_LED#"),
114 PINCTRL_PIN(3, "PCIE_CLKREQ0"),
115 PINCTRL_PIN(4, "PCIE_CLKREQ1"),
116 PINCTRL_PIN(5, "PCIE_CLKREQ2"),
117 PINCTRL_PIN(6, "PCIE_CLKREQ3"),
118 PINCTRL_PIN(7, "SD3_WP"),
119 PINCTRL_PIN(8, "HDA_RST"),
120 PINCTRL_PIN(9, "HDA_SYNC"),
121 PINCTRL_PIN(10, "HDA_CLK"),
122 PINCTRL_PIN(11, "HDA_SDO"),
123 PINCTRL_PIN(12, "HDA_SDI0"),
124 PINCTRL_PIN(13, "HDA_SDI1"),
125 PINCTRL_PIN(14, "GPIO_S0_SC14"),
126 PINCTRL_PIN(15, "GPIO_S0_SC15"),
127 PINCTRL_PIN(16, "MMC1_CLK"),
128 PINCTRL_PIN(17, "MMC1_D0"),
129 PINCTRL_PIN(18, "MMC1_D1"),
130 PINCTRL_PIN(19, "MMC1_D2"),
131 PINCTRL_PIN(20, "MMC1_D3"),
132 PINCTRL_PIN(21, "MMC1_D4"),
133 PINCTRL_PIN(22, "MMC1_D5"),
134 PINCTRL_PIN(23, "MMC1_D6"),
135 PINCTRL_PIN(24, "MMC1_D7"),
136 PINCTRL_PIN(25, "MMC1_CMD"),
137 PINCTRL_PIN(26, "MMC1_RST"),
138 PINCTRL_PIN(27, "SD2_CLK"),
139 PINCTRL_PIN(28, "SD2_D0"),
140 PINCTRL_PIN(29, "SD2_D1"),
141 PINCTRL_PIN(30, "SD2_D2"),
142 PINCTRL_PIN(31, "SD2_D3_CD"),
143 PINCTRL_PIN(32, "SD2_CMD"),
144 PINCTRL_PIN(33, "SD3_CLK"),
145 PINCTRL_PIN(34, "SD3_D0"),
146 PINCTRL_PIN(35, "SD3_D1"),
147 PINCTRL_PIN(36, "SD3_D2"),
148 PINCTRL_PIN(37, "SD3_D3"),
149 PINCTRL_PIN(38, "SD3_CD"),
150 PINCTRL_PIN(39, "SD3_CMD"),
151 PINCTRL_PIN(40, "SD3_1P8EN"),
152 PINCTRL_PIN(41, "SD3_PWREN#"),
153 PINCTRL_PIN(42, "ILB_LPC_AD0"),
154 PINCTRL_PIN(43, "ILB_LPC_AD1"),
155 PINCTRL_PIN(44, "ILB_LPC_AD2"),
156 PINCTRL_PIN(45, "ILB_LPC_AD3"),
157 PINCTRL_PIN(46, "ILB_LPC_FRAME"),
158 PINCTRL_PIN(47, "ILB_LPC_CLK0"),
159 PINCTRL_PIN(48, "ILB_LPC_CLK1"),
160 PINCTRL_PIN(49, "ILB_LPC_CLKRUN"),
161 PINCTRL_PIN(50, "ILB_LPC_SERIRQ"),
162 PINCTRL_PIN(51, "PCU_SMB_DATA"),
163 PINCTRL_PIN(52, "PCU_SMB_CLK"),
164 PINCTRL_PIN(53, "PCU_SMB_ALERT"),
165 PINCTRL_PIN(54, "ILB_8254_SPKR"),
166 PINCTRL_PIN(55, "GPIO_S0_SC55"),
167 PINCTRL_PIN(56, "GPIO_S0_SC56"),
168 PINCTRL_PIN(57, "GPIO_S0_SC57"),
169 PINCTRL_PIN(58, "GPIO_S0_SC58"),
170 PINCTRL_PIN(59, "GPIO_S0_SC59"),
171 PINCTRL_PIN(60, "GPIO_S0_SC60"),
172 PINCTRL_PIN(61, "GPIO_S0_SC61"),
173 PINCTRL_PIN(62, "LPE_I2S2_CLK"),
174 PINCTRL_PIN(63, "LPE_I2S2_FRM"),
175 PINCTRL_PIN(64, "LPE_I2S2_DATAIN"),
176 PINCTRL_PIN(65, "LPE_I2S2_DATAOUT"),
177 PINCTRL_PIN(66, "SIO_SPI_CS"),
178 PINCTRL_PIN(67, "SIO_SPI_MISO"),
179 PINCTRL_PIN(68, "SIO_SPI_MOSI"),
180 PINCTRL_PIN(69, "SIO_SPI_CLK"),
181 PINCTRL_PIN(70, "SIO_UART1_RXD"),
182 PINCTRL_PIN(71, "SIO_UART1_TXD"),
183 PINCTRL_PIN(72, "SIO_UART1_RTS"),
184 PINCTRL_PIN(73, "SIO_UART1_CTS"),
185 PINCTRL_PIN(74, "SIO_UART2_RXD"),
186 PINCTRL_PIN(75, "SIO_UART2_TXD"),
187 PINCTRL_PIN(76, "SIO_UART2_RTS"),
188 PINCTRL_PIN(77, "SIO_UART2_CTS"),
189 PINCTRL_PIN(78, "SIO_I2C0_DATA"),
190 PINCTRL_PIN(79, "SIO_I2C0_CLK"),
191 PINCTRL_PIN(80, "SIO_I2C1_DATA"),
192 PINCTRL_PIN(81, "SIO_I2C1_CLK"),
193 PINCTRL_PIN(82, "SIO_I2C2_DATA"),
194 PINCTRL_PIN(83, "SIO_I2C2_CLK"),
195 PINCTRL_PIN(84, "SIO_I2C3_DATA"),
196 PINCTRL_PIN(85, "SIO_I2C3_CLK"),
197 PINCTRL_PIN(86, "SIO_I2C4_DATA"),
198 PINCTRL_PIN(87, "SIO_I2C4_CLK"),
199 PINCTRL_PIN(88, "SIO_I2C5_DATA"),
200 PINCTRL_PIN(89, "SIO_I2C5_CLK"),
201 PINCTRL_PIN(90, "SIO_I2C6_DATA"),
202 PINCTRL_PIN(91, "SIO_I2C6_CLK"),
203 PINCTRL_PIN(92, "GPIO_S0_SC92"),
204 PINCTRL_PIN(93, "GPIO_S0_SC93"),
205 PINCTRL_PIN(94, "SIO_PWM0"),
206 PINCTRL_PIN(95, "SIO_PWM1"),
207 PINCTRL_PIN(96, "PMC_PLT_CLK0"),
208 PINCTRL_PIN(97, "PMC_PLT_CLK1"),
209 PINCTRL_PIN(98, "PMC_PLT_CLK2"),
210 PINCTRL_PIN(99, "PMC_PLT_CLK3"),
211 PINCTRL_PIN(100, "PMC_PLT_CLK4"),
212 PINCTRL_PIN(101, "PMC_PLT_CLK5"),
215 static const unsigned int byt_score_pins_map[BYT_NGPIO_SCORE] = {
216 85, 89, 93, 96, 99, 102, 98, 101, 34, 37,
217 36, 38, 39, 35, 40, 84, 62, 61, 64, 59,
218 54, 56, 60, 55, 63, 57, 51, 50, 53, 47,
219 52, 49, 48, 43, 46, 41, 45, 42, 58, 44,
220 95, 105, 70, 68, 67, 66, 69, 71, 65, 72,
221 86, 90, 88, 92, 103, 77, 79, 83, 78, 81,
222 80, 82, 13, 12, 15, 14, 17, 18, 19, 16,
223 2, 1, 0, 4, 6, 7, 9, 8, 33, 32,
224 31, 30, 29, 27, 25, 28, 26, 23, 21, 20,
225 24, 22, 5, 3, 10, 11, 106, 87, 91, 104,
230 static const unsigned int byt_score_uart1_pins[] = { 70, 71, 72, 73 };
231 static const unsigned int byt_score_uart2_pins[] = { 74, 75, 76, 77 };
233 static const unsigned int byt_score_pwm0_pins[] = { 94 };
234 static const unsigned int byt_score_pwm1_pins[] = { 95 };
236 static const unsigned int byt_score_sio_spi_pins[] = { 66, 67, 68, 69 };
238 static const unsigned int byt_score_i2c5_pins[] = { 88, 89 };
239 static const unsigned int byt_score_i2c6_pins[] = { 90, 91 };
240 static const unsigned int byt_score_i2c4_pins[] = { 86, 87 };
241 static const unsigned int byt_score_i2c3_pins[] = { 84, 85 };
242 static const unsigned int byt_score_i2c2_pins[] = { 82, 83 };
243 static const unsigned int byt_score_i2c1_pins[] = { 80, 81 };
244 static const unsigned int byt_score_i2c0_pins[] = { 78, 79 };
246 static const unsigned int byt_score_ssp0_pins[] = { 8, 9, 10, 11 };
247 static const unsigned int byt_score_ssp1_pins[] = { 12, 13, 14, 15 };
248 static const unsigned int byt_score_ssp2_pins[] = { 62, 63, 64, 65 };
250 static const unsigned int byt_score_sdcard_pins[] = {
251 7, 33, 34, 35, 36, 37, 38, 39, 40, 41,
253 static const unsigned int byt_score_sdcard_mux_values[] = {
254 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
257 static const unsigned int byt_score_sdio_pins[] = { 27, 28, 29, 30, 31, 32 };
259 static const unsigned int byt_score_emmc_pins[] = {
260 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
263 static const unsigned int byt_score_ilb_lpc_pins[] = {
264 42, 43, 44, 45, 46, 47, 48, 49, 50,
267 static const unsigned int byt_score_sata_pins[] = { 0, 1, 2 };
269 static const unsigned int byt_score_plt_clk0_pins[] = { 96 };
270 static const unsigned int byt_score_plt_clk1_pins[] = { 97 };
271 static const unsigned int byt_score_plt_clk2_pins[] = { 98 };
272 static const unsigned int byt_score_plt_clk3_pins[] = { 99 };
273 static const unsigned int byt_score_plt_clk4_pins[] = { 100 };
274 static const unsigned int byt_score_plt_clk5_pins[] = { 101 };
276 static const unsigned int byt_score_smbus_pins[] = { 51, 52, 53 };
278 static const struct intel_pingroup byt_score_groups[] = {
279 PIN_GROUP("uart1_grp", byt_score_uart1_pins, 1),
280 PIN_GROUP("uart2_grp", byt_score_uart2_pins, 1),
281 PIN_GROUP("pwm0_grp", byt_score_pwm0_pins, 1),
282 PIN_GROUP("pwm1_grp", byt_score_pwm1_pins, 1),
283 PIN_GROUP("ssp2_grp", byt_score_ssp2_pins, 1),
284 PIN_GROUP("sio_spi_grp", byt_score_sio_spi_pins, 1),
285 PIN_GROUP("i2c5_grp", byt_score_i2c5_pins, 1),
286 PIN_GROUP("i2c6_grp", byt_score_i2c6_pins, 1),
287 PIN_GROUP("i2c4_grp", byt_score_i2c4_pins, 1),
288 PIN_GROUP("i2c3_grp", byt_score_i2c3_pins, 1),
289 PIN_GROUP("i2c2_grp", byt_score_i2c2_pins, 1),
290 PIN_GROUP("i2c1_grp", byt_score_i2c1_pins, 1),
291 PIN_GROUP("i2c0_grp", byt_score_i2c0_pins, 1),
292 PIN_GROUP("ssp0_grp", byt_score_ssp0_pins, 1),
293 PIN_GROUP("ssp1_grp", byt_score_ssp1_pins, 1),
294 PIN_GROUP("sdcard_grp", byt_score_sdcard_pins, byt_score_sdcard_mux_values),
295 PIN_GROUP("sdio_grp", byt_score_sdio_pins, 1),
296 PIN_GROUP("emmc_grp", byt_score_emmc_pins, 1),
297 PIN_GROUP("lpc_grp", byt_score_ilb_lpc_pins, 1),
298 PIN_GROUP("sata_grp", byt_score_sata_pins, 1),
299 PIN_GROUP("plt_clk0_grp", byt_score_plt_clk0_pins, 1),
300 PIN_GROUP("plt_clk1_grp", byt_score_plt_clk1_pins, 1),
301 PIN_GROUP("plt_clk2_grp", byt_score_plt_clk2_pins, 1),
302 PIN_GROUP("plt_clk3_grp", byt_score_plt_clk3_pins, 1),
303 PIN_GROUP("plt_clk4_grp", byt_score_plt_clk4_pins, 1),
304 PIN_GROUP("plt_clk5_grp", byt_score_plt_clk5_pins, 1),
305 PIN_GROUP("smbus_grp", byt_score_smbus_pins, 1),
308 static const char * const byt_score_uart_groups[] = {
309 "uart1_grp", "uart2_grp",
311 static const char * const byt_score_pwm_groups[] = {
312 "pwm0_grp", "pwm1_grp",
314 static const char * const byt_score_ssp_groups[] = {
315 "ssp0_grp", "ssp1_grp", "ssp2_grp",
317 static const char * const byt_score_spi_groups[] = { "sio_spi_grp" };
318 static const char * const byt_score_i2c_groups[] = {
319 "i2c0_grp", "i2c1_grp", "i2c2_grp", "i2c3_grp", "i2c4_grp", "i2c5_grp",
322 static const char * const byt_score_sdcard_groups[] = { "sdcard_grp" };
323 static const char * const byt_score_sdio_groups[] = { "sdio_grp" };
324 static const char * const byt_score_emmc_groups[] = { "emmc_grp" };
325 static const char * const byt_score_lpc_groups[] = { "lpc_grp" };
326 static const char * const byt_score_sata_groups[] = { "sata_grp" };
327 static const char * const byt_score_plt_clk_groups[] = {
328 "plt_clk0_grp", "plt_clk1_grp", "plt_clk2_grp", "plt_clk3_grp",
329 "plt_clk4_grp", "plt_clk5_grp",
331 static const char * const byt_score_smbus_groups[] = { "smbus_grp" };
332 static const char * const byt_score_gpio_groups[] = {
333 "uart1_grp", "uart2_grp", "pwm0_grp", "pwm1_grp", "ssp0_grp",
334 "ssp1_grp", "ssp2_grp", "sio_spi_grp", "i2c0_grp", "i2c1_grp",
335 "i2c2_grp", "i2c3_grp", "i2c4_grp", "i2c5_grp", "i2c6_grp",
336 "sdcard_grp", "sdio_grp", "emmc_grp", "lpc_grp", "sata_grp",
337 "plt_clk0_grp", "plt_clk1_grp", "plt_clk2_grp", "plt_clk3_grp",
338 "plt_clk4_grp", "plt_clk5_grp", "smbus_grp",
341 static const struct intel_function byt_score_functions[] = {
342 FUNCTION("uart", byt_score_uart_groups),
343 FUNCTION("pwm", byt_score_pwm_groups),
344 FUNCTION("ssp", byt_score_ssp_groups),
345 FUNCTION("spi", byt_score_spi_groups),
346 FUNCTION("i2c", byt_score_i2c_groups),
347 FUNCTION("sdcard", byt_score_sdcard_groups),
348 FUNCTION("sdio", byt_score_sdio_groups),
349 FUNCTION("emmc", byt_score_emmc_groups),
350 FUNCTION("lpc", byt_score_lpc_groups),
351 FUNCTION("sata", byt_score_sata_groups),
352 FUNCTION("plt_clk", byt_score_plt_clk_groups),
353 FUNCTION("smbus", byt_score_smbus_groups),
354 FUNCTION("gpio", byt_score_gpio_groups),
357 static const struct intel_community byt_score_communities[] = {
358 COMMUNITY(0, BYT_NGPIO_SCORE, byt_score_pins_map),
361 static const struct intel_pinctrl_soc_data byt_score_soc_data = {
362 .uid = BYT_SCORE_ACPI_UID,
363 .pins = byt_score_pins,
364 .npins = ARRAY_SIZE(byt_score_pins),
365 .groups = byt_score_groups,
366 .ngroups = ARRAY_SIZE(byt_score_groups),
367 .functions = byt_score_functions,
368 .nfunctions = ARRAY_SIZE(byt_score_functions),
369 .communities = byt_score_communities,
370 .ncommunities = ARRAY_SIZE(byt_score_communities),
373 /* SUS pins, aka GPIOS_<pin_no> or GPIO_S5[<pin_no>] */
374 static const struct pinctrl_pin_desc byt_sus_pins[] = {
375 PINCTRL_PIN(0, "GPIO_S50"),
376 PINCTRL_PIN(1, "GPIO_S51"),
377 PINCTRL_PIN(2, "GPIO_S52"),
378 PINCTRL_PIN(3, "GPIO_S53"),
379 PINCTRL_PIN(4, "GPIO_S54"),
380 PINCTRL_PIN(5, "GPIO_S55"),
381 PINCTRL_PIN(6, "GPIO_S56"),
382 PINCTRL_PIN(7, "GPIO_S57"),
383 PINCTRL_PIN(8, "GPIO_S58"),
384 PINCTRL_PIN(9, "GPIO_S59"),
385 PINCTRL_PIN(10, "GPIO_S510"),
386 PINCTRL_PIN(11, "PMC_SUSPWRDNACK"),
387 PINCTRL_PIN(12, "PMC_SUSCLK0"),
388 PINCTRL_PIN(13, "GPIO_S513"),
389 PINCTRL_PIN(14, "USB_ULPI_RST"),
390 PINCTRL_PIN(15, "PMC_WAKE_PCIE0#"),
391 PINCTRL_PIN(16, "PMC_PWRBTN"),
392 PINCTRL_PIN(17, "GPIO_S517"),
393 PINCTRL_PIN(18, "PMC_SUS_STAT"),
394 PINCTRL_PIN(19, "USB_OC0"),
395 PINCTRL_PIN(20, "USB_OC1"),
396 PINCTRL_PIN(21, "PCU_SPI_CS1"),
397 PINCTRL_PIN(22, "GPIO_S522"),
398 PINCTRL_PIN(23, "GPIO_S523"),
399 PINCTRL_PIN(24, "GPIO_S524"),
400 PINCTRL_PIN(25, "GPIO_S525"),
401 PINCTRL_PIN(26, "GPIO_S526"),
402 PINCTRL_PIN(27, "GPIO_S527"),
403 PINCTRL_PIN(28, "GPIO_S528"),
404 PINCTRL_PIN(29, "GPIO_S529"),
405 PINCTRL_PIN(30, "GPIO_S530"),
406 PINCTRL_PIN(31, "USB_ULPI_CLK"),
407 PINCTRL_PIN(32, "USB_ULPI_DATA0"),
408 PINCTRL_PIN(33, "USB_ULPI_DATA1"),
409 PINCTRL_PIN(34, "USB_ULPI_DATA2"),
410 PINCTRL_PIN(35, "USB_ULPI_DATA3"),
411 PINCTRL_PIN(36, "USB_ULPI_DATA4"),
412 PINCTRL_PIN(37, "USB_ULPI_DATA5"),
413 PINCTRL_PIN(38, "USB_ULPI_DATA6"),
414 PINCTRL_PIN(39, "USB_ULPI_DATA7"),
415 PINCTRL_PIN(40, "USB_ULPI_DIR"),
416 PINCTRL_PIN(41, "USB_ULPI_NXT"),
417 PINCTRL_PIN(42, "USB_ULPI_STP"),
418 PINCTRL_PIN(43, "USB_ULPI_REFCLK"),
421 static const unsigned int byt_sus_pins_map[BYT_NGPIO_SUS] = {
422 29, 33, 30, 31, 32, 34, 36, 35, 38, 37,
423 18, 7, 11, 20, 17, 1, 8, 10, 19, 12,
424 0, 2, 23, 39, 28, 27, 22, 21, 24, 25,
425 26, 51, 56, 54, 49, 55, 48, 57, 50, 58,
429 static const unsigned int byt_sus_usb_over_current_pins[] = { 19, 20 };
430 static const unsigned int byt_sus_usb_over_current_mode_values[] = { 0, 0 };
431 static const unsigned int byt_sus_usb_over_current_gpio_mode_values[] = { 1, 1 };
433 static const unsigned int byt_sus_usb_ulpi_pins[] = {
434 14, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
436 static const unsigned int byt_sus_usb_ulpi_mode_values[] = {
437 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
439 static const unsigned int byt_sus_usb_ulpi_gpio_mode_values[] = {
440 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
443 static const unsigned int byt_sus_pcu_spi_pins[] = { 21 };
444 static const unsigned int byt_sus_pcu_spi_mode_values[] = { 0 };
445 static const unsigned int byt_sus_pcu_spi_gpio_mode_values[] = { 1 };
447 static const unsigned int byt_sus_pmu_clk1_pins[] = { 5 };
448 static const unsigned int byt_sus_pmu_clk2_pins[] = { 6 };
450 static const struct intel_pingroup byt_sus_groups[] = {
451 PIN_GROUP("usb_oc_grp", byt_sus_usb_over_current_pins, byt_sus_usb_over_current_mode_values),
452 PIN_GROUP("usb_ulpi_grp", byt_sus_usb_ulpi_pins, byt_sus_usb_ulpi_mode_values),
453 PIN_GROUP("pcu_spi_grp", byt_sus_pcu_spi_pins, byt_sus_pcu_spi_mode_values),
454 PIN_GROUP("usb_oc_grp_gpio", byt_sus_usb_over_current_pins, byt_sus_usb_over_current_gpio_mode_values),
455 PIN_GROUP("usb_ulpi_grp_gpio", byt_sus_usb_ulpi_pins, byt_sus_usb_ulpi_gpio_mode_values),
456 PIN_GROUP("pcu_spi_grp_gpio", byt_sus_pcu_spi_pins, byt_sus_pcu_spi_gpio_mode_values),
457 PIN_GROUP("pmu_clk1_grp", byt_sus_pmu_clk1_pins, 1),
458 PIN_GROUP("pmu_clk2_grp", byt_sus_pmu_clk2_pins, 1),
461 static const char * const byt_sus_usb_groups[] = {
462 "usb_oc_grp", "usb_ulpi_grp",
464 static const char * const byt_sus_spi_groups[] = { "pcu_spi_grp" };
465 static const char * const byt_sus_pmu_clk_groups[] = {
466 "pmu_clk1_grp", "pmu_clk2_grp",
468 static const char * const byt_sus_gpio_groups[] = {
469 "usb_oc_grp_gpio", "usb_ulpi_grp_gpio", "pcu_spi_grp_gpio",
470 "pmu_clk1_grp", "pmu_clk2_grp",
473 static const struct intel_function byt_sus_functions[] = {
474 FUNCTION("usb", byt_sus_usb_groups),
475 FUNCTION("spi", byt_sus_spi_groups),
476 FUNCTION("gpio", byt_sus_gpio_groups),
477 FUNCTION("pmu_clk", byt_sus_pmu_clk_groups),
480 static const struct intel_community byt_sus_communities[] = {
481 COMMUNITY(0, BYT_NGPIO_SUS, byt_sus_pins_map),
484 static const struct intel_pinctrl_soc_data byt_sus_soc_data = {
485 .uid = BYT_SUS_ACPI_UID,
486 .pins = byt_sus_pins,
487 .npins = ARRAY_SIZE(byt_sus_pins),
488 .groups = byt_sus_groups,
489 .ngroups = ARRAY_SIZE(byt_sus_groups),
490 .functions = byt_sus_functions,
491 .nfunctions = ARRAY_SIZE(byt_sus_functions),
492 .communities = byt_sus_communities,
493 .ncommunities = ARRAY_SIZE(byt_sus_communities),
496 static const struct pinctrl_pin_desc byt_ncore_pins[] = {
497 PINCTRL_PIN(0, "HV_DDI0_HPD"),
498 PINCTRL_PIN(1, "HV_DDI0_DDC_SDA"),
499 PINCTRL_PIN(2, "HV_DDI0_DDC_SCL"),
500 PINCTRL_PIN(3, "PANEL0_VDDEN"),
501 PINCTRL_PIN(4, "PANEL0_BKLTEN"),
502 PINCTRL_PIN(5, "PANEL0_BKLTCTL"),
503 PINCTRL_PIN(6, "HV_DDI1_HPD"),
504 PINCTRL_PIN(7, "HV_DDI1_DDC_SDA"),
505 PINCTRL_PIN(8, "HV_DDI1_DDC_SCL"),
506 PINCTRL_PIN(9, "PANEL1_VDDEN"),
507 PINCTRL_PIN(10, "PANEL1_BKLTEN"),
508 PINCTRL_PIN(11, "PANEL1_BKLTCTL"),
509 PINCTRL_PIN(12, "GP_INTD_DSI_TE1"),
510 PINCTRL_PIN(13, "HV_DDI2_DDC_SDA"),
511 PINCTRL_PIN(14, "HV_DDI2_DDC_SCL"),
512 PINCTRL_PIN(15, "GP_CAMERASB00"),
513 PINCTRL_PIN(16, "GP_CAMERASB01"),
514 PINCTRL_PIN(17, "GP_CAMERASB02"),
515 PINCTRL_PIN(18, "GP_CAMERASB03"),
516 PINCTRL_PIN(19, "GP_CAMERASB04"),
517 PINCTRL_PIN(20, "GP_CAMERASB05"),
518 PINCTRL_PIN(21, "GP_CAMERASB06"),
519 PINCTRL_PIN(22, "GP_CAMERASB07"),
520 PINCTRL_PIN(23, "GP_CAMERASB08"),
521 PINCTRL_PIN(24, "GP_CAMERASB09"),
522 PINCTRL_PIN(25, "GP_CAMERASB10"),
523 PINCTRL_PIN(26, "GP_CAMERASB11"),
524 PINCTRL_PIN(27, "GP_INTD_DSI_TE2"),
527 static const unsigned int byt_ncore_pins_map[BYT_NGPIO_NCORE] = {
528 19, 18, 17, 20, 21, 22, 24, 25, 23, 16,
529 14, 15, 12, 26, 27, 1, 4, 8, 11, 0,
530 3, 6, 10, 13, 2, 5, 9, 7,
533 static const struct intel_community byt_ncore_communities[] = {
534 COMMUNITY(0, BYT_NGPIO_NCORE, byt_ncore_pins_map),
537 static const struct intel_pinctrl_soc_data byt_ncore_soc_data = {
538 .uid = BYT_NCORE_ACPI_UID,
539 .pins = byt_ncore_pins,
540 .npins = ARRAY_SIZE(byt_ncore_pins),
541 .communities = byt_ncore_communities,
542 .ncommunities = ARRAY_SIZE(byt_ncore_communities),
545 static const struct intel_pinctrl_soc_data *byt_soc_data[] = {
552 static DEFINE_RAW_SPINLOCK(byt_lock);
554 static struct intel_community *byt_get_community(struct intel_pinctrl *vg,
557 struct intel_community *comm;
560 for (i = 0; i < vg->ncommunities; i++) {
561 comm = vg->communities + i;
562 if (pin < comm->pin_base + comm->npins && pin >= comm->pin_base)
569 static void __iomem *byt_gpio_reg(struct intel_pinctrl *vg, unsigned int offset,
572 struct intel_community *comm = byt_get_community(vg, offset);
578 offset -= comm->pin_base;
580 case BYT_INT_STAT_REG:
581 reg_offset = (offset / 32) * 4;
583 case BYT_DEBOUNCE_REG:
587 reg_offset = comm->pad_map[offset] * 16;
591 return comm->pad_regs + reg_offset + reg;
594 static int byt_get_groups_count(struct pinctrl_dev *pctldev)
596 struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctldev);
598 return vg->soc->ngroups;
601 static const char *byt_get_group_name(struct pinctrl_dev *pctldev,
602 unsigned int selector)
604 struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctldev);
606 return vg->soc->groups[selector].grp.name;
609 static int byt_get_group_pins(struct pinctrl_dev *pctldev,
610 unsigned int selector,
611 const unsigned int **pins,
612 unsigned int *num_pins)
614 struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctldev);
616 *pins = vg->soc->groups[selector].grp.pins;
617 *num_pins = vg->soc->groups[selector].grp.npins;
622 static const struct pinctrl_ops byt_pinctrl_ops = {
623 .get_groups_count = byt_get_groups_count,
624 .get_group_name = byt_get_group_name,
625 .get_group_pins = byt_get_group_pins,
628 static int byt_get_functions_count(struct pinctrl_dev *pctldev)
630 struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctldev);
632 return vg->soc->nfunctions;
635 static const char *byt_get_function_name(struct pinctrl_dev *pctldev,
636 unsigned int selector)
638 struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctldev);
640 return vg->soc->functions[selector].func.name;
643 static int byt_get_function_groups(struct pinctrl_dev *pctldev,
644 unsigned int selector,
645 const char * const **groups,
646 unsigned int *ngroups)
648 struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctldev);
650 *groups = vg->soc->functions[selector].func.groups;
651 *ngroups = vg->soc->functions[selector].func.ngroups;
656 static void byt_set_group_simple_mux(struct intel_pinctrl *vg,
657 const struct intel_pingroup group,
663 raw_spin_lock_irqsave(&byt_lock, flags);
665 for (i = 0; i < group.grp.npins; i++) {
666 void __iomem *padcfg0;
669 padcfg0 = byt_gpio_reg(vg, group.grp.pins[i], BYT_CONF0_REG);
671 dev_warn(vg->dev, "Group %s, pin %i not muxed (can't retrieve CONF0)\n",
676 value = readl(padcfg0);
677 value &= ~BYT_PIN_MUX;
679 writel(value, padcfg0);
682 raw_spin_unlock_irqrestore(&byt_lock, flags);
685 static void byt_set_group_mixed_mux(struct intel_pinctrl *vg,
686 const struct intel_pingroup group,
687 const unsigned int *func)
692 raw_spin_lock_irqsave(&byt_lock, flags);
694 for (i = 0; i < group.grp.npins; i++) {
695 void __iomem *padcfg0;
698 padcfg0 = byt_gpio_reg(vg, group.grp.pins[i], BYT_CONF0_REG);
700 dev_warn(vg->dev, "Group %s, pin %i not muxed (can't retrieve CONF0)\n",
705 value = readl(padcfg0);
706 value &= ~BYT_PIN_MUX;
708 writel(value, padcfg0);
711 raw_spin_unlock_irqrestore(&byt_lock, flags);
714 static int byt_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector,
715 unsigned int group_selector)
717 struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctldev);
718 const struct intel_function func = vg->soc->functions[func_selector];
719 const struct intel_pingroup group = vg->soc->groups[group_selector];
722 byt_set_group_mixed_mux(vg, group, group.modes);
723 else if (!strcmp(func.func.name, "gpio"))
724 byt_set_group_simple_mux(vg, group, BYT_DEFAULT_GPIO_MUX);
726 byt_set_group_simple_mux(vg, group, group.mode);
731 static u32 byt_get_gpio_mux(struct intel_pinctrl *vg, unsigned int offset)
733 /* SCORE pin 92-93 */
734 if (!strcmp(vg->soc->uid, BYT_SCORE_ACPI_UID) &&
735 offset >= 92 && offset <= 93)
736 return BYT_ALTER_GPIO_MUX;
739 if (!strcmp(vg->soc->uid, BYT_SUS_ACPI_UID) &&
740 offset >= 11 && offset <= 21)
741 return BYT_ALTER_GPIO_MUX;
743 return BYT_DEFAULT_GPIO_MUX;
746 static void byt_gpio_clear_triggering(struct intel_pinctrl *vg, unsigned int offset)
748 void __iomem *reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
752 raw_spin_lock_irqsave(&byt_lock, flags);
755 /* Do not clear direct-irq enabled IRQs (from gpio_disable_free) */
756 if (!(value & BYT_DIRECT_IRQ_EN))
757 value &= ~(BYT_TRIG_POS | BYT_TRIG_NEG | BYT_TRIG_LVL);
760 raw_spin_unlock_irqrestore(&byt_lock, flags);
763 static int byt_gpio_request_enable(struct pinctrl_dev *pctl_dev,
764 struct pinctrl_gpio_range *range,
767 struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
768 void __iomem *reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
772 raw_spin_lock_irqsave(&byt_lock, flags);
775 * In most cases, func pin mux 000 means GPIO function.
776 * But, some pins may have func pin mux 001 represents
779 * Because there are devices out there where some pins were not
780 * configured correctly we allow changing the mux value from
781 * request (but print out warning about that).
783 value = readl(reg) & BYT_PIN_MUX;
784 gpio_mux = byt_get_gpio_mux(vg, offset);
785 if (gpio_mux != value) {
786 value = readl(reg) & ~BYT_PIN_MUX;
790 dev_warn(vg->dev, FW_BUG "Pin %i: forcibly re-configured as GPIO\n", offset);
793 raw_spin_unlock_irqrestore(&byt_lock, flags);
795 pm_runtime_get(vg->dev);
800 static void byt_gpio_disable_free(struct pinctrl_dev *pctl_dev,
801 struct pinctrl_gpio_range *range,
804 struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
806 byt_gpio_clear_triggering(vg, offset);
807 pm_runtime_put(vg->dev);
810 static void byt_gpio_direct_irq_check(struct intel_pinctrl *vg,
813 void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
816 * Before making any direction modifications, do a check if gpio is set
817 * for direct IRQ. On Bay Trail, setting GPIO to output does not make
818 * sense, so let's at least inform the caller before they shoot
819 * themselves in the foot.
821 if (readl(conf_reg) & BYT_DIRECT_IRQ_EN)
822 dev_info_once(vg->dev,
823 "Potential Error: Pin %i: forcibly set GPIO with DIRECT_IRQ_EN to output\n",
827 static int byt_gpio_set_direction(struct pinctrl_dev *pctl_dev,
828 struct pinctrl_gpio_range *range,
832 struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
833 void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
837 raw_spin_lock_irqsave(&byt_lock, flags);
839 value = readl(val_reg);
840 value &= ~BYT_DIR_MASK;
842 value |= BYT_OUTPUT_EN;
844 byt_gpio_direct_irq_check(vg, offset);
846 writel(value, val_reg);
848 raw_spin_unlock_irqrestore(&byt_lock, flags);
853 static const struct pinmux_ops byt_pinmux_ops = {
854 .get_functions_count = byt_get_functions_count,
855 .get_function_name = byt_get_function_name,
856 .get_function_groups = byt_get_function_groups,
857 .set_mux = byt_set_mux,
858 .gpio_request_enable = byt_gpio_request_enable,
859 .gpio_disable_free = byt_gpio_disable_free,
860 .gpio_set_direction = byt_gpio_set_direction,
863 static void byt_get_pull_strength(u32 reg, u16 *strength)
865 switch (reg & BYT_PULL_STR_MASK) {
866 case BYT_PULL_STR_2K:
869 case BYT_PULL_STR_10K:
872 case BYT_PULL_STR_20K:
875 case BYT_PULL_STR_40K:
881 static int byt_set_pull_strength(u32 *reg, u16 strength)
883 *reg &= ~BYT_PULL_STR_MASK;
887 *reg |= BYT_PULL_STR_2K;
890 *reg |= BYT_PULL_STR_10K;
893 *reg |= BYT_PULL_STR_20K;
896 *reg |= BYT_PULL_STR_40K;
905 static int byt_pin_config_get(struct pinctrl_dev *pctl_dev, unsigned int offset,
906 unsigned long *config)
908 struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
909 enum pin_config_param param = pinconf_to_config_param(*config);
910 void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
911 void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
912 void __iomem *db_reg = byt_gpio_reg(vg, offset, BYT_DEBOUNCE_REG);
914 u32 conf, pull, val, debounce;
917 raw_spin_lock_irqsave(&byt_lock, flags);
918 conf = readl(conf_reg);
919 pull = conf & BYT_PULL_ASSIGN_MASK;
920 val = readl(val_reg);
921 raw_spin_unlock_irqrestore(&byt_lock, flags);
924 case PIN_CONFIG_BIAS_DISABLE:
928 case PIN_CONFIG_BIAS_PULL_DOWN:
929 /* Pull assignment is only applicable in input mode */
930 if ((val & BYT_INPUT_EN) || pull != BYT_PULL_ASSIGN_DOWN)
933 byt_get_pull_strength(conf, &arg);
936 case PIN_CONFIG_BIAS_PULL_UP:
937 /* Pull assignment is only applicable in input mode */
938 if ((val & BYT_INPUT_EN) || pull != BYT_PULL_ASSIGN_UP)
941 byt_get_pull_strength(conf, &arg);
944 case PIN_CONFIG_INPUT_DEBOUNCE:
945 if (!(conf & BYT_DEBOUNCE_EN))
948 raw_spin_lock_irqsave(&byt_lock, flags);
949 debounce = readl(db_reg);
950 raw_spin_unlock_irqrestore(&byt_lock, flags);
952 switch (debounce & BYT_DEBOUNCE_PULSE_MASK) {
953 case BYT_DEBOUNCE_PULSE_375US:
956 case BYT_DEBOUNCE_PULSE_750US:
959 case BYT_DEBOUNCE_PULSE_1500US:
962 case BYT_DEBOUNCE_PULSE_3MS:
965 case BYT_DEBOUNCE_PULSE_6MS:
968 case BYT_DEBOUNCE_PULSE_12MS:
971 case BYT_DEBOUNCE_PULSE_24MS:
983 *config = pinconf_to_config_packed(param, arg);
988 static int byt_pin_config_set(struct pinctrl_dev *pctl_dev,
990 unsigned long *configs,
991 unsigned int num_configs)
993 struct intel_pinctrl *vg = pinctrl_dev_get_drvdata(pctl_dev);
994 unsigned int param, arg;
995 void __iomem *conf_reg = byt_gpio_reg(vg, offset, BYT_CONF0_REG);
996 void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
997 void __iomem *db_reg = byt_gpio_reg(vg, offset, BYT_DEBOUNCE_REG);
999 u32 conf, val, debounce;
1002 raw_spin_lock_irqsave(&byt_lock, flags);
1004 conf = readl(conf_reg);
1005 val = readl(val_reg);
1007 for (i = 0; i < num_configs; i++) {
1008 param = pinconf_to_config_param(configs[i]);
1009 arg = pinconf_to_config_argument(configs[i]);
1012 case PIN_CONFIG_BIAS_DISABLE:
1013 conf &= ~BYT_PULL_ASSIGN_MASK;
1015 case PIN_CONFIG_BIAS_PULL_DOWN:
1016 /* Set default strength value in case none is given */
1021 * Pull assignment is only applicable in input mode. If
1022 * chip is not in input mode, set it and warn about it.
1024 if (val & BYT_INPUT_EN) {
1025 val &= ~BYT_INPUT_EN;
1026 writel(val, val_reg);
1027 dev_warn(vg->dev, "Pin %i: forcibly set to input mode\n", offset);
1030 conf &= ~BYT_PULL_ASSIGN_MASK;
1031 conf |= BYT_PULL_ASSIGN_DOWN;
1032 ret = byt_set_pull_strength(&conf, arg);
1035 case PIN_CONFIG_BIAS_PULL_UP:
1036 /* Set default strength value in case none is given */
1041 * Pull assignment is only applicable in input mode. If
1042 * chip is not in input mode, set it and warn about it.
1044 if (val & BYT_INPUT_EN) {
1045 val &= ~BYT_INPUT_EN;
1046 writel(val, val_reg);
1047 dev_warn(vg->dev, "Pin %i: forcibly set to input mode\n", offset);
1050 conf &= ~BYT_PULL_ASSIGN_MASK;
1051 conf |= BYT_PULL_ASSIGN_UP;
1052 ret = byt_set_pull_strength(&conf, arg);
1055 case PIN_CONFIG_INPUT_DEBOUNCE:
1056 debounce = readl(db_reg);
1059 conf |= BYT_DEBOUNCE_EN;
1061 conf &= ~BYT_DEBOUNCE_EN;
1065 debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
1066 debounce |= BYT_DEBOUNCE_PULSE_375US;
1069 debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
1070 debounce |= BYT_DEBOUNCE_PULSE_750US;
1073 debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
1074 debounce |= BYT_DEBOUNCE_PULSE_1500US;
1077 debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
1078 debounce |= BYT_DEBOUNCE_PULSE_3MS;
1081 debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
1082 debounce |= BYT_DEBOUNCE_PULSE_6MS;
1085 debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
1086 debounce |= BYT_DEBOUNCE_PULSE_12MS;
1089 debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
1090 debounce |= BYT_DEBOUNCE_PULSE_24MS;
1099 writel(debounce, db_reg);
1110 writel(conf, conf_reg);
1112 raw_spin_unlock_irqrestore(&byt_lock, flags);
1117 static const struct pinconf_ops byt_pinconf_ops = {
1119 .pin_config_get = byt_pin_config_get,
1120 .pin_config_set = byt_pin_config_set,
1123 static const struct pinctrl_desc byt_pinctrl_desc = {
1124 .pctlops = &byt_pinctrl_ops,
1125 .pmxops = &byt_pinmux_ops,
1126 .confops = &byt_pinconf_ops,
1127 .owner = THIS_MODULE,
1130 static int byt_gpio_get(struct gpio_chip *chip, unsigned int offset)
1132 struct intel_pinctrl *vg = gpiochip_get_data(chip);
1133 void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1134 unsigned long flags;
1137 raw_spin_lock_irqsave(&byt_lock, flags);
1139 raw_spin_unlock_irqrestore(&byt_lock, flags);
1141 return !!(val & BYT_LEVEL);
1144 static void byt_gpio_set(struct gpio_chip *chip, unsigned int offset, int value)
1146 struct intel_pinctrl *vg = gpiochip_get_data(chip);
1147 void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1148 unsigned long flags;
1154 raw_spin_lock_irqsave(&byt_lock, flags);
1155 old_val = readl(reg);
1157 writel(old_val | BYT_LEVEL, reg);
1159 writel(old_val & ~BYT_LEVEL, reg);
1160 raw_spin_unlock_irqrestore(&byt_lock, flags);
1163 static int byt_gpio_get_direction(struct gpio_chip *chip, unsigned int offset)
1165 struct intel_pinctrl *vg = gpiochip_get_data(chip);
1166 void __iomem *reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1167 unsigned long flags;
1173 raw_spin_lock_irqsave(&byt_lock, flags);
1175 raw_spin_unlock_irqrestore(&byt_lock, flags);
1177 if (!(value & BYT_OUTPUT_EN))
1178 return GPIO_LINE_DIRECTION_OUT;
1179 if (!(value & BYT_INPUT_EN))
1180 return GPIO_LINE_DIRECTION_IN;
1185 static int byt_gpio_direction_input(struct gpio_chip *chip, unsigned int offset)
1187 struct intel_pinctrl *vg = gpiochip_get_data(chip);
1188 void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1189 unsigned long flags;
1192 raw_spin_lock_irqsave(&byt_lock, flags);
1194 reg = readl(val_reg);
1195 reg &= ~BYT_DIR_MASK;
1196 reg |= BYT_OUTPUT_EN;
1197 writel(reg, val_reg);
1199 raw_spin_unlock_irqrestore(&byt_lock, flags);
1204 * Note despite the temptation this MUST NOT be converted into a call to
1205 * pinctrl_gpio_direction_output() + byt_gpio_set() that does not work this
1206 * MUST be done as a single BYT_VAL_REG register write.
1207 * See the commit message of the commit adding this comment for details.
1209 static int byt_gpio_direction_output(struct gpio_chip *chip,
1210 unsigned int offset, int value)
1212 struct intel_pinctrl *vg = gpiochip_get_data(chip);
1213 void __iomem *val_reg = byt_gpio_reg(vg, offset, BYT_VAL_REG);
1214 unsigned long flags;
1217 raw_spin_lock_irqsave(&byt_lock, flags);
1219 byt_gpio_direct_irq_check(vg, offset);
1221 reg = readl(val_reg);
1222 reg &= ~BYT_DIR_MASK;
1228 writel(reg, val_reg);
1230 raw_spin_unlock_irqrestore(&byt_lock, flags);
1234 static void byt_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
1236 struct intel_pinctrl *vg = gpiochip_get_data(chip);
1240 for (i = 0; i < vg->soc->npins; i++) {
1241 const struct intel_community *comm;
1242 void __iomem *conf_reg, *val_reg;
1243 const char *pull_str = NULL;
1244 const char *pull = NULL;
1245 unsigned long flags;
1249 pin = vg->soc->pins[i].number;
1251 conf_reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
1253 seq_printf(s, "Pin %i: can't retrieve CONF0\n", pin);
1257 val_reg = byt_gpio_reg(vg, pin, BYT_VAL_REG);
1259 seq_printf(s, "Pin %i: can't retrieve VAL\n", pin);
1263 raw_spin_lock_irqsave(&byt_lock, flags);
1264 conf0 = readl(conf_reg);
1265 val = readl(val_reg);
1266 raw_spin_unlock_irqrestore(&byt_lock, flags);
1268 comm = byt_get_community(vg, pin);
1270 seq_printf(s, "Pin %i: can't retrieve community\n", pin);
1273 label = gpiochip_is_requested(chip, i);
1275 label = "Unrequested";
1277 switch (conf0 & BYT_PULL_ASSIGN_MASK) {
1278 case BYT_PULL_ASSIGN_UP:
1281 case BYT_PULL_ASSIGN_DOWN:
1286 switch (conf0 & BYT_PULL_STR_MASK) {
1287 case BYT_PULL_STR_2K:
1290 case BYT_PULL_STR_10K:
1293 case BYT_PULL_STR_20K:
1296 case BYT_PULL_STR_40K:
1302 " gpio-%-3d (%-20.20s) %s %s %s pad-%-3d offset:0x%03x mux:%d %s%s%s",
1305 val & BYT_INPUT_EN ? " " : "in",
1306 val & BYT_OUTPUT_EN ? " " : "out",
1307 str_hi_lo(val & BYT_LEVEL),
1308 comm->pad_map[i], comm->pad_map[i] * 16,
1310 conf0 & BYT_TRIG_NEG ? " fall" : " ",
1311 conf0 & BYT_TRIG_POS ? " rise" : " ",
1312 conf0 & BYT_TRIG_LVL ? " level" : " ");
1314 if (pull && pull_str)
1315 seq_printf(s, " %-4s %-3s", pull, pull_str);
1319 if (conf0 & BYT_IODEN)
1320 seq_puts(s, " open-drain");
1326 static const struct gpio_chip byt_gpio_chip = {
1327 .owner = THIS_MODULE,
1328 .request = gpiochip_generic_request,
1329 .free = gpiochip_generic_free,
1330 .get_direction = byt_gpio_get_direction,
1331 .direction_input = byt_gpio_direction_input,
1332 .direction_output = byt_gpio_direction_output,
1333 .get = byt_gpio_get,
1334 .set = byt_gpio_set,
1335 .set_config = gpiochip_generic_config,
1336 .dbg_show = byt_gpio_dbg_show,
1339 static void byt_irq_ack(struct irq_data *d)
1341 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1342 struct intel_pinctrl *vg = gpiochip_get_data(gc);
1343 irq_hw_number_t hwirq = irqd_to_hwirq(d);
1346 reg = byt_gpio_reg(vg, hwirq, BYT_INT_STAT_REG);
1350 raw_spin_lock(&byt_lock);
1351 writel(BIT(hwirq % 32), reg);
1352 raw_spin_unlock(&byt_lock);
1355 static void byt_irq_mask(struct irq_data *d)
1357 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1358 struct intel_pinctrl *vg = gpiochip_get_data(gc);
1359 irq_hw_number_t hwirq = irqd_to_hwirq(d);
1361 byt_gpio_clear_triggering(vg, hwirq);
1362 gpiochip_disable_irq(gc, hwirq);
1365 static void byt_irq_unmask(struct irq_data *d)
1367 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
1368 struct intel_pinctrl *vg = gpiochip_get_data(gc);
1369 irq_hw_number_t hwirq = irqd_to_hwirq(d);
1370 unsigned long flags;
1374 gpiochip_enable_irq(gc, hwirq);
1376 reg = byt_gpio_reg(vg, hwirq, BYT_CONF0_REG);
1380 raw_spin_lock_irqsave(&byt_lock, flags);
1383 switch (irqd_get_trigger_type(d)) {
1384 case IRQ_TYPE_LEVEL_HIGH:
1385 value |= BYT_TRIG_LVL;
1387 case IRQ_TYPE_EDGE_RISING:
1388 value |= BYT_TRIG_POS;
1390 case IRQ_TYPE_LEVEL_LOW:
1391 value |= BYT_TRIG_LVL;
1393 case IRQ_TYPE_EDGE_FALLING:
1394 value |= BYT_TRIG_NEG;
1396 case IRQ_TYPE_EDGE_BOTH:
1397 value |= (BYT_TRIG_NEG | BYT_TRIG_POS);
1403 raw_spin_unlock_irqrestore(&byt_lock, flags);
1406 static int byt_irq_type(struct irq_data *d, unsigned int type)
1408 struct intel_pinctrl *vg = gpiochip_get_data(irq_data_get_irq_chip_data(d));
1409 irq_hw_number_t hwirq = irqd_to_hwirq(d);
1411 unsigned long flags;
1414 reg = byt_gpio_reg(vg, hwirq, BYT_CONF0_REG);
1418 raw_spin_lock_irqsave(&byt_lock, flags);
1421 WARN(value & BYT_DIRECT_IRQ_EN,
1422 "Bad pad config for IO mode, force DIRECT_IRQ_EN bit clearing");
1424 /* For level trigges the BYT_TRIG_POS and BYT_TRIG_NEG bits
1425 * are used to indicate high and low level triggering
1427 value &= ~(BYT_DIRECT_IRQ_EN | BYT_TRIG_POS | BYT_TRIG_NEG |
1429 /* Enable glitch filtering */
1430 value |= BYT_GLITCH_FILTER_EN | BYT_GLITCH_F_SLOW_CLK |
1431 BYT_GLITCH_F_FAST_CLK;
1435 if (type & IRQ_TYPE_EDGE_BOTH)
1436 irq_set_handler_locked(d, handle_edge_irq);
1437 else if (type & IRQ_TYPE_LEVEL_MASK)
1438 irq_set_handler_locked(d, handle_level_irq);
1440 raw_spin_unlock_irqrestore(&byt_lock, flags);
1445 static const struct irq_chip byt_gpio_irq_chip = {
1447 .irq_ack = byt_irq_ack,
1448 .irq_mask = byt_irq_mask,
1449 .irq_unmask = byt_irq_unmask,
1450 .irq_set_type = byt_irq_type,
1451 .flags = IRQCHIP_SKIP_SET_WAKE | IRQCHIP_SET_TYPE_MASKED | IRQCHIP_IMMUTABLE,
1452 GPIOCHIP_IRQ_RESOURCE_HELPERS,
1455 static void byt_gpio_irq_handler(struct irq_desc *desc)
1457 struct irq_data *data = irq_desc_get_irq_data(desc);
1458 struct intel_pinctrl *vg = gpiochip_get_data(irq_desc_get_handler_data(desc));
1459 struct irq_chip *chip = irq_data_get_irq_chip(data);
1462 unsigned long pending;
1464 /* check from GPIO controller which pin triggered the interrupt */
1465 for (base = 0; base < vg->chip.ngpio; base += 32) {
1466 reg = byt_gpio_reg(vg, base, BYT_INT_STAT_REG);
1469 dev_warn(vg->dev, "Pin %i: can't retrieve INT_STAT%u\n", base / 32, base);
1473 raw_spin_lock(&byt_lock);
1474 pending = readl(reg);
1475 raw_spin_unlock(&byt_lock);
1476 for_each_set_bit(pin, &pending, 32)
1477 generic_handle_domain_irq(vg->chip.irq.domain, base + pin);
1479 chip->irq_eoi(data);
1482 static bool byt_direct_irq_sanity_check(struct intel_pinctrl *vg, int pin, u32 conf0)
1484 int direct_irq, ioapic_direct_irq_base;
1485 u8 *match, direct_irq_mux[16];
1488 memcpy_fromio(direct_irq_mux, vg->communities->pad_regs + BYT_DIRECT_IRQ_REG,
1489 sizeof(direct_irq_mux));
1490 match = memchr(direct_irq_mux, pin, sizeof(direct_irq_mux));
1492 dev_warn(vg->dev, FW_BUG "Pin %i: DIRECT_IRQ_EN set but no IRQ assigned, clearing\n", pin);
1496 direct_irq = match - direct_irq_mux;
1497 /* Base IO-APIC pin numbers come from atom-e3800-family-datasheet.pdf */
1498 ioapic_direct_irq_base = (vg->communities->npins == BYT_NGPIO_SCORE) ? 51 : 67;
1499 dev_dbg(vg->dev, "Pin %i: uses direct IRQ %d (IO-APIC %d)\n", pin,
1500 direct_irq, direct_irq + ioapic_direct_irq_base);
1503 * Testing has shown that the way direct IRQs work is that the combination of the
1504 * direct-irq-en flag and the direct IRQ mux connect the output of the GPIO's IRQ
1505 * trigger block, which normally sets the status flag in the IRQ status reg at
1506 * 0x800, to one of the IO-APIC pins according to the mux registers.
1509 * 1. The TRIG_MASK bits must be set to configure the GPIO's IRQ trigger block
1510 * 2. The TRIG_LVL bit *must* be set, so that the GPIO's input value is directly
1511 * passed (1:1 or inverted) to the IO-APIC pin, if TRIG_LVL is not set,
1512 * selecting edge mode operation then on the first edge the IO-APIC pin goes
1513 * high, but since no write-to-clear write will be done to the IRQ status reg
1514 * at 0x800, the detected edge condition will never get cleared.
1516 trig = conf0 & BYT_TRIG_MASK;
1517 if (trig != (BYT_TRIG_POS | BYT_TRIG_LVL) &&
1518 trig != (BYT_TRIG_NEG | BYT_TRIG_LVL)) {
1520 FW_BUG "Pin %i: DIRECT_IRQ_EN set without trigger (CONF0: %#08x), clearing\n",
1528 static void byt_init_irq_valid_mask(struct gpio_chip *chip,
1529 unsigned long *valid_mask,
1530 unsigned int ngpios)
1532 struct intel_pinctrl *vg = gpiochip_get_data(chip);
1538 * Clear interrupt triggers for all pins that are GPIOs and
1539 * do not use direct IRQ mode. This will prevent spurious
1540 * interrupts from misconfigured pins.
1542 for (i = 0; i < vg->soc->npins; i++) {
1543 unsigned int pin = vg->soc->pins[i].number;
1545 reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
1547 dev_warn(vg->dev, "Pin %i: could not retrieve CONF0\n", i);
1552 if (value & BYT_DIRECT_IRQ_EN) {
1553 if (byt_direct_irq_sanity_check(vg, i, value)) {
1554 clear_bit(i, valid_mask);
1556 value &= ~(BYT_DIRECT_IRQ_EN | BYT_TRIG_POS |
1557 BYT_TRIG_NEG | BYT_TRIG_LVL);
1560 } else if ((value & BYT_PIN_MUX) == byt_get_gpio_mux(vg, i)) {
1561 byt_gpio_clear_triggering(vg, i);
1562 dev_dbg(vg->dev, "disabling GPIO %d\n", i);
1567 static int byt_gpio_irq_init_hw(struct gpio_chip *chip)
1569 struct intel_pinctrl *vg = gpiochip_get_data(chip);
1573 /* clear interrupt status trigger registers */
1574 for (base = 0; base < vg->soc->npins; base += 32) {
1575 reg = byt_gpio_reg(vg, base, BYT_INT_STAT_REG);
1578 dev_warn(vg->dev, "Pin %i: can't retrieve INT_STAT%u\n", base / 32, base);
1582 writel(0xffffffff, reg);
1583 /* make sure trigger bits are cleared, if not then a pin
1584 might be misconfigured in bios */
1588 "GPIO interrupt error, pins misconfigured. INT_STAT%u: %#08x\n",
1595 static int byt_gpio_add_pin_ranges(struct gpio_chip *chip)
1597 struct intel_pinctrl *vg = gpiochip_get_data(chip);
1598 struct device *dev = vg->dev;
1601 ret = gpiochip_add_pin_range(chip, dev_name(dev), 0, 0, vg->soc->npins);
1603 dev_err(dev, "failed to add GPIO pin range\n");
1608 static int byt_gpio_probe(struct intel_pinctrl *vg)
1610 struct platform_device *pdev = to_platform_device(vg->dev);
1611 struct gpio_chip *gc;
1614 /* Set up gpio chip */
1615 vg->chip = byt_gpio_chip;
1617 gc->label = dev_name(vg->dev);
1619 gc->can_sleep = false;
1620 gc->add_pin_ranges = byt_gpio_add_pin_ranges;
1621 gc->parent = vg->dev;
1622 gc->ngpio = vg->soc->npins;
1624 #ifdef CONFIG_PM_SLEEP
1625 vg->context.pads = devm_kcalloc(vg->dev, gc->ngpio, sizeof(*vg->context.pads),
1627 if (!vg->context.pads)
1631 /* set up interrupts */
1632 irq = platform_get_irq_optional(pdev, 0);
1634 struct gpio_irq_chip *girq;
1637 gpio_irq_chip_set_chip(girq, &byt_gpio_irq_chip);
1638 girq->init_hw = byt_gpio_irq_init_hw;
1639 girq->init_valid_mask = byt_init_irq_valid_mask;
1640 girq->parent_handler = byt_gpio_irq_handler;
1641 girq->num_parents = 1;
1642 girq->parents = devm_kcalloc(vg->dev, girq->num_parents,
1643 sizeof(*girq->parents), GFP_KERNEL);
1646 girq->parents[0] = irq;
1647 girq->default_type = IRQ_TYPE_NONE;
1648 girq->handler = handle_bad_irq;
1651 ret = devm_gpiochip_add_data(vg->dev, gc, vg);
1653 dev_err(vg->dev, "failed adding byt-gpio chip\n");
1660 static int byt_set_soc_data(struct intel_pinctrl *vg,
1661 const struct intel_pinctrl_soc_data *soc)
1663 struct platform_device *pdev = to_platform_device(vg->dev);
1668 vg->ncommunities = vg->soc->ncommunities;
1669 vg->communities = devm_kcalloc(vg->dev, vg->ncommunities,
1670 sizeof(*vg->communities), GFP_KERNEL);
1671 if (!vg->communities)
1674 for (i = 0; i < vg->soc->ncommunities; i++) {
1675 struct intel_community *comm = vg->communities + i;
1677 *comm = vg->soc->communities[i];
1679 comm->pad_regs = devm_platform_ioremap_resource(pdev, 0);
1680 if (IS_ERR(comm->pad_regs))
1681 return PTR_ERR(comm->pad_regs);
1687 static const struct acpi_device_id byt_gpio_acpi_match[] = {
1688 { "INT33B2", (kernel_ulong_t)byt_soc_data },
1689 { "INT33FC", (kernel_ulong_t)byt_soc_data },
1693 static int byt_pinctrl_probe(struct platform_device *pdev)
1695 const struct intel_pinctrl_soc_data *soc_data;
1696 struct device *dev = &pdev->dev;
1697 struct intel_pinctrl *vg;
1700 soc_data = intel_pinctrl_get_soc_data(pdev);
1701 if (IS_ERR(soc_data))
1702 return PTR_ERR(soc_data);
1704 vg = devm_kzalloc(dev, sizeof(*vg), GFP_KERNEL);
1709 ret = byt_set_soc_data(vg, soc_data);
1711 dev_err(dev, "failed to set soc data\n");
1715 vg->pctldesc = byt_pinctrl_desc;
1716 vg->pctldesc.name = dev_name(dev);
1717 vg->pctldesc.pins = vg->soc->pins;
1718 vg->pctldesc.npins = vg->soc->npins;
1720 vg->pctldev = devm_pinctrl_register(dev, &vg->pctldesc, vg);
1721 if (IS_ERR(vg->pctldev)) {
1722 dev_err(dev, "failed to register pinctrl driver\n");
1723 return PTR_ERR(vg->pctldev);
1726 ret = byt_gpio_probe(vg);
1730 platform_set_drvdata(pdev, vg);
1731 pm_runtime_enable(dev);
1736 #ifdef CONFIG_PM_SLEEP
1737 static int byt_gpio_suspend(struct device *dev)
1739 struct intel_pinctrl *vg = dev_get_drvdata(dev);
1740 unsigned long flags;
1743 raw_spin_lock_irqsave(&byt_lock, flags);
1745 for (i = 0; i < vg->soc->npins; i++) {
1748 unsigned int pin = vg->soc->pins[i].number;
1750 reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
1752 dev_warn(vg->dev, "Pin %i: can't retrieve CONF0\n", i);
1755 value = readl(reg) & BYT_CONF0_RESTORE_MASK;
1756 vg->context.pads[i].conf0 = value;
1758 reg = byt_gpio_reg(vg, pin, BYT_VAL_REG);
1760 dev_warn(vg->dev, "Pin %i: can't retrieve VAL\n", i);
1763 value = readl(reg) & BYT_VAL_RESTORE_MASK;
1764 vg->context.pads[i].val = value;
1767 raw_spin_unlock_irqrestore(&byt_lock, flags);
1771 static int byt_gpio_resume(struct device *dev)
1773 struct intel_pinctrl *vg = dev_get_drvdata(dev);
1774 unsigned long flags;
1777 raw_spin_lock_irqsave(&byt_lock, flags);
1779 for (i = 0; i < vg->soc->npins; i++) {
1782 unsigned int pin = vg->soc->pins[i].number;
1784 reg = byt_gpio_reg(vg, pin, BYT_CONF0_REG);
1786 dev_warn(vg->dev, "Pin %i: can't retrieve CONF0\n", i);
1790 if ((value & BYT_CONF0_RESTORE_MASK) !=
1791 vg->context.pads[i].conf0) {
1792 value &= ~BYT_CONF0_RESTORE_MASK;
1793 value |= vg->context.pads[i].conf0;
1795 dev_info(dev, "restored pin %d CONF0 %#08x", i, value);
1798 reg = byt_gpio_reg(vg, pin, BYT_VAL_REG);
1800 dev_warn(vg->dev, "Pin %i: can't retrieve VAL\n", i);
1804 if ((value & BYT_VAL_RESTORE_MASK) !=
1805 vg->context.pads[i].val) {
1808 v = value & ~BYT_VAL_RESTORE_MASK;
1809 v |= vg->context.pads[i].val;
1812 dev_dbg(dev, "restored pin %d VAL %#08x\n", i, v);
1817 raw_spin_unlock_irqrestore(&byt_lock, flags);
1823 static int byt_gpio_runtime_suspend(struct device *dev)
1828 static int byt_gpio_runtime_resume(struct device *dev)
1834 static const struct dev_pm_ops byt_gpio_pm_ops = {
1835 SET_LATE_SYSTEM_SLEEP_PM_OPS(byt_gpio_suspend, byt_gpio_resume)
1836 SET_RUNTIME_PM_OPS(byt_gpio_runtime_suspend, byt_gpio_runtime_resume,
1840 static struct platform_driver byt_gpio_driver = {
1841 .probe = byt_pinctrl_probe,
1844 .pm = &byt_gpio_pm_ops,
1845 .acpi_match_table = byt_gpio_acpi_match,
1846 .suppress_bind_attrs = true,
1850 static int __init byt_gpio_init(void)
1852 return platform_driver_register(&byt_gpio_driver);
1854 subsys_initcall(byt_gpio_init);