pinctrl: pinctrl-adi2: disable IRQ when setting value
GPIO output value should be set after the GPIO interrupt is disabled. Use BIT macro as well. Signed-off-by: Sonic Zhang <sonic.zhang@analog.com> [Edited commit message] Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
Родитель
010c51e189
Коммит
d3224ed140
|
@ -766,9 +766,9 @@ static void adi_gpio_set_value(struct gpio_chip *chip, unsigned offset,
|
|||
spin_lock_irqsave(&port->lock, flags);
|
||||
|
||||
if (value)
|
||||
writew(1 << offset, ®s->data_set);
|
||||
writew(BIT(offset), ®s->data_set);
|
||||
else
|
||||
writew(1 << offset, ®s->data_clear);
|
||||
writew(BIT(offset), ®s->data_clear);
|
||||
|
||||
spin_unlock_irqrestore(&port->lock, flags);
|
||||
}
|
||||
|
@ -780,12 +780,14 @@ static int adi_gpio_direction_output(struct gpio_chip *chip, unsigned offset,
|
|||
struct gpio_port_t *regs = port->regs;
|
||||
unsigned long flags;
|
||||
|
||||
adi_gpio_set_value(chip, offset, value);
|
||||
|
||||
spin_lock_irqsave(&port->lock, flags);
|
||||
|
||||
writew(readw(®s->inen) & ~(1 << offset), ®s->inen);
|
||||
writew(1 << offset, ®s->dir_set);
|
||||
writew(readw(®s->inen) & ~BIT(offset), ®s->inen);
|
||||
if (value)
|
||||
writew(BIT(offset), ®s->data_set);
|
||||
else
|
||||
writew(BIT(offset), ®s->data_clear);
|
||||
writew(BIT(offset), ®s->dir_set);
|
||||
|
||||
spin_unlock_irqrestore(&port->lock, flags);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче