1 // SPDX-License-Identifier: GPL-2.0
3 * Intel pinctrl/GPIO core driver.
5 * Copyright (C) 2015, Intel Corporation
6 * Authors: Mathias Nyman <mathias.nyman@linux.intel.com>
7 * Mika Westerberg <mika.westerberg@linux.intel.com>
10 #include <linux/acpi.h>
11 #include <linux/cleanup.h>
12 #include <linux/gpio/driver.h>
13 #include <linux/interrupt.h>
14 #include <linux/log2.h>
15 #include <linux/module.h>
16 #include <linux/platform_device.h>
17 #include <linux/property.h>
18 #include <linux/seq_file.h>
19 #include <linux/string_helpers.h>
20 #include <linux/time.h>
22 #include <linux/pinctrl/consumer.h>
23 #include <linux/pinctrl/pinconf.h>
24 #include <linux/pinctrl/pinconf-generic.h>
25 #include <linux/pinctrl/pinctrl.h>
26 #include <linux/pinctrl/pinmux.h>
28 #include <linux/platform_data/x86/pwm-lpss.h>
31 #include "pinctrl-intel.h"
33 /* Offset from regs */
35 #define REVID_SHIFT 16
36 #define REVID_MASK GENMASK(31, 16)
39 #define CAPLIST_ID_SHIFT 16
40 #define CAPLIST_ID_MASK GENMASK(23, 16)
41 #define CAPLIST_ID_GPIO_HW_INFO 1
42 #define CAPLIST_ID_PWM 2
43 #define CAPLIST_ID_BLINK 3
44 #define CAPLIST_ID_EXP 4
45 #define CAPLIST_NEXT_SHIFT 0
46 #define CAPLIST_NEXT_MASK GENMASK(15, 0)
51 #define PADOWN_SHIFT(p) ((p) % 8 * PADOWN_BITS)
52 #define PADOWN_MASK(p) (GENMASK(3, 0) << PADOWN_SHIFT(p))
53 #define PADOWN_GPP(p) ((p) / 8)
57 /* Offset from pad_regs */
59 #define PADCFG0_RXEVCFG_MASK GENMASK(26, 25)
60 #define PADCFG0_RXEVCFG_LEVEL (0 << 25)
61 #define PADCFG0_RXEVCFG_EDGE (1 << 25)
62 #define PADCFG0_RXEVCFG_DISABLED (2 << 25)
63 #define PADCFG0_RXEVCFG_EDGE_BOTH (3 << 25)
64 #define PADCFG0_PREGFRXSEL BIT(24)
65 #define PADCFG0_RXINV BIT(23)
66 #define PADCFG0_GPIROUTIOXAPIC BIT(20)
67 #define PADCFG0_GPIROUTSCI BIT(19)
68 #define PADCFG0_GPIROUTSMI BIT(18)
69 #define PADCFG0_GPIROUTNMI BIT(17)
70 #define PADCFG0_PMODE_SHIFT 10
71 #define PADCFG0_PMODE_MASK GENMASK(13, 10)
72 #define PADCFG0_PMODE_GPIO 0
73 #define PADCFG0_GPIODIS_SHIFT 8
74 #define PADCFG0_GPIODIS_MASK GENMASK(9, 8)
75 #define PADCFG0_GPIODIS_NONE 0
76 #define PADCFG0_GPIODIS_OUTPUT 1
77 #define PADCFG0_GPIODIS_INPUT 2
78 #define PADCFG0_GPIODIS_FULL 3
79 #define PADCFG0_GPIORXDIS BIT(9)
80 #define PADCFG0_GPIOTXDIS BIT(8)
81 #define PADCFG0_GPIORXSTATE BIT(1)
82 #define PADCFG0_GPIOTXSTATE BIT(0)
85 #define PADCFG1_TERM_UP BIT(13)
86 #define PADCFG1_TERM_SHIFT 10
87 #define PADCFG1_TERM_MASK GENMASK(12, 10)
89 * Bit 0 Bit 1 Bit 2 Value, Ohms
95 * 1 0 0 1000 (if supported)
96 * 1 0 1 ~952 (if supported)
97 * 1 1 0 ~833 (if supported)
98 * 1 1 1 ~800 (if supported)
100 #define PADCFG1_TERM_20K BIT(2)
101 #define PADCFG1_TERM_5K BIT(1)
102 #define PADCFG1_TERM_4K (BIT(2) | BIT(1))
103 #define PADCFG1_TERM_1K BIT(0)
104 #define PADCFG1_TERM_952 (BIT(2) | BIT(0))
105 #define PADCFG1_TERM_833 (BIT(1) | BIT(0))
106 #define PADCFG1_TERM_800 (BIT(2) | BIT(1) | BIT(0))
108 #define PADCFG2 0x008
109 #define PADCFG2_DEBOUNCE_SHIFT 1
110 #define PADCFG2_DEBOUNCE_MASK GENMASK(4, 1)
111 #define PADCFG2_DEBEN BIT(0)
113 #define DEBOUNCE_PERIOD_NSEC 31250
115 struct intel_pad_context
{
121 struct intel_community_context
{
126 #define pin_to_padno(c, p) ((p) - (c)->pin_base)
127 #define padgroup_offset(g, p) ((p) - (g)->base)
129 #define for_each_intel_pin_community(pctrl, community) \
130 for (unsigned int __ci = 0; \
131 __ci < pctrl->ncommunities && (community = &pctrl->communities[__ci]); \
134 #define for_each_intel_community_pad_group(community, grp) \
135 for (unsigned int __gi = 0; \
136 __gi < community->ngpps && (grp = &community->gpps[__gi]); \
139 #define for_each_intel_pad_group(pctrl, community, grp) \
140 for_each_intel_pin_community(pctrl, community) \
141 for_each_intel_community_pad_group(community, grp)
143 #define for_each_intel_gpio_group(pctrl, community, grp) \
144 for_each_intel_pad_group(pctrl, community, grp) \
145 if (grp->gpio_base == INTEL_GPIO_BASE_NOMAP) {} else
147 const struct intel_community
*intel_get_community(const struct intel_pinctrl
*pctrl
,
150 const struct intel_community
*community
;
152 for_each_intel_pin_community(pctrl
, community
) {
153 if (pin
>= community
->pin_base
&&
154 pin
< community
->pin_base
+ community
->npins
)
158 dev_warn(pctrl
->dev
, "failed to find community for pin %u\n", pin
);
161 EXPORT_SYMBOL_NS_GPL(intel_get_community
, "PINCTRL_INTEL");
163 static const struct intel_padgroup
*
164 intel_community_get_padgroup(const struct intel_community
*community
,
167 const struct intel_padgroup
*padgrp
;
169 for_each_intel_community_pad_group(community
, padgrp
) {
170 if (pin
>= padgrp
->base
&& pin
< padgrp
->base
+ padgrp
->size
)
177 static void __iomem
*intel_get_padcfg(struct intel_pinctrl
*pctrl
,
178 unsigned int pin
, unsigned int reg
)
180 const struct intel_community
*community
;
184 community
= intel_get_community(pctrl
, pin
);
188 padno
= pin_to_padno(community
, pin
);
189 nregs
= (community
->features
& PINCTRL_FEATURE_DEBOUNCE
) ? 4 : 2;
191 if (reg
>= nregs
* 4)
194 return community
->pad_regs
+ reg
+ padno
* nregs
* 4;
197 static bool intel_pad_owned_by_host(const struct intel_pinctrl
*pctrl
, unsigned int pin
)
199 const struct intel_community
*community
;
200 const struct intel_padgroup
*padgrp
;
201 unsigned int gpp
, offset
, gpp_offset
;
202 void __iomem
*padown
;
204 community
= intel_get_community(pctrl
, pin
);
207 if (!community
->padown_offset
)
210 padgrp
= intel_community_get_padgroup(community
, pin
);
214 gpp_offset
= padgroup_offset(padgrp
, pin
);
215 gpp
= PADOWN_GPP(gpp_offset
);
216 offset
= community
->padown_offset
+ padgrp
->padown_num
* 4 + gpp
* 4;
217 padown
= community
->regs
+ offset
;
219 return !(readl(padown
) & PADOWN_MASK(gpp_offset
));
222 static bool intel_pad_acpi_mode(const struct intel_pinctrl
*pctrl
, unsigned int pin
)
224 const struct intel_community
*community
;
225 const struct intel_padgroup
*padgrp
;
226 unsigned int offset
, gpp_offset
;
227 void __iomem
*hostown
;
229 community
= intel_get_community(pctrl
, pin
);
232 if (!community
->hostown_offset
)
235 padgrp
= intel_community_get_padgroup(community
, pin
);
239 gpp_offset
= padgroup_offset(padgrp
, pin
);
240 offset
= community
->hostown_offset
+ padgrp
->reg_num
* 4;
241 hostown
= community
->regs
+ offset
;
243 return !(readl(hostown
) & BIT(gpp_offset
));
247 * enum - Locking variants of the pad configuration
248 * @PAD_UNLOCKED: pad is fully controlled by the configuration registers
249 * @PAD_LOCKED: pad configuration registers, except TX state, are locked
250 * @PAD_LOCKED_TX: pad configuration TX state is locked
251 * @PAD_LOCKED_FULL: pad configuration registers are locked completely
253 * Locking is considered as read-only mode for corresponding registers and
254 * their respective fields. That said, TX state bit is locked separately from
255 * the main locking scheme.
261 PAD_LOCKED_FULL
= PAD_LOCKED
| PAD_LOCKED_TX
,
264 static int intel_pad_locked(const struct intel_pinctrl
*pctrl
, unsigned int pin
)
266 const struct intel_community
*community
;
267 const struct intel_padgroup
*padgrp
;
268 unsigned int offset
, gpp_offset
;
270 int ret
= PAD_UNLOCKED
;
272 community
= intel_get_community(pctrl
, pin
);
274 return PAD_LOCKED_FULL
;
275 if (!community
->padcfglock_offset
)
278 padgrp
= intel_community_get_padgroup(community
, pin
);
280 return PAD_LOCKED_FULL
;
282 gpp_offset
= padgroup_offset(padgrp
, pin
);
285 * If PADCFGLOCK and PADCFGLOCKTX bits are both clear for this pad,
286 * the pad is considered unlocked. Any other case means that it is
287 * either fully or partially locked.
289 offset
= community
->padcfglock_offset
+ 0 + padgrp
->reg_num
* 8;
290 value
= readl(community
->regs
+ offset
);
291 if (value
& BIT(gpp_offset
))
294 offset
= community
->padcfglock_offset
+ 4 + padgrp
->reg_num
* 8;
295 value
= readl(community
->regs
+ offset
);
296 if (value
& BIT(gpp_offset
))
297 ret
|= PAD_LOCKED_TX
;
302 static bool intel_pad_is_unlocked(const struct intel_pinctrl
*pctrl
, unsigned int pin
)
304 return (intel_pad_locked(pctrl
, pin
) & PAD_LOCKED
) == PAD_UNLOCKED
;
307 static bool intel_pad_usable(const struct intel_pinctrl
*pctrl
, unsigned int pin
)
309 return intel_pad_owned_by_host(pctrl
, pin
) && intel_pad_is_unlocked(pctrl
, pin
);
312 int intel_get_groups_count(struct pinctrl_dev
*pctldev
)
314 const struct intel_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
316 return pctrl
->soc
->ngroups
;
318 EXPORT_SYMBOL_NS_GPL(intel_get_groups_count
, "PINCTRL_INTEL");
320 const char *intel_get_group_name(struct pinctrl_dev
*pctldev
, unsigned int group
)
322 const struct intel_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
324 return pctrl
->soc
->groups
[group
].grp
.name
;
326 EXPORT_SYMBOL_NS_GPL(intel_get_group_name
, "PINCTRL_INTEL");
328 int intel_get_group_pins(struct pinctrl_dev
*pctldev
, unsigned int group
,
329 const unsigned int **pins
, unsigned int *npins
)
331 const struct intel_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
333 *pins
= pctrl
->soc
->groups
[group
].grp
.pins
;
334 *npins
= pctrl
->soc
->groups
[group
].grp
.npins
;
337 EXPORT_SYMBOL_NS_GPL(intel_get_group_pins
, "PINCTRL_INTEL");
339 static void intel_pin_dbg_show(struct pinctrl_dev
*pctldev
, struct seq_file
*s
,
342 struct intel_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
343 void __iomem
*padcfg
;
344 u32 cfg0
, cfg1
, mode
;
348 if (!intel_pad_owned_by_host(pctrl
, pin
)) {
349 seq_puts(s
, "not available");
353 cfg0
= readl(intel_get_padcfg(pctrl
, pin
, PADCFG0
));
354 cfg1
= readl(intel_get_padcfg(pctrl
, pin
, PADCFG1
));
356 mode
= (cfg0
& PADCFG0_PMODE_MASK
) >> PADCFG0_PMODE_SHIFT
;
357 if (mode
== PADCFG0_PMODE_GPIO
)
358 seq_puts(s
, "GPIO ");
360 seq_printf(s
, "mode %d ", mode
);
362 seq_printf(s
, "0x%08x 0x%08x", cfg0
, cfg1
);
364 /* Dump the additional PADCFG registers if available */
365 padcfg
= intel_get_padcfg(pctrl
, pin
, PADCFG2
);
367 seq_printf(s
, " 0x%08x", readl(padcfg
));
369 locked
= intel_pad_locked(pctrl
, pin
);
370 acpi
= intel_pad_acpi_mode(pctrl
, pin
);
372 if (locked
|| acpi
) {
375 seq_puts(s
, "LOCKED");
376 if ((locked
& PAD_LOCKED_FULL
) == PAD_LOCKED_TX
)
378 else if ((locked
& PAD_LOCKED_FULL
) == PAD_LOCKED_FULL
)
379 seq_puts(s
, " full");
390 static const struct pinctrl_ops intel_pinctrl_ops
= {
391 .get_groups_count
= intel_get_groups_count
,
392 .get_group_name
= intel_get_group_name
,
393 .get_group_pins
= intel_get_group_pins
,
394 .pin_dbg_show
= intel_pin_dbg_show
,
397 int intel_get_functions_count(struct pinctrl_dev
*pctldev
)
399 const struct intel_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
401 return pctrl
->soc
->nfunctions
;
403 EXPORT_SYMBOL_NS_GPL(intel_get_functions_count
, "PINCTRL_INTEL");
405 const char *intel_get_function_name(struct pinctrl_dev
*pctldev
, unsigned int function
)
407 const struct intel_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
409 return pctrl
->soc
->functions
[function
].func
.name
;
411 EXPORT_SYMBOL_NS_GPL(intel_get_function_name
, "PINCTRL_INTEL");
413 int intel_get_function_groups(struct pinctrl_dev
*pctldev
, unsigned int function
,
414 const char * const **groups
, unsigned int * const ngroups
)
416 const struct intel_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
418 *groups
= pctrl
->soc
->functions
[function
].func
.groups
;
419 *ngroups
= pctrl
->soc
->functions
[function
].func
.ngroups
;
422 EXPORT_SYMBOL_NS_GPL(intel_get_function_groups
, "PINCTRL_INTEL");
424 static int intel_pinmux_set_mux(struct pinctrl_dev
*pctldev
,
425 unsigned int function
, unsigned int group
)
427 struct intel_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
428 const struct intel_pingroup
*grp
= &pctrl
->soc
->groups
[group
];
431 guard(raw_spinlock_irqsave
)(&pctrl
->lock
);
434 * All pins in the groups needs to be accessible and writable
435 * before we can enable the mux for this group.
437 for (i
= 0; i
< grp
->grp
.npins
; i
++) {
438 if (!intel_pad_usable(pctrl
, grp
->grp
.pins
[i
]))
442 /* Now enable the mux setting for each pin in the group */
443 for (i
= 0; i
< grp
->grp
.npins
; i
++) {
444 void __iomem
*padcfg0
;
447 padcfg0
= intel_get_padcfg(pctrl
, grp
->grp
.pins
[i
], PADCFG0
);
449 value
= readl(padcfg0
);
450 value
&= ~PADCFG0_PMODE_MASK
;
453 pmode
= grp
->modes
[i
];
457 value
|= pmode
<< PADCFG0_PMODE_SHIFT
;
458 writel(value
, padcfg0
);
465 * enum - Possible pad physical connections
466 * @PAD_CONNECT_NONE: pad is fully disconnected
467 * @PAD_CONNECT_INPUT: pad is in input only mode
468 * @PAD_CONNECT_OUTPUT: pad is in output only mode
469 * @PAD_CONNECT_FULL: pad is fully connected
472 PAD_CONNECT_NONE
= 0,
473 PAD_CONNECT_INPUT
= 1,
474 PAD_CONNECT_OUTPUT
= 2,
475 PAD_CONNECT_FULL
= PAD_CONNECT_INPUT
| PAD_CONNECT_OUTPUT
,
478 static int __intel_gpio_get_direction(u32 value
)
480 switch ((value
& PADCFG0_GPIODIS_MASK
) >> PADCFG0_GPIODIS_SHIFT
) {
481 case PADCFG0_GPIODIS_FULL
:
482 return PAD_CONNECT_NONE
;
483 case PADCFG0_GPIODIS_OUTPUT
:
484 return PAD_CONNECT_INPUT
;
485 case PADCFG0_GPIODIS_INPUT
:
486 return PAD_CONNECT_OUTPUT
;
487 case PADCFG0_GPIODIS_NONE
:
488 return PAD_CONNECT_FULL
;
494 static u32
__intel_gpio_set_direction(u32 value
, bool input
, bool output
)
497 value
&= ~PADCFG0_GPIORXDIS
;
499 value
|= PADCFG0_GPIORXDIS
;
502 value
&= ~PADCFG0_GPIOTXDIS
;
504 value
|= PADCFG0_GPIOTXDIS
;
509 static int __intel_gpio_get_gpio_mode(u32 value
)
511 return (value
& PADCFG0_PMODE_MASK
) >> PADCFG0_PMODE_SHIFT
;
514 static int intel_gpio_get_gpio_mode(void __iomem
*padcfg0
)
516 return __intel_gpio_get_gpio_mode(readl(padcfg0
));
519 static void intel_gpio_set_gpio_mode(void __iomem
*padcfg0
)
523 value
= readl(padcfg0
);
525 /* Put the pad into GPIO mode */
526 value
&= ~PADCFG0_PMODE_MASK
;
527 value
|= PADCFG0_PMODE_GPIO
;
529 /* Disable TX buffer and enable RX (this will be input) */
530 value
= __intel_gpio_set_direction(value
, true, false);
532 /* Disable SCI/SMI/NMI generation */
533 value
&= ~(PADCFG0_GPIROUTIOXAPIC
| PADCFG0_GPIROUTSCI
);
534 value
&= ~(PADCFG0_GPIROUTSMI
| PADCFG0_GPIROUTNMI
);
536 writel(value
, padcfg0
);
539 static int intel_gpio_request_enable(struct pinctrl_dev
*pctldev
,
540 struct pinctrl_gpio_range
*range
,
543 struct intel_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
544 void __iomem
*padcfg0
;
546 padcfg0
= intel_get_padcfg(pctrl
, pin
, PADCFG0
);
548 guard(raw_spinlock_irqsave
)(&pctrl
->lock
);
550 if (!intel_pad_owned_by_host(pctrl
, pin
))
553 if (!intel_pad_is_unlocked(pctrl
, pin
))
557 * If pin is already configured in GPIO mode, we assume that
558 * firmware provides correct settings. In such case we avoid
559 * potential glitches on the pin. Otherwise, for the pin in
560 * alternative mode, consumer has to supply respective flags.
562 if (intel_gpio_get_gpio_mode(padcfg0
) == PADCFG0_PMODE_GPIO
)
565 intel_gpio_set_gpio_mode(padcfg0
);
570 static int intel_gpio_set_direction(struct pinctrl_dev
*pctldev
,
571 struct pinctrl_gpio_range
*range
,
572 unsigned int pin
, bool input
)
574 struct intel_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
575 void __iomem
*padcfg0
;
578 padcfg0
= intel_get_padcfg(pctrl
, pin
, PADCFG0
);
580 guard(raw_spinlock_irqsave
)(&pctrl
->lock
);
582 value
= readl(padcfg0
);
584 value
= __intel_gpio_set_direction(value
, true, false);
586 value
= __intel_gpio_set_direction(value
, false, true);
587 writel(value
, padcfg0
);
592 static const struct pinmux_ops intel_pinmux_ops
= {
593 .get_functions_count
= intel_get_functions_count
,
594 .get_function_name
= intel_get_function_name
,
595 .get_function_groups
= intel_get_function_groups
,
596 .set_mux
= intel_pinmux_set_mux
,
597 .gpio_request_enable
= intel_gpio_request_enable
,
598 .gpio_set_direction
= intel_gpio_set_direction
,
601 static int intel_config_get_pull(struct intel_pinctrl
*pctrl
, unsigned int pin
,
602 enum pin_config_param param
, u32
*arg
)
604 void __iomem
*padcfg1
;
607 padcfg1
= intel_get_padcfg(pctrl
, pin
, PADCFG1
);
609 scoped_guard(raw_spinlock_irqsave
, &pctrl
->lock
)
610 value
= readl(padcfg1
);
612 term
= (value
& PADCFG1_TERM_MASK
) >> PADCFG1_TERM_SHIFT
;
615 case PIN_CONFIG_BIAS_DISABLE
:
620 case PIN_CONFIG_BIAS_PULL_UP
:
621 if (!term
|| !(value
& PADCFG1_TERM_UP
))
625 case PADCFG1_TERM_833
:
628 case PADCFG1_TERM_1K
:
631 case PADCFG1_TERM_4K
:
634 case PADCFG1_TERM_5K
:
637 case PADCFG1_TERM_20K
:
644 case PIN_CONFIG_BIAS_PULL_DOWN
: {
645 const struct intel_community
*community
= intel_get_community(pctrl
, pin
);
647 if (!term
|| value
& PADCFG1_TERM_UP
)
651 case PADCFG1_TERM_833
:
652 if (!(community
->features
& PINCTRL_FEATURE_1K_PD
))
656 case PADCFG1_TERM_1K
:
657 if (!(community
->features
& PINCTRL_FEATURE_1K_PD
))
661 case PADCFG1_TERM_4K
:
664 case PADCFG1_TERM_5K
:
667 case PADCFG1_TERM_20K
:
682 static int intel_config_get_high_impedance(struct intel_pinctrl
*pctrl
, unsigned int pin
,
683 enum pin_config_param param
, u32
*arg
)
685 void __iomem
*padcfg0
;
688 padcfg0
= intel_get_padcfg(pctrl
, pin
, PADCFG0
);
690 scoped_guard(raw_spinlock_irqsave
, &pctrl
->lock
)
691 value
= readl(padcfg0
);
693 if (__intel_gpio_get_direction(value
) != PAD_CONNECT_NONE
)
699 static int intel_config_get_debounce(struct intel_pinctrl
*pctrl
, unsigned int pin
,
700 enum pin_config_param param
, u32
*arg
)
702 void __iomem
*padcfg2
;
706 padcfg2
= intel_get_padcfg(pctrl
, pin
, PADCFG2
);
710 scoped_guard(raw_spinlock_irqsave
, &pctrl
->lock
)
711 value2
= readl(padcfg2
);
713 if (!(value2
& PADCFG2_DEBEN
))
716 v
= (value2
& PADCFG2_DEBOUNCE_MASK
) >> PADCFG2_DEBOUNCE_SHIFT
;
717 *arg
= BIT(v
) * DEBOUNCE_PERIOD_NSEC
/ NSEC_PER_USEC
;
722 static int intel_config_get(struct pinctrl_dev
*pctldev
, unsigned int pin
,
723 unsigned long *config
)
725 struct intel_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
726 enum pin_config_param param
= pinconf_to_config_param(*config
);
730 if (!intel_pad_owned_by_host(pctrl
, pin
))
734 case PIN_CONFIG_BIAS_DISABLE
:
735 case PIN_CONFIG_BIAS_PULL_UP
:
736 case PIN_CONFIG_BIAS_PULL_DOWN
:
737 ret
= intel_config_get_pull(pctrl
, pin
, param
, &arg
);
742 case PIN_CONFIG_BIAS_HIGH_IMPEDANCE
:
743 ret
= intel_config_get_high_impedance(pctrl
, pin
, param
, &arg
);
748 case PIN_CONFIG_INPUT_DEBOUNCE
:
749 ret
= intel_config_get_debounce(pctrl
, pin
, param
, &arg
);
758 *config
= pinconf_to_config_packed(param
, arg
);
762 static int intel_config_set_pull(struct intel_pinctrl
*pctrl
, unsigned int pin
,
763 unsigned long config
)
765 unsigned int param
= pinconf_to_config_param(config
);
766 unsigned int arg
= pinconf_to_config_argument(config
);
767 u32 term
= 0, up
= 0, value
;
768 void __iomem
*padcfg1
;
771 case PIN_CONFIG_BIAS_DISABLE
:
774 case PIN_CONFIG_BIAS_PULL_UP
:
777 term
= PADCFG1_TERM_20K
;
779 case 1: /* Set default strength value in case none is given */
781 term
= PADCFG1_TERM_5K
;
784 term
= PADCFG1_TERM_4K
;
787 term
= PADCFG1_TERM_1K
;
790 term
= PADCFG1_TERM_833
;
796 up
= PADCFG1_TERM_UP
;
799 case PIN_CONFIG_BIAS_PULL_DOWN
: {
800 const struct intel_community
*community
= intel_get_community(pctrl
, pin
);
804 term
= PADCFG1_TERM_20K
;
806 case 1: /* Set default strength value in case none is given */
808 term
= PADCFG1_TERM_5K
;
811 term
= PADCFG1_TERM_4K
;
814 if (!(community
->features
& PINCTRL_FEATURE_1K_PD
))
816 term
= PADCFG1_TERM_1K
;
819 if (!(community
->features
& PINCTRL_FEATURE_1K_PD
))
821 term
= PADCFG1_TERM_833
;
834 padcfg1
= intel_get_padcfg(pctrl
, pin
, PADCFG1
);
836 guard(raw_spinlock_irqsave
)(&pctrl
->lock
);
838 value
= readl(padcfg1
);
839 value
= (value
& ~PADCFG1_TERM_MASK
) | (term
<< PADCFG1_TERM_SHIFT
);
840 value
= (value
& ~PADCFG1_TERM_UP
) | up
;
841 writel(value
, padcfg1
);
846 static void intel_gpio_set_high_impedance(struct intel_pinctrl
*pctrl
, unsigned int pin
)
848 void __iomem
*padcfg0
;
851 padcfg0
= intel_get_padcfg(pctrl
, pin
, PADCFG0
);
853 guard(raw_spinlock_irqsave
)(&pctrl
->lock
);
855 value
= readl(padcfg0
);
856 value
= __intel_gpio_set_direction(value
, false, false);
857 writel(value
, padcfg0
);
860 static int intel_config_set_debounce(struct intel_pinctrl
*pctrl
,
861 unsigned int pin
, unsigned int debounce
)
863 void __iomem
*padcfg0
, *padcfg2
;
868 v
= order_base_2(debounce
* NSEC_PER_USEC
/ DEBOUNCE_PERIOD_NSEC
);
875 padcfg2
= intel_get_padcfg(pctrl
, pin
, PADCFG2
);
879 padcfg0
= intel_get_padcfg(pctrl
, pin
, PADCFG0
);
881 guard(raw_spinlock_irqsave
)(&pctrl
->lock
);
883 value0
= readl(padcfg0
);
884 value2
= readl(padcfg2
);
886 value2
= (value2
& ~PADCFG2_DEBOUNCE_MASK
) | (v
<< PADCFG2_DEBOUNCE_SHIFT
);
888 /* Enable glitch filter and debouncer */
889 value0
|= PADCFG0_PREGFRXSEL
;
890 value2
|= PADCFG2_DEBEN
;
892 /* Disable glitch filter and debouncer */
893 value0
&= ~PADCFG0_PREGFRXSEL
;
894 value2
&= ~PADCFG2_DEBEN
;
897 writel(value0
, padcfg0
);
898 writel(value2
, padcfg2
);
903 static int intel_config_set(struct pinctrl_dev
*pctldev
, unsigned int pin
,
904 unsigned long *configs
, unsigned int nconfigs
)
906 struct intel_pinctrl
*pctrl
= pinctrl_dev_get_drvdata(pctldev
);
909 if (!intel_pad_usable(pctrl
, pin
))
912 for (i
= 0; i
< nconfigs
; i
++) {
913 switch (pinconf_to_config_param(configs
[i
])) {
914 case PIN_CONFIG_BIAS_DISABLE
:
915 case PIN_CONFIG_BIAS_PULL_UP
:
916 case PIN_CONFIG_BIAS_PULL_DOWN
:
917 ret
= intel_config_set_pull(pctrl
, pin
, configs
[i
]);
922 case PIN_CONFIG_BIAS_HIGH_IMPEDANCE
:
923 intel_gpio_set_high_impedance(pctrl
, pin
);
926 case PIN_CONFIG_INPUT_DEBOUNCE
:
927 ret
= intel_config_set_debounce(pctrl
, pin
,
928 pinconf_to_config_argument(configs
[i
]));
941 static const struct pinconf_ops intel_pinconf_ops
= {
943 .pin_config_get
= intel_config_get
,
944 .pin_config_set
= intel_config_set
,
947 static const struct pinctrl_desc intel_pinctrl_desc
= {
948 .pctlops
= &intel_pinctrl_ops
,
949 .pmxops
= &intel_pinmux_ops
,
950 .confops
= &intel_pinconf_ops
,
951 .owner
= THIS_MODULE
,
955 * intel_gpio_to_pin() - Translate from GPIO offset to pin number
956 * @pctrl: Pinctrl structure
957 * @offset: GPIO offset from gpiolib
958 * @community: Community is filled here if not %NULL
959 * @padgrp: Pad group is filled here if not %NULL
961 * When coming through gpiolib irqchip, the GPIO offset is not
962 * automatically translated to pinctrl pin number. This function can be
963 * used to find out the corresponding pinctrl pin.
965 * Return: a pin number and pointers to the community and pad group, which
966 * the pin belongs to, or negative error code if translation can't be done.
968 static int intel_gpio_to_pin(const struct intel_pinctrl
*pctrl
, unsigned int offset
,
969 const struct intel_community
**community
,
970 const struct intel_padgroup
**padgrp
)
972 const struct intel_community
*comm
;
973 const struct intel_padgroup
*grp
;
975 for_each_intel_gpio_group(pctrl
, comm
, grp
) {
976 if (offset
>= grp
->gpio_base
&& offset
< grp
->gpio_base
+ grp
->size
) {
982 return grp
->base
+ offset
- grp
->gpio_base
;
990 * intel_pin_to_gpio() - Translate from pin number to GPIO offset
991 * @pctrl: Pinctrl structure
994 * Translate the pin number of pinctrl to GPIO offset
996 * Return: a GPIO offset, or negative error code if translation can't be done.
998 static int intel_pin_to_gpio(const struct intel_pinctrl
*pctrl
, int pin
)
1000 const struct intel_community
*community
;
1001 const struct intel_padgroup
*padgrp
;
1003 community
= intel_get_community(pctrl
, pin
);
1007 padgrp
= intel_community_get_padgroup(community
, pin
);
1011 return pin
- padgrp
->base
+ padgrp
->gpio_base
;
1014 static int intel_gpio_get(struct gpio_chip
*chip
, unsigned int offset
)
1016 struct intel_pinctrl
*pctrl
= gpiochip_get_data(chip
);
1021 pin
= intel_gpio_to_pin(pctrl
, offset
, NULL
, NULL
);
1025 reg
= intel_get_padcfg(pctrl
, pin
, PADCFG0
);
1029 padcfg0
= readl(reg
);
1030 if (__intel_gpio_get_direction(padcfg0
) & PAD_CONNECT_OUTPUT
)
1031 return !!(padcfg0
& PADCFG0_GPIOTXSTATE
);
1033 return !!(padcfg0
& PADCFG0_GPIORXSTATE
);
1036 static void intel_gpio_set(struct gpio_chip
*chip
, unsigned int offset
,
1039 struct intel_pinctrl
*pctrl
= gpiochip_get_data(chip
);
1044 pin
= intel_gpio_to_pin(pctrl
, offset
, NULL
, NULL
);
1048 reg
= intel_get_padcfg(pctrl
, pin
, PADCFG0
);
1052 guard(raw_spinlock_irqsave
)(&pctrl
->lock
);
1054 padcfg0
= readl(reg
);
1056 padcfg0
|= PADCFG0_GPIOTXSTATE
;
1058 padcfg0
&= ~PADCFG0_GPIOTXSTATE
;
1059 writel(padcfg0
, reg
);
1062 static int intel_gpio_get_direction(struct gpio_chip
*chip
, unsigned int offset
)
1064 struct intel_pinctrl
*pctrl
= gpiochip_get_data(chip
);
1069 pin
= intel_gpio_to_pin(pctrl
, offset
, NULL
, NULL
);
1073 reg
= intel_get_padcfg(pctrl
, pin
, PADCFG0
);
1077 scoped_guard(raw_spinlock_irqsave
, &pctrl
->lock
)
1078 padcfg0
= readl(reg
);
1080 if (padcfg0
& PADCFG0_PMODE_MASK
)
1083 if (__intel_gpio_get_direction(padcfg0
) & PAD_CONNECT_OUTPUT
)
1084 return GPIO_LINE_DIRECTION_OUT
;
1086 return GPIO_LINE_DIRECTION_IN
;
1089 static int intel_gpio_direction_input(struct gpio_chip
*chip
, unsigned int offset
)
1091 return pinctrl_gpio_direction_input(chip
, offset
);
1094 static int intel_gpio_direction_output(struct gpio_chip
*chip
, unsigned int offset
,
1097 intel_gpio_set(chip
, offset
, value
);
1098 return pinctrl_gpio_direction_output(chip
, offset
);
1101 static const struct gpio_chip intel_gpio_chip
= {
1102 .owner
= THIS_MODULE
,
1103 .request
= gpiochip_generic_request
,
1104 .free
= gpiochip_generic_free
,
1105 .get_direction
= intel_gpio_get_direction
,
1106 .direction_input
= intel_gpio_direction_input
,
1107 .direction_output
= intel_gpio_direction_output
,
1108 .get
= intel_gpio_get
,
1109 .set
= intel_gpio_set
,
1110 .set_config
= gpiochip_generic_config
,
1113 static void intel_gpio_irq_ack(struct irq_data
*d
)
1115 struct gpio_chip
*gc
= irq_data_get_irq_chip_data(d
);
1116 struct intel_pinctrl
*pctrl
= gpiochip_get_data(gc
);
1117 const struct intel_community
*community
;
1118 const struct intel_padgroup
*padgrp
;
1121 pin
= intel_gpio_to_pin(pctrl
, irqd_to_hwirq(d
), &community
, &padgrp
);
1123 unsigned int gpp
, gpp_offset
;
1126 gpp
= padgrp
->reg_num
;
1127 gpp_offset
= padgroup_offset(padgrp
, pin
);
1129 is
= community
->regs
+ community
->is_offset
+ gpp
* 4;
1131 guard(raw_spinlock
)(&pctrl
->lock
);
1133 writel(BIT(gpp_offset
), is
);
1137 static void intel_gpio_irq_mask_unmask(struct gpio_chip
*gc
, irq_hw_number_t hwirq
, bool mask
)
1139 struct intel_pinctrl
*pctrl
= gpiochip_get_data(gc
);
1140 const struct intel_community
*community
;
1141 const struct intel_padgroup
*padgrp
;
1144 pin
= intel_gpio_to_pin(pctrl
, hwirq
, &community
, &padgrp
);
1146 unsigned int gpp
, gpp_offset
;
1147 void __iomem
*reg
, *is
;
1150 gpp
= padgrp
->reg_num
;
1151 gpp_offset
= padgroup_offset(padgrp
, pin
);
1153 reg
= community
->regs
+ community
->ie_offset
+ gpp
* 4;
1154 is
= community
->regs
+ community
->is_offset
+ gpp
* 4;
1156 guard(raw_spinlock_irqsave
)(&pctrl
->lock
);
1158 /* Clear interrupt status first to avoid unexpected interrupt */
1159 writel(BIT(gpp_offset
), is
);
1163 value
&= ~BIT(gpp_offset
);
1165 value
|= BIT(gpp_offset
);
1170 static void intel_gpio_irq_mask(struct irq_data
*d
)
1172 struct gpio_chip
*gc
= irq_data_get_irq_chip_data(d
);
1173 irq_hw_number_t hwirq
= irqd_to_hwirq(d
);
1175 intel_gpio_irq_mask_unmask(gc
, hwirq
, true);
1176 gpiochip_disable_irq(gc
, hwirq
);
1179 static void intel_gpio_irq_unmask(struct irq_data
*d
)
1181 struct gpio_chip
*gc
= irq_data_get_irq_chip_data(d
);
1182 irq_hw_number_t hwirq
= irqd_to_hwirq(d
);
1184 gpiochip_enable_irq(gc
, hwirq
);
1185 intel_gpio_irq_mask_unmask(gc
, hwirq
, false);
1188 static int intel_gpio_irq_type(struct irq_data
*d
, unsigned int type
)
1190 struct gpio_chip
*gc
= irq_data_get_irq_chip_data(d
);
1191 struct intel_pinctrl
*pctrl
= gpiochip_get_data(gc
);
1192 unsigned int pin
= intel_gpio_to_pin(pctrl
, irqd_to_hwirq(d
), NULL
, NULL
);
1193 u32 rxevcfg
, rxinv
, value
;
1196 reg
= intel_get_padcfg(pctrl
, pin
, PADCFG0
);
1201 * If the pin is in ACPI mode it is still usable as a GPIO but it
1202 * cannot be used as IRQ because GPI_IS status bit will not be
1203 * updated by the host controller hardware.
1205 if (intel_pad_acpi_mode(pctrl
, pin
)) {
1206 dev_warn(pctrl
->dev
, "pin %u cannot be used as IRQ\n", pin
);
1210 if ((type
& IRQ_TYPE_EDGE_BOTH
) == IRQ_TYPE_EDGE_BOTH
) {
1211 rxevcfg
= PADCFG0_RXEVCFG_EDGE_BOTH
;
1212 } else if (type
& IRQ_TYPE_EDGE_FALLING
) {
1213 rxevcfg
= PADCFG0_RXEVCFG_EDGE
;
1214 } else if (type
& IRQ_TYPE_EDGE_RISING
) {
1215 rxevcfg
= PADCFG0_RXEVCFG_EDGE
;
1216 } else if (type
& IRQ_TYPE_LEVEL_MASK
) {
1217 rxevcfg
= PADCFG0_RXEVCFG_LEVEL
;
1219 rxevcfg
= PADCFG0_RXEVCFG_DISABLED
;
1222 if (type
== IRQ_TYPE_EDGE_FALLING
|| type
== IRQ_TYPE_LEVEL_LOW
)
1223 rxinv
= PADCFG0_RXINV
;
1227 guard(raw_spinlock_irqsave
)(&pctrl
->lock
);
1229 intel_gpio_set_gpio_mode(reg
);
1233 value
= (value
& ~PADCFG0_RXEVCFG_MASK
) | rxevcfg
;
1234 value
= (value
& ~PADCFG0_RXINV
) | rxinv
;
1238 if (type
& IRQ_TYPE_EDGE_BOTH
)
1239 irq_set_handler_locked(d
, handle_edge_irq
);
1240 else if (type
& IRQ_TYPE_LEVEL_MASK
)
1241 irq_set_handler_locked(d
, handle_level_irq
);
1246 static int intel_gpio_irq_wake(struct irq_data
*d
, unsigned int on
)
1248 struct gpio_chip
*gc
= irq_data_get_irq_chip_data(d
);
1249 struct intel_pinctrl
*pctrl
= gpiochip_get_data(gc
);
1250 unsigned int pin
= intel_gpio_to_pin(pctrl
, irqd_to_hwirq(d
), NULL
, NULL
);
1253 enable_irq_wake(pctrl
->irq
);
1255 disable_irq_wake(pctrl
->irq
);
1257 dev_dbg(pctrl
->dev
, "%s wake for pin %u\n", str_enable_disable(on
), pin
);
1261 static const struct irq_chip intel_gpio_irq_chip
= {
1262 .name
= "intel-gpio",
1263 .irq_ack
= intel_gpio_irq_ack
,
1264 .irq_mask
= intel_gpio_irq_mask
,
1265 .irq_unmask
= intel_gpio_irq_unmask
,
1266 .irq_set_type
= intel_gpio_irq_type
,
1267 .irq_set_wake
= intel_gpio_irq_wake
,
1268 .flags
= IRQCHIP_MASK_ON_SUSPEND
| IRQCHIP_IMMUTABLE
,
1269 GPIOCHIP_IRQ_RESOURCE_HELPERS
,
1272 static irqreturn_t
intel_gpio_irq(int irq
, void *data
)
1274 const struct intel_community
*community
;
1275 const struct intel_padgroup
*padgrp
;
1276 struct intel_pinctrl
*pctrl
= data
;
1279 /* Need to check all communities for pending interrupts */
1280 for_each_intel_pad_group(pctrl
, community
, padgrp
) {
1281 struct gpio_chip
*gc
= &pctrl
->chip
;
1282 unsigned long pending
, enabled
;
1283 unsigned int gpp
, gpp_offset
;
1284 void __iomem
*reg
, *is
;
1286 gpp
= padgrp
->reg_num
;
1288 reg
= community
->regs
+ community
->ie_offset
+ gpp
* 4;
1289 is
= community
->regs
+ community
->is_offset
+ gpp
* 4;
1291 scoped_guard(raw_spinlock
, &pctrl
->lock
) {
1292 pending
= readl(is
);
1293 enabled
= readl(reg
);
1296 /* Only interrupts that are enabled */
1299 for_each_set_bit(gpp_offset
, &pending
, padgrp
->size
)
1300 generic_handle_domain_irq(gc
->irq
.domain
, padgrp
->gpio_base
+ gpp_offset
);
1302 ret
+= pending
? 1 : 0;
1305 return IRQ_RETVAL(ret
);
1308 static void intel_gpio_irq_init(struct intel_pinctrl
*pctrl
)
1310 const struct intel_community
*community
;
1312 for_each_intel_pin_community(pctrl
, community
) {
1313 void __iomem
*reg
, *is
;
1316 for (gpp
= 0; gpp
< community
->ngpps
; gpp
++) {
1317 reg
= community
->regs
+ community
->ie_offset
+ gpp
* 4;
1318 is
= community
->regs
+ community
->is_offset
+ gpp
* 4;
1320 /* Mask and clear all interrupts */
1327 static int intel_gpio_irq_init_hw(struct gpio_chip
*gc
)
1329 struct intel_pinctrl
*pctrl
= gpiochip_get_data(gc
);
1332 * Make sure the interrupt lines are in a proper state before
1333 * further configuration.
1335 intel_gpio_irq_init(pctrl
);
1340 static int intel_gpio_add_pin_ranges(struct gpio_chip
*gc
)
1342 struct intel_pinctrl
*pctrl
= gpiochip_get_data(gc
);
1343 const struct intel_community
*community
;
1344 const struct intel_padgroup
*grp
;
1347 for_each_intel_gpio_group(pctrl
, community
, grp
) {
1348 ret
= gpiochip_add_pin_range(&pctrl
->chip
, dev_name(pctrl
->dev
),
1349 grp
->gpio_base
, grp
->base
,
1352 dev_err(pctrl
->dev
, "failed to add GPIO pin range\n");
1360 static unsigned int intel_gpio_ngpio(const struct intel_pinctrl
*pctrl
)
1362 const struct intel_community
*community
;
1363 const struct intel_padgroup
*grp
;
1364 unsigned int ngpio
= 0;
1366 for_each_intel_gpio_group(pctrl
, community
, grp
) {
1367 if (grp
->gpio_base
+ grp
->size
> ngpio
)
1368 ngpio
= grp
->gpio_base
+ grp
->size
;
1374 static int intel_gpio_probe(struct intel_pinctrl
*pctrl
, int irq
)
1377 struct gpio_irq_chip
*girq
;
1379 pctrl
->chip
= intel_gpio_chip
;
1381 /* Setup GPIO chip */
1382 pctrl
->chip
.ngpio
= intel_gpio_ngpio(pctrl
);
1383 pctrl
->chip
.label
= dev_name(pctrl
->dev
);
1384 pctrl
->chip
.parent
= pctrl
->dev
;
1385 pctrl
->chip
.base
= -1;
1386 pctrl
->chip
.add_pin_ranges
= intel_gpio_add_pin_ranges
;
1390 * On some platforms several GPIO controllers share the same interrupt
1393 ret
= devm_request_irq(pctrl
->dev
, irq
, intel_gpio_irq
,
1394 IRQF_SHARED
| IRQF_NO_THREAD
,
1395 dev_name(pctrl
->dev
), pctrl
);
1397 dev_err(pctrl
->dev
, "failed to request interrupt\n");
1401 /* Setup IRQ chip */
1402 girq
= &pctrl
->chip
.irq
;
1403 gpio_irq_chip_set_chip(girq
, &intel_gpio_irq_chip
);
1404 /* This will let us handle the IRQ in the driver */
1405 girq
->parent_handler
= NULL
;
1406 girq
->num_parents
= 0;
1407 girq
->default_type
= IRQ_TYPE_NONE
;
1408 girq
->handler
= handle_bad_irq
;
1409 girq
->init_hw
= intel_gpio_irq_init_hw
;
1411 ret
= devm_gpiochip_add_data(pctrl
->dev
, &pctrl
->chip
, pctrl
);
1413 dev_err(pctrl
->dev
, "failed to register gpiochip\n");
1420 static int intel_pinctrl_add_padgroups_by_gpps(struct intel_pinctrl
*pctrl
,
1421 struct intel_community
*community
)
1423 struct intel_padgroup
*gpps
;
1424 unsigned int padown_num
= 0;
1425 size_t i
, ngpps
= community
->ngpps
;
1427 gpps
= devm_kcalloc(pctrl
->dev
, ngpps
, sizeof(*gpps
), GFP_KERNEL
);
1431 for (i
= 0; i
< ngpps
; i
++) {
1432 gpps
[i
] = community
->gpps
[i
];
1434 if (gpps
[i
].size
> INTEL_PINCTRL_MAX_GPP_SIZE
)
1437 /* Special treatment for GPIO base */
1438 switch (gpps
[i
].gpio_base
) {
1439 case INTEL_GPIO_BASE_MATCH
:
1440 gpps
[i
].gpio_base
= gpps
[i
].base
;
1442 case INTEL_GPIO_BASE_ZERO
:
1443 gpps
[i
].gpio_base
= 0;
1445 case INTEL_GPIO_BASE_NOMAP
:
1451 gpps
[i
].padown_num
= padown_num
;
1452 padown_num
+= DIV_ROUND_UP(gpps
[i
].size
* 4, INTEL_PINCTRL_MAX_GPP_SIZE
);
1455 community
->gpps
= gpps
;
1460 static int intel_pinctrl_add_padgroups_by_size(struct intel_pinctrl
*pctrl
,
1461 struct intel_community
*community
)
1463 struct intel_padgroup
*gpps
;
1464 unsigned int npins
= community
->npins
;
1465 unsigned int padown_num
= 0;
1466 size_t i
, ngpps
= DIV_ROUND_UP(npins
, community
->gpp_size
);
1468 if (community
->gpp_size
> INTEL_PINCTRL_MAX_GPP_SIZE
)
1471 gpps
= devm_kcalloc(pctrl
->dev
, ngpps
, sizeof(*gpps
), GFP_KERNEL
);
1475 for (i
= 0; i
< ngpps
; i
++) {
1476 unsigned int gpp_size
= community
->gpp_size
;
1478 gpps
[i
].reg_num
= i
;
1479 gpps
[i
].base
= community
->pin_base
+ i
* gpp_size
;
1480 gpps
[i
].size
= min(gpp_size
, npins
);
1481 npins
-= gpps
[i
].size
;
1483 gpps
[i
].gpio_base
= gpps
[i
].base
;
1484 gpps
[i
].padown_num
= padown_num
;
1486 padown_num
+= community
->gpp_num_padown_regs
;
1489 community
->ngpps
= ngpps
;
1490 community
->gpps
= gpps
;
1495 static int intel_pinctrl_pm_init(struct intel_pinctrl
*pctrl
)
1497 #ifdef CONFIG_PM_SLEEP
1498 const struct intel_pinctrl_soc_data
*soc
= pctrl
->soc
;
1499 struct intel_community_context
*communities
;
1500 struct intel_pad_context
*pads
;
1503 pads
= devm_kcalloc(pctrl
->dev
, soc
->npins
, sizeof(*pads
), GFP_KERNEL
);
1507 communities
= devm_kcalloc(pctrl
->dev
, pctrl
->ncommunities
,
1508 sizeof(*communities
), GFP_KERNEL
);
1513 for (i
= 0; i
< pctrl
->ncommunities
; i
++) {
1514 struct intel_community
*community
= &pctrl
->communities
[i
];
1515 u32
*intmask
, *hostown
;
1517 intmask
= devm_kcalloc(pctrl
->dev
, community
->ngpps
,
1518 sizeof(*intmask
), GFP_KERNEL
);
1522 communities
[i
].intmask
= intmask
;
1524 hostown
= devm_kcalloc(pctrl
->dev
, community
->ngpps
,
1525 sizeof(*hostown
), GFP_KERNEL
);
1529 communities
[i
].hostown
= hostown
;
1532 pctrl
->context
.pads
= pads
;
1533 pctrl
->context
.communities
= communities
;
1539 static int intel_pinctrl_probe_pwm(struct intel_pinctrl
*pctrl
,
1540 struct intel_community
*community
)
1542 static const struct pwm_lpss_boardinfo info
= {
1543 .clk_rate
= 19200000,
1545 .base_unit_bits
= 22,
1548 struct pwm_chip
*chip
;
1550 if (!(community
->features
& PINCTRL_FEATURE_PWM
))
1553 if (!IS_REACHABLE(CONFIG_PWM_LPSS
))
1556 chip
= devm_pwm_lpss_probe(pctrl
->dev
, community
->regs
+ PWMC
, &info
);
1557 return PTR_ERR_OR_ZERO(chip
);
1560 int intel_pinctrl_probe(struct platform_device
*pdev
,
1561 const struct intel_pinctrl_soc_data
*soc_data
)
1563 struct device
*dev
= &pdev
->dev
;
1564 struct intel_pinctrl
*pctrl
;
1567 pctrl
= devm_kzalloc(dev
, sizeof(*pctrl
), GFP_KERNEL
);
1572 pctrl
->soc
= soc_data
;
1573 raw_spin_lock_init(&pctrl
->lock
);
1576 * Make a copy of the communities which we can use to hold pointers
1579 pctrl
->ncommunities
= pctrl
->soc
->ncommunities
;
1580 pctrl
->communities
= devm_kcalloc(dev
, pctrl
->ncommunities
,
1581 sizeof(*pctrl
->communities
), GFP_KERNEL
);
1582 if (!pctrl
->communities
)
1585 for (i
= 0; i
< pctrl
->ncommunities
; i
++) {
1586 struct intel_community
*community
= &pctrl
->communities
[i
];
1591 *community
= pctrl
->soc
->communities
[i
];
1593 regs
= devm_platform_ioremap_resource(pdev
, community
->barno
);
1595 return PTR_ERR(regs
);
1598 * Determine community features based on the revision.
1599 * A value of all ones means the device is not present.
1601 value
= readl(regs
+ REVID
);
1604 if (((value
& REVID_MASK
) >> REVID_SHIFT
) >= 0x94) {
1605 community
->features
|= PINCTRL_FEATURE_DEBOUNCE
;
1606 community
->features
|= PINCTRL_FEATURE_1K_PD
;
1609 /* Determine community features based on the capabilities */
1612 value
= readl(regs
+ offset
);
1613 switch ((value
& CAPLIST_ID_MASK
) >> CAPLIST_ID_SHIFT
) {
1614 case CAPLIST_ID_GPIO_HW_INFO
:
1615 community
->features
|= PINCTRL_FEATURE_GPIO_HW_INFO
;
1617 case CAPLIST_ID_PWM
:
1618 community
->features
|= PINCTRL_FEATURE_PWM
;
1620 case CAPLIST_ID_BLINK
:
1621 community
->features
|= PINCTRL_FEATURE_BLINK
;
1623 case CAPLIST_ID_EXP
:
1624 community
->features
|= PINCTRL_FEATURE_EXP
;
1629 offset
= (value
& CAPLIST_NEXT_MASK
) >> CAPLIST_NEXT_SHIFT
;
1632 dev_dbg(dev
, "Community%d features: %#08x\n", i
, community
->features
);
1634 /* Read offset of the pad configuration registers */
1635 offset
= readl(regs
+ PADBAR
);
1637 community
->regs
= regs
;
1638 community
->pad_regs
= regs
+ offset
;
1640 if (community
->gpps
)
1641 ret
= intel_pinctrl_add_padgroups_by_gpps(pctrl
, community
);
1643 ret
= intel_pinctrl_add_padgroups_by_size(pctrl
, community
);
1647 ret
= intel_pinctrl_probe_pwm(pctrl
, community
);
1652 irq
= platform_get_irq(pdev
, 0);
1656 ret
= intel_pinctrl_pm_init(pctrl
);
1660 pctrl
->pctldesc
= intel_pinctrl_desc
;
1661 pctrl
->pctldesc
.name
= dev_name(dev
);
1662 pctrl
->pctldesc
.pins
= pctrl
->soc
->pins
;
1663 pctrl
->pctldesc
.npins
= pctrl
->soc
->npins
;
1665 pctrl
->pctldev
= devm_pinctrl_register(dev
, &pctrl
->pctldesc
, pctrl
);
1666 if (IS_ERR(pctrl
->pctldev
)) {
1667 dev_err(dev
, "failed to register pinctrl driver\n");
1668 return PTR_ERR(pctrl
->pctldev
);
1671 ret
= intel_gpio_probe(pctrl
, irq
);
1675 platform_set_drvdata(pdev
, pctrl
);
1679 EXPORT_SYMBOL_NS_GPL(intel_pinctrl_probe
, "PINCTRL_INTEL");
1681 int intel_pinctrl_probe_by_hid(struct platform_device
*pdev
)
1683 const struct intel_pinctrl_soc_data
*data
;
1685 data
= device_get_match_data(&pdev
->dev
);
1689 return intel_pinctrl_probe(pdev
, data
);
1691 EXPORT_SYMBOL_NS_GPL(intel_pinctrl_probe_by_hid
, "PINCTRL_INTEL");
1693 int intel_pinctrl_probe_by_uid(struct platform_device
*pdev
)
1695 const struct intel_pinctrl_soc_data
*data
;
1697 data
= intel_pinctrl_get_soc_data(pdev
);
1699 return PTR_ERR(data
);
1701 return intel_pinctrl_probe(pdev
, data
);
1703 EXPORT_SYMBOL_NS_GPL(intel_pinctrl_probe_by_uid
, "PINCTRL_INTEL");
1705 const struct intel_pinctrl_soc_data
*intel_pinctrl_get_soc_data(struct platform_device
*pdev
)
1707 const struct intel_pinctrl_soc_data
* const *table
;
1708 const struct intel_pinctrl_soc_data
*data
;
1709 struct device
*dev
= &pdev
->dev
;
1711 table
= device_get_match_data(dev
);
1713 struct acpi_device
*adev
= ACPI_COMPANION(dev
);
1716 for (i
= 0; table
[i
]; i
++) {
1717 if (acpi_dev_uid_match(adev
, table
[i
]->uid
))
1722 const struct platform_device_id
*id
;
1724 id
= platform_get_device_id(pdev
);
1726 return ERR_PTR(-ENODEV
);
1728 table
= (const struct intel_pinctrl_soc_data
* const *)id
->driver_data
;
1729 data
= table
[pdev
->id
];
1732 return data
?: ERR_PTR(-ENODATA
);
1734 EXPORT_SYMBOL_NS_GPL(intel_pinctrl_get_soc_data
, "PINCTRL_INTEL");
1736 static bool __intel_gpio_is_direct_irq(u32 value
)
1738 return (value
& PADCFG0_GPIROUTIOXAPIC
) &&
1739 (__intel_gpio_get_direction(value
) == PAD_CONNECT_INPUT
) &&
1740 (__intel_gpio_get_gpio_mode(value
) == PADCFG0_PMODE_GPIO
);
1743 static bool intel_pinctrl_should_save(struct intel_pinctrl
*pctrl
, unsigned int pin
)
1745 const struct pin_desc
*pd
= pin_desc_get(pctrl
->pctldev
, pin
);
1748 if (!pd
|| !intel_pad_usable(pctrl
, pin
))
1752 * Only restore the pin if it is actually in use by the kernel (or
1753 * by userspace). It is possible that some pins are used by the
1754 * BIOS during resume and those are not always locked down so leave
1757 if (pd
->mux_owner
|| pd
->gpio_owner
||
1758 gpiochip_line_is_irq(&pctrl
->chip
, intel_pin_to_gpio(pctrl
, pin
)))
1762 * The firmware on some systems may configure GPIO pins to be
1763 * an interrupt source in so called "direct IRQ" mode. In such
1764 * cases the GPIO controller driver has no idea if those pins
1765 * are being used or not. At the same time, there is a known bug
1766 * in the firmwares that don't restore the pin settings correctly
1767 * after suspend, i.e. by an unknown reason the Rx value becomes
1770 * Hence, let's save and restore the pins that are configured
1771 * as GPIOs in the input mode with GPIROUTIOXAPIC bit set.
1773 * See https://bugzilla.kernel.org/show_bug.cgi?id=214749.
1775 value
= readl(intel_get_padcfg(pctrl
, pin
, PADCFG0
));
1776 if (__intel_gpio_is_direct_irq(value
))
1782 static int intel_pinctrl_suspend_noirq(struct device
*dev
)
1784 struct intel_pinctrl
*pctrl
= dev_get_drvdata(dev
);
1785 struct intel_community_context
*communities
;
1786 struct intel_pad_context
*pads
;
1789 pads
= pctrl
->context
.pads
;
1790 for (i
= 0; i
< pctrl
->soc
->npins
; i
++) {
1791 const struct pinctrl_pin_desc
*desc
= &pctrl
->soc
->pins
[i
];
1792 void __iomem
*padcfg
;
1795 if (!intel_pinctrl_should_save(pctrl
, desc
->number
))
1798 val
= readl(intel_get_padcfg(pctrl
, desc
->number
, PADCFG0
));
1799 pads
[i
].padcfg0
= val
& ~PADCFG0_GPIORXSTATE
;
1800 val
= readl(intel_get_padcfg(pctrl
, desc
->number
, PADCFG1
));
1801 pads
[i
].padcfg1
= val
;
1803 padcfg
= intel_get_padcfg(pctrl
, desc
->number
, PADCFG2
);
1805 pads
[i
].padcfg2
= readl(padcfg
);
1808 communities
= pctrl
->context
.communities
;
1809 for (i
= 0; i
< pctrl
->ncommunities
; i
++) {
1810 struct intel_community
*community
= &pctrl
->communities
[i
];
1814 base
= community
->regs
+ community
->ie_offset
;
1815 for (gpp
= 0; gpp
< community
->ngpps
; gpp
++)
1816 communities
[i
].intmask
[gpp
] = readl(base
+ gpp
* 4);
1818 base
= community
->regs
+ community
->hostown_offset
;
1819 for (gpp
= 0; gpp
< community
->ngpps
; gpp
++)
1820 communities
[i
].hostown
[gpp
] = readl(base
+ gpp
* 4);
1826 static bool intel_gpio_update_reg(void __iomem
*reg
, u32 mask
, u32 value
)
1832 updated
= (curr
& ~mask
) | (value
& mask
);
1833 if (curr
== updated
)
1836 writel(updated
, reg
);
1840 static void intel_restore_hostown(struct intel_pinctrl
*pctrl
, unsigned int c
,
1841 void __iomem
*base
, unsigned int gpp
, u32 saved
)
1843 const struct intel_community
*community
= &pctrl
->communities
[c
];
1844 const struct intel_padgroup
*padgrp
= &community
->gpps
[gpp
];
1845 struct device
*dev
= pctrl
->dev
;
1850 if (padgrp
->gpio_base
== INTEL_GPIO_BASE_NOMAP
)
1853 for_each_requested_gpio_in_range(&pctrl
->chip
, i
, padgrp
->gpio_base
, padgrp
->size
, dummy
)
1854 requested
|= BIT(i
);
1856 if (!intel_gpio_update_reg(base
+ gpp
* 4, requested
, saved
))
1859 dev_dbg(dev
, "restored hostown %u/%u %#08x\n", c
, gpp
, readl(base
+ gpp
* 4));
1862 static void intel_restore_intmask(struct intel_pinctrl
*pctrl
, unsigned int c
,
1863 void __iomem
*base
, unsigned int gpp
, u32 saved
)
1865 struct device
*dev
= pctrl
->dev
;
1867 if (!intel_gpio_update_reg(base
+ gpp
* 4, ~0U, saved
))
1870 dev_dbg(dev
, "restored mask %u/%u %#08x\n", c
, gpp
, readl(base
+ gpp
* 4));
1873 static void intel_restore_padcfg(struct intel_pinctrl
*pctrl
, unsigned int pin
,
1874 unsigned int reg
, u32 saved
)
1876 u32 mask
= (reg
== PADCFG0
) ? PADCFG0_GPIORXSTATE
: 0;
1877 unsigned int n
= reg
/ sizeof(u32
);
1878 struct device
*dev
= pctrl
->dev
;
1879 void __iomem
*padcfg
;
1881 padcfg
= intel_get_padcfg(pctrl
, pin
, reg
);
1885 if (!intel_gpio_update_reg(padcfg
, ~mask
, saved
))
1888 dev_dbg(dev
, "restored pin %u padcfg%u %#08x\n", pin
, n
, readl(padcfg
));
1891 static int intel_pinctrl_resume_noirq(struct device
*dev
)
1893 struct intel_pinctrl
*pctrl
= dev_get_drvdata(dev
);
1894 const struct intel_community_context
*communities
;
1895 const struct intel_pad_context
*pads
;
1898 /* Mask all interrupts */
1899 intel_gpio_irq_init(pctrl
);
1901 pads
= pctrl
->context
.pads
;
1902 for (i
= 0; i
< pctrl
->soc
->npins
; i
++) {
1903 const struct pinctrl_pin_desc
*desc
= &pctrl
->soc
->pins
[i
];
1905 if (!(intel_pinctrl_should_save(pctrl
, desc
->number
) ||
1907 * If the firmware mangled the register contents too much,
1908 * check the saved value for the Direct IRQ mode.
1910 __intel_gpio_is_direct_irq(pads
[i
].padcfg0
)))
1913 intel_restore_padcfg(pctrl
, desc
->number
, PADCFG0
, pads
[i
].padcfg0
);
1914 intel_restore_padcfg(pctrl
, desc
->number
, PADCFG1
, pads
[i
].padcfg1
);
1915 intel_restore_padcfg(pctrl
, desc
->number
, PADCFG2
, pads
[i
].padcfg2
);
1918 communities
= pctrl
->context
.communities
;
1919 for (i
= 0; i
< pctrl
->ncommunities
; i
++) {
1920 struct intel_community
*community
= &pctrl
->communities
[i
];
1924 base
= community
->regs
+ community
->ie_offset
;
1925 for (gpp
= 0; gpp
< community
->ngpps
; gpp
++)
1926 intel_restore_intmask(pctrl
, i
, base
, gpp
, communities
[i
].intmask
[gpp
]);
1928 base
= community
->regs
+ community
->hostown_offset
;
1929 for (gpp
= 0; gpp
< community
->ngpps
; gpp
++)
1930 intel_restore_hostown(pctrl
, i
, base
, gpp
, communities
[i
].hostown
[gpp
]);
1936 EXPORT_NS_GPL_DEV_SLEEP_PM_OPS(intel_pinctrl_pm_ops
, PINCTRL_INTEL
) = {
1937 NOIRQ_SYSTEM_SLEEP_PM_OPS(intel_pinctrl_suspend_noirq
, intel_pinctrl_resume_noirq
)
1940 MODULE_AUTHOR("Mathias Nyman <mathias.nyman@linux.intel.com>");
1941 MODULE_AUTHOR("Mika Westerberg <mika.westerberg@linux.intel.com>");
1942 MODULE_DESCRIPTION("Intel pinctrl/GPIO core driver");
1943 MODULE_LICENSE("GPL v2");