diff mbox

USB: serial: option: adding support for ublox R410M

Message ID 20180426062831.320-1-sz.lin@moxa.com (mailing list archive)
State New, archived
Headers show

Commit Message

SZ Lin April 26, 2018, 6:28 a.m. UTC
This patch adds support for ublox R410M PID 0x90b2 USB modem to option
driver, this module supports LTE Cat M1 / NB1.

Interface layout:
0: QCDM/DIAG
1: ADB
2: AT
3: RMNET

Signed-off-by: SZ Lin (林上智) <sz.lin@moxa.com>
Cc: stable <stable@vger.kernel.org>
---

Please refer to following lsusb output:

Bus 001 Device 003: ID 05c6:90b2 Qualcomm, Inc.
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x05c6 Qualcomm, Inc.
  idProduct          0x90b2
  bcdDevice            0.00
  iManufacturer           3 Qualcomm, Incorporated
  iProduct                2 Qualcomm CDMA Technologies MSM
  iSerial                 4 fb854106
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength          108
    bNumInterfaces          4
    bConfigurationValue     1
    iConfiguration          1 Qualcomm Configuration
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol    255 Vendor Specific Protocol
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol    255 Vendor Specific Protocol
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           3
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol    255 Vendor Specific Protocol
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               5
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x84  EP 4 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       0
      bNumEndpoints           3
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol    255 Vendor Specific Protocol
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x85  EP 5 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               5
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x86  EP 6 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
Device Qualifier (for other device speed):
  bLength                10
  bDescriptorType         6
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  bNumConfigurations      1
Device Status:     0x0000
  (Bus Powered)

---
 drivers/usb/serial/option.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Johan Hovold April 26, 2018, 7:09 a.m. UTC | #1
On Thu, Apr 26, 2018 at 02:28:31PM +0800, SZ Lin (林上智) wrote:
> This patch adds support for ublox R410M PID 0x90b2 USB modem to option
> driver, this module supports LTE Cat M1 / NB1.
> 
> Interface layout:
> 0: QCDM/DIAG
> 1: ADB
> 2: AT
> 3: RMNET
> 
> Signed-off-by: SZ Lin (林上智) <sz.lin@moxa.com>
> Cc: stable <stable@vger.kernel.org>

Applied, thanks.

Johan
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Lars Melin April 26, 2018, 7:48 a.m. UTC | #2
On 4/26/2018 14:09, Johan Hovold wrote:
> On Thu, Apr 26, 2018 at 02:28:31PM +0800, SZ Lin (林上智) wrote:
>> This patch adds support for ublox R410M PID 0x90b2 USB modem to option
>> driver, this module supports LTE Cat M1 / NB1.
>>
>> Interface layout:
>> 0: QCDM/DIAG
>> 1: ADB
>> 2: AT
>> 3: RMNET
>>
>> Signed-off-by: SZ Lin (林上智) <sz.lin@moxa.com>
>> Cc: stable <stable@vger.kernel.org>
> 
> Applied, thanks.
> 
> Johan

With a Qualcomm Device Management interface, shouldn't this modem be 
driven by qcserial?

/Lars
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Johan Hovold April 26, 2018, 8:14 a.m. UTC | #3
On Thu, Apr 26, 2018 at 02:48:54PM +0700, Lars Melin wrote:
> On 4/26/2018 14:09, Johan Hovold wrote:
> > On Thu, Apr 26, 2018 at 02:28:31PM +0800, SZ Lin (林上智) wrote:
> >> This patch adds support for ublox R410M PID 0x90b2 USB modem to option
> >> driver, this module supports LTE Cat M1 / NB1.
> >>
> >> Interface layout:
> >> 0: QCDM/DIAG
> >> 1: ADB
> >> 2: AT
> >> 3: RMNET
> >>
> >> Signed-off-by: SZ Lin (林上智) <sz.lin@moxa.com>
> >> Cc: stable <stable@vger.kernel.org>
> > 
> > Applied, thanks.
> > 
> > Johan
> 
> With a Qualcomm Device Management interface, shouldn't this modem be 
> driven by qcserial?

Hmm, we already have some QCDM interfaces handled by option and qcaux so
it's not that clear-cut.

Dan and Björn had a discussion about this a while back, so adding them
on CC. It seems to me that this device does not fit the intended use (or
Gobi 1000 layout) for qcserial, but I may be mistaken.

Thanks,
Johan
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bjørn Mork April 26, 2018, 11:19 a.m. UTC | #4
Johan Hovold <johan@kernel.org> writes:
> On Thu, Apr 26, 2018 at 02:48:54PM +0700, Lars Melin wrote:
>> On 4/26/2018 14:09, Johan Hovold wrote:
>> > On Thu, Apr 26, 2018 at 02:28:31PM +0800, SZ Lin (林上智) wrote:
>> >> This patch adds support for ublox R410M PID 0x90b2 USB modem to option
>> >> driver, this module supports LTE Cat M1 / NB1.
>> >>
>> >> Interface layout:
>> >> 0: QCDM/DIAG
>> >> 1: ADB
>> >> 2: AT
>> >> 3: RMNET
>> >>
>> >> Signed-off-by: SZ Lin (林上智) <sz.lin@moxa.com>
>> >> Cc: stable <stable@vger.kernel.org>
>> > 
>> > Applied, thanks.
>> > 
>> > Johan
>> 
>> With a Qualcomm Device Management interface, shouldn't this modem be 
>> driven by qcserial?
>
> Hmm, we already have some QCDM interfaces handled by option and qcaux so
> it's not that clear-cut.
>
> Dan and Björn had a discussion about this a while back, so adding them
> on CC. It seems to me that this device does not fit the intended use (or
> Gobi 1000 layout) for qcserial, but I may be mistaken.

tl;dr; I don't think qcserial is relevant unless a device matches one of
the pre-defined layout schemes.

But I'm too new in this game to say anything about the initial
intentions... 

My view of the present situation is that qcserial handles interface
layouts shared among many devices, while option handles interface
layouts which are unique per device, and vendor+class based function
mappings.  But I could be wrong.

Anyway, Qualcomm based designs are definitely handled by both drivers.
Using qcserial only makes sense if the interface layout matches one of
the defined shared schemes, which currently are:

	QCSERIAL_G2K = 0,	/* Gobi 2000 */
	QCSERIAL_G1K = 1,	/* Gobi 1000 */
	QCSERIAL_SWI = 2,	/* Sierra Wireless */
	QCSERIAL_HWI = 3,	/* Huawei */

or if similar logic is added for a new vendor/shceme

And I see multi-vendor-id usage as the main reason for these
schemes. There isn't much reason if you can make it a single match
against a vendor-id.

The original Gobi devices are obviously multi-vendor, and Sierra
Wireless and Huwaei are OEMs making devices for a number of laptop
vendors. This causes traditional vendor-id matching to fail, as e.g. a
HP device can be made by either OEMs (or others). qcserial has become a
convenient way to map a long list of full device IDs to a specific OEM
layout.


Bjørn



--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Lars Melin April 26, 2018, 11:39 a.m. UTC | #5
On 4/26/2018 18:19, Bjørn Mork wrote:
> Anyway, Qualcomm based designs are definitely handled by both drivers.
> Using qcserial only makes sense if the interface layout matches one of
> the defined shared schemes, which currently are:
> 
> 	QCSERIAL_G2K = 0,	/* Gobi 2000 */
> 	QCSERIAL_G1K = 1,	/* Gobi 1000 */
> 	QCSERIAL_SWI = 2,	/* Sierra Wireless */
> 	QCSERIAL_HWI = 3,	/* Huawei */

It seems to me that this Quectel device matches the interface layout for 
Gobi1K:

		 * Gobi 1K USB layout:
		 * 0: DM/DIAG (use libqcdm from ModemManager for communication)
		 * 1: serial port (doesn't respond)
		 * 2: AT-capable modem port
		 * 3: QMI/net
		 */

/Lars
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Lars Melin April 26, 2018, 11:40 a.m. UTC | #6
On 4/26/2018 18:39, Lars Melin wrote:
> On 4/26/2018 18:19, Bjørn Mork wrote:
>> Anyway, Qualcomm based designs are definitely handled by both drivers.
>> Using qcserial only makes sense if the interface layout matches one of
>> the defined shared schemes, which currently are:
>>
>>     QCSERIAL_G2K = 0,    /* Gobi 2000 */
>>     QCSERIAL_G1K = 1,    /* Gobi 1000 */
>>     QCSERIAL_SWI = 2,    /* Sierra Wireless */
>>     QCSERIAL_HWI = 3,    /* Huawei */
> 
> It seems to me that this Quectel device matches the interface layout for 
> Gobi1K:
> 
>           * Gobi 1K USB layout:
>           * 0: DM/DIAG (use libqcdm from ModemManager for communication)
>           * 1: serial port (doesn't respond)
>           * 2: AT-capable modem port
>           * 3: QMI/net
>           */
> 
> /Lars

Ublox, not Quectel..

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Johan Hovold April 26, 2018, 4:12 p.m. UTC | #7
On Thu, Apr 26, 2018 at 06:40:46PM +0700, Lars Melin wrote:
> On 4/26/2018 18:39, Lars Melin wrote:
> > On 4/26/2018 18:19, Bjørn Mork wrote:
> >> Anyway, Qualcomm based designs are definitely handled by both drivers.
> >> Using qcserial only makes sense if the interface layout matches one of
> >> the defined shared schemes, which currently are:
> >>
> >>     QCSERIAL_G2K = 0,    /* Gobi 2000 */
> >>     QCSERIAL_G1K = 1,    /* Gobi 1000 */
> >>     QCSERIAL_SWI = 2,    /* Sierra Wireless */
> >>     QCSERIAL_HWI = 3,    /* Huawei */
> > 
> > It seems to me that this Quectel device matches the interface layout for 
> > Gobi1K:
> > 
> >           * Gobi 1K USB layout:
> >           * 0: DM/DIAG (use libqcdm from ModemManager for communication)
> >           * 1: serial port (doesn't respond)
> >           * 2: AT-capable modem port
> >           * 3: QMI/net
> >           */

> Ublox, not Quectel..

Yeah, but qcserial appears to select a different altsetting for the DM
port for Gobi 1000, an altsetting which this particular device does not
have.

I didn't re-read the full thread I referred to earlier, but I think in
it, Dan mentioned Gobi 1000 device requiring firmware to be loaded too. 

So if it's not a G1K device, we probably shouldn't be using qcserial
even if the interface layout happens to match.

Thanks,
Johan
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Lars Melin April 26, 2018, 4:22 p.m. UTC | #8
On 4/26/2018 23:12, Johan Hovold wrote:
> On Thu, Apr 26, 2018 at 06:40:46PM +0700, Lars Melin wrote:
>> On 4/26/2018 18:39, Lars Melin wrote:
>>> On 4/26/2018 18:19, Bjørn Mork wrote:
>>>> Anyway, Qualcomm based designs are definitely handled by both drivers.
>>>> Using qcserial only makes sense if the interface layout matches one of
>>>> the defined shared schemes, which currently are:
>>>>
>>>>      QCSERIAL_G2K = 0,    /* Gobi 2000 */
>>>>      QCSERIAL_G1K = 1,    /* Gobi 1000 */
>>>>      QCSERIAL_SWI = 2,    /* Sierra Wireless */
>>>>      QCSERIAL_HWI = 3,    /* Huawei */
>>>
>>> It seems to me that this Quectel device matches the interface layout for
>>> Gobi1K:
>>>
>>>            * Gobi 1K USB layout:
>>>            * 0: DM/DIAG (use libqcdm from ModemManager for communication)
>>>            * 1: serial port (doesn't respond)
>>>            * 2: AT-capable modem port
>>>            * 3: QMI/net
>>>            */
> 
>> Ublox, not Quectel..
> 
> Yeah, but qcserial appears to select a different altsetting for the DM
> port for Gobi 1000, an altsetting which this particular device does not
> have.
> 
> I didn't re-read the full thread I referred to earlier, but I think in
> it, Dan mentioned Gobi 1000 device requiring firmware to be loaded too.
> 
> So if it's not a G1K device, we probably shouldn't be using qcserial
> even if the interface layout happens to match.
> 
> Thanks,
> Johan

Good point, I forgot about the required firmware loading for Gobi1K.
So this device should be handled by the option driver.

/Lars


--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Johan Hovold April 26, 2018, 4:29 p.m. UTC | #9
On Thu, Apr 26, 2018 at 11:22:25PM +0700, Lars Melin wrote:
> On 4/26/2018 23:12, Johan Hovold wrote:
> > On Thu, Apr 26, 2018 at 06:40:46PM +0700, Lars Melin wrote:
> >> On 4/26/2018 18:39, Lars Melin wrote:
> >>> On 4/26/2018 18:19, Bjørn Mork wrote:
> >>>> Anyway, Qualcomm based designs are definitely handled by both drivers.
> >>>> Using qcserial only makes sense if the interface layout matches one of
> >>>> the defined shared schemes, which currently are:
> >>>>
> >>>>      QCSERIAL_G2K = 0,    /* Gobi 2000 */
> >>>>      QCSERIAL_G1K = 1,    /* Gobi 1000 */
> >>>>      QCSERIAL_SWI = 2,    /* Sierra Wireless */
> >>>>      QCSERIAL_HWI = 3,    /* Huawei */
> >>>
> >>> It seems to me that this Quectel device matches the interface layout for
> >>> Gobi1K:

> > Yeah, but qcserial appears to select a different altsetting for the DM
> > port for Gobi 1000, an altsetting which this particular device does not
> > have.
> > 
> > I didn't re-read the full thread I referred to earlier, but I think in
> > it, Dan mentioned Gobi 1000 device requiring firmware to be loaded too.
> > 
> > So if it's not a G1K device, we probably shouldn't be using qcserial
> > even if the interface layout happens to match.

> Good point, I forgot about the required firmware loading for Gobi1K.
> So this device should be handled by the option driver.

Yeah, we probably should document all of this at some point. :)

I didn't include the patch in this weeks -rc updates, but I've queued it
up for the next batch.

Thanks everyone.

Johan
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Dan Williams April 26, 2018, 7:12 p.m. UTC | #10
On Thu, 2018-04-26 at 18:29 +0200, Johan Hovold wrote:
> On Thu, Apr 26, 2018 at 11:22:25PM +0700, Lars Melin wrote:
> > On 4/26/2018 23:12, Johan Hovold wrote:
> > > On Thu, Apr 26, 2018 at 06:40:46PM +0700, Lars Melin wrote:
> > > > On 4/26/2018 18:39, Lars Melin wrote:
> > > > > On 4/26/2018 18:19, Bjørn Mork wrote:
> > > > > > Anyway, Qualcomm based designs are definitely handled by
> > > > > > both drivers.
> > > > > > Using qcserial only makes sense if the interface layout
> > > > > > matches one of
> > > > > > the defined shared schemes, which currently are:
> > > > > > 
> > > > > >      QCSERIAL_G2K = 0,    /* Gobi 2000 */
> > > > > >      QCSERIAL_G1K = 1,    /* Gobi 1000 */
> > > > > >      QCSERIAL_SWI = 2,    /* Sierra Wireless */
> > > > > >      QCSERIAL_HWI = 3,    /* Huawei */
> > > > > 
> > > > > It seems to me that this Quectel device matches the interface
> > > > > layout for
> > > > > Gobi1K:
> > > Yeah, but qcserial appears to select a different altsetting for
> > > the DM
> > > port for Gobi 1000, an altsetting which this particular device
> > > does not
> > > have.
> > > 
> > > I didn't re-read the full thread I referred to earlier, but I
> > > think in
> > > it, Dan mentioned Gobi 1000 device requiring firmware to be
> > > loaded too.
> > > 
> > > So if it's not a G1K device, we probably shouldn't be using
> > > qcserial
> > > even if the interface layout happens to match.
> > Good point, I forgot about the required firmware loading for
> > Gobi1K.
> > So this device should be handled by the option driver.
> 
> Yeah, we probably should document all of this at some point. :)
> 
> I didn't include the patch in this weeks -rc updates, but I've queued
> it
> up for the next batch.

Option is likely the right driver for this device.

qcaux was mainly for mobile phones that have a TTY (often cdc-acm) as
the modem port and a secondary DIAG/DM port driven by qcaux.  The DM
port doesn't have an interrupt endpoint thus it's not a normal modem
port requiring the larger buffers of option and its control signaling.

qcserial (as Bjorn mentioned) is only for actual Gobi-type devices with
the specific layouts and the firmware loading requirement where the 1K
and 2K devices start in a special 1-port mode waiting for firmware and
then become 4-port devices on firmware reboot.

Dan
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
SZ Lin April 27, 2018, 2:14 a.m. UTC | #11
<snip>

> 

> Option is likely the right driver for this device.

> 

> qcaux was mainly for mobile phones that have a TTY (often cdc-acm) as the modem port

> and a secondary DIAG/DM port driven by qcaux.  The DM port doesn't have an interrupt

> endpoint thus it's not a normal modem port requiring the larger buffers of option and its

> control signaling.

> 

> qcserial (as Bjorn mentioned) is only for actual Gobi-type devices with the specific layouts

> and the firmware loading requirement where the 1K and 2K devices start in a special

> 1-port mode waiting for firmware and then become 4-port devices on firmware reboot.

> 

> Dan


Thank you all. I believe that many people are confused in selecting serial driver (option and qcserial) 
for QUALCOMM based module. This thread has provided clearly and properly presented the different
between them.

SZ
Johan Hovold May 2, 2018, 7:22 a.m. UTC | #12
On Thu, Apr 26, 2018 at 02:12:32PM -0500, Dan Williams wrote:
> On Thu, 2018-04-26 at 18:29 +0200, Johan Hovold wrote:
> > On Thu, Apr 26, 2018 at 11:22:25PM +0700, Lars Melin wrote:
> > > On 4/26/2018 23:12, Johan Hovold wrote:
> > > > On Thu, Apr 26, 2018 at 06:40:46PM +0700, Lars Melin wrote:
> > > > > On 4/26/2018 18:39, Lars Melin wrote:
> > > > > > On 4/26/2018 18:19, Bjørn Mork wrote:
> > > > > > > Anyway, Qualcomm based designs are definitely handled by
> > > > > > > both drivers.  Using qcserial only makes sense if the
> > > > > > > interface layout matches one of the defined shared
> > > > > > > schemes, which currently are:
> > > > > > > 
> > > > > > >      QCSERIAL_G2K = 0,    /* Gobi 2000 */
> > > > > > >      QCSERIAL_G1K = 1,    /* Gobi 1000 */
> > > > > > >      QCSERIAL_SWI = 2,    /* Sierra Wireless */
> > > > > > >      QCSERIAL_HWI = 3,    /* Huawei */
> > > > > > 
> > > > > > It seems to me that this Quectel device matches the
> > > > > > interface layout for Gobi1K:
> > > >
> > > > Yeah, but qcserial appears to select a different altsetting for
> > > > the DM port for Gobi 1000, an altsetting which this particular
> > > > device does not have.
> > > > 
> > > > I didn't re-read the full thread I referred to earlier, but I
> > > > think in it, Dan mentioned Gobi 1000 device requiring firmware
> > > > to be loaded too.
> > > > 
> > > > So if it's not a G1K device, we probably shouldn't be using
> > > > qcserial even if the interface layout happens to match.
> > >
> > > Good point, I forgot about the required firmware loading for
> > > Gobi1K.
> > > So this device should be handled by the option driver.
> > 
> > Yeah, we probably should document all of this at some point. :)
> > 
> > I didn't include the patch in this weeks -rc updates, but I've
> > queued it up for the next batch.
> 
> Option is likely the right driver for this device.
> 
> qcaux was mainly for mobile phones that have a TTY (often cdc-acm) as
> the modem port and a secondary DIAG/DM port driven by qcaux.  The DM
> port doesn't have an interrupt endpoint thus it's not a normal modem
> port requiring the larger buffers of option and its control signaling.
> 
> qcserial (as Bjorn mentioned) is only for actual Gobi-type devices with
> the specific layouts and the firmware loading requirement where the 1K
> and 2K devices start in a special 1-port mode waiting for firmware and
> then become 4-port devices on firmware reboot.

Thanks for that summary. I've applied SZ's patch now.

Johan
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index f0c3612467a3..184691caee64 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -233,6 +233,8 @@  static void option_instat_callback(struct urb *urb);
 /* These Quectel products use Qualcomm's vendor ID */
 #define QUECTEL_PRODUCT_UC20			0x9003
 #define QUECTEL_PRODUCT_UC15			0x9090
+/* These ublox products use Qualcomm's vendor ID */
+#define UBLOX_PRODUCT_R410M			0x90b2
 /* These Yuga products use Qualcomm's vendor ID */
 #define YUGA_PRODUCT_CLM920_NC5			0x9625
 
@@ -1065,6 +1067,9 @@  static const struct usb_device_id option_ids[] = {
 	/* Yuga products use Qualcomm vendor ID */
 	{ USB_DEVICE(QUALCOMM_VENDOR_ID, YUGA_PRODUCT_CLM920_NC5),
 	  .driver_info = RSVD(1) | RSVD(4) },
+	/* ublox products use Qualcomm vendor ID */
+	{ USB_DEVICE(QUALCOMM_VENDOR_ID, UBLOX_PRODUCT_R410M),
+	  .driver_info = RSVD(1) | RSVD(3) },
 	/* Quectel products using Quectel vendor ID */
 	{ USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21),
 	  .driver_info = RSVD(4) },