Current amd_fch_gpio_direction_output implementation ignores the value
argument, fix it so direction_output will set proper output level.
Signed-off-by: Axel Lin <axel.lin@ingics.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: Enrico Weigelt <info@metux.net>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
        unsigned long flags;
        struct amd_fch_gpio_priv *priv = gpiochip_get_data(gc);
        void __iomem *ptr = amd_fch_gpio_addr(priv, gpio);
+       u32 val;
 
        spin_lock_irqsave(&priv->lock, flags);
-       writel_relaxed(readl_relaxed(ptr) | AMD_FCH_GPIO_FLAG_DIRECTION, ptr);
+
+       val = readl_relaxed(ptr);
+       if (value)
+               val |= AMD_FCH_GPIO_FLAG_WRITE;
+       else
+               val &= ~AMD_FCH_GPIO_FLAG_WRITE;
+
+       writel_relaxed(val | AMD_FCH_GPIO_FLAG_DIRECTION, ptr);
+
        spin_unlock_irqrestore(&priv->lock, flags);
 
        return 0;