Distribution: gentoo and debian tried, 2.6 and 2.4 tried Hardware Environment: Logitech iTouch keyboard Internet Navigator Software Environment: NA Problem Description: Depending on whether using mousedev/keybdev or hid and depending on whether the used is compiled into the kernel the keyboard will be found as either a mouse, a keybord or both. When found as both mouse and keyboard, some (but not all) of the special keys are interpreted as mouse keys. When found only as keyboard, the same keys does not work at all. When found as a mouse, it is very useless as a keyboard. (Please not that I also have a [Logitech USB-PS/2 Optical Mouse], that always works) When using hid, when compiled as a module the keyboard is detected as a mouse: ehci_hcd 0000:00:03.3: EHCI Host Controller ehci_hcd 0000:00:03.3: irq 225, pci mem e1835000 ehci_hcd 0000:00:03.3: new USB bus registered, assigned bus number 1 PCI: cache line size of 128 is not supported by device 0000:00:03.3 ehci_hcd 0000:00:03.3: USB 2.0 enabled, EHCI 1.00, driver 2003-Dec-29 hub 1-0:1.0: USB hub found hub 1-0:1.0: 6 ports detected drivers/usb/core/usb.c: registered new driver hiddev drivers/usb/core/usb.c: registered new driver hid drivers/usb/input/hid-core.c: v2.0:USB HID core driver ohci_hcd: 2004 Feb 02 USB 1.1 'Open' Host Controller (OHCI) Driver (PCI) ohci_hcd: block sizes: ed 64 td 64 ohci_hcd 0000:00:03.0: OHCI Host Controller ohci_hcd 0000:00:03.0: irq 169, pci mem e18ed000 ohci_hcd 0000:00:03.0: new USB bus registered, assigned bus number 2 hub 2-0:1.0: USB hub found hub 2-0:1.0: 2 ports detected ohci_hcd 0000:00:03.1: OHCI Host Controller ohci_hcd 0000:00:03.1: irq 209, pci mem e1b0d000 ohci_hcd 0000:00:03.1: new USB bus registered, assigned bus number 3 hub 3-0:1.0: USB hub found hub 3-0:1.0: 2 ports detected ohci_hcd 0000:00:03.2: OHCI Host Controller ohci_hcd 0000:00:03.2: irq 217, pci mem e1b0f000 ohci_hcd 0000:00:03.2: new USB bus registered, assigned bus number 4 hub 4-0:1.0: USB hub found hub 4-0:1.0: 2 ports detected usb 2-1: new low speed USB device using address 2 hid: probe of 2-1:1.0 failed with error -5 input: USB HID v1.10 Mouse [Logitech Logitech USB Keyboard] on usb-0000:00:03.0-1 drivers/usb/host/uhci-hcd.c: USB Universal Host Controller Interface driver v2.1 usb 3-1: new low speed USB device using address 2 input: USB HID v1.10 Mouse [Logitech USB-PS/2 Optical Mouse] on usb-0000:00:03.1-1 usbfs: USBDEVFS_CONTROL failed cmd usbmodules dev 2 rqt 128 rq 6 len 9 ret -32 When pulling the cable and pluggin it in again I get (i.e. still failing): usb 3-1: USB disconnect, address 5 usb 4-1: new low speed USB device using address 3 hid: probe of 4-1:1.0 failed with error -5 input: USB HID v1.10 Mouse [Logitech Logitech USB Keyboard] on usb-0000:00:03.2-1 usb 4-1: USB disconnect, address 3 usb 2-2: new low speed USB device using address 7 hid: probe of 2-2:1.0 failed with error -5 hid: probe of 2-2:1.1 failed with error -5 When HID is compiled into the kernel it behaves a bit differently: Feb 26 13:12:49 [kernel] ohci_hcd: 2004 Feb 02 USB 1.1 'Open' Host Controller (OHCI) Driver (PCI) Feb 26 13:12:49 [kernel] ohci_hcd: block sizes: ed 64 td 64 Feb 26 13:12:49 [kernel] ohci_hcd 0000:00:03.0: OHCI Host Controller Feb 26 13:12:49 [kernel] ohci_hcd 0000:00:03.0: irq 169, pci mem e1867000 Feb 26 13:12:49 [kernel] ohci_hcd 0000:00:03.0: new USB bus registered, assigned bus number 2 Feb 26 13:12:49 [kernel] hub 2-0:1.0: USB hub found Feb 26 13:12:49 [kernel] hub 2-0:1.0: 2 ports detected Feb 26 13:12:49 [kernel] ohci_hcd 0000:00:03.1: OHCI Host Controller Feb 26 13:12:49 [kernel] ohci_hcd 0000:00:03.1: irq 209, pci mem e189f000 Feb 26 13:12:49 [kernel] ohci_hcd 0000:00:03.1: new USB bus registered, assigned bus number 3 Feb 26 13:12:49 [kernel] hub 3-0:1.0: USB hub found Feb 26 13:12:49 [kernel] hub 3-0:1.0: 2 ports detected Feb 26 13:12:49 [kernel] ohci_hcd 0000:00:03.2: OHCI Host Controller Feb 26 13:12:49 [kernel] ohci_hcd 0000:00:03.2: irq 217, pci mem e18a1000 Feb 26 13:12:49 [kernel] ohci_hcd 0000:00:03.2: new USB bus registered, assigned bus number 4 Feb 26 13:12:49 [kernel] hub 4-0:1.0: USB hub found Feb 26 13:12:49 [kernel] hub 4-0:1.0: 2 ports detected Feb 26 13:12:49 [kernel] usb 2-1: new low speed USB device using address 2 Feb 26 13:12:50 [kernel] drivers/usb/core/message.c: error getting string descriptor 0 (error=-110) Feb 26 13:12:50 [kernel] HID device not claimed by input or hiddev Feb 26 13:12:50 [kernel] input: USB HID v1.10 Mouse [Logitech Logitech USB Keyboard] on usb-0000:00:03.0-1 Feb 26 13:12:50 [kernel] drivers/usb/host/uhci-hcd.c: USB Universal Host Controller Interface driver v2.1 Feb 26 13:12:50 [kernel] usb 3-1: new low speed USB device using address 2 Feb 26 13:12:50 [kernel] input: USB HID v1.10 Mouse [Logitech USB-PS/2 Optical Mouse] on usb-0000:00:03.1-1 When pulling the cable and pluggin it in again I get (and then it works): Feb 26 13:20:19 [kernel] usb 2-1: USB disconnect, address 2 Feb 26 13:20:19 [kernel] usb 3-1: USB disconnect, address 2 Feb 26 13:20:23 [kernel] usb 2-1: new low speed USB device using address 3 Feb 26 13:20:23 [kernel] input: USB HID v1.10 Keyboard [Logitech Logitech USB Keyboard] on usb-0000:00:03.0-1 Feb 26 13:20:23 [kernel] input: USB HID v1.10 Mouse [Logitech Logitech USB Keyboard] on usb-0000:00:03.0-1 Feb 26 13:20:24 [kernel] usb 3-1: new low speed USB device using address 3 Feb 26 13:20:24 [kernel] input: USB HID v1.10 Mouse [Logitech USB-PS/2 Optical Mouse] on usb-0000:00:03.1-1 When using mousedev/keybdev they must be compiled as modules to detect they keyboard. It is quite random whether the mouse part is found: Feb 25 20:29:35 cine kernel: drivers/usb/core/usb.c: registered new driver usbfs Feb 25 20:29:35 cine kernel: drivers/usb/core/usb.c: registered new driver hub Feb 25 20:29:35 cine kernel: ehci_hcd 0000:00:03.3: EHCI Host Controller Feb 25 20:29:35 cine kernel: ehci_hcd 0000:00:03.3: irq 9, pci mem e0926000 Feb 25 20:29:35 cine kernel: ehci_hcd 0000:00:03.3: new USB bus registered, assigned bus number 1 Feb 25 20:29:35 cine kernel: PCI: cache line size of 128 is not supported by device 0000:00:03.3 Feb 25 20:29:35 cine kernel: ehci_hcd 0000:00:03.3: USB 2.0 enabled, EHCI 1.00, driver 2003-Jun-13 Feb 25 20:29:35 cine kernel: hub 1-0:1.0: USB hub found Feb 25 20:29:35 cine kernel: hub 1-0:1.0: 6 ports detected Feb 25 20:29:35 cine kernel: ohci_hcd 0000:00:03.0: OHCI Host Controller Feb 25 20:29:35 cine kernel: ohci_hcd 0000:00:03.0: irq 6, pci mem e092c000 Feb 25 20:29:35 cine kernel: ohci_hcd 0000:00:03.0: new USB bus registered, assigned bus number 2 Feb 25 20:29:35 cine kernel: hub 2-0:1.0: USB hub found Feb 25 20:29:35 cine kernel: hub 2-0:1.0: 2 ports detected Feb 25 20:29:35 cine kernel: ohci_hcd 0000:00:03.1: OHCI Host Controller Feb 25 20:29:35 cine kernel: ohci_hcd 0000:00:03.1: irq 9, pci mem e094e000 Feb 25 20:29:35 cine kernel: ohci_hcd 0000:00:03.1: new USB bus registered, assigned bus number 3 Feb 25 20:29:35 cine kernel: hub 3-0:1.0: USB hub found Feb 25 20:29:35 cine kernel: hub 3-0:1.0: 2 ports detected Feb 25 20:29:35 cine kernel: ohci_hcd 0000:00:03.2: OHCI Host Controller Feb 25 20:29:35 cine kernel: ohci_hcd 0000:00:03.2: irq 9, pci mem e09ff000 Feb 25 20:29:35 cine kernel: ohci_hcd 0000:00:03.2: new USB bus registered, assigned bus number 4 Feb 25 20:29:35 cine kernel: hub 4-0:1.0: USB hub found Feb 25 20:29:35 cine kernel: hub 4-0:1.0: 2 ports detected Feb 25 20:29:35 cine kernel: drivers/usb/host/uhci-hcd.c: USB Universal Host Controller Interface driver v2.1 Feb 25 20:29:35 cine kernel: Initializing USB Mass Storage driver... Feb 25 20:29:35 cine kernel: drivers/usb/core/usb.c: registered new driver usb-storage Feb 25 20:29:35 cine kernel: USB Mass Storage support registered. Feb 25 20:29:35 cine kernel: hub 2-0:1.0: new USB device on port 1, assigned address 2 Feb 25 20:29:35 cine kernel: hub 3-0:1.0: new USB device on port 1, assigned address 2 Feb 25 20:29:38 cine kernel: drivers/usb/core/usb.c: registered new driver hiddev Feb 25 20:29:38 cine kernel: hid: probe of 2-1:1.0 failed with error -5 Feb 25 20:29:38 cine kernel: drivers/usb/input/hid-core.c: ctrl urb status -32 received Feb 25 20:29:38 cine kernel: input: USB HID v1.10 Mouse [Logitech Logitech USB Keyboard] on usb-0000:00:03.0-1 Feb 25 20:29:38 cine kernel: input: USB HID v1.10 Mouse [Logitech USB-PS/2 Optical Mouse] on usb-0000:00:03.1-1 Feb 25 20:29:38 cine kernel: drivers/usb/core/usb.c: registered new driver hid Feb 25 20:29:38 cine kernel: drivers/usb/input/hid-core.c: v2.0:USB HID core driver Feb 25 20:29:38 cine input.agent[795]: kernel driver evdev already loaded Feb 25 20:29:38 cine input.agent[788]: kernel driver evdev already loaded Feb 25 20:29:38 cine input.agent[788]: kernel driver mousedev already loaded Feb 25 20:29:38 cine kernel: input: Logitech Logitech USB Keyboard on usb-0000:00:03.0-1 Feb 25 20:29:38 cine kernel: drivers/usb/core/usb.c: registered new driver usbkbd Feb 25 20:29:38 cine kernel: drivers/usb/input/usbkbd.c: :USB HID Boot Protocol keyboard driver Feb 25 20:29:38 cine kernel: drivers/usb/core/usb.c: registered new driver usbmouse Feb 25 20:29:38 cine kernel: drivers/usb/input/usbmouse.c: v1.6:USB HID Boot Protocol mouse driver Feb 25 20:29:39 cine input.agent[780]: kernel driver evdev already loaded Feb 25 20:29:39 cine input.agent[780]: kernel driver mousedev already loaded Steps to reproduce:
Distribution: Self-build 2.6.5 (with gcc 3.3.2) Hardware Environment: Logitech Internet Navigator Keyboard (USB) I had the same problem with 2.6.5. Most times the Kernel didn't bind the hid-driver to the keyboard. I have tracked down the Problem to this this function: linux/drivers/usb/input/hid-core.c > static int hid_get_class_descriptor(struct usb_device *dev, int ifnum, > unsigned char type, void *buf, int size) > { > return 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); > } In some cases this function returns without any byte read. The debug-output shows: "report descriptor (size xyz, read 0)" and tries to interpret the data. I think usb_control_msg times out too fast. I for myself solved the problem by looping until an error occured or enough data has been read. I know its *dirty*, but it works fine for me.
I get the same randomly-found problems with my Logitech Internet Navigator Keyboard - most of the time, either the keyboard or the aditional keys are not detected. (ie. usbhid: probe of 1-1.3:1.0 failed with error -5) Within linux/drivers/usb/input/hid-core.c for linux-2.6.8-rc4, I tried doing the following to "fix" the problem: static int hid_get_class_descriptor(struct usb_device *dev, int ifnum, unsigned char type, void *buf, int size) { 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); return 0; } Basically, it only works when I return 0. Any non-zero return value (i think) results in the -5 probe error, and the device not being detected.
Nevermind .. my last suggestion to force the function to not return an error did not work today .. although, honestly, it did appear to work for a few days =) I will try to loop for data, as Alex suggested.
Created attachment 3688 [details] Get descriptor retry patch
ie. static int hid_get_class_descriptor(struct usb_device *dev, int ifnum, unsigned char type, void *buf, int size) { int retv = 0; while ( retv < 2 ) { retv = 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); } return retv; }
has the patch actually been applied? ... i'm using kernel v2.6.10 (gentoo-r2), and it was not patched =(
the patch isn't working properly, for me (linux-2.6.10-gentoo-r2, Logitech USB Keyboard) - my keyboard (or the 'mouse' on the keyboard) is still frequently not detected. i think result=0 is also an error, and instead, we should loop until result > 0. i did this, and so far, it seems to work. also, any ideas why hid_get_class_descriptor would fail?
You should loop while result==0. Result<0 means there was an error.
Is this still a problem on 2.6.13-rc6 or greater? If so, please reopen with the new information.