Re: [PATCH] hwmon: (ads7828) Check return value of regmap_read() in probe
Guenter Roeck <[email protected]> Tue, 4 Aug 2026 06:58:54 -0700
| Newsgroups | org.kernel.vger.linux-hwmon,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 8/4/26 02:17, Qingshuang Fu wrote: > From: Qingshuang Fu <[email protected]> > > ads7828_probe() issues a dummy regmap_read() to enable the internal > reference voltage when ext_vref is false. The original code ignores the > return value of regmap_read(). > > If the I2C read fails, the internal reference voltage will not be enabled, > and subsequent ADC readings return incorrect values without any error > indication. > This only applies to ADS7830, and the command does not have to succeed for this to work; the chip only needs to see a start/stop sequence. Worst case, the next command would enable it. Given that, I do not think this is a real problem (much less one requiring a stable backport), and I am not going to apply this patch. > Check the return value of regmap_read(), log an error message, and abort > probe on failure. This prevents registering a non-functional hwmon device. > FWIW, that logic would apply to every single driver which doesn't access the chip as part of the probe function. I don't even want to get there. Guenter > Fixes: 7a18afe80977 ("hwmon: (ads7828) Enable internal reference") > Signed-off-by: Qingshuang Fu <[email protected]> > --- > drivers/hwmon/ads7828.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/hwmon/ads7828.c b/drivers/hwmon/ads7828.c > index 149cfcec78dc..91ef0c4a08c4 100644 > --- a/drivers/hwmon/ads7828.c > +++ b/drivers/hwmon/ads7828.c > @@ -112,6 +112,7 @@ static int ads7828_probe(struct i2c_client *client) > unsigned int regval; > enum ads7828_chips chip; > struct regulator *reg; > + int ret; > > data = devm_kzalloc(dev, sizeof(struct ads7828_data), GFP_KERNEL); > if (!data) > @@ -166,8 +167,13 @@ static int ads7828_probe(struct i2c_client *client) > * voltage needs to settle before getting valid ADC data. So perform a > * dummy read to enable the internal reference voltage. > */ > - if (!ext_vref) > - regmap_read(data->regmap, data->cmd_byte, ®val); > + if (!ext_vref) { > + ret = regmap_read(data->regmap, data->cmd_byte, ®val); > + if (ret) { > + dev_err(dev, "dummy read failed to enable internal VREF: %d\n", ret); > + return ret; > + } > + } > > hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, > data, > > base-commit: 848acc8ffe1b7cd5f1bf427b93069becfebc2c9d