From patchwork Fri Mar 1 13:41:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Andreas Klinger X-Patchwork-Id: 10835351 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2D6D21515 for ; Fri, 1 Mar 2019 13:42:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 196672F386 for ; Fri, 1 Mar 2019 13:42:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0D41E2F71D; Fri, 1 Mar 2019 13:42:39 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A0A4F2F386 for ; Fri, 1 Mar 2019 13:42:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387781AbfCANmi (ORCPT ); Fri, 1 Mar 2019 08:42:38 -0500 Received: from mout.kundenserver.de ([212.227.17.13]:37697 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387620AbfCANmh (ORCPT ); Fri, 1 Mar 2019 08:42:37 -0500 Received: from localhost ([2.174.161.193]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MowOm-1hLFf72OA2-00qQiG; Fri, 01 Mar 2019 14:41:59 +0100 Date: Fri, 1 Mar 2019 14:41:57 +0100 From: Andreas Klinger To: devicetree@vger.kernel.org, linux-iio@vger.kernel.org Cc: jic23@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, afaerber@suse.de, arnd@arndb.de, davem@davemloft.net, gregkh@linuxfoundation.org, johan@kernel.org, khilman@baylibre.com, knaack.h@gmx.de, lars@metafoo.de, linux-kernel@vger.kernel.org, martin.blumenstingl@googlemail.com, mchehab+samsung@kernel.org, m.othacehe@gmail.com, nicolas.ferre@microchip.com, pmeerw@pmeerw.net, robh@kernel.org, songqiang1304521@gmail.com, treding@nvidia.com, techsupport@maxbotix.com Subject: [PATCH v2 1/4] dt-bindings: Add vendor prefix for MaxBotix Message-ID: <20190301134155.ujtl434di6eb7jir@arbad> MIME-Version: 1.0 Content-Disposition: inline User-Agent: NeoMutt/20170113 (1.7.2) X-Provags-ID: V03:K1:75e/5Tm4BWTq1RGra3A/n6mGDAWe8jFpRltMSHDgiLVVzUAROTl rgFVwsliNxo6Q5Y7sPhW4joG4K9oCGju4Sr/s1jg+Rjz8uKMEJX2CI5Rt3OXP4U2uhBtuS6 zGzq2SmYIwj9DccZ0dg9WsBbFqmd3ZDy615JGJjfehKtQUiJMxnq+sgqRgg7tVoW/n/RiH0 WoTHOiynh4yQJgJIo3foA== X-UI-Out-Filterresults: notjunk:1;V03:K0:JqxHs4zEXU0=:YnylV5qb9C8683SOqiXuIl GD2/U9iD9MIS+dDMl5lHV0YZJ3hwDHYlEPbkD0wzpQ+COaf9MlZ8Zk1nx/ymKNMuDgAeNX8tR 3VZdzinPyTvOvKek2DT5nh7DpHhjs5xRHtfHXPCK1wfgaHxxJbsKmVETqKITws7kiy50b69op NyzUXLMOT6mSWIbaY37H1M3eTXgrr61PkM62gx49LQKMGBbgI96tWrthgNf/p/+Ry5R3ocL1y 9PT77C1Zw5wndpiOYMA5pn1gvpTIMx1pKt6oRuXgdYHkLVFwP8yff1EjHycRW72WCTnF/OlAw KFth3FamBlkp2vL/IhRmBve5x2EZ6pY3G3gSNqlIcUz7Yw8uskXYU/iGyIikv/cZkAMKXyJIJ V5vkj7nmVjm+Yu0rpJ1qNyKJo5UjuLYtpURrjmvw2/eJWi8Gh7pJAqNCeVYJbESpokVaN/QsQ MYiziyj3loj+DhD0tRKlYwrjTReWg3vneaGgVKrMX3B18rLzjdDpHN6yrrhgjzfuqbpl70bxI ENywGrPPbpPANK3c9IBLlTvPlSst80PkAt9KadIkXaqSzGh//hTK8gZHXj9qQft7ek3ZfAtKS GrKdaD/K8fAygOE1CB5dZmLpJNL46v7HQoIbusOIQGNANC0efG6oieaFW0zVD3kHmjvabTBI+ V3UKfPcv3E4yigKiw3RMMgR2H1igs/BRUFJOC5Ig/1W/rGkXQKIdJAEjELIeqa6cX8PwMjbhM EWJWDcOh/fTZm31eXmm24u9nYx04vd36FNlXtw== Sender: linux-iio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add MaxBotix, which is a vendor of ultrasonic rangers in different varieties and interfaces. Signed-off-by: Andreas Klinger Reviewed-by: Andreas Färber Reviewed-by: Rob Herring --- Documentation/devicetree/bindings/vendor-prefixes.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt index 389508584f48..added54a1108 100644 --- a/Documentation/devicetree/bindings/vendor-prefixes.txt +++ b/Documentation/devicetree/bindings/vendor-prefixes.txt @@ -225,6 +225,7 @@ lsi LSI Corp. (LSI Logic) lwn Liebherr-Werk Nenzing GmbH macnica Macnica Americas marvell Marvell Technology Group Ltd. +maxbotix MaxBotix Inc. maxim Maxim Integrated Products mbvl Mobiveil Inc. mcube mCube From patchwork Fri Mar 1 13:42:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Klinger X-Patchwork-Id: 10835357 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1FE4C1515 for ; Fri, 1 Mar 2019 13:43:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0D3A22F387 for ; Fri, 1 Mar 2019 13:43:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 015802F71D; Fri, 1 Mar 2019 13:43:09 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 995AE2F387 for ; Fri, 1 Mar 2019 13:43:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387940AbfCANnE (ORCPT ); Fri, 1 Mar 2019 08:43:04 -0500 Received: from mout.kundenserver.de ([217.72.192.75]:37819 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728313AbfCANnD (ORCPT ); Fri, 1 Mar 2019 08:43:03 -0500 Received: from localhost ([2.174.161.193]) by mrelayeu.kundenserver.de (mreue109 [212.227.15.183]) with ESMTPSA (Nemesis) id 1McpW8-1hZb9D33y6-00ZxBt; Fri, 01 Mar 2019 14:42:29 +0100 Date: Fri, 1 Mar 2019 14:42:27 +0100 From: Andreas Klinger To: devicetree@vger.kernel.org, linux-iio@vger.kernel.org Cc: jic23@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, afaerber@suse.de, arnd@arndb.de, davem@davemloft.net, gregkh@linuxfoundation.org, johan@kernel.org, khilman@baylibre.com, knaack.h@gmx.de, lars@metafoo.de, linux-kernel@vger.kernel.org, martin.blumenstingl@googlemail.com, mchehab+samsung@kernel.org, m.othacehe@gmail.com, nicolas.ferre@microchip.com, pmeerw@pmeerw.net, robh@kernel.org, songqiang1304521@gmail.com, treding@nvidia.com, techsupport@maxbotix.com Subject: [PATCH v2 2/4] dt-bindings: maxbotix,i2cxl: Add MaxBotix i2c ultrasonic rangers Message-ID: <20190301134225.susjgtck4iktkbeg@arbad> MIME-Version: 1.0 Content-Disposition: inline User-Agent: NeoMutt/20170113 (1.7.2) X-Provags-ID: V03:K1:eExLLS64aSo6+X08jF1pAXF19Il0EiIdEI19MaIeVKVhrpNcX3x l5X+WkiXWrJCnpJlYjG63HdT5IC9pD78NQf8PmWZa7pfWmJpC8IQWOtKPTLt3M6XCqrgqbx NwKECW4ZFiA2UssKk9cKFbt945k9+V4EPnTO9rYg4Kk7OYJoHVWZhHlfPh5ZXihzcHvpyq1 20Sojh5r95p/1upkpE9xA== X-UI-Out-Filterresults: notjunk:1;V03:K0:goB2edckW0Q=:IZ5mHpbrG2/6mF2xBmDO5D zp0ToO6x7/4Ft1AIilyFzOGrJKRgyaEnM+XLaiLpNcs4vRiryyLTZLpgHEPKKlMjWYnLz2n+J g52n/FFDimnx+SCQdr0xbaDpZbkE7PaynuoCo0R5an5h2g2bowHCHiCtU2doaoyBoSokGKhNs dRfuq2ojAKgAoaoSHSLbID7CeFWrJrUfx2c8a0+qYs8a+rjsI7cLZP5koNkHyswgR3txhCMZ+ 92v1tvAzXUHNPvHb1EJTw9e8YdOTneXxRFolaodPwxHp8t1uE0DJq1jmzqhmY1wyzG8mXehiS JCDyz531nAzDL00WafOG1Hs6DanyiyXgwP0C+TjbhoUZZ/aUTCrichvQUVgjEpoFf2bQbDc9L WawAE68IOHAi1RVOSA9jnF2pWB4sF/4UD0l0x0UUPTLx6MgdDXN6XVO+E0oFNvPiTbQSbRqn7 nH+9PjYWMw2BHVn6M2JwmvBEAHJbB+5/8a3Dzjeueuz3X84ncgPmIKFLH8/Pix1a8WLm9Ppef Nk7WJB1Fu56Rrxf/iQVFS41tzX0s5EHk5m0DD4fWdIcoCCm+2CgSFURyba5RJZdQLTmlDS5YX YOoj9Y8+EozkqAM57xF3lpDCzjCjYUoRtxtLJF2Visraq95vm9dZym65e+UpQK0INFHraSwCZ K8Aso9Z3x+WGb1Uf9y/PA7AH7VtBD4H+QVsp8XZWMt/V68JIqUiZcVDeLYFSFIEylLMkstPOY KIhJ5H8VYNTGEXR8itQO5gvUbzPtK/S6GKb2iw== Sender: linux-iio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add doc for dt binding maxbotix,i2cxl. This binding is for MaxBotix I2CXL-MaxSonar ultrasonic rangers which share a common i2c interface. Signed-off-by: Andreas Klinger --- .../bindings/iio/proximity/maxbotix,i2cxl.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Documentation/devicetree/bindings/iio/proximity/maxbotix,i2cxl.txt diff --git a/Documentation/devicetree/bindings/iio/proximity/maxbotix,i2cxl.txt b/Documentation/devicetree/bindings/iio/proximity/maxbotix,i2cxl.txt new file mode 100644 index 000000000000..528f428fc583 --- /dev/null +++ b/Documentation/devicetree/bindings/iio/proximity/maxbotix,i2cxl.txt @@ -0,0 +1,21 @@ +* MaxBotix I2CXL-MaxSonar ultrasonic distance sensor of type mb12x2 using + the i2c interface for ranging + +Required properties: + - compatible: Should be "maxbotix,i2cxl" + + - reg: i2c address of the device + +Optional properties: + - status-gpios: Status gpio (input) used to announce the preceding + reading request has finished and that data is + available. If no status gpio is specified the + device driver falls back to wait until data can be + retrieved. + +Example: +proximity@70 { + compatible = "maxbotix,i2cxl"; + reg = <0x70>; + status-gpios = <&gpio2 2 GPIO_ACTIVE_HIGH>; +}; From patchwork Fri Mar 1 13:42:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Klinger X-Patchwork-Id: 10835359 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 92A3017EF for ; Fri, 1 Mar 2019 13:43:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7A1EC2F503 for ; Fri, 1 Mar 2019 13:43:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6C38C2FA22; Fri, 1 Mar 2019 13:43:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9E47C2F503 for ; Fri, 1 Mar 2019 13:43:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387836AbfCANnf (ORCPT ); Fri, 1 Mar 2019 08:43:35 -0500 Received: from mout.kundenserver.de ([212.227.17.24]:54287 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387818AbfCANne (ORCPT ); Fri, 1 Mar 2019 08:43:34 -0500 Received: from localhost ([2.174.161.193]) by mrelayeu.kundenserver.de (mreue109 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MF39S-1gkH293v1k-00FPA8; Fri, 01 Mar 2019 14:42:58 +0100 Date: Fri, 1 Mar 2019 14:42:56 +0100 From: Andreas Klinger To: devicetree@vger.kernel.org, linux-iio@vger.kernel.org Cc: jic23@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, afaerber@suse.de, arnd@arndb.de, davem@davemloft.net, gregkh@linuxfoundation.org, johan@kernel.org, khilman@baylibre.com, knaack.h@gmx.de, lars@metafoo.de, linux-kernel@vger.kernel.org, martin.blumenstingl@googlemail.com, mchehab+samsung@kernel.org, m.othacehe@gmail.com, nicolas.ferre@microchip.com, pmeerw@pmeerw.net, robh@kernel.org, songqiang1304521@gmail.com, treding@nvidia.com, techsupport@maxbotix.com Subject: [PATCH v2 3/4] mb12x2.c: add distance iio sensor with i2c Message-ID: <20190301134255.tsixtoqlxnoa2kig@arbad> MIME-Version: 1.0 Content-Disposition: inline User-Agent: NeoMutt/20170113 (1.7.2) X-Provags-ID: V03:K1:f+K8OsI44kKW16NHdW/hoxcIzysCvwyb12UnGK+fDM1kWjkXRNs 4yCC7F6pggjh2nHLUGiwg+Amr/bw58kk1+Vg1T6Q/n351K5+weu3IIhHe+83+lOMubCdUwt Q2mUq9nwJXdNJOWuKDNI9IYHKiQP6oSRj2r4KiLh+gbb+qbq/8vaR6yhLGConaynGYqsgJn zUShh8wM/94tEQDRBNJnA== X-UI-Out-Filterresults: notjunk:1;V03:K0:68v9cRfMcXA=:fKJd3qJ4pkare7/B7yE6ot nA3nib8M/+ZK/XhoYEzxmP8PA7tjk1E0FN6ZBeIhoIfZ7XNMDtMQs8YwynVRn643sKRFzQO+j CUaYRv4VJgtDCGSC+e/9EPZu4Dq1DF3z+n6eErYeedE4At/XBDHPDm3XTRZZUrXMeKfSUwWTt DRcGPjHxuUP4kfZ8MZoweXwdFF7k6fIQl/oUmvr7bcZZ0gpXsBpkSKXWtJ/6eICuHi/4G39D9 HxXo/SxrTy+ob23j0mPXf1UNGuD0B3ATwjr3KgCTbAdePXPFDb5UJLZ6voeY5Ta7ymFb0A99D M6gzYaSAvhZUKX1bIo+gsbiXWT5YGucLBtnrfIxi4G95XvDnYAyLryeYgTFIA1cJouBkJizmQ vgCJtGEEMusmGzZp9QbJKtIVYDt61zyl0KPx467AqNHzQn9q1+r6ivQ1pdwojNXA2oU/oXgRS Z2IP4QkXJL9GG5BVEKm7E59Is6zQzWy8UqX8/1gDATiZuRZOn1qvCCZ5Ws42b3Xl95RHH3EWK g/qtnv7CoteijsrICndPPme/bN+T8HlPb4SzLJculrZcpmPAcSq4Xvssj0UVaBFzTHG0BX6nh jJOnuaT6WD0H8yUCXTSGYlhieIHoVvHqKfr4xBm9ezB/vz4vY29RNK6nEmjLRXFj6q3Usz+o2 xOhwO7uyj8l2iWEiqAeEJVkneTegqKjjuix6+9X3l6fZs0g+Ytut7LhX6Myry/zix1ElVxo44 7q9p+dpr/dcaFULis3tYSCy1mfLh3gSmJfWBwg== Sender: linux-iio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add I2CXL-MaxSonar ultrasonic distance sensors of type family mb12x2 using an i2c interface Implemented functionality: - reading the distance via in_distance_raw - buffered mode with trigger - make use of status gpio to announce completion of ranging Add mb12x2 driver to Kconfig and Makefile Signed-off-by: Andreas Klinger --- drivers/iio/proximity/Kconfig | 11 ++ drivers/iio/proximity/Makefile | 1 + drivers/iio/proximity/mb12x2.c | 283 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 295 insertions(+) create mode 100644 drivers/iio/proximity/mb12x2.c diff --git a/drivers/iio/proximity/Kconfig b/drivers/iio/proximity/Kconfig index b99367a89f81..a420f2cb314b 100644 --- a/drivers/iio/proximity/Kconfig +++ b/drivers/iio/proximity/Kconfig @@ -45,6 +45,17 @@ config LIDAR_LITE_V2 To compile this driver as a module, choose M here: the module will be called pulsedlight-lite-v2 +config MB12X2 + tristate "MaxSonar MB12X2 family ultrasonic sensors" + depends on I2C + help + Say Y to build a driver for the ultrasonic sensors I2CXL of + MaxBotix which have an i2c interface. It can be used to measure + the distance of objects. + + To compile this driver as a module, choose M here: the + module will be called mb12x2. + config RFD77402 tristate "RFD77402 ToF sensor" depends on I2C diff --git a/drivers/iio/proximity/Makefile b/drivers/iio/proximity/Makefile index 6d031f903c4c..be9a14db77e7 100644 --- a/drivers/iio/proximity/Makefile +++ b/drivers/iio/proximity/Makefile @@ -7,6 +7,7 @@ obj-$(CONFIG_AS3935) += as3935.o obj-$(CONFIG_ISL29501) += isl29501.o obj-$(CONFIG_LIDAR_LITE_V2) += pulsedlight-lidar-lite-v2.o +obj-$(CONFIG_MB12X2) += mb12x2.o obj-$(CONFIG_RFD77402) += rfd77402.o obj-$(CONFIG_SRF04) += srf04.o obj-$(CONFIG_SRF08) += srf08.o diff --git a/drivers/iio/proximity/mb12x2.c b/drivers/iio/proximity/mb12x2.c new file mode 100644 index 000000000000..8b1ac901c253 --- /dev/null +++ b/drivers/iio/proximity/mb12x2.c @@ -0,0 +1,283 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * mb12x2.c - Support for MaxBotix I2CXL-MaxSonar-EZ series ultrasonic + * ranger with i2c interface + * actually supported are mb12x2 types + * + * Copyright (c) 2019 Andreas Klinger + * + * For details about the device see: + * https://www.maxbotix.com/documents/I2CXL-MaxSonar-EZ_Datasheet.pdf + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* registers of MaxSonar device */ +#define MB12X2_RANGE_COMMAND 0x51 /* Command for reading range */ +#define MB12X2_ADDR_UNLOCK_1 0xAA /* Command 1 for changing address */ +#define MB12X2_ADDR_UNLOCK_2 0xA5 /* Command 2 for changing address */ + +struct mb12x2_data { + struct i2c_client *client; + + struct mutex lock; + + /* + * optionally a gpio can be used to announce when ranging has + * finished + */ + struct completion ranging; + struct gpio_desc *gpiod_status; + int irqnr; + + /* + * triggered buffer + * 1x16-bit channel + 3x16 padding + 4x16 timestamp + */ + s16 buffer[8]; +}; + +static irqreturn_t mb12x2_handle_irq(int irq, void *dev_id) +{ + struct iio_dev *indio_dev = dev_id; + struct mb12x2_data *data = iio_priv(indio_dev); + + /* double check to make sure data is now available */ + if (!gpiod_get_value(data->gpiod_status)) + complete(&data->ranging); + + return IRQ_HANDLED; +} + +static s16 mb12x2_read_distance(struct mb12x2_data *data) +{ + struct i2c_client *client = data->client; + int ret; + s16 distance; + __be16 buf; + + mutex_lock(&data->lock); + + reinit_completion(&data->ranging); + + ret = i2c_smbus_write_byte(client, MB12X2_RANGE_COMMAND); + if (ret < 0) { + dev_err(&client->dev, "write command - err: %d\n", ret); + mutex_unlock(&data->lock); + return ret; + } + + if (data->gpiod_status) { + /* it cannot take more than 100 ms */ + ret = wait_for_completion_killable_timeout(&data->ranging, + HZ/10); + if (ret < 0) { + mutex_unlock(&data->lock); + return ret; + } else if (ret == 0) { + mutex_unlock(&data->lock); + return -ETIMEDOUT; + } + } else { + /* + * use simple sleep if gpio announce pin is not connected + */ + msleep(15); + } + + ret = i2c_master_recv(client, (char *)&buf, sizeof(buf)); + if (ret < 0) { + dev_err(&client->dev, "i2c_master_recv: ret=%d\n", ret); + mutex_unlock(&data->lock); + return ret; + } + + distance = __be16_to_cpu(buf); + /* check for not returning misleading error codes */ + if (distance < 0) { + dev_err(&client->dev, "distance=%d\n", distance); + return -EINVAL; + } + + mutex_unlock(&data->lock); + + return distance; +} + +static irqreturn_t mb12x2_trigger_handler(int irq, void *p) +{ + struct iio_poll_func *pf = p; + struct iio_dev *indio_dev = pf->indio_dev; + struct mb12x2_data *data = iio_priv(indio_dev); + s16 sensor_data; + + sensor_data = mb12x2_read_distance(data); + if (sensor_data < 0) + goto err; + + mutex_lock(&data->lock); + + data->buffer[0] = sensor_data; + iio_push_to_buffers_with_timestamp(indio_dev, + data->buffer, pf->timestamp); + + mutex_unlock(&data->lock); +err: + iio_trigger_notify_done(indio_dev->trig); + return IRQ_HANDLED; +} + +static int mb12x2_read_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *channel, int *val, + int *val2, long mask) +{ + struct mb12x2_data *data = iio_priv(indio_dev); + int ret; + + if (channel->type != IIO_DISTANCE) + return -EINVAL; + + switch (mask) { + case IIO_CHAN_INFO_RAW: + ret = mb12x2_read_distance(data); + if (ret < 0) + return ret; + *val = ret; + return IIO_VAL_INT; + case IIO_CHAN_INFO_SCALE: + /* 1 LSB is 1 cm */ + *val = 0; + *val2 = 10000; + return IIO_VAL_INT_PLUS_MICRO; + default: + return -EINVAL; + } +} + +static const struct iio_chan_spec mb12x2_channels[] = { + { + .type = IIO_DISTANCE, + .info_mask_separate = + BIT(IIO_CHAN_INFO_RAW) | + BIT(IIO_CHAN_INFO_SCALE), + .scan_index = 0, + .scan_type = { + .sign = 's', + .realbits = 16, + .storagebits = 16, + .endianness = IIO_CPU, + }, + }, + IIO_CHAN_SOFT_TIMESTAMP(1), +}; + +static const struct iio_info mb12x2_info = { + .read_raw = mb12x2_read_raw, +}; + +static int mb12x2_probe(struct i2c_client *client, + const struct i2c_device_id *id) +{ + struct iio_dev *indio_dev; + struct mb12x2_data *data; + int ret; + struct device *dev = &client->dev; + + if (!i2c_check_functionality(client->adapter, + I2C_FUNC_SMBUS_READ_BYTE | + I2C_FUNC_SMBUS_WRITE_BYTE)) + return -ENODEV; + + indio_dev = devm_iio_device_alloc(dev, sizeof(*data)); + if (!indio_dev) + return -ENOMEM; + + data = iio_priv(indio_dev); + i2c_set_clientdata(client, indio_dev); + data->client = client; + + indio_dev->info = &mb12x2_info; + indio_dev->name = id->name; + indio_dev->dev.parent = dev; + indio_dev->modes = INDIO_DIRECT_MODE; + indio_dev->channels = mb12x2_channels; + indio_dev->num_channels = ARRAY_SIZE(mb12x2_channels); + + mutex_init(&data->lock); + + init_completion(&data->ranging); + + data->gpiod_status = devm_gpiod_get(dev, "status", GPIOD_IN); + if (IS_ERR(data->gpiod_status)) { + if (PTR_ERR(data->gpiod_status) == -ENOENT) { + dev_warn(dev, "no status gpio --> use sleep instead\n"); + data->gpiod_status = NULL; + } else { + dev_err(dev, "cannot setup gpio; err=%ld\n", + PTR_ERR(data->gpiod_status)); + return PTR_ERR(data->gpiod_status); + } + } + + if (data->gpiod_status) { + data->irqnr = gpiod_to_irq(data->gpiod_status); + if (data->irqnr < 0) { + dev_err(dev, "gpiod_to_irq: %d\n", data->irqnr); + return data->irqnr; + } + + ret = devm_request_irq(dev, data->irqnr, mb12x2_handle_irq, + IRQF_TRIGGER_FALLING, id->name, indio_dev); + if (ret < 0) { + dev_err(dev, "request_irq: %d\n", ret); + return ret; + } + } + + ret = devm_iio_triggered_buffer_setup(dev, indio_dev, + iio_pollfunc_store_time, mb12x2_trigger_handler, NULL); + if (ret < 0) { + dev_err(dev, "setup of iio triggered buffer failed\n"); + return ret; + } + + return devm_iio_device_register(dev, indio_dev); +} + +static const struct of_device_id of_mb12x2_match[] = { + { .compatible = "maxbotix,i2cxl", }, + {}, +}; + +MODULE_DEVICE_TABLE(of, of_mb12x2_match); + +static const struct i2c_device_id mb12x2_id[] = { + { "maxbotix-i2cxl", }, + { } +}; +MODULE_DEVICE_TABLE(i2c, mb12x2_id); + +static struct i2c_driver mb12x2_driver = { + .driver = { + .name = "maxbotix-i2cxl", + .of_match_table = of_mb12x2_match, + }, + .probe = mb12x2_probe, + .id_table = mb12x2_id, +}; +module_i2c_driver(mb12x2_driver); + +MODULE_AUTHOR("Andreas Klinger "); +MODULE_DESCRIPTION("Maxbotix I2CXL-MaxSonar i2c ultrasonic ranger driver"); +MODULE_LICENSE("GPL"); From patchwork Fri Mar 1 13:43:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Klinger X-Patchwork-Id: 10835361 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E84311515 for ; Fri, 1 Mar 2019 13:44:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D47D92675C for ; Fri, 1 Mar 2019 13:44:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C751B28534; Fri, 1 Mar 2019 13:44:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A76802675C for ; Fri, 1 Mar 2019 13:44:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388108AbfCANoA (ORCPT ); Fri, 1 Mar 2019 08:44:00 -0500 Received: from mout.kundenserver.de ([212.227.17.10]:50309 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387818AbfCANn7 (ORCPT ); Fri, 1 Mar 2019 08:43:59 -0500 Received: from localhost ([2.174.161.193]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MlNl5-1hOqZs2iOz-00lljb; Fri, 01 Mar 2019 14:43:25 +0100 Date: Fri, 1 Mar 2019 14:43:23 +0100 From: Andreas Klinger To: devicetree@vger.kernel.org, linux-iio@vger.kernel.org Cc: jic23@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, afaerber@suse.de, arnd@arndb.de, davem@davemloft.net, gregkh@linuxfoundation.org, johan@kernel.org, khilman@baylibre.com, knaack.h@gmx.de, lars@metafoo.de, linux-kernel@vger.kernel.org, martin.blumenstingl@googlemail.com, mchehab+samsung@kernel.org, m.othacehe@gmail.com, nicolas.ferre@microchip.com, pmeerw@pmeerw.net, robh@kernel.org, songqiang1304521@gmail.com, treding@nvidia.com, techsupport@maxbotix.com Subject: [PATCH v2 4/4] MAINTAINERS: add maintainer for maxbotix ultrasonic driver Message-ID: <20190301134322.p5pouwmiw6lp5unh@arbad> MIME-Version: 1.0 Content-Disposition: inline User-Agent: NeoMutt/20170113 (1.7.2) X-Provags-ID: V03:K1:u7c8+X6C5BbZ1f+dPgIkhqzrldouxoiWZ7FcG2+F/3PtDLCXZY7 o8KZxpHG9pxEpL6tMRUdKN8T4ACc4Dg07EGPBmUj5m5cBpNqqbxYaDbGUzL+/hvLi+tL1Ua /+6HCpNq60dmgfdvDL0EXnr2R5LHx1k2wtxA4AzbAc/bqUlc0i/u2EdrsbihvbZAo0KXF1Z XphHhrMZi3OT7g48mb3Lg== X-UI-Out-Filterresults: notjunk:1;V03:K0:zOHRZKVGvZY=:AUYG9SpOrB2yxBLLi6gBRT GjfAt8syEbVQUmH4th2ybx7Lm98sTj8qEgkS9E054JCF+PwxKeWZOQgEXp1sJb4q9p5bURg0V MJvwkdZGGRqaMAXvvoA+85pBt7URLjLUpEIUbE//eMdDOvxL8S0ZW2j/NOPIIGneCBDWtJgP2 0emDDdEBSnq6cS/xbkOT9Yz9rDu6TULlZS4svlRSZwKvjexZ0+sNqoV5QRgF8bvSJJuyS/Xyi wqsEqf/XIqjV2s3mfBF3QwV/ZtdFVHVAdqTqEDlTsyW3FPGz8qlDdMxbA2gvtNKSIVdFixqBP nR+vpwFo4bOsF2zAyFlakIPGgHDfnNdTzRHywExQoicLqSJMqOPZaFDtG+5uED+KRtzmo8q0o QtypD4bNDDcuh38QJesBX0lZd4TwlCthTKQ44dxDSPEmcag8N0k0e1KFukugDtvFbsF6Qo2C7 uNSZT3c3d7eb9BHhb2rtYvHqu9sRqzr9XAhJ3AvIfzhKLFttT/Qpk5eIdSUMrKY4shP125ckG Op+WZL/6AUwtlgjT+qxh6bCNnagjT9UIYN9ipLmHCiDLKHdUOC1ILSchUXYImor4vFsv2fU5L Tp+t9glBqA+FLAHBlLI4wK9UoMdFZBiItj32rxWLSzk7fZbYo5yjbkbzAapTFZ1GsaYqKPugU GsATKKluFljbV8Jw6cSNM5GJ7moF5aLw2QXLPuaTBZZdNG718nzuVjqt9AK5tSmDJurE1eqqT Jn1X7mjw89zUub4wt5fpmilCQrCPOPLazZcbEA== Sender: linux-iio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP add a maintainer for the newly created ultrasonic driver family of maxbotix Signed-off-by: Andreas Klinger --- MAINTAINERS | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 9919840d54cd..0807d9239e1a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -9226,6 +9226,13 @@ S: Maintained F: Documentation/devicetree/bindings/sound/max9860.txt F: sound/soc/codecs/max9860.* +MAXBOTIX ULTRASONIC RANGER IIO DRIVER +M: Andreas Klinger +L: linux-iio@vger.kernel.org +S: Maintained +F: Documentation/devicetree/bindings/iio/proximity/maxbotix,i2cxl.txt +F: drivers/iio/proximity/mb12x2.c + MAXIM MAX77802 PMIC REGULATOR DEVICE DRIVER M: Javier Martinez Canillas L: linux-kernel@vger.kernel.org