From mboxrd@z Thu Jan 1 00:00:00 1970 From: Axel Lin Date: Tue, 09 Jun 2015 17:15:02 +0800 Subject: [U-Boot] [PATCH RFT] gpio: vybrid: Fix up setting output value in vybrid_gpio_direction_output Message-ID: <1433841302.4157.1.camel@ingics.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 --- 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