I add your driver in my custom linux (version 3.10.17).
But, it doesn’t work.
Kernel logs :
[…]
usb 1-1.3: new high-speed USB device number 3 using ci_hdrc
usb 1-1.3: config 1 has an invalid interface number: 8 but max is 3
usb 1-1.3: config 1 has no interface number 1
usb 1-1.3: config 2 has an invalid interface number: 12 but max is 1
usb 1-1.3: config 2 has an invalid interface number: 13 but max is 1
usb 1-1.3: config 2 has an invalid interface number: 13 but max is 1
usb 1-1.3: config 2 has no interface number 0
usb 1-1.3: config 2 has no interface number 1
[…]
/ # insmod /usr/lib/modules/gobiserial.ko debug=1
usbcore: registered new interface driver gobiserial
usbserial: USB Serial support registered for GobiSerial
GobiSerial::GobiProbe
GobiSerial::GobiProbe Num Interfaces = 2
GobiSerial::GobiProbe This Interface = 12
GobiSerial::GobiProbe Ignoring non vendor class interface #12
GobiSerial::GobiProbe
GobiSerial::GobiProbe Num Interfaces = 2
GobiSerial::GobiProbe This Interface = 13
GobiSerial::GobiProbe Ignoring non vendor class interface #13
gobiserial: 2015-05-13/SWI_2.24:GobiSerial
/ # insmod /usr/lib/modules/usbnet.ko
/ # insmod /usr/lib/modules/gobinet.ko debug=1
GobiNet: 2015-07-06/SWI_2.33
GobiNet::GobiNetDriverBind Ignoring non vendor class interface #12
GobiNet::GobiUSBNetProbe usbnet_probe failed -19
GobiNet::GobiNetDriverBind invalid num_altsetting 2
GobiNet::GobiUSBNetProbe usbnet_probe failed -19
usbcore: registered new interface driver GobiNet
I tried on a PC (x86) with a ubuntu 14.04 LTS and I have the same issue.
Your modem is configured for two different configs: #1 is QMI (+AT etc) while #2 is MBIM only.
The Linux kernel has always preferred proper USB classes over vendor specifc functions. One unexpected(?) result of that is that it won’t necessarily select the first config by default. It loops over the available configs and selects the first one with a proper class code on the first function. That will be config #2 in your case because it has a CDC MBIM function as the first (and only) function. config #1 has only vendor specific functions. You can verify this with “lsusb -v”
Right. The GobiSerial and GobiNet drivers support the vendor specific functions of config #1. The MBIM function is supported by the mainline cdc_mbim driver.
You can manually switch to config #1 by writing “1” to the sysfs attribute:
But the firmware might not like this if it happens “too long” after the modem booted, so it is better to automatically do it on device discovery. If you use udev, then a simple rule like this will fix that (all on a single line into e.g. /etc/udev/rules.d/40-my-local.rules or whatever):