From abf794eced56b12f72c4039a0350aae570bc8064 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Lothar=20Wa=C3=9Fmann?= Date: Mon, 25 Aug 2014 14:25:18 +0200 Subject: [PATCH] gpio: am33xx: add missing gpio_get_value() function --- drivers/gpio/am33xx_gpio.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/gpio/am33xx_gpio.c b/drivers/gpio/am33xx_gpio.c index f34fdc6bd8..de0bc475ca 100644 --- a/drivers/gpio/am33xx_gpio.c +++ b/drivers/gpio/am33xx_gpio.c @@ -87,7 +87,7 @@ int gpio_set_value(unsigned gpio, int val) return 0; } -int gpio_direction_input(unsigned gpio) +int gpio_get_value(unsigned gpio) { int bank = gpio / 32; int mask = 1 << (gpio % 32); @@ -97,7 +97,19 @@ int gpio_direction_input(unsigned gpio) gpio / 32, gpio % 32); return -EINVAL; } + return (readl(&gpio_base[bank]->datain) & mask) != 0; +} + +int gpio_direction_input(unsigned gpio) +{ + int bank = gpio / 32; + int mask = 1 << (gpio % 32); + if (bank >= ARRAY_SIZE(gpio_base)) { + printf("ERROR: Invalid GPIO: %u (GPIO%u_%u)\n", gpio, + gpio / 32, gpio % 32); + return -EINVAL; + } writel(readl(&gpio_base[bank]->oe) | mask, &gpio_base[bank]->oe); return 0; } -- 2.39.2