HID: amd_sfh: Support for additional light sensor
authorBasavaraj Natikar <Basavaraj.Natikar@amd.com>
Tue, 11 Apr 2023 16:19:01 +0000 (21:49 +0530)
committerJiri Kosina <jkosina@suse.cz>
Thu, 13 Apr 2023 13:57:14 +0000 (15:57 +0200)
There is support for additional light sensors in the SFH firmware.
As a result, add support for additional light sensors.

Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/amd-sfh-hid/amd_sfh_client.c
drivers/hid/amd-sfh-hid/amd_sfh_pcie.c
drivers/hid/amd-sfh-hid/amd_sfh_pcie.h
drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c

index c751d12..d9b7b01 100644 (file)
@@ -147,6 +147,7 @@ static const char *get_sensor_name(int idx)
        case mag_idx:
                return "magnetometer";
        case als_idx:
+       case ACS_IDX: /* ambient color sensor */
                return "ALS";
        case HPD_IDX:
                return "HPD";
index c936d6a..2530fa9 100644 (file)
@@ -29,6 +29,7 @@
 #define MAGNO_EN       BIT(2)
 #define HPD_EN         BIT(16)
 #define ALS_EN         BIT(19)
+#define ACS_EN         BIT(22)
 
 static int sensor_mask_override = -1;
 module_param_named(sensor_mask, sensor_mask_override, int, 0444);
@@ -233,6 +234,9 @@ int amd_mp2_get_sensor_num(struct amd_mp2_dev *privdata, u8 *sensor_id)
        if (HPD_EN & activestatus)
                sensor_id[num_of_sensors++] = HPD_IDX;
 
+       if (ACS_EN & activestatus)
+               sensor_id[num_of_sensors++] = ACS_IDX;
+
        return num_of_sensors;
 }
 
index dfb7cab..70add75 100644 (file)
@@ -23,6 +23,7 @@
 #define V2_STATUS      0x2
 
 #define HPD_IDX                16
+#define ACS_IDX                22
 
 #define SENSOR_DISCOVERY_STATUS_MASK           GENMASK(5, 3)
 #define SENSOR_DISCOVERY_STATUS_SHIFT          3
index f9a8c02..8716a05 100644 (file)
@@ -48,6 +48,7 @@ static int get_report_descriptor(int sensor_idx, u8 *rep_desc)
                       sizeof(comp3_report_descriptor));
                break;
        case als_idx: /* ambient light sensor */
+       case ACS_IDX: /* ambient color sensor */
                memset(rep_desc, 0, sizeof(als_report_descriptor));
                memcpy(rep_desc, als_report_descriptor,
                       sizeof(als_report_descriptor));
@@ -97,6 +98,7 @@ static u32 get_descr_sz(int sensor_idx, int descriptor_name)
                }
                break;
        case als_idx:
+       case ACS_IDX: /* ambient color sensor */
                switch (descriptor_name) {
                case descr_size:
                        return sizeof(als_report_descriptor);
@@ -174,6 +176,7 @@ static u8 get_feature_report(int sensor_idx, int report_id, u8 *feature_report)
                report_size = sizeof(magno_feature);
                break;
        case als_idx:  /* ambient light sensor */
+       case ACS_IDX: /* ambient color sensor */
                get_common_features(&als_feature.common_property, report_id);
                als_feature.als_change_sesnitivity = HID_DEFAULT_SENSITIVITY;
                als_feature.als_sensitivity_min = HID_DEFAULT_MIN_VALUE;
@@ -245,6 +248,7 @@ static u8 get_input_report(u8 current_index, int sensor_idx, int report_id,
                report_size = sizeof(magno_input);
                break;
        case als_idx: /* Als */
+       case ACS_IDX: /* ambient color sensor */
                get_common_inputs(&als_input.common_property, report_id);
                /* For ALS ,V2 Platforms uses C2P_MSG5 register instead of DRAM access method */
                if (supported_input == V2_STATUS)