diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-12-19 13:05:00 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-12-19 13:05:00 -0500 |
commit | d525c13e9efb92c9868b90bfc637d186d0aaaccb (patch) | |
tree | 13e14d56c5c80ad4ca8345e281c19660474bf17d /drivers | |
parent | 38beb96e7e1ffef6ca26ae3d58a338753fc20080 (diff) | |
parent | 45ad7db90b42555c8107f18ec6d6a1e9bce34860 (diff) |
Merge tag 'gpio-v4.4-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio
Pull GPIO fixes from Linus Walleij:
"Some GPIO fixes for the v4.4 series. Most prominent: I revert the
error propagation from the .get() function until we can fix up all the
drivers properly for v4.5.
- Revert the error number propagation from the .get() vtable entry
temporarily, until we make the proper fixes to all drivers.
- Fix the clamping behaviour in the generic GPIO driver.
- Driver fix for the ath79 driver"
* tag 'gpio-v4.4-3' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio:
gpio: revert get() to non-errorprogating behaviour
gpio: generic: clamp values from bgpio_get_set()
gpio: ath79: Fix the logic to clear offset bit of AR71XX_GPIO_REG_OE register
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpio/gpio-ath79.c | 2 | ||||
-rw-r--r-- | drivers/gpio/gpio-generic.c | 4 | ||||
-rw-r--r-- | drivers/gpio/gpiolib.c | 8 |
3 files changed, 10 insertions, 4 deletions
diff --git a/drivers/gpio/gpio-ath79.c b/drivers/gpio/gpio-ath79.c index e5827a56ff3b..5eaea8b812cf 100644 --- a/drivers/gpio/gpio-ath79.c +++ b/drivers/gpio/gpio-ath79.c | |||
@@ -113,7 +113,7 @@ static int ar934x_gpio_direction_output(struct gpio_chip *chip, unsigned offset, | |||
113 | __raw_writel(BIT(offset), ctrl->base + AR71XX_GPIO_REG_CLEAR); | 113 | __raw_writel(BIT(offset), ctrl->base + AR71XX_GPIO_REG_CLEAR); |
114 | 114 | ||
115 | __raw_writel( | 115 | __raw_writel( |
116 | __raw_readl(ctrl->base + AR71XX_GPIO_REG_OE) & BIT(offset), | 116 | __raw_readl(ctrl->base + AR71XX_GPIO_REG_OE) & ~BIT(offset), |
117 | ctrl->base + AR71XX_GPIO_REG_OE); | 117 | ctrl->base + AR71XX_GPIO_REG_OE); |
118 | 118 | ||
119 | spin_unlock_irqrestore(&ctrl->lock, flags); | 119 | spin_unlock_irqrestore(&ctrl->lock, flags); |
diff --git a/drivers/gpio/gpio-generic.c b/drivers/gpio/gpio-generic.c index bd5193c67a9c..88ae70ddb127 100644 --- a/drivers/gpio/gpio-generic.c +++ b/drivers/gpio/gpio-generic.c | |||
@@ -141,9 +141,9 @@ static int bgpio_get_set(struct gpio_chip *gc, unsigned int gpio) | |||
141 | unsigned long pinmask = bgc->pin2mask(bgc, gpio); | 141 | unsigned long pinmask = bgc->pin2mask(bgc, gpio); |
142 | 142 | ||
143 | if (bgc->dir & pinmask) | 143 | if (bgc->dir & pinmask) |
144 | return bgc->read_reg(bgc->reg_set) & pinmask; | 144 | return !!(bgc->read_reg(bgc->reg_set) & pinmask); |
145 | else | 145 | else |
146 | return bgc->read_reg(bgc->reg_dat) & pinmask; | 146 | return !!(bgc->read_reg(bgc->reg_dat) & pinmask); |
147 | } | 147 | } |
148 | 148 | ||
149 | static int bgpio_get(struct gpio_chip *gc, unsigned int gpio) | 149 | static int bgpio_get(struct gpio_chip *gc, unsigned int gpio) |
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 2a91f3287e3b..4e4c3083ae56 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c | |||
@@ -1279,7 +1279,13 @@ static int _gpiod_get_raw_value(const struct gpio_desc *desc) | |||
1279 | chip = desc->chip; | 1279 | chip = desc->chip; |
1280 | offset = gpio_chip_hwgpio(desc); | 1280 | offset = gpio_chip_hwgpio(desc); |
1281 | value = chip->get ? chip->get(chip, offset) : -EIO; | 1281 | value = chip->get ? chip->get(chip, offset) : -EIO; |
1282 | value = value < 0 ? value : !!value; | 1282 | /* |
1283 | * FIXME: fix all drivers to clamp to [0,1] or return negative, | ||
1284 | * then change this to: | ||
1285 | * value = value < 0 ? value : !!value; | ||
1286 | * so we can properly propagate error codes. | ||
1287 | */ | ||
1288 | value = !!value; | ||
1283 | trace_gpio_value(desc_to_gpio(desc), 1, value); | 1289 | trace_gpio_value(desc_to_gpio(desc), 1, value); |
1284 | return value; | 1290 | return value; |
1285 | } | 1291 | } |