Lines 4948-4953
psmsoftintr(void *arg)
Link Here
|
4948 |
|
4948 |
|
4949 |
case MOUSE_MODEL_SYNAPTICS: |
4949 |
case MOUSE_MODEL_SYNAPTICS: |
4950 |
if (pb->inputbytes == MOUSE_PS2_PACKETSIZE) { |
4950 |
if (pb->inputbytes == MOUSE_PS2_PACKETSIZE) { |
|
|
4951 |
static int trbutt; |
4952 |
int tpbutt; |
4953 |
static int otpbutt; |
4951 |
/* Don't rely on bit 3. It is garbled by mux */ |
4954 |
/* Don't rely on bit 3. It is garbled by mux */ |
4952 |
switch (pb->ipacket[0] & 0xc0) { |
4955 |
switch (pb->ipacket[0] & 0xc0) { |
4953 |
case 0x80: |
4956 |
case 0x80: |
Lines 4960-4967
psmsoftintr(void *arg)
Link Here
|
4960 |
bcopy(pb->ipacket, pb->ipacket + 3, 3); |
4963 |
bcopy(pb->ipacket, pb->ipacket + 3, 3); |
4961 |
bcopy(sc->muxsave, pb->ipacket, 3); |
4964 |
bcopy(sc->muxsave, pb->ipacket, 3); |
4962 |
sc->muxsave[0] &= 0x03; |
4965 |
sc->muxsave[0] &= 0x03; |
|
|
4966 |
pb->ipacket[0] &= ~trbutt; |
4967 |
pb->ipacket[3] &= ~trbutt; |
4968 |
tpbutt = (pb->ipacket[3] & 0x03) << 2 | |
4969 |
(pb->ipacket[0] & 0x03); |
4970 |
if (tpbutt != otpbutt && |
4971 |
sc->fpcount < 3) { |
4972 |
pb->ipacket[0] &= 0xfc; |
4973 |
pb->ipacket[0] |= otpbutt & 0x03; |
4974 |
pb->ipacket[3] &= 0xfc; |
4975 |
pb->ipacket[3] |= otpbutt >> 2 & 0x03; |
4976 |
++sc->fpcount; |
4977 |
} else { |
4978 |
sc->fpcount = 0; |
4979 |
otpbutt = tpbutt; |
4980 |
} |
4981 |
VLOG(3, (LOG_DEBUG, "buttons: [%02x],[%02x]\n", pb->ipacket[0], pb->ipacket[3])); |
4963 |
break; |
4982 |
break; |
4964 |
default: |
4983 |
default: |
|
|
4984 |
trbutt = pb->ipacket[0] & 0x03; |
4965 |
/* Convert generic -> pass-through */ |
4985 |
/* Convert generic -> pass-through */ |
4966 |
pb->ipacket[5] = pb->ipacket[2]; |
4986 |
pb->ipacket[5] = pb->ipacket[2]; |
4967 |
pb->ipacket[4] = pb->ipacket[1]; |
4987 |
pb->ipacket[4] = pb->ipacket[1]; |