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 |
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
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
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 --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);