Cc: Alessandro Rubini <rub...@unipv.it> Acked-by: Michael Brandt <michael.bra...@stericsson.com> Signed-off-by: Rabin Vincent <rabin.vinc...@stericsson.com> --- drivers/gpio/nomadik_gpio.c | 17 +++++++++++++++++ 1 files changed, 17 insertions(+), 0 deletions(-)
diff --git a/drivers/gpio/nomadik_gpio.c b/drivers/gpio/nomadik_gpio.c index 670b684..d084235 100644 --- a/drivers/gpio/nomadik_gpio.c +++ b/drivers/gpio/nomadik_gpio.c @@ -45,6 +45,11 @@ enum gpio_registers { static inline unsigned long gpio_to_base(int gpio) { + if ((gpio / 32) >= ARRAY_SIZE(gpio_base)) { + printf("nomadik-gpio: invalid gpio %d\n", gpio); + return 0; + } + return gpio_base[gpio / 32]; } @@ -59,6 +64,9 @@ void nmk_gpio_af(int gpio, int alternate_function) u32 bit = gpio_to_bit(gpio); u32 afunc, bfunc; + if (!base) + return; + /* alternate function is 0..3, with one bit per register */ afunc = readl(base + GPIO_AFSLA) & ~bit; bfunc = readl(base + GPIO_AFSLB) & ~bit; @@ -73,6 +81,9 @@ void nmk_gpio_dir(int gpio, int dir) unsigned long base = gpio_to_base(gpio); u32 bit = gpio_to_bit(gpio); + if (!base) + return; + if (dir) writel(bit, base + GPIO_DIRS); else @@ -84,6 +95,9 @@ void nmk_gpio_set(int gpio, int val) unsigned long base = gpio_to_base(gpio); u32 bit = gpio_to_bit(gpio); + if (!base) + return; + if (val) writel(bit, base + GPIO_DATS); else @@ -95,5 +109,8 @@ int nmk_gpio_get(int gpio) unsigned long base = gpio_to_base(gpio); u32 bit = gpio_to_bit(gpio); + if (!base) + return -1; + return readl(base + GPIO_DAT) & bit; } -- 1.7.0 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot