Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Sonic Zhang and committed by
Linus Walleij
d3224ed1 010c51e1

+8 -6
+8 -6
drivers/pinctrl/pinctrl-adi2.c
··· 766 766 spin_lock_irqsave(&port->lock, flags); 767 767 768 768 if (value) 769 - writew(1 << offset, &regs->data_set); 769 + writew(BIT(offset), &regs->data_set); 770 770 else 771 - writew(1 << offset, &regs->data_clear); 771 + writew(BIT(offset), &regs->data_clear); 772 772 773 773 spin_unlock_irqrestore(&port->lock, flags); 774 774 } ··· 780 780 struct gpio_port_t *regs = port->regs; 781 781 unsigned long flags; 782 782 783 - adi_gpio_set_value(chip, offset, value); 784 - 785 783 spin_lock_irqsave(&port->lock, flags); 786 784 787 - writew(readw(&regs->inen) & ~(1 << offset), &regs->inen); 788 - writew(1 << offset, &regs->dir_set); 785 + writew(readw(&regs->inen) & ~BIT(offset), &regs->inen); 786 + if (value) 787 + writew(BIT(offset), &regs->data_set); 788 + else 789 + writew(BIT(offset), &regs->data_clear); 790 + writew(BIT(offset), &regs->dir_set); 789 791 790 792 spin_unlock_irqrestore(&port->lock, flags); 791 793