mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 13:41:48 -04:00
ASoC: tas2770: Fix order of operations for temperature calculation
The order of operations to derive the temperature from the temp
register values was wrong, since 1000 / 16 is not an integer. This
resulted in the calculated temperature value deviating from the
value represented by the registers slightly, which was most obvious
when the registers were zeroed (-92.265 *C vs the expected -93.000 *C).
Scale the reading before dividing the whole thing by 16 to correct
this.
Fixes: ff73e27801 ("ASoC: tas2770: expose die temp to hwmon")
Signed-off-by: James Calligeros <jcalligeros99@gmail.com>
Link: https://patch.msgid.link/20260425-tas27xx-hwmon-fixes-v1-3-83c13b8e8f54@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
committed by
Mark Brown
parent
4cfb5971c2
commit
c7ecb6a619
@@ -624,7 +624,7 @@ static int tas2770_read_die_temp(struct tas2770_priv *tas2770, long *result)
|
||||
/*
|
||||
* As per datasheet: divide register by 16 and subtract 93 to get
|
||||
* degrees Celsius. hwmon requires millidegrees. Let's avoid rounding
|
||||
* errors by subtracting 93 * 16 then multiplying by 1000 / 16.
|
||||
* errors by subtracting 93 * 16 and scaling before dividing.
|
||||
*
|
||||
* NOTE: The ADC registers are initialised to 0 on reset. This means
|
||||
* that the temperature will read -93 *C until the chip is brought out
|
||||
@@ -633,7 +633,7 @@ static int tas2770_read_die_temp(struct tas2770_priv *tas2770, long *result)
|
||||
* value read back from its registers will be the last value sampled
|
||||
* before entering software shutdown.
|
||||
*/
|
||||
*result = (reading - (93 * 16)) * (1000 / 16);
|
||||
*result = (reading - (93 * 16)) * 1000 / 16;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user