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: Dan Williams <dcbw@redhat.com> Tested-by: Bjørn Mork <bjorn@mork.no> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
1e658489ba
Коммит
731879f8e3
|
@ -199,43 +199,49 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
|
|||
|
||||
/* 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.
|
||||
*/
|
||||
|
||||
/* Composite mode; don't bind to the QMI/net interface as that
|
||||
* gets handled by other drivers.
|
||||
*/
|
||||
|
||||
if (is_gobi1k) {
|
||||
/* Gobi 1K USB layout:
|
||||
* 0: serial port (doesn't respond)
|
||||
* 1: serial port (doesn't respond)
|
||||
* 2: AT-capable modem port
|
||||
* 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
|
||||
* 1: DM/DIAG (use libqcdm from ModemManager for communication)
|
||||
* 2: AT-capable modem port
|
||||
* 3: NMEA
|
||||
*/
|
||||
|
||||
case 1:
|
||||
if (is_gobi1k)
|
||||
switch (ifnum) {
|
||||
case 0:
|
||||
/* Don't claim the QMI/net interface */
|
||||
altsetting = -1;
|
||||
else
|
||||
break;
|
||||
case 1:
|
||||
dev_dbg(dev, "Gobi 2K+ DM/DIAG interface found\n");
|
||||
break;
|
||||
case 2:
|
||||
dev_dbg(dev, "Modem port found\n");
|
||||
break;
|
||||
case 3:
|
||||
if (is_gobi1k)
|
||||
altsetting = -1;
|
||||
else
|
||||
break;
|
||||
case 2:
|
||||
dev_dbg(dev, "Modem port found\n");
|
||||
break;
|
||||
case 3:
|
||||
/*
|
||||
* 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");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
|
|
Загрузка…
Ссылка в новой задаче