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 };
234 static const unsigned int byt_score_uart3_pins
[] = { 57, 61 };
236 static const unsigned int byt_score_pwm0_pins
[] = { 94 };
237 static const unsigned int byt_score_pwm1_pins
[] = { 95 };
239 static const unsigned int byt_score_sio_spi_pins
[] = { 66, 67, 68, 69 };
241 static const unsigned int byt_score_i2c5_pins
[] = { 88, 89 };
242 static const unsigned int byt_score_i2c6_pins
[] = { 90, 91 };
243 static const unsigned int byt_score_i2c4_pins
[] = { 86, 87 };
244 static const unsigned int byt_score_i2c3_pins
[] = { 84, 85 };
245 static const unsigned int byt_score_i2c2_pins
[] = { 82, 83 };
246 static const unsigned int byt_score_i2c1_pins
[] = { 80, 81 };
247 static const unsigned int byt_score_i2c0_pins
[] = { 78, 79 };
249 static const unsigned int byt_score_ssp0_pins
[] = { 8, 9, 10, 11 };
250 static const unsigned int byt_score_ssp1_pins
[] = { 12, 13, 14, 15 };
251 static const unsigned int byt_score_ssp2_pins
[] = { 62, 63, 64, 65 };
253 static const unsigned int byt_score_sdcard_pins
[] = {
254 7, 33, 34, 35, 36, 37, 38, 39, 40, 41,
256 static const unsigned int byt_score_sdcard_mux_values
[] = {
257 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
260 static const unsigned int byt_score_sdio_pins
[] = { 27, 28, 29, 30, 31, 32 };
262 static const unsigned int byt_score_emmc_pins
[] = {
263 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
266 static const unsigned int byt_score_ilb_lpc_pins
[] = {
267 42, 43, 44, 45, 46, 47, 48, 49, 50,
270 static const unsigned int byt_score_sata_pins
[] = { 0, 1, 2 };
272 static const unsigned int byt_score_plt_clk0_pins
[] = { 96 };
273 static const unsigned int byt_score_plt_clk1_pins
[] = { 97 };
274 static const unsigned int byt_score_plt_clk2_pins
[] = { 98 };
275 static const unsigned int byt_score_plt_clk3_pins
[] = { 99 };
276 static const unsigned int byt_score_plt_clk4_pins
[] = { 100 };
277 static const unsigned int byt_score_plt_clk5_pins
[] = { 101 };
279 static const unsigned int byt_score_smbus_pins
[] = { 51, 52, 53 };
281 static const struct intel_pingroup byt_score_groups
[] = {
282 PIN_GROUP_GPIO("uart1_grp", byt_score_uart1_pins
, 1),
283 PIN_GROUP_GPIO("uart2_grp", byt_score_uart2_pins
, 1),
284 PIN_GROUP_GPIO("uart3_grp", byt_score_uart3_pins
, 1),
285 PIN_GROUP_GPIO("pwm0_grp", byt_score_pwm0_pins
, 1),
286 PIN_GROUP_GPIO("pwm1_grp", byt_score_pwm1_pins
, 1),
287 PIN_GROUP_GPIO("ssp2_grp", byt_score_ssp2_pins
, 1),
288 PIN_GROUP_GPIO("sio_spi_grp", byt_score_sio_spi_pins
, 1),
289 PIN_GROUP_GPIO("i2c5_grp", byt_score_i2c5_pins
, 1),
290 PIN_GROUP_GPIO("i2c6_grp", byt_score_i2c6_pins
, 1),
291 PIN_GROUP_GPIO("i2c4_grp", byt_score_i2c4_pins
, 1),
292 PIN_GROUP_GPIO("i2c3_grp", byt_score_i2c3_pins
, 1),
293 PIN_GROUP_GPIO("i2c2_grp", byt_score_i2c2_pins
, 1),
294 PIN_GROUP_GPIO("i2c1_grp", byt_score_i2c1_pins
, 1),
295 PIN_GROUP_GPIO("i2c0_grp", byt_score_i2c0_pins
, 1),
296 PIN_GROUP_GPIO("ssp0_grp", byt_score_ssp0_pins
, 1),
297 PIN_GROUP_GPIO("ssp1_grp", byt_score_ssp1_pins
, 1),
298 PIN_GROUP_GPIO("sdcard_grp", byt_score_sdcard_pins
, byt_score_sdcard_mux_values
),
299 PIN_GROUP_GPIO("sdio_grp", byt_score_sdio_pins
, 1),
300 PIN_GROUP_GPIO("emmc_grp", byt_score_emmc_pins
, 1),
301 PIN_GROUP_GPIO("lpc_grp", byt_score_ilb_lpc_pins
, 1),
302 PIN_GROUP_GPIO("sata_grp", byt_score_sata_pins
, 1),
303 PIN_GROUP_GPIO("plt_clk0_grp", byt_score_plt_clk0_pins
, 1),
304 PIN_GROUP_GPIO("plt_clk1_grp", byt_score_plt_clk1_pins
, 1),
305 PIN_GROUP_GPIO("plt_clk2_grp", byt_score_plt_clk2_pins
, 1),
306 PIN_GROUP_GPIO("plt_clk3_grp", byt_score_plt_clk3_pins
, 1),
307 PIN_GROUP_GPIO("plt_clk4_grp", byt_score_plt_clk4_pins
, 1),
308 PIN_GROUP_GPIO("plt_clk5_grp", byt_score_plt_clk5_pins
, 1),
309 PIN_GROUP_GPIO("smbus_grp", byt_score_smbus_pins
, 1),
312 static const char * const byt_score_uart_groups
[] = {
313 "uart1_grp", "uart2_grp", "uart3_grp",
315 static const char * const byt_score_pwm_groups
[] = {
316 "pwm0_grp", "pwm1_grp",
318 static const char * const byt_score_ssp_groups
[] = {
319 "ssp0_grp", "ssp1_grp", "ssp2_grp",
321 static const char * const byt_score_spi_groups
[] = { "sio_spi_grp" };
322 static const char * const byt_score_i2c_groups
[] = {
323 "i2c0_grp", "i2c1_grp", "i2c2_grp", "i2c3_grp", "i2c4_grp", "i2c5_grp",
326 static const char * const byt_score_sdcard_groups
[] = { "sdcard_grp" };
327 static const char * const byt_score_sdio_groups
[] = { "sdio_grp" };
328 static const char * const byt_score_emmc_groups
[] = { "emmc_grp" };
329 static const char * const byt_score_lpc_groups
[] = { "lpc_grp" };
330 static const char * const byt_score_sata_groups
[] = { "sata_grp" };
331 static const char * const byt_score_plt_clk_groups
[] = {
332 "plt_clk0_grp", "plt_clk1_grp", "plt_clk2_grp", "plt_clk3_grp",
333 "plt_clk4_grp", "plt_clk5_grp",
335 static const char * const byt_score_smbus_groups
[] = { "smbus_grp" };
336 static const char * const byt_score_gpio_groups
[] = {
337 "uart1_grp_gpio", "uart2_grp_gpio", "uart3_grp_gpio", "pwm0_grp_gpio",
338 "pwm1_grp_gpio", "ssp0_grp_gpio", "ssp1_grp_gpio", "ssp2_grp_gpio",
339 "sio_spi_grp_gpio", "i2c0_grp_gpio", "i2c1_grp_gpio", "i2c2_grp_gpio",
340 "i2c3_grp_gpio", "i2c4_grp_gpio", "i2c5_grp_gpio", "i2c6_grp_gpio",
341 "sdcard_grp_gpio", "sdio_grp_gpio", "emmc_grp_gpio", "lpc_grp_gpio",
342 "sata_grp_gpio", "plt_clk0_grp_gpio", "plt_clk1_grp_gpio",
343 "plt_clk2_grp_gpio", "plt_clk3_grp_gpio", "plt_clk4_grp_gpio",
344 "plt_clk5_grp_gpio", "smbus_grp_gpio",
347 static const struct intel_function byt_score_functions
[] = {
348 FUNCTION("uart", byt_score_uart_groups
),
349 FUNCTION("pwm", byt_score_pwm_groups
),
350 FUNCTION("ssp", byt_score_ssp_groups
),
351 FUNCTION("spi", byt_score_spi_groups
),
352 FUNCTION("i2c", byt_score_i2c_groups
),
353 FUNCTION("sdcard", byt_score_sdcard_groups
),
354 FUNCTION("sdio", byt_score_sdio_groups
),
355 FUNCTION("emmc", byt_score_emmc_groups
),
356 FUNCTION("lpc", byt_score_lpc_groups
),
357 FUNCTION("sata", byt_score_sata_groups
),
358 FUNCTION("plt_clk", byt_score_plt_clk_groups
),
359 FUNCTION("smbus", byt_score_smbus_groups
),
360 FUNCTION("gpio", byt_score_gpio_groups
),
363 static const struct intel_community byt_score_communities
[] = {
364 COMMUNITY(0, BYT_NGPIO_SCORE
, byt_score_pins_map
),
367 static const struct intel_pinctrl_soc_data byt_score_soc_data
= {
368 .uid
= BYT_SCORE_ACPI_UID
,
369 .pins
= byt_score_pins
,
370 .npins
= ARRAY_SIZE(byt_score_pins
),
371 .groups
= byt_score_groups
,
372 .ngroups
= ARRAY_SIZE(byt_score_groups
),
373 .functions
= byt_score_functions
,
374 .nfunctions
= ARRAY_SIZE(byt_score_functions
),
375 .communities
= byt_score_communities
,
376 .ncommunities
= ARRAY_SIZE(byt_score_communities
),
379 /* SUS pins, aka GPIOS_<pin_no> or GPIO_S5[<pin_no>] */
380 static const struct pinctrl_pin_desc byt_sus_pins
[] = {
381 PINCTRL_PIN(0, "GPIO_S50"),
382 PINCTRL_PIN(1, "GPIO_S51"),
383 PINCTRL_PIN(2, "GPIO_S52"),
384 PINCTRL_PIN(3, "GPIO_S53"),
385 PINCTRL_PIN(4, "GPIO_S54"),
386 PINCTRL_PIN(5, "GPIO_S55"),
387 PINCTRL_PIN(6, "GPIO_S56"),
388 PINCTRL_PIN(7, "GPIO_S57"),
389 PINCTRL_PIN(8, "GPIO_S58"),
390 PINCTRL_PIN(9, "GPIO_S59"),
391 PINCTRL_PIN(10, "GPIO_S510"),
392 PINCTRL_PIN(11, "PMC_SUSPWRDNACK"),
393 PINCTRL_PIN(12, "PMC_SUSCLK0"),
394 PINCTRL_PIN(13, "GPIO_S513"),
395 PINCTRL_PIN(14, "USB_ULPI_RST"),
396 PINCTRL_PIN(15, "PMC_WAKE_PCIE0#"),
397 PINCTRL_PIN(16, "PMC_PWRBTN"),
398 PINCTRL_PIN(17, "GPIO_S517"),
399 PINCTRL_PIN(18, "PMC_SUS_STAT"),
400 PINCTRL_PIN(19, "USB_OC0"),
401 PINCTRL_PIN(20, "USB_OC1"),
402 PINCTRL_PIN(21, "PCU_SPI_CS1"),
403 PINCTRL_PIN(22, "GPIO_S522"),
404 PINCTRL_PIN(23, "GPIO_S523"),
405 PINCTRL_PIN(24, "GPIO_S524"),
406 PINCTRL_PIN(25, "GPIO_S525"),
407 PINCTRL_PIN(26, "GPIO_S526"),
408 PINCTRL_PIN(27, "GPIO_S527"),
409 PINCTRL_PIN(28, "GPIO_S528"),
410 PINCTRL_PIN(29, "GPIO_S529"),
411 PINCTRL_PIN(30, "GPIO_S530"),
412 PINCTRL_PIN(31, "USB_ULPI_CLK"),
413 PINCTRL_PIN(32, "USB_ULPI_DATA0"),
414 PINCTRL_PIN(33, "USB_ULPI_DATA1"),
415 PINCTRL_PIN(34, "USB_ULPI_DATA2"),
416 PINCTRL_PIN(35, "USB_ULPI_DATA3"),
417 PINCTRL_PIN(36, "USB_ULPI_DATA4"),
418 PINCTRL_PIN(37, "USB_ULPI_DATA5"),
419 PINCTRL_PIN(38, "USB_ULPI_DATA6"),
420 PINCTRL_PIN(39, "USB_ULPI_DATA7"),
421 PINCTRL_PIN(40, "USB_ULPI_DIR"),
422 PINCTRL_PIN(41, "USB_ULPI_NXT"),
423 PINCTRL_PIN(42, "USB_ULPI_STP"),
424 PINCTRL_PIN(43, "USB_ULPI_REFCLK"),
427 static const unsigned int byt_sus_pins_map
[BYT_NGPIO_SUS
] = {
428 29, 33, 30, 31, 32, 34, 36, 35, 38, 37,
429 18, 7, 11, 20, 17, 1, 8, 10, 19, 12,
430 0, 2, 23, 39, 28, 27, 22, 21, 24, 25,
431 26, 51, 56, 54, 49, 55, 48, 57, 50, 58,
435 static const unsigned int byt_sus_usb_over_current_pins
[] = { 19, 20 };
436 static const unsigned int byt_sus_usb_over_current_mode_values
[] = { 0, 0 };
437 static const unsigned int byt_sus_usb_over_current_gpio_mode_values
[] = { 1, 1 };
439 static const unsigned int byt_sus_usb_ulpi_pins
[] = {
440 14, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
442 static const unsigned int byt_sus_usb_ulpi_mode_values
[] = {
443 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
445 static const unsigned int byt_sus_usb_ulpi_gpio_mode_values
[] = {
446 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
449 static const unsigned int byt_sus_pcu_spi_pins
[] = { 21 };
450 static const unsigned int byt_sus_pcu_spi_mode_values
[] = { 0 };
451 static const unsigned int byt_sus_pcu_spi_gpio_mode_values
[] = { 1 };
453 static const unsigned int byt_sus_pmu_clk1_pins
[] = { 5 };
454 static const unsigned int byt_sus_pmu_clk2_pins
[] = { 6 };
456 static const struct intel_pingroup byt_sus_groups
[] = {
457 PIN_GROUP("usb_oc_grp", byt_sus_usb_over_current_pins
, byt_sus_usb_over_current_mode_values
),
458 PIN_GROUP("usb_ulpi_grp", byt_sus_usb_ulpi_pins
, byt_sus_usb_ulpi_mode_values
),
459 PIN_GROUP("pcu_spi_grp", byt_sus_pcu_spi_pins
, byt_sus_pcu_spi_mode_values
),
460 PIN_GROUP("usb_oc_grp_gpio", byt_sus_usb_over_current_pins
, byt_sus_usb_over_current_gpio_mode_values
),
461 PIN_GROUP("usb_ulpi_grp_gpio", byt_sus_usb_ulpi_pins
, byt_sus_usb_ulpi_gpio_mode_values
),
462 PIN_GROUP("pcu_spi_grp_gpio", byt_sus_pcu_spi_pins
, byt_sus_pcu_spi_gpio_mode_values
),
463 PIN_GROUP_GPIO("pmu_clk1_grp", byt_sus_pmu_clk1_pins
, 1),
464 PIN_GROUP_GPIO("pmu_clk2_grp", byt_sus_pmu_clk2_pins
, 1),
467 static const char * const byt_sus_usb_groups
[] = {
468 "usb_oc_grp", "usb_ulpi_grp",
470 static const char * const byt_sus_spi_groups
[] = { "pcu_spi_grp" };
471 static const char * const byt_sus_pmu_clk_groups
[] = {
472 "pmu_clk1_grp", "pmu_clk2_grp",
474 static const char * const byt_sus_gpio_groups
[] = {
475 "usb_oc_grp_gpio", "usb_ulpi_grp_gpio", "pcu_spi_grp_gpio",
476 "pmu_clk1_grp_gpio", "pmu_clk2_grp_gpio",
479 static const struct intel_function byt_sus_functions
[] = {
480 FUNCTION("usb", byt_sus_usb_groups
),
481 FUNCTION("spi", byt_sus_spi_groups
),
482 FUNCTION("gpio", byt_sus_gpio_groups
),
483 FUNCTION("pmu_clk", byt_sus_pmu_clk_groups
),
486 static const struct intel_community byt_sus_communities
[] = {
487 COMMUNITY(0, BYT_NGPIO_SUS
, byt_sus_pins_map
),
490 static const struct intel_pinctrl_soc_data byt_sus_soc_data
= {
491 .uid
= BYT_SUS_ACPI_UID
,
492 .pins
= byt_sus_pins
,
493 .npins
= ARRAY_SIZE(byt_sus_pins
),
494 .groups
= byt_sus_groups
,
495 .ngroups
= ARRAY_SIZE(byt_sus_groups
),
496 .functions
= byt_sus_functions
,
497 .nfunctions
= ARRAY_SIZE(byt_sus_functions
),
498 .communities
= byt_sus_communities
,
499 .ncommunities
= ARRAY_SIZE(byt_sus_communities
),
502 static const struct pinctrl_pin_desc byt_ncore_pins
[] = {
503 PINCTRL_PIN(0, "HV_DDI0_HPD"),
504 PINCTRL_PIN(1, "HV_DDI0_DDC_SDA"),
505 PINCTRL_PIN(2, "HV_DDI0_DDC_SCL"),
506 PINCTRL_PIN(3, "PANEL0_VDDEN"),
507 PINCTRL_PIN(4, "PANEL0_BKLTEN"),
508 PINCTRL_PIN(5, "PANEL0_BKLTCTL"),
509 PINCTRL_PIN(6, "HV_DDI1_HPD"),
510 PINCTRL_PIN(7, "HV_DDI1_DDC_SDA"),
511 PINCTRL_PIN(8, "HV_DDI1_DDC_SCL"),
512 PINCTRL_PIN(9, "PANEL1_VDDEN"),
513 PINCTRL_PIN(10, "PANEL1_BKLTEN"),
514 PINCTRL_PIN(11, "PANEL1_BKLTCTL"),
515 PINCTRL_PIN(12, "GP_INTD_DSI_TE1"),
516 PINCTRL_PIN(13, "HV_DDI2_DDC_SDA"),
517 PINCTRL_PIN(14, "HV_DDI2_DDC_SCL"),
518 PINCTRL_PIN(15, "GP_CAMERASB00"),
519 PINCTRL_PIN(16, "GP_CAMERASB01"),
520 PINCTRL_PIN(17, "GP_CAMERASB02"),
521 PINCTRL_PIN(18, "GP_CAMERASB03"),
522 PINCTRL_PIN(19, "GP_CAMERASB04"),
523 PINCTRL_PIN(20, "GP_CAMERASB05"),
524 PINCTRL_PIN(21, "GP_CAMERASB06"),
525 PINCTRL_PIN(22, "GP_CAMERASB07"),
526 PINCTRL_PIN(23, "GP_CAMERASB08"),
527 PINCTRL_PIN(24, "GP_CAMERASB09"),
528 PINCTRL_PIN(25, "GP_CAMERASB10"),
529 PINCTRL_PIN(26, "GP_CAMERASB11"),
530 PINCTRL_PIN(27, "GP_INTD_DSI_TE2"),
533 static const unsigned int byt_ncore_pins_map
[BYT_NGPIO_NCORE
] = {
534 19, 18, 17, 20, 21, 22, 24, 25, 23, 16,
535 14, 15, 12, 26, 27, 1, 4, 8, 11, 0,
536 3, 6, 10, 13, 2, 5, 9, 7,
539 static const struct intel_community byt_ncore_communities
[] = {
540 COMMUNITY(0, BYT_NGPIO_NCORE
, byt_ncore_pins_map
),
543 static const struct intel_pinctrl_soc_data byt_ncore_soc_data
= {
544 .uid
= BYT_NCORE_ACPI_UID
,
545 .pins
= byt_ncore_pins
,
546 .npins
= ARRAY_SIZE(byt_ncore_pins
),
547 .communities
= byt_ncore_communities
,
548 .ncommunities
= ARRAY_SIZE(byt_ncore_communities
),
551 static const struct intel_pinctrl_soc_data
*byt_soc_data
[] = {
558 static DEFINE_RAW_SPINLOCK(byt_lock
);
560 static void __iomem
*byt_gpio_reg(struct intel_pinctrl
*vg
, unsigned int offset
,
563 const struct intel_community
*comm
;
566 comm
= intel_get_community(vg
, offset
);
570 offset
-= comm
->pin_base
;
572 case BYT_INT_STAT_REG
:
573 reg_offset
= (offset
/ 32) * 4;
575 case BYT_DEBOUNCE_REG
:
579 reg_offset
= comm
->pad_map
[offset
] * 16;
583 return comm
->pad_regs
+ reg_offset
+ reg
;
586 static const struct pinctrl_ops byt_pinctrl_ops
= {
587 .get_groups_count
= intel_get_groups_count
,
588 .get_group_name
= intel_get_group_name
,
589 .get_group_pins
= intel_get_group_pins
,
592 static void byt_set_group_simple_mux(struct intel_pinctrl
*vg
,
593 const struct intel_pingroup group
,
598 guard(raw_spinlock_irqsave
)(&byt_lock
);
600 for (i
= 0; i
< group
.grp
.npins
; i
++) {
601 void __iomem
*padcfg0
;
604 padcfg0
= byt_gpio_reg(vg
, group
.grp
.pins
[i
], BYT_CONF0_REG
);
606 dev_warn(vg
->dev
, "Group %s, pin %i not muxed (can't retrieve CONF0)\n",
611 value
= readl(padcfg0
);
612 value
&= ~BYT_PIN_MUX
;
614 writel(value
, padcfg0
);
618 static void byt_set_group_mixed_mux(struct intel_pinctrl
*vg
,
619 const struct intel_pingroup group
,
620 const unsigned int *func
)
624 guard(raw_spinlock_irqsave
)(&byt_lock
);
626 for (i
= 0; i
< group
.grp
.npins
; i
++) {
627 void __iomem
*padcfg0
;
630 padcfg0
= byt_gpio_reg(vg
, group
.grp
.pins
[i
], BYT_CONF0_REG
);
632 dev_warn(vg
->dev
, "Group %s, pin %i not muxed (can't retrieve CONF0)\n",
637 value
= readl(padcfg0
);
638 value
&= ~BYT_PIN_MUX
;
640 writel(value
, padcfg0
);
644 static int byt_set_mux(struct pinctrl_dev
*pctldev
, unsigned int func_selector
,
645 unsigned int group_selector
)
647 struct intel_pinctrl
*vg
= pinctrl_dev_get_drvdata(pctldev
);
648 const struct intel_function func
= vg
->soc
->functions
[func_selector
];
649 const struct intel_pingroup group
= vg
->soc
->groups
[group_selector
];
652 byt_set_group_mixed_mux(vg
, group
, group
.modes
);
653 else if (!strcmp(func
.func
.name
, "gpio"))
654 byt_set_group_simple_mux(vg
, group
, BYT_DEFAULT_GPIO_MUX
);
656 byt_set_group_simple_mux(vg
, group
, group
.mode
);
661 static u32
byt_get_gpio_mux(struct intel_pinctrl
*vg
, unsigned int offset
)
663 /* SCORE pin 92-93 */
664 if (!strcmp(vg
->soc
->uid
, BYT_SCORE_ACPI_UID
) &&
665 offset
>= 92 && offset
<= 93)
666 return BYT_ALTER_GPIO_MUX
;
669 if (!strcmp(vg
->soc
->uid
, BYT_SUS_ACPI_UID
) &&
670 offset
>= 11 && offset
<= 21)
671 return BYT_ALTER_GPIO_MUX
;
673 return BYT_DEFAULT_GPIO_MUX
;
676 static void byt_gpio_clear_triggering(struct intel_pinctrl
*vg
, unsigned int offset
)
678 void __iomem
*reg
= byt_gpio_reg(vg
, offset
, BYT_CONF0_REG
);
681 guard(raw_spinlock_irqsave
)(&byt_lock
);
685 /* Do not clear direct-irq enabled IRQs (from gpio_disable_free) */
686 if (!(value
& BYT_DIRECT_IRQ_EN
))
687 value
&= ~(BYT_TRIG_POS
| BYT_TRIG_NEG
| BYT_TRIG_LVL
);
692 static int byt_gpio_request_enable(struct pinctrl_dev
*pctl_dev
,
693 struct pinctrl_gpio_range
*range
,
696 struct intel_pinctrl
*vg
= pinctrl_dev_get_drvdata(pctl_dev
);
697 void __iomem
*reg
= byt_gpio_reg(vg
, offset
, BYT_CONF0_REG
);
700 guard(raw_spinlock_irqsave
)(&byt_lock
);
703 * In most cases, func pin mux 000 means GPIO function.
704 * But, some pins may have func pin mux 001 represents
707 * Because there are devices out there where some pins were not
708 * configured correctly we allow changing the mux value from
709 * request (but print out warning about that).
711 value
= readl(reg
) & BYT_PIN_MUX
;
712 gpio_mux
= byt_get_gpio_mux(vg
, offset
);
713 if (gpio_mux
== value
)
716 value
= readl(reg
) & ~BYT_PIN_MUX
;
720 dev_warn(vg
->dev
, FW_BUG
"Pin %i: forcibly re-configured as GPIO\n", offset
);
725 static void byt_gpio_disable_free(struct pinctrl_dev
*pctl_dev
,
726 struct pinctrl_gpio_range
*range
,
729 struct intel_pinctrl
*vg
= pinctrl_dev_get_drvdata(pctl_dev
);
731 byt_gpio_clear_triggering(vg
, offset
);
734 static void byt_gpio_direct_irq_check(struct intel_pinctrl
*vg
,
737 void __iomem
*conf_reg
= byt_gpio_reg(vg
, offset
, BYT_CONF0_REG
);
740 * Before making any direction modifications, do a check if gpio is set
741 * for direct IRQ. On Bay Trail, setting GPIO to output does not make
742 * sense, so let's at least inform the caller before they shoot
743 * themselves in the foot.
745 if (readl(conf_reg
) & BYT_DIRECT_IRQ_EN
)
746 dev_info_once(vg
->dev
,
747 "Potential Error: Pin %i: forcibly set GPIO with DIRECT_IRQ_EN to output\n",
751 static int byt_gpio_set_direction(struct pinctrl_dev
*pctl_dev
,
752 struct pinctrl_gpio_range
*range
,
756 struct intel_pinctrl
*vg
= pinctrl_dev_get_drvdata(pctl_dev
);
757 void __iomem
*val_reg
= byt_gpio_reg(vg
, offset
, BYT_VAL_REG
);
760 guard(raw_spinlock_irqsave
)(&byt_lock
);
762 value
= readl(val_reg
);
763 value
&= ~BYT_DIR_MASK
;
765 value
|= BYT_OUTPUT_EN
;
767 byt_gpio_direct_irq_check(vg
, offset
);
769 writel(value
, val_reg
);
774 static const struct pinmux_ops byt_pinmux_ops
= {
775 .get_functions_count
= intel_get_functions_count
,
776 .get_function_name
= intel_get_function_name
,
777 .get_function_groups
= intel_get_function_groups
,
778 .set_mux
= byt_set_mux
,
779 .gpio_request_enable
= byt_gpio_request_enable
,
780 .gpio_disable_free
= byt_gpio_disable_free
,
781 .gpio_set_direction
= byt_gpio_set_direction
,
784 static void byt_get_pull_strength(u32 reg
, u16
*strength
)
786 switch (reg
& BYT_PULL_STR_MASK
) {
787 case BYT_PULL_STR_2K
:
790 case BYT_PULL_STR_10K
:
793 case BYT_PULL_STR_20K
:
796 case BYT_PULL_STR_40K
:
802 static int byt_set_pull_strength(u32
*reg
, u16 strength
)
804 *reg
&= ~BYT_PULL_STR_MASK
;
807 case 1: /* Set default strength value in case none is given */
809 *reg
|= BYT_PULL_STR_2K
;
812 *reg
|= BYT_PULL_STR_10K
;
815 *reg
|= BYT_PULL_STR_20K
;
818 *reg
|= BYT_PULL_STR_40K
;
827 static void byt_gpio_force_input_mode(struct intel_pinctrl
*vg
, unsigned int offset
)
829 void __iomem
*reg
= byt_gpio_reg(vg
, offset
, BYT_VAL_REG
);
833 if (!(value
& BYT_INPUT_EN
))
837 * Pull assignment is only applicable in input mode. If
838 * chip is not in input mode, set it and warn about it.
840 value
&= ~BYT_INPUT_EN
;
842 dev_warn(vg
->dev
, "Pin %i: forcibly set to input mode\n", offset
);
845 static int byt_pin_config_get(struct pinctrl_dev
*pctl_dev
, unsigned int offset
,
846 unsigned long *config
)
848 struct intel_pinctrl
*vg
= pinctrl_dev_get_drvdata(pctl_dev
);
849 enum pin_config_param param
= pinconf_to_config_param(*config
);
850 void __iomem
*conf_reg
= byt_gpio_reg(vg
, offset
, BYT_CONF0_REG
);
851 void __iomem
*val_reg
= byt_gpio_reg(vg
, offset
, BYT_VAL_REG
);
852 void __iomem
*db_reg
= byt_gpio_reg(vg
, offset
, BYT_DEBOUNCE_REG
);
853 u32 conf
, pull
, val
, debounce
;
856 scoped_guard(raw_spinlock_irqsave
, &byt_lock
) {
857 conf
= readl(conf_reg
);
858 val
= readl(val_reg
);
861 pull
= conf
& BYT_PULL_ASSIGN_MASK
;
864 case PIN_CONFIG_BIAS_DISABLE
:
868 case PIN_CONFIG_BIAS_PULL_DOWN
:
869 /* Pull assignment is only applicable in input mode */
870 if ((val
& BYT_INPUT_EN
) || pull
!= BYT_PULL_ASSIGN_DOWN
)
873 byt_get_pull_strength(conf
, &arg
);
876 case PIN_CONFIG_BIAS_PULL_UP
:
877 /* Pull assignment is only applicable in input mode */
878 if ((val
& BYT_INPUT_EN
) || pull
!= BYT_PULL_ASSIGN_UP
)
881 byt_get_pull_strength(conf
, &arg
);
884 case PIN_CONFIG_INPUT_DEBOUNCE
:
885 if (!(conf
& BYT_DEBOUNCE_EN
))
888 scoped_guard(raw_spinlock_irqsave
, &byt_lock
)
889 debounce
= readl(db_reg
);
891 switch (debounce
& BYT_DEBOUNCE_PULSE_MASK
) {
892 case BYT_DEBOUNCE_PULSE_375US
:
895 case BYT_DEBOUNCE_PULSE_750US
:
898 case BYT_DEBOUNCE_PULSE_1500US
:
901 case BYT_DEBOUNCE_PULSE_3MS
:
904 case BYT_DEBOUNCE_PULSE_6MS
:
907 case BYT_DEBOUNCE_PULSE_12MS
:
910 case BYT_DEBOUNCE_PULSE_24MS
:
922 *config
= pinconf_to_config_packed(param
, arg
);
927 static int byt_pin_config_set(struct pinctrl_dev
*pctl_dev
,
929 unsigned long *configs
,
930 unsigned int num_configs
)
932 struct intel_pinctrl
*vg
= pinctrl_dev_get_drvdata(pctl_dev
);
933 void __iomem
*conf_reg
= byt_gpio_reg(vg
, offset
, BYT_CONF0_REG
);
934 void __iomem
*db_reg
= byt_gpio_reg(vg
, offset
, BYT_DEBOUNCE_REG
);
935 u32 conf
, db_pulse
, debounce
;
936 enum pin_config_param param
;
940 guard(raw_spinlock_irqsave
)(&byt_lock
);
942 conf
= readl(conf_reg
);
944 for (i
= 0; i
< num_configs
; i
++) {
945 param
= pinconf_to_config_param(configs
[i
]);
946 arg
= pinconf_to_config_argument(configs
[i
]);
949 case PIN_CONFIG_BIAS_DISABLE
:
950 conf
&= ~BYT_PULL_ASSIGN_MASK
;
952 case PIN_CONFIG_BIAS_PULL_DOWN
:
953 byt_gpio_force_input_mode(vg
, offset
);
955 conf
&= ~BYT_PULL_ASSIGN_MASK
;
956 conf
|= BYT_PULL_ASSIGN_DOWN
;
957 ret
= byt_set_pull_strength(&conf
, arg
);
962 case PIN_CONFIG_BIAS_PULL_UP
:
963 byt_gpio_force_input_mode(vg
, offset
);
965 conf
&= ~BYT_PULL_ASSIGN_MASK
;
966 conf
|= BYT_PULL_ASSIGN_UP
;
967 ret
= byt_set_pull_strength(&conf
, arg
);
972 case PIN_CONFIG_INPUT_DEBOUNCE
:
978 db_pulse
= BYT_DEBOUNCE_PULSE_375US
;
981 db_pulse
= BYT_DEBOUNCE_PULSE_750US
;
984 db_pulse
= BYT_DEBOUNCE_PULSE_1500US
;
987 db_pulse
= BYT_DEBOUNCE_PULSE_3MS
;
990 db_pulse
= BYT_DEBOUNCE_PULSE_6MS
;
993 db_pulse
= BYT_DEBOUNCE_PULSE_12MS
;
996 db_pulse
= BYT_DEBOUNCE_PULSE_24MS
;
1003 debounce
= readl(db_reg
);
1004 debounce
= (debounce
& ~BYT_DEBOUNCE_PULSE_MASK
) | db_pulse
;
1005 writel(debounce
, db_reg
);
1007 conf
|= BYT_DEBOUNCE_EN
;
1009 conf
&= ~BYT_DEBOUNCE_EN
;
1018 writel(conf
, conf_reg
);
1023 static const struct pinconf_ops byt_pinconf_ops
= {
1025 .pin_config_get
= byt_pin_config_get
,
1026 .pin_config_set
= byt_pin_config_set
,
1029 static const struct pinctrl_desc byt_pinctrl_desc
= {
1030 .pctlops
= &byt_pinctrl_ops
,
1031 .pmxops
= &byt_pinmux_ops
,
1032 .confops
= &byt_pinconf_ops
,
1033 .owner
= THIS_MODULE
,
1036 static int byt_gpio_get(struct gpio_chip
*chip
, unsigned int offset
)
1038 struct intel_pinctrl
*vg
= gpiochip_get_data(chip
);
1039 void __iomem
*reg
= byt_gpio_reg(vg
, offset
, BYT_VAL_REG
);
1042 scoped_guard(raw_spinlock_irqsave
, &byt_lock
)
1045 return !!(val
& BYT_LEVEL
);
1048 static void byt_gpio_set(struct gpio_chip
*chip
, unsigned int offset
, int value
)
1050 struct intel_pinctrl
*vg
= gpiochip_get_data(chip
);
1054 reg
= byt_gpio_reg(vg
, offset
, BYT_VAL_REG
);
1058 guard(raw_spinlock_irqsave
)(&byt_lock
);
1060 old_val
= readl(reg
);
1062 writel(old_val
| BYT_LEVEL
, reg
);
1064 writel(old_val
& ~BYT_LEVEL
, reg
);
1067 static int byt_gpio_get_direction(struct gpio_chip
*chip
, unsigned int offset
)
1069 struct intel_pinctrl
*vg
= gpiochip_get_data(chip
);
1073 reg
= byt_gpio_reg(vg
, offset
, BYT_VAL_REG
);
1077 scoped_guard(raw_spinlock_irqsave
, &byt_lock
)
1080 if (!(value
& BYT_OUTPUT_EN
))
1081 return GPIO_LINE_DIRECTION_OUT
;
1082 if (!(value
& BYT_INPUT_EN
))
1083 return GPIO_LINE_DIRECTION_IN
;
1088 static int byt_gpio_direction_input(struct gpio_chip
*chip
, unsigned int offset
)
1090 struct intel_pinctrl
*vg
= gpiochip_get_data(chip
);
1091 void __iomem
*val_reg
= byt_gpio_reg(vg
, offset
, BYT_VAL_REG
);
1094 guard(raw_spinlock_irqsave
)(&byt_lock
);
1096 reg
= readl(val_reg
);
1097 reg
&= ~BYT_DIR_MASK
;
1098 reg
|= BYT_OUTPUT_EN
;
1099 writel(reg
, val_reg
);
1105 * Note despite the temptation this MUST NOT be converted into a call to
1106 * pinctrl_gpio_direction_output() + byt_gpio_set() that does not work this
1107 * MUST be done as a single BYT_VAL_REG register write.
1108 * See the commit message of the commit adding this comment for details.
1110 static int byt_gpio_direction_output(struct gpio_chip
*chip
,
1111 unsigned int offset
, int value
)
1113 struct intel_pinctrl
*vg
= gpiochip_get_data(chip
);
1114 void __iomem
*val_reg
= byt_gpio_reg(vg
, offset
, BYT_VAL_REG
);
1117 guard(raw_spinlock_irqsave
)(&byt_lock
);
1119 byt_gpio_direct_irq_check(vg
, offset
);
1121 reg
= readl(val_reg
);
1122 reg
&= ~BYT_DIR_MASK
;
1128 writel(reg
, val_reg
);
1133 static void byt_gpio_dbg_show(struct seq_file
*s
, struct gpio_chip
*chip
)
1135 struct intel_pinctrl
*vg
= gpiochip_get_data(chip
);
1139 for (i
= 0; i
< vg
->soc
->npins
; i
++) {
1140 const struct intel_community
*comm
;
1141 void __iomem
*conf_reg
, *val_reg
;
1142 const char *pull_str
= NULL
;
1143 const char *pull
= NULL
;
1146 pin
= vg
->soc
->pins
[i
].number
;
1148 conf_reg
= byt_gpio_reg(vg
, pin
, BYT_CONF0_REG
);
1150 seq_printf(s
, "Pin %i: can't retrieve CONF0\n", pin
);
1154 val_reg
= byt_gpio_reg(vg
, pin
, BYT_VAL_REG
);
1156 seq_printf(s
, "Pin %i: can't retrieve VAL\n", pin
);
1160 scoped_guard(raw_spinlock_irqsave
, &byt_lock
) {
1161 conf0
= readl(conf_reg
);
1162 val
= readl(val_reg
);
1165 comm
= intel_get_community(vg
, pin
);
1167 seq_printf(s
, "Pin %i: can't retrieve community\n", pin
);
1171 char *label
__free(kfree
) = gpiochip_dup_line_label(chip
, i
);
1175 switch (conf0
& BYT_PULL_ASSIGN_MASK
) {
1176 case BYT_PULL_ASSIGN_UP
:
1179 case BYT_PULL_ASSIGN_DOWN
:
1184 switch (conf0
& BYT_PULL_STR_MASK
) {
1185 case BYT_PULL_STR_2K
:
1188 case BYT_PULL_STR_10K
:
1191 case BYT_PULL_STR_20K
:
1194 case BYT_PULL_STR_40K
:
1200 " gpio-%-3d (%-20.20s) %s %s %s pad-%-3d offset:0x%03x mux:%d %s%s%s",
1202 label
?: "Unrequested",
1203 val
& BYT_INPUT_EN
? " " : "in",
1204 val
& BYT_OUTPUT_EN
? " " : "out",
1205 str_hi_lo(val
& BYT_LEVEL
),
1206 comm
->pad_map
[i
], comm
->pad_map
[i
] * 16,
1208 conf0
& BYT_TRIG_NEG
? " fall" : " ",
1209 conf0
& BYT_TRIG_POS
? " rise" : " ",
1210 conf0
& BYT_TRIG_LVL
? " level" : " ");
1212 if (pull
&& pull_str
)
1213 seq_printf(s
, " %-4s %-3s", pull
, pull_str
);
1217 if (conf0
& BYT_IODEN
)
1218 seq_puts(s
, " open-drain");
1224 static const struct gpio_chip byt_gpio_chip
= {
1225 .owner
= THIS_MODULE
,
1226 .request
= gpiochip_generic_request
,
1227 .free
= gpiochip_generic_free
,
1228 .get_direction
= byt_gpio_get_direction
,
1229 .direction_input
= byt_gpio_direction_input
,
1230 .direction_output
= byt_gpio_direction_output
,
1231 .get
= byt_gpio_get
,
1232 .set
= byt_gpio_set
,
1233 .set_config
= gpiochip_generic_config
,
1234 .dbg_show
= byt_gpio_dbg_show
,
1237 static void byt_irq_ack(struct irq_data
*d
)
1239 struct gpio_chip
*gc
= irq_data_get_irq_chip_data(d
);
1240 struct intel_pinctrl
*vg
= gpiochip_get_data(gc
);
1241 irq_hw_number_t hwirq
= irqd_to_hwirq(d
);
1244 reg
= byt_gpio_reg(vg
, hwirq
, BYT_INT_STAT_REG
);
1248 guard(raw_spinlock
)(&byt_lock
);
1250 writel(BIT(hwirq
% 32), reg
);
1253 static void byt_irq_mask(struct irq_data
*d
)
1255 struct gpio_chip
*gc
= irq_data_get_irq_chip_data(d
);
1256 struct intel_pinctrl
*vg
= gpiochip_get_data(gc
);
1257 irq_hw_number_t hwirq
= irqd_to_hwirq(d
);
1259 byt_gpio_clear_triggering(vg
, hwirq
);
1260 gpiochip_disable_irq(gc
, hwirq
);
1263 static void byt_irq_unmask(struct irq_data
*d
)
1265 struct gpio_chip
*gc
= irq_data_get_irq_chip_data(d
);
1266 struct intel_pinctrl
*vg
= gpiochip_get_data(gc
);
1267 irq_hw_number_t hwirq
= irqd_to_hwirq(d
);
1271 gpiochip_enable_irq(gc
, hwirq
);
1273 reg
= byt_gpio_reg(vg
, hwirq
, BYT_CONF0_REG
);
1277 guard(raw_spinlock_irqsave
)(&byt_lock
);
1281 switch (irqd_get_trigger_type(d
)) {
1282 case IRQ_TYPE_LEVEL_HIGH
:
1283 value
|= BYT_TRIG_LVL
;
1285 case IRQ_TYPE_EDGE_RISING
:
1286 value
|= BYT_TRIG_POS
;
1288 case IRQ_TYPE_LEVEL_LOW
:
1289 value
|= BYT_TRIG_LVL
;
1291 case IRQ_TYPE_EDGE_FALLING
:
1292 value
|= BYT_TRIG_NEG
;
1294 case IRQ_TYPE_EDGE_BOTH
:
1295 value
|= (BYT_TRIG_NEG
| BYT_TRIG_POS
);
1302 static int byt_irq_type(struct irq_data
*d
, unsigned int type
)
1304 struct intel_pinctrl
*vg
= gpiochip_get_data(irq_data_get_irq_chip_data(d
));
1305 irq_hw_number_t hwirq
= irqd_to_hwirq(d
);
1309 reg
= byt_gpio_reg(vg
, hwirq
, BYT_CONF0_REG
);
1313 guard(raw_spinlock_irqsave
)(&byt_lock
);
1317 WARN(value
& BYT_DIRECT_IRQ_EN
,
1318 "Bad pad config for IO mode, force DIRECT_IRQ_EN bit clearing");
1320 /* For level trigges the BYT_TRIG_POS and BYT_TRIG_NEG bits
1321 * are used to indicate high and low level triggering
1323 value
&= ~(BYT_DIRECT_IRQ_EN
| BYT_TRIG_POS
| BYT_TRIG_NEG
|
1325 /* Enable glitch filtering */
1326 value
|= BYT_GLITCH_FILTER_EN
| BYT_GLITCH_F_SLOW_CLK
|
1327 BYT_GLITCH_F_FAST_CLK
;
1331 if (type
& IRQ_TYPE_EDGE_BOTH
)
1332 irq_set_handler_locked(d
, handle_edge_irq
);
1333 else if (type
& IRQ_TYPE_LEVEL_MASK
)
1334 irq_set_handler_locked(d
, handle_level_irq
);
1339 static const struct irq_chip byt_gpio_irq_chip
= {
1341 .irq_ack
= byt_irq_ack
,
1342 .irq_mask
= byt_irq_mask
,
1343 .irq_unmask
= byt_irq_unmask
,
1344 .irq_set_type
= byt_irq_type
,
1345 .flags
= IRQCHIP_SKIP_SET_WAKE
| IRQCHIP_SET_TYPE_MASKED
| IRQCHIP_IMMUTABLE
,
1346 GPIOCHIP_IRQ_RESOURCE_HELPERS
,
1349 static void byt_gpio_irq_handler(struct irq_desc
*desc
)
1351 struct irq_data
*data
= irq_desc_get_irq_data(desc
);
1352 struct intel_pinctrl
*vg
= gpiochip_get_data(irq_desc_get_handler_data(desc
));
1353 struct irq_chip
*chip
= irq_data_get_irq_chip(data
);
1356 unsigned long pending
;
1358 /* check from GPIO controller which pin triggered the interrupt */
1359 for (base
= 0; base
< vg
->chip
.ngpio
; base
+= 32) {
1360 reg
= byt_gpio_reg(vg
, base
, BYT_INT_STAT_REG
);
1363 dev_warn(vg
->dev
, "Pin %i: can't retrieve INT_STAT%u\n", base
/ 32, base
);
1367 scoped_guard(raw_spinlock
, &byt_lock
)
1368 pending
= readl(reg
);
1369 for_each_set_bit(pin
, &pending
, 32)
1370 generic_handle_domain_irq(vg
->chip
.irq
.domain
, base
+ pin
);
1372 chip
->irq_eoi(data
);
1375 static bool byt_direct_irq_sanity_check(struct intel_pinctrl
*vg
, int pin
, u32 conf0
)
1377 int direct_irq
, ioapic_direct_irq_base
;
1378 u8
*match
, direct_irq_mux
[16];
1381 memcpy_fromio(direct_irq_mux
, vg
->communities
->pad_regs
+ BYT_DIRECT_IRQ_REG
,
1382 sizeof(direct_irq_mux
));
1383 match
= memchr(direct_irq_mux
, pin
, sizeof(direct_irq_mux
));
1385 dev_warn(vg
->dev
, FW_BUG
"Pin %i: DIRECT_IRQ_EN set but no IRQ assigned, clearing\n", pin
);
1389 direct_irq
= match
- direct_irq_mux
;
1390 /* Base IO-APIC pin numbers come from atom-e3800-family-datasheet.pdf */
1391 ioapic_direct_irq_base
= (vg
->communities
->npins
== BYT_NGPIO_SCORE
) ? 51 : 67;
1392 dev_dbg(vg
->dev
, "Pin %i: uses direct IRQ %d (IO-APIC %d)\n", pin
,
1393 direct_irq
, direct_irq
+ ioapic_direct_irq_base
);
1396 * Testing has shown that the way direct IRQs work is that the combination of the
1397 * direct-irq-en flag and the direct IRQ mux connect the output of the GPIO's IRQ
1398 * trigger block, which normally sets the status flag in the IRQ status reg at
1399 * 0x800, to one of the IO-APIC pins according to the mux registers.
1402 * 1. The TRIG_MASK bits must be set to configure the GPIO's IRQ trigger block
1403 * 2. The TRIG_LVL bit *must* be set, so that the GPIO's input value is directly
1404 * passed (1:1 or inverted) to the IO-APIC pin, if TRIG_LVL is not set,
1405 * selecting edge mode operation then on the first edge the IO-APIC pin goes
1406 * high, but since no write-to-clear write will be done to the IRQ status reg
1407 * at 0x800, the detected edge condition will never get cleared.
1409 trig
= conf0
& BYT_TRIG_MASK
;
1410 if (trig
!= (BYT_TRIG_POS
| BYT_TRIG_LVL
) &&
1411 trig
!= (BYT_TRIG_NEG
| BYT_TRIG_LVL
)) {
1413 FW_BUG
"Pin %i: DIRECT_IRQ_EN set without trigger (CONF0: %#08x), clearing\n",
1421 static void byt_init_irq_valid_mask(struct gpio_chip
*chip
,
1422 unsigned long *valid_mask
,
1423 unsigned int ngpios
)
1425 struct intel_pinctrl
*vg
= gpiochip_get_data(chip
);
1431 * Clear interrupt triggers for all pins that are GPIOs and
1432 * do not use direct IRQ mode. This will prevent spurious
1433 * interrupts from misconfigured pins.
1435 for (i
= 0; i
< vg
->soc
->npins
; i
++) {
1436 unsigned int pin
= vg
->soc
->pins
[i
].number
;
1438 reg
= byt_gpio_reg(vg
, pin
, BYT_CONF0_REG
);
1440 dev_warn(vg
->dev
, "Pin %i: could not retrieve CONF0\n", i
);
1445 if (value
& BYT_DIRECT_IRQ_EN
) {
1446 if (byt_direct_irq_sanity_check(vg
, i
, value
)) {
1447 clear_bit(i
, valid_mask
);
1449 value
&= ~(BYT_DIRECT_IRQ_EN
| BYT_TRIG_POS
|
1450 BYT_TRIG_NEG
| BYT_TRIG_LVL
);
1453 } else if ((value
& BYT_PIN_MUX
) == byt_get_gpio_mux(vg
, i
)) {
1454 byt_gpio_clear_triggering(vg
, i
);
1455 dev_dbg(vg
->dev
, "disabling GPIO %d\n", i
);
1460 static int byt_gpio_irq_init_hw(struct gpio_chip
*chip
)
1462 struct intel_pinctrl
*vg
= gpiochip_get_data(chip
);
1466 /* clear interrupt status trigger registers */
1467 for (base
= 0; base
< vg
->soc
->npins
; base
+= 32) {
1468 reg
= byt_gpio_reg(vg
, base
, BYT_INT_STAT_REG
);
1471 dev_warn(vg
->dev
, "Pin %i: can't retrieve INT_STAT%u\n", base
/ 32, base
);
1475 writel(0xffffffff, reg
);
1476 /* make sure trigger bits are cleared, if not then a pin
1477 might be misconfigured in bios */
1481 "GPIO interrupt error, pins misconfigured. INT_STAT%u: %#08x\n",
1488 static int byt_gpio_add_pin_ranges(struct gpio_chip
*chip
)
1490 struct intel_pinctrl
*vg
= gpiochip_get_data(chip
);
1491 struct device
*dev
= vg
->dev
;
1494 ret
= gpiochip_add_pin_range(chip
, dev_name(dev
), 0, 0, vg
->soc
->npins
);
1496 dev_err(dev
, "failed to add GPIO pin range\n");
1501 static int byt_gpio_probe(struct intel_pinctrl
*vg
)
1503 struct platform_device
*pdev
= to_platform_device(vg
->dev
);
1504 struct gpio_chip
*gc
;
1507 /* Set up gpio chip */
1508 vg
->chip
= byt_gpio_chip
;
1510 gc
->label
= dev_name(vg
->dev
);
1512 gc
->can_sleep
= false;
1513 gc
->add_pin_ranges
= byt_gpio_add_pin_ranges
;
1514 gc
->parent
= vg
->dev
;
1515 gc
->ngpio
= vg
->soc
->npins
;
1517 #ifdef CONFIG_PM_SLEEP
1518 vg
->context
.pads
= devm_kcalloc(vg
->dev
, gc
->ngpio
, sizeof(*vg
->context
.pads
),
1520 if (!vg
->context
.pads
)
1524 /* set up interrupts */
1525 irq
= platform_get_irq_optional(pdev
, 0);
1527 struct gpio_irq_chip
*girq
;
1530 gpio_irq_chip_set_chip(girq
, &byt_gpio_irq_chip
);
1531 girq
->init_hw
= byt_gpio_irq_init_hw
;
1532 girq
->init_valid_mask
= byt_init_irq_valid_mask
;
1533 girq
->parent_handler
= byt_gpio_irq_handler
;
1534 girq
->num_parents
= 1;
1535 girq
->parents
= devm_kcalloc(vg
->dev
, girq
->num_parents
,
1536 sizeof(*girq
->parents
), GFP_KERNEL
);
1539 girq
->parents
[0] = irq
;
1540 girq
->default_type
= IRQ_TYPE_NONE
;
1541 girq
->handler
= handle_bad_irq
;
1544 ret
= devm_gpiochip_add_data(vg
->dev
, gc
, vg
);
1546 dev_err(vg
->dev
, "failed adding byt-gpio chip\n");
1551 static int byt_set_soc_data(struct intel_pinctrl
*vg
,
1552 const struct intel_pinctrl_soc_data
*soc
)
1554 struct platform_device
*pdev
= to_platform_device(vg
->dev
);
1559 vg
->ncommunities
= vg
->soc
->ncommunities
;
1560 vg
->communities
= devm_kcalloc(vg
->dev
, vg
->ncommunities
,
1561 sizeof(*vg
->communities
), GFP_KERNEL
);
1562 if (!vg
->communities
)
1565 for (i
= 0; i
< vg
->soc
->ncommunities
; i
++) {
1566 struct intel_community
*comm
= vg
->communities
+ i
;
1568 *comm
= vg
->soc
->communities
[i
];
1570 comm
->pad_regs
= devm_platform_ioremap_resource(pdev
, 0);
1571 if (IS_ERR(comm
->pad_regs
))
1572 return PTR_ERR(comm
->pad_regs
);
1578 static const struct acpi_device_id byt_gpio_acpi_match
[] = {
1579 { "INT33B2", (kernel_ulong_t
)byt_soc_data
},
1580 { "INT33FC", (kernel_ulong_t
)byt_soc_data
},
1584 static int byt_pinctrl_probe(struct platform_device
*pdev
)
1586 const struct intel_pinctrl_soc_data
*soc_data
;
1587 struct device
*dev
= &pdev
->dev
;
1588 struct intel_pinctrl
*vg
;
1591 soc_data
= intel_pinctrl_get_soc_data(pdev
);
1592 if (IS_ERR(soc_data
))
1593 return PTR_ERR(soc_data
);
1595 vg
= devm_kzalloc(dev
, sizeof(*vg
), GFP_KERNEL
);
1600 ret
= byt_set_soc_data(vg
, soc_data
);
1602 dev_err(dev
, "failed to set soc data\n");
1606 vg
->pctldesc
= byt_pinctrl_desc
;
1607 vg
->pctldesc
.name
= dev_name(dev
);
1608 vg
->pctldesc
.pins
= vg
->soc
->pins
;
1609 vg
->pctldesc
.npins
= vg
->soc
->npins
;
1611 vg
->pctldev
= devm_pinctrl_register(dev
, &vg
->pctldesc
, vg
);
1612 if (IS_ERR(vg
->pctldev
)) {
1613 dev_err(dev
, "failed to register pinctrl driver\n");
1614 return PTR_ERR(vg
->pctldev
);
1617 ret
= byt_gpio_probe(vg
);
1621 platform_set_drvdata(pdev
, vg
);
1626 static int byt_gpio_suspend(struct device
*dev
)
1628 struct intel_pinctrl
*vg
= dev_get_drvdata(dev
);
1631 guard(raw_spinlock_irqsave
)(&byt_lock
);
1633 for (i
= 0; i
< vg
->soc
->npins
; i
++) {
1636 unsigned int pin
= vg
->soc
->pins
[i
].number
;
1638 reg
= byt_gpio_reg(vg
, pin
, BYT_CONF0_REG
);
1640 dev_warn(vg
->dev
, "Pin %i: can't retrieve CONF0\n", i
);
1643 value
= readl(reg
) & BYT_CONF0_RESTORE_MASK
;
1644 vg
->context
.pads
[i
].conf0
= value
;
1646 reg
= byt_gpio_reg(vg
, pin
, BYT_VAL_REG
);
1648 dev_warn(vg
->dev
, "Pin %i: can't retrieve VAL\n", i
);
1651 value
= readl(reg
) & BYT_VAL_RESTORE_MASK
;
1652 vg
->context
.pads
[i
].val
= value
;
1658 static int byt_gpio_resume(struct device
*dev
)
1660 struct intel_pinctrl
*vg
= dev_get_drvdata(dev
);
1663 guard(raw_spinlock_irqsave
)(&byt_lock
);
1665 for (i
= 0; i
< vg
->soc
->npins
; i
++) {
1668 unsigned int pin
= vg
->soc
->pins
[i
].number
;
1670 reg
= byt_gpio_reg(vg
, pin
, BYT_CONF0_REG
);
1672 dev_warn(vg
->dev
, "Pin %i: can't retrieve CONF0\n", i
);
1676 if ((value
& BYT_CONF0_RESTORE_MASK
) !=
1677 vg
->context
.pads
[i
].conf0
) {
1678 value
&= ~BYT_CONF0_RESTORE_MASK
;
1679 value
|= vg
->context
.pads
[i
].conf0
;
1681 dev_info(dev
, "restored pin %d CONF0 %#08x", i
, value
);
1684 reg
= byt_gpio_reg(vg
, pin
, BYT_VAL_REG
);
1686 dev_warn(vg
->dev
, "Pin %i: can't retrieve VAL\n", i
);
1690 if ((value
& BYT_VAL_RESTORE_MASK
) !=
1691 vg
->context
.pads
[i
].val
) {
1694 v
= value
& ~BYT_VAL_RESTORE_MASK
;
1695 v
|= vg
->context
.pads
[i
].val
;
1698 dev_dbg(dev
, "restored pin %d VAL %#08x\n", i
, v
);
1706 static const struct dev_pm_ops byt_gpio_pm_ops
= {
1707 LATE_SYSTEM_SLEEP_PM_OPS(byt_gpio_suspend
, byt_gpio_resume
)
1710 static struct platform_driver byt_gpio_driver
= {
1711 .probe
= byt_pinctrl_probe
,
1714 .pm
= pm_sleep_ptr(&byt_gpio_pm_ops
),
1715 .acpi_match_table
= byt_gpio_acpi_match
,
1716 .suppress_bind_attrs
= true,
1720 static int __init
byt_gpio_init(void)
1722 return platform_driver_register(&byt_gpio_driver
);
1724 subsys_initcall(byt_gpio_init
);
1726 MODULE_IMPORT_NS("PINCTRL_INTEL");