Problem with Qualcomm HS-USB 9201 WWAN card

I have a Lenovo T400s with a Qualcomm HS-USB 9201 WWAN card that has openSUSE 11.2 x86_64 installed. The card is attached to /dev/ttyUSB0, but is not recognized by NetworkManager. I’ve created /lib/firmware/gobi and copied the firmware for the card to the directory, but modemmanager does not load the firmware.

Am I putting the firmware in the correct directory? Has anyone else had success in getting this card to work?

Pertinent sections of log files below.

lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 17ef:480d Lenovo
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 05c6:9201 Qualcomm, Inc.
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 002: ID 147e:2016 Upek Biometric Touchchip/Touchstrip Fingerprint Sensor
Bus 004 Device 003: ID 0a5c:2145 Broadcom Corp.
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

/var/log/messages
Dec 16 10:27:59 linux-mxxj modem-manager: Loaded plugin Ericsson MBM
Dec 16 10:27:59 linux-mxxj modem-manager: Loaded plugin Huawei
Dec 16 10:27:59 linux-mxxj modem-manager: Loaded plugin Sierra
Dec 16 10:27:59 linux-mxxj modem-manager: Loaded plugin Gobi
Dec 16 10:27:59 linux-mxxj modem-manager: Loaded plugin Option High-Speed
Dec 16 10:27:59 linux-mxxj modem-manager: Loaded plugin Nokia
Dec 16 10:27:59 linux-mxxj modem-manager: Loaded plugin Novatel
Dec 16 10:27:59 linux-mxxj modem-manager: Loaded plugin Generic
Dec 16 10:27:59 linux-mxxj modem-manager: Loaded plugin ZTE
Dec 16 10:27:59 linux-mxxj modem-manager: Loaded plugin Option
Dec 16 10:27:59 linux-mxxj modem-manager: Loaded plugin MotoC
Dec 16 10:27:59 linux-mxxj modem-manager: (ttyS4) opening serial device…
Dec 16 10:27:59 linux-mxxj modem-manager: (ttyS4): probe requested by plugin ‘Generic’
Dec 16 10:27:59 linux-mxxj modem-manager: (ttyUSB0) opening serial device…
Dec 16 10:27:59 linux-mxxj modem-manager: (ttyUSB0): probe requested by plugin ‘Gobi’
Dec 16 10:28:11 linux-mxxj modem-manager: (ttyS4) closing serial device…
Dec 16 10:28:11 linux-mxxj modem-manager: (ttyUSB0) closing serial device…
Dec 16 10:43:49 linux-mxxj kernel: 962.385271] qcserial ttyUSB0: Qualcomm USB modem converter now disconnected from ttyUSB0
Dec 16 10:43:49 linux-mxxj kernel: 962.386565] USB Serial deregistering driver Qualcomm USB modem
Dec 16 10:43:58 linux-mxxj kernel: 971.421917] USB Serial support registered for Qualcomm USB modem
Dec 16 10:43:58 linux-mxxj kernel: 971.422669] qcserial 2-4:1.0: Qualcomm USB modem converter detected
Dec 16 10:43:58 linux-mxxj kernel: 971.423407] usb 2-4: Qualcomm USB modem converter now attached to ttyUSB0

lshal
udi = ‘/org/freedesktop/Hal/devices/usb_device_5c6_9201_noserial’
info.linux.driver = ‘usb’ (string)
info.parent = ‘/org/freedesktop/Hal/devices/usb_device_1d6b_2_0000_00_1d_7’ (string)
info.product = ‘Qualcomm HS-USB’ (string)
info.subsystem = ‘usb_device’ (string)
info.udi = ‘/org/freedesktop/Hal/devices/usb_device_5c6_9201_noserial’ (string)
info.vendor = ‘Qualcomm, Inc.’ (string)
linux.device_file = ‘/dev/bus/usb/002/002’ (string)
linux.hotplug_type = 2 (0x2) (int)
linux.subsystem = ‘usb’ (string)
linux.sysfs_path = ‘/sys/devices/pci0000:00/0000:00:1d.7/usb2/2-4’ (string)
usb_device.bus_number = 2 (0x2) (int)
usb_device.can_wake_up = true (bool)
usb_device.configuration_value = 1 (0x1) (int)
usb_device.device_class = 0 (0x0) (int)
usb_device.device_protocol = 0 (0x0) (int)
usb_device.device_revision_bcd = 1 (0x1) (int)
usb_device.device_subclass = 0 (0x0) (int)
usb_device.is_self_powered = true (bool)
usb_device.linux.device_number = 2 (0x2) (int)
usb_device.linux.sysfs_path = ‘/sys/devices/pci0000:00/0000:00:1d.7/usb2/2-4’ (string)
usb_device.max_power = 500 (0x1f4) (int)
usb_device.num_configurations = 1 (0x1) (int)
usb_device.num_interfaces = 1 (0x1) (int)
usb_device.num_ports = 0 (0x0) (int)
usb_device.product = ‘Qualcomm HS-USB’ (string)
usb_device.product_id = 37377 (0x9201) (int)
usb_device.speed = 480.0 (480) (double)
usb_device.vendor = ‘Qualcomm, Inc.’ (string)
usb_device.vendor_id = 1478 (0x5c6) (int)
usb_device.version = 2.0 (2) (double)

udi = ‘/org/freedesktop/Hal/devices/usb_device_5c6_9201_noserial_if0’
info.linux.driver = ‘qcserial’ (string)
info.parent = ‘/org/freedesktop/Hal/devices/usb_device_5c6_9201_noserial’ (string)
info.product = ‘USB Vendor Specific Interface’ (string)
info.subsystem = ‘usb’ (string)
info.udi = ‘/org/freedesktop/Hal/devices/usb_device_5c6_9201_noserial_if0’ (string)
linux.hotplug_type = 2 (0x2) (int)
linux.subsystem = ‘usb’ (string)
linux.sysfs_path = ‘/sys/devices/pci0000:00/0000:00:1d.7/usb2/2-4/2-4:1.0’ (string)
usb.bus_number = 2 (0x2) (int)
usb.can_wake_up = true (bool)
usb.configuration_value = 1 (0x1) (int)
usb.device_class = 0 (0x0) (int)
usb.device_protocol = 0 (0x0) (int)
usb.device_revision_bcd = 1 (0x1) (int)
usb.device_subclass = 0 (0x0) (int)
usb.interface.class = 255 (0xff) (int)
usb.interface.number = 0 (0x0) (int)
usb.interface.protocol = 255 (0xff) (int)
usb.interface.subclass = 255 (0xff) (int)
usb.is_self_powered = true (bool)
usb.linux.device_number = 2 (0x2) (int)
usb.linux.sysfs_path = ‘/sys/devices/pci0000:00/0000:00:1d.7/usb2/2-4/2-4:1.0’ (string)
usb.max_power = 500 (0x1f4) (int)
usb.num_configurations = 1 (0x1) (int)
usb.num_interfaces = 1 (0x1) (int)
usb.num_ports = 0 (0x0) (int)
usb.product = ‘USB Vendor Specific Interface’ (string)
usb.product_id = 37377 (0x9201) (int)
usb.speed = 480.0 (480) (double)
usb.vendor = ‘Qualcomm, Inc.’ (string)
usb.vendor_id = 1478 (0x5c6) (int)
usb.version = 2.0 (2) (double)

udi = ‘/org/freedesktop/Hal/devices/usb_device_5c6_9201_noserial_if0_serial_usb_0’
info.capabilities = {‘serial’} (string list)
info.category = ‘serial’ (string)
info.parent = ‘/org/freedesktop/Hal/devices/usb_device_5c6_9201_noserial_if0’ (string)
info.product = ‘Qualcomm HS-USB’ (string)
info.subsystem = ‘tty’ (string)
info.udi = ‘/org/freedesktop/Hal/devices/usb_device_5c6_9201_noserial_if0_serial_usb_0’ (string)
linux.device_file = ‘/dev/ttyUSB0’ (string)
linux.hotplug_type = 2 (0x2) (int)
linux.subsystem = ‘tty’ (string)
linux.sysfs_path = ‘/sys/devices/pci0000:00/0000:00:1d.7/usb2/2-4/2-4:1.0/ttyUSB0/tty/ttyUSB0’ (string)
serial.device = ‘/dev/ttyUSB0’ (string)
serial.originating_device = ‘/org/freedesktop/Hal/devices/usb_device_5c6_9201_noserial_if0’ (string)
serial.port = 0 (0x0) (int)
serial.type = ‘usb’ (string)

udi = ‘/org/freedesktop/Hal/devices/usb_device_1d6b_2_0000_00_1d_7_if0’
info.linux.driver = ‘hub’ (string)
info.parent = ‘/org/freedesktop/Hal/devices/usb_device_1d6b_2_0000_00_1d_7’ (string)
info.product = ‘USB Hub Interface’ (string)
info.subsystem = ‘usb’ (string)
info.udi = ‘/org/freedesktop/Hal/devices/usb_device_1d6b_2_0000_00_1d_7_if0’ (string)
linux.hotplug_type = 2 (0x2) (int)
linux.subsystem = ‘usb’ (string)
linux.sysfs_path = ‘/sys/devices/pci0000:00/0000:00:1d.7/usb2/2-0:1.0’ (string)
usb.bus_number = 2 (0x2) (int)
usb.can_wake_up = true (bool)
usb.configuration_value = 1 (0x1) (int)
usb.device_class = 9 (0x9) (int)
usb.device_protocol = 0 (0x0) (int)
usb.device_revision_bcd = 518 (0x206) (int)
usb.device_subclass = 0 (0x0) (int)
usb.interface.class = 9 (0x9) (int)
usb.interface.number = 0 (0x0) (int)
usb.interface.protocol = 0 (0x0) (int)
usb.interface.subclass = 0 (0x0) (int)
usb.is_self_powered = true (bool)
usb.linux.device_number = 1 (0x1) (int)
usb.linux.sysfs_path = ‘/sys/devices/pci0000:00/0000:00:1d.7/usb2/2-0:1.0’ (string)
usb.max_power = 0 (0x0) (int)
usb.num_configurations = 1 (0x1) (int)
usb.num_interfaces = 1 (0x1) (int)
usb.num_ports = 6 (0x6) (int)
usb.product = ‘USB Hub Interface’ (string)
usb.product_id = 2 (0x2) (int)
usb.serial = ‘0000:00:1d.7’ (string)
usb.speed = 480.0 (480) (double)
usb.vendor = ‘Linux Foundation’ (string)
usb.vendor_id = 7531 (0x1d6b) (int)
usb.version = 2.0 (2) (double)

I solved my problem. I had to download the source for gobi_loader and modify the 60-gobi.rules for the vendor and product ID for my card. Ran make to create the gobi_loader. I then copied the 60-gobi.rules file to /etc/udev/rules.d and /lib/udev/rules.d (probably don’t need the last one). Then ran make install. After reloading the qcserail module knetwork manager was able to pick up the 3G modem.

well done birdra;

what got you to that solution?

To make a long story short. I started looking for any kind of app or file that would load the firmware. That led me to the gobi_loader site, where I read that the 60-gobi.rules files should be in the /etc/udev/rules.d directory. Since, I didn’t find the file there I downloaded the source files and went through the code to see if I was missing anything else.

One thing I did find out after further testing is that you may have to reboot your PC to have the system see the card as the system does not always detect the modem after restarting the qcserial module.

thanks; I had seen the phrase

gobi_loader

appear on the Ubuntu network forums, and it has caused issues there too

Ubuntu Forums - Search Results