|
@@ -1156,7 +1156,13 @@ static psmouse_ret_t alps_process_byte(struct psmouse *psmouse)
|
|
|
{
|
|
|
struct alps_data *priv = psmouse->private;
|
|
|
|
|
|
- if ((psmouse->packet[0] & 0xc8) == 0x08) { /* PS/2 packet */
|
|
|
+ /*
|
|
|
+ * Check if we are dealing with a bare PS/2 packet, presumably from
|
|
|
+ * a device connected to the external PS/2 port. Because bare PS/2
|
|
|
+ * protocol does not have enough constant bits to self-synchronize
|
|
|
+ * properly we only do this if the device is fully synchronized.
|
|
|
+ */
|
|
|
+ if (!psmouse->out_of_sync_cnt && (psmouse->packet[0] & 0xc8) == 0x08) {
|
|
|
if (psmouse->pktcnt == 3) {
|
|
|
alps_report_bare_ps2_packet(psmouse, psmouse->packet,
|
|
|
true);
|