HID: amd_sfh: Move sensor discovery before HID device initialization
authorBasavaraj Natikar <Basavaraj.Natikar@amd.com>
Thu, 18 Jul 2024 11:16:16 +0000 (16:46 +0530)
committerBenjamin Tissoires <bentiss@kernel.org>
Tue, 23 Jul 2024 17:09:38 +0000 (19:09 +0200)
Sensors discovery is independent of HID device initialization. If sensor
discovery fails after HID initialization, then the HID device needs to be
deinitialized. Therefore, sensors discovery should be moved before HID
device initialization.

Fixes: 7bcfdab3f0c6 ("HID: amd_sfh: if no sensors are enabled, clean up")
Tested-by: Aurinko <petrvelicka@tuta.io>
Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
Link: https://patch.msgid.link/20240718111616.3012155-1-Basavaraj.Natikar@amd.com
Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
drivers/hid/amd-sfh-hid/amd_sfh_client.c

index bdb578e0899f55bb1b632cd17ef10200b52e3dd9..4b59687ff5d821ebb3791e1288592b6c9f6f159d 100644 (file)
@@ -288,12 +288,22 @@ int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
                mp2_ops->start(privdata, info);
                cl_data->sensor_sts[i] = amd_sfh_wait_for_response
                                                (privdata, cl_data->sensor_idx[i], SENSOR_ENABLED);
+
+               if (cl_data->sensor_sts[i] == SENSOR_ENABLED)
+                       cl_data->is_any_sensor_enabled = true;
+       }
+
+       if (!cl_data->is_any_sensor_enabled ||
+           (mp2_ops->discovery_status && mp2_ops->discovery_status(privdata) == 0)) {
+               dev_warn(dev, "Failed to discover, sensors not enabled is %d\n",
+                        cl_data->is_any_sensor_enabled);
+               rc = -EOPNOTSUPP;
+               goto cleanup;
        }
 
        for (i = 0; i < cl_data->num_hid_devices; i++) {
                cl_data->cur_hid_dev = i;
                if (cl_data->sensor_sts[i] == SENSOR_ENABLED) {
-                       cl_data->is_any_sensor_enabled = true;
                        rc = amdtp_hid_probe(i, cl_data);
                        if (rc)
                                goto cleanup;
@@ -305,12 +315,6 @@ int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
                        cl_data->sensor_sts[i]);
        }
 
-       if (!cl_data->is_any_sensor_enabled ||
-          (mp2_ops->discovery_status && mp2_ops->discovery_status(privdata) == 0)) {
-               dev_warn(dev, "Failed to discover, sensors not enabled is %d\n", cl_data->is_any_sensor_enabled);
-               rc = -EOPNOTSUPP;
-               goto cleanup;
-       }
        schedule_delayed_work(&cl_data->work_buffer, msecs_to_jiffies(AMD_SFH_IDLE_LOOP));
        return 0;