Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iio: hid-sensor-als: Add light chromaticity support

On some platforms, ambient color sensors also support the x and y light
colors, which represent the coordinates on the CIE 1931 chromaticity
diagram. Add light chromaticity x and y.

Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Link: https://lore.kernel.org/r/20240205185926.3030521-5-srinivas.pandruvada@linux.intel.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Basavaraj Natikar and committed by
Jonathan Cameron
2ec17b19 3765d426

+49
+46
drivers/iio/light/hid-sensor-als.c
··· 17 17 CHANNEL_SCAN_INDEX_INTENSITY, 18 18 CHANNEL_SCAN_INDEX_ILLUM, 19 19 CHANNEL_SCAN_INDEX_COLOR_TEMP, 20 + CHANNEL_SCAN_INDEX_CHROMATICITY_X, 21 + CHANNEL_SCAN_INDEX_CHROMATICITY_Y, 20 22 CHANNEL_SCAN_INDEX_MAX 21 23 }; 22 24 ··· 47 45 HID_USAGE_SENSOR_LIGHT_ILLUM, 48 46 HID_USAGE_SENSOR_LIGHT_ILLUM, 49 47 HID_USAGE_SENSOR_LIGHT_COLOR_TEMPERATURE, 48 + HID_USAGE_SENSOR_LIGHT_CHROMATICITY_X, 49 + HID_USAGE_SENSOR_LIGHT_CHROMATICITY_Y, 50 50 }; 51 51 52 52 static const u32 als_sensitivity_addresses[] = { ··· 89 85 BIT(IIO_CHAN_INFO_HYSTERESIS) | 90 86 BIT(IIO_CHAN_INFO_HYSTERESIS_RELATIVE), 91 87 .scan_index = CHANNEL_SCAN_INDEX_COLOR_TEMP, 88 + }, 89 + { 90 + .type = IIO_CHROMATICITY, 91 + .modified = 1, 92 + .channel2 = IIO_MOD_X, 93 + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), 94 + .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | 95 + BIT(IIO_CHAN_INFO_SCALE) | 96 + BIT(IIO_CHAN_INFO_SAMP_FREQ) | 97 + BIT(IIO_CHAN_INFO_HYSTERESIS) | 98 + BIT(IIO_CHAN_INFO_HYSTERESIS_RELATIVE), 99 + .scan_index = CHANNEL_SCAN_INDEX_CHROMATICITY_X, 100 + }, 101 + { 102 + .type = IIO_CHROMATICITY, 103 + .modified = 1, 104 + .channel2 = IIO_MOD_Y, 105 + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), 106 + .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_OFFSET) | 107 + BIT(IIO_CHAN_INFO_SCALE) | 108 + BIT(IIO_CHAN_INFO_SAMP_FREQ) | 109 + BIT(IIO_CHAN_INFO_HYSTERESIS) | 110 + BIT(IIO_CHAN_INFO_HYSTERESIS_RELATIVE), 111 + .scan_index = CHANNEL_SCAN_INDEX_CHROMATICITY_Y, 92 112 }, 93 113 IIO_CHAN_SOFT_TIMESTAMP(CHANNEL_SCAN_INDEX_TIMESTAMP) 94 114 }; ··· 156 128 report_id = als_state->als[chan->scan_index].report_id; 157 129 min = als_state->als[chan->scan_index].logical_minimum; 158 130 address = HID_USAGE_SENSOR_LIGHT_COLOR_TEMPERATURE; 131 + break; 132 + case CHANNEL_SCAN_INDEX_CHROMATICITY_X: 133 + report_id = als_state->als[chan->scan_index].report_id; 134 + min = als_state->als[chan->scan_index].logical_minimum; 135 + address = HID_USAGE_SENSOR_LIGHT_CHROMATICITY_X; 136 + break; 137 + case CHANNEL_SCAN_INDEX_CHROMATICITY_Y: 138 + report_id = als_state->als[chan->scan_index].report_id; 139 + min = als_state->als[chan->scan_index].logical_minimum; 140 + address = HID_USAGE_SENSOR_LIGHT_CHROMATICITY_Y; 159 141 break; 160 142 default: 161 143 report_id = -1; ··· 289 251 break; 290 252 case HID_USAGE_SENSOR_LIGHT_COLOR_TEMPERATURE: 291 253 als_state->scan.illum[CHANNEL_SCAN_INDEX_COLOR_TEMP] = sample_data; 254 + ret = 0; 255 + break; 256 + case HID_USAGE_SENSOR_LIGHT_CHROMATICITY_X: 257 + als_state->scan.illum[CHANNEL_SCAN_INDEX_CHROMATICITY_X] = sample_data; 258 + ret = 0; 259 + break; 260 + case HID_USAGE_SENSOR_LIGHT_CHROMATICITY_Y: 261 + als_state->scan.illum[CHANNEL_SCAN_INDEX_CHROMATICITY_Y] = sample_data; 292 262 ret = 0; 293 263 break; 294 264 case HID_USAGE_SENSOR_TIME_TIMESTAMP:
+3
include/linux/hid-sensor-ids.h
··· 22 22 #define HID_USAGE_SENSOR_DATA_LIGHT 0x2004d0 23 23 #define HID_USAGE_SENSOR_LIGHT_ILLUM 0x2004d1 24 24 #define HID_USAGE_SENSOR_LIGHT_COLOR_TEMPERATURE 0x2004d2 25 + #define HID_USAGE_SENSOR_LIGHT_CHROMATICITY 0x2004d3 26 + #define HID_USAGE_SENSOR_LIGHT_CHROMATICITY_X 0x2004d4 27 + #define HID_USAGE_SENSOR_LIGHT_CHROMATICITY_Y 0x2004d5 25 28 26 29 /* PROX (200011) */ 27 30 #define HID_USAGE_SENSOR_PROX 0x200011