* [PATCH v2] iio: temperature: mcp9600: Bound thresholds before scaling
@ 2026-11-11 3:42 Zhu Jun
2026-11-11 14:43 ` Andy Shevchenko
0 siblings, 1 reply; 4+ messages in thread
From: Zhu Jun @ 2026-11-11 3:42 UTC (permalink / raw)
To: jic23
Cc: dlechner, nuno.sa, andriy.shevchenko, crofts, linux-iio,
linux-kernel, Zhu Jun
mcp9600_write_thresh() multiplies the integer part by 1000000 before
clamping to the supported temperature range. The multiplication can
overflow int, so a request such as 3000 degrees can select the lower
threshold instead of the upper threshold.
Clamp the integer part to the hot-junction range before scaling. Keep
the existing final clamp for fractional values and the narrower cold-
junction range.
Fixes: dea750f8015b ("iio: temperature: mcp9600: add threshold events support")
Signed-off-by: Zhu Jun <zhujun2@cmss.chinamobile.com>
---
Changes in v2:
- Use MICRO from <linux/units.h>, cast to int to preserve
signed division for the negative temperature limit (Andy Shevchenko).
drivers/iio/temperature/mcp9600.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/iio/temperature/mcp9600.c b/drivers/iio/temperature/mcp9600.c
index b0ff0c7b4891..d030f639f500 100644
--- a/drivers/iio/temperature/mcp9600.c
+++ b/drivers/iio/temperature/mcp9600.c
@@ -17,6 +17,7 @@
#include <linux/math.h>
#include <linux/minmax.h>
#include <linux/module.h>
+#include <linux/units.h>
#include <linux/iio/events.h>
#include <linux/iio/iio.h>
@@ -326,6 +327,8 @@ static int mcp9600_write_thresh(struct iio_dev *indio_dev,
i = mcp9600_get_alert_index(chan->channel2, dir);
switch (info) {
case IIO_EV_INFO_VALUE:
+ val = clamp_val(val, MCP9600_MIN_TEMP_HOT_JUNCTION_MICRO / (int)MICRO,
+ MCP9600_MAX_TEMP_HOT_JUNCTION_MICRO / (int)MICRO);
/* Scale value to include decimal part into calculations */
s_val = (val < 0) ? ((val * 1000000) - val2) :
((val * 1000000) + val2);
--
2.51.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2] iio: temperature: mcp9600: Bound thresholds before scaling
2026-11-11 3:42 [PATCH v2] iio: temperature: mcp9600: Bound thresholds before scaling Zhu Jun
@ 2026-11-11 14:43 ` Andy Shevchenko
0 siblings, 0 replies; 4+ messages in thread
From: Andy Shevchenko @ 2026-11-11 14:43 UTC (permalink / raw)
To: Zhu Jun; +Cc: jic23, dlechner, nuno.sa, crofts, linux-iio, linux-kernel
On Wed, Nov 11, 2026 at 11:42:24AM +0800, Zhu Jun wrote:
> mcp9600_write_thresh() multiplies the integer part by 1000000 before
> clamping to the supported temperature range. The multiplication can
> overflow int, so a request such as 3000 degrees can select the lower
> threshold instead of the upper threshold.
>
> Clamp the integer part to the hot-junction range before scaling. Keep
> the existing final clamp for fractional values and the narrower cold-
> junction range.
...
> + val = clamp_val(val, MCP9600_MIN_TEMP_HOT_JUNCTION_MICRO / (int)MICRO,
Btw, why do we need to use _val() variant of clamp*()?
> + MCP9600_MAX_TEMP_HOT_JUNCTION_MICRO / (int)MICRO);
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2] iio: temperature: mcp9600: Bound thresholds before scaling
2026-11-11 3:05 Zhu Jun
@ 2026-11-11 14:42 ` Andy Shevchenko
0 siblings, 0 replies; 4+ messages in thread
From: Andy Shevchenko @ 2026-11-11 14:42 UTC (permalink / raw)
To: Zhu Jun; +Cc: jic23, dlechner, nuno.sa, crofts, linux-iio, linux-kernel
On Wed, Nov 11, 2026 at 11:05:38AM +0800, Zhu Jun wrote:
> mcp9600_write_thresh() multiplies the integer part by 1000000 before
> clamping to the supported temperature range. The multiplication can
> overflow int, so a request such as 3000 degrees can select the lower
> threshold instead of the upper threshold.
>
> Clamp the integer part to the hot-junction range before scaling. Keep
> the existing final clamp for fractional values and the narrower cold-
> junction range.
...
> + val = clamp_val(val, MCP9600_MIN_TEMP_HOT_JUNCTION_MICRO / (int)MICRO,
Btw, why do we need to use _val() variant of clamp*()?
> + MCP9600_MAX_TEMP_HOT_JUNCTION_MICRO / (int)MICRO);
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2] iio: temperature: mcp9600: Bound thresholds before scaling
@ 2026-11-11 3:05 Zhu Jun
2026-11-11 14:42 ` Andy Shevchenko
0 siblings, 1 reply; 4+ messages in thread
From: Zhu Jun @ 2026-11-11 3:05 UTC (permalink / raw)
To: jic23
Cc: dlechner, nuno.sa, andriy.shevchenko, crofts, linux-iio,
linux-kernel, Zhu Jun
mcp9600_write_thresh() multiplies the integer part by 1000000 before
clamping to the supported temperature range. The multiplication can
overflow int, so a request such as 3000 degrees can select the lower
threshold instead of the upper threshold.
Clamp the integer part to the hot-junction range before scaling. Keep
the existing final clamp for fractional values and the narrower cold-
junction range.
Signed-off-by: Zhu Jun <zhujun2@cmss.chinamobile.com>
---
Changes in v2:
- Use MICRO from <linux/units.h>, cast to int to preserve
signed division for the negative temperature limit (Andy Shevchenko).
drivers/iio/temperature/mcp9600.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/iio/temperature/mcp9600.c b/drivers/iio/temperature/mcp9600.c
index b0ff0c7b4891..d030f639f500 100644
--- a/drivers/iio/temperature/mcp9600.c
+++ b/drivers/iio/temperature/mcp9600.c
@@ -17,6 +17,7 @@
#include <linux/math.h>
#include <linux/minmax.h>
#include <linux/module.h>
+#include <linux/units.h>
#include <linux/iio/events.h>
#include <linux/iio/iio.h>
@@ -326,6 +327,8 @@ static int mcp9600_write_thresh(struct iio_dev *indio_dev,
i = mcp9600_get_alert_index(chan->channel2, dir);
switch (info) {
case IIO_EV_INFO_VALUE:
+ val = clamp_val(val, MCP9600_MIN_TEMP_HOT_JUNCTION_MICRO / (int)MICRO,
+ MCP9600_MAX_TEMP_HOT_JUNCTION_MICRO / (int)MICRO);
/* Scale value to include decimal part into calculations */
s_val = (val < 0) ? ((val * 1000000) - val2) :
((val * 1000000) + val2);
--
2.51.0
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-11-11 14:43 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-11 3:42 [PATCH v2] iio: temperature: mcp9600: Bound thresholds before scaling Zhu Jun
2026-11-11 14:43 ` Andy Shevchenko
-- strict thread matches above, loose matches on Subject: below --
2026-11-11 3:05 Zhu Jun
2026-11-11 14:42 ` Andy Shevchenko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®