From 666647070dfae88baac8924323fc41ba4d6f53ad Mon Sep 17 00:00:00 2001 From: "Matthias G. Eckermann" Date: Fri, 24 Sep 2010 18:12:01 +0200 Subject: [PATCH] --- yaml --- r: 213584 b: refs/heads/master c: 1992de83e375acc789daf66b7b72a812a5235b75 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/usb/serial/qcserial.c | 31 ++++++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 216ad06ceb2e..bca930275cc9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6195e3c6aa84dbbf80a60731168118824bd58bba +refs/heads/master: 1992de83e375acc789daf66b7b72a812a5235b75 diff --git a/trunk/drivers/usb/serial/qcserial.c b/trunk/drivers/usb/serial/qcserial.c index 2846ad8883ae..8858201eb1d3 100644 --- a/trunk/drivers/usb/serial/qcserial.c +++ b/trunk/drivers/usb/serial/qcserial.c @@ -152,7 +152,22 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id) case 3: case 4: /* Composite mode */ - if (ifnum == 2) { + /* ifnum == 0 is a broadband network adapter */ + if (ifnum == 1) { + /* + * Diagnostics Monitor (serial line 9600 8N1) + * Qualcomm DM protocol + * use "libqcdm" (ModemManager) for communication + */ + dbg("Diagnostics Monitor found"); + retval = usb_set_interface(serial->dev, ifnum, 0); + if (retval < 0) { + dev_err(&serial->dev->dev, + "Could not set interface, error %d\n", + retval); + retval = -ENODEV; + } + } else if (ifnum == 2) { dbg("Modem port found"); retval = usb_set_interface(serial->dev, ifnum, 0); if (retval < 0) { @@ -163,6 +178,20 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id) kfree(data); } return retval; + } else if (ifnum==3) { + /* + * NMEA (serial line 9600 8N1) + * # echo "\$GPS_START" > /dev/ttyUSBx + * # echo "\$GPS_STOP" > /dev/ttyUSBx + */ + dbg("NMEA GPS interface found"); + retval = usb_set_interface(serial->dev, ifnum, 0); + if (retval < 0) { + dev_err(&serial->dev->dev, + "Could not set interface, error %d\n", + retval); + retval = -ENODEV; + } } break;