On 2/24/06, David Brownell <[EMAIL PROTECTED]> wrote:
> On Friday 24 February 2006 7:05 am, Andrew Fuller wrote:
> > This patch is for the Dual USB Joypad [0925:8866] from Wisegroup.  The
> > HID_QUIRK_NOGET is necessary for it to respond to input, and the
> > HID_QUIRK_MULTI_INPUT is necessary to have two js# nodes appear.
> >
> > This patch has been confirmed by two other people aside from myself,
> > so I would like it included in the kernel at the next opportunity.
>
> Just so I'm clear on this ... the driver worked in previous form
> with a workaround that added an extra device descriptor fetch, yes?
>
> That makes me wonder how many of the QUIRK_NOGET devices are the
> same sort of bug in the peripheral hardware/firmware:  something
> leftover in the control processing that could be "flushed" by
> some other control request, rather than needing to bypass that
> part of driver init.  I suppose I'll never know.
>
> - Dave

After your comment I decided to dig a bit deeper into the issue at
hand.  Without marking this device as having any quirk, I've narrowed
down the issue to the call to usb_submit_urb at the end of the
hid_submit_ctrl function in hid-core.c.  I tried some tracing to see
what the control values were... and found the troublesome one.

The interesting part of the trace is as follows:
submitting ctrl urb: Get_Report wValue=0x0101 wIndex=0x0000 wLength=7values
submitting ctrl urb: Get_Report wValue=0x0101 wIndex=0x0000 wLength=7values
drivers/usb/input/hid-core.c: usb_submit_urb(ctrl) failed
submitting ctrl urb: Get_Report wValue=0x0102 wIndex=0x0000 wLength=7values

If I put a conditional return looking for wValue==0x0102, then the the
device works, and the tracing finishes after the submit_urb failed
line (so no further get_reports appear to be queued after the one of
wValue==0x0102).

Perhaps the device cannot handle that specific request, or perhaps it
cannot handle that request after the previous one had failed.  Then
again, why did that second one fail if the first didn't?

I tried looking at the USB spec for a definition of the values,
unfortunately they only seem to specify wValue meanings when the
'type' portion of the RequestType is 0 (Standard).  However, these
calls have 'type' set to 1 (Class) and wValue has different meanings
for different types.  Do you (or anyone else reading this) know where
the values for wValue are defined for type Class?

-Andrew


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid0944&bid$1720&dat1642
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to