drivers/iio/temperature/tsys01.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
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
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
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.
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
© 2016 - 2026 Red Hat, Inc.