From nobody Thu Sep 24 21:19:46 2026 Received: from sonic.asd.mail.yahoo.com (sonic-asso1-0020.asd.mail.yahoo.com [34.2.90.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4E11437AA7A for ; Sat, 19 Sep 2026 22:39:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=34.2.90.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789857582; cv=none; b=ML9/3xmwnzRNUc9tl2e1ncqRX1xjcGn9uNHkJlFwfolF2oXzbocgrgFLHuKjVyug227CAHs9EKZQKiXlwEv2YiuwS/1EmctWUsT/RyYVEORIIwoRS65paGrzLMQm32NO/tTtfnBfDp9mBpnju09C+cO9b7lDRW3oQjKbGL6CsoY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789857582; c=relaxed/simple; bh=qGH8s7vQndK0AGNW2k3uw+dBVN1cygpRclDTZPjn9tA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qJ8oNIFYtpJ8jpZ8sThhxomPBchewMhUrbxlwC72AxniCu2qBB5uWamJ8xBFkbkGhuH9a7WyAASMYQV+7yDQ9zxIMEAh2CkGFNy01dFTOq2RG1UApK8kmRiURpU8S6XnDGMHXxur8R6BmQsE5iuW2pZ01FCPjRuQSp3iKxSg7D4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=yahoo.com; spf=pass smtp.mailfrom=yahoo.com; dkim=pass (2048-bit key) header.d=yahoo.com header.i=@yahoo.com header.b=LW3HSI9u; arc=none smtp.client-ip=34.2.90.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=yahoo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=yahoo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=yahoo.com header.i=@yahoo.com header.b="LW3HSI9u" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1789857576; bh=JDpR/tXJX8bD3GWbP1hKo+vJNWcXpvpwsK/JlR2YpWo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=LW3HSI9uhRSuGhynHM8Cpovn1ZKaWWm2yYxvsKB3nNiIn2mxl5H2suPWa66bG+AL2aebvu4Ql1BosecUAfq2AvY3exW+5rPUrFfL957fAZxi3aRk7jccqBSoEMmQzav5KP/QmlmD/uqtiUioVc6/WiESTCLm0pgsG9Tsvmpc/SwThZG3j7ry+JwlvZMcRXV6YWJeBlNLEIPhBDU4crpVp5v/5J7+JeTll6r8AhGrWNLi6SraWrY9bcckpFJtz6wWwxYY49eNdGIjygC7ppvVgUkWLbsX2neeH00vdm/Drv4jxPMtq+NV4GslxIGjYrHn55Y2woofJ5PNd9IOJ0Aezg== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1789857576; bh=FmyCH1DFYid96B7JaZoS9AP+YGe8c+Rf/sZvqKLGQDw=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=M7yef1BFrW8gOW15/I5iZaep6/Gh2r8ObrbrzMbJDMOYBvD1ESwMeWpB3pkukVP0aNQu786oYzFSn9OFgov6WdM+0YfwM1/SKK6AtHcJ4wp9YLtjg86s0XNeI6FhMndVX9/3P1ZTKcq0pkta7c/X8QDeW3WBTY3BuuXn3kqDr05OwxYzi1QfsoYwhwY9nCDVDaVEim1umSLfLnK+b05ofSK8mz83lIot9+XVlvce2IYYelmEpvtsOs8qmulysqoG0RgBSp4/fwa6fEasutO1oaYww0jLf3t52yag+U6uQhGLK11Mb6401iLy1ujDN+X7yyG0EnmtvoaNZ83QL8DXOg== X-YMail-OSG: GzvGF9AVM1ls1fR1IcJdeoyyoyQ5aCvRL_uWsWiBqB1O8RLm7nFrAWD78_ilTzb V.zyCSpFhQe8byW9RCMRi_5zNJzmOLjWeA0xYGdhS4u_Ggw.U4QNiWZPwsSHt0jiZhPdXGbK1rWQ qGVSJSg5_lXMTFp_8MnRyjWrSiUg9Jyyfe4mUbuTRGaQagxHxaXvErSw4QXiZSTL599wy0kj.lfs AIDChUY48VPQAntNKCYiXBQXh_wZk5mAUGWnyhfOcKvu4EIJ9sf_2A5GPXIiqR4RCblRamCNEjBZ wQsw6jkSaCh57vREuExg7HKtDA40Z9lrZnAlu..MWF4xZDBhK37SlHFwEB4Q0D359r4v8W0Fahfo QVHnXJnW9tFbVGWaFkLJwd22zo_Trn3UQIgpvcik_2P3Eholk70r04zrE7eFtbMCrbrNIrkA2y9X W0Thm.q30lOxaro3ogP64J1zW_zOb9VI0xA9wMRsUPwW5oNSrvNZLkjtOHxb68Mru_2Q_J._uONY RyoP7c1eep_PRPasDI8UooBBCBGf9PfnT1NhaLjFAUFrFxWB5R82eO_qBQplLuG7p6oE32cKOxhX MmSKYDvMSpgZtsgUG3sHSFm1ziLEIIfJiekrhYac1uyDtghHoNjxOvv24Guql136G2ey4QuRYeTE s7biQ4AJrvGc88AsiSXASUtJE1TE76xNZxWz2J5Dffoc_mgm4BGKz5irQCAjjyxNljaUHDAFe5hG gKUWzW1J5eyCQ_V7SZav9vYB1mC5l5zGNUdDx2V4Ad_bK23lYgMLqhR1ISVcZBNLowyYg9jkCcGw ex5f.KTcOGpkXkRBzH8a0ry8UTXW_A5H.uB5o2Tlm7GgAASdZey16jVvemz6gLc3DjJxH8Xk_i4Q Am0DUtIrkF4xjg7Oc4HjkIK5n9QGeQFODfNCtJV4AmsznuaOTFxsLZUZ6kxxjnfSTav03s_TWDmN J_eCv6v6LFrgJP26AEvRxNEsGzO0vPciz2B4._Z930BPFjkkfkIIqMCkiLKj.OJRpkN5NXWLxrwh NdTtQqLgdXT7W.lHnHqA4DLtbOyWNFnSocFobE7H8hJXz9MaHSnw4319mBEKBX.hxTVhjcbuquC6 _IJT.duStVsX_hg.2.DhBTPnxq9dllI_exd9vunjrmMeW4_2hoHr9z3lgV8q5pmBAp_fVmIcCFui Z.EXkzTug7OuUZMtZXTrxqFuFZTOqw570tsIh5e9pywDz0u_DpF..WTLXzVSFQhdoD819mplkEkM BcpyrKXOww9.mE5_Ov8aPzLZOsSbggikGNi2mVxuzuZNGN72jbsqG6gOKLruXqpOojouK3FIqS6x 4OZ1qgnCnlyPaf32F7ZI2HwzdNa8xJCByoPltWfet0rG.P5YI4rAhUonQAVd7zh1F0yrE9Hnax_b BZs29oncEOVaUfebYbByK5OecbbnJ9DYW1cOyGXIsBxCsOYSgMNNNhca3CwQffFMNG9mw3GCIQv. 4d4WEJItHCRM4Ka_KRMHlw2NWDGV8GxQ_Qe50Cns.H9ht8hwh2N6lgmH4IHVZpL4j8v4zm0ZZVEU Dwgs1zvVBMaVE3eOjtYoO8dsAi4tiBfInoqCqnny6yRQq2DjB4BoAcYSmV4rWTGWoHVELqGMBWeq hvZUZEPCu_zN3_JaHcZMcsZmgMBd5Ga.ixGZ5Q06uxH3.pc6tYTlgAT2uSGq.c34NzombkWpgYm_ D8CTDMybdL8uwEZ4Sc.QptZ2hOXFog_op3kq9qwQ9CY0MpKGydCmBg_bdGMEmtrslqwftyb_Tous SDReLjq.e8SGCe3FWpHIQEEp4xZVGSg8fWFSNgv2dFcX7A1pyEWbl1a47aSwjPfPIB5S0EzbIvQG xjAp1ApIEkckXYcZdosRh4KciaO9jZMsW33qCGGkdtkm.qioKcIGeCVn1_PtinpIVx25j9S9Tdml 9oXdD82srB7_ktQhOXlG_db0RGz5SHXxCi9aJrOv0fE4vlX4_LHsRVhozRt.x1xFVBVxfN1eWmB4 0f9FPpkCxERjcz_YGsA6BhWToPDdPmuy4MB.fF0RaynKrebIbvNmfx8f7BAzB_QVWXqM- X-Sonic-MF: X-Sonic-ID: 68621158-39c4-46f9-a241-31f20c65e6dd Received: from sonic.gate.mail.ne1.yahoo.com by mail-asdoutdeli-p-cin-asso1-prod-sonicconsumer-svc-102 with HTTP; Sat, 19 Sep 2026 22:39:36 +0000 Received: from dip84.lsn.bf1.yahoo.com ([67.195.177.93]) by hello (SMTP) with SMTP ID be03fa672c94bb6c952363286c379f38; Sat, 19 Sep 2026 22:39:33 +0000 (UTC) From: Muhammad Abu Bakar To: Jonathan Cameron , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Muhammad Abu Bakar Subject: [PATCH 1/2] dt-bindings: iio: pressure: add Sensirion SDP31 Date: Sun, 20 Sep 2026 03:38:53 +0500 Message-ID: <20260919223854.13437-2-m.abubakar365@yahoo.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260919223854.13437-1-m.abubakar365@yahoo.com> References: <20260919223854.13437-1-m.abubakar365@yahoo.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add device tree bindings for the Sensirion SDP31 differential pressure sensor, an I2C device that also reports temperature. Signed-off-by: Muhammad Abu Bakar --- .../iio/pressure/sensirion,sdp31.yaml | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Documentation/devicetree/bindings/iio/pressure/sensirio= n,sdp31.yaml diff --git a/Documentation/devicetree/bindings/iio/pressure/sensirion,sdp31= .yaml b/Documentation/devicetree/bindings/iio/pressure/sensirion,sdp31.yaml new file mode 100644 index 000000000..fc646eca2 --- /dev/null +++ b/Documentation/devicetree/bindings/iio/pressure/sensirion,sdp31.yaml @@ -0,0 +1,40 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/iio/pressure/sensirion,sdp31.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Sensirion SDP31 differential pressure sensor + +maintainers: + - Muhammad Abu Bakar + +description: | + Differential pressure sensor from Sensirion with an I2C interface. + +properties: + compatible: + const: sensirion,sdp31 + + reg: + maxItems: 1 + + vdd-supply: true + +required: + - compatible + - reg + +additionalProperties: false + +examples: + - | + i2c { + #address-cells =3D <1>; + #size-cells =3D <0>; + pressure@21 { + compatible =3D "sensirion,sdp31"; + reg =3D <0x21>; + vdd-supply =3D <&vdd_3v3>; + }; + }; --=20 2.43.0 From nobody Thu Sep 24 21:19:46 2026 Received: from sonic.asd.mail.yahoo.com (sonic-asso1-0020.asd.mail.yahoo.com [34.2.90.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 85A4D376A0C for ; Sat, 19 Sep 2026 22:39:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=34.2.90.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789857589; cv=none; b=cx9Y8Rb1HIcc2O7ARxRTN26kcwHoN7+rKTfsR8c7sxLK4M6bXV7ST3JerxgTq9AmT8QGRfuOfO+LyDw+FZ3uM33Xf8YgBqb0InkHhd+kfqCx7FLTw4WZZhh5CZQlAyh0lUX4BmLFsyHWLk4sVMy3ygZtQFdNE+TG3m5YkWp8r70= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789857589; c=relaxed/simple; bh=qV6SZZAYcSSwnLjK7WRAo3125KdzZGMLhBMogO24/6Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Nss3cO1LuMEmUBH4q52cKw4D4hvXfqP0WRkDnn3wCjHFr5LQUETRNi0J6mRuRl60kSi7aO/S4K8lxy+PclsltrvsJdqie07+ZeAMgNblyZqwAIlxyn2Yl4GTGfXNI/QymPjbJHRsObEznNg5ttKf4+w329pvSFJgmCSXpAMnoCM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=yahoo.com; spf=pass smtp.mailfrom=yahoo.com; dkim=pass (2048-bit key) header.d=yahoo.com header.i=@yahoo.com header.b=WY2KMsTH; arc=none smtp.client-ip=34.2.90.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=yahoo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=yahoo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=yahoo.com header.i=@yahoo.com header.b="WY2KMsTH" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1789857581; bh=nLm0XLvGk2KYoYg8zfQcXjQv37hTT9S6GCixe0w6YEM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=WY2KMsTHRB+SL2ZPWI7LqBQ9+3snmpzPfpj/YKrsZke4OyyVu3Y8m16xlkRK1yfWqtZMwapg4yFPUqPjOyX5vmjg6Aw1NBmCxMOB5fJpmTdqHk0pkK+HU43eM3IeoMQje2//Pd8OiEah/2b8jXB/iXaZ0hHUSp4/41mvLUt1nZm3c50zcpRozXAcqq+5KvrbHuriVOUkitHFuceMWfvSjsLHNl5sG50m8tNwTxAqxwC5AQRTjgN12ZAbS3evFzZAn1dfDpYyVeMHo+WfF64G4dSpngHtheswmmJT17Kz4qietUec9AdySCzsA+GipsrG/E62TJF0hFWS39/aChjohA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1789857581; bh=NwM1/Hz6AEi8bOySVKKcMWzuNxfLdCAp1k/jm7SpGTq=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=iT8R06bc4+FZcRrgP0HFTgtlP61174/Us4YBQS6NRoRyM3k3GoAOyY395+pF3tWHlfA1LVXwU9YgAaKB9R51HRiORF3glKD/9DEhAW3cR0HZOSyyjGJArs+PRa9UDAzRJ+JsVxvVH1AekGhC8l/2KKU/wffH263ehYpocXYGpEeUr52dlYQqp7hL33KWOplcFi9R84qHN/G7tAoi0rXwaDbVucla0vjJjk0zhGoZZnfbNmLc0t/XWpXj7GAgGKEi1tnimIDS4KqwvFpC+bFBOosTtMqkfaEWq3a4jAkZS0kPa3FU62t6roSSzGrZymPo5jcs7K3LZDJv6XtciRnbfA== X-YMail-OSG: zFYr12gVM1lsAkWBJrsXIt_IwGiSf6k8F1IuoTvxZqhV_tyhgVWI.emqhbNFY7V 7SusLji54zIiYWsczlyZBO00Frg2sTZbVb6r405lvqnOtd4sv6Vez.VOp61PE9OjTqVbTGPC_5Ij 6LNdMlDyPPehHdC7Xrk4lksrIyGds5BGwHQ6Pk5GX7zRqb.JHLJQzt.DGz.9q8Klx5vD4x4MWGQe pHPBq3htYARIP3aP1PN.dld83aaTX49..K0wcGcsqdXIgZA3_cKiOdqoTV.VYVm9yYJYel75mesN Ev3vpyaHeK0GfJ4O_SU9SSHv355fWSlYtim5_3ADs5ZMi_MrFPSRruf2wUedbWsTqSSDloGDCgPW 5i1tjJe_FGDJCTBTuWPOSq6a4pT4b3rwVW39OZCWg.sHFHSjJeOYn750IdVDkvApJfTOXGtWpt.C uS1IU1Rv9ZfmnJ7.LbwvsKjKeUXb5bCY3gZFNqmKhJMhz4twtVXdhShfjeDVYAbFuRKojXt6Yv2Q PCHaRe0yzxGyFURg576l1fcZ7DPAWHsmnL_G2RenvlSrAsA3w1QefTvxGgLret5iM7Y.lJ7loEpf yaQTbl9EKk.MjV_4YKzR2NF925kiHNsFSlhZxJmaAG0L5hU3OlsvFnUl21s5_VwnUbBlBlzFAKL. JOmLvlrG1D13nXVQKIiGVpAqPNJxTpasVrz3XDA_OW3maTDYcLrPzmj4uzsKCfwM67ayN4X2BhBF xIqffY5taXPBJMLAPvb4fTYJRTrLZmjvBG.su4M91hm332gbI9uOYYVGio.0GvYL2veB6vEFf0Af iLJ.YJojWEsiyOAWXnP0ksHN3tbO_oMmC.Qs0JjdkcKpdonQPvKIMKzX84f76PaYUH1wtSsthTwK AFLo20ml65sij03dwjWHyehOPFo7aa4BHvXxKu4RtauSPfVFBk8lTK7JUUfn5gzar619YmxviyC7 OPSLlDrOKynhZ4J5NujS23L4O6KSq9BMh7ZgKNvJ0P9dmvOgk33ALezQDNqdr.Xey9YqSyBtZ6un RWyRMHPLBfv4pBmngnjU.ocYJxWW.BqLB6.xQ5wThdILppJQHixpgEumGH3XC3gzxKE1rEav2PCE WSMHVR6XJ2_OBsdYKsMsL11NUJGFVE1HuyIx1bN6XYNc0aWUMhFaeuoHwxqppcbKgO.2FMBsPQpK iGLYQ8sRCJ4xQC_5Nxh3A5s4kJSG7rBD2IotqRPeadfUDMBWjmGYJ_4Ze7y.dDA.Y5J4YkNaaw2u CDOHykjo8Qi3ynid3y3z58HDnv4bbxGlCKFWJqCf2h2D9BXxmGqNzybhNFGvcIyxObUGn25zmr1o poVssdx4FzlFvGwlOEu89ghV_fQATazfw7uLoHLNg9M9cMry0X_Qdf04Ljrn1hKpAYWzta6ygPJJ aGOeH6..I2eVknK8wmlKuefFnYTafMH0SO2KqlzlcueFKQtW5V6eqqGOOK8FS79ZMGmXTP1_0xm7 PLQn2w.sTVpAJ9rxIkAO8xR4etQ.dfCdL7mRcHyzatR6GGTyvdZiEiVG7Y0REMKCi6jCdmafr3gj Rhob5Q.6L017UDS2GlADIo9yPtb4..kU.U.6V37zHDwavcFhlI8FSB8jszWb9qt_xdN9YdzP.Quw 2XcgZLLRYSAJm_nQFuo_UDxFGtWhrT1qa_AJ3t6U7wGWERp2WuaAaUYbndfzTngGgQTOWAPvC8Pq a0OAdzs_SV7_N_2jaDmlNuDuDQ6oWVIzbdAgUYlcH2oJ7um5Taz2LClJLzjGibCfLoH8wk7GvA9i mdGWlAc6iYXHS1.X.6yXZ95FVunSpolhyz1UoAkxLp8VPDvhvbyDDROZa.1iw_E0Yq3MoQtxPsaU PiF2qcVIMgrZYcKYxOps7ld2AshO0KX5Bh5blf7Nisjuv03Dc94lkijP3twujN0W1LRy4W0rzsa5 5AmRRhVPyzb5bfw4ceXF7BpzX.GLqxMAcaIa1Bj2SrWOO60DXWLhKIpyRbv16v.0IqWA3skJC6m0 k.chbjNUhiSCPpraUD75Vlx9xgFKJEWsK4DR1oOqHCXbgYuG1CNUpiNZmXjqMIECRvV4fUQ-- X-Sonic-MF: X-Sonic-ID: 3f4b6918-847b-4314-8d28-bbf2319b44e3 Received: from sonic.gate.mail.ne1.yahoo.com by mail-asdoutdeli-p-cin-asso1-prod-sonicconsumer-svc-102 with HTTP; Sat, 19 Sep 2026 22:39:41 +0000 Received: from dip84.lsn.bf1.yahoo.com ([67.195.177.93]) by hello (SMTP) with SMTP ID be03fa672c94bb6c952363286c379f38; Sat, 19 Sep 2026 22:39:39 +0000 (UTC) From: Muhammad Abu Bakar To: Jonathan Cameron , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, linux-iio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Muhammad Abu Bakar Subject: [PATCH 2/2] iio: pressure: add Sensirion SDP31 driver Date: Sun, 20 Sep 2026 03:38:54 +0500 Message-ID: <20260919223854.13437-3-m.abubakar365@yahoo.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260919223854.13437-1-m.abubakar365@yahoo.com> References: <20260919223854.13437-1-m.abubakar365@yahoo.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add an IIO driver for the Sensirion SDP31 differential pressure sensor. The device is accessed over I2C and reports differential pressure and temperature. Each measurement is validated using the sensor's CRC-8 checksum. Tested on an SDP31 connected to a Raspberry Pi 4 I2C bus. Signed-off-by: Muhammad Abu Bakar --- MAINTAINERS | 6 ++ drivers/iio/pressure/Kconfig | 11 ++ drivers/iio/pressure/Makefile | 1 + drivers/iio/pressure/sdp31.c | 194 ++++++++++++++++++++++++++++++++++ 4 files changed, 212 insertions(+) create mode 100644 drivers/iio/pressure/sdp31.c diff --git a/MAINTAINERS b/MAINTAINERS index 214aeee76..a053a530e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -24855,6 +24855,12 @@ S: Maintained F: Documentation/devicetree/bindings/iio/chemical/sensirion,scd4x.yaml F: drivers/iio/chemical/scd4x.c =20 +SENSIRION SDP31 DIFFERENTIAL PRESSURE SENSOR DRIVER +M: Muhammad Abu Bakar +S: Maintained +F: Documentation/devicetree/bindings/iio/pressure/sensirion,sdp31.yaml +F: drivers/iio/pressure/sdp31.c + SENSIRION SDP500 DIFFERENTIAL PRESSURE SENSOR DRIVER M: Petar Stoykov S: Maintained diff --git a/drivers/iio/pressure/Kconfig b/drivers/iio/pressure/Kconfig index 838a8340c..58172639c 100644 --- a/drivers/iio/pressure/Kconfig +++ b/drivers/iio/pressure/Kconfig @@ -286,6 +286,17 @@ config MS5637 This driver can also be built as a module. If so, the module will be called ms5637. =20 +config SDP31 + tristate "Sensirion SDP31 differential pressure sensor I2C driver" + depends on I2C + select CRC8 + help + Say Y here to build support for Sensirion SDP31 differential pressure + sensor I2C driver. + + To compile this driver as a module, choose M here: the core module + will be called sdp31. + config SDP500 tristate "Sensirion SDP500 differential pressure sensor I2C driver" depends on I2C diff --git a/drivers/iio/pressure/Makefile b/drivers/iio/pressure/Makefile index bc0d11a20..5279a0ebd 100644 --- a/drivers/iio/pressure/Makefile +++ b/drivers/iio/pressure/Makefile @@ -35,6 +35,7 @@ obj-$(CONFIG_MS5611) +=3D ms5611_core.o obj-$(CONFIG_MS5611_I2C) +=3D ms5611_i2c.o obj-$(CONFIG_MS5611_SPI) +=3D ms5611_spi.o obj-$(CONFIG_MS5637) +=3D ms5637.o +obj-$(CONFIG_SDP31) +=3D sdp31.o obj-$(CONFIG_SDP500) +=3D sdp500.o obj-$(CONFIG_IIO_ST_PRESS) +=3D st_pressure.o st_pressure-y :=3D st_pressure_core.o diff --git a/drivers/iio/pressure/sdp31.c b/drivers/iio/pressure/sdp31.c new file mode 100644 index 000000000..934a3afcd --- /dev/null +++ b/drivers/iio/pressure/sdp31.c @@ -0,0 +1,194 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +#include +#include +#include +#include +#include +#include + +#define SDP31_CMD_TRIG_DP 0x362F +#define SDP31_MEAS_DELAY_MS 50 +#define SDP31_TEMP_SCALE 5 +#define SDP31_CRC8_POLY 0x31 +#define SDP31_CRC8_INIT 0xff + +DECLARE_CRC8_TABLE(sdp31_crc8_table); + +struct sdp31_data { + struct i2c_client *client; + struct mutex lock; /* serializes multi-step measurements */ + u16 dp_scale; /* diff-pressure scale factor read from the sensor = */ +}; + +struct sdp31_reading { + s16 pressure; + s16 temp; + u16 scale; +}; + +static int sdp31_send_cmd(struct i2c_client *client, u16 cmd) +{ + u8 buf[2] =3D { cmd >> 8, cmd & 0xff }; + int ret =3D i2c_master_send(client, buf, sizeof(buf)); + + if (ret < 0) + return ret; + return (ret =3D=3D sizeof(buf)) ? 0 : -EIO; +} + +static int sdp31_check_crc(const u8 *word) +{ + if (crc8(sdp31_crc8_table, word, 2, SDP31_CRC8_INIT) !=3D word[2]) + return -EIO; + return 0; +} + +static int sdp31_measure(struct i2c_client *client, struct sdp31_reading *= out) +{ + u8 rx[9]; + int ret; + + ret =3D sdp31_send_cmd(client, SDP31_CMD_TRIG_DP); + if (ret) + return ret; + + msleep(SDP31_MEAS_DELAY_MS); + + ret =3D i2c_master_recv(client, rx, sizeof(rx)); + if (ret < 0) + return ret; + if (ret !=3D sizeof(rx)) + return -EIO; + + if (sdp31_check_crc(&rx[0]) || + sdp31_check_crc(&rx[3]) || + sdp31_check_crc(&rx[6])) + return -EIO; + + out->pressure =3D (s16)((rx[0] << 8) | rx[1]); + out->temp =3D (s16)((rx[3] << 8) | rx[4]); + out->scale =3D (rx[6] << 8) | rx[7]; + return 0; +} + +static int sdp31_read_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, + int *val, int *val2, long mask) +{ + struct sdp31_data *data =3D iio_priv(indio_dev); + struct sdp31_reading r; + int ret; + + switch (mask) { + case IIO_CHAN_INFO_RAW: + mutex_lock(&data->lock); + ret =3D sdp31_measure(data->client, &r); + mutex_unlock(&data->lock); + if (ret) + return ret; + switch (chan->type) { + case IIO_PRESSURE: + *val =3D r.pressure; + return IIO_VAL_INT; + case IIO_TEMP: + *val =3D r.temp; + return IIO_VAL_INT; + default: + return -EINVAL; + } + case IIO_CHAN_INFO_SCALE: + switch (chan->type) { + case IIO_PRESSURE: + /* raw / dp_scale =3D Pa; /1000 =3D> kPa (IIO unit) */ + *val =3D 1; + *val2 =3D data->dp_scale * 1000; + return IIO_VAL_FRACTIONAL; + case IIO_TEMP: + *val =3D SDP31_TEMP_SCALE; + return IIO_VAL_INT; + default: + return -EINVAL; + } + default: + return -EINVAL; + } +} + +static const struct iio_info sdp31_info =3D { + .read_raw =3D sdp31_read_raw, +}; + +static const struct iio_chan_spec sdp31_channels[] =3D { + { + .type =3D IIO_PRESSURE, + .info_mask_separate =3D BIT(IIO_CHAN_INFO_RAW) | + BIT(IIO_CHAN_INFO_SCALE), + }, + { + .type =3D IIO_TEMP, + .info_mask_separate =3D BIT(IIO_CHAN_INFO_RAW) | + BIT(IIO_CHAN_INFO_SCALE), + }, +}; + +static int sdp31_probe(struct i2c_client *client) +{ + struct iio_dev *indio_dev; + struct sdp31_data *data; + struct sdp31_reading r; + int ret; + + indio_dev =3D devm_iio_device_alloc(&client->dev, sizeof(*data)); + if (!indio_dev) + return -ENOMEM; + + data =3D iio_priv(indio_dev); + data->client =3D client; + mutex_init(&data->lock); + + crc8_populate_msb(sdp31_crc8_table, SDP31_CRC8_POLY); + + /* Confirm the sensor is present and learn its scale factor. */ + ret =3D sdp31_measure(client, &r); + if (ret) + return dev_err_probe(&client->dev, ret, + "failed to read from sensor\n"); + if (!r.scale) + return dev_err_probe(&client->dev, -EINVAL, + "invalid scale factor\n"); + data->dp_scale =3D r.scale; + + indio_dev->name =3D "sdp31"; + indio_dev->info =3D &sdp31_info; + indio_dev->modes =3D INDIO_DIRECT_MODE; + indio_dev->channels =3D sdp31_channels; + indio_dev->num_channels =3D ARRAY_SIZE(sdp31_channels); + + return devm_iio_device_register(&client->dev, indio_dev); +} + +static const struct i2c_device_id sdp31_id[] =3D { + { "sdp31" }, + { } +}; +MODULE_DEVICE_TABLE(i2c, sdp31_id); + +static const struct of_device_id sdp31_of_match[] =3D { + { .compatible =3D "sensirion,sdp31" }, + { } +}; +MODULE_DEVICE_TABLE(of, sdp31_of_match); + +static struct i2c_driver sdp31_driver =3D { + .driver =3D { + .name =3D "sdp31", + .of_match_table =3D sdp31_of_match, + }, + .probe =3D sdp31_probe, + .id_table =3D sdp31_id, +}; +module_i2c_driver(sdp31_driver); + +MODULE_AUTHOR("Muhammad Abu Bakar"); +MODULE_DESCRIPTION("Sensirion SDP31 differential pressure sensor"); +MODULE_LICENSE("GPL"); --=20 2.43.0