All of lore.kernel.org
 help / color / mirror / Atom feed
From: "H. Nikolaus Schaller" <hns@goldelico.com>
To: Johan Hovold <johan@kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Rob Herring <robh+dt@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Andreas Kemnade <andreas@kemnade.info>,
	Arnd Bergmann <arnd@arndb.de>, Pavel Machek <pavel@ucw.cz>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Discussions about the Letux Kernel <letux-kernel@openphoenux.org>,
	"open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS"
	<devicetree@vger.kernel.org>
Subject: Re: [PATCH 0/7] gnss: add new GNSS subsystem
Date: Tue, 24 Apr 2018 19:40:00 +0200	[thread overview]
Message-ID: <31CF06C6-D6ED-4930-8D81-12256A518059@goldelico.com> (raw)
In-Reply-To: <20180424163458.11947-1-johan@kernel.org>

Hi Johan,

> Am 24.04.2018 um 18:34 schrieb Johan Hovold <johan@kernel.org>:
> 
> This series adds a new subsystem for GNSS receivers (e.g. GPS
> receivers).

Great!

> 
> 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 and which also allows for easy
> detection and (eventually) identification of GNSS devices.
> 
> 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).
> 
> Another possible extension is to add generic 1PPS support.

would be nice but not first priority.

> 
> I decided to go with a custom character-device interface rather than
> pretend that these abstract GNSS devices are still TTY devices (e.g.
> /dev/ttyGNSS0). Obviously, modifying line settings or reading modem
> control signals does not make any sense for a device using, say, a
> USB (not USB-serial) or iomem interface. This also means, however, that
> user space would no longer be able to set the line speed to match a new
> port configuration that can be set using the various GNSS protocols when
> the underlying interface is indeed a UART; instead this would need to be
> taken care of by the driver.
> 
> Also note that writes are always synchronous instead of requiring user
> space to call tcdrain() after every command.
> 
> This all seems to work well-enough (e.g. with gpsd), but please let me
> know if I've overlooked something which would indeed require a TTY
> interface instead.

tcgetattr() / tcsetattr() for controlling line disciplines, e.g.
stty -icanon </dev/ttyGNSS0 do not work.

It may be possible to use non-blocking I/O or select() or threads
to achieve the same result but may be more complex.

But gpsd seems not to make use of it (or has a built-in fallback - I
have never looked into its code).

> 
> As proof-of-concept I have implemented drivers for receivers based on
> two common GNSS chipsets (SiRFstar and u-blox), but due to lack of
> hardware these have so far only been tested using mockup devices and a
> USB-serial-based GPS device (using out-of-tree code). [ Let me know if
> you've got any evalutation kits to spare. ]

Ok, those drivers look nice on first glance.

BTW: I have refactored our w2sg00x4 driver into a gps-core (still creating
a /dev/GPS0) and a driver using a common API.

With that it should almost fit by coping some lines from your serdev based
device drivers.

I haven't found time to submit anything, so it is just living (and working)
in our private tree (please ignore w2cbw003 and trs3386 stuff):

http://git.goldelico.com/?p=gta04-kernel.git;a=shortlog;h=refs/heads/work/letux-base/hns/misc/w2sg-serdev-v6
http://git.goldelico.com/?p=gta04-kernel.git;a=commit;h=164c13373462596cabdd3b5308e5f7d8626a05af


> 
> Finally, note that documentation (including kerneldoc) remains to be
> written, but hopefully this will not hinder review given that the
> current interfaces are fairly self-describing.

I'll apply your patches and try to adjust our w2sg driver. And report
issues if they arise.

BR and thanks,
Nikolaus


> 
> Johan
> 
> 
> Johan Hovold (7):
>  gnss: add GNSS receiver subsystem
>  dt-bindings: add generic gnss binding
>  gnss: add generic serial driver
>  dt-bindings: gnss: add u-blox binding
>  gnss: add driver for u-blox receivers
>  dt-bindings: gnss: add sirfstar binding
>  gnss: add driver for sirfstar-based receivers
> 
> .../devicetree/bindings/gnss/gnss.txt         |  36 ++
> .../devicetree/bindings/gnss/sirfstar.txt     |  38 ++
> .../devicetree/bindings/gnss/u-blox.txt       |  31 ++
> .../devicetree/bindings/vendor-prefixes.txt   |   4 +
> MAINTAINERS                                   |   7 +
> drivers/Kconfig                               |   2 +
> drivers/Makefile                              |   1 +
> drivers/gnss/Kconfig                          |  43 ++
> drivers/gnss/Makefile                         |  16 +
> drivers/gnss/core.c                           | 385 ++++++++++++++++
> drivers/gnss/serial.c                         | 288 ++++++++++++
> drivers/gnss/serial.h                         |  47 ++
> drivers/gnss/sirf.c                           | 415 ++++++++++++++++++
> drivers/gnss/ubx.c                            | 133 ++++++
> include/linux/gnss.h                          |  64 +++
> 15 files changed, 1510 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/gnss/gnss.txt
> create mode 100644 Documentation/devicetree/bindings/gnss/sirfstar.txt
> create mode 100644 Documentation/devicetree/bindings/gnss/u-blox.txt
> create mode 100644 drivers/gnss/Kconfig
> create mode 100644 drivers/gnss/Makefile
> create mode 100644 drivers/gnss/core.c
> create mode 100644 drivers/gnss/serial.c
> create mode 100644 drivers/gnss/serial.h
> create mode 100644 drivers/gnss/sirf.c
> create mode 100644 drivers/gnss/ubx.c
> create mode 100644 include/linux/gnss.h
> 
> -- 
> 2.17.0
> 

  parent reply	other threads:[~2018-04-24 17:40 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-24 16:34 [PATCH 0/7] gnss: add new GNSS subsystem Johan Hovold
2018-04-24 16:34 ` [PATCH 1/7] gnss: add GNSS receiver subsystem Johan Hovold
2018-04-25  8:56   ` Greg Kroah-Hartman
2018-04-25 10:56     ` Johan Hovold
2018-04-25 12:23       ` Johan Hovold
2018-04-29 13:35         ` Greg Kroah-Hartman
2018-05-02  7:57           ` Johan Hovold
2018-04-24 16:34 ` [PATCH 2/7] dt-bindings: add generic gnss binding Johan Hovold
2018-04-25 18:26   ` Rob Herring
2018-04-24 16:34 ` [PATCH 3/7] gnss: add generic serial driver Johan Hovold
2018-04-25  8:57   ` Greg Kroah-Hartman
2018-04-25 10:58     ` Johan Hovold
2018-04-25  9:00   ` Greg Kroah-Hartman
2018-04-25 11:05     ` Johan Hovold
2018-04-24 16:34 ` [PATCH 4/7] dt-bindings: gnss: add u-blox binding Johan Hovold
2018-04-25 18:16   ` Rob Herring
2018-04-26  9:10     ` Johan Hovold
2018-05-01 14:05       ` Rob Herring
2018-05-02  8:16         ` Johan Hovold
2018-05-02 13:16           ` Rob Herring
2018-05-07  9:06             ` Johan Hovold
2018-05-03  9:35           ` H. Nikolaus Schaller
2018-05-03 18:50             ` Andreas Kemnade
2018-05-04  5:16               ` H. Nikolaus Schaller
2018-05-04 11:42                 ` Sebastian Reichel
2018-05-04 12:04                   ` H. Nikolaus Schaller
2018-05-04 13:37                     ` Sebastian Reichel
2018-05-04 14:29                       ` Tony Lindgren
2018-05-07 10:07                     ` Johan Hovold
2018-05-07 10:01                   ` Johan Hovold
2018-05-07 15:45                     ` Tony Lindgren
2018-05-07 16:34                       ` Johan Hovold
2018-05-07 17:50                         ` Tony Lindgren
2018-05-08  6:58                           ` Johan Hovold
2018-05-08 15:22                             ` Tony Lindgren
2018-05-08 15:47                               ` Tony Lindgren
2018-05-08 15:54                                 ` Tony Lindgren
2018-05-08 16:49                                   ` Tony Lindgren
2018-05-09 13:10                                     ` OMAP serial runtime PM and autosuspend (was: Re: [PATCH 4/7] dt-bindings: gnss: add u-blox binding)) Johan Hovold
2018-05-09 13:57                                       ` Tony Lindgren
2018-05-17 10:09                                         ` Johan Hovold
2018-05-17 17:10                                           ` Tony Lindgren
2018-05-21 13:48                                             ` Johan Hovold
2018-05-21 15:48                                               ` Tony Lindgren
2018-05-24  9:17                                                 ` Johan Hovold
2018-05-24 13:32                                                   ` Tony Lindgren
2018-05-25 14:02                                                     ` Johan Hovold
2018-05-08 15:56                         ` [PATCH 4/7] dt-bindings: gnss: add u-blox binding Sebastian Reichel
2018-05-09  9:18                           ` Serdev runtime PM (was: Re: [PATCH 4/7] dt-bindings: gnss: add u-blox binding) Johan Hovold
2018-05-09  9:49                             ` Johan Hovold
2018-05-09 14:05                             ` Tony Lindgren
2018-05-17 10:25                               ` Johan Hovold
2018-05-07  9:47             ` [PATCH 4/7] dt-bindings: gnss: add u-blox binding Johan Hovold
2018-04-24 16:34 ` [PATCH 5/7] gnss: add driver for u-blox receivers Johan Hovold
2018-04-24 16:34 ` [PATCH 6/7] dt-bindings: gnss: add sirfstar binding Johan Hovold
2018-04-25 18:25   ` Rob Herring
2018-04-26  9:12     ` Johan Hovold
2018-04-24 16:34 ` [PATCH 7/7] gnss: add driver for sirfstar-based receivers Johan Hovold
2018-04-24 17:40 ` H. Nikolaus Schaller [this message]
2018-04-24 17:50   ` [PATCH 0/7] gnss: add new GNSS subsystem Johan Hovold
2018-04-24 19:44     ` H. Nikolaus Schaller
2018-04-25  8:11       ` Johan Hovold
2018-04-26 10:10         ` H. Nikolaus Schaller
2018-04-26 18:21           ` Johan Hovold
2018-04-24 20:13 ` Pavel Machek
2018-04-24 20:59   ` Andreas Kemnade
2018-04-25  7:32     ` Johan Hovold
2018-04-25  6:49   ` Marcel Holtmann
2018-04-25  7:24   ` Johan Hovold
2018-04-24 20:38 ` Pavel Machek
2018-04-25  6:26 ` Pavel Machek
2018-04-25  6:51   ` Johan Hovold
2018-04-25  8:48 ` Greg Kroah-Hartman
2018-04-25 10:31   ` Johan Hovold
2018-05-04 13:27 ` Sebastian Reichel
2018-05-04 20:03   ` Pavel Machek
2018-05-05 17:28     ` Sebastian Reichel
2018-05-05 21:11       ` Pavel Machek
2018-05-06  6:47         ` Marcel Holtmann
2018-05-07 10:20   ` Johan Hovold
2018-05-07 19:06     ` Marcel Holtmann
2018-05-08  7:01       ` Johan Hovold
2018-05-08  7:49         ` Marcel Holtmann
2018-05-08 12:48           ` Johan Hovold
2018-05-08 20:03             ` Marcel Holtmann
2018-05-30 10:26               ` Johan Hovold

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=31CF06C6-D6ED-4930-8D81-12256A518059@goldelico.com \
    --to=hns@goldelico.com \
    --cc=andreas@kemnade.info \
    --cc=arnd@arndb.de \
    --cc=devicetree@vger.kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=johan@kernel.org \
    --cc=letux-kernel@openphoenux.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=pavel@ucw.cz \
    --cc=robh+dt@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.