[PATCH] gpio: omap: implement get_direction
From: Yegor Yefremov <hidden>
Date: 2014-04-22 13:34:03
Also in:
linux-gpio, linux-omap
On Tue, Apr 22, 2014 at 12:24 PM, Javier Martinez Canillas [off-list ref] wrote:
Hello Yegor, On Tue, Apr 22, 2014 at 11:23 AM, [off-list ref] wrote:quoted
From: Yegor Yefremov <redacted> This patch implements gpio_chip's get_direction() routine, that lets other drivers get particular GPIOs direction using struct gpio_desc. Signed-off-by: Yegor Yefremov <redacted> --- drivers/gpio/gpio-omap.c | 28 ++++++++++++++++++++++++++++ 1 files changed, 28 insertions(+), 0 deletions(-)diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c index 19b886c..b55bf7b 100644 --- a/drivers/gpio/gpio-omap.c +++ b/drivers/gpio/gpio-omap.c@@ -102,6 +102,20 @@ static int omap_gpio_to_irq(struct gpio_chip *chip, unsigned offset) return irq_find_mapping(bank->domain, offset); } +static int _get_gpio_direction(struct gpio_bank *bank, int gpio) +{ + void __iomem *reg = bank->base; + u32 l; + u32 mask = 1 << gpio; + + reg += bank->regs->direction; + l = readl_relaxed(reg); + if (l & mask) + return 1; + + return 0; +} +You can avoid the if condition here by using return !!(l & mask) but the above code is more clear indeed so is up to you.
Hm, nice trick. I've reworked the calculation in v2. Yegor