Re: [PATCH] iio: hid-sensor: als: scale each channel individually

From: srinivas pandruvada

Date: Mon Jul 27 2026 - 11:39:08 EST


On Thu, 2026-07-23 at 01:18 +0800, Daniel Schaefer via B4 Relay wrote:
> From: Daniel Schaefer <dhs@xxxxxxxxxx>
>
> Some sensors have multiple channels (not just brightness but color
> ALS
> sensors) with different scaling factors.
>
> Tested on Asus ProArt PX13 laptop by Sven.
>
> Signed-off-by: Daniel Schaefer <dhs@xxxxxxxxxx>
> Link:
> https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/-/merge_requests/413
> Cc: Sven Vainküla <sven@xxxxxxxxxxxxxxxxxx>
> Cc: Jiri Kosina <jikos@xxxxxxxxxx>
> Cc: Jonathan Cameron <jic23@xxxxxxxxxx>
> Cc: Srinivas Pandruvada <srinivas.pandruvada@xxxxxxxxxxxxxxx>
> Cc: David Lechner <dlechner@xxxxxxxxxxxx>
> Cc: Nuno Sá <nuno.sa@xxxxxxxxxx>
> Cc: Andy Shevchenko <andy@xxxxxxxxxx>
> Cc: linux-input@xxxxxxxxxxxxxxx
> Cc: linux-iio@xxxxxxxxxxxxxxx
> Cc: linux@xxxxxxxxxx

Acked-by: Srinivas Pandruvada <srinivas.pandruvada@xxxxxxxxxxxxxxx>

> ---
>  drivers/iio/light/hid-sensor-als.c | 22 ++++++++++++----------
>  1 file changed, 12 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/iio/light/hid-sensor-als.c
> b/drivers/iio/light/hid-sensor-als.c
> index 384572844162..232cb58e0a9f 100644
> --- a/drivers/iio/light/hid-sensor-als.c
> +++ b/drivers/iio/light/hid-sensor-als.c
> @@ -33,9 +33,9 @@ struct als_state {
>   u32 illum[CHANNEL_SCAN_INDEX_MAX];
>   aligned_s64 timestamp;
>   } scan;
> - int scale_pre_decml;
> - int scale_post_decml;
> - int scale_precision;
> + int scale_pre_decml[CHANNEL_SCAN_INDEX_MAX];
> + int scale_post_decml[CHANNEL_SCAN_INDEX_MAX];
> + int scale_precision[CHANNEL_SCAN_INDEX_MAX];
>   int value_offset;
>   int num_channels;
>   s64 timestamp;
> @@ -186,9 +186,11 @@ static int als_read_raw(struct iio_dev
> *indio_dev,
>   ret_type = IIO_VAL_INT;
>   break;
>   case IIO_CHAN_INFO_SCALE:
> - *val = als_state->scale_pre_decml;
> - *val2 = als_state->scale_post_decml;
> - ret_type = als_state->scale_precision;
> + if (chan->scan_index >= CHANNEL_SCAN_INDEX_MAX)
> + return -EINVAL;
> + *val = als_state->scale_pre_decml[chan->scan_index];
> + *val2 = als_state->scale_post_decml[chan-
> >scan_index];
> + ret_type = als_state->scale_precision[chan-
> >scan_index];
>   break;
>   case IIO_CHAN_INFO_OFFSET:
>   *val = als_state->value_offset;
> @@ -338,6 +340,10 @@ static int als_parse_report(struct
> platform_device *pdev,
>   als_adjust_channel_bit_mask(channels, index, st-
> >als[i].size);
>   ++index;
>  
> + st->scale_precision[i] =
> hid_sensor_format_scale(usage_id,
> + &st->als[i], &st-
> >scale_pre_decml[i],
> + &st->scale_post_decml[i]);
> +
>   dev_dbg(&pdev->dev, "als %x:%x\n", st->als[i].index,
>   st->als[i].report_id);
>   }
> @@ -347,10 +353,6 @@ static int als_parse_report(struct
> platform_device *pdev,
>   if (index)
>   ret = 0;
>  
> - st->scale_precision = hid_sensor_format_scale(usage_id,
> - &st-
> >als[CHANNEL_SCAN_INDEX_INTENSITY],
> - &st->scale_pre_decml, &st-
> >scale_post_decml);
> -
>   return ret;
>  }
>  
>
> ---
> base-commit: 194a48576843858afcd9c00ed4f105ec2b398e6c
> change-id: 20260723-chromaticity-88fec417f00c
>
> Best regards,