Skip to content

Commit 8455cbb

Browse files
basuamdJiri Kosina
authored andcommitted
HID: amd_sfh: Handle "no sensors" enabled for SFH1.1
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: 93ce5e0 ("HID: amd_sfh: Implement SFH1.1 functionality") Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
1 parent 571dc8f commit 8455cbb

1 file changed

Lines changed: 11 additions & 0 deletions

File tree

drivers/hid/amd-sfh-hid/sfh1_1/amd_sfh_init.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ static int amd_sfh1_1_hid_client_init(struct amd_mp2_dev *privdata)
112112
cl_data->num_hid_devices = amd_sfh_get_sensor_num(privdata, &cl_data->sensor_idx[0]);
113113
if (cl_data->num_hid_devices == 0)
114114
return -ENODEV;
115+
cl_data->is_any_sensor_enabled = false;
115116

116117
INIT_DELAYED_WORK(&cl_data->work, amd_sfh_work);
117118
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)
170171
status = (status == 0) ? SENSOR_ENABLED : SENSOR_DISABLED;
171172

172173
if (status == SENSOR_ENABLED) {
174+
cl_data->is_any_sensor_enabled = true;
173175
cl_data->sensor_sts[i] = SENSOR_ENABLED;
174176
rc = amdtp_hid_probe(i, cl_data);
175177
if (rc) {
@@ -186,12 +188,21 @@ static int amd_sfh1_1_hid_client_init(struct amd_mp2_dev *privdata)
186188
cl_data->sensor_sts[i]);
187189
goto cleanup;
188190
}
191+
} else {
192+
cl_data->sensor_sts[i] = SENSOR_DISABLED;
189193
}
190194
dev_dbg(dev, "sid 0x%x (%s) status 0x%x\n",
191195
cl_data->sensor_idx[i], get_sensor_name(cl_data->sensor_idx[i]),
192196
cl_data->sensor_sts[i]);
193197
}
194198

199+
if (!cl_data->is_any_sensor_enabled) {
200+
dev_warn(dev, "Failed to discover, sensors not enabled is %d\n",
201+
cl_data->is_any_sensor_enabled);
202+
rc = -EOPNOTSUPP;
203+
goto cleanup;
204+
}
205+
195206
schedule_delayed_work(&cl_data->work_buffer, msecs_to_jiffies(AMD_SFH_IDLE_LOOP));
196207
return 0;
197208

0 commit comments

Comments
 (0)