On Tue, 2023-09-19 at 13:40 +0530, Basavaraj Natikar wrote: > Sensor hub attributes can be extended to support more channels. > Repeat > the reading for the two existing channels and store them separately. > It > still operates in the same manner as before where there was just one > entry. So in order to support more sensor hub attributes for ALS use > channel index to get specific sensor hub attributes. > > Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@xxxxxxx> Acked-by: Srinivas Pandruvada<srinivas.pandruvada@xxxxxxxxxxxxxxx> > --- > drivers/iio/light/hid-sensor-als.c | 38 ++++++++++++++++------------ > -- > 1 file changed, 20 insertions(+), 18 deletions(-) > > diff --git a/drivers/iio/light/hid-sensor-als.c > b/drivers/iio/light/hid-sensor-als.c > index eb1aedad7edc..efb1f8862b28 100644 > --- a/drivers/iio/light/hid-sensor-als.c > +++ b/drivers/iio/light/hid-sensor-als.c > @@ -24,7 +24,7 @@ enum { > struct als_state { > struct hid_sensor_hub_callbacks callbacks; > struct hid_sensor_common common_attributes; > - struct hid_sensor_hub_attribute_info als_illum; > + struct hid_sensor_hub_attribute_info > als[CHANNEL_SCAN_INDEX_MAX]; > struct { > u32 illum[CHANNEL_SCAN_INDEX_MAX]; > u64 timestamp __aligned(8); > @@ -99,8 +99,8 @@ static int als_read_raw(struct iio_dev *indio_dev, > switch (chan->scan_index) { > case CHANNEL_SCAN_INDEX_INTENSITY: > case CHANNEL_SCAN_INDEX_ILLUM: > - report_id = als_state->als_illum.report_id; > - min = als_state->als_illum.logical_minimum; > + report_id = als_state->als[chan- > >scan_index].report_id; > + min = als_state->als[chan- > >scan_index].logical_minimum; > address = HID_USAGE_SENSOR_LIGHT_ILLUM; > break; > default: > @@ -242,22 +242,24 @@ static int als_parse_report(struct > platform_device *pdev, > struct als_state *st) > { > int ret; > + int i; > + > + for (i = 0; i <= CHANNEL_SCAN_INDEX_ILLUM; ++i) { > + ret = sensor_hub_input_get_attribute_info(hsdev, > + HID_INPUT_REPORT, > + usage_id, > + HID_USAGE_SENSOR_LIGH > T_ILLUM, > + &st->als[i]); > + if (ret < 0) > + return ret; > + als_adjust_channel_bit_mask(channels, i, st- > >als[i].size); > + > + dev_dbg(&pdev->dev, "als %x:%x\n", st->als[i].index, > + st->als[i].report_id); > + } > > - ret = sensor_hub_input_get_attribute_info(hsdev, > HID_INPUT_REPORT, > - usage_id, > - HID_USAGE_SENSOR_LIGHT_ILLUM, > - &st->als_illum); > - if (ret < 0) > - return ret; > - als_adjust_channel_bit_mask(channels, > CHANNEL_SCAN_INDEX_INTENSITY, > - st->als_illum.size); > - als_adjust_channel_bit_mask(channels, > CHANNEL_SCAN_INDEX_ILLUM, > - st->als_illum.size); > - > - dev_dbg(&pdev->dev, "als %x:%x\n", st->als_illum.index, > - st->als_illum.report_id); > - > - st->scale_precision = hid_sensor_format_scale(usage_id, &st- > >als_illum, > + 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;