Skip to content

Commit 71e5865

Browse files
committed
Merge tag 'gpio-fixes-for-v6.6-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux
Pull gpio fixes from Bartosz Golaszewski: - fix a potential spinlock deadlock in gpio-timberdale - mark the gpio-pmic-eic-sprd driver as one that can sleep * tag 'gpio-fixes-for-v6.6-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux: gpio: pmic-eic-sprd: Add can_sleep flag for PMIC EIC chip gpio: timberdale: Fix potential deadlock on &tgpio->lock
2 parents acfdcae + 26d9e56 commit 71e5865

File tree

2 files changed

+4
-2
lines changed

2 files changed

+4
-2
lines changed

drivers/gpio/gpio-pmic-eic-sprd.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,7 @@ static int sprd_pmic_eic_probe(struct platform_device *pdev)
352352
pmic_eic->chip.set_config = sprd_pmic_eic_set_config;
353353
pmic_eic->chip.set = sprd_pmic_eic_set;
354354
pmic_eic->chip.get = sprd_pmic_eic_get;
355+
pmic_eic->chip.can_sleep = true;
355356

356357
irq = &pmic_eic->chip.irq;
357358
gpio_irq_chip_set_chip(irq, &pmic_eic_irq_chip);

drivers/gpio/gpio-timberdale.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,10 @@ static int timbgpio_update_bit(struct gpio_chip *gpio, unsigned index,
4343
unsigned offset, bool enabled)
4444
{
4545
struct timbgpio *tgpio = gpiochip_get_data(gpio);
46+
unsigned long flags;
4647
u32 reg;
4748

48-
spin_lock(&tgpio->lock);
49+
spin_lock_irqsave(&tgpio->lock, flags);
4950
reg = ioread32(tgpio->membase + offset);
5051

5152
if (enabled)
@@ -54,7 +55,7 @@ static int timbgpio_update_bit(struct gpio_chip *gpio, unsigned index,
5455
reg &= ~(1 << index);
5556

5657
iowrite32(reg, tgpio->membase + offset);
57-
spin_unlock(&tgpio->lock);
58+
spin_unlock_irqrestore(&tgpio->lock, flags);
5859

5960
return 0;
6061
}

0 commit comments

Comments
 (0)