diff mbox series

[RFC] gnss: usb: add support for U-Blox NEO-M9N

Message ID 20211227012357.788966-1-pbrobinson@gmail.com
State New
Headers show
Series [RFC] gnss: usb: add support for U-Blox NEO-M9N | expand

Commit Message

Peter Robinson Dec. 27, 2021, 1:23 a.m. UTC
Add support for the USB interface of the SparkFun NEO-M9N
GPS Breakout receiver.

Bus 001 Device 005: ID 1546:01a9 U-Blox AG u-blox GNSS receiver
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            2 Communications
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x1546 U-Blox AG
  idProduct          0x01a9
  bcdDevice            4.04
  iManufacturer           1 u-blox AG - www.u-blox.com
  iProduct                2 u-blox GNSS receiver
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x003e
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xc0
      Self Powered
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         2 Communications
      bInterfaceSubClass      2 Abstract (modem)
      bInterfaceProtocol      1 AT-commands (v.25ter)
      iInterface              0
      CDC Header:
        bcdCDC               1.10
      CDC ACM:
        bmCapabilities       0x02
          line coding and serial state
      CDC Call Management:
        bmCapabilities       0x03
          call management
          use DataInterface
        bDataInterface          1
      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             255
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        10 CDC Data
      bInterfaceSubClass      0
      bInterfaceProtocol    255 Vendor specific
      iInterface              0
      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               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
Device Status:     0x0001
  Self Powered

Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
Cc: Johan Hovold <johan@kernel.org>
---
Hi Johan,

I've tested your GNSS USB series with a pair of U-Blox devices, adding
the above USB ID. Only one included here for feedback to guage your thoughts.
By defauly The U-Blox devices enumerate with the CDC ACM driver and output
NMEA data via /dev/ttyACM0. With this patch and cdc_acm blocked I get
/dev/gnss0 and can cat it to get NMEA data. Is your expectation to move
these sort of devices over to the usb gnss driver too?

Peter

 drivers/gnss/usb.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Johan Hovold Jan. 31, 2022, 10:16 a.m. UTC | #1
Hi Peter,

and sorry about the late reply.

On Mon, Dec 27, 2021 at 01:23:57AM +0000, Peter Robinson wrote:
> Add support for the USB interface of the SparkFun NEO-M9N
> GPS Breakout receiver.
> 
> Bus 001 Device 005: ID 1546:01a9 U-Blox AG u-blox GNSS receiver
> Device Descriptor:
>   bLength                18
>   bDescriptorType         1
>   bcdUSB               1.10
>   bDeviceClass            2 Communications
>   bDeviceSubClass         0
>   bDeviceProtocol         0
>   bMaxPacketSize0        64
>   idVendor           0x1546 U-Blox AG
>   idProduct          0x01a9
>   bcdDevice            4.04
>   iManufacturer           1 u-blox AG - www.u-blox.com
>   iProduct                2 u-blox GNSS receiver
>   iSerial                 0
>   bNumConfigurations      1
>   Configuration Descriptor:
>     bLength                 9
>     bDescriptorType         2
>     wTotalLength       0x003e
>     bNumInterfaces          2
>     bConfigurationValue     1
>     iConfiguration          0
>     bmAttributes         0xc0
>       Self Powered
>     MaxPower                0mA
>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        0
>       bAlternateSetting       0
>       bNumEndpoints           1
>       bInterfaceClass         2 Communications
>       bInterfaceSubClass      2 Abstract (modem)
>       bInterfaceProtocol      1 AT-commands (v.25ter)
>       iInterface              0
>       CDC Header:
>         bcdCDC               1.10
>       CDC ACM:
>         bmCapabilities       0x02
>           line coding and serial state
>       CDC Call Management:
>         bmCapabilities       0x03
>           call management
>           use DataInterface
>         bDataInterface          1
>       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             255
>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        1
>       bAlternateSetting       0
>       bNumEndpoints           2
>       bInterfaceClass        10 CDC Data
>       bInterfaceSubClass      0
>       bInterfaceProtocol    255 Vendor specific
>       iInterface              0
>       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               0
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x82  EP 2 IN
>         bmAttributes            2
>           Transfer Type            Bulk
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0040  1x 64 bytes
>         bInterval               0
> Device Status:     0x0001
>   Self Powered
> 
> Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
> Cc: Johan Hovold <johan@kernel.org>
> ---
> Hi Johan,
> 
> I've tested your GNSS USB series with a pair of U-Blox devices, adding
> the above USB ID. Only one included here for feedback to guage your thoughts.
> By defauly The U-Blox devices enumerate with the CDC ACM driver and output
> NMEA data via /dev/ttyACM0. With this patch and cdc_acm blocked I get
> /dev/gnss0 and can cat it to get NMEA data. Is your expectation to move
> these sort of devices over to the usb gnss driver too?

Thanks for testing.

I also used u-blox receiver when developing the USB support, but
enabling support for these devices properly would require adding a few
more missing bits, including blacklisting the corresponding ids in
cdc-acm.

I think I'll look into doing this, but I'm currently quite short on
time.

I'll keep you posted.

Johan
diff mbox series

Patch

diff --git a/drivers/gnss/usb.c b/drivers/gnss/usb.c
index 792235a688ea..775d58c2dbe1 100644
--- a/drivers/gnss/usb.c
+++ b/drivers/gnss/usb.c
@@ -18,6 +18,7 @@ 
 
 static const struct usb_device_id gnss_usb_id_table[] = {
 	{ USB_DEVICE(0x1199, 0xb000) },		/* Sierra Wireless XM1210 */
+	{ USB_DEVICE(0x1546, 0x01a9) },		/* U-Blox NEO-M9N GNSS receiver */
 	{ }
 };
 MODULE_DEVICE_TABLE(usb, gnss_usb_id_table);