OSDN Git Service

gnss: add GNSS receiver subsystem
authorJohan Hovold <johan@kernel.org>
Fri, 1 Jun 2018 08:22:52 +0000 (10:22 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 28 Jun 2018 11:29:47 +0000 (20:29 +0900)
commit2b6a440351436d792b1960822da4b7d6e673f568
tree120e01f16584b31ccde83b44d2d13b2a7ed32360
parent7daf201d7fe8334e2d2364d4e8ed3394ec9af819
gnss: add GNSS receiver subsystem

Add a new subsystem for GNSS (e.g. GPS) receivers.

While GNSS receivers are typically accessed using a UART interface they
often also support other I/O interfaces such as I2C, SPI and USB, while
yet other devices use iomem or even some form of remote-processor
messaging (rpmsg).

The new GNSS subsystem abstracts the underlying interface and provides a
new "gnss" class type, which exposes a character-device interface (e.g.
/dev/gnss0) to user space. This allows GNSS receivers to have a
representation in the Linux device model, something which is important
not least for power management purposes.

Note that the character-device interface provides raw access to whatever
protocol the receiver is (currently) using, such as NMEA 0183, UBX or
SiRF Binary. These protocols are expected to be continued to be handled
by user space for the time being, even if some hybrid solutions are also
conceivable (e.g. to have kernel drivers issue management commands).

This will still allow for better platform integration by allowing GNSS
devices and their resources (e.g. regulators and enable-gpios) to be
described by firmware and managed by kernel drivers rather than
platform-specific scripts and services.

While the current interface is kept minimal, it could be extended using
IOCTLs, sysfs or uevents as needs and proper abstraction levels are
identified and determined (e.g. for device and feature identification).

Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
MAINTAINERS
drivers/Kconfig
drivers/Makefile
drivers/gnss/Kconfig [new file with mode: 0644]
drivers/gnss/Makefile [new file with mode: 0644]
drivers/gnss/core.c [new file with mode: 0644]
include/linux/gnss.h [new file with mode: 0644]