gpio: sa1100: implement get_direction method
authorRussell King <rmk+kernel@armlinux.org.uk>
Wed, 31 Aug 2016 07:49:44 +0000 (08:49 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Fri, 24 Mar 2017 13:04:37 +0000 (14:04 +0100)
Allow gpiolib to read back the current IO direction configuration by
implementing the .get_direction callback.  This, in part, allows
debugfs to report the complete true hardware state rather than the
software state.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpio-sa1100.c

index bad0169524c962eb9e9c8199e410be6551519eef..249f433aa62df60de4c60a051fc205ec583875a4 100644 (file)
@@ -52,6 +52,13 @@ static void sa1100_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
        writel_relaxed(BIT(offset), sa1100_gpio_chip(chip)->membase + reg);
 }
 
+static int sa1100_get_direction(struct gpio_chip *chip, unsigned offset)
+{
+       void __iomem *gpdr = sa1100_gpio_chip(chip)->membase + R_GPDR;
+
+       return !(readl_relaxed(gpdr) & BIT(offset));
+}
+
 static int sa1100_direction_input(struct gpio_chip *chip, unsigned offset)
 {
        void __iomem *gpdr = sa1100_gpio_chip(chip)->membase + R_GPDR;
@@ -85,6 +92,7 @@ static int sa1100_to_irq(struct gpio_chip *chip, unsigned offset)
 static struct sa1100_gpio_chip sa1100_gpio_chip = {
        .chip = {
                .label                  = "gpio",
+               .get_direction          = sa1100_get_direction,
                .direction_input        = sa1100_direction_input,
                .direction_output       = sa1100_direction_output,
                .set                    = sa1100_gpio_set,