Re: [PATCH] iio: light: tsl2772: fix ALS calibscale readback
From: David Lechner
Date: Sat Jul 25 2026 - 17:27:53 EST
On 7/24/26 6:46 PM, Yuanshen Cao wrote:
> The read_raw() implementation uses IIO_LIGHT to distinguish between the
> ambient light and proximity channels when handling
> IIO_CHAN_INFO_CALIBSCALE.
>
> However, the ALS channel is registered as IIO_INTENSITY, while
> write_raw() correctly writes to IIO_INTENSITY. As a result, reading
> in_intensity0_calibscale incorrectly returns the proximity gain instead
> of the ALS gain.
>
> This causes the following user-visible behavior:
> - Writing in_intensity0_calibscale appears to have no effect because the
> readback reports the proximity gain.
> - Writing in_proximity0_calibscale causes both in_proximity0_calibscale
> and in_intensity0_calibscale to report the same value.
>
> Fix this by checking for IIO_INTENSITY in read_raw(), matching the
> channel definition and the existing write_raw() implementation.
>
> Signed-off-by: Yuanshen Cao <alex.caoys@xxxxxxxxx>
> ---
> drivers/iio/light/tsl2772.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/iio/light/tsl2772.c b/drivers/iio/light/tsl2772.c
> index 244f44379c36..2287585711c6 100644
> --- a/drivers/iio/light/tsl2772.c
> +++ b/drivers/iio/light/tsl2772.c
> @@ -1274,7 +1274,7 @@ static int tsl2772_read_raw(struct iio_dev *indio_dev,
> }
> break;
> case IIO_CHAN_INFO_CALIBSCALE:
> - if (chan->type == IIO_LIGHT)
> + if (chan->type == IIO_INTENSITY)
> *val = tsl2772_als_gain[chip->settings.als_gain];
> else
> *val = tsl2772_prox_gain[chip->settings.prox_gain];
>
> ---
> base-commit: 1590cf0329716306e948a8fc29f1d3ee87d3989f
> change-id: 20260724-tsl2772-calibscale-fix-0cc42518d5fc
>
> Best regards,
> --
> Yuanshen Cao <alex.caoys@xxxxxxxxx>
>
Reviewed-by: David Lechner <dlechner@xxxxxxxxxxxx>