@@ -385,18 +385,6 @@ static void logi_dj_recv_forward_null_report(struct dj_receiver_dev *djrcv_dev,
385
385
386
386
djdev = djrcv_dev -> paired_dj_devices [dj_report -> device_index ];
387
387
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
-
400
388
memset (reportbuffer , 0 , sizeof (reportbuffer ));
401
389
402
390
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,
421
409
422
410
dj_device = djrcv_dev -> paired_dj_devices [dj_report -> device_index ];
423
411
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
-
436
412
if ((dj_report -> report_type > ARRAY_SIZE (hid_reportid_size_map ) - 1 ) ||
437
413
(hid_reportid_size_map [dj_report -> report_type ] == 0 )) {
438
414
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,
701
677
}
702
678
703
679
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
+
704
687
switch (dj_report -> report_type ) {
705
688
case REPORT_TYPE_NOTIF_DEVICE_PAIRED :
689
+ /* pairing notifications are handled above the switch */
690
+ break ;
706
691
case REPORT_TYPE_NOTIF_DEVICE_UNPAIRED :
707
692
logi_dj_recv_queue_notification (djrcv_dev , dj_report );
708
693
break ;
@@ -715,6 +700,8 @@ static int logi_dj_raw_event(struct hid_device *hdev,
715
700
default :
716
701
logi_dj_recv_forward_report (djrcv_dev , dj_report );
717
702
}
703
+
704
+ out :
718
705
spin_unlock_irqrestore (& djrcv_dev -> lock , flags );
719
706
720
707
return true;
0 commit comments