Hi Johan,

I originally sent this to Bjørn Mork as he added MC73xx support to the
qcserial driver in commit 70a3615fc07c2330ed7c1e922f3c44f4a67c0762
("usb: qcserial: add Sierra Wireless MC73xx") but he asked me to forward
this this to you.

When using a MC7304 with firmware revision SWI9X15C_05.05.16.02 on
Knoppix 7.4.2 with Linux kernel 3.16.3 and the qcserial driver I noticed
that AT unsolicited response codes (URCs) like +CREG were missing (the mobile
has been set to AT+CREG=2 before and <LACx>/<CIx> is used instead of the real
LACs/CIs):

# switching from GSM to UMTS

at+creg?
+CREG: 2,1,"<LAC1>","<CI1>",0

OK
at+cops=1,2,"26207",2
OK
at+creg?
+CREG: 2,1,"<LAC2>","<CI2>",2

OK

Switching the mobile back to the option driver

# rmmod qcserial
# modprobe option
# echo 1199 68c0 > /sys/bus/usb-serial/drivers/option1/new_id 
# cat /proc/tty/driver/usbserial 
...
4: module:option name:"GSM modem (1-port)" vendor:1199 product:68c0 num_ports:1 
port:0 path:usb-0000:00:1d.7-5.2
5: module:option name:"GSM modem (1-port)" vendor:1199 product:68c0 num_ports:1 
port:0 path:usb-0000:00:1d.7-5.2
6: module:option name:"GSM modem (1-port)" vendor:1199 product:68c0 num_ports:1 
port:0 path:usb-0000:00:1d.7-5.2

caused the missing +CREG: to reappear:

at+creg?
+CREG: 2,1,"<LAC1>","<CI1>",0

OK
at+cops=1,2,"26207",2
OK

+CREG: 1,"<LAC2>","<CI2>",2

at+creg?
+CREG: 2,1,"<LAC2>","<CI2>",2

OK

The URCs are also present when using the vendor GobiSerial driver.
Besides +CREG: other URCs like e.g. +CUSD: or +CMT: are also affected.
MC7710 devices with VID/PID 0x1199/0x68a2 which I cross-checked for
comparison do not show this problem.

>From comparing option.c and qcserial.c the only difference in
initialization visible to me is the option_send_setup code.  The
proposed patch below for kernel 3.19 or later moves Sierra Wireless
VID/PID 0x1199/0x68c0 devices from the qcserial to the option driver
using an appropriate blacklist for the QMI/network interfaces (8..11)
and the USB audio interfaces (16..18) present in some firmwares.

An alternative to this patch would be to add the option_send_setup code
to qcserial.c for Sierra Wireless VID/PID 0x1199/0x68c0 devices.

Regards,
Reinhard

--- drivers/usb/serial/option.c.~1~     2014-12-21 17:36:21.000000000 +0100
+++ drivers/usb/serial/option.c 2014-12-21 22:25:44.000000000 +0100
@@ -236,2 +236,4 @@
 
+#define SIERRA_VENDOR_ID                       0x1199
+
 #define CMOTECH_VENDOR_ID                      0x16d8
@@ -514,3 +516,3 @@
 
-#define MAX_BL_NUM  8
+#define MAX_BL_NUM  18
 struct option_blacklist_info {
@@ -603,2 +605,6 @@
 
+static const struct option_blacklist_info sierra_mc73xx_blacklist = {
+       .reserved = BIT(8) | BIT(10) | BIT(11) | BIT(16) | BIT(17) | BIT(18),
+};
+
 static const struct usb_device_id option_ids[] = {
@@ -1100,2 +1106,4 @@
        { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* SIMCom SIM5218 */
+       { USB_DEVICE(SIERRA_VENDOR_ID, 0x68c0),
+         .driver_info = (kernel_ulong_t)&sierra_mc73xx_blacklist }, /* MC73xx 
*/
        { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
--- drivers/usb/serial/qcserial.c.~1~   2014-12-21 17:35:59.000000000 +0100
+++ drivers/usb/serial/qcserial.c       2014-12-21 21:18:05.000000000 +0100
@@ -144,3 +144,2 @@
        {DEVICE_SWI(0x1199, 0x68a2)},   /* Sierra Wireless MC7710 */
-       {DEVICE_SWI(0x1199, 0x68c0)},   /* Sierra Wireless MC73xx */
        {DEVICE_SWI(0x1199, 0x901c)},   /* Sierra Wireless EM7700 */

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to