[PATCH] iio: adc: ad7816: propagate SPI error codes

Hungyu Lin posted 1 patch 1 month ago
drivers/staging/iio/adc/ad7816.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[PATCH] iio: adc: ad7816: propagate SPI error codes
Posted by Hungyu Lin 1 month ago
The driver currently returns -EIO for SPI read/write failures,
which hides the actual error code returned by the SPI subsystem.

Return the original error code instead to allow better diagnostics
and error handling by callers.

Signed-off-by: Hungyu Lin <dennylin0707@gmail.com>
---
 drivers/staging/iio/adc/ad7816.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/iio/adc/ad7816.c b/drivers/staging/iio/adc/ad7816.c
index 0e32a2295990..9052203eb4f3 100644
--- a/drivers/staging/iio/adc/ad7816.c
+++ b/drivers/staging/iio/adc/ad7816.c
@@ -222,7 +222,7 @@ static ssize_t ad7816_show_value(struct device *dev,
 
 	ret = ad7816_spi_read(chip, &data);
 	if (ret)
-		return -EIO;
+		return ret;
 
 	data >>= AD7816_VALUE_OFFSET;
 
@@ -320,7 +320,7 @@ static inline ssize_t ad7816_set_oti(struct device *dev,
 
 	ret = ad7816_spi_write(chip, data);
 	if (ret)
-		return -EIO;
+		return ret;
 
 	chip->oti_data[chip->channel_id] = data;
 
-- 
2.34.1
Re: [PATCH] iio: adc: ad7816: propagate SPI error codes
Posted by Andy Shevchenko 1 month ago
On Sat, May 09, 2026 at 02:06:46AM +0000, Hungyu Lin wrote:
> The driver currently returns -EIO for SPI read/write failures,
> which hides the actual error code returned by the SPI subsystem.
> 
> Return the original error code instead to allow better diagnostics
> and error handling by callers.

...

> static ssize_t ad7816_show_value(struct device *dev,

>  	ret = ad7816_spi_read(chip, &data);
>  	if (ret)
> -		return -EIO;
> +		return ret;

At least this is an ABI change and should have been mentioned in the commit
message and justified.

Yes, error code is an ABI and infamous case is already known when similar
change badly broke user space.

https://lkml.org/lkml/2012/12/23/75

...

> static inline ssize_t ad7816_set_oti(struct device *dev,

>  	ret = ad7816_spi_write(chip, data);
>  	if (ret)
> -		return -EIO;
> +		return ret;

Haven't checked this one, though.

-- 
With Best Regards,
Andy Shevchenko
Re: [PATCH] iio: adc: ad7816: propagate SPI error codes
Posted by Denny Lin 1 month ago
Hi Andy,

Thanks for pointing this out.

You're right that this changes the userspace-visible error codes and
can be considered an ABI change. I don't think this is worth the risk,
so I'll drop this change.

Thanks,
Hungyu

On Fri, May 8, 2026 at 11:57 PM Andy Shevchenko
<andriy.shevchenko@intel.com> wrote:
>
> On Sat, May 09, 2026 at 02:06:46AM +0000, Hungyu Lin wrote:
> > The driver currently returns -EIO for SPI read/write failures,
> > which hides the actual error code returned by the SPI subsystem.
> >
> > Return the original error code instead to allow better diagnostics
> > and error handling by callers.
>
> ...
>
> > static ssize_t ad7816_show_value(struct device *dev,
>
> >       ret = ad7816_spi_read(chip, &data);
> >       if (ret)
> > -             return -EIO;
> > +             return ret;
>
> At least this is an ABI change and should have been mentioned in the commit
> message and justified.
>
> Yes, error code is an ABI and infamous case is already known when similar
> change badly broke user space.
>
> https://lkml.org/lkml/2012/12/23/75
>
> ...
>
> > static inline ssize_t ad7816_set_oti(struct device *dev,
>
> >       ret = ad7816_spi_write(chip, data);
> >       if (ret)
> > -             return -EIO;
> > +             return ret;
>
> Haven't checked this one, though.
>
> --
> With Best Regards,
> Andy Shevchenko
>
>