USB4BSD (USB2): Microsoft 4000 keyboard unusable

From: Jeremy Chadwick <koitsu_at_FreeBSD.org>
Date: Thu, 6 Nov 2008 23:52:32 -0800
So this weekend, as a result of some insane disk/controller/ZFS
problems I experienced, followed by reproducible kernel wedging when
trying to copy data to a USB flash drive, I thought I'd take the plunge
and give CURRENT a shot.  All went well, and so I decided to switch
over to the USB2 stack to help test.

Everything built (csup date: 2008/11/06 ~2200 PST) fine, no issues --
until I noticed my USB keyboard didn't function any longer.

During boot0/boot2/loader, the keyboard functions (as expected, re: USB
Legacy option is enabled in my BIOS), and the keyboard LEDs are lit as
expected.  The kernel loads, some drivers initialise, and the LEDs go
off.  Once the USB2 stack loads, the keyboard LEDs turn back up, but as
stated, no keypresses are registered.  I was forced to hook up a PS/2
keyboard.

Situation is the same no matter if I try to enter single-user or not.

Disabling atkbd/atkbdc via hints made no difference (other than killing
my ability to use a real PS/2 keyboard), and disabling kbdmux also made
no difference.

In multi-user (with kbdmux enabled), I also tried doing what the
last section of kbdcontrol(1) recommended, but I witnessed a series of
errors during open() or ioctl(), and of course the USB keyboard still
did not function.

icarus# kbdcontrol -K < /dev/console
kbd1
    kbdmux0, type:AT 101/102 (2)
icarus# kbdcontrol -a atkbd0 < /dev/kbdmux0
/dev/kbdmux0: Device busy.
icarus# kbdcontrol -a ukbd0 < /dev/kbdmux0
/dev/kbdmux0: Device busy.
icarus# kbdcontrol -k /dev/kbdmux0 < /dev/console
kbdcontrol: cannot open /dev/kbdmux0: Device busy

The keyboard in question is a Microsoft Natural Ergonomic 4000.  This
keyboard is known for being a real pain in the ass, since some of the
multimedia keys, and the infamous F-Lock key, are HID-controlled, while
alphanumeric are USB keyboard class controlled.  (For sake of example,
Linux has a *huge* web page dedicated to dealing with this keyboard
alone.)

dmesg and ls -l /dev/u* are below.

Let me know if I can enable something to help debug this; if remote
access is needed (once multi-user is up), I can provide it.

usbus0: 12Mbps Full Speed USB v1.0
ugen0.1: <Intel> at usbus0
ushub0: <Intel UHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus0
ushub0: 2 ports with 2 removable, self powered
usbus1: 12Mbps Full Speed USB v1.0
ugen1.1: <Intel> at usbus1
ushub1: <Intel UHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus1
ushub1: 2 ports with 2 removable, self powered
usbus2: 12Mbps Full Speed USB v1.0
ugen2.1: <Intel> at usbus2
ushub2: <Intel UHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus2
ushub2: 2 ports with 2 removable, self powered
usbus3: 12Mbps Full Speed USB v1.0
ugen3.1: <Intel> at usbus3
ushub3: <Intel UHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus3
ushub3: 2 ports with 2 removable, self powered
usbus4: 480Mbps High Speed USB v2.0
ugen4.1: <Intel> at usbus4
ushub4: <Intel EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus4
ushub4: 8 ports with 8 removable, self powered
acd0: DVDR <PLEXTOR DVDR PX-708A/1.11> at ata0-master UDMA33
ad4: 190782MB <WDC WD2000JD-00HBB0 08.02D08> at ata2-master SATA150
ad6: 476940MB <WDC WD5000AAKS-00TMA0 12.01C01> at ata3-master SATA300
ad8: 476940MB <WDC WD5000AAKS-00YGA0 12.01C02> at ata4-master SATA300
ad10: 715404MB <WDC WD7500AACS-00D6B0 01.01A01> at ata5-master SATA300
SMP: AP CPU #1 Launched!
Trying to mount root from ufs:/dev/ad4s1a
ugen0.2: <Microsoft> at usbus0
ukbd0: <Microsoft product 0x00db, class 0/0, rev 2.00/1.73, addr 2> on usbus0
kbd2 at ukbd0
uhid0: <Microsoft product 0x00db, class 0/0, rev 2.00/1.73, addr 2> on usbus0
Symlink: uhid0 -> usb0.2.1.16

$ ls -l /dev/u*
crw-------    1 root      wheel       0,  87  6 Nov 23:26 /dev/ukbd0
lrwxr-xr-x    1 root      wheel            6  6 Nov 23:26 /dev/urandom -> random
crwxrwxrwx    1 root      operator    0,  67  6 Nov 23:26 /dev/usb

-- 
| Jeremy Chadwick                                jdc at parodius.com |
| Parodius Networking                       http://www.parodius.com/ |
| UNIX Systems Administrator                  Mountain View, CA, USA |
| Making life hard for others since 1977.              PGP: 4BD6C0CB |
Received on Fri Nov 07 2008 - 07:02:35 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:37 UTC