diff options
author | Linus Walleij <linus.walleij@linaro.org> | 2016-04-28 14:33:17 +0200 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2016-04-28 14:34:51 +0200 |
commit | 67668a57b351df66cd8c94cd84f2a382e440e8ed (patch) | |
tree | b756d4fc0e102e4f5ffbd7f8baa869a7115874ba /drivers/pinctrl | |
parent | 5e81e0a0913c609ce18709a0a4c8fb54344aaca1 (diff) |
pinctrl: nomadik: implement .get_direction()
This makes the Nomadik gpiochip support the .get_direction()
callback.
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/pinctrl')
-rw-r--r-- | drivers/pinctrl/nomadik/pinctrl-nomadik.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/pinctrl/nomadik/pinctrl-nomadik.c b/drivers/pinctrl/nomadik/pinctrl-nomadik.c index 9893013f3cdd..f85ae2efbb28 100644 --- a/drivers/pinctrl/nomadik/pinctrl-nomadik.c +++ b/drivers/pinctrl/nomadik/pinctrl-nomadik.c @@ -861,6 +861,20 @@ static void nmk_gpio_latent_irq_handler(struct irq_desc *desc) /* I/O Functions */ +static int nmk_gpio_get_dir(struct gpio_chip *chip, unsigned offset) +{ + struct nmk_gpio_chip *nmk_chip = gpiochip_get_data(chip); + int dir; + + clk_enable(nmk_chip->clk); + + dir = !!(readl(nmk_chip->addr + NMK_GPIO_DIR) & BIT(offset)); + + clk_disable(nmk_chip->clk); + + return dir; +} + static int nmk_gpio_make_input(struct gpio_chip *chip, unsigned offset) { struct nmk_gpio_chip *nmk_chip = gpiochip_get_data(chip); @@ -1220,6 +1234,7 @@ static int nmk_gpio_probe(struct platform_device *dev) chip = &nmk_chip->chip; chip->request = gpiochip_generic_request; chip->free = gpiochip_generic_free; + chip->get_direction = nmk_gpio_get_dir; chip->direction_input = nmk_gpio_make_input; chip->get = nmk_gpio_get_input; chip->direction_output = nmk_gpio_make_output; |