Thread (3 messages) 3 messages, 2 authors, 2014-04-22

[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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help