From patchwork Sun May 29 06:18:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: LI Qingwu X-Patchwork-Id: 12864126 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A85F9C433FE for ; Sun, 29 May 2022 06:19:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229489AbiE2GTK (ORCPT ); Sun, 29 May 2022 02:19:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38350 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229460AbiE2GTF (ORCPT ); Sun, 29 May 2022 02:19:05 -0400 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60137.outbound.protection.outlook.com [40.107.6.137]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5499D6C0DD; Sat, 28 May 2022 23:19:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JmHxASxSaaRCXsJdXhyRg3woEUD8hTVg/KrB6zriXAhumiHvPITFujl9cen/t1P24FgAOfkKpHoXGzNbGJb9Zf6M2Nf611/aZb6m0pxpIP+oyjk+p7XpGBV5T90mOgTpLgT5lhsqNdDss9A+ibR9Jx1tsSe20K56jUcmI57q/xqX/iDZQk9mBFnn8OR/4rbSLNXI+ml2NFiK+jDlXQjkYrKc3KT8zFRGOhHRujqma1MWrfl12oAurgMWEAJvSBl2ZABvOQ7pb25w2mq95eI1mTrJecG3oCjwrRiQnnOMM1dS0PnXBz6mUVRjYUch88HmcG1Cqiqjp+AQuQ3MMKJBTA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=7ekwVoXx/+aYjX3KlJSJLf75Avjb5+QFhAMoKN3Z/Tw=; b=RMYwbmn5xzdoS/dyoWr8dgeR46c8lgLj1ksZgCQzJwKU8OTMCN5qEHzOkW+cGyRBY5tjqMiU84gqPubN2SunXqDcT8ib4Tm9Ssab7LLoNwHfQrCukMG2HL5vDeYEfRcx2LIwZgJrwBYwCA3a44qQsDtFyCELWsipLlT+z6aLwQdgn6OIe4YKHozughTE5m2aIfD9Tw9ttANfdBls85PVv1G7rw1qdjDcUdyNzlMrUPi768MJ4g461o7sze17ocK4vs5pdA+566GewHpRpOtwhPxEW0vNLldwySlgS9UVM0um03hB/fzSc2cnFRE8jp8NgV1/O4LlB/IGqgwXwCq2lg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 193.8.40.94) smtp.rcpttodomain=kernel.org smtp.mailfrom=leica-geosystems.com.cn; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=leica-geosystems.com.cn; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=leica-geosystems.com.cn; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7ekwVoXx/+aYjX3KlJSJLf75Avjb5+QFhAMoKN3Z/Tw=; b=w23Z0qXWqYGwJhugbE/WpFtDK0J61kdpvNFlztqkehNa+4LG30qycZ//hvdhmYdkBPMJDD4WiqCM9MeXMCPMPOlaxB6Szvo0BTyYOSI5ZpPXfmAgD0YoRB5T6/fc5WzcXVNJsCKgTsRyRN/bK2OP5+pH4u8cs99KzTPL8jxrPts= Received: from AS9P250CA0016.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:532::26) by AM5PR06MB2995.eurprd06.prod.outlook.com (2603:10a6:206:b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.18; Sun, 29 May 2022 06:18:58 +0000 Received: from VE1EUR02FT016.eop-EUR02.prod.protection.outlook.com (2603:10a6:20b:532:cafe::d9) by AS9P250CA0016.outlook.office365.com (2603:10a6:20b:532::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.18 via Frontend Transport; Sun, 29 May 2022 06:18:57 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 193.8.40.94) smtp.mailfrom=leica-geosystems.com.cn; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=leica-geosystems.com.cn; Received-SPF: Pass (protection.outlook.com: domain of leica-geosystems.com.cn designates 193.8.40.94 as permitted sender) receiver=protection.outlook.com; client-ip=193.8.40.94; helo=aherlnxbspsrv01.lgs-net.com; pr=C Received: from aherlnxbspsrv01.lgs-net.com (193.8.40.94) by VE1EUR02FT016.mail.protection.outlook.com (10.152.12.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.13 via Frontend Transport; Sun, 29 May 2022 06:18:57 +0000 From: LI Qingwu To: jic23@kernel.org, lars@metafoo.de, robh+dt@kernel.org, tomas.melin@vaisala.com, andy.shevchenko@gmail.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Qing-wu.Li@leica-geosystems.com.cn, thomas.haemmerle@leica-geosystems.com Cc: linux-iio@vger.kernel.org, Rob Herring Subject: [PATCH V9 1/5] dt-bindings: iio: accel: sca3300: Document murata,scl3300 Date: Sun, 29 May 2022 06:18:49 +0000 Message-Id: <20220529061853.3044893-2-Qing-wu.Li@leica-geosystems.com.cn> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220529061853.3044893-1-Qing-wu.Li@leica-geosystems.com.cn> References: <20220529061853.3044893-1-Qing-wu.Li@leica-geosystems.com.cn> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 282bcb18-bdbf-4d43-c608-08da413b1d67 X-MS-TrafficTypeDiagnostic: AM5PR06MB2995:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Jy7CfKVKRpy/7kTZ1nHWyNCmOFOBwxf1utWg1wBz49R5UsY7DVUdGCL9UuJo0JDXWgbjpWebnC9ZhZyUSZv1JfLWzfdh/vGAJVdn34OTU2vFi2Z8AGtPh6rfMS1fDTtiyakxxljpuHREuYI3Sg3KVIkKWT97D1gLjZWn0quwHEmw0xz4fQzYWOAbqLpB8/1C3RIMjKCOA8wM1dmOjRT34FBGx9mIUWNDBRCvmODt6d0d08R6wa3/eqMvUtODGwC8AZ3N1OokWoVbnP6dQDEb8QwKRv3y6GqDQlDd6dX5z1q8ZAjE3jHz7ObOv2J1UkKGefsZ4rd8he5ivz+KK59pXMHv3LRNj0anquVfdqNHnxUtZcZW5wmp/mraS5o9ptfaNl08chV1Mt4AuVnc7rNyhCjmZZE/9wgVvB95ZjfjZxKkogh45IS8O/roXjrQWzy4YgM65vLgEYqKJalLZlYGiFrVePTQ60nXkZBZgyD3IbaK4GAbPY0SIH7RT6yTf6OS3jQnJJDt/3C7FGuCzoRdRlXh270uwWZ0d5ejpDC9vIFot0NQZaO9tuteQBn98MIHG4V6SaukdcAkwtBIGrIVxZEc9iKnEaFkrnWSDiClpby198XcZCM4Aa4MhKZ656swXkU+dWtJzCn2fDSEjNs/BMvus5M19H0IuVnAb2aUj57/pmZN3fuY8d93lp2yGDFY X-Forefront-Antispam-Report: CIP:193.8.40.94;CTRY:CH;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:aherlnxbspsrv01.lgs-net.com;PTR:ahersrvdom50.leica-geosystems.com;CAT:NONE;SFS:(13230001)(4636009)(36840700001)(40470700004)(46966006)(5660300002)(6486002)(86362001)(6512007)(508600001)(26005)(2616005)(1076003)(956004)(8936002)(118246002)(40460700003)(6666004)(2906002)(4744005)(6506007)(186003)(47076005)(336012)(4326008)(8676002)(70586007)(70206006)(82310400005)(316002)(36736006)(36756003)(81166007)(36860700001)(356005);DIR:OUT;SFP:1102; X-OriginatorOrg: leica-geosystems.com.cn X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 May 2022 06:18:57.6062 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 282bcb18-bdbf-4d43-c608-08da413b1d67 X-MS-Exchange-CrossTenant-Id: 1b16ab3e-b8f6-4fe3-9f3e-2db7fe549f6a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=1b16ab3e-b8f6-4fe3-9f3e-2db7fe549f6a;Ip=[193.8.40.94];Helo=[aherlnxbspsrv01.lgs-net.com] X-MS-Exchange-CrossTenant-AuthSource: VE1EUR02FT016.eop-EUR02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR06MB2995 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org Add DT bindings for Murata scl3300 inclinometer. Reviewed-by: Rob Herring Signed-off-by: LI Qingwu --- Documentation/devicetree/bindings/iio/accel/murata,sca3300.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/devicetree/bindings/iio/accel/murata,sca3300.yaml b/Documentation/devicetree/bindings/iio/accel/murata,sca3300.yaml index 55fd3548e3b6..f6e2a16a710b 100644 --- a/Documentation/devicetree/bindings/iio/accel/murata,sca3300.yaml +++ b/Documentation/devicetree/bindings/iio/accel/murata,sca3300.yaml @@ -17,6 +17,7 @@ properties: compatible: enum: - murata,sca3300 + - murata,scl3300 reg: maxItems: 1 From patchwork Sun May 29 06:18:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: LI Qingwu X-Patchwork-Id: 12864124 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AF6C4C433EF for ; Sun, 29 May 2022 06:19:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229483AbiE2GTH (ORCPT ); Sun, 29 May 2022 02:19:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38170 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229463AbiE2GTF (ORCPT ); Sun, 29 May 2022 02:19:05 -0400 Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-eopbgr140091.outbound.protection.outlook.com [40.107.14.91]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7E7256C0DA; Sat, 28 May 2022 23:19:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Aoz/xH+zFB7XV0CVXk7TA/8y6CjvGkOi1ef7CSPGYL6P2ywlm8SZG5VRJhZPf9Wmyf1iYVBg59P/SxGObWMRDEK5ADbf7yLfMkhh6aq6ijjoEKS4VwFsG2xLVp6uVQYxQ8tbUPx53fqE1eGo/HhqEPOh0JuVB3ojkF72jRS4ODD0vNQXuSeBVZHouwzR7ZheKWHN/ck3FlRfbdLNQt0RMdpuqQNHW4NcceyoqqSVdBrVN6K+oZvE/gbLX1HovBjBpfiXYAJr/FiQgaxYoOLKoq1F2G1Z42Cm7QobxcGRnyYSEcAXWLGHGIZQq2RQmBi8bA57RbIAeVBrHbW1QwXUNQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=GLDuV2KrgenZkIPe4JZZX6YDLV+Fb0+07JQWbhDnbSY=; b=Ot45V3pisZd6NY/A8TzyMbQsIUgjXEbUQLCSS1PHQ5b5q1XWFjzRvoVFoIG9nx/gII1mDKKaLDs9wILbzbrD1bybypqcb5RPr+R9JSjc9c1Lu2GhsBiOmsSLun//w3ehT01+64LL9YYihgk4YsHMOvAGS4xVgEZF1AHm0XepEuJ0PIEWitbI1R9ZC8w+G/i/6Fq0TuDqw6cxc01oe81gtzChFcAyC/quptS3p/VFJRJ2CYw3ZFzsTYei8oN2XBUsRM2W/ql+E3ljujg0FegYbCVOCYphYgJEK7WorFz+NkegXHaob20JSHvceGVzTFm+pbuErpk7TfmYoZlqVQecEg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 193.8.40.94) smtp.rcpttodomain=kernel.org smtp.mailfrom=leica-geosystems.com.cn; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=leica-geosystems.com.cn; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=leica-geosystems.com.cn; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GLDuV2KrgenZkIPe4JZZX6YDLV+Fb0+07JQWbhDnbSY=; b=gX2+8ZyOpLlXpXWCIislwMjyYL4eQeS9N8gGGpzDL5OHNCha64UQUa+ObR1v/Qw5g3qDfxiKxZ3aNztkxkAxRce6B8uBcMyPKbFT4qx/OjYay6cARfWX6Z+THMKP7FeldUipwSzSX/hpB1+DgOJO4muCMK+14z8hpB8oV/7pEBY= Received: from AS9P250CA0010.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:532::13) by AS8PR06MB7639.eurprd06.prod.outlook.com (2603:10a6:20b:337::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.15; Sun, 29 May 2022 06:18:58 +0000 Received: from VE1EUR02FT016.eop-EUR02.prod.protection.outlook.com (2603:10a6:20b:532:cafe::12) by AS9P250CA0010.outlook.office365.com (2603:10a6:20b:532::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.18 via Frontend Transport; Sun, 29 May 2022 06:18:58 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 193.8.40.94) smtp.mailfrom=leica-geosystems.com.cn; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=leica-geosystems.com.cn; Received-SPF: Pass (protection.outlook.com: domain of leica-geosystems.com.cn designates 193.8.40.94 as permitted sender) receiver=protection.outlook.com; client-ip=193.8.40.94; helo=aherlnxbspsrv01.lgs-net.com; pr=C Received: from aherlnxbspsrv01.lgs-net.com (193.8.40.94) by VE1EUR02FT016.mail.protection.outlook.com (10.152.12.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.13 via Frontend Transport; Sun, 29 May 2022 06:18:58 +0000 From: LI Qingwu To: jic23@kernel.org, lars@metafoo.de, robh+dt@kernel.org, tomas.melin@vaisala.com, andy.shevchenko@gmail.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Qing-wu.Li@leica-geosystems.com.cn, thomas.haemmerle@leica-geosystems.com Cc: linux-iio@vger.kernel.org Subject: [PATCH V9 2/5] iio: accel: sca3300: add define for temp channel for reuse. Date: Sun, 29 May 2022 06:18:50 +0000 Message-Id: <20220529061853.3044893-3-Qing-wu.Li@leica-geosystems.com.cn> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220529061853.3044893-1-Qing-wu.Li@leica-geosystems.com.cn> References: <20220529061853.3044893-1-Qing-wu.Li@leica-geosystems.com.cn> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f3c37553-b79c-46f5-4a51-08da413b1dce X-MS-TrafficTypeDiagnostic: AS8PR06MB7639:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: q90kmjkvTNwd1BfPhx9P2KkiCu9VJQcu1BnkX18AJo/mWHKu9tUKs/KjgzK01pqAw/kTu1Qry3EOyP2Z5dveV0uarj+5Po5d6PGXSWxfdmSAWGyP2qCcJtTNFnF+D/Xkv/T58Kc+u19V2/sjF2js1M6CoEN0teSDLjRd5EGSOUR3odA4Wnq8JPa/4V9eK4l+ANm7baUDxWZYqg14nLwwYSPzb+TSC74Z9db6qJo6UQeLOtg18TQFRLKwbf3nyB3VbMD4nRgJuYNr3BtD+/mqgiYZmEClkECGcaHK4CjJey2EXXX1caJtuV+gC/gn8bU615bt5OvXXsi8pD9fOsgkN3BY9zHa7cGIhuG598VHULWd+d25P/arCwZz3628zERUbvRE0t3csptAdEq/u5sn+VjvPWbuRbNCwcjJLjTg/JmcYVgEhFl1N4WixMyzcA65bipFgAMT2Fd+W2R5rfRwxyZ7vllS7I2BQEZmRfrBUzO+dLq8NBlt4CUCxSMxXn4XE6b1/nsr9oZJps136Nx9h4tWFzJBm8zdErEXWzKlxvuyXi6PAwLOwhhHhZLvIYO72po5yUbbYmUfXHjgQGvwh7merr5m3ZTo4W4Jky3CnWCpzzIvmXSiCNnosBnlR+tDsgqjiv4M/MCtwVGF6bgrHxKkqpa3vI0gjggeZWmvuVksRW9S+THfl3QorRCMdbjq X-Forefront-Antispam-Report: CIP:193.8.40.94;CTRY:CH;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:aherlnxbspsrv01.lgs-net.com;PTR:ahersrvdom50.leica-geosystems.com;CAT:NONE;SFS:(13230001)(4636009)(36840700001)(40470700004)(46966006)(2906002)(40460700003)(316002)(6486002)(508600001)(81166007)(8676002)(6666004)(356005)(5660300002)(36736006)(6506007)(82310400005)(36860700001)(8936002)(86362001)(6512007)(2616005)(956004)(26005)(186003)(70206006)(336012)(47076005)(118246002)(36756003)(83380400001)(70586007)(1076003)(4326008);DIR:OUT;SFP:1102; X-OriginatorOrg: leica-geosystems.com.cn X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 May 2022 06:18:58.2937 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f3c37553-b79c-46f5-4a51-08da413b1dce X-MS-Exchange-CrossTenant-Id: 1b16ab3e-b8f6-4fe3-9f3e-2db7fe549f6a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=1b16ab3e-b8f6-4fe3-9f3e-2db7fe549f6a;Ip=[193.8.40.94];Helo=[aherlnxbspsrv01.lgs-net.com] X-MS-Exchange-CrossTenant-AuthSource: VE1EUR02FT016.eop-EUR02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR06MB7639 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org Add define of SCA3300_TEMP_CHANNEL for reuse. Signed-off-by: LI Qingwu --- drivers/iio/accel/sca3300.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/drivers/iio/accel/sca3300.c b/drivers/iio/accel/sca3300.c index f7ef8ecfd34a..ff16d2cc8c70 100644 --- a/drivers/iio/accel/sca3300.c +++ b/drivers/iio/accel/sca3300.c @@ -72,22 +72,24 @@ enum sca3300_scan_indexes { }, \ } +#define SCA3300_TEMP_CHANNEL(index, reg) { \ + .type = IIO_TEMP, \ + .address = reg, \ + .scan_index = index, \ + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ + .scan_type = { \ + .sign = 's', \ + .realbits = 16, \ + .storagebits = 16, \ + .endianness = IIO_CPU, \ + }, \ +} + static const struct iio_chan_spec sca3300_channels[] = { SCA3300_ACCEL_CHANNEL(SCA3300_ACC_X, 0x1, X), SCA3300_ACCEL_CHANNEL(SCA3300_ACC_Y, 0x2, Y), SCA3300_ACCEL_CHANNEL(SCA3300_ACC_Z, 0x3, Z), - { - .type = IIO_TEMP, - .address = 0x5, - .scan_index = SCA3300_TEMP, - .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), - .scan_type = { - .sign = 's', - .realbits = 16, - .storagebits = 16, - .endianness = IIO_CPU, - }, - }, + SCA3300_TEMP_CHANNEL(SCA3300_TEMP, 0x05), IIO_CHAN_SOFT_TIMESTAMP(4), }; From patchwork Sun May 29 06:18:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: LI Qingwu X-Patchwork-Id: 12864129 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 92A0AC4167B for ; Sun, 29 May 2022 06:19:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229513AbiE2GTP (ORCPT ); Sun, 29 May 2022 02:19:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38868 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229487AbiE2GTJ (ORCPT ); Sun, 29 May 2022 02:19:09 -0400 Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-eopbgr10130.outbound.protection.outlook.com [40.107.1.130]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B4B816C0D7; Sat, 28 May 2022 23:19:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EJBdeqywe5gW1qC751QtxGskJgbFyOn3VgjoPUXV3DW5x7XVbPTiqlVy5pKNGBxnljBrzBL2YNiDG/heLAB+P8xLdlhOHF2ejb7VZvJdQ5I2N4lZKI9B45XiBfpze+on0YzWFVKPiUy2kMLul2HLGJXyP+tGSzOjchX0+LPz7W7nnCjYPZF9YfFnyezMkoryT/OoSh8cnMQgQX9oLGC62O/vMELeX5V6NJg1Z9Z8DJDu+ti4vrxWd958ASSr3I0+XSz5fM3FLc0WAu+FIBICOS1dd3h8FwMjYxjjF7HDBF4ZI0+5cDLYrgwqtbSZ2/aEy0Bn3omB3vWFPxSXufzFzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=BMlwocUh4mUyagz5ivOTQPxjhix5xbWhneJnEU5MCSo=; b=jU4U6Ud2gw1GHJpAttQu3G4yvWrkKr28vaCESMiQ5jSCbktWZkZtgVK8yk88GjbzM8Q1aK30xCjE+gHMkoVdqVeZTXISy+oaP9AuptixltLZ9oFS3ZYzsSIn/FbgD2WphDftVxukIKQE5zrOKr0hweCyWO9wloTLLAb6s5nXk9rqf1mL3kHZJ4rrd9H/d6i3G1bwWZNxPD3rDl8QrIV9cEfLJIGKZaUJF5SwshPEvcqPZpvQwpZRYpasXVZZ+cpNxGkyKUN0NeM7Oj0LQdzUZXMI0VusOnsSQawH1VQCmXcFcaTlmS8xtr6qGCBk9Yp3LwZvdx1/tKKK+SHs3YNwRQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 193.8.40.94) smtp.rcpttodomain=kernel.org smtp.mailfrom=leica-geosystems.com.cn; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=leica-geosystems.com.cn; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=leica-geosystems.com.cn; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BMlwocUh4mUyagz5ivOTQPxjhix5xbWhneJnEU5MCSo=; b=oYHCefkRwB+slU1INHM02AgYoEaM5jxktIwQ26VKzS4ZBw7YFB03IjBHxDIsJ0pwr5cQNFRKltlf4xtGe7QvrsUy3L2unq7MAGDSMtMo0+287KKboGvC8inEzY37AOZB2jO3oac55cCl5DuMAAuX3Tu0Rwaklbve57VMqidxw4k= Received: from AS9P250CA0019.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:532::23) by VI1PR06MB6432.eurprd06.prod.outlook.com (2603:10a6:800:11e::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.13; Sun, 29 May 2022 06:18:59 +0000 Received: from VE1EUR02FT016.eop-EUR02.prod.protection.outlook.com (2603:10a6:20b:532:cafe::88) by AS9P250CA0019.outlook.office365.com (2603:10a6:20b:532::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.18 via Frontend Transport; Sun, 29 May 2022 06:18:59 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 193.8.40.94) smtp.mailfrom=leica-geosystems.com.cn; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=leica-geosystems.com.cn; Received-SPF: Pass (protection.outlook.com: domain of leica-geosystems.com.cn designates 193.8.40.94 as permitted sender) receiver=protection.outlook.com; client-ip=193.8.40.94; helo=aherlnxbspsrv01.lgs-net.com; pr=C Received: from aherlnxbspsrv01.lgs-net.com (193.8.40.94) by VE1EUR02FT016.mail.protection.outlook.com (10.152.12.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.13 via Frontend Transport; Sun, 29 May 2022 06:18:58 +0000 From: LI Qingwu To: jic23@kernel.org, lars@metafoo.de, robh+dt@kernel.org, tomas.melin@vaisala.com, andy.shevchenko@gmail.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Qing-wu.Li@leica-geosystems.com.cn, thomas.haemmerle@leica-geosystems.com Cc: linux-iio@vger.kernel.org Subject: [PATCH V9 3/5] iio: accel: sca3300: modified to support multi chips Date: Sun, 29 May 2022 06:18:51 +0000 Message-Id: <20220529061853.3044893-4-Qing-wu.Li@leica-geosystems.com.cn> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220529061853.3044893-1-Qing-wu.Li@leica-geosystems.com.cn> References: <20220529061853.3044893-1-Qing-wu.Li@leica-geosystems.com.cn> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 552efea6-b983-4915-a798-08da413b1e2d X-MS-TrafficTypeDiagnostic: VI1PR06MB6432:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BXt7e342loXA2YjQI8+iATob1jT9ej/xxdukvzIBv2yQkZqjn9abfbxNFzvlIt8THEgdFbxdyFH1y72+N8k6h3thiEZiB2MmhufGdyOukXyyyI3GyqtF4qoGMhrKRz5+cogp0eCRv7Pc3vxk76prWNuVi316tG+wjw0VuaryYQQnuEePVXVMA44Oyz1ofXpghV455EQnn98GzQXJx4m+7nW/9AvWRYI5eIRXhXS+Z1eS4rmjfoWafnRnpdqR+J28H0wQ8IeLN/TILabyP8IdzArxLuweRCDHANOAmGSWtnidddxeIDo+FNSrWkV387D3vq+TFI+4j3hj/W3QPwMxSoaoEbxRFp1Q+8D3xByRHfzq4JcW5lIcgCLQHWs/V6xlIgpavcZek6dtodPAp2p34bcXWFMEcfikEuGkvpe4bVmpFyEn1YifWXkMiC43YiQtY1jcIMtZzkhK52pFcm5MVoGTIaVDwZHI0R9cF5iUQNQnZ9FKii923uaTdBIxqpTDqisc0bRZNu/dGYLRcDKB0qe3d8O+mlx2VPWHSSXMvVdHLUyMPB2YLCTOAjb+u5npDNYc2By1CzF1dtJ0nSntDFUEoU2257Hx8Ki48pNvMYgVdXuR6/Mjc2J2UiBfIT95Vezkp5lfO7ZdDCc8X0yfkU/TbmlIMuR6x5JKAqwgYgTMnRPUZD/Moo5X1vzBuVXz X-Forefront-Antispam-Report: CIP:193.8.40.94;CTRY:CH;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:aherlnxbspsrv01.lgs-net.com;PTR:ahersrvdom50.leica-geosystems.com;CAT:NONE;SFS:(13230001)(4636009)(46966006)(40470700004)(36840700001)(47076005)(83380400001)(40460700003)(82310400005)(336012)(2616005)(86362001)(956004)(5660300002)(6666004)(6486002)(6506007)(70586007)(70206006)(36736006)(36756003)(8936002)(1076003)(316002)(8676002)(4326008)(356005)(6512007)(81166007)(118246002)(186003)(2906002)(36860700001)(26005)(508600001);DIR:OUT;SFP:1102; X-OriginatorOrg: leica-geosystems.com.cn X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 May 2022 06:18:58.9187 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 552efea6-b983-4915-a798-08da413b1e2d X-MS-Exchange-CrossTenant-Id: 1b16ab3e-b8f6-4fe3-9f3e-2db7fe549f6a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=1b16ab3e-b8f6-4fe3-9f3e-2db7fe549f6a;Ip=[193.8.40.94];Helo=[aherlnxbspsrv01.lgs-net.com] X-MS-Exchange-CrossTenant-AuthSource: VE1EUR02FT016.eop-EUR02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR06MB6432 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org Prepare the way for multiple chips and additional channels: - Modify the driver to read the device ID and load the corresponding sensor information from the table to support multiple chips - Add prepares for the addition of extra channels - Prepare for handling the operation modes for multiple chips Signed-off-by: LI Qingwu --- drivers/iio/accel/sca3300.c | 197 ++++++++++++++++++++++++++++-------- 1 file changed, 156 insertions(+), 41 deletions(-) diff --git a/drivers/iio/accel/sca3300.c b/drivers/iio/accel/sca3300.c index ff16d2cc8c70..21bf439e5c84 100644 --- a/drivers/iio/accel/sca3300.c +++ b/drivers/iio/accel/sca3300.c @@ -93,19 +93,40 @@ static const struct iio_chan_spec sca3300_channels[] = { IIO_CHAN_SOFT_TIMESTAMP(4), }; -static const int sca3300_lp_freq[] = {70, 70, 70, 10}; -static const int sca3300_accel_scale[][2] = {{0, 370}, {0, 741}, {0, 185}, {0, 185}}; +static const int sca3300_lp_freq[] = {70, 10}; +static const int sca3300_lp_freq_map[] = {0, 0, 0, 1}; +static const int sca3300_accel_scale[][2] = {{0, 370}, {0, 741}, {0, 185}}; +static const int sca3300_accel_scale_map[] = {0, 1, 2, 2}; + +static const int sca3300_avail_modes_map[] = {0, 1, 2, 3}; static const unsigned long sca3300_scan_masks[] = { BIT(SCA3300_ACC_X) | BIT(SCA3300_ACC_Y) | BIT(SCA3300_ACC_Z) | BIT(SCA3300_TEMP), 0 }; +struct sca3300_chip_info { + const char *name; + const unsigned long *scan_masks; + const struct iio_chan_spec *channels; + u8 num_channels; + u8 num_accel_scales; + const int (*accel_scale)[2]; + const int *accel_scale_map; + u8 num_freqs; + const int *freq_table; + const int *freq_map; + const int *avail_modes_table; + u8 num_avail_modes; + u8 chip_id; +}; + /** * struct sca3300_data - device data * @spi: SPI device structure * @lock: Data buffer lock + * @chip: Sensor chip specific information * @scan: Triggered buffer. Four channel 16-bit data + 64-bit timestamp * @txbuf: Transmit buffer * @rxbuf: Receive buffer @@ -113,6 +134,7 @@ static const unsigned long sca3300_scan_masks[] = { struct sca3300_data { struct spi_device *spi; struct mutex lock; + const struct sca3300_chip_info *chip; struct { s16 channels[4]; s64 ts __aligned(sizeof(s64)); @@ -121,6 +143,24 @@ struct sca3300_data { u8 rxbuf[4]; }; +static const struct sca3300_chip_info sca3300_chip_tbl[] = { + { + .name = "sca3300", + .scan_masks = sca3300_scan_masks, + .channels = sca3300_channels, + .num_channels = ARRAY_SIZE(sca3300_channels), + .num_accel_scales = ARRAY_SIZE(sca3300_accel_scale)*2, + .accel_scale = sca3300_accel_scale, + .accel_scale_map = sca3300_accel_scale_map, + .num_freqs = ARRAY_SIZE(sca3300_lp_freq), + .freq_table = sca3300_lp_freq, + .freq_map = sca3300_lp_freq_map, + .avail_modes_table = sca3300_avail_modes_map, + .num_avail_modes = 4, + .chip_id = SCA3300_WHOAMI_ID, + }, +}; + DECLARE_CRC8_TABLE(sca3300_crc_table); static int sca3300_transfer(struct sca3300_data *sca_data, int *val) @@ -227,36 +267,91 @@ static int sca3300_write_reg(struct sca3300_data *sca_data, u8 reg, int val) return sca3300_error_handler(sca_data); } +static int sca3300_set_op_mode(struct sca3300_data *sca_data, int index) +{ + if ((index < 0) || (index >= sca_data->chip->num_avail_modes)) + return -EINVAL; + + return sca3300_write_reg(sca_data, SCA3300_REG_MODE, + sca_data->chip->avail_modes_table[index]); +} + +static int sca3300_get_op_mode(struct sca3300_data *sca_data, int *index) +{ + int reg_val; + int ret; + int i; + + ret = sca3300_read_reg(sca_data, SCA3300_REG_MODE, ®_val); + if (ret) + return ret; + + for (i = 0; i < sca_data->chip->num_avail_modes; i++) { + if (sca_data->chip->avail_modes_table[i] == reg_val) + break; + } + if (i == sca_data->chip->num_avail_modes) + return -EINVAL; + + *index = i; + return 0; +} + +static int sca3300_set_frequency(struct sca3300_data *data, int val) +{ + const struct sca3300_chip_info *chip = data->chip; + unsigned int index; + int *opmode_scale; + int *new_scale; + unsigned int i; + + if (sca3300_get_op_mode(data, &index)) + return -EINVAL; + + /* + * Find a mode in which the requested sampling frequency is available + * and the scaling currently set is retained. + */ + opmode_scale = (int *)chip->accel_scale[chip->accel_scale_map[index]]; + for (i = 0; i < chip->num_avail_modes; i++) { + new_scale = (int *)chip->accel_scale[chip->accel_scale_map[i]]; + if ((val == chip->freq_table[chip->freq_map[i]]) && + (opmode_scale[1] == new_scale[1]) && + (opmode_scale[0] == new_scale[0])) + break; + } + if (i == chip->num_avail_modes) + return -EINVAL; + + return sca3300_set_op_mode(data, i); +} + static int sca3300_write_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int val, int val2, long mask) { struct sca3300_data *data = iio_priv(indio_dev); - int reg_val; - int ret; + int index; int i; switch (mask) { case IIO_CHAN_INFO_SCALE: - if (val) + if (chan->type != IIO_ACCEL) return -EINVAL; - - for (i = 0; i < ARRAY_SIZE(sca3300_accel_scale); i++) { - if (val2 == sca3300_accel_scale[i][1]) - return sca3300_write_reg(data, SCA3300_REG_MODE, i); + /* + * Letting scale take priority over sampling frequency. + * That makes sense given we can only ever end up increasing + * the sampling frequency which is unlikely to be a problem. + */ + for (i = 0; i < data->chip->num_avail_modes; i++) { + index = data->chip->accel_scale_map[i]; + if ((val == data->chip->accel_scale[index][0]) && + (val2 == data->chip->accel_scale[index][1])) + return sca3300_set_op_mode(data, i); } return -EINVAL; - case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: - ret = sca3300_read_reg(data, SCA3300_REG_MODE, ®_val); - if (ret) - return ret; - /* freq. change is possible only for mode 3 and 4 */ - if (reg_val == 2 && val == sca3300_lp_freq[3]) - return sca3300_write_reg(data, SCA3300_REG_MODE, 3); - if (reg_val == 3 && val == sca3300_lp_freq[2]) - return sca3300_write_reg(data, SCA3300_REG_MODE, 2); - return -EINVAL; + return sca3300_set_frequency(data, val); default: return -EINVAL; } @@ -267,8 +362,8 @@ static int sca3300_read_raw(struct iio_dev *indio_dev, int *val, int *val2, long mask) { struct sca3300_data *data = iio_priv(indio_dev); + int index; int ret; - int reg_val; switch (mask) { case IIO_CHAN_INFO_RAW: @@ -277,17 +372,24 @@ static int sca3300_read_raw(struct iio_dev *indio_dev, return ret; return IIO_VAL_INT; case IIO_CHAN_INFO_SCALE: - ret = sca3300_read_reg(data, SCA3300_REG_MODE, ®_val); + ret = sca3300_get_op_mode(data, &index); if (ret) return ret; - *val = 0; - *val2 = sca3300_accel_scale[reg_val][1]; - return IIO_VAL_INT_PLUS_MICRO; + switch (chan->type) { + case IIO_ACCEL: + index = data->chip->accel_scale_map[index]; + *val = data->chip->accel_scale[index][0]; + *val2 = data->chip->accel_scale[index][1]; + return IIO_VAL_INT_PLUS_MICRO; + default: + return -EINVAL; + } case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: - ret = sca3300_read_reg(data, SCA3300_REG_MODE, ®_val); + ret = sca3300_get_op_mode(data, &index); if (ret) return ret; - *val = sca3300_lp_freq[reg_val]; + index = data->chip->freq_map[index]; + *val = data->chip->freq_table[index]; return IIO_VAL_INT; default: return -EINVAL; @@ -331,6 +433,7 @@ static int sca3300_init(struct sca3300_data *sca_data, { int value = 0; int ret; + int i; ret = sca3300_write_reg(sca_data, SCA3300_REG_MODE, SCA3300_MODE_SW_RESET); @@ -347,12 +450,17 @@ static int sca3300_init(struct sca3300_data *sca_data, if (ret) return ret; - if (value != SCA3300_WHOAMI_ID) { - dev_err(&sca_data->spi->dev, - "device id not expected value, %d != %u\n", - value, SCA3300_WHOAMI_ID); + for (i = 0; i < ARRAY_SIZE(sca3300_chip_tbl); i++) { + if (sca3300_chip_tbl[i].chip_id == value) + break; + } + if (i == ARRAY_SIZE(sca3300_chip_tbl)) { + dev_err(&sca_data->spi->dev, "unknown chip id %x\n", value); return -ENODEV; } + + sca_data->chip = &sca3300_chip_tbl[i]; + return 0; } @@ -384,15 +492,21 @@ static int sca3300_read_avail(struct iio_dev *indio_dev, const int **vals, int *type, int *length, long mask) { + struct sca3300_data *data = iio_priv(indio_dev); switch (mask) { case IIO_CHAN_INFO_SCALE: - *vals = (const int *)sca3300_accel_scale; - *length = ARRAY_SIZE(sca3300_accel_scale) * 2 - 2; - *type = IIO_VAL_INT_PLUS_MICRO; - return IIO_AVAIL_LIST; + switch (chan->type) { + case IIO_ACCEL: + *vals = (const int *)data->chip->accel_scale; + *length = data->chip->num_accel_scales; + *type = IIO_VAL_INT_PLUS_MICRO; + return IIO_AVAIL_LIST; + default: + return -EINVAL; + } case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: - *vals = &sca3300_lp_freq[2]; - *length = 2; + *vals = (const int *)data->chip->freq_table; + *length = data->chip->num_freqs; *type = IIO_VAL_INT; return IIO_AVAIL_LIST; default: @@ -424,11 +538,6 @@ static int sca3300_probe(struct spi_device *spi) crc8_populate_msb(sca3300_crc_table, SCA3300_CRC8_POLYNOMIAL); indio_dev->info = &sca3300_info; - indio_dev->name = SCA3300_ALIAS; - indio_dev->modes = INDIO_DIRECT_MODE; - indio_dev->channels = sca3300_channels; - indio_dev->num_channels = ARRAY_SIZE(sca3300_channels); - indio_dev->available_scan_masks = sca3300_scan_masks; ret = sca3300_init(sca_data, indio_dev); if (ret) { @@ -436,6 +545,12 @@ static int sca3300_probe(struct spi_device *spi) return ret; } + indio_dev->name = sca_data->chip->name; + indio_dev->modes = INDIO_DIRECT_MODE; + indio_dev->channels = sca_data->chip->channels; + indio_dev->num_channels = sca_data->chip->num_channels; + indio_dev->available_scan_masks = sca_data->chip->scan_masks; + ret = devm_iio_triggered_buffer_setup(&spi->dev, indio_dev, iio_pollfunc_store_time, sca3300_trigger_handler, NULL); From patchwork Sun May 29 06:18:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: LI Qingwu X-Patchwork-Id: 12864127 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 58C59C4332F for ; Sun, 29 May 2022 06:19:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229510AbiE2GTP (ORCPT ); Sun, 29 May 2022 02:19:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38594 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229472AbiE2GTG (ORCPT ); Sun, 29 May 2022 02:19:06 -0400 Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-eopbgr140104.outbound.protection.outlook.com [40.107.14.104]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6CD856C0E6; Sat, 28 May 2022 23:19:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SiSa4OpYXodgbtaz9jUgZWUCeKOp+rd4JsrKS1VGYyB2E4QopdANY1e3UDwmIbsT1/hq6xD6C+3PiZoUMX2uoYxQr3ZqSqrpPs9H17vOlHzgmxvC6yoXEGfR8cWLaPtjNVT1PjtWnH9HwFxjZETtbKEhBAR3kxvKKYzUze2Zsg79r27v0Pk767qPxX0pT9KgU2ONZ1Fbn+DGLFBDb2df24K7obo9dlLuxtPF8rAlO+0BZWxVZb5BJbdzwFOX/URf8Z51fGr62PF/v1YAr9Rpq+1Yr01qonZz2YAvrv2j2YzTmdCS9Eq2PpwMbmUnmsItP1tdCX8dICpe1ASUtDeyEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=NJt9lJNlz3+UQ6Iz2VBjYuU/jgU29/L3N/OHH4uCr4k=; b=npGMxtIWG4ktYJIgdjoZxUgt1hrFbGe+02EJyCI6v46Y/haK+NGDUyBs6O97wByBEct7CZV/wkuIEZOwHVle9HF0mdptSgJ41ntPWZBgMGCk4m+olB76U3O0vb3WwCQ3VE4U6sRK1AZtXwcp9zskT+0wpQao1n2uwPebSohJVrD0SM7u/5VVvDfQm27KgC6xcL+qMHMtpjX1Dkgl/fO1Jm5yXVR6oGapEzeCTY4SgxDBMK7KM+toTGo2dhGY7W6sLZsJNBfxTK4IlISdUW87Bk2igwtw3+9rYOmTYQUs+3h+cr9jlRZuuIyDS/kloHsIABVWxIOrXpEnrzpbFNCtGg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 193.8.40.94) smtp.rcpttodomain=kernel.org smtp.mailfrom=leica-geosystems.com.cn; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=leica-geosystems.com.cn; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=leica-geosystems.com.cn; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NJt9lJNlz3+UQ6Iz2VBjYuU/jgU29/L3N/OHH4uCr4k=; b=o3u991GLrudX8yzwwb9m/1dW5XSdSOHeHfW1OJ6NkXBjvQM4O4xCUhihL+WbdeBy5jCOzJYgrGl8AxnfJJvUPb9SV8RqzYAV670FRcZiRNlfkvTHdJ70zyP1tfeswhKWrDvKGgb7bCqJ8oZ4t9DCt7tVSTi7l9lbKykyWOmc4cU= Received: from AS9P250CA0019.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:532::23) by PR3PR06MB6844.eurprd06.prod.outlook.com (2603:10a6:102:84::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.17; Sun, 29 May 2022 06:19:00 +0000 Received: from VE1EUR02FT016.eop-EUR02.prod.protection.outlook.com (2603:10a6:20b:532:cafe::88) by AS9P250CA0019.outlook.office365.com (2603:10a6:20b:532::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.18 via Frontend Transport; Sun, 29 May 2022 06:19:00 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 193.8.40.94) smtp.mailfrom=leica-geosystems.com.cn; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=leica-geosystems.com.cn; Received-SPF: Pass (protection.outlook.com: domain of leica-geosystems.com.cn designates 193.8.40.94 as permitted sender) receiver=protection.outlook.com; client-ip=193.8.40.94; helo=aherlnxbspsrv01.lgs-net.com; pr=C Received: from aherlnxbspsrv01.lgs-net.com (193.8.40.94) by VE1EUR02FT016.mail.protection.outlook.com (10.152.12.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.13 via Frontend Transport; Sun, 29 May 2022 06:18:59 +0000 From: LI Qingwu To: jic23@kernel.org, lars@metafoo.de, robh+dt@kernel.org, tomas.melin@vaisala.com, andy.shevchenko@gmail.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Qing-wu.Li@leica-geosystems.com.cn, thomas.haemmerle@leica-geosystems.com Cc: linux-iio@vger.kernel.org Subject: [PATCH V9 4/5] iio: accel: sca3300: Add support for SCL3300 Date: Sun, 29 May 2022 06:18:52 +0000 Message-Id: <20220529061853.3044893-5-Qing-wu.Li@leica-geosystems.com.cn> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220529061853.3044893-1-Qing-wu.Li@leica-geosystems.com.cn> References: <20220529061853.3044893-1-Qing-wu.Li@leica-geosystems.com.cn> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 11cbf49c-be38-447a-15dc-08da413b1ebf X-MS-TrafficTypeDiagnostic: PR3PR06MB6844:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VoZQUTXBvgLdLGOCTJ03YLiW9K+9k//0RsTsqKaz+WnexjX9CqK8shHgd6gltckKjo6EMf5J7yVuXFaWPblA91Jp+3sI0YXvFyFSh4f5XNUBTDEssFcG2XreEp4scKdMCAkfUZV5sDIwuPnysJ+B2DMMn4jn+rs2yfaTt4qGPDrenagNBjpS7xOXujkcG1nUk2pbNYl9W8hz3ZEhE+RBkIENbuSW1Dw8ardRzEYXkRmEwcUG/q/KnJeGnU86mSnH4OIZvVUhVyzAEk44WfQxHA3XDciaDveBxfAWM3rI9GQjP8MGYTHwL89pdj4tx5vLLA0I8S3wYo92/Q35m9tihKNQKqZKDkEgW9vJYqoZj9gxq5n5yX4t27nqlQkvR2VWL0M07D+VpNmotIceFns9uQi2hCNo3pJVUUAtMchXX/2lj1ROBJczCwPjWjHrxE8tnnJhyRMawAnJQGFNpB8xR490ARaOc01WeFQSUa+i3s/JB360Zb5X2uKBbLcl62wG8Rv7LlWR/j3uY5+ua74q+72n7nqvQBsCFig+B5FxP1sAlta022MbokTLj0HWxHVmoR7feeAkBfKMDhyx4iS9pX9bwkBgiuPhJs4ivif7pfX4p/0wyDKNa8U9/GntdFHMJGfyUH5D+35kb69FkY5gvzqN9zpTVc5af7Vnx69fIjTkoPNU4JKeqkWPux4YLl3TvrRqXh1efpch7wK/QVQ8hpi9PElSvRGJB0rQKxex7ocaynSNvrqry5uj8sbPMgc65MNpqkoxa02T+9ux5uOCig== X-Forefront-Antispam-Report: CIP:193.8.40.94;CTRY:CH;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:aherlnxbspsrv01.lgs-net.com;PTR:ahersrvdom50.leica-geosystems.com;CAT:NONE;SFS:(13230001)(4636009)(40470700004)(36840700001)(46966006)(2616005)(336012)(47076005)(26005)(86362001)(6506007)(15974865002)(956004)(6666004)(2906002)(82310400005)(316002)(36756003)(70206006)(4326008)(70586007)(8676002)(36736006)(36860700001)(6486002)(81166007)(83380400001)(6512007)(40460700003)(186003)(1076003)(508600001)(8936002)(5660300002)(356005)(118246002);DIR:OUT;SFP:1102; X-OriginatorOrg: leica-geosystems.com.cn X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 May 2022 06:18:59.8718 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 11cbf49c-be38-447a-15dc-08da413b1ebf X-MS-Exchange-CrossTenant-Id: 1b16ab3e-b8f6-4fe3-9f3e-2db7fe549f6a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=1b16ab3e-b8f6-4fe3-9f3e-2db7fe549f6a;Ip=[193.8.40.94];Helo=[aherlnxbspsrv01.lgs-net.com] X-MS-Exchange-CrossTenant-AuthSource: VE1EUR02FT016.eop-EUR02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR06MB6844 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org Add support for Murata SCL3300, a 3-axis MEMS accelerometer. Same as SCA3300, it has the accelerometer and temperature output. Datasheet: www.murata.com/en-us/products/sensor/inclinometer/overview/lineup/scl3300 Signed-off-by: LI Qingwu --- drivers/iio/accel/sca3300.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/drivers/iio/accel/sca3300.c b/drivers/iio/accel/sca3300.c index 21bf439e5c84..9683dce21073 100644 --- a/drivers/iio/accel/sca3300.c +++ b/drivers/iio/accel/sca3300.c @@ -38,6 +38,7 @@ /* Device ID */ #define SCA3300_REG_WHOAMI 0x10 #define SCA3300_WHOAMI_ID 0x51 +#define SCL3300_WHOAMI_ID 0xC1 /* Device return status and mask */ #define SCA3300_VALUE_RS_ERROR 0x3 @@ -96,10 +97,18 @@ static const struct iio_chan_spec sca3300_channels[] = { static const int sca3300_lp_freq[] = {70, 10}; static const int sca3300_lp_freq_map[] = {0, 0, 0, 1}; +static const int scl3300_lp_freq[] = {40, 70, 10}; +static const int scl3300_lp_freq_map[] = {0, 1, 2}; + static const int sca3300_accel_scale[][2] = {{0, 370}, {0, 741}, {0, 185}}; static const int sca3300_accel_scale_map[] = {0, 1, 2, 2}; +static const int scl3300_accel_scale[][2] = {{0, 167}, {0, 333}, {0, 83}}; +static const int scl3300_accel_scale_map[] = {0, 1, 2}; + static const int sca3300_avail_modes_map[] = {0, 1, 2, 3}; +static const int scl3300_avail_modes_map[] = {0, 1, 3}; + static const unsigned long sca3300_scan_masks[] = { BIT(SCA3300_ACC_X) | BIT(SCA3300_ACC_Y) | BIT(SCA3300_ACC_Z) | BIT(SCA3300_TEMP), @@ -159,6 +168,21 @@ static const struct sca3300_chip_info sca3300_chip_tbl[] = { .num_avail_modes = 4, .chip_id = SCA3300_WHOAMI_ID, }, + { + .name = "scl3300", + .scan_masks = sca3300_scan_masks, + .channels = sca3300_channels, + .num_channels = ARRAY_SIZE(sca3300_channels), + .num_accel_scales = ARRAY_SIZE(scl3300_accel_scale)*2, + .accel_scale = scl3300_accel_scale, + .accel_scale_map = scl3300_accel_scale_map, + .num_freqs = ARRAY_SIZE(scl3300_lp_freq), + .freq_table = scl3300_lp_freq, + .freq_map = scl3300_lp_freq_map, + .avail_modes_table = scl3300_avail_modes_map, + .num_avail_modes = 3, + .chip_id = SCL3300_WHOAMI_ID, + }, }; DECLARE_CRC8_TABLE(sca3300_crc_table); @@ -442,9 +466,10 @@ static int sca3300_init(struct sca3300_data *sca_data, /* * Wait 1ms after SW-reset command. - * Wait 15ms for settling of signal paths. + * Wait for the settling of signal paths, + * 15ms for SCA3300 and 25ms for SCL3300, */ - usleep_range(16e3, 50e3); + usleep_range(26e3, 50e3); ret = sca3300_read_reg(sca_data, SCA3300_REG_WHOAMI, &value); if (ret) @@ -571,6 +596,7 @@ static int sca3300_probe(struct spi_device *spi) static const struct of_device_id sca3300_dt_ids[] = { { .compatible = "murata,sca3300"}, + { .compatible = "murata,scl3300"}, {} }; MODULE_DEVICE_TABLE(of, sca3300_dt_ids); From patchwork Sun May 29 06:18:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: LI Qingwu X-Patchwork-Id: 12864128 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 784FBC43219 for ; Sun, 29 May 2022 06:19:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229502AbiE2GTN (ORCPT ); Sun, 29 May 2022 02:19:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38418 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229461AbiE2GTF (ORCPT ); Sun, 29 May 2022 02:19:05 -0400 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2117.outbound.protection.outlook.com [40.107.104.117]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9A2206C0E4; Sat, 28 May 2022 23:19:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZaxEOpV2jXhstdpmOzArJ/dmF8hy7axDerabJ88mnnl/Sq3ISQ+3yghqrWtVC/NK5aFJBHly64cMM9/r0KLMCi4lK9b93yasa2CJzdUAFQtBpqU0Lb7hHEpTjkTPdDyNVAAX2AqDwm6bLzexvcxBHaclhUqgxU3kigsmZU48y9IIQTyglKrY4+s+HCZONx3xS9HOBmwQSncxgpsUkL7Rdf/ALcXHxjFZr3P72sLtByf+JMyFtFms3t6MQ+s9Gt/ZLhdDR9dpQX4OOgdM4qsiD4GDDfsbAWspXA468fM6Ms6gjLh3VTMPBcVmPinJViXKiRt1jlLuWbn0XEovNVmmDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=QxN4ZCNWz6VRgVj1BL6mki+n0goKOKfCF+2TlynNUbo=; b=HycYUY07GVdboJnsMlYAEKXc80GniWkfYKPwNkfxaWxivMOx/lqsuMqApy69bkteX9ppSbbhZRH6ftziJRnXTXPgcmcK7VfWDQVMRGVNrMmH4bErIB0DaE8rq0FBeMj8KzxM6YQgDzdFZwoL/rkckfkDYeUCryF+DJgAtxHFeS3TDwMg+A1Fnn8AR+uscLWQhvbhWI5KG5XOIzyRMxMQK2VTEe1SResxbtCDRmlIULnNg7VmI0O7/MAdOHvpnoOZ9mqja79Km+aw37x7KYrokSAKlTQJvHbeXJz8zDuW4ZAv16z3ylwUWfibX5C7HvoV1IFvLGBjBdCDp74cL9B9dg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 193.8.40.94) smtp.rcpttodomain=kernel.org smtp.mailfrom=leica-geosystems.com.cn; dmarc=none action=none header.from=leica-geosystems.com.cn; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=leica-geosystems.com.cn; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QxN4ZCNWz6VRgVj1BL6mki+n0goKOKfCF+2TlynNUbo=; b=jBxduFJkhLOOXLfTjiP/dKRd462Uopv5X4SoRFiK+bWYbPqD7vxj8u/VmZwr6nD5jmruarklY2jC8nuyV32iLS+TtPWmfXSc91KNDlJzO0XqggnZ0BL3XB17RKbZ22iML5Fr44Bq0Y75beG3TX398Jh9LKpKljISLF/gzZB1Fw0= Received: from AS9P250CA0014.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:532::15) by GV1PR06MB8404.eurprd06.prod.outlook.com (2603:10a6:150:23::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.14; Sun, 29 May 2022 06:19:01 +0000 Received: from VE1EUR02FT016.eop-EUR02.prod.protection.outlook.com (2603:10a6:20b:532:cafe::2c) by AS9P250CA0014.outlook.office365.com (2603:10a6:20b:532::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.18 via Frontend Transport; Sun, 29 May 2022 06:19:00 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 193.8.40.94) smtp.mailfrom=leica-geosystems.com.cn; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=leica-geosystems.com.cn; Received-SPF: Pass (protection.outlook.com: domain of leica-geosystems.com.cn designates 193.8.40.94 as permitted sender) receiver=protection.outlook.com; client-ip=193.8.40.94; helo=aherlnxbspsrv01.lgs-net.com; pr=C Received: from aherlnxbspsrv01.lgs-net.com (193.8.40.94) by VE1EUR02FT016.mail.protection.outlook.com (10.152.12.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.13 via Frontend Transport; Sun, 29 May 2022 06:19:00 +0000 From: LI Qingwu To: jic23@kernel.org, lars@metafoo.de, robh+dt@kernel.org, tomas.melin@vaisala.com, andy.shevchenko@gmail.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Qing-wu.Li@leica-geosystems.com.cn, thomas.haemmerle@leica-geosystems.com Cc: linux-iio@vger.kernel.org Subject: [PATCH V9 5/5] iio: accel: sca3300: Add inclination channels Date: Sun, 29 May 2022 06:18:53 +0000 Message-Id: <20220529061853.3044893-6-Qing-wu.Li@leica-geosystems.com.cn> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220529061853.3044893-1-Qing-wu.Li@leica-geosystems.com.cn> References: <20220529061853.3044893-1-Qing-wu.Li@leica-geosystems.com.cn> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3af195a1-3923-4b59-fc6f-08da413b1f27 X-MS-TrafficTypeDiagnostic: GV1PR06MB8404:EE_ X-MS-Exchange-AtpMessageProperties: SA|SL X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: O0EZ1pkT8sfcpMt8VvhO39bZHe+4oWPVM0nfWMru8UHFOjA9FjoB6g2WZo4bbCpsTDbLoLhL5Usp4Quay/sgcgb0AuOApNWYQvESYLr35YwS0cFvoBZjF1R/srxFPEklZSSgmN42J2UHMIvtS6OK4wuYeLR/zHL7QhT14/MokkTw4vX4XQkm3v3cTikJKWanrMDGIhnlOGvdamrgZxA/N2Qh0x4V449cDPKQitFUOdlfCdzs6acYYr4XIP2ZAoO8yYfSM0M/+cMB0nh6B/kEfK6ACmX0FfPE+N45zaNRza8IC5gXIJ6VEvK8bFvMyF8+mkHtTP+nuNF5cpbzClzlU9EKt3v7jeyCXvz4WJm3lRGUeUXWUIcbm6Wi5SJ2A7sW5Sz4gWzWhCcmWJRS4aTmOySUCwl0DlzpTo6hcS+9lV9IFHWCTIcku8DZDD527T8pUrGFvD/V5X07/NPSPMAc3ZYIqJjI7Nh+rIheYrFZ3wnTnF+IT3bkbOYmLdz6F4RRs0gJOO4FQpNCSYiMl01VPlVzxYhNfK0ATTGRyiYgklMmpcqRF2MfTElkzcTWhgCR4Ba7l+hrwbWHCXmou7i5pHHHPq1tzx0jxGtYjWT6ADQUiq09A3VPIQoiM3WDghWgOYhk6wOBKhsP+0SF1yIIUMASwy3iwrN9oI5IbcOHBWcL/rxIPYyQdQ0PMvhXyZfC X-Forefront-Antispam-Report: CIP:193.8.40.94;CTRY:CH;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:aherlnxbspsrv01.lgs-net.com;PTR:ahersrvdom50.leica-geosystems.com;CAT:NONE;SFS:(13230001)(4636009)(36840700001)(40470700004)(46966006)(356005)(956004)(2616005)(8676002)(6512007)(70586007)(70206006)(316002)(4326008)(5660300002)(82310400005)(36736006)(26005)(36756003)(81166007)(118246002)(186003)(6666004)(336012)(6506007)(2906002)(47076005)(6486002)(508600001)(8936002)(83380400001)(36860700001)(1076003)(86362001)(40460700003);DIR:OUT;SFP:1102; X-OriginatorOrg: leica-geosystems.com.cn X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 May 2022 06:19:00.5592 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3af195a1-3923-4b59-fc6f-08da413b1f27 X-MS-Exchange-CrossTenant-Id: 1b16ab3e-b8f6-4fe3-9f3e-2db7fe549f6a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=1b16ab3e-b8f6-4fe3-9f3e-2db7fe549f6a;Ip=[193.8.40.94];Helo=[aherlnxbspsrv01.lgs-net.com] X-MS-Exchange-CrossTenant-AuthSource: VE1EUR02FT016.eop-EUR02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR06MB8404 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org Different from SCA3300, SCL3300 can output inclination angles. Angles are formed from acceleration with following equations: ANG_X = atan2(accx , sqrt(pow(accy , 2) + pow(accz , 2))) ANG_Y = atan2(accy , sqrt(pow(accx , 2) + pow(accz , 2))) ANG_Z = atan2(accz , sqrt(pow(accx , 2) + pow(accy , 2))) The commit adds the output of the raw value, scale and scale_available of angles. New interfaces: in_incli_scale in_incli_scale_available in_incli_x_raw in_incli_y_raw in_incli_z_raw Data converted by application of scale to degrees. Signed-off-by: LI Qingwu --- drivers/iio/accel/sca3300.c | 76 +++++++++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 3 deletions(-) diff --git a/drivers/iio/accel/sca3300.c b/drivers/iio/accel/sca3300.c index 9683dce21073..861f6906beee 100644 --- a/drivers/iio/accel/sca3300.c +++ b/drivers/iio/accel/sca3300.c @@ -44,12 +44,18 @@ #define SCA3300_VALUE_RS_ERROR 0x3 #define SCA3300_MASK_RS_STATUS GENMASK(1, 0) +#define SCL3300_REG_ANG_CTRL 0x0C +#define SCL3300_ANG_ENABLE 0x1F + enum sca3300_scan_indexes { SCA3300_ACC_X = 0, SCA3300_ACC_Y, SCA3300_ACC_Z, SCA3300_TEMP, SCA3300_TIMESTAMP, + SCA3300_INCLI_X, + SCA3300_INCLI_Y, + SCA3300_INCLI_Z, }; #define SCA3300_ACCEL_CHANNEL(index, reg, axis) { \ @@ -73,6 +79,23 @@ enum sca3300_scan_indexes { }, \ } +#define SCA3300_INCLI_CHANNEL(index, reg, axis) { \ + .type = IIO_INCLI, \ + .address = reg, \ + .modified = 1, \ + .channel2 = IIO_MOD_##axis, \ + .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \ + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ + .info_mask_shared_by_type_available = BIT(IIO_CHAN_INFO_SCALE), \ + .scan_index = index, \ + .scan_type = { \ + .sign = 's', \ + .realbits = 16, \ + .storagebits = 16, \ + .endianness = IIO_CPU, \ + }, \ +} + #define SCA3300_TEMP_CHANNEL(index, reg) { \ .type = IIO_TEMP, \ .address = reg, \ @@ -106,15 +129,36 @@ static const int sca3300_accel_scale_map[] = {0, 1, 2, 2}; static const int scl3300_accel_scale[][2] = {{0, 167}, {0, 333}, {0, 83}}; static const int scl3300_accel_scale_map[] = {0, 1, 2}; +static const int scl3300_incli_scale[][2] = {{0, 5495}}; +static const int scl3300_incli_scale_map[] = {0, 0, 0}; + static const int sca3300_avail_modes_map[] = {0, 1, 2, 3}; static const int scl3300_avail_modes_map[] = {0, 1, 3}; +static const struct iio_chan_spec scl3300_channels[] = { + SCA3300_ACCEL_CHANNEL(SCA3300_ACC_X, 0x1, X), + SCA3300_ACCEL_CHANNEL(SCA3300_ACC_Y, 0x2, Y), + SCA3300_ACCEL_CHANNEL(SCA3300_ACC_Z, 0x3, Z), + SCA3300_TEMP_CHANNEL(SCA3300_TEMP, 0x05), + IIO_CHAN_SOFT_TIMESTAMP(4), + SCA3300_INCLI_CHANNEL(SCA3300_INCLI_X, 0x09, X), + SCA3300_INCLI_CHANNEL(SCA3300_INCLI_Y, 0x0A, Y), + SCA3300_INCLI_CHANNEL(SCA3300_INCLI_Z, 0x0B, Z), +}; + static const unsigned long sca3300_scan_masks[] = { BIT(SCA3300_ACC_X) | BIT(SCA3300_ACC_Y) | BIT(SCA3300_ACC_Z) | BIT(SCA3300_TEMP), 0 }; +static const unsigned long scl3300_scan_masks[] = { + BIT(SCA3300_ACC_X) | BIT(SCA3300_ACC_Y) | BIT(SCA3300_ACC_Z) | + BIT(SCA3300_TEMP) | + BIT(SCA3300_INCLI_X) | BIT(SCA3300_INCLI_Y) | BIT(SCA3300_INCLI_Z), + 0 +}; + struct sca3300_chip_info { const char *name; const unsigned long *scan_masks; @@ -123,12 +167,16 @@ struct sca3300_chip_info { u8 num_accel_scales; const int (*accel_scale)[2]; const int *accel_scale_map; + const int (*incli_scale)[2]; + const int *incli_scale_map; + u8 num_incli_scales; u8 num_freqs; const int *freq_table; const int *freq_map; const int *avail_modes_table; u8 num_avail_modes; u8 chip_id; + bool angle_supported; }; /** @@ -167,21 +215,26 @@ static const struct sca3300_chip_info sca3300_chip_tbl[] = { .avail_modes_table = sca3300_avail_modes_map, .num_avail_modes = 4, .chip_id = SCA3300_WHOAMI_ID, + .angle_supported = false, }, { .name = "scl3300", - .scan_masks = sca3300_scan_masks, - .channels = sca3300_channels, - .num_channels = ARRAY_SIZE(sca3300_channels), + .scan_masks = scl3300_scan_masks, + .channels = scl3300_channels, + .num_channels = ARRAY_SIZE(scl3300_channels), .num_accel_scales = ARRAY_SIZE(scl3300_accel_scale)*2, .accel_scale = scl3300_accel_scale, .accel_scale_map = scl3300_accel_scale_map, + .incli_scale = scl3300_incli_scale, + .incli_scale_map = scl3300_incli_scale_map, + .num_incli_scales = ARRAY_SIZE(scl3300_incli_scale)*2, .num_freqs = ARRAY_SIZE(scl3300_lp_freq), .freq_table = scl3300_lp_freq, .freq_map = scl3300_lp_freq_map, .avail_modes_table = scl3300_avail_modes_map, .num_avail_modes = 3, .chip_id = SCL3300_WHOAMI_ID, + .angle_supported = true, }, }; @@ -400,6 +453,11 @@ static int sca3300_read_raw(struct iio_dev *indio_dev, if (ret) return ret; switch (chan->type) { + case IIO_INCLI: + index = data->chip->incli_scale_map[index]; + *val = data->chip->incli_scale[index][0]; + *val2 = data->chip->incli_scale[index][1]; + return IIO_VAL_INT_PLUS_MICRO; case IIO_ACCEL: index = data->chip->accel_scale_map[index]; *val = data->chip->accel_scale[index][0]; @@ -486,6 +544,13 @@ static int sca3300_init(struct sca3300_data *sca_data, sca_data->chip = &sca3300_chip_tbl[i]; + if (sca_data->chip->angle_supported) { + ret = sca3300_write_reg(sca_data, SCL3300_REG_ANG_CTRL, + SCL3300_ANG_ENABLE); + if (ret) + return ret; + } + return 0; } @@ -521,6 +586,11 @@ static int sca3300_read_avail(struct iio_dev *indio_dev, switch (mask) { case IIO_CHAN_INFO_SCALE: switch (chan->type) { + case IIO_INCLI: + *vals = (const int *)data->chip->incli_scale; + *length = data->chip->num_incli_scales; + *type = IIO_VAL_INT_PLUS_MICRO; + return IIO_AVAIL_LIST; case IIO_ACCEL: *vals = (const int *)data->chip->accel_scale; *length = data->chip->num_accel_scales;