Speaking of PC accessories, we recently purchased a 6 port USB 2.0 card off of Ebay for $10. The board came with two USB cables and a box that was intended to be placed in a drive bay for front-panel access to 2 of the ports; however, it works equally well if you run the cords out of the back of the CPU and put the bay on your desk. All the card says on it is USB 2.0 PCI TO USB 2.0 Card. The packaging is generic as well. It turns out that this is an model HE460A H_E brand device made in China by Shunde ZhuoHua Electronic Co Ltd. Here is a link to the product details.
We have an embedded USB controller on our motherboard from 2001. It turns out that the USB driver is different than the driver for the new card. Not a surprise, really, but kind of annoying. After installing the PCI card and rebooting, we were unable to see our Freecom USBCard. The whole idea of the expansion card was so we could plug in the Freecom card quickly and easily. What to do?
What to do? Recompile the Linux kernel, of course. We like to stick the USB stuff in the kernel, not as modules. It works better… well, Agatha thinks so… Urbana probably wouldn’t do it this way… she certainly has no problem using the printer hooked up to Agatha’s machine, though. Anyway, the key thing is to add these config options to the kernel:
CONFIG_USB_EHCI_HCD=y CONFIG_USB_OHCI=y |
We previously just had:
CONFIG_USB_UHCI_ALT=y |
This works with many USB devices, including an HP 1200 Printer, a Handspring Visor, a Sony Cyber-shot model DSC-U20 camera, and the Freecom USBCard. It handles both the embedded USB controller on the motherboard, and our new controller. The kernel is 1.2 megs. A lot of stuff is embedded in the kernel. Again, Agatha *likes that*.
Here are some interesting entries from dmesg:
usb.c: registered new driver usbdevfs usb.c: registered new driver hub PCI: Found IRQ 9 for device 02:0b.3 PCI: Sharing IRQ 9 with 00:1f.4 ehci_hcd 02:0b.3: ALi Corporation USB 2.0 Controller ehci_hcd 02:0b.3: irq 9, pci mem f881c000 usb.c: new USB bus registered, assigned bus number 1 PCI: cache line size of 128 is not supported by device 02:0b.3 ehci_hcd 02:0b.3: USB 2.0 enabled, EHCI 1.00, driver 2003-Dec-29/2.4 hub.c: USB hub found hub.c: 6 ports detected host/uhci.c: USB Universal Host Controller Interface driver v1.1 PCI: Found IRQ 9 for device 00:1f.2 PCI: Setting latency timer of device 00:1f.2 to 64 host/uhci.c: USB UHCI at I/O 0xb400, IRQ 9 usb.c: new USB bus registered, assigned bus number 2 hub.c: USB hub found hub.c: 2 ports detected PCI: Found IRQ 9 for device 00:1f.4 PCI: Sharing IRQ 9 with 02:0b.3 PCI: Setting latency timer of device 00:1f.4 to 64 host/uhci.c: USB UHCI at I/O 0xb000, IRQ 9 usb.c: new USB bus registered, assigned bus number 3 hub.c: USB hub found hub.c: 2 ports detected PCI: Found IRQ 9 for device 02:0b.0 host/usb-ohci.c: USB OHCI at membase 0xf881e000, IRQ 9 host/usb-ohci.c: usb-02:0b.0, ALi Corporation USB 1.1 Controller usb.c: new USB bus registered, assigned bus number 4 hub.c: USB hub found hub.c: 2 ports detected PCI: Found IRQ 9 for device 02:0b.1 host/usb-ohci.c: USB OHCI at membase 0xf8820000, IRQ 9 host/usb-ohci.c: usb-02:0b.1, ALi Corporation USB 1.1 Controller (#2) usb.c: new USB bus registered, assigned bus number 5 hub.c: USB hub found hub.c: 2 ports detected PCI: Found IRQ 9 for device 02:0b.2 PCI: Sharing IRQ 9 with 02:0a.0 host/usb-ohci.c: USB OHCI at membase 0xf8822000, IRQ 9 host/usb-ohci.c: usb-02:0b.2, ALi Corporation USB 1.1 Controller (#3) usb.c: new USB bus registered, assigned bus number 6 hub.c: USB hub found hub.c: 2 ports detected usb.c: registered new driver usblp printer.c: v0.13: USB Printer Device Class driver usb.c: registered new driver serial usbserial.c: USB Serial Driver core v1.4 usbserial.c: USB Serial support registered for Handspring Visor / Treo / Palm 4.0 / Clié.x usbserial.c: USB Serial support registered for Sony Clié.5 visor.c: USB HandSpring Visor, Palm m50x, Treo, Sony Cliériver v1.7 Initializing USB Mass Storage driver... usb.c: registered new driver usb-storage USB Mass Storage support registered. . . . hub.c: new USB device 02:0b.3-2, assigned address 2 usb-storage: act_altsettting is 0 usb-storage: id_index calculated to be: 89 usb-storage: Array length appears to be: 91 usb-storage: USB Mass Storage device detected usb-storage: Endpoints: In: 0xf7ca5e00 Out: 0xf7ca5e14 Int: 0x00000000 (Period 0) usb-storage: New GUID 1963130000006b3b14000634 usb-storage: GetMaxLUN command result is 1, data is 0 usb-storage: Transport: Bulk usb-storage: Protocol: Transparent SCSI usb-storage: *** thread sleeping. scsi1 : SCSI emulation for USB Mass Storage devices usb-storage: queuecommand() called usb-storage: *** thread awakened. usb-storage: Command INQUIRY (6 bytes) usb-storage: 12 00 00 00 ff 00 bd f7 ac ba be f7 usb-storage: Bulk command S 0x43425355 T 0x1 Trg 0 LUN 0 L 255 F 128 CL 6 usb-storage: Bulk command transfer result=0 usb-storage: usb_stor_transfer_partial(): xfer 255 bytes usb-storage: usb_stor_bulk_msg() returned 0 xferred 36/255 usb-storage: Bulk data transfer result 0x1 usb-storage: Attempting to get CSW... usb-storage: Bulk status result = 0 usb-storage: Bulk status Sig 0x53425355 T 0x1 R 0 Stat 0x0 usb-storage: Fixing INQUIRY data to show SCSI rev 2 - was 0 usb-storage: scsi cmd done, result=0x0 usb-storage: *** thread sleeping. Vendor: Model: USB Card Rev: 1.13 Type: Direct-Access ANSI SCSI revision: 02 . . . hub.c: new USB device 00:1f.2-1, assigned address 2 printer.c: usblp0: USB Bidirectional printer dev 2 if 0 alt 1 proto 2 vid 0x03F0 pid 0x0317 |
Here are the /proc/bus/usb/devices entries:
T: Bus=06 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 0.00 S: Product=USB OHCI Root Hub S: SerialNumber=f8822000 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms T: Bus=05 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 0.00 S: Product=USB OHCI Root Hub S: SerialNumber=f8820000 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms T: Bus=04 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 0.00 S: Product=USB OHCI Root Hub S: SerialNumber=f881e000 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms T: Bus=03 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 0.00 S: Product=USB UHCI-alt Root Hub S: SerialNumber=b000 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 0.00 S: Product=USB UHCI-alt Root Hub S: SerialNumber=b400 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0 D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=03f0 ProdID=0317 Rev= 1.00 S: Manufacturer=HewLett Packard S: Product=HP LaserJet 1200 S: SerialNumber=00CNCV116072 C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 2mA I: If#= 0 Alt= 0 #EPs= 3 Cls=07(print) Sub=01 Prot=03 Driver=usblp E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl=255ms I: If#= 0 Alt= 1 #EPs= 2 Cls=07(print) Sub=01 Prot=02 Driver=usblp E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms I: If#= 0 Alt= 2 #EPs= 1 Cls=07(print) Sub=01 Prot=01 Driver=usblp E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms T: Bus=02 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 5 Spd=12 MxCh= 0 D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=16 #Cfgs= 1 P: Vendor=082d ProdID=0100 Rev= 1.00 S: Manufacturer=Handspring Inc S: Product=Handspring Visor C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 2mA I: If#= 0 Alt= 0 #EPs= 4 Cls=ff(vend.) Sub=00 Prot=00 Driver=serial E: Ad=81(I) Atr=02(Bulk) MxPS= 16 Ivl=0ms E: Ad=01(O) Atr=02(Bulk) MxPS= 16 Ivl=0ms E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 6 B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 2.04 S: Manufacturer=Linux 2.4.25 ehci_hcd S: Product=ALi Corporation USB 2.0 Controller S: SerialNumber=02:0b.3 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=256ms T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=1963 ProdID=1300 Rev= 0.50 S: Manufacturer= S: Product=USB Card S: SerialNumber=6B3B14000634 C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms |