diff options
| -rw-r--r-- | drivers/hid/hid-logitech-dj.c | 43 | ||||
| -rw-r--r-- | drivers/hid/hid-logitech-dj.h | 1 |
2 files changed, 26 insertions, 18 deletions
diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c index b7ba82960c79..9bf8637747a5 100644 --- a/drivers/hid/hid-logitech-dj.c +++ b/drivers/hid/hid-logitech-dj.c | |||
| @@ -656,7 +656,6 @@ static int logi_dj_raw_event(struct hid_device *hdev, | |||
| 656 | struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev); | 656 | struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev); |
| 657 | struct dj_report *dj_report = (struct dj_report *) data; | 657 | struct dj_report *dj_report = (struct dj_report *) data; |
| 658 | unsigned long flags; | 658 | unsigned long flags; |
| 659 | bool report_processed = false; | ||
| 660 | 659 | ||
| 661 | dbg_hid("%s, size:%d\n", __func__, size); | 660 | dbg_hid("%s, size:%d\n", __func__, size); |
| 662 | 661 | ||
| @@ -683,34 +682,42 @@ static int logi_dj_raw_event(struct hid_device *hdev, | |||
| 683 | * device (via hid_input_report() ) and return 1 so hid-core does not do | 682 | * device (via hid_input_report() ) and return 1 so hid-core does not do |
| 684 | * anything else with it. | 683 | * anything else with it. |
| 685 | */ | 684 | */ |
| 685 | |||
| 686 | /* case 1) */ | ||
| 687 | if (data[0] != REPORT_ID_DJ_SHORT) | ||
| 688 | return false; | ||
| 689 | |||
| 686 | if ((dj_report->device_index < DJ_DEVICE_INDEX_MIN) || | 690 | if ((dj_report->device_index < DJ_DEVICE_INDEX_MIN) || |
| 687 | (dj_report->device_index > DJ_DEVICE_INDEX_MAX)) { | 691 | (dj_report->device_index > DJ_DEVICE_INDEX_MAX)) { |
| 688 | dev_err(&hdev->dev, "%s: invalid device index:%d\n", | 692 | /* |
| 693 | * Device index is wrong, bail out. | ||
| 694 | * This driver can ignore safely the receiver notifications, | ||
| 695 | * so ignore those reports too. | ||
| 696 | */ | ||
| 697 | if (dj_report->device_index != DJ_RECEIVER_INDEX) | ||
| 698 | dev_err(&hdev->dev, "%s: invalid device index:%d\n", | ||
| 689 | __func__, dj_report->device_index); | 699 | __func__, dj_report->device_index); |
| 690 | return false; | 700 | return false; |
| 691 | } | 701 | } |
| 692 | 702 | ||
| 693 | spin_lock_irqsave(&djrcv_dev->lock, flags); | 703 | spin_lock_irqsave(&djrcv_dev->lock, flags); |
| 694 | if (dj_report->report_id == REPORT_ID_DJ_SHORT) { | 704 | switch (dj_report->report_type) { |
| 695 | switch (dj_report->report_type) { | 705 | case REPORT_TYPE_NOTIF_DEVICE_PAIRED: |
| 696 | case REPORT_TYPE_NOTIF_DEVICE_PAIRED: | 706 | case REPORT_TYPE_NOTIF_DEVICE_UNPAIRED: |
| 697 | case REPORT_TYPE_NOTIF_DEVICE_UNPAIRED: | 707 | logi_dj_recv_queue_notification(djrcv_dev, dj_report); |
| 698 | logi_dj_recv_queue_notification(djrcv_dev, dj_report); | 708 | break; |
| 699 | break; | 709 | case REPORT_TYPE_NOTIF_CONNECTION_STATUS: |
| 700 | case REPORT_TYPE_NOTIF_CONNECTION_STATUS: | 710 | if (dj_report->report_params[CONNECTION_STATUS_PARAM_STATUS] == |
| 701 | if (dj_report->report_params[CONNECTION_STATUS_PARAM_STATUS] == | 711 | STATUS_LINKLOSS) { |
| 702 | STATUS_LINKLOSS) { | 712 | logi_dj_recv_forward_null_report(djrcv_dev, dj_report); |
| 703 | logi_dj_recv_forward_null_report(djrcv_dev, dj_report); | ||
| 704 | } | ||
| 705 | break; | ||
| 706 | default: | ||
| 707 | logi_dj_recv_forward_report(djrcv_dev, dj_report); | ||
| 708 | } | 713 | } |
| 709 | report_processed = true; | 714 | break; |
| 715 | default: | ||
| 716 | logi_dj_recv_forward_report(djrcv_dev, dj_report); | ||
| 710 | } | 717 | } |
| 711 | spin_unlock_irqrestore(&djrcv_dev->lock, flags); | 718 | spin_unlock_irqrestore(&djrcv_dev->lock, flags); |
| 712 | 719 | ||
| 713 | return report_processed; | 720 | return true; |
| 714 | } | 721 | } |
| 715 | 722 | ||
| 716 | static int logi_dj_probe(struct hid_device *hdev, | 723 | static int logi_dj_probe(struct hid_device *hdev, |
diff --git a/drivers/hid/hid-logitech-dj.h b/drivers/hid/hid-logitech-dj.h index 4a4000340ce1..daeb0aa4bee9 100644 --- a/drivers/hid/hid-logitech-dj.h +++ b/drivers/hid/hid-logitech-dj.h | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | 27 | ||
| 28 | #define DJ_MAX_PAIRED_DEVICES 6 | 28 | #define DJ_MAX_PAIRED_DEVICES 6 |
| 29 | #define DJ_MAX_NUMBER_NOTIFICATIONS 8 | 29 | #define DJ_MAX_NUMBER_NOTIFICATIONS 8 |
| 30 | #define DJ_RECEIVER_INDEX 0 | ||
| 30 | #define DJ_DEVICE_INDEX_MIN 1 | 31 | #define DJ_DEVICE_INDEX_MIN 1 |
| 31 | #define DJ_DEVICE_INDEX_MAX 6 | 32 | #define DJ_DEVICE_INDEX_MAX 6 |
| 32 | 33 | ||
