Skip to content

Commit 368d4e5

Browse files
bentissJiri Kosina
authored andcommitted
HID: logitech-dj: break out testing of validity of dj_device
We can do once the test of the validity of the dj_device, which removes some duplicated code in various functions. Signed-off-by: Benjamin Tissoires <[email protected]> Signed-off-by: Jiri Kosina <[email protected]>
1 parent ff0c57a commit 368d4e5

File tree

1 file changed

+11
-24
lines changed

1 file changed

+11
-24
lines changed

drivers/hid/hid-logitech-dj.c

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -385,18 +385,6 @@ static void logi_dj_recv_forward_null_report(struct dj_receiver_dev *djrcv_dev,
385385

386386
djdev = djrcv_dev->paired_dj_devices[dj_report->device_index];
387387

388-
if (!djdev) {
389-
dbg_hid("djrcv_dev->paired_dj_devices[dj_report->device_index]"
390-
" is NULL, index %d\n", dj_report->device_index);
391-
kfifo_in(&djrcv_dev->notif_fifo, dj_report, sizeof(struct dj_report));
392-
393-
if (schedule_work(&djrcv_dev->work) == 0) {
394-
dbg_hid("%s: did not schedule the work item, was already "
395-
"queued\n", __func__);
396-
}
397-
return;
398-
}
399-
400388
memset(reportbuffer, 0, sizeof(reportbuffer));
401389

402390
for (i = 0; i < NUMBER_OF_HID_REPORTS; i++) {
@@ -421,18 +409,6 @@ static void logi_dj_recv_forward_report(struct dj_receiver_dev *djrcv_dev,
421409

422410
dj_device = djrcv_dev->paired_dj_devices[dj_report->device_index];
423411

424-
if (dj_device == NULL) {
425-
dbg_hid("djrcv_dev->paired_dj_devices[dj_report->device_index]"
426-
" is NULL, index %d\n", dj_report->device_index);
427-
kfifo_in(&djrcv_dev->notif_fifo, dj_report, sizeof(struct dj_report));
428-
429-
if (schedule_work(&djrcv_dev->work) == 0) {
430-
dbg_hid("%s: did not schedule the work item, was already "
431-
"queued\n", __func__);
432-
}
433-
return;
434-
}
435-
436412
if ((dj_report->report_type > ARRAY_SIZE(hid_reportid_size_map) - 1) ||
437413
(hid_reportid_size_map[dj_report->report_type] == 0)) {
438414
dbg_hid("invalid report type:%x\n", dj_report->report_type);
@@ -701,8 +677,17 @@ static int logi_dj_raw_event(struct hid_device *hdev,
701677
}
702678

703679
spin_lock_irqsave(&djrcv_dev->lock, flags);
680+
681+
if (!djrcv_dev->paired_dj_devices[dj_report->device_index]) {
682+
/* received an event for an unknown device, bail out */
683+
logi_dj_recv_queue_notification(djrcv_dev, dj_report);
684+
goto out;
685+
}
686+
704687
switch (dj_report->report_type) {
705688
case REPORT_TYPE_NOTIF_DEVICE_PAIRED:
689+
/* pairing notifications are handled above the switch */
690+
break;
706691
case REPORT_TYPE_NOTIF_DEVICE_UNPAIRED:
707692
logi_dj_recv_queue_notification(djrcv_dev, dj_report);
708693
break;
@@ -715,6 +700,8 @@ static int logi_dj_raw_event(struct hid_device *hdev,
715700
default:
716701
logi_dj_recv_forward_report(djrcv_dev, dj_report);
717702
}
703+
704+
out:
718705
spin_unlock_irqrestore(&djrcv_dev->lock, flags);
719706

720707
return true;

0 commit comments

Comments
 (0)