From patchwork Sun Feb 24 16:22:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Klinger X-Patchwork-Id: 10828019 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 1BB3B13B5 for ; Sun, 24 Feb 2019 16:22:50 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0720A2B08F for ; Sun, 24 Feb 2019 16:22:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id ED4A32B094; Sun, 24 Feb 2019 16:22:49 +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 9748B2B08F for ; Sun, 24 Feb 2019 16:22:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728493AbfBXQWt (ORCPT ); Sun, 24 Feb 2019 11:22:49 -0500 Received: from mout.kundenserver.de ([212.227.17.13]:38697 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727752AbfBXQWs (ORCPT ); Sun, 24 Feb 2019 11:22:48 -0500 Received: from localhost ([2.174.161.193]) by mrelayeu.kundenserver.de (mreue109 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MXY2T-1gWA0X45hX-00Yzih; Sun, 24 Feb 2019 17:22:15 +0100 Date: Sun, 24 Feb 2019 17:22:10 +0100 From: Andreas Klinger To: afaerber@suse.de, arnd@arndb.de, davem@davemloft.net, devicetree@vger.kernel.org, gregkh@linuxfoundation.org, jic23@kernel.org, johan@kernel.org, khilman@baylibre.com, knaack.h@gmx.de, lars@metafoo.de, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, mark.rutland@arm.com, martin.blumenstingl@googlemail.com, mchehab+samsung@kernel.org, m.othacehe@gmail.com, nicolas.ferre@microchip.com, pmeerw@pmeerw.net, robh+dt@kernel.org, robh@kernel.org, songqiang1304521@gmail.com, treding@nvidia.com Subject: [PATCH 1/4] maxbotix,mb12x2.txt: add dt doc for maxbotix,mb12x2 Message-ID: <20190224162208.esbrzartgfqxptsw@arbad> MIME-Version: 1.0 Content-Disposition: inline User-Agent: NeoMutt/20170113 (1.7.2) X-Provags-ID: V03:K1:EnD4YfYGacd6T82DnaP4hM+o357CVZ4+RYzT8F3PLLFg2RWGONy 8sBVeLWZIoRUqTlFHsq+AtFAxyBVHOzp+PhzaQCvGMLrXhDGecztLVcWtknWQpNi5BE38QC LamcnbMi8tEucJP5GbT5miUrFvk8Y/2eU6YlwwYzl1tRjptgNpQRZOv4KP6ftCIhOoIAVAH fdkfTBpZuNJLjezPSLtlA== X-UI-Out-Filterresults: notjunk:1;V03:K0:HHCYuhzPp/s=:SToP2DErdkd/YZEmxVd6z/ Q3/He8W0CsBlsIM4poCIiBNAWDYdP+h5BEqKvIlkoyp+RwA9s4j/Uf/7fOYpuH5igIFCD2nEF 9+24NahcU+ge5qep3jolZ/p4jymZgAn6k5zt5uTATMCp72pTFHeD8B+tiqJRg+vrzDqMN9I23 GDVMdOXVCdTaoKA+lnzM7H4YI+amSCT/CeEUCUI1AcB+/qQRS6OwWJLbHWDyzdxuBjLxREhl9 HlP2aopbyTw0/AoGPaTwnatWb81fxnAFiJbKgnkrdet2Z0gl406aFhdgWlkQl1/fb9F2GsuWw OWL/cpbaGBz1iyT7cBEZDzvFwk1vV6XESm6jjQxx2QWCuylV4tx0pXYs6F+VnWLuRYheB9lkp u2mGd7vA7ilbv5EBcFsluTs6LRrew3HbInwyA7ADR7i/kC0/cO70ixH0x2MPAanuWgKEtJw3N MUXhttZ33pr4FnyZTJ1g6yEvD5yIBUWoUAsa7E/sRGOvIOk3DNtqIIpumCUaj3twB9oiVkY1c OZSif9cpb15MWyRxpEOHUQFEZvEWeaQ4gWiU3LChhpl7vXv58NBVBv/QorFxg/EMXSajhmRBz GxbBId7cnGmK9JcEB3NgnGb7BYT2zrEAl2WhxGJJvPsTA/PlxdoCNsUHWcAehOgyB+qh+44tN /hKgCV/iPQPRZXwB/WvpPS/Rho1J3rHxEfvqMWn6doZinp3Am7C0WyRHoMayqI2LuaRisjEjD 6lG5fyorYsmp3pxwiFsaYlwZYmCCZd1XKEkV9A== 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 dt doc for maxbotix,mb12x2 and also a new vendor prefix maxbotix Signed-off-by: Andreas Klinger --- .../bindings/iio/proximity/maxbotix,mb12x2.txt | 22 ++++++++++++++++++++++ .../devicetree/bindings/vendor-prefixes.txt | 1 + 2 files changed, 23 insertions(+) create mode 100644 Documentation/devicetree/bindings/iio/proximity/maxbotix,mb12x2.txt diff --git a/Documentation/devicetree/bindings/iio/proximity/maxbotix,mb12x2.txt b/Documentation/devicetree/bindings/iio/proximity/maxbotix,mb12x2.txt new file mode 100644 index 000000000000..29f7fc09cfdc --- /dev/null +++ b/Documentation/devicetree/bindings/iio/proximity/maxbotix,mb12x2.txt @@ -0,0 +1,22 @@ +* MaxSonar-I2CXL ultrasonic distance sensor of type mb12x2 using the i2c + interface for ranging + +Required properties: + - compatible: Should be "maxbotix,mb12x2" + + - reg: i2c address of the device + +Optional properties: + - status-gpios: Definition of the status gpio (input) which is 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 a certain amount of time (15 ms) until data + can be retrieved. + +Example: +mb@70 { + compatible = "maxbotix,mb12x2"; + reg = <0x70>; + status-gpios = <&gpio2 2 GPIO_ACTIVE_HIGH>; +}; 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 Sun Feb 24 16:22:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Klinger X-Patchwork-Id: 10828021 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 D75C513B5 for ; Sun, 24 Feb 2019 16:23:16 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C1C9A2B092 for ; Sun, 24 Feb 2019 16:23:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B3F0A2B08F; Sun, 24 Feb 2019 16:23:16 +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 635CA2B08F for ; Sun, 24 Feb 2019 16:23:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728285AbfBXQXP (ORCPT ); Sun, 24 Feb 2019 11:23:15 -0500 Received: from mout.kundenserver.de ([217.72.192.73]:59143 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727752AbfBXQXP (ORCPT ); Sun, 24 Feb 2019 11:23:15 -0500 Received: from localhost ([2.174.161.193]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.183]) with ESMTPSA (Nemesis) id 1N63JO-1h4Occ0TdI-016R6o; Sun, 24 Feb 2019 17:22:42 +0100 Date: Sun, 24 Feb 2019 17:22:36 +0100 From: Andreas Klinger To: afaerber@suse.de, arnd@arndb.de, davem@davemloft.net, devicetree@vger.kernel.org, gregkh@linuxfoundation.org, jic23@kernel.org, johan@kernel.org, khilman@baylibre.com, knaack.h@gmx.de, lars@metafoo.de, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, mark.rutland@arm.com, martin.blumenstingl@googlemail.com, mchehab+samsung@kernel.org, m.othacehe@gmail.com, nicolas.ferre@microchip.com, pmeerw@pmeerw.net, robh+dt@kernel.org, robh@kernel.org, songqiang1304521@gmail.com, treding@nvidia.com Subject: [PATCH 2/4] iio/proximity: add mb12x2 driver to Kconfig and Makefile Message-ID: <20190224162235.7kidyum2dwg5bua5@arbad> MIME-Version: 1.0 Content-Disposition: inline User-Agent: NeoMutt/20170113 (1.7.2) X-Provags-ID: V03:K1:E7kcApNw4Eh13VjApBByHDs1XwRPO1F7KNFpJvv+fMgVkEs/YPE Kn+aQhDJSjEe3TJEK8CfNZsMvBrJge/G9OdYm8B+YPOGU8Xg2XC+Tb6bH8xwlT0QDGQC8xv QoJrqLWjDuIqbmLQE+Q8JYOcKuHKsimb5YQhbdfed41KLDuZ6EV1xScPhNdJaCDJ3AGXK7c +Iv7NTqqOqLDPEpFruP+Q== X-UI-Out-Filterresults: notjunk:1;V03:K0:zM4P4lWYHOo=:fnNUriC1ASnbO5iN7dRAN+ kVol5z/z+GR/wV9gAfnqeHb6hRcm/dNyHhQU+wzzLG2o5uFwsoV7D4EXOIWVNxkYecLF3dag+ NLAEcBxOjAh/tt2DO4HZwwxETTdKX2zJ4ehNIqI8iSDGWZOK2D4jgGoil3B5ixGh8bixxfZwb NiyZ+/kMKqZ4Dosnd1kX0DuPfK6YZ6ehFbvZ2km62yJ7GN+Myy5nFwPIC8lwfghQz4LCaHKHM hOrKw9p9gv0gEBlY2kpUfs1V2S8HyxEoOhVtcgoMyQd0wV1y0Gy7wCTaTdLZ/nByWdJNM3K85 VNJsGZhw8Oq1E/OG6bpqi18qyNWy7O1006bOlxQq0+0WRJvluzMNlmxlRu6ffl+eisoBJZ4G5 FyVqTiFd621YCrO9zcxYN9PPaBR0Qghbl2BT4k5S+2EaMGnuTPS48SsfPJ/21jPNmLKi35Adu NSbcQAO6C/QEskK4+AU3gTBdJ5p3xNqpltMI8D3HUJpjMfdrmIa5UtuPADBFCjblzrsYkVDBp +xdeLZxvCY2uwMok4My6Y38nneGjI+cEek7JnfcEtjsbEbEfXhTJn7BBu3sJQCj4j4QnpaKt3 oXn3osmhWGqeuRbbJO/Lohq5M1iXkEfaeb6CLxu4neWggrp3ZpaWKi96kUYGFf9g/C4Y1jMeI /q/qXKQA1yfzG2WACEKSHRgSxIy24qqZttdXTVTy8THxddwnu+vm1rvx7L2PvBXYYcVI+4iGY fX578EuCxVHqhB5oKVvs7/AxfJuYJCYiGEzYpw== 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 Makefile and Kconfig: add configuration for mb12x2 ultrasonic proximity driver Signed-off-by: Andreas Klinger --- drivers/iio/proximity/Kconfig | 11 +++++++++++ drivers/iio/proximity/Makefile | 1 + 2 files changed, 12 insertions(+) diff --git a/drivers/iio/proximity/Kconfig b/drivers/iio/proximity/Kconfig index b99367a89f81..5d57ca44e30d 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 of MaxSonar + with 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..c56b72a8be87 100644 --- a/drivers/iio/proximity/Makefile +++ b/drivers/iio/proximity/Makefile @@ -6,6 +6,7 @@ # When adding new entries keep the list in alphabetical order obj-$(CONFIG_AS3935) += as3935.o obj-$(CONFIG_ISL29501) += isl29501.o +obj-$(CONFIG_MB12X2) += mb12x2.o obj-$(CONFIG_LIDAR_LITE_V2) += pulsedlight-lidar-lite-v2.o obj-$(CONFIG_RFD77402) += rfd77402.o obj-$(CONFIG_SRF04) += srf04.o From patchwork Sun Feb 24 16:23:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Klinger X-Patchwork-Id: 10828033 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 A161C15AC for ; Sun, 24 Feb 2019 16:23:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8C8E72B08F for ; Sun, 24 Feb 2019 16:23:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7E0A92B094; Sun, 24 Feb 2019 16:23:44 +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 CE4C32B08F for ; Sun, 24 Feb 2019 16:23:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728430AbfBXQXi (ORCPT ); Sun, 24 Feb 2019 11:23:38 -0500 Received: from mout.kundenserver.de ([212.227.17.13]:33061 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728410AbfBXQXi (ORCPT ); Sun, 24 Feb 2019 11:23:38 -0500 Received: from localhost ([2.174.161.193]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MplTn-1hNR4Q2Uov-00q9Hm; Sun, 24 Feb 2019 17:23:07 +0100 Date: Sun, 24 Feb 2019 17:23:04 +0100 From: Andreas Klinger To: afaerber@suse.de, arnd@arndb.de, davem@davemloft.net, devicetree@vger.kernel.org, gregkh@linuxfoundation.org, jic23@kernel.org, johan@kernel.org, khilman@baylibre.com, knaack.h@gmx.de, lars@metafoo.de, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, mark.rutland@arm.com, martin.blumenstingl@googlemail.com, mchehab+samsung@kernel.org, m.othacehe@gmail.com, nicolas.ferre@microchip.com, pmeerw@pmeerw.net, robh+dt@kernel.org, robh@kernel.org, songqiang1304521@gmail.com, treding@nvidia.com Subject: [PATCH 3/4] mb12x2.c: add mb12x2 ultrasonic distance iio sensor Message-ID: <20190224162302.hnxmnaburoo4llk7@arbad> MIME-Version: 1.0 Content-Disposition: inline User-Agent: NeoMutt/20170113 (1.7.2) X-Provags-ID: V03:K1:WYgk4a/Q8BkIXKa19Yo5JuN25K2Sq4zL29pCm8D0D0Pz6fdH7jE pozT6fQFqjxQ2H2zYiQ1TEG+KRNV2Rt52u5n/0cMM0LUfArADZMd6SGTErvvnzpTxXD/1VG 0vcpOLaWkL4KKc0ygumBkwdGexHRKxSqjpilBzc79BMgNpuvly/FB+DzT7a9ggKcM4fIXad +ZJUAJH9xWG0vfvm6fN+g== X-UI-Out-Filterresults: notjunk:1;V03:K0:LrmrWHxnC0M=:0EV8cMqtwxk/PF0IRbVZfz HWPa3fW/vj3xjghBZGv4SuPsfGRDil8aUzT0p7DWhXQktHK2Yx6it3Y/3wIQ0LyLn+NryHNpa LXmS15dAKdlEcrS8LjkSE/XGAHU5tM4bbt8O/A1lMxHx7pE8bfxdCvGMjxp7CH5KT1i7Y5jP2 QikKc266o9m/gdYD+uO4QrfQF1n5vC/XLXiucBw87lELlXe6G3y+fRK+Bctcod3FZpNt0nnvT SQrBsxAVcuU5tSjtff9GQdYyf9e5KkQhZXHf2Nm6QWreT4WaDmRirhZJ/hBMAcJQ2Oz3FEkYZ sg38CmTAc9sd4WfNo35tsykUi7oTuzqPp6v1XnsRiSz1MDv8ohCADedCqCaGSfrqAj8iifWU8 efJZoFZu0UDH56KQ75H0ZP15XIVQB7YI7f/XaYLBJTUxCYlwScSOOUymDEdEJzQuPJPa2htT/ gY+0m9WUWGExqYGJVzOQXk2NJw0r6FlzzMeOfI9GqWCtRKuk2Ia9dsdvuV+0R+J2ukISNGCcJ wFtz/RImly+jQ/tlVhJcGHb0oaxeL9VdOXdl4H4qJ0CO+naTDkG+A/IXNGgPmEclj/z1rZzXp j0vcduyshFI7apOgPvx3AAg3HQLFQLowjt/0b10xUdZjzfDjHpFjL2NYdjXTlJrz8rItj9yZl 6KHP9JjcMAG10NCGsAk2PIpi7uM0kCMTF38D0FnLu8qS14gAZVhtiibnoVwAGC3bwP/PhYTBI lJZT1JFNtX2bM9zK8bkFF9/rc/LeOuu/ftRt6g== 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 MaxSonar-I2CXL ultrasonic distance sensors of type family mb12x2 using the 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 Signed-off-by: Andreas Klinger --- drivers/iio/proximity/mb12x2.c | 283 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 283 insertions(+) create mode 100644 drivers/iio/proximity/mb12x2.c diff --git a/drivers/iio/proximity/mb12x2.c b/drivers/iio/proximity/mb12x2.c new file mode 100644 index 000000000000..0c052fde94b4 --- /dev/null +++ b/drivers/iio/proximity/mb12x2.c @@ -0,0 +1,283 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * mb12x2.c - Support for 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 int mb12x2_read_distance(struct mb12x2_data *data) +{ + struct i2c_client *client = data->client; + int ret; + int distance; + unsigned char buf[2]; + + 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, buf, sizeof(buf)); + if (ret < 0) { + dev_err(&client->dev, "i2c_master_recv: ret=%d\n", ret); + mutex_unlock(&data->lock); + return ret; + } + + distance = buf[0]<<8 | buf[1]; + + 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,mb12x2", }, + {}, +}; + +MODULE_DEVICE_TABLE(of, of_mb12x2_match); + +static const struct i2c_device_id mb12x2_id[] = { + { "maxbotix-mb12x2", }, + { } +}; +MODULE_DEVICE_TABLE(i2c, mb12x2_id); + +static struct i2c_driver mb12x2_driver = { + .driver = { + .name = "maxbotix-mb12x2", + .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-MB12X2-EZ i2c ultrasonic ranger driver"); +MODULE_LICENSE("GPL"); From patchwork Sun Feb 24 16:23:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Klinger X-Patchwork-Id: 10828037 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 439CF15AC for ; Sun, 24 Feb 2019 16:24:14 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 309DE205F6 for ; Sun, 24 Feb 2019 16:24:14 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2478828449; Sun, 24 Feb 2019 16:24:14 +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 B4209205F6 for ; Sun, 24 Feb 2019 16:24:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728373AbfBXQYN (ORCPT ); Sun, 24 Feb 2019 11:24:13 -0500 Received: from mout.kundenserver.de ([217.72.192.74]:34855 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728346AbfBXQYN (ORCPT ); Sun, 24 Feb 2019 11:24:13 -0500 Received: from localhost ([2.174.161.193]) by mrelayeu.kundenserver.de (mreue106 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MmkfQ-1hOms80nOI-00jmih; Sun, 24 Feb 2019 17:23:38 +0100 Date: Sun, 24 Feb 2019 17:23:33 +0100 From: Andreas Klinger To: afaerber@suse.de, arnd@arndb.de, davem@davemloft.net, devicetree@vger.kernel.org, gregkh@linuxfoundation.org, jic23@kernel.org, johan@kernel.org, khilman@baylibre.com, knaack.h@gmx.de, lars@metafoo.de, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, mark.rutland@arm.com, martin.blumenstingl@googlemail.com, mchehab+samsung@kernel.org, m.othacehe@gmail.com, nicolas.ferre@microchip.com, pmeerw@pmeerw.net, robh+dt@kernel.org, robh@kernel.org, songqiang1304521@gmail.com, treding@nvidia.com Subject: [PATCH 4/4] MAINTAINERS: add maintainer for maxbotix ultrasonic driver Message-ID: <20190224162332.xhh6cgenejq66fsu@arbad> MIME-Version: 1.0 Content-Disposition: inline User-Agent: NeoMutt/20170113 (1.7.2) X-Provags-ID: V03:K1:wPKCRrnP73qsfzC1FrBbUWkeyC7r/oVYKrYjbGSkOQZ6CbZWrIu nNlEPyrYNVFPXoTyLUR6M5sG1ushdzQKgPAncAlH/pB1GknFvNzB3JPKaPq6PAQ0KbTbjY3 SYqPoKjgp2KJEDCs+u7rwwItQ7caqT4gtXjRD7BBmWZv5o8C6cgAvmLjyvPOhxShiWbNLax Ri7+ZykEucs1lRtLvnVKQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:2jskLwKkjyM=:dkHi3J6e9iBjQ4d5O2EA9w SO+xo8UmrvBpa44nK0BJWzH+CMwnAtqXkQN9RmArs6QhRGZuLzmGgENnYHZYTEIO2R2l3vj+t SxlFXCaQnXnVWjY9MqX9fi+qg4b6m8fx0R9/q+YnPJvnvQkXHMxzOPtUKid7fR43+K/trfaqs xYYaMr26Lv0rfn3VjMrPfXXJRSQ6l6qyPIUNEmjegsqsbzLFDvNcqF9hwwap1TwqCxs21NnMd us35LVtLI6WhPlcpf+QROaviUbBStf9zJNElcRaYEoL8CDpEA1aRFA5hnF1vAisRbMNnccF8t n1sOnlZwVL4YHQS/WBJTEr2DcjYwUeG9lv5RnvKL3hkTQy7qFPboMm0tHbwUmxDxlQxMML0WE Fy7zDdItO0dIHclpTZgTeGZiOdqaiHrGj+pxXCgB4dR5AIVfHPz3oomHCF8mN2e/NzXwajFxS LRcIlVp5KN4Y9J0HvzcvIsKkGQmFmB+gtrgsQoTVULGVd2HGxnXYP89oEqWIYBe3TRyWrkgWe 0nvZGOJJ+3q9njTsGTvtKXXLW19IA6wwRpkGdNH6AAnhYAvVYwaxMEndTWfdhLnmLUVu3vIqw f20TSOOifLZHyhf+zQsrQ8Bray6fLbaaZJb9oV/q/NgfAH9YI9Evp1AxX6wTUMQ8qxFmUsIKd lA5leWYJhBhBu2TuBcNV/EJB5LwxJIVMw0hKMJnpncvwPXrnn2ltKIGHbr3CS0JvRR3dJQXRW fVeElhzUXFZqK5WHjg0frI+NmusRNYuKk0f23w== 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 familiy of maxbotix Signed-off-by: Andreas Klinger --- MAINTAINERS | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 9919840d54cd..bbf1860d4227 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,mb12x2.txt +F: drivers/iio/proximity/mb12x2.c + MAXIM MAX77802 PMIC REGULATOR DEVICE DRIVER M: Javier Martinez Canillas L: linux-kernel@vger.kernel.org