On Wed, Aug 24, 2011 at 01:44:46PM +0800, JJ Ding wrote: > @@ -403,11 +503,39 @@ static int elantech_packet_check_v2(struct psmouse *psmouse) > } > > /* > + * We check the constant bits to determine what packet type we get, > + * so packet checking is mandatory for v3 hardware. > + */ > +static int elantech_packet_check_v3(struct psmouse *psmouse) > +{ > + unsigned char *packet = psmouse->packet; > + > + if ((packet[0] & 0x0c) == 0x04 && > + (packet[3] & 0xcf) == 0x02) > + return PACKET_V3_HEAD; > + > + if ((packet[0] & 0x0c) == 0x0c && > + (packet[3] & 0xce) == 0x0c) > + return PACKET_V3_TAIL; > + > + if (packet[0] == 0xc4 && > + packet[1] == 0xff && > + packet[2] == 0xff && > + packet[3] == 0x02 && > + packet[4] == 0xff && > + packet[5] == 0xff) > + return PACKET_DEBOUNCE; > + > + return PACKET_UNKNOWN; > +} This will never return PACKET_DEBOUNCE, because those packets will have already matched the conditions for PACKET_V3_HEAD. That condition needs to be moved to the top of the function. Seth -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html