gpio: aspeed: Set output latch before changing direction
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 17 May 2018 08:11:56 +0000 (18:11 +1000)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 23 May 2018 11:57:44 +0000 (13:57 +0200)
In aspeed_gpio_dir_out(), we need to establish the new output
value in the output latch *before* we change the direction
to output in order to avoid a glitch on the output line if
the previous value of the latch was different.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Reviewed-by: Christopher Bostic <cbostic@linux.vnet.ibm.com>
Reviewed-by: Andrew Jeffery <andrew@aj.id.au>
Tested-by: Joel Stanley <joel@jms.id.au>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpio-aspeed.c

index 77e485557498329193fd291194cc037de55c8160..f210bed83dd6f0ef9355c2a710ea9f7fa10712d5 100644 (file)
@@ -287,11 +287,10 @@ static int aspeed_gpio_dir_out(struct gpio_chip *gc,
 
        spin_lock_irqsave(&gpio->lock, flags);
 
 
        spin_lock_irqsave(&gpio->lock, flags);
 
+       __aspeed_gpio_set(gc, offset, val);
        reg = ioread32(bank_val_reg(gpio, bank, GPIO_DIR));
        iowrite32(reg | GPIO_BIT(offset), bank_val_reg(gpio, bank, GPIO_DIR));
 
        reg = ioread32(bank_val_reg(gpio, bank, GPIO_DIR));
        iowrite32(reg | GPIO_BIT(offset), bank_val_reg(gpio, bank, GPIO_DIR));
 
-       __aspeed_gpio_set(gc, offset, val);
-
        spin_unlock_irqrestore(&gpio->lock, flags);
 
        return 0;
        spin_unlock_irqrestore(&gpio->lock, flags);
 
        return 0;