* [PATCH] hwmon: (ads7871) Propagate SPI errors in voltage_show
@ 2026-03-08 12:47 Tabrez Ahmed
2026-03-08 15:03 ` Guenter Roeck
0 siblings, 1 reply; 2+ messages in thread
From: Tabrez Ahmed @ 2026-03-08 12:47 UTC (permalink / raw)
To: Guenter Roeck
Cc: linux-hwmon, linux-kernel, Shuah Khan, Brigham Campbell,
Tabrez Ahmed
The voltage_show() function previously ignored negative error codes
returned by the underlying SPI read/write functions. Because negative
numbers have their most significant bits set in two's complement, a
failed SPI read returning -EIO (-5) would incorrectly evaluate to true
when masked with MUX_CNV_BM (0x80).
This would cause the driver to enter the polling loop even when the SPI bus
failed, eventually returning a misleading -ETIMEDOUT error to userspace
instead of the actual hardware error. Furthermore, the return values of
the initial SPI write and the final 16-bit SPI read were completely
ignored.
Add proper error checking after every SPI operation to ensure hardware
failures are immediately propagated back to userspace.
Suggested-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Tabrez Ahmed <tabreztalks@gmail.com>
---
drivers/hwmon/ads7871.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/drivers/hwmon/ads7871.c b/drivers/hwmon/ads7871.c
index 753bf77ce19b4..9bfdf9e6bcd77 100644
--- a/drivers/hwmon/ads7871.c
+++ b/drivers/hwmon/ads7871.c
@@ -104,10 +104,14 @@ static ssize_t voltage_show(struct device *dev, struct device_attribute *da,
*/
/*MUX_M3_BM forces single ended*/
/*This is also where the gain of the PGA would be set*/
- ads7871_write_reg8(spi, REG_GAIN_MUX,
- (MUX_CNV_BM | MUX_M3_BM | channel));
+ ret = ads7871_write_reg8(spi, REG_GAIN_MUX,
+ (MUX_CNV_BM | MUX_M3_BM | channel));
+ if (ret < 0)
+ return ret;
ret = ads7871_read_reg8(spi, REG_GAIN_MUX);
+ if (ret < 0)
+ return ret;
mux_cnv = ((ret & MUX_CNV_BM) >> MUX_CNV_BV);
/*
* on 400MHz arm9 platform the conversion
@@ -116,12 +120,16 @@ static ssize_t voltage_show(struct device *dev, struct device_attribute *da,
while ((i < 2) && mux_cnv) {
i++;
ret = ads7871_read_reg8(spi, REG_GAIN_MUX);
+ if (ret < 0)
+ return ret;
mux_cnv = ((ret & MUX_CNV_BM) >> MUX_CNV_BV);
msleep_interruptible(1);
}
if (mux_cnv == 0) {
val = ads7871_read_reg16(spi, REG_LS_BYTE);
+ if (val < 0)
+ return val;
/*result in volts*10000 = (val/8192)*2.5*10000*/
val = ((val >> 2) * 25000) / 8192;
return sysfs_emit(buf, "%d\n", val);
--
2.43.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] hwmon: (ads7871) Propagate SPI errors in voltage_show
2026-03-08 12:47 [PATCH] hwmon: (ads7871) Propagate SPI errors in voltage_show Tabrez Ahmed
@ 2026-03-08 15:03 ` Guenter Roeck
0 siblings, 0 replies; 2+ messages in thread
From: Guenter Roeck @ 2026-03-08 15:03 UTC (permalink / raw)
To: Tabrez Ahmed; +Cc: linux-hwmon, linux-kernel, Shuah Khan, Brigham Campbell
On Sun, Mar 08, 2026 at 06:17:14PM +0530, Tabrez Ahmed wrote:
> The voltage_show() function previously ignored negative error codes
> returned by the underlying SPI read/write functions. Because negative
> numbers have their most significant bits set in two's complement, a
> failed SPI read returning -EIO (-5) would incorrectly evaluate to true
> when masked with MUX_CNV_BM (0x80).
>
> This would cause the driver to enter the polling loop even when the SPI bus
> failed, eventually returning a misleading -ETIMEDOUT error to userspace
> instead of the actual hardware error. Furthermore, the return values of
> the initial SPI write and the final 16-bit SPI read were completely
> ignored.
>
> Add proper error checking after every SPI operation to ensure hardware
> failures are immediately propagated back to userspace.
>
> Suggested-by: Guenter Roeck <linux@roeck-us.net>
> Signed-off-by: Tabrez Ahmed <tabreztalks@gmail.com>
Applied.
Thanks,
Guenter
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-03-08 15:03 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-08 12:47 [PATCH] hwmon: (ads7871) Propagate SPI errors in voltage_show Tabrez Ahmed
2026-03-08 15:03 ` Guenter Roeck
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox