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:
parent
010c51e189
commit
d3224ed140
1 changed files with 8 additions and 6 deletions
|
@ -766,9 +766,9 @@ static void adi_gpio_set_value(struct gpio_chip *chip, unsigned offset,
|
||||||
spin_lock_irqsave(&port->lock, flags);
|
spin_lock_irqsave(&port->lock, flags);
|
||||||
|
|
||||||
if (value)
|
if (value)
|
||||||
writew(1 << offset, ®s->data_set);
|
writew(BIT(offset), ®s->data_set);
|
||||||
else
|
else
|
||||||
writew(1 << offset, ®s->data_clear);
|
writew(BIT(offset), ®s->data_clear);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&port->lock, flags);
|
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;
|
struct gpio_port_t *regs = port->regs;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
adi_gpio_set_value(chip, offset, value);
|
|
||||||
|
|
||||||
spin_lock_irqsave(&port->lock, flags);
|
spin_lock_irqsave(&port->lock, flags);
|
||||||
|
|
||||||
writew(readw(®s->inen) & ~(1 << offset), ®s->inen);
|
writew(readw(®s->inen) & ~BIT(offset), ®s->inen);
|
||||||
writew(1 << offset, ®s->dir_set);
|
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);
|
spin_unlock_irqrestore(&port->lock, flags);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue