* [PATCH AUTOSEL 6.6 13/59] gpio: wcd934x: check the return value of regmap_update_bits()
[not found] <20250804003413.3622950-1-sashal@kernel.org>
@ 2025-08-04 0:33 ` Sasha Levin
2025-08-04 0:33 ` [PATCH AUTOSEL 6.6 22/59] gpio: tps65912: " Sasha Levin
1 sibling, 0 replies; 2+ messages in thread
From: Sasha Levin @ 2025-08-04 0:33 UTC (permalink / raw)
To: patches, stable
Cc: Bartosz Golaszewski, Sasha Levin, linus.walleij, brgl, linux-gpio
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
[ Upstream commit ff0f0d7c6587e38c308be9905e36f86e98fb9c1f ]
regmap_update_bits() can fail so check its return value in
wcd_gpio_direction_output() for consistency with the rest of the code
and propagate any errors.
Link: https://lore.kernel.org/r/20250709-gpiochip-set-rv-gpio-remaining-v1-2-b8950f69618d@linaro.org
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
LLM Generated explanations, may be completely bogus:
Based on my analysis, here's my determination:
**YES**
This commit should be backported to stable kernel trees for the
following reasons:
1. **It fixes a real bug**: The `wcd_gpio_direction_output()` function
in drivers/gpio/gpio-wcd934x.c was not checking the return value of
the first `regmap_update_bits()` call (lines 50-51 in the original
code). This could lead to silent failures where the GPIO direction
register update fails, but the function continues to update the value
register, potentially leaving the GPIO in an inconsistent state.
2. **The fix is minimal and contained**: The change is very small - it
only adds 4 lines of code to check the return value and propagate the
error. This minimizes the risk of introducing regressions.
3. **Consistency with the rest of the driver**: Looking at the code,
other functions in the same driver already properly check regmap
operation return values:
- `wcd_gpio_get_direction()` checks the return value of
`regmap_read()` at line 27-29
- `wcd_gpio_direction_input()` already returns the result of
`regmap_update_bits()` directly
4. **Consistency with other GPIO drivers**: My examination of other GPIO
drivers (gpio-lp87565.c, gpio-lp873x.c, gpio-tps65912.c, gpio-
adp5585.c) shows that properly checking return values from regmap
operations in `direction_output` functions is the standard practice.
5. **Potential for real-world impact**: The WCD934x is an audio codec
used in Qualcomm SoCs like SDM845. A failure to properly set GPIO
direction could cause issues with audio functionality or other
peripherals connected through these GPIOs. The bug could manifest as
intermittent failures that are hard to debug.
6. **No architectural changes**: The commit doesn't introduce new
features or change any APIs. It's purely a bug fix that adds proper
error handling.
7. **Clear bug pattern**: The pattern of not checking the first regmap
operation but checking (returning) the second one suggests this was
an oversight rather than intentional behavior.
The commit follows stable kernel rules by being a clear bug fix that
addresses a potential reliability issue without introducing new
functionality or making architectural changes.
drivers/gpio/gpio-wcd934x.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/gpio/gpio-wcd934x.c b/drivers/gpio/gpio-wcd934x.c
index 2bba27b13947..cfa7b0a50c8e 100644
--- a/drivers/gpio/gpio-wcd934x.c
+++ b/drivers/gpio/gpio-wcd934x.c
@@ -46,9 +46,12 @@ static int wcd_gpio_direction_output(struct gpio_chip *chip, unsigned int pin,
int val)
{
struct wcd_gpio_data *data = gpiochip_get_data(chip);
+ int ret;
- regmap_update_bits(data->map, WCD_REG_DIR_CTL_OFFSET,
- WCD_PIN_MASK(pin), WCD_PIN_MASK(pin));
+ ret = regmap_update_bits(data->map, WCD_REG_DIR_CTL_OFFSET,
+ WCD_PIN_MASK(pin), WCD_PIN_MASK(pin));
+ if (ret)
+ return ret;
return regmap_update_bits(data->map, WCD_REG_VAL_CTL_OFFSET,
WCD_PIN_MASK(pin),
--
2.39.5
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [PATCH AUTOSEL 6.6 22/59] gpio: tps65912: check the return value of regmap_update_bits()
[not found] <20250804003413.3622950-1-sashal@kernel.org>
2025-08-04 0:33 ` [PATCH AUTOSEL 6.6 13/59] gpio: wcd934x: check the return value of regmap_update_bits() Sasha Levin
@ 2025-08-04 0:33 ` Sasha Levin
1 sibling, 0 replies; 2+ messages in thread
From: Sasha Levin @ 2025-08-04 0:33 UTC (permalink / raw)
To: patches, stable
Cc: Bartosz Golaszewski, Sasha Levin, linus.walleij, brgl, linux-gpio
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
[ Upstream commit a0b2a6bbff8c26aafdecd320f38f52c341d5cafa ]
regmap_update_bits() can fail, check its return value like we do
elsewhere in the driver.
Link: https://lore.kernel.org/r/20250707-gpiochip-set-rv-gpio-round4-v1-2-35668aaaf6d2@linaro.org
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
LLM Generated explanations, may be completely bogus:
**Backport Status: YES**
This commit should be backported to stable kernel trees for the
following reasons:
1. **Bug Fix with Real Impact**: The commit fixes a bug where the return
value of `regmap_update_bits()` in `tps65912_gpio_direction_output()`
is not checked (line 54-55 in the original code). This could lead to
silent failures where the GPIO initial value is not set correctly,
but the function continues to configure the direction, potentially
leaving the GPIO in an inconsistent state.
2. **Consistency with Driver Pattern**: The driver already checks return
values of `regmap_update_bits()` in other functions:
- `tps65912_gpio_direction_input()` (line 44) properly returns the
result
- The second `regmap_update_bits()` call in
`tps65912_gpio_direction_output()` (line 57) also returns the
result
- `tps65912_gpio_get_direction()` checks the return value of
`regmap_read()`
3. **Small and Contained Fix**: The patch is minimal - it only adds:
- An `int ret` variable declaration
- Captures the return value of the first `regmap_update_bits()` call
- Adds an error check that returns early if the operation failed
4. **No Side Effects**: This change doesn't introduce any new
functionality or alter the existing behavior when operations succeed.
It only adds proper error handling that was missing.
5. **Hardware Communication Reliability**: The TPS65912 is a PMIC (Power
Management IC) that communicates over I2C/SPI. Hardware communication
can fail due to various reasons (bus errors, device issues), and not
checking return values can lead to incorrect GPIO states which could
affect system stability or connected peripherals.
6. **Follows Kernel Best Practices**: The kernel coding standards
require checking return values of functions that can fail, especially
for hardware operations. This fix brings the code in line with those
standards.
The commit message clearly indicates this is a bug fix
("regmap_update_bits() can fail, check its return value like we do
elsewhere in the driver"), making it a perfect candidate for stable
backporting as it improves driver reliability without any risk of
regression.
drivers/gpio/gpio-tps65912.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/gpio/gpio-tps65912.c b/drivers/gpio/gpio-tps65912.c
index fab771cb6a87..bac757c191c2 100644
--- a/drivers/gpio/gpio-tps65912.c
+++ b/drivers/gpio/gpio-tps65912.c
@@ -49,10 +49,13 @@ static int tps65912_gpio_direction_output(struct gpio_chip *gc,
unsigned offset, int value)
{
struct tps65912_gpio *gpio = gpiochip_get_data(gc);
+ int ret;
/* Set the initial value */
- regmap_update_bits(gpio->tps->regmap, TPS65912_GPIO1 + offset,
- GPIO_SET_MASK, value ? GPIO_SET_MASK : 0);
+ ret = regmap_update_bits(gpio->tps->regmap, TPS65912_GPIO1 + offset,
+ GPIO_SET_MASK, value ? GPIO_SET_MASK : 0);
+ if (ret)
+ return ret;
return regmap_update_bits(gpio->tps->regmap, TPS65912_GPIO1 + offset,
GPIO_CFG_MASK, GPIO_CFG_MASK);
--
2.39.5
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-08-04 0:35 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20250804003413.3622950-1-sashal@kernel.org>
2025-08-04 0:33 ` [PATCH AUTOSEL 6.6 13/59] gpio: wcd934x: check the return value of regmap_update_bits() Sasha Levin
2025-08-04 0:33 ` [PATCH AUTOSEL 6.6 22/59] gpio: tps65912: " Sasha Levin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).