Skip to content

Commit 1d40890

Browse files
committed
Merge tag 'gpio-v5.6-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio
Pull GPIO fixes from Linus Walleij: - Revert two patches to gpio_do_set_config() and implement the proper solution that works, also drop an unecessary call in set_config() - Fix up the lockdep class for hierarchical IRQ domains. - Remove some bridge code for line directions. - Fix a register access bug in the Xilinx driver. * tag 'gpio-v5.6-2' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio: gpio: sifive: fix static checker warning spmi: pmic-arb: Set lockdep class for hierarchical irq domains gpio: xilinx: Fix bug where the wrong GPIO register is written to gpiolib: remove unnecessary argument from set_config call gpio: bd71828: Remove unneeded defines for GPIO_LINE_DIRECTION_IN/OUT MAINTAINERS: Sort entries in database for GPIO gpiolib: fix gpio_do_set_config() Revert "gpiolib: remove set but not used variable 'config'" Revert "gpiolib: Remove duplicated function gpio_do_set_config()"
2 parents 64ae134 + a924eae commit 1d40890

File tree

6 files changed

+49
-34
lines changed

6 files changed

+49
-34
lines changed

MAINTAINERS

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2796,11 +2796,11 @@ F: drivers/block/aoe/
27962796

27972797
ATHEROS 71XX/9XXX GPIO DRIVER
27982798
M: Alban Bedel <[email protected]>
2799+
S: Maintained
27992800
W: https://github.com/AlbanBedel/linux
28002801
T: git git://github.com/AlbanBedel/linux
2801-
S: Maintained
2802-
F: drivers/gpio/gpio-ath79.c
28032802
F: Documentation/devicetree/bindings/gpio/gpio-ath79.txt
2803+
F: drivers/gpio/gpio-ath79.c
28042804

28052805
ATHEROS 71XX/9XXX USB PHY DRIVER
28062806
M: Alban Bedel <[email protected]>
@@ -3422,8 +3422,8 @@ BROADCOM BRCMSTB GPIO DRIVER
34223422
M: Gregory Fong <[email protected]>
34233423
34243424
S: Supported
3425-
F: drivers/gpio/gpio-brcmstb.c
34263425
F: Documentation/devicetree/bindings/gpio/brcm,brcmstb-gpio.txt
3426+
F: drivers/gpio/gpio-brcmstb.c
34273427

34283428
BROADCOM BRCMSTB I2C DRIVER
34293429
M: Kamal Dasu <[email protected]>
@@ -3481,8 +3481,8 @@ BROADCOM KONA GPIO DRIVER
34813481
M: Ray Jui <[email protected]>
34823482
34833483
S: Supported
3484-
F: drivers/gpio/gpio-bcm-kona.c
34853484
F: Documentation/devicetree/bindings/gpio/brcm,kona-gpio.txt
3485+
F: drivers/gpio/gpio-bcm-kona.c
34863486

34873487
BROADCOM NETXTREME-E ROCE DRIVER
34883488
M: Selvin Xavier <[email protected]>
@@ -3597,8 +3597,8 @@ F: sound/pci/bt87x.c
35973597

35983598
BT8XXGPIO DRIVER
35993599
M: Michael Buesch <[email protected]>
3600-
W: http://bu3sch.de/btgpio.php
36013600
S: Maintained
3601+
W: http://bu3sch.de/btgpio.php
36023602
F: drivers/gpio/gpio-bt8xx.c
36033603

36043604
BTRFS FILE SYSTEM
@@ -7143,18 +7143,18 @@ GPIO SUBSYSTEM
71437143
M: Linus Walleij <[email protected]>
71447144
M: Bartosz Golaszewski <[email protected]>
71457145
7146-
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git
71477146
S: Maintained
7147+
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git
7148+
F: Documentation/ABI/obsolete/sysfs-gpio
7149+
F: Documentation/ABI/testing/gpio-cdev
7150+
F: Documentation/admin-guide/gpio/
71487151
F: Documentation/devicetree/bindings/gpio/
71497152
F: Documentation/driver-api/gpio/
7150-
F: Documentation/admin-guide/gpio/
7151-
F: Documentation/ABI/testing/gpio-cdev
7152-
F: Documentation/ABI/obsolete/sysfs-gpio
71537153
F: drivers/gpio/
7154+
F: include/asm-generic/gpio.h
71547155
F: include/linux/gpio/
71557156
F: include/linux/gpio.h
71567157
F: include/linux/of_gpio.h
7157-
F: include/asm-generic/gpio.h
71587158
F: include/uapi/linux/gpio.h
71597159
F: tools/gpio/
71607160

@@ -8055,8 +8055,8 @@ F: drivers/scsi/ips.*
80558055
ICH LPC AND GPIO DRIVER
80568056
M: Peter Tyser <[email protected]>
80578057
S: Maintained
8058-
F: drivers/mfd/lpc_ich.c
80598058
F: drivers/gpio/gpio-ich.c
8059+
F: drivers/mfd/lpc_ich.c
80608060

80618061
ICY I2C DRIVER
80628062
M: Max Staudt <[email protected]>
@@ -16075,8 +16075,8 @@ F: Documentation/devicetree/bindings/reset/snps,axs10x-reset.txt
1607516075
SYNOPSYS CREG GPIO DRIVER
1607616076
M: Eugeniy Paltsev <[email protected]>
1607716077
S: Maintained
16078-
F: drivers/gpio/gpio-creg-snps.c
1607916078
F: Documentation/devicetree/bindings/gpio/snps,creg-gpio.txt
16079+
F: drivers/gpio/gpio-creg-snps.c
1608016080

1608116081
SYNOPSYS DESIGNWARE 8250 UART DRIVER
1608216082
R: Andy Shevchenko <[email protected]>
@@ -16087,8 +16087,8 @@ SYNOPSYS DESIGNWARE APB GPIO DRIVER
1608716087
M: Hoan Tran <[email protected]>
1608816088
1608916089
S: Maintained
16090-
F: drivers/gpio/gpio-dwapb.c
1609116090
F: Documentation/devicetree/bindings/gpio/snps-dwapb-gpio.txt
16091+
F: drivers/gpio/gpio-dwapb.c
1609216092

1609316093
SYNOPSYS DESIGNWARE AXI DMAC DRIVER
1609416094
M: Eugeniy Paltsev <[email protected]>
@@ -18414,8 +18414,8 @@ M: Nandor Han <[email protected]>
1841418414
M: Semi Malinen <[email protected]>
1841518415
1841618416
S: Maintained
18417-
F: drivers/gpio/gpio-xra1403.c
1841818417
F: Documentation/devicetree/bindings/gpio/gpio-xra1403.txt
18418+
F: drivers/gpio/gpio-xra1403.c
1841918419

1842018420
XTENSA XTFPGA PLATFORM SUPPORT
1842118421
M: Max Filippov <[email protected]>

drivers/gpio/gpio-bd71828.c

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,6 @@
1010
#define GPIO_OUT_REG(off) (BD71828_REG_GPIO_CTRL1 + (off))
1111
#define HALL_GPIO_OFFSET 3
1212

13-
/*
14-
* These defines can be removed when
15-
* "gpio: Add definition for GPIO direction"
16-
* (9208b1e77d6e8e9776f34f46ef4079ecac9c3c25 in GPIO tree) gets merged,
17-
*/
18-
#ifndef GPIO_LINE_DIRECTION_IN
19-
#define GPIO_LINE_DIRECTION_IN 1
20-
#define GPIO_LINE_DIRECTION_OUT 0
21-
#endif
22-
2313
struct bd71828_gpio {
2414
struct rohm_regmap_dev chip;
2515
struct gpio_chip gpio;

drivers/gpio/gpio-sifive.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ struct sifive_gpio {
3535
void __iomem *base;
3636
struct gpio_chip gc;
3737
struct regmap *regs;
38-
u32 irq_state;
38+
unsigned long irq_state;
3939
unsigned int trigger[SIFIVE_GPIO_MAX];
4040
unsigned int irq_parent[SIFIVE_GPIO_MAX];
4141
};
@@ -94,7 +94,7 @@ static void sifive_gpio_irq_enable(struct irq_data *d)
9494
spin_unlock_irqrestore(&gc->bgpio_lock, flags);
9595

9696
/* Enable interrupts */
97-
assign_bit(offset, (unsigned long *)&chip->irq_state, 1);
97+
assign_bit(offset, &chip->irq_state, 1);
9898
sifive_gpio_set_ie(chip, offset);
9999
}
100100

@@ -104,7 +104,7 @@ static void sifive_gpio_irq_disable(struct irq_data *d)
104104
struct sifive_gpio *chip = gpiochip_get_data(gc);
105105
int offset = irqd_to_hwirq(d) % SIFIVE_GPIO_MAX;
106106

107-
assign_bit(offset, (unsigned long *)&chip->irq_state, 0);
107+
assign_bit(offset, &chip->irq_state, 0);
108108
sifive_gpio_set_ie(chip, offset);
109109
irq_chip_disable_parent(d);
110110
}

drivers/gpio/gpio-xilinx.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,10 @@ static void xgpio_set_multiple(struct gpio_chip *gc, unsigned long *mask,
147147
for (i = 0; i < gc->ngpio; i++) {
148148
if (*mask == 0)
149149
break;
150+
/* Once finished with an index write it out to the register */
150151
if (index != xgpio_index(chip, i)) {
151152
xgpio_writereg(chip->regs + XGPIO_DATA_OFFSET +
152-
xgpio_regoffset(chip, i),
153+
index * XGPIO_CHANNEL_OFFSET,
153154
chip->gpio_state[index]);
154155
spin_unlock_irqrestore(&chip->gpio_lock[index], flags);
155156
index = xgpio_index(chip, i);
@@ -165,7 +166,7 @@ static void xgpio_set_multiple(struct gpio_chip *gc, unsigned long *mask,
165166
}
166167

167168
xgpio_writereg(chip->regs + XGPIO_DATA_OFFSET +
168-
xgpio_regoffset(chip, i), chip->gpio_state[index]);
169+
index * XGPIO_CHANNEL_OFFSET, chip->gpio_state[index]);
169170

170171
spin_unlock_irqrestore(&chip->gpio_lock[index], flags);
171172
}

drivers/gpio/gpiolib.c

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3035,13 +3035,33 @@ EXPORT_SYMBOL_GPL(gpiochip_free_own_desc);
30353035
* rely on gpio_request() having been called beforehand.
30363036
*/
30373037

3038-
static int gpio_set_config(struct gpio_chip *gc, unsigned int offset,
3039-
enum pin_config_param mode)
3038+
static int gpio_do_set_config(struct gpio_chip *gc, unsigned int offset,
3039+
unsigned long config)
30403040
{
30413041
if (!gc->set_config)
30423042
return -ENOTSUPP;
30433043

3044-
return gc->set_config(gc, offset, mode);
3044+
return gc->set_config(gc, offset, config);
3045+
}
3046+
3047+
static int gpio_set_config(struct gpio_chip *gc, unsigned int offset,
3048+
enum pin_config_param mode)
3049+
{
3050+
unsigned long config;
3051+
unsigned arg;
3052+
3053+
switch (mode) {
3054+
case PIN_CONFIG_BIAS_PULL_DOWN:
3055+
case PIN_CONFIG_BIAS_PULL_UP:
3056+
arg = 1;
3057+
break;
3058+
3059+
default:
3060+
arg = 0;
3061+
}
3062+
3063+
config = PIN_CONF_PACKED(mode, arg);
3064+
return gpio_do_set_config(gc, offset, config);
30453065
}
30463066

30473067
static int gpio_set_bias(struct gpio_chip *chip, struct gpio_desc *desc)
@@ -3277,7 +3297,7 @@ int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
32773297
chip = desc->gdev->chip;
32783298

32793299
config = pinconf_to_config_packed(PIN_CONFIG_INPUT_DEBOUNCE, debounce);
3280-
return gpio_set_config(chip, gpio_chip_hwgpio(desc), config);
3300+
return gpio_do_set_config(chip, gpio_chip_hwgpio(desc), config);
32813301
}
32823302
EXPORT_SYMBOL_GPL(gpiod_set_debounce);
32833303

@@ -3311,7 +3331,7 @@ int gpiod_set_transitory(struct gpio_desc *desc, bool transitory)
33113331
packed = pinconf_to_config_packed(PIN_CONFIG_PERSIST_STATE,
33123332
!transitory);
33133333
gpio = gpio_chip_hwgpio(desc);
3314-
rc = gpio_set_config(chip, gpio, packed);
3334+
rc = gpio_do_set_config(chip, gpio, packed);
33153335
if (rc == -ENOTSUPP) {
33163336
dev_dbg(&desc->gdev->dev, "Persistence not supported for GPIO %d\n",
33173337
gpio);

drivers/spmi/spmi-pmic-arb.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -731,6 +731,7 @@ static int qpnpint_irq_domain_translate(struct irq_domain *d,
731731
return 0;
732732
}
733733

734+
static struct lock_class_key qpnpint_irq_lock_class, qpnpint_irq_request_class;
734735

735736
static void qpnpint_irq_domain_map(struct spmi_pmic_arb *pmic_arb,
736737
struct irq_domain *domain, unsigned int virq,
@@ -746,6 +747,9 @@ static void qpnpint_irq_domain_map(struct spmi_pmic_arb *pmic_arb,
746747
else
747748
handler = handle_level_irq;
748749

750+
751+
irq_set_lockdep_class(virq, &qpnpint_irq_lock_class,
752+
&qpnpint_irq_request_class);
749753
irq_domain_set_info(domain, virq, hwirq, &pmic_arb_irqchip, pmic_arb,
750754
handler, NULL, NULL);
751755
}

0 commit comments

Comments
 (0)