All of lore.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.