[PATCH] hwmon: (ads7828) Check return value of regmap_read() in probe
Qingshuang Fu <[email protected]> Tue, 4 Aug 2026 17:17:19 +0800
| Newsgroups | org.kernel.vger.linux-hwmon,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
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. Check the return value of regmap_read(), log an error message, and abort probe on failure. This prevents registering a non-functional hwmon device. 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 -- 2.25.1