[PATCH 05/20] pinctrl: at91: Implement .get_direction hook
Andrey Smirnov
andrew.smirnov at gmail.com
Wed Mar 8 14:08:54 PST 2017
Signed-off-by: Andrey Smirnov <andrew.smirnov at gmail.com>
---
drivers/pinctrl/pinctrl-at91.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c
index 34fb0ae..021c1e5 100644
--- a/drivers/pinctrl/pinctrl-at91.c
+++ b/drivers/pinctrl/pinctrl-at91.c
@@ -568,6 +568,21 @@ static int at91_gpio_direction_output(struct gpio_chip *chip, unsigned offset,
return 0;
}
+static int at91_gpio_get_direction(struct gpio_chip *chip, unsigned offset)
+{
+ struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip);
+ void __iomem *pio = at91_gpio->regbase;
+ unsigned mask = 1 << offset;
+ u32 osr;
+
+ if (mask & __raw_readl(pio + PIO_PSR)) {
+ osr = __raw_readl(pio + PIO_OSR);
+ return !(osr & mask);
+ } else {
+ return -EBUSY;
+ }
+}
+
static int at91_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
{
struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip);
@@ -603,6 +618,7 @@ static struct gpio_ops at91_gpio_ops = {
.free = at91_gpio_free,
.direction_input = at91_gpio_direction_input,
.direction_output = at91_gpio_direction_output,
+ .get_direction = at91_gpio_get_direction,
.get = at91_gpio_get,
.set = at91_gpio_set,
};
--
2.9.3
More information about the barebox
mailing list