mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
HID: amd_sfh: Handle "no sensors" enabled for SFH1.1
[ Upstream commit8455cbb259] Based on num_hid_devices, each sensor device is initialized. If "no sensors" is initialized, amd_sfh work initialization and scheduling doesn’t make sense and returns EOPNOTSUPP to stop driver probe. Hence, add a check for "no sensors" enabled to handle the special case. Fixes:93ce5e0231("HID: amd_sfh: Implement SFH1.1 functionality") Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
198474bef3
commit
8ba48e58ba
@@ -112,6 +112,7 @@ static int amd_sfh1_1_hid_client_init(struct amd_mp2_dev *privdata)
|
|||||||
cl_data->num_hid_devices = amd_sfh_get_sensor_num(privdata, &cl_data->sensor_idx[0]);
|
cl_data->num_hid_devices = amd_sfh_get_sensor_num(privdata, &cl_data->sensor_idx[0]);
|
||||||
if (cl_data->num_hid_devices == 0)
|
if (cl_data->num_hid_devices == 0)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
cl_data->is_any_sensor_enabled = false;
|
||||||
|
|
||||||
INIT_DELAYED_WORK(&cl_data->work, amd_sfh_work);
|
INIT_DELAYED_WORK(&cl_data->work, amd_sfh_work);
|
||||||
INIT_DELAYED_WORK(&cl_data->work_buffer, amd_sfh_work_buffer);
|
INIT_DELAYED_WORK(&cl_data->work_buffer, amd_sfh_work_buffer);
|
||||||
@@ -170,6 +171,7 @@ static int amd_sfh1_1_hid_client_init(struct amd_mp2_dev *privdata)
|
|||||||
status = (status == 0) ? SENSOR_ENABLED : SENSOR_DISABLED;
|
status = (status == 0) ? SENSOR_ENABLED : SENSOR_DISABLED;
|
||||||
|
|
||||||
if (status == SENSOR_ENABLED) {
|
if (status == SENSOR_ENABLED) {
|
||||||
|
cl_data->is_any_sensor_enabled = true;
|
||||||
cl_data->sensor_sts[i] = SENSOR_ENABLED;
|
cl_data->sensor_sts[i] = SENSOR_ENABLED;
|
||||||
rc = amdtp_hid_probe(i, cl_data);
|
rc = amdtp_hid_probe(i, cl_data);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
@@ -186,12 +188,21 @@ static int amd_sfh1_1_hid_client_init(struct amd_mp2_dev *privdata)
|
|||||||
cl_data->sensor_sts[i]);
|
cl_data->sensor_sts[i]);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
cl_data->sensor_sts[i] = SENSOR_DISABLED;
|
||||||
}
|
}
|
||||||
dev_dbg(dev, "sid 0x%x (%s) status 0x%x\n",
|
dev_dbg(dev, "sid 0x%x (%s) status 0x%x\n",
|
||||||
cl_data->sensor_idx[i], get_sensor_name(cl_data->sensor_idx[i]),
|
cl_data->sensor_idx[i], get_sensor_name(cl_data->sensor_idx[i]),
|
||||||
cl_data->sensor_sts[i]);
|
cl_data->sensor_sts[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!cl_data->is_any_sensor_enabled) {
|
||||||
|
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));
|
schedule_delayed_work(&cl_data->work_buffer, msecs_to_jiffies(AMD_SFH_IDLE_LOOP));
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user