Hi Simon,
We're going through our collection of touch screens, making sure that they all
work with current kernels, and we've found one that doesn't work with today's
Linus master.
lsusb describes the screen as:
Bus 006 Device 002: ID 0408:3001 Quanta Computer, Inc. Optical Touch Screen
What about 0408:3008, does that one work?
Any ideas on the best way to resolve this regression?
What does 'cat /sys/bus/hid/devices/0003:0408:3001.0001/modalias' say?
The patch below ought to be enough to make it work, although it is
still unclear why it is needed.
Thanks,
Henrik
---
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index bd4bc3c..2b775c3 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -963,7 +963,7 @@ static const struct hid_device_id mt_devices[] = {
MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) },
{ .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
- MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
+ HID_USB_DEVICE(USB_VENDOR_ID_QUANTA,
USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001) },
{ .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
On Tuesday 21 August 2012 21:06:26 Henrik Rydberg wrote:
Hi Simon,
quoted
We're going through our collection of touch screens, making sure that they all
work with current kernels, and we've found one that doesn't work with today's
Linus master.
lsusb describes the screen as:
Bus 006 Device 002: ID 0408:3001 Quanta Computer, Inc. Optical Touch Screen
What about 0408:3008, does that one work?
I don't have a sample of 0408:3008 to try.
quoted
Any ideas on the best way to resolve this regression?
What does 'cat /sys/bus/hid/devices/0003:0408:3001.0001/modalias' say?
It's the same whether or not I revert the patch:
# cat /sys/bus/hid/devices/0003:0408:3001.0001/modalias
hid:b0003g0000v00000408p00003001
If I've understood hid-code.c correctly, this means that
hdev->group == HID_GROUP_ANY, implying that neither hid_scan_usage nor
hid_scan_report have run.
The patch below ought to be enough to make it work, although it is
still unclear why it is needed.
I'd like to get to the bottom of why this patch is needed - the patch I
reverted covered 71 touchscreen controllers, and the fact that hdev->group is
set to HID_GROUP_ANY worries me - I'm concerned that there's something
deeper wrong that's causing the USB HID core to not be able to get the report
descriptor reliably.
quoted hunk
Thanks,
Henrik
---
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index bd4bc3c..2b775c3 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -963,7 +963,7 @@ static const struct hid_device_id mt_devices[] = {
MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) },
{ .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
- MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
+ HID_USB_DEVICE(USB_VENDOR_ID_QUANTA,
USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001) },
{ .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
--
Simon Farnsworth
Software Engineer
ONELAN Ltd
http://www.onelan.com
On Wednesday 22 August 2012 10:00:12 Simon Farnsworth wrote:
On Tuesday 21 August 2012 21:06:26 Henrik Rydberg wrote:
quoted
Hi Simon,
quoted
We're going through our collection of touch screens, making sure that they all
work with current kernels, and we've found one that doesn't work with today's
Linus master.
lsusb describes the screen as:
Bus 006 Device 002: ID 0408:3001 Quanta Computer, Inc. Optical Touch Screen
What about 0408:3008, does that one work?
I don't have a sample of 0408:3008 to try.
quoted
quoted
Any ideas on the best way to resolve this regression?
What does 'cat /sys/bus/hid/devices/0003:0408:3001.0001/modalias' say?
It's the same whether or not I revert the patch:
# cat /sys/bus/hid/devices/0003:0408:3001.0001/modalias
hid:b0003g0000v00000408p00003001
A look at the code said that the only way this could happen is if
hid_have_special_driver is set for this device, and no special driver claimed
it.
I've confirmed this by setting hid.ignore_special_devices to 1; it then works
unpatched.
The entry in the table is:
{ HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN) },
This matches the device I have, and causes the problem behaviour.
It looks like the right thing to do is to audit the hid_have_special_driver
table, and confirm that there is an in-kernel special driver for every device
that has an entry.
--
Simon Farnsworth
Software Engineer
ONELAN Ltd
http://www.onelan.com
quoted
What does 'cat /sys/bus/hid/devices/0003:0408:3001.0001/modalias' say?
It's the same whether or not I revert the patch:
# cat /sys/bus/hid/devices/0003:0408:3001.0001/modalias
hid:b0003g0000v00000408p00003001
If I've understood hid-code.c correctly, this means that
hdev->group == HID_GROUP_ANY, implying that neither hid_scan_usage nor
hid_scan_report have run.
Correct, and your subsequent patch is spot on.
Thanks,
Henrik