diff options
| -rw-r--r-- | drivers/input/mouse/alps.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c index 4d7c4ccdaa8a..dd2fd397466a 100644 --- a/drivers/input/mouse/alps.c +++ b/drivers/input/mouse/alps.c | |||
| @@ -475,6 +475,13 @@ static void alps_process_trackstick_packet_v3(struct psmouse *psmouse) | |||
| 475 | struct input_dev *dev = priv->dev2; | 475 | struct input_dev *dev = priv->dev2; |
| 476 | int x, y, z, left, right, middle; | 476 | int x, y, z, left, right, middle; |
| 477 | 477 | ||
| 478 | /* It should be a DualPoint when received trackstick packet */ | ||
| 479 | if (!(priv->flags & ALPS_DUALPOINT)) { | ||
| 480 | psmouse_warn(psmouse, | ||
| 481 | "Rejected trackstick packet from non DualPoint device"); | ||
| 482 | return; | ||
| 483 | } | ||
| 484 | |||
| 478 | /* Sanity check packet */ | 485 | /* Sanity check packet */ |
| 479 | if (!(packet[0] & 0x40)) { | 486 | if (!(packet[0] & 0x40)) { |
| 480 | psmouse_dbg(psmouse, "Bad trackstick packet, discarding\n"); | 487 | psmouse_dbg(psmouse, "Bad trackstick packet, discarding\n"); |
| @@ -699,7 +706,8 @@ static void alps_process_touchpad_packet_v3_v5(struct psmouse *psmouse) | |||
| 699 | 706 | ||
| 700 | alps_report_semi_mt_data(psmouse, fingers); | 707 | alps_report_semi_mt_data(psmouse, fingers); |
| 701 | 708 | ||
| 702 | if (!(priv->quirks & ALPS_QUIRK_TRACKSTICK_BUTTONS)) { | 709 | if ((priv->flags & ALPS_DUALPOINT) && |
| 710 | !(priv->quirks & ALPS_QUIRK_TRACKSTICK_BUTTONS)) { | ||
| 703 | input_report_key(dev2, BTN_LEFT, f->ts_left); | 711 | input_report_key(dev2, BTN_LEFT, f->ts_left); |
| 704 | input_report_key(dev2, BTN_RIGHT, f->ts_right); | 712 | input_report_key(dev2, BTN_RIGHT, f->ts_right); |
| 705 | input_report_key(dev2, BTN_MIDDLE, f->ts_middle); | 713 | input_report_key(dev2, BTN_MIDDLE, f->ts_middle); |
| @@ -743,8 +751,11 @@ static void alps_process_packet_v6(struct psmouse *psmouse) | |||
| 743 | */ | 751 | */ |
| 744 | if (packet[5] == 0x7F) { | 752 | if (packet[5] == 0x7F) { |
| 745 | /* It should be a DualPoint when received Trackpoint packet */ | 753 | /* It should be a DualPoint when received Trackpoint packet */ |
| 746 | if (!(priv->flags & ALPS_DUALPOINT)) | 754 | if (!(priv->flags & ALPS_DUALPOINT)) { |
| 755 | psmouse_warn(psmouse, | ||
| 756 | "Rejected trackstick packet from non DualPoint device"); | ||
| 747 | return; | 757 | return; |
| 758 | } | ||
| 748 | 759 | ||
| 749 | /* Trackpoint packet */ | 760 | /* Trackpoint packet */ |
| 750 | x = packet[1] | ((packet[3] & 0x20) << 2); | 761 | x = packet[1] | ((packet[3] & 0x20) << 2); |
| @@ -1026,6 +1037,13 @@ static void alps_process_trackstick_packet_v7(struct psmouse *psmouse) | |||
| 1026 | struct input_dev *dev2 = priv->dev2; | 1037 | struct input_dev *dev2 = priv->dev2; |
| 1027 | int x, y, z, left, right, middle; | 1038 | int x, y, z, left, right, middle; |
| 1028 | 1039 | ||
| 1040 | /* It should be a DualPoint when received trackstick packet */ | ||
| 1041 | if (!(priv->flags & ALPS_DUALPOINT)) { | ||
| 1042 | psmouse_warn(psmouse, | ||
| 1043 | "Rejected trackstick packet from non DualPoint device"); | ||
| 1044 | return; | ||
| 1045 | } | ||
| 1046 | |||
| 1029 | /* | 1047 | /* |
| 1030 | * b7 b6 b5 b4 b3 b2 b1 b0 | 1048 | * b7 b6 b5 b4 b3 b2 b1 b0 |
| 1031 | * Byte0 0 1 0 0 1 0 0 0 | 1049 | * Byte0 0 1 0 0 1 0 0 0 |
