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);
                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:
                                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_LIGHT_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;