[U-Boot] [PATCH 1/1] altera_pio: fix get_value

gpio_get_value should return 0 or 1, not 1 << pin
Signed-off-by: Julien Beraud julien.beraud@orolia.com --- drivers/gpio/altera_pio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpio/altera_pio.c b/drivers/gpio/altera_pio.c index 59e30979f0..997c32e56d 100644 --- a/drivers/gpio/altera_pio.c +++ b/drivers/gpio/altera_pio.c @@ -56,7 +56,7 @@ static int altera_pio_get_value(struct udevice *dev, unsigned pin) struct altera_pio_platdata *plat = dev_get_platdata(dev); struct altera_pio_regs *const regs = plat->regs;
- return readl(®s->data) & (1 << pin); + return (readl(®s->data) >> pin) & 1; }

On 1/4/19 5:48 PM, Julien Béraud wrote:
gpio_get_value should return 0 or 1, not 1 << pin
Is this documented somewhere ?
Signed-off-by: Julien Beraud julien.beraud@orolia.com
drivers/gpio/altera_pio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpio/altera_pio.c b/drivers/gpio/altera_pio.c index 59e30979f0..997c32e56d 100644 --- a/drivers/gpio/altera_pio.c +++ b/drivers/gpio/altera_pio.c @@ -56,7 +56,7 @@ static int altera_pio_get_value(struct udevice *dev, unsigned pin) struct altera_pio_platdata *plat = dev_get_platdata(dev); struct altera_pio_regs *const regs = plat->regs;
- return readl(®s->data) & (1 << pin);
- return (readl(®s->data) >> pin) & 1;
return !!(..condition..);
}

Am 04.01.2019 um 19:53 schrieb Marek Vasut:
On 1/4/19 5:48 PM, Julien Béraud wrote:
gpio_get_value should return 0 or 1, not 1 << pin
Is this documented somewhere ?
I saw it's kind of documented on 'dm_gpio_get_value', but not on struct dm_gpio_ops:
"@return GPIO value (0 for inactive, 1 for active) or -ve on error"
Regards, Simon
Signed-off-by: Julien Beraud julien.beraud@orolia.com
drivers/gpio/altera_pio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpio/altera_pio.c b/drivers/gpio/altera_pio.c index 59e30979f0..997c32e56d 100644 --- a/drivers/gpio/altera_pio.c +++ b/drivers/gpio/altera_pio.c @@ -56,7 +56,7 @@ static int altera_pio_get_value(struct udevice *dev, unsigned pin) struct altera_pio_platdata *plat = dev_get_platdata(dev); struct altera_pio_regs *const regs = plat->regs;
- return readl(®s->data) & (1 << pin);
- return (readl(®s->data) >> pin) & 1;
return !!(..condition..);
}

On 1/5/19 9:34 AM, Simon Goldschmidt wrote:
Am 04.01.2019 um 19:53 schrieb Marek Vasut:
On 1/4/19 5:48 PM, Julien Béraud wrote:
gpio_get_value should return 0 or 1, not 1 << pin
Is this documented somewhere ?
I saw it's kind of documented on 'dm_gpio_get_value', but not on struct dm_gpio_ops:
"@return GPIO value (0 for inactive, 1 for active) or -ve on error"
Ah, and now that I think about it, it does make sense, since GPIO 31 would trigger an error on 32bit systems.

On 1/4/19 5:48 PM, Julien Béraud wrote:
gpio_get_value should return 0 or 1, not 1 << pin
Is this documented somewhere ?
I should have mentioned that the following code in cmd/gpio.c expects it and displays a warning else. ... gpio_direction_output(gpio, value); } printf("gpio: pin %s (gpio %i) value is ", str_gpio, gpio);
int nval = gpio_get_value(gpio);
if (IS_ERR_VALUE(nval)) printf(" Warning: no access to GPIO output value\n"); else if (nval != value) printf(" Warning: value of pin is still %d\n", nval); ...
So with the current altera pio code, calling "gpio set N" with N != 0 prints a warning "value of pin is still 1 << N"
return readl(®s->data) & (1 << pin);
return (readl(®s->data) >> pin) & 1;
return !!(..condition..);
Sure. I'll resend.
Julien
participants (3)
-
Julien Béraud
-
Marek Vasut
-
Simon Goldschmidt