diff options
author | Benjamin Tissoires <benjamin.tissoires@redhat.com> | 2014-08-22 16:16:06 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2014-08-27 17:04:21 -0400 |
commit | 368d4e59b002d0742fc7c25de8fd7b6ad37a434c (patch) | |
tree | 1d80639e58015de09975a598d6dc66636c0cbac3 | |
parent | ff0c57ac70434bc936cb0110eaf033a0a1a62e52 (diff) |
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 <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
-rw-r--r-- | drivers/hid/hid-logitech-dj.c | 35 |
1 files changed, 11 insertions, 24 deletions
diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c index 9bf8637747a5..71f569292cab 100644 --- a/drivers/hid/hid-logitech-dj.c +++ b/drivers/hid/hid-logitech-dj.c | |||
@@ -385,18 +385,6 @@ static void logi_dj_recv_forward_null_report(struct dj_receiver_dev *djrcv_dev, | |||
385 | 385 | ||
386 | djdev = djrcv_dev->paired_dj_devices[dj_report->device_index]; | 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 | memset(reportbuffer, 0, sizeof(reportbuffer)); | 388 | memset(reportbuffer, 0, sizeof(reportbuffer)); |
401 | 389 | ||
402 | for (i = 0; i < NUMBER_OF_HID_REPORTS; i++) { | 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 | dj_device = djrcv_dev->paired_dj_devices[dj_report->device_index]; | 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 | if ((dj_report->report_type > ARRAY_SIZE(hid_reportid_size_map) - 1) || | 412 | if ((dj_report->report_type > ARRAY_SIZE(hid_reportid_size_map) - 1) || |
437 | (hid_reportid_size_map[dj_report->report_type] == 0)) { | 413 | (hid_reportid_size_map[dj_report->report_type] == 0)) { |
438 | dbg_hid("invalid report type:%x\n", dj_report->report_type); | 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 | spin_lock_irqsave(&djrcv_dev->lock, flags); | 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 | switch (dj_report->report_type) { | 687 | switch (dj_report->report_type) { |
705 | case REPORT_TYPE_NOTIF_DEVICE_PAIRED: | 688 | case REPORT_TYPE_NOTIF_DEVICE_PAIRED: |
689 | /* pairing notifications are handled above the switch */ | ||
690 | break; | ||
706 | case REPORT_TYPE_NOTIF_DEVICE_UNPAIRED: | 691 | case REPORT_TYPE_NOTIF_DEVICE_UNPAIRED: |
707 | logi_dj_recv_queue_notification(djrcv_dev, dj_report); | 692 | logi_dj_recv_queue_notification(djrcv_dev, dj_report); |
708 | break; | 693 | break; |
@@ -715,6 +700,8 @@ static int logi_dj_raw_event(struct hid_device *hdev, | |||
715 | default: | 700 | default: |
716 | logi_dj_recv_forward_report(djrcv_dev, dj_report); | 701 | logi_dj_recv_forward_report(djrcv_dev, dj_report); |
717 | } | 702 | } |
703 | |||
704 | out: | ||
718 | spin_unlock_irqrestore(&djrcv_dev->lock, flags); | 705 | spin_unlock_irqrestore(&djrcv_dev->lock, flags); |
719 | 706 | ||
720 | return true; | 707 | return true; |