Re: [PATCH] iio: temperature: mlx90614: Fix dual channel probe condition check

From: Crt Mori

Date: Thu Sep 17 2026 - 07:42:07 EST


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@xxxxxxxxxxx
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@xxxxxxxxx> 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@xxxxxxxxx>
> ---
> 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
>