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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html