summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAxel Lin <axel.lin@ingics.com>2015-01-30 11:26:25 +0100
committerLinus Walleij <linus.walleij@linaro.org>2015-03-02 15:35:41 +0100
commitfd9c963c5661af3403e77e312c0d9941773b6c1b (patch)
treef13369d51a26c11dcbefd074512564841bc9c6bf
parentLinux 4.0-rc1 (diff)
downloadlinux-fd9c963c5661af3403e77e312c0d9941773b6c1b.tar.xz
linux-fd9c963c5661af3403e77e312c0d9941773b6c1b.zip
gpio: mb86s70: Return error if requesting an already assigned gpio
Signed-off-by: Axel Lin <axel.lin@ingics.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
-rw-r--r--drivers/gpio/gpio-mb86s7x.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/gpio/gpio-mb86s7x.c b/drivers/gpio/gpio-mb86s7x.c
index 21b1ce5abdfe..ee93c0ab0a59 100644
--- a/drivers/gpio/gpio-mb86s7x.c
+++ b/drivers/gpio/gpio-mb86s7x.c
@@ -58,6 +58,11 @@ static int mb86s70_gpio_request(struct gpio_chip *gc, unsigned gpio)
spin_lock_irqsave(&gchip->lock, flags);
val = readl(gchip->base + PFR(gpio));
+ if (!(val & OFFSET(gpio))) {
+ spin_unlock_irqrestore(&gchip->lock, flags);
+ return -EINVAL;
+ }
+
val &= ~OFFSET(gpio);
writel(val, gchip->base + PFR(gpio));