[PATCH] iio: temperature: tsys01: fix broken PROM checksum validation

Salah Triki posted 1 patch 1 month, 2 weeks ago
There is a newer version of this series
drivers/iio/temperature/tsys01.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] iio: temperature: tsys01: fix broken PROM checksum validation
Posted by Salah Triki 1 month, 2 weeks ago
The CRC check function was incorrectly using only the first word of the
PROM (n_prom[0]) instead of iterating through all words. This caused
the driver to fail probing on most devices due to incorrect checksum
calculation.

- Fix loop to use the correct index n_prom[cnt].
- Ensure all bytes are summed as per the datasheet specification.

Fixes: 43e53407f680 ("Add tsys01 meas-spec driver support")
Signed-off-by: Salah Triki <salah.triki@gmail.com>
---
 drivers/iio/temperature/tsys01.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/iio/temperature/tsys01.c b/drivers/iio/temperature/tsys01.c
index 334bba6fdae6..104dd45598b0 100644
--- a/drivers/iio/temperature/tsys01.c
+++ b/drivers/iio/temperature/tsys01.c
@@ -119,7 +119,7 @@ static bool tsys01_crc_valid(u16 *n_prom)
 	u8 sum = 0;
 
 	for (cnt = 0; cnt < TSYS01_PROM_WORDS_NB; cnt++)
-		sum += ((n_prom[0] >> 8) + (n_prom[0] & 0xFF));
+		sum += ((n_prom[cnt] >> 8) + (n_prom[cnt] & 0xFF));
 
 	return (sum == 0);
 }
-- 
2.43.0
Re: [PATCH] iio: temperature: tsys01: fix broken PROM checksum validation
Posted by Andy Shevchenko 1 month, 2 weeks ago
On Tue, Apr 28, 2026 at 04:22:39PM +0100, Salah Triki wrote:
> The CRC check function was incorrectly using only the first word of the
> PROM (n_prom[0]) instead of iterating through all words. This caused
> the driver to fail probing on most devices due to incorrect checksum
> calculation.
> 
> - Fix loop to use the correct index n_prom[cnt].
> - Ensure all bytes are summed as per the datasheet specification.

...

>  	u8 sum = 0;
>  
>  	for (cnt = 0; cnt < TSYS01_PROM_WORDS_NB; cnt++)
> -		sum += ((n_prom[0] >> 8) + (n_prom[0] & 0xFF));
> +		sum += ((n_prom[cnt] >> 8) + (n_prom[cnt] & 0xFF));
>  
>  	return (sum == 0);

This change makes more questions than answers. How had it been tested,
if tested at all? (This question is to before and to after, the commit
message is also unclear about what datasheet says or the real field
testing gives.)

-- 
With Best Regards,
Andy Shevchenko
Re: [PATCH] iio: temperature: tsys01: fix broken PROM checksum validation
Posted by Jonathan Cameron 1 month, 2 weeks ago
On Tue, 28 Apr 2026 18:49:56 +0300
Andy Shevchenko <andriy.shevchenko@intel.com> wrote:

> On Tue, Apr 28, 2026 at 04:22:39PM +0100, Salah Triki wrote:
> > The CRC check function was incorrectly using only the first word of the
> > PROM (n_prom[0]) instead of iterating through all words. This caused
> > the driver to fail probing on most devices due to incorrect checksum
> > calculation.
> > 
> > - Fix loop to use the correct index n_prom[cnt].
> > - Ensure all bytes are summed as per the datasheet specification.  
> 
> ...
> 
> >  	u8 sum = 0;
> >  
> >  	for (cnt = 0; cnt < TSYS01_PROM_WORDS_NB; cnt++)
> > -		sum += ((n_prom[0] >> 8) + (n_prom[0] & 0xFF));
> > +		sum += ((n_prom[cnt] >> 8) + (n_prom[cnt] & 0xFF));
> >  
> >  	return (sum == 0);  
> 
> This change makes more questions than answers. How had it been tested,
> if tested at all? (This question is to before and to after, the commit
> message is also unclear about what datasheet says or the real field
> testing gives.)
> 
I'll guess first word of the PROM is typically 0?

The datasheet indicates that it exists but then says absolutely nothing
about what is in that word - unlike all the others that are documented.

To me the fix looks right (based on the datasheet) but absolutely this
patch description should make that clear if this isn't tested on hardware.
Re: [PATCH] iio: temperature: tsys01: fix broken PROM checksum validation
Posted by Salah Triki 1 month, 1 week ago
On Wed, Apr 29, 2026 at 10:33:04AM +0100, Jonathan Cameron wrote:
> On Tue, 28 Apr 2026 18:49:56 +0300
> Andy Shevchenko <andriy.shevchenko@intel.com> wrote:
> 
> > On Tue, Apr 28, 2026 at 04:22:39PM +0100, Salah Triki wrote:
> > > The CRC check function was incorrectly using only the first word of the
> > > PROM (n_prom[0]) instead of iterating through all words. This caused
> > > the driver to fail probing on most devices due to incorrect checksum
> > > calculation.
> > > 
> > > - Fix loop to use the correct index n_prom[cnt].
> > > - Ensure all bytes are summed as per the datasheet specification.  
> > 
> > ...
> > 
> > >  	u8 sum = 0;
> > >  
> > >  	for (cnt = 0; cnt < TSYS01_PROM_WORDS_NB; cnt++)
> > > -		sum += ((n_prom[0] >> 8) + (n_prom[0] & 0xFF));
> > > +		sum += ((n_prom[cnt] >> 8) + (n_prom[cnt] & 0xFF));
> > >  
> > >  	return (sum == 0);  
> > 
> > This change makes more questions than answers. How had it been tested,
> > if tested at all? (This question is to before and to after, the commit
> > message is also unclear about what datasheet says or the real field
> > testing gives.)
> > 
> I'll guess first word of the PROM is typically 0?
> 
> The datasheet indicates that it exists but then says absolutely nothing
> about what is in that word - unlike all the others that are documented.
> 
> To me the fix looks right (based on the datasheet) but absolutely this
> patch description should make that clear if this isn't tested on hardware.
> 
> 
> 

Thank you for looking into this and for your clarification.

Indeed, the code audit reveals that the loop index is ignored, causing the
driver to process only the first word repeatedly.

I will send a v2 with a more detailed commit message explaining that this
fix relies on the datasheet analysis rather than physical hardware testing.

Best regards,
--
Salah Triki