From 30d2dd8c647eced26cc45d0a912ec44c5fc3cfc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= Date: Sun, 15 Jul 2012 16:47:38 +0200 Subject: [PATCH] --- yaml --- r: 317058 b: refs/heads/master c: 0dfbf65eb070a6dda535fcfec6028a7412698358 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/usb/serial/qcserial.c | 44 +++++++++++++++++------------ 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/[refs] b/[refs] index 315ece7dc204..55fa82ecd687 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d25d5f28828708b81658cff6f676b710c7ee171d +refs/heads/master: 0dfbf65eb070a6dda535fcfec6028a7412698358 diff --git a/trunk/drivers/usb/serial/qcserial.c b/trunk/drivers/usb/serial/qcserial.c index 7556f343c0f3..a9c4dc4eb05f 100644 --- a/trunk/drivers/usb/serial/qcserial.c +++ b/trunk/drivers/usb/serial/qcserial.c @@ -143,14 +143,13 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id) spin_lock_init(&data->susp_lock); - switch (nintf) { - case 1: + if (nintf == 1) { /* QDL mode */ /* Gobi 2000 has a single altsetting, older ones have two */ if (serial->interface->num_altsetting == 2) intf = &serial->interface->altsetting[1]; else if (serial->interface->num_altsetting > 2) - break; + goto done; if (intf->desc.bNumEndpoints == 2 && usb_endpoint_is_bulk_in(&intf->endpoint[0].desc) && @@ -162,10 +161,18 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id) else altsetting = 1; } - break; + goto done; - case 3: - case 4: + } + + if (nintf < 3 || nintf > 4) { + dev_err(dev, "unknown number of interfaces: %d\n", nintf); + goto done; + } + + /* default to enabling interface */ + altsetting = 0; + switch (ifnum) { /* Composite mode; don't bind to the QMI/net interface as that * gets handled by other drivers. */ @@ -183,27 +190,28 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id) * 3: NMEA */ - if (ifnum == 1 && !is_gobi1k) { + case 1: + if (is_gobi1k) + altsetting = -1; + else dev_dbg(dev, "Gobi 2K+ DM/DIAG interface found\n"); - altsetting = 0; - } else if (ifnum == 2) { - dev_dbg(dev, "Modem port found\n"); - altsetting = 0; - } else if (ifnum==3 && !is_gobi1k) { + break; + case 2: + dev_dbg(dev, "Modem port found\n"); + break; + case 3: + if (is_gobi1k) + altsetting = -1; + else /* * NMEA (serial line 9600 8N1) * # echo "\$GPS_START" > /dev/ttyUSBx * # echo "\$GPS_STOP" > /dev/ttyUSBx */ dev_dbg(dev, "Gobi 2K+ NMEA GPS interface found\n"); - altsetting = 0; - } - break; - - default: - dev_err(dev, "unknown number of interfaces: %d\n", nintf); } +done: if (altsetting >= 0) { retval = usb_set_interface(serial->dev, ifnum, altsetting); if (retval < 0) {