Received: by 10.192.165.148 with SMTP id m20csp4881908imm; Tue, 24 Apr 2018 09:54:25 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrZjuFAOmGbGFzM1eLMWw5XMH46JygxZt74hRJAl3YwdZXoOJLBcHFjTFSg1l+exTJ+Q0lw X-Received: by 2002:a17:902:d886:: with SMTP id b6-v6mr2510583plz.278.1524588865515; Tue, 24 Apr 2018 09:54:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524588865; cv=none; d=google.com; s=arc-20160816; b=sghHFdN6kDS+U49ZfmckR+Xp6t/pELfhztqgDHKL/1L0yY781LB4UALqhyFXTkZyb5 36z9k5tDdQw6cEbGjBlmS8yRg9Ym8Xk3AyjhqSuPZc6LSWaq0vkFSMnWjYRWWle20VE4 6f/bC0Q5lu/o6USjgPZU3DYQBqBwarVqZeF9gMJJJPiLOmYyRqHAtyPKoWwUJYePjwnz iYyXG49foLAsCJT3Q/tC6E7GzsBxG6O+LsJZcTS1FlBrv5DgfNnRcxRoAcAfVheHlyu2 LDGN+tJTJbfSsOWhupN/+/UBt8K8hU7+K7i388wpSPKJzBx89+1DTJ6ZBnTSEOAMxNC1 tX9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=smZW1BPwnSB7S678WB1zMleOqc2SV2CG8eD9q6upYXs=; b=ZTMBV9v7j5UkBxmUeet8s+AzGyQ8peyGiYZNx+lHo1mrbpSGHRtfEDIboZCpWWY7rJ 5gLbiNm5jNKlVR/af37hVtk9M+Dx5Pz31hGHo2trjp7zP1z6ApPWzg9hXKQyJG/m9fAj n7gq5QKG8D8AreO1Ex3IhGs0/aCh8pEhgNHs3Vk0OVgPgHxsLv9TuOXM00OyqCBQnXa4 VDOWilsKUgnMUrC4duE+s1BLYyBqLXgZKgvH6g0ZZM1HxX1ahiCuKeIQtVW36BRvf6hj KPH2rRnoVjZuaV4m7Ru4RN+OURh9deReviFpCK8t3VSiDhQ5ft//lFptQcHDdsJjQ6dN pv/w== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=nhqO+i/W; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f34-v6si13832772ple.52.2018.04.24.09.54.10; Tue, 24 Apr 2018 09:54:25 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=nhqO+i/W; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751460AbeDXQur (ORCPT + 99 others); Tue, 24 Apr 2018 12:50:47 -0400 Received: from mail-lf0-f68.google.com ([209.85.215.68]:35434 "EHLO mail-lf0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750842AbeDXQuo (ORCPT ); Tue, 24 Apr 2018 12:50:44 -0400 Received: by mail-lf0-f68.google.com with SMTP id r125-v6so21334964lfe.2; Tue, 24 Apr 2018 09:50:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id; bh=smZW1BPwnSB7S678WB1zMleOqc2SV2CG8eD9q6upYXs=; b=nhqO+i/WzT+oGrf7Sm5l6n9g5Um0svz+cuqwtT7PJ0eJFnW2mMwZV2LBWzQKOxX5eS 3NHIKgRcS5IKJxdfuq9V5us+0WH4Y54stlRMni21a+ByuwqXUP7MqvLz4VdcDZRKkx8z Sa7mX+EVO6QybTOVdl3hksiOkx31jVLaMMi5f6hCurC2f2Brtfcd+s4UZ9hrEgDRN2L8 bdFQYUOMqK8MVY+HKG6s40jy3kImZ84Zn+PRRq3BxBwxYauxHFljt24LV+HHozqUOJC6 VboWrZqlzYgn0eb6ZDTSrxTXq7h/SbETJy5Fzr0IcANuWsRxrXjBKZddG3oAMUZhZaaK lW8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=smZW1BPwnSB7S678WB1zMleOqc2SV2CG8eD9q6upYXs=; b=rMKCisxG9D9YNeY2jPhlItNY4fBof59rAqrgSi7jtH52XXTFvc1nvvuBpTIfrYRp6v zbxWH2KHEiID2yX7wKVT7yaoNQeXiRdKerDaufLs1BoE1vm1Pg+mIKVuH9LQYrHQEA4L lBuUS1Nyfp+eJ9TN4I7wYCL5JC3+P9DAN2hK+/qQ7PqyYm1du/qwnw5AuZMj2iaSdJsr As7x/lCS5v/pxGrAwg96iGVMthCW+YHDaTGr8W36IoqL4tuSCBx5ulPwm+cla/l98OeK maP2onph+EIxiGJJZzgQtg7PC8BfIWMgg/KCkEA0CASDI3rKYolLNDot3CKFaRI+GfLG djEw== X-Gm-Message-State: ALQs6tBtbRU8Kx8VMBVwfXA2YazXCzVmCi5f8MphoWfxHQnQp51dwzjt UdRGYWIuQCew9bM5mxXQ3lM= X-Received: by 2002:a19:e549:: with SMTP id c70-v6mr12534932lfh.65.1524588643038; Tue, 24 Apr 2018 09:50:43 -0700 (PDT) Received: from xi.terra (c-8bb2e655.07-184-6d6c6d4.cust.bredbandsbolaget.se. [85.230.178.139]) by smtp.gmail.com with ESMTPSA id b17sm2901651ljd.79.2018.04.24.09.50.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Apr 2018 09:50:42 -0700 (PDT) Received: from johan by xi.terra with local (Exim 4.90_1) (envelope-from ) id 1fB19J-0004TY-IV; Tue, 24 Apr 2018 18:50:37 +0200 From: Johan Hovold To: Greg Kroah-Hartman , Rob Herring , Mark Rutland Cc: Andreas Kemnade , Arnd Bergmann , "H . Nikolaus Schaller" , Pavel Machek , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Johan Hovold Subject: [PATCH 0/7] gnss: add new GNSS subsystem Date: Tue, 24 Apr 2018 18:34:51 +0200 Message-Id: <20180424163458.11947-1-johan@kernel.org> X-Mailer: git-send-email 2.17.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This series adds a new subsystem for GNSS receivers (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 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. 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. 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. ] 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. 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