Re: [PATCH 1/2] iio: light: cm3323: fix reg_conf not being initialized correctly

From: Andy Shevchenko

Date: Thu Apr 02 2026 - 12:15:16 EST


On Thu, Apr 02, 2026 at 05:17:29PM +0200, Aldo Conte wrote:
> The code stores the return value of i2c_smbus_write_word_data()
> in data->reg_conf; however, this value represents the result
> of the write operation and not the value actually written to
> the configuration register. This meant that the contents of
> data->reg_conf did not truly reflect the contents
> of the hardware register.
>
> Instead, save the value of the register before the write
> and use this value in the I2C write.
>
> The bug was found by code inspection: i2c_smbus_write_word_data()
> returns 0 on success, not the value written to the register.

> Tested using i2c-stub on a Raspberry Pi 3B running a custom 6.19.10
> kernel. Before loading the driver , the configuration register 0x00

Extra space needs to be removed.

> CM3323_CMD_CONF was populated with 0x0030 using
> i2cset -y 11 0x10 0x00 0x0030 w, encoding an integration time of 320ms

I recommend to use backquotes when providing a shell commands.

`i2cset -y 11 0x10 0x00 0x0030 w`

> in bits[6:4].
>
> Due to the error into the initialization of data->reg_conf in
> cm3323_init(), the print of integration_time returns 0.040000
> instead of the expected 0.320000. This happens because the read of the
> integration_time depends on cm3323_get_it_bits() that is based on the
> value of data->reg_conf, which is erroneously set to 0.
>
> With this fix applied, data->reg_conf correctly saves 0x0030 after init
> and the successive integration_time reports 0.320000 as expected.

Overall a good catch!

--
With Best Regards,
Andy Shevchenko