Commit 9370084e authored by Yegor Yefremov's avatar Yegor Yefremov Committed by Linus Walleij

gpio: omap: implement get_direction

This patch implements gpio_chip's get_direction() routine, that
lets other drivers get particular GPIOs direction using
struct gpio_desc.
Signed-off-by: default avatarYegor Yefremov <yegorslists@googlemail.com>
Acked-by: default avatarJavier Martinez Canillas <javier@dowhile0.org>
Acked-by: default avatarSantosh Shilimkar <santosh.shilimkar@ti.com>
Tested-by: default avatarTony Lindgren <tony@atomide.com>
Reviewed-by: default avatarKevin Hilman <khilman@linaro.org>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 47a95fe7
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <linux/of_device.h> #include <linux/of_device.h>
#include <linux/irqchip/chained_irq.h> #include <linux/irqchip/chained_irq.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/bitops.h>
#include <linux/platform_data/gpio-omap.h> #include <linux/platform_data/gpio-omap.h>
#define OFF_MODE 1 #define OFF_MODE 1
...@@ -927,6 +928,21 @@ static inline void mpuio_init(struct gpio_bank *bank) ...@@ -927,6 +928,21 @@ static inline void mpuio_init(struct gpio_bank *bank)
/*---------------------------------------------------------------------*/ /*---------------------------------------------------------------------*/
static int gpio_get_direction(struct gpio_chip *chip, unsigned offset)
{
struct gpio_bank *bank;
unsigned long flags;
void __iomem *reg;
int dir;
bank = container_of(chip, struct gpio_bank, chip);
reg = bank->base + bank->regs->direction;
spin_lock_irqsave(&bank->lock, flags);
dir = !!(readl_relaxed(reg) & BIT(offset));
spin_unlock_irqrestore(&bank->lock, flags);
return dir;
}
static int gpio_input(struct gpio_chip *chip, unsigned offset) static int gpio_input(struct gpio_chip *chip, unsigned offset)
{ {
struct gpio_bank *bank; struct gpio_bank *bank;
...@@ -1085,6 +1101,7 @@ static int omap_gpio_chip_init(struct gpio_bank *bank) ...@@ -1085,6 +1101,7 @@ static int omap_gpio_chip_init(struct gpio_bank *bank)
*/ */
bank->chip.request = omap_gpio_request; bank->chip.request = omap_gpio_request;
bank->chip.free = omap_gpio_free; bank->chip.free = omap_gpio_free;
bank->chip.get_direction = gpio_get_direction;
bank->chip.direction_input = gpio_input; bank->chip.direction_input = gpio_input;
bank->chip.get = gpio_get; bank->chip.get = gpio_get;
bank->chip.direction_output = gpio_output; bank->chip.direction_output = gpio_output;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment