Patch "gpio: gpio-vf610: do not touch other bits when set the target bit" has been added to the 5.17-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    gpio: gpio-vf610: do not touch other bits when set the target bit

to the 5.17-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     gpio-gpio-vf610-do-not-touch-other-bits-when-set-the.patch
and it can be found in the queue-5.17 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 331f68136039f44c2b9a8eef5f7497c563cc80b5
Author: Haibo Chen <haibo.chen@xxxxxxx>
Date:   Wed May 11 10:15:04 2022 +0800

    gpio: gpio-vf610: do not touch other bits when set the target bit
    
    [ 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@xxxxxxx>
    Signed-off-by: Haibo Chen <haibo.chen@xxxxxxx>
    Signed-off-by: Bartosz Golaszewski <brgl@xxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

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);
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux