mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] iio: temperature: mlx90614: Fix dual channel probe condition check
@ 2026-09-17 11:01 Salah Triki
  2026-09-17 11:27 ` Crt Mori
  0 siblings, 1 reply; 3+ messages in thread
From: Salah Triki @ 2026-09-17 11:01 UTC (permalink / raw)
  To: Crt Mori, Jonathan Cameron, David Lechner, Nuno Sá, Andy Shevchenko
  Cc: linux-iio, linux-kernel, Salah Triki

In mlx90614_probe_num_ir_sensors(), the check on chip_info->dual_channel
is inverted.

Currently, if dual_channel is true (MLX90614), the function returns 0
immediately without checking op_eeprom_config1. This forces all MLX90614
devices to be registered as single sensor (num_channels = 2), making the
second object temperature channel inaccessible.

Conversely, if dual_channel is false (MLX90615), the function skips the
early return and performs an unnecessary SMBus read on EEPROM CONFIG1 even
though MLX90615 does not support dual channel operation.

Fix this by negating the condition so that single-channel chips return
early with 0, while dual-channel capable chips (MLX90614) proceed to read
the EEPROM configuration register to detect whether 1 or 2 object channels
are present.

Fixes: 3d5ead238bc8 ("iio: mlx90614: Factor our register IO and constants into model specific descriptor")
Assisted-by: LLM
Signed-off-by: Salah Triki <salah.triki@gmail.com>
---
 drivers/iio/temperature/mlx90614.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/iio/temperature/mlx90614.c b/drivers/iio/temperature/mlx90614.c
index 27d6ab5f5d7a..4f79da1f905e 100644
--- a/drivers/iio/temperature/mlx90614.c
+++ b/drivers/iio/temperature/mlx90614.c
@@ -565,7 +565,7 @@ static int mlx90614_probe_num_ir_sensors(struct i2c_client *client)
 	const struct mlx_chip_info *chip_info = data->chip_info;
 	s32 ret;
 
-	if (chip_info->dual_channel)
+	if (!chip_info->dual_channel)
 		return 0;
 
 	ret = i2c_smbus_read_word_data(client, chip_info->op_eeprom_config1);
-- 
2.43.0


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] iio: temperature: mlx90614: Fix dual channel probe condition check
  2026-09-17 11:01 [PATCH] iio: temperature: mlx90614: Fix dual channel probe condition check Salah Triki
@ 2026-09-17 11:27 ` Crt Mori
  2026-09-17 13:16   ` Salah Triki
  0 siblings, 1 reply; 3+ messages in thread
From: Crt Mori @ 2026-09-17 11:27 UTC (permalink / raw)
  To: Salah Triki
  Cc: Jonathan Cameron, David Lechner, Nuno Sá,
	Andy Shevchenko, linux-iio, linux-kernel

So this fix is for the MLX90615, which is registered as single channel
operation? Did you test on 90614 as well?

Best regards,
Crt

Crt Mori

Melexis Technologies NV
Transportstraat 1
3980 Tessenderlo

Mobile: +32 492 46 22 15
E-mail: cmo@melexis.com
Website: www.melexis.com

----------------------------------------------------------
The contents of this e-mail are CONFIDENTIAL AND PROPRIETARY. Please
read our disclaimer at http://www.melexis.com/mailpolicy


On Thu, 17 Sept 2026 at 13:01, Salah Triki <salah.triki@gmail.com> wrote:
>
> In mlx90614_probe_num_ir_sensors(), the check on chip_info->dual_channel
> is inverted.
>
> Currently, if dual_channel is true (MLX90614), the function returns 0
> immediately without checking op_eeprom_config1. This forces all MLX90614
> devices to be registered as single sensor (num_channels = 2), making the
> second object temperature channel inaccessible.
>
> Conversely, if dual_channel is false (MLX90615), the function skips the
> early return and performs an unnecessary SMBus read on EEPROM CONFIG1 even
> though MLX90615 does not support dual channel operation.
>
> Fix this by negating the condition so that single-channel chips return
> early with 0, while dual-channel capable chips (MLX90614) proceed to read
> the EEPROM configuration register to detect whether 1 or 2 object channels
> are present.
>
> Fixes: 3d5ead238bc8 ("iio: mlx90614: Factor our register IO and constants into model specific descriptor")
> Assisted-by: LLM
> Signed-off-by: Salah Triki <salah.triki@gmail.com>
> ---
>  drivers/iio/temperature/mlx90614.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/iio/temperature/mlx90614.c b/drivers/iio/temperature/mlx90614.c
> index 27d6ab5f5d7a..4f79da1f905e 100644
> --- a/drivers/iio/temperature/mlx90614.c
> +++ b/drivers/iio/temperature/mlx90614.c
> @@ -565,7 +565,7 @@ static int mlx90614_probe_num_ir_sensors(struct i2c_client *client)
>         const struct mlx_chip_info *chip_info = data->chip_info;
>         s32 ret;
>
> -       if (chip_info->dual_channel)
> +       if (!chip_info->dual_channel)
>                 return 0;
>
>         ret = i2c_smbus_read_word_data(client, chip_info->op_eeprom_config1);
> --
> 2.43.0
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] iio: temperature: mlx90614: Fix dual channel probe condition check
  2026-09-17 11:27 ` Crt Mori
@ 2026-09-17 13:16   ` Salah Triki
  0 siblings, 0 replies; 3+ messages in thread
From: Salah Triki @ 2026-09-17 13:16 UTC (permalink / raw)
  To: Crt Mori
  Cc: Jonathan Cameron, David Lechner, Nuno Sá,
	Andy Shevchenko, linux-iio, linux-kernel

Hi Crt,

Thanks for your feedback.

Actually, the patch primarily fixes the behavior for the MLX90614.

In the current codebase, MLX90614 has `chip_info->dual_channel = true`.
Because `mlx90614_probe_num_ir_sensors()` checks
`if (chip_info->dual_channel)`, it returns 0 immediately for MLX90614
without reading the EEPROM CONFIG1 register. As a result, dual-channel
MLX90614 sensors are incorrectly registered as single-channel devices.

For MLX90615 (`dual_channel = false`), the condition was bypassed, causing
an unnecessary SMBus read to EEPROM CONFIG1, even though MLX90615 only
supports a single object channel.

By changing the check to `if (!chip_info->dual_channel)`, we fix both
issues:
1. MLX90614 correctly reads EEPROM CONFIG1 to detect whether it operates
in single or dual channel mode.
2. MLX90615 skips the EEPROM read entirely.

I don't have physical hardware to test this on; this bug was spotted via
code inspection.

Best regards,
Salah

On Thu, Sep 17, 2026 at 01:27:48PM +0200, Crt Mori wrote:
> So this fix is for the MLX90615, which is registered as single channel
> operation? Did you test on 90614 as well?
> 
> Best regards,
> Crt
> 
> Crt Mori
> 
> Melexis Technologies NV
> Transportstraat 1
> 3980 Tessenderlo
> 
> Mobile: +32 492 46 22 15
> E-mail: cmo@melexis.com
> Website: www.melexis.com
> 
> ----------------------------------------------------------
> The contents of this e-mail are CONFIDENTIAL AND PROPRIETARY. Please
> read our disclaimer at http://www.melexis.com/mailpolicy
> 
> 
> On Thu, 17 Sept 2026 at 13:01, Salah Triki <salah.triki@gmail.com> wrote:
> >
> > In mlx90614_probe_num_ir_sensors(), the check on chip_info->dual_channel
> > is inverted.
> >
> > Currently, if dual_channel is true (MLX90614), the function returns 0
> > immediately without checking op_eeprom_config1. This forces all MLX90614
> > devices to be registered as single sensor (num_channels = 2), making the
> > second object temperature channel inaccessible.
> >
> > Conversely, if dual_channel is false (MLX90615), the function skips the
> > early return and performs an unnecessary SMBus read on EEPROM CONFIG1 even
> > though MLX90615 does not support dual channel operation.
> >
> > Fix this by negating the condition so that single-channel chips return
> > early with 0, while dual-channel capable chips (MLX90614) proceed to read
> > the EEPROM configuration register to detect whether 1 or 2 object channels
> > are present.
> >
> > Fixes: 3d5ead238bc8 ("iio: mlx90614: Factor our register IO and constants into model specific descriptor")
> > Assisted-by: LLM
> > Signed-off-by: Salah Triki <salah.triki@gmail.com>
> > ---
> >  drivers/iio/temperature/mlx90614.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/iio/temperature/mlx90614.c b/drivers/iio/temperature/mlx90614.c
> > index 27d6ab5f5d7a..4f79da1f905e 100644
> > --- a/drivers/iio/temperature/mlx90614.c
> > +++ b/drivers/iio/temperature/mlx90614.c
> > @@ -565,7 +565,7 @@ static int mlx90614_probe_num_ir_sensors(struct i2c_client *client)
> >         const struct mlx_chip_info *chip_info = data->chip_info;
> >         s32 ret;
> >
> > -       if (chip_info->dual_channel)
> > +       if (!chip_info->dual_channel)
> >                 return 0;
> >
> >         ret = i2c_smbus_read_word_data(client, chip_info->op_eeprom_config1);
> > --
> > 2.43.0
> >

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-09-17 13:16 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-17 11:01 [PATCH] iio: temperature: mlx90614: Fix dual channel probe condition check Salah Triki
2026-09-17 11:27 ` Crt Mori
2026-09-17 13:16   ` Salah Triki

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®