aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-at91/gpio.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-at91/gpio.c')
-rw-r--r--arch/arm/mach-at91/gpio.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/arm/mach-at91/gpio.c b/arch/arm/mach-at91/gpio.c
index 12ed05bbdc5c..d3f05aaad8ba 100644
--- a/arch/arm/mach-at91/gpio.c
+++ b/arch/arm/mach-at91/gpio.c
@@ -50,6 +50,7 @@ static int at91_gpiolib_request(struct gpio_chip *chip, unsigned offset);
50static void at91_gpiolib_dbg_show(struct seq_file *s, struct gpio_chip *chip); 50static void at91_gpiolib_dbg_show(struct seq_file *s, struct gpio_chip *chip);
51static void at91_gpiolib_set(struct gpio_chip *chip, unsigned offset, int val); 51static void at91_gpiolib_set(struct gpio_chip *chip, unsigned offset, int val);
52static int at91_gpiolib_get(struct gpio_chip *chip, unsigned offset); 52static int at91_gpiolib_get(struct gpio_chip *chip, unsigned offset);
53static int at91_gpiolib_get_direction(struct gpio_chip *chip, unsigned offset);
53static int at91_gpiolib_direction_output(struct gpio_chip *chip, 54static int at91_gpiolib_direction_output(struct gpio_chip *chip,
54 unsigned offset, int val); 55 unsigned offset, int val);
55static int at91_gpiolib_direction_input(struct gpio_chip *chip, 56static int at91_gpiolib_direction_input(struct gpio_chip *chip,
@@ -61,6 +62,7 @@ static int at91_gpiolib_to_irq(struct gpio_chip *chip, unsigned offset);
61 .chip = { \ 62 .chip = { \
62 .label = name, \ 63 .label = name, \
63 .request = at91_gpiolib_request, \ 64 .request = at91_gpiolib_request, \
65 .get_direction = at91_gpiolib_get_direction, \
64 .direction_input = at91_gpiolib_direction_input, \ 66 .direction_input = at91_gpiolib_direction_input, \
65 .direction_output = at91_gpiolib_direction_output, \ 67 .direction_output = at91_gpiolib_direction_output, \
66 .get = at91_gpiolib_get, \ 68 .get = at91_gpiolib_get, \
@@ -800,6 +802,17 @@ static int at91_gpiolib_request(struct gpio_chip *chip, unsigned offset)
800 return 0; 802 return 0;
801} 803}
802 804
805static int at91_gpiolib_get_direction(struct gpio_chip *chip, unsigned offset)
806{
807 struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip);
808 void __iomem *pio = at91_gpio->regbase;
809 unsigned mask = 1 << offset;
810 u32 osr;
811
812 osr = __raw_readl(pio + PIO_OSR);
813 return !(osr & mask);
814}
815
803static int at91_gpiolib_direction_input(struct gpio_chip *chip, 816static int at91_gpiolib_direction_input(struct gpio_chip *chip,
804 unsigned offset) 817 unsigned offset)
805{ 818{