Obsolete quirk prevents multitouch module for eGalax touchscreen from working
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
linux (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned | ||
Bug Description
In the Maverick Kernel (tested with 2.6.35-19) the eGalax/DWAV touchscreen (USB ID 0eef:480d) found in the Eee PC T101MT doesn't send multitouch events although the correct module hid_egalax is included in the Kernel. The reason is that the MULTI_INPUT quirk is still used for this device although it is no longer needed, and it prevents the module from working.
Steps to reproduce:
Start Ubuntu 10.10 on an Eee PC T101MT with eGalax touchscreen. Check xinput --list to find out that the screen is listed twice. Run evtest to find out that four device nodes (/dev/input/event6 ... /dev/input/event9) are created for the device. Only one of them produces events, and they are only single touch events. The other nodes produce no events at all. None produces multitouch events.
Reason:
In drivers/
{ USB_VENDOR_ID_DWAV, USB_DEVICE_
which causes the MULTI_INPUT quirk to be added to the device, which prevents the hid_egalax module from working and thus only the quirky default handling of the touchscreen is applied.
Fix:
Remove this line from hid-quirks.c using the attached patch; Now hid_egalax manages the screen: it appears only once in xinput --list, only creates one device node which delivers single touch and multitouch events, as expected.
One problem with this fix though: Because of a bug in the hid_egalax module, the screen assumes a wrong range for the coordinate axes when in multitouch mode. There also is a patch for this, which is attached, too.
tags: | added: patch |
description: | updated |
description: | updated |
tags: | added: kj-triage |
Changed in linux (Ubuntu): | |
status: | Fix Committed → Fix Released |
I've decided to attach the second patch to this bug, too, because otherwise applying the first patch would cause a regression. The second patch adjusts the coordinates of the input events (by shifting it by three bits) so they are in the same range as in single-touch mode (this doesn't cause a loss of precision as the last three bits of the events was always 0 anyway). It also adds the pressure sensitivity information for single-touch events. This way, all features of single-touch mode are also available for the single-touch events in multi-touch mode.