HID: amd_sfh: Move hid probe after sensor is enabled
authorBasavaraj Natikar <Basavaraj.Natikar@amd.com>
Mon, 2 Aug 2021 14:03:39 +0000 (19:33 +0530)
committerJiri Kosina <jkosina@suse.cz>
Fri, 20 Aug 2021 12:48:49 +0000 (14:48 +0200)
Earlier platforms don’t have sensor status checking mechanism.
Sensors are always enabled without checking sensor status.
Hence invoke hid probe only after the sensor is enabled by
checking sensor status.

Reviewed-by: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
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

index b7b66a1eb9713db89ef5a9625cb059205bef7eca..4982ccf9dc25b15ff60902987f664d2e7c5e5497 100644 (file)
@@ -205,16 +205,23 @@ int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
                        goto cleanup;
                }
                rc = get_report_descriptor(cl_idx, cl_data->report_descr[i]);
-               if (rc)
-                       return rc;
-               rc = amdtp_hid_probe(cl_data->cur_hid_dev, cl_data);
                if (rc)
                        return rc;
                privdata->mp2_ops->start(privdata, info);
                status = amd_sfh_wait_for_response
                                (privdata, cl_data->sensor_idx[i], SENSOR_ENABLED);
-               if (status == SENSOR_ENABLED)
+               if (status == SENSOR_ENABLED) {
                        cl_data->sensor_sts[i] = SENSOR_ENABLED;
+                       rc = amdtp_hid_probe(cl_data->cur_hid_dev, cl_data);
+                       if (rc) {
+                               privdata->mp2_ops->stop(privdata, cl_data->sensor_idx[i]);
+                               status = amd_sfh_wait_for_response
+                                       (privdata, cl_data->sensor_idx[i], SENSOR_DISABLED);
+                               if (status != SENSOR_ENABLED)
+                                       cl_data->sensor_sts[i] = SENSOR_DISABLED;
+                               goto cleanup;
+                       }
+               }
        }
        schedule_delayed_work(&cl_data->work_buffer, msecs_to_jiffies(AMD_SFH_IDLE_LOOP));
        return 0;