]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
gpio: msm_gpio: return correct value for gpio read
authorAswin Murugan <aswin.murugan@oss.qualcomm.com>
Thu, 8 May 2025 11:36:46 +0000 (17:06 +0530)
committerTom Rini <trini@konsulko.com>
Tue, 24 Jun 2025 13:53:33 +0000 (07:53 -0600)
In the current implementation, the GPIO read operation considers
both the input and outbut bits (bits 0 and 1). It should only consider
the state of input bit, i.e bit 0. To address this, mask input bit
alone and read it.

Signed-off-by: Aswin Murugan <aswin.murugan@oss.qualcomm.com>
Reviewed-by: Sumit Garg <sumit.garg@oss.qualcomm.com>
Reviewed-by: Casey Connolly <casey.connolly@linaro.org>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://lore.kernel.org/r/20250508113646.1462518-1-aswin.murugan@oss.qualcomm.com
Signed-off-by: Casey Connolly <casey.connolly@linaro.org>
drivers/gpio/msm_gpio.c

index 6783fc756f459f1ed5080098650495859802090b..7de332c66ae4888ba5ea9cbb95da6b18812e23b3 100644 (file)
@@ -202,7 +202,7 @@ static int msm_gpio_get_value(struct udevice *dev, unsigned int gpio)
        if (qcom_is_special_pin(priv->pin_data, gpio))
                return msm_gpio_get_value_special(priv, gpio);
 
-       return !!(readl(priv->base + GPIO_IN_OUT_REG(dev, gpio)) >> GPIO_IN);
+       return !!(readl(priv->base + GPIO_IN_OUT_REG(dev, gpio)) & BIT(GPIO_IN));
 }
 
 static int msm_gpio_get_function_special(struct msm_gpio_bank *priv,