Re: [PATCH] iio: light: cm3232: Reset before reading HW ID

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 14 Nov 2024 10:13:23 +0100
Cibil Pankiras <cibil.pankiras@xxxxxxxx> wrote:

> According to the datasheet, the chip requires a reset before any data
> can be read. This commit moves the device identification logic to
> occur after the reset to ensure proper initialization.
> 
> Cc: Kevin Tsai <ktsai@xxxxxxxxxxxxxxxx>
> Signed-off-by: Cibil Pankiras <cibil.pankiras@xxxxxxxx>
Hi Cibil,

This is an interesting corner, because if the ID register isn't going
to match, chances are that write just wrote wrong data to something else.

Ah well, the firmware should be correct so I'm not sure I care about
that change.

Applied but to the togreg branch of iio.git, not as a fix because
it does make me a little nervous and I'd like to not rush it in!

Thanks,

Jonathan

> ---
>  drivers/iio/light/cm3232.c | 18 +++++++++---------
>  1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/iio/light/cm3232.c b/drivers/iio/light/cm3232.c
> index b6288dd25bbf..5b00ad2a014e 100644
> --- a/drivers/iio/light/cm3232.c
> +++ b/drivers/iio/light/cm3232.c
> @@ -89,6 +89,15 @@ static int cm3232_reg_init(struct cm3232_chip *chip)
>  
>  	chip->als_info = &cm3232_als_info_default;
>  
> +	/* Disable and reset device */
> +	chip->regs_cmd = CM3232_CMD_ALS_DISABLE | CM3232_CMD_ALS_RESET;
> +	ret = i2c_smbus_write_byte_data(client, CM3232_REG_ADDR_CMD,
> +					chip->regs_cmd);
> +	if (ret < 0) {
> +		dev_err(&chip->client->dev, "Error writing reg_cmd\n");
> +		return ret;
> +	}
> +
>  	/* Identify device */
>  	ret = i2c_smbus_read_word_data(client, CM3232_REG_ADDR_ID);
>  	if (ret < 0) {
> @@ -99,15 +108,6 @@ static int cm3232_reg_init(struct cm3232_chip *chip)
>  	if ((ret & 0xFF) != chip->als_info->hw_id)
>  		return -ENODEV;
>  
> -	/* Disable and reset device */
> -	chip->regs_cmd = CM3232_CMD_ALS_DISABLE | CM3232_CMD_ALS_RESET;
> -	ret = i2c_smbus_write_byte_data(client, CM3232_REG_ADDR_CMD,
> -					chip->regs_cmd);
> -	if (ret < 0) {
> -		dev_err(&chip->client->dev, "Error writing reg_cmd\n");
> -		return ret;
> -	}
> -
>  	/* Register default value */
>  	chip->regs_cmd = chip->als_info->regs_cmd_default;
>  





[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux