Looking at the way the evdev events are fed from kernel upto X, the data stream
has 3 core types of event
- X axis update
- Y axis update
- Sync event
The kernel normally sends a sequence of
- X axis update + Y axis update + sync event
- X axis update + sync event
- Y axis update + sync event
There is some extra code in the evdev driver, however, which does an explicit
sync after every individual X or Y axis event. This seems to be causing the X
axis update to be lost - resulting in the cursor travelling up the left-hand
side of the screen when moved diagonally. This manual sync looks unneccessary
since the kernel sends an explicit sync event whenever one ie needed.
So I wrote the attached patch which removed the two redundant calls to sync
pointer position. This resulted in smooth mouse movement expected.
I'm a little puzzelled why these explicit sync calls are in the driver at all -
not clear they could ever have worked correctly ?!?!
Looking at the way the evdev events are fed from kernel upto X, the data stream
has 3 core types of event
- X axis update
- Y axis update
- Sync event
The kernel normally sends a sequence of
- X axis update + Y axis update + sync event
- X axis update + sync event
- Y axis update + sync event
There is some extra code in the evdev driver, however, which does an explicit
sync after every individual X or Y axis event. This seems to be causing the X
axis update to be lost - resulting in the cursor travelling up the left-hand
side of the screen when moved diagonally. This manual sync looks unneccessary
since the kernel sends an explicit sync event whenever one ie needed.
So I wrote the attached patch which removed the two redundant calls to sync
pointer position. This resulted in smooth mouse movement expected.
I'm a little puzzelled why these explicit sync calls are in the driver at all -
not clear they could ever have worked correctly ?!?!