]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
pinctrl: oxnas: Add GPIO get_direction
authorNeil Armstrong <narmstrong@baylibre.com>
Tue, 24 May 2016 10:03:24 +0000 (12:03 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Mon, 30 May 2016 07:41:48 +0000 (09:41 +0200)
Implement a get_direction callback for the OXNAS GPIO driver in order
to have pin output polarity in debugfs and new userspace ABI.

Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/pinctrl-oxnas.c

index 5fd113c06864295c081223db230012112d02776e..2c6abef91d20705f5c7641724bfaceb91f54d950 100644 (file)
@@ -49,6 +49,7 @@
 
 /* GPIO Registers */
 #define INPUT_VALUE    0x00
+#define OUTPUT_EN      0x04
 #define IRQ_PENDING    0x0c
 #define OUTPUT_SET     0x14
 #define OUTPUT_CLEAR   0x18
@@ -431,6 +432,15 @@ static int oxnas_gpio_request_enable(struct pinctrl_dev *pctldev,
        return 0;
 }
 
+static int oxnas_gpio_get_direction(struct gpio_chip *chip,
+                                     unsigned int offset)
+{
+       struct oxnas_gpio_bank *bank = gpiochip_get_data(chip);
+       u32 mask = BIT(offset);
+
+       return !(readl_relaxed(bank->reg_base + OUTPUT_EN) & mask);
+}
+
 static int oxnas_gpio_direction_input(struct gpio_chip *chip,
                                      unsigned int offset)
 {
@@ -664,6 +674,7 @@ static void oxnas_gpio_irq_handler(struct irq_desc *desc)
                        .label = "GPIO" #_bank,                         \
                        .request = gpiochip_generic_request,            \
                        .free = gpiochip_generic_free,                  \
+                       .get_direction = oxnas_gpio_get_direction,      \
                        .direction_input = oxnas_gpio_direction_input,  \
                        .direction_output = oxnas_gpio_direction_output, \
                        .get = oxnas_gpio_get,                          \