lkml.org 
[lkml]   [2022]   [May]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.17 127/158] gpio: gpio-vf610: do not touch other bits when set the target bit
    Date
    From: Haibo Chen <haibo.chen@nxp.com>

    [ Upstream commit 9bf3ac466faa83d51a8fe9212131701e58fdef74 ]

    For gpio controller contain register PDDR, when set one target bit,
    current logic will clear all other bits, this is wrong. Use operator
    '|=' to fix it.

    Fixes: 659d8a62311f ("gpio: vf610: add imx7ulp support")
    Reviewed-by: Peng Fan <peng.fan@nxp.com>
    Signed-off-by: Haibo Chen <haibo.chen@nxp.com>
    Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpio/gpio-vf610.c | 8 ++++++--
    1 file changed, 6 insertions(+), 2 deletions(-)

    diff --git a/drivers/gpio/gpio-vf610.c b/drivers/gpio/gpio-vf610.c
    index 20780c35da1b..23cddb265a0d 100644
    --- a/drivers/gpio/gpio-vf610.c
    +++ b/drivers/gpio/gpio-vf610.c
    @@ -125,9 +125,13 @@ static int vf610_gpio_direction_output(struct gpio_chip *chip, unsigned gpio,
    {
    struct vf610_gpio_port *port = gpiochip_get_data(chip);
    unsigned long mask = BIT(gpio);
    + u32 val;

    - if (port->sdata && port->sdata->have_paddr)
    - vf610_gpio_writel(mask, port->gpio_base + GPIO_PDDR);
    + if (port->sdata && port->sdata->have_paddr) {
    + val = vf610_gpio_readl(port->gpio_base + GPIO_PDDR);
    + val |= mask;
    + vf610_gpio_writel(val, port->gpio_base + GPIO_PDDR);
    + }

    vf610_gpio_set(chip, gpio, value);

    --
    2.35.1


    \
     
     \ /
      Last update: 2022-05-23 20:06    [W:4.051 / U:0.284 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site