Problem with the linux driver of MC7355

Hello,

I want use your module MC7355 in our platform linux based on a iMX6.

I download your driver GOBI (file SierraLinuxQMIdriversS2.24N2.33.tar.bz2) on
source.sierrawireless.com/resour … n2,-d-,33/

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.

Could you explain me this problem?

Bests regards,

Yoann

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:

# echo 1  >/sys/bus/usb/devices/1-1.3/bConfigurationValue

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):

SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="1199", ATTR{idProduct}=="68a2", ATTR{bConfigurationValue}=="2" ATTR{bConfigurationValue}="1"

You’ll have to replace 1199 and 68a2 the correct VID and PID for your modem if different (you did’t tell us these values).

Thanks a lot dl5162.

It works.
I can send AT commands with the device ttyUSB2.

Yoann