Lines Matching +full:gnss +full:- +full:receiver
1 // SPDX-License-Identifier: GPL-2.0
3 * Generic USB GNSS receiver driver
9 #include <linux/gnss.h>
35 struct gnss_usb *gusb = urb->context; in gnss_usb_rx_complete()
36 struct gnss_device *gdev = gusb->gdev; in gnss_usb_rx_complete()
37 int status = urb->status; in gnss_usb_rx_complete()
44 case -ENOENT: in gnss_usb_rx_complete()
45 case -ECONNRESET: in gnss_usb_rx_complete()
46 case -ESHUTDOWN: in gnss_usb_rx_complete()
47 dev_dbg(&gdev->dev, "urb stopped: %d\n", status); in gnss_usb_rx_complete()
49 case -EPIPE: in gnss_usb_rx_complete()
50 dev_err(&gdev->dev, "urb stopped: %d\n", status); in gnss_usb_rx_complete()
53 dev_dbg(&gdev->dev, "nonzero urb status: %d\n", status); in gnss_usb_rx_complete()
57 len = urb->actual_length; in gnss_usb_rx_complete()
61 ret = gnss_insert_raw(gdev, urb->transfer_buffer, len); in gnss_usb_rx_complete()
63 dev_dbg(&gdev->dev, "dropped %d bytes\n", len - ret); in gnss_usb_rx_complete()
66 if (ret && ret != -EPERM && ret != -ENODEV) in gnss_usb_rx_complete()
67 dev_err(&gdev->dev, "failed to resubmit urb: %d\n", ret); in gnss_usb_rx_complete()
75 ret = usb_submit_urb(gusb->read_urb, GFP_KERNEL); in gnss_usb_open()
77 if (ret != -EPERM && ret != -ENODEV) in gnss_usb_open()
78 dev_err(&gdev->dev, "failed to submit urb: %d\n", ret); in gnss_usb_open()
89 usb_kill_urb(gusb->read_urb); in gnss_usb_close()
101 return -ENOMEM; in gnss_usb_write_raw()
103 ret = usb_bulk_msg(gusb->udev, gusb->write_pipe, tbuf, count, NULL, in gnss_usb_write_raw()
129 ret = usb_find_common_endpoints(intf->cur_altsetting, &in, &out, NULL, in gnss_usb_probe()
136 return -ENOMEM; in gnss_usb_probe()
138 gdev = gnss_allocate_device(&intf->dev); in gnss_usb_probe()
140 ret = -ENOMEM; in gnss_usb_probe()
144 gdev->ops = &gnss_usb_gnss_ops; in gnss_usb_probe()
145 gdev->type = GNSS_TYPE_NMEA; in gnss_usb_probe()
150 ret = -ENOMEM; in gnss_usb_probe()
158 ret = -ENOMEM; in gnss_usb_probe()
166 gusb->intf = intf; in gnss_usb_probe()
167 gusb->udev = udev; in gnss_usb_probe()
168 gusb->gdev = gdev; in gnss_usb_probe()
169 gusb->read_urb = urb; in gnss_usb_probe()
170 gusb->write_pipe = usb_sndbulkpipe(udev, usb_endpoint_num(out)); in gnss_usb_probe()
196 gnss_deregister_device(gusb->gdev); in gnss_usb_disconnect()
198 kfree(gusb->read_urb->transfer_buffer); in gnss_usb_disconnect()
199 usb_free_urb(gusb->read_urb); in gnss_usb_disconnect()
200 gnss_put_device(gusb->gdev); in gnss_usb_disconnect()
205 .name = "gnss-usb",
213 MODULE_DESCRIPTION("Generic USB GNSS receiver driver");