diff mbox

QUANTA touchscreen controller integrated in HP2310ti no longer recognised (regression in 3.5 and later as compared to 3.3)

Message ID 20120821190626.GA1260@polaris.bitmath.org (mailing list archive)
State New, archived
Headers show

Commit Message

Henrik Rydberg Aug. 21, 2012, 7:06 p.m. UTC
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

---

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Simon Farnsworth Aug. 22, 2012, 9 a.m. UTC | #1
On Tuesday 21 August 2012 21:06:26 Henrik Rydberg wrote:
> 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?
> 
I don't have a sample of 0408:3008 to try.

> > 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.

> 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 Aug. 22, 2012, 9:40 a.m. UTC | #2
On Wednesday 22 August 2012 10:00:12 Simon Farnsworth wrote:
> On Tuesday 21 August 2012 21:06:26 Henrik Rydberg wrote:
> > 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?
> > 
> I don't have a sample of 0408:3008 to try.
> 
> > > 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.
Henrik Rydberg Aug. 22, 2012, 5:04 p.m. UTC | #3
> > 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
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

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,