On Sun, Jan 27, 2002 at 12:22:14AM -0500, Mieszko Lis wrote:

> On Sat, 2002-01-26 at 14:05, Martin Pirker wrote:
> > I have a
> >  074e  Digital Stream Corp.
> >     0002  PS/2 Adapter
> 
> SHORT STORY
> 
> Apply the attached patch and recompile the kernel (or just hid.o).  I
> just tested that it works with 2.4.18-pre7, but I've used it since
> 2.4.13.
> 
> 
> LONG STORY
> 
> If you only plug in a keyboard, the device claims to be a keyboard; if
> you plug in a mouse or a mouse and a keyboard, the device claims to be a
> keyboard and a mouse.  In the latter case, when you plug it in, it
> connects as a keyboard, disconnects, and re-connects as a
> keyboard-and-mouse.  Seems a rather roundabout way of doing things,
> doesn't it?
> 
> The keyboard part of the report descriptor is different in each case
> (the reason behind this escapes me).  When just the keyboard is plugged
> in, everything works (for me).  When a mouse is plugged in, the HID
> driver parses the keyboard part of the report descriptor incorrectly
> (presumably because the HID spec is awfully ambiguous), fails, and the
> device goes unclaimed.
> 
> The real mystery is what the little black button on the adaptor does;
> I've tried pressing it at various times with no effect -- perhaps it's a
> placebo?  ;)
> 
> 
> PATCH NOTES
> 
> The report descriptor parser fails when the device tries to send a
> logical maximum of 255 as a single byte (the parser treats it as
> signed).  The patch treats a logical maximum as unsigned unless the
> logical minimum, treated as signed, was negative; this works as long as
> the logical minimum comes before the logical maximum in the report
> descriptor.  The RightThing(tm) is probably keeping track of extra
> information (e.g. original length) of both, and comparing them to see
> whether they should be treated as signed or unsigned, but I decided to
> aim for minimal changes instead.
> 
> I believe I sent the patch to the HID maintainer a few months ago, but
> it must have gotten lost somewhere.  It would be nice if it were
> included in the kernel.

It's included in the CVS, along with a bunch of other fixes
(PHYSICAL_MAXIMUM needs the same patch, for example). I'll come in the
next big update, which should be very very soon, I'm working hard on
that.  

> --- drivers/usb/hid-core.c.orig       Sun Nov  4 00:43:42 2001
> +++ drivers/usb/hid-core.c    Sun Nov  4 00:44:10 2001
> @@ -310,7 +310,10 @@
>                       return 0;
>  
>               case HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM:
> -                     parser->global.logical_maximum = item_sdata(item);
> +                     if (parser->global.logical_minimum < 0)
> +                             parser->global.logical_maximum = item_sdata(item);
> +                     else
> +                             parser->global.logical_maximum = item_udata(item);
>                       return 0;
>  
>               case HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM:


-- 
Vojtech Pavlik
SuSE Labs

_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to