|
@@ -792,6 +792,9 @@ static int elantech_packet_check_v4(struct psmouse *psmouse)
|
|
|
unsigned char packet_type = packet[3] & 0x03;
|
|
|
bool sanity_check;
|
|
|
|
|
|
+ if ((packet[3] & 0x0f) == 0x06)
|
|
|
+ return PACKET_TRACKPOINT;
|
|
|
+
|
|
|
/*
|
|
|
* Sanity check based on the constant bits of a packet.
|
|
|
* The constant bits change depending on the value of
|
|
@@ -877,10 +880,19 @@ static psmouse_ret_t elantech_process_byte(struct psmouse *psmouse)
|
|
|
|
|
|
case 4:
|
|
|
packet_type = elantech_packet_check_v4(psmouse);
|
|
|
- if (packet_type == PACKET_UNKNOWN)
|
|
|
+ switch (packet_type) {
|
|
|
+ case PACKET_UNKNOWN:
|
|
|
return PSMOUSE_BAD_DATA;
|
|
|
|
|
|
- elantech_report_absolute_v4(psmouse, packet_type);
|
|
|
+ case PACKET_TRACKPOINT:
|
|
|
+ elantech_report_trackpoint(psmouse, packet_type);
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ elantech_report_absolute_v4(psmouse, packet_type);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
break;
|
|
|
}
|
|
|
|