[U-Boot] [PATCH RFT] gpio: vybrid: Fix up setting output value in vybrid_gpio_direction_output
Axel Lin
axel.lin at ingics.com
Tue Jun 9 11:15:02 CEST 2015
Pass correct gpio argument to gpio_set_value().
The calcualation of gpio = gpio + (gpios->chip * VYBRID_GPIO_COUNT);
is required for calling imx_iomux_gpio_* functions so move them close to
improve readability.
Signed-off-by: Axel Lin <axel.lin at ingics.com>
---
Hi Bhuvanchandra,
I think current code does not pass correct gpio argument to gpio_set_value()
in vybrid_gpio_direction_output(). It only works if gpios->chip is 0.
I don't have the h/w to test, can you double check this?
Thanks,
Axel
drivers/gpio/vybrid_gpio.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/gpio/vybrid_gpio.c b/drivers/gpio/vybrid_gpio.c
index 6eaf0a9..33bbf54 100644
--- a/drivers/gpio/vybrid_gpio.c
+++ b/drivers/gpio/vybrid_gpio.c
@@ -36,8 +36,9 @@ static int vybrid_gpio_direction_output(struct udevice *dev, unsigned gpio,
{
const struct vybrid_gpios *gpios = dev_get_priv(dev);
- gpio = gpio + (gpios->chip * VYBRID_GPIO_COUNT);
gpio_set_value(gpio, value);
+
+ gpio = gpio + (gpios->chip * VYBRID_GPIO_COUNT);
imx_iomux_gpio_set_direction(gpio, VF610_GPIO_DIRECTION_OUT);
return 0;
@@ -54,6 +55,7 @@ static int vybrid_gpio_set_value(struct udevice *dev, unsigned gpio,
int value)
{
const struct vybrid_gpios *gpios = dev_get_priv(dev);
+
if (value)
writel((1 << gpio), &gpios->reg->gpio_psor);
else
@@ -68,7 +70,6 @@ static int vybrid_gpio_get_function(struct udevice *dev, unsigned gpio)
u32 g_state = 0;
gpio = gpio + (gpios->chip * VYBRID_GPIO_COUNT);
-
imx_iomux_gpio_get_function(gpio, &g_state);
if (((g_state & (0x07 << PAD_MUX_MODE_SHIFT)) >> PAD_MUX_MODE_SHIFT) > 0)
--
2.1.0
More information about the U-Boot
mailing list