Commit 731879f8 authored by Dan Williams's avatar Dan Williams Committed by Greg Kroah-Hartman

USB: qcserial: fix port handling on Gobi 1K and 2K+

Bjorn's latest patchset does break Gobi 1K and 2K because on both
devices as it claims usb interface 0.  That's because usbif 0 is not
handled in the switch statement, and thus the if0 gets claimed when it
should not.  So let's just make things even simpler yet, and handle both
the 1K and 2K+ cases separately.  This patch should not affect the new
Sierra device support, because those devices are matched via
interface-specific matching and thus should never hit the composite
code.
Signed-off-by: default avatarDan Williams <dcbw@redhat.com>
Tested-by: default avatarBjørn Mork <bjorn@mork.no>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 1e658489
...@@ -199,43 +199,49 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id) ...@@ -199,43 +199,49 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
/* default to enabling interface */ /* default to enabling interface */
altsetting = 0; altsetting = 0;
switch (ifnum) {
/* Composite mode; don't bind to the QMI/net interface as that /* Composite mode; don't bind to the QMI/net interface as that
* gets handled by other drivers. * gets handled by other drivers.
*/ */
if (is_gobi1k) {
/* Gobi 1K USB layout: /* Gobi 1K USB layout:
* 0: serial port (doesn't respond) * 0: serial port (doesn't respond)
* 1: serial port (doesn't respond) * 1: serial port (doesn't respond)
* 2: AT-capable modem port * 2: AT-capable modem port
* 3: QMI/net * 3: QMI/net
* */
* Gobi 2K+ USB layout: if (ifnum == 2)
dev_dbg(dev, "Modem port found\n");
else
altsetting = -1;
} else {
/* Gobi 2K+ USB layout:
* 0: QMI/net * 0: QMI/net
* 1: DM/DIAG (use libqcdm from ModemManager for communication) * 1: DM/DIAG (use libqcdm from ModemManager for communication)
* 2: AT-capable modem port * 2: AT-capable modem port
* 3: NMEA * 3: NMEA
*/ */
switch (ifnum) {
case 1: case 0:
if (is_gobi1k) /* Don't claim the QMI/net interface */
altsetting = -1; altsetting = -1;
else break;
case 1:
dev_dbg(dev, "Gobi 2K+ DM/DIAG interface found\n"); dev_dbg(dev, "Gobi 2K+ DM/DIAG interface found\n");
break; break;
case 2: case 2:
dev_dbg(dev, "Modem port found\n"); dev_dbg(dev, "Modem port found\n");
break; break;
case 3: case 3:
if (is_gobi1k)
altsetting = -1;
else
/* /*
* NMEA (serial line 9600 8N1) * NMEA (serial line 9600 8N1)
* # echo "\$GPS_START" > /dev/ttyUSBx * # echo "\$GPS_START" > /dev/ttyUSBx
* # echo "\$GPS_STOP" > /dev/ttyUSBx * # echo "\$GPS_STOP" > /dev/ttyUSBx
*/ */
dev_dbg(dev, "Gobi 2K+ NMEA GPS interface found\n"); dev_dbg(dev, "Gobi 2K+ NMEA GPS interface found\n");
break;
}
} }
done: done:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment