public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Logitech Cordeless Desktop Keyboard fails to report class descriptor
@ 2005-01-27 23:23 Nico Huber
  0 siblings, 0 replies; only message in thread
From: Nico Huber @ 2005-01-27 23:23 UTC (permalink / raw)
  To: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 897 bytes --]

The receiver of my Logitech Cordeless Desktop fails to report the 
keyboard's class  descriptor most times I insert the usb-hid module 
since I changed to linux 2.6. The modell of the receiver is C-BD9-DUAL 
REV C.
The request seems not to fail but the count of received characters is zero.

As I said it only fails most times, I worked around making the following 
changes in drivers/usb/input/hid-core.c from linux-2.6.11-rc2:

Following the good example of drivers/usb/core/message.c line 575, I 
initialized the buffer in hid_get_class_descriptor() to zero.
In the loop of hid_get_class_descriptor() not waiting for any result but 
waiting for a result wich is lower the requested size of the class 
descriptor (line 1290).
usb_hid_configure() should not try to parse the expected length but the 
received (line 1653).

attached is a patch to linux-2.6.11-rc2 with these changes

Nico Huber
.

[-- Attachment #2: linux-2.6.11-rc2-hid-class-descriptor.patch --]
[-- Type: text/plain, Size: 829 bytes --]

--- a/drivers/usb/input/hid-core.c	2005-01-27 23:59:52.000000000 +0100
+++ b/drivers/usb/input/hid-core.c	2005-01-28 00:06:31.000000000 +0100
@@ -1282,12 +1282,15 @@
 		unsigned char type, void *buf, int size)
 {
 	int result, retries = 4;
+
+	memset(buf,0,size);	// Make sure we parse really received data
+
 	do {
 		result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
 				USB_REQ_GET_DESCRIPTOR, USB_RECIP_INTERFACE | USB_DIR_IN,
 				(type << 8), ifnum, buf, size, HZ * USB_CTRL_GET_TIMEOUT);
 		retries--;
-	} while (result < 0 && retries);
+	} while (result < size && retries);
 	return result;
 }
 
@@ -1650,7 +1653,7 @@
 	printk("\n");
 #endif
 
-	if (!(hid = hid_parse_report(rdesc, rsize))) {
+	if (!(hid = hid_parse_report(rdesc, n))) {
 		dbg("parsing report descriptor failed");
 		kfree(rdesc);
 		return NULL;

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2005-01-27 23:26 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-01-27 23:23 Logitech Cordeless Desktop Keyboard fails to report class descriptor Nico Huber

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox