On Tue, Feb 1, 2011 at 13:01, Bastien Nocera <hadess@xxxxxxxxxx> wrote: > On Tue, 2011-02-01 at 10:00 +0100, Benjamin Tissoires wrote: >> Hi Bastien, Henrik, >> >> On Mon, Jan 31, 2011 at 22:28, Henrik Rydberg <rydberg@xxxxxxxxxxx> wrote: >> > Hi Bastien, >> > >> >> Built into my Lenovo A700 all-in-one is a touchscreen. lsusb says: >> >> $ lsusb | grep -i touch >> >> Bus 002 Device 006: ID 04e7:0022 Elo TouchSystems >> > >> > I take it this is a dual-touch device? >> > >> >> The touchscreen "works", in that tapping it will create a click event, >> >> though that click event is always in the top left of the screen. >> > >> > This is quite common for HID multitouch devices without proper driver >> > support. Sometimes using the HID_MULTI_INPUT quirk helps. Check >> > usbhid/hid-quirks.c for examples. >> > >> >> Full output of lsusb -vvv attached. >> >> >> >> Anybody with ideas as to what I'm missing, or whether that particular >> >> device is supported? >> > >> > You probably noted already that the 04e7:0020 device is listed in >> > usbhid. Unless the device claims to be win7 compliant (implying >> > patching up hid-multitouch), going with the evtouch X driver might get >> > you a bit on the way. Or - god forbid - the binary blob drivers... >> >> To know if the device is "win7 compliant" or not, we need the full >> output of lsusb (with the report descriptors). >> You need to tell usbhid to release the device before calling lsusb -v. >> >> Please use the script at >> http://lii-enac.fr/en/architecture/linux-input/report.py >> and run, as root: python report.py > descriptors.txt >> >> This will do the job. You can then send us the descriptors.txt, and we >> will see what we can do. > > Attached (with the rest of the input devices stripped). > >> >> Using kernel 2.6.38-rc2-git5 (from Fedora rawhide). >> >> If your device is "win7 compliant" you will have to recompile a new kernel. > > That's alright, I've done this before ;) > Hi Bastian, well, apparently your device should be supported by hid-multitouch. We will have to do this in two passes: 1) we enable it with hid-multitouch to be able to understand the protocol. 2) we tune the driver in order not making useless operations in the kernel. First pass: - please get the branch multitouch of jiri's tree (at http://git.kernel.org/?p=linux/kernel/git/jikos/hid.git;a=shortlog;h=refs/heads/multitouch) - then apply the attached patch (git am 0001-hid-multitouch-Introduce-Elo-TouchSystems-2515-Intel.patch) - get your config from your current kernel (check that hid-multitouch is enabled as a module) - compile, install, reboot - Now your device should still work and must be handled by hid-multitouch if it's the case: - mount -t debugfs none /sys/kernel/debug - tail -f -n0 /sys/kernel/debug/hid/0003:04e7:0022:*/events | tee logs_04e7_0022.txt do one finger move on the screen, release do 2 fingers move on the screen, release the first finger, then the second. hit Ctrl-C in the terminal (lots of debug info should have been printed). And send me the logs_04e7_0022.txt to got to the second pass. Thanks, Benjamin
From e398db4b75f1164e8a684f0a1b15218eaabb5606 Mon Sep 17 00:00:00 2001 From: Benjamin Tissoires <benjamin.tissoires@xxxxxxx> Date: Tue, 1 Feb 2011 14:07:12 +0100 Subject: [PATCH] hid-multitouch: Introduce Elo TouchSystems 2515 IntelliTouch Plus This patch adds support for Elo TouchSystems 2515 IntelliTouch Plus that can be found in Lenovo A700 all-in-one. Signed-off-by: Benjamin Tissoires <benjamin.tissoires@xxxxxxx> --- drivers/hid/Kconfig | 1 + drivers/hid/hid-core.c | 1 + drivers/hid/hid-ids.h | 1 + drivers/hid/hid-multitouch.c | 5 +++++ 4 files changed, 8 insertions(+), 0 deletions(-) diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig index a0b117d..d373635 100644 --- a/drivers/hid/Kconfig +++ b/drivers/hid/Kconfig @@ -303,6 +303,7 @@ config HID_MULTITOUCH Say Y here if you have one of the following devices: - Cypress TrueTouch panels + - Elo TouchSystems IntelliTouch Plus panels - Hanvon dual touch panels - IrTouch Infrared USB panels - Pixcir dual touch panels diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index d678cf3..e701e57 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -1334,6 +1334,7 @@ static const struct hid_device_id hid_have_special_driver[] = { { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH3) }, { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH4) }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) }, + { HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2515) }, { HID_USB_DEVICE(USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II) }, { HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) }, { HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) }, diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index b1dd7ad..7780c48 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h @@ -216,6 +216,7 @@ #define USB_VENDOR_ID_DREAM_CHEEKY 0x1d34 #define USB_VENDOR_ID_ELO 0x04E7 +#define USB_DEVICE_ID_ELO_TS2515 0x0022 #define USB_DEVICE_ID_ELO_TS2700 0x0020 #define USB_VENDOR_ID_EMS 0x2006 diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c index 69f8744..a721710 100644 --- a/drivers/hid/hid-multitouch.c +++ b/drivers/hid/hid-multitouch.c @@ -466,6 +466,11 @@ static const struct hid_device_id mt_devices[] = { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_TRUETOUCH) }, + /* Elo TouchSystems IntelliTouch Plus panel */ + { .driver_data = MT_CLS_DEFAULT, + HID_USB_DEVICE(USB_VENDOR_ID_ELO, + USB_DEVICE_ID_ELO_TS2515) }, + /* GeneralTouch panel */ { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER, HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, -- 1.7.3.4