USB subsystem confuses serial devices with ehci controller
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
linux-source-2.6.22 (Ubuntu) |
Fix Released
|
Low
|
Tim Gardner |
Bug Description
Binary package hint: linux-386
System configuration
DELL Latitude D820 laptop with
Kubuntu Linux Feisty
Kernel Linux version 2.6.20-16-generic (root@terranova) (gcc version 4.1.2 (Ubuntu 4.1.2-0ubuntu4)) #2 SMP Thu Jun 7 20:19:32 UTC 2007
I am trying to use a PCMCIA PC-CARD GPRS/UMTS/
PC-CARD is branded as ONDA NH501HS and is extremely popular in Italy since it is the "default" UMTS PC-CARD by the largest provider in the country (Telecom Italia / Tim / Alice).
PC-CARD is actually a re-branded ZTE MF330 so it should be quite popular in other countries as well.
Apparently, also the newer ONDA H600 is again a ZTE MF330, so the following should apply also to that card.
When the card is inserted into the PCMCIA slot, the following should happen:
- kernel should recognize an OHCI Host Controller
- kernel should recognize an ONDA CDMA Technologies MSM (Manufacturer: Qualcomm, Incorporated) attached to it
- kernel should configure 3 ttyUSB devices provided by the 3 serial interfaces of the ONDA MSM
Unfortunately, with the above kernel this does not happen
Rather, the kernel gets confused, detects an EHCI Controller, loads the kernel module for it and no serial interfaces appear.
As an hack, the correct behaviour can be obtained by blacklisting the ehci_hcd for instance in /etc/modprobe.
When the ehci_hcd is blacklisted everything works correctly and the ONDA Wireless UMTS PC-CARD gets perfectly usable.
I believe that the newer Sierra wireless PC-CARDS have a very similar problem (and probably are also based on a similar Qualcomm chipset).
Please report this upstream, so a proper fix can be introduced in the mainline kernel and the ONDA/ZTE PC-CARDS can be come nicely working under Linux and Ubuntu.
Possibly useful information:
- Linux kernel has already misbehaved on ehci, with blacklisting as quick hack to get the correct behaviour (see for instance bug 21613 on the ubuntu bug archive)
- USB Vendor/Product IDs of the ONDA CDMA Technologies MSM are 05c6/6613
- Some users have suggested adding the above ID couple as:
{ USB_DEVICE(0x05C6, 0x6613) }, /* Onda H600 ZTE MF330 */
in the array
static struct usb_device_id id_table []
and in the
static struct usb_device_id id_table_3port []
of the sierra.c file in the kernel sources, but I do not know if this is the correct location since the sierra.c file is meant for sierra's devices and the ONDA/ZTE one is not a sierra PC_CARD (to the best of my knowledge is not even a rebranded one, for instance it has a different AT extended command set).
Update:
There are actually 2 independent problems:
1) Problem 1.
Unless ehci_hcd is blacklisted it is impossible to use the USB interfaces on the PC card, regardless of any other patch on sierra.c or whatever.
I do not know the reason for this. Maybe it is tied to the usb suspend problems that are afflicting many usb users.
2) Problem 2.
Probably even after the ehci_hcd thing is fixed one shall need to correct the problems associated with the limited throughput of the usbserial converter. To the best of my knowledge this is due to the fact that the "general" usbserial connector associates too small buffers to the endpoints. Apparently for the ZTE MF330, Onda H600 and H501HS there are two solutions:
- either patch the sierra.c usbserial driver so that the ZTE MF330 and Onda PC CARDS can use it
- or patch the generic usbserial driver with the maxsize patch that is floating on the internet
Probably the sierra.c solution is more elegant. It can work since both the sierra PC CARDS and the ZTE/ONDA ones appear to have a similar qualcomm chipset.
The patch involves adding the vendor/product ID to sierra.c as
{ USB_DEVICE(0x05C6, 0x6613) }, /* Onda H600 ZTE MF330 */
in the array
static struct usb_device_id id_table []
and in the
static struct usb_device_id id_table_1port [] // NOTE: this is 1 port, the 3 port in my previous post is wrong.