diff mbox series

USB: serial: simple: add sierra wireless xm1210 gnss receiver

Message ID 20211027200223.72701-1-ferlandm@amotus.ca (mailing list archive)
State New, archived
Headers show
Series USB: serial: simple: add sierra wireless xm1210 gnss receiver | expand

Commit Message

Marc Ferland Oct. 27, 2021, 8:02 p.m. UTC
From: Marc Ferland <ferlandm@amotus.ca>

Add device id for the Sierra Wireless XM1210 Multi-GNSS module.

https://www.sierrawireless.com/iot-solutions/products/xm1210/

$ lsusb -vd 1199:b000

Bus 002 Device 003: ID 1199:b000 Sierra Wireless, Inc. Sierra Wireless_GNSS
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.00
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x1199 Sierra Wireless, Inc.
  idProduct          0xb000
  bcdDevice            0.01
  iManufacturer           1 Sierra-wireless
  iProduct                2 Sierra Wireless_GNSS
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0020
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xc0
      Self Powered
    MaxPower               50mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         0
      bInterfaceSubClass      0
      bInterfaceProtocol      0
      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     0x0040  1x 64 bytes
        bInterval             255
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval             255
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0001
  Self Powered

Device is also working correctly with:

$ echo 0x1199 0xb000 > /sys/bus/usb-serial/drivers/generic/new_id

Signed-off-by: Marc Ferland <ferlandm@amotus.ca>
---
 drivers/usb/serial/Kconfig             | 1 +
 drivers/usb/serial/usb-serial-simple.c | 7 +++++++
 2 files changed, 8 insertions(+)

Comments

Greg Kroah-Hartman Nov. 17, 2021, 1:36 p.m. UTC | #1
On Wed, Oct 27, 2021 at 04:02:23PM -0400, ferlandm@amotus.ca wrote:
> From: Marc Ferland <ferlandm@amotus.ca>
> 
> Add device id for the Sierra Wireless XM1210 Multi-GNSS module.
> 
> https://www.sierrawireless.com/iot-solutions/products/xm1210/
> 
> $ lsusb -vd 1199:b000
> 
> Bus 002 Device 003: ID 1199:b000 Sierra Wireless, Inc. Sierra Wireless_GNSS

Why doesn't this device work with the qcserial.c driver instead?  Have
you tried that?

thanks,

greg k-h
Marc Ferland Nov. 18, 2021, 4:09 p.m. UTC | #2
On Wed, Nov 17, 2021 at 8:36 AM Greg KH <gregkh@linuxfoundation.org> wrote:
>
> On Wed, Oct 27, 2021 at 04:02:23PM -0400, ferlandm@amotus.ca wrote:
> > From: Marc Ferland <ferlandm@amotus.ca>
> >
> > Add device id for the Sierra Wireless XM1210 Multi-GNSS module.
> >
> > https://www.sierrawireless.com/iot-solutions/products/xm1210/
> >
> > $ lsusb -vd 1199:b000
> >
> > Bus 002 Device 003: ID 1199:b000 Sierra Wireless, Inc. Sierra Wireless_GNSS
>
> Why doesn't this device work with the qcserial.c driver instead?  Have
> you tried that?
>

I just tried adding the USB_ID to the qcserial driver and it fails
with -ENODEV. Looking at the code it seems qcserial only supports the
USB_CLASS_VENDOR_SPEC interface class and this device returns an
interface class value of 0 (reserved?):

$ lsusb -vd 1199:b000 | grep bInterfaceClass
      bInterfaceClass         0

Thanks,

Marc
Johan Hovold Dec. 20, 2021, 11:20 a.m. UTC | #3
On Wed, Oct 27, 2021 at 04:02:23PM -0400, ferlandm@amotus.ca wrote:
> From: Marc Ferland <ferlandm@amotus.ca>
> 
> Add device id for the Sierra Wireless XM1210 Multi-GNSS module.
> 
> https://www.sierrawireless.com/iot-solutions/products/xm1210/
> 
> $ lsusb -vd 1199:b000
> 
> Bus 002 Device 003: ID 1199:b000 Sierra Wireless, Inc. Sierra Wireless_GNSS
> Device Descriptor:
>   bLength                18
>   bDescriptorType         1
>   bcdUSB               1.00
>   bDeviceClass            0
>   bDeviceSubClass         0
>   bDeviceProtocol         0
>   bMaxPacketSize0        64
>   idVendor           0x1199 Sierra Wireless, Inc.
>   idProduct          0xb000
>   bcdDevice            0.01
>   iManufacturer           1 Sierra-wireless
>   iProduct                2 Sierra Wireless_GNSS
>   iSerial                 0
>   bNumConfigurations      1
>   Configuration Descriptor:
>     bLength                 9
>     bDescriptorType         2
>     wTotalLength       0x0020
>     bNumInterfaces          1
>     bConfigurationValue     1
>     iConfiguration          0
>     bmAttributes         0xc0
>       Self Powered
>     MaxPower               50mA
>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        0
>       bAlternateSetting       0
>       bNumEndpoints           2
>       bInterfaceClass         0
>       bInterfaceSubClass      0
>       bInterfaceProtocol      0
>       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     0x0040  1x 64 bytes
>         bInterval             255
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x01  EP 1 OUT
>         bmAttributes            2
>           Transfer Type            Bulk
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0040  1x 64 bytes
>         bInterval             255
> can't get debug descriptor: Resource temporarily unavailable
> Device Status:     0x0001
>   Self Powered
> 
> Device is also working correctly with:
> 
> $ echo 0x1199 0xb000 > /sys/bus/usb-serial/drivers/generic/new_id
> 
> Signed-off-by: Marc Ferland <ferlandm@amotus.ca>

Sorry about the late reply on this.

I've been meaning to look into adding USB support to the GNSS subsystem
and using that instead of USB serial, but I've been really short on time
lately.

The GNSS subsystem provides a generic interface to user-space regardless
of the type of interface used (e.g. serial, i2c, spi, USB) and can be
extended with GNSS specific features (e.g. power control signals) as
needed.

I've written a small generic driver for GNSS receivers with a USB
interface which I've verified using a u-blox receiver:

	https://lore.kernel.org/r/20211220111901.23206-1-johan@kernel.org

Would you mind giving it a spin with the Sierra device as well?

Johan
diff mbox series

Patch

diff --git a/drivers/usb/serial/Kconfig b/drivers/usb/serial/Kconfig
index de5c01257060..8008c8cbaaa0 100644
--- a/drivers/usb/serial/Kconfig
+++ b/drivers/usb/serial/Kconfig
@@ -68,6 +68,7 @@  config USB_SERIAL_SIMPLE
 		- Motorola Tetra devices
 		- Novatel Wireless GPS receivers
 		- Siemens USB/MPI adapter.
+		- Sierra Wireless GPS receiver.
 		- ViVOtech ViVOpay USB device.
 		- Infineon Modem Flashloader USB interface
 		- ZIO Motherboard USB serial interface
diff --git a/drivers/usb/serial/usb-serial-simple.c b/drivers/usb/serial/usb-serial-simple.c
index bd23a7cb1be2..9ffd24c7fb33 100644
--- a/drivers/usb/serial/usb-serial-simple.c
+++ b/drivers/usb/serial/usb-serial-simple.c
@@ -112,6 +112,11 @@  DEVICE(suunto, SUUNTO_IDS);
 	{ USB_DEVICE(0x908, 0x0004) }
 DEVICE(siemens_mpi, SIEMENS_IDS);
 
+/* Sierra Wireless_GNSS driver */
+#define SIERRA_IDS()		\
+	{ USB_DEVICE(0x1199, 0xb000) }
+DEVICE(sierra, SIERRA_IDS);
+
 /* All of the above structures mushed into two lists */
 static struct usb_serial_driver * const serial_drivers[] = {
 	&carelink_device,
@@ -127,6 +132,7 @@  static struct usb_serial_driver * const serial_drivers[] = {
 	&hp4x_device,
 	&suunto_device,
 	&siemens_mpi_device,
+	&sierra_device,
 	NULL
 };
 
@@ -144,6 +150,7 @@  static const struct usb_device_id id_table[] = {
 	HP4X_IDS(),
 	SUUNTO_IDS(),
 	SIEMENS_IDS(),
+	SIERRA_IDS(),
 	{ },
 };
 MODULE_DEVICE_TABLE(usb, id_table);