From nobody Fri Jun 19 17:03:18 2026 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 A7F64C433FE for ; Thu, 31 Mar 2022 14:03:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237174AbiCaOFn (ORCPT ); Thu, 31 Mar 2022 10:05:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34586 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237160AbiCaOFk (ORCPT ); Thu, 31 Mar 2022 10:05:40 -0400 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2058.outbound.protection.outlook.com [40.107.244.58]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6026251586; Thu, 31 Mar 2022 07:03:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cM+qCTRvntF9RDlTZ4ZAVmcToA5fbD8fovr42wsRMcGJhEB+Y7WPMvEVKnmYlIL3zIYI5/PGUq5DiLux8f+JPy5+0HmshP8EXRRdx6qsAlMcc8hK1DmLA5NL3ZonUBCWvOrOp4KrRQpN8ddJekkLGhWTL0/Q0KG1ll5aAxx6mGYo95wASM3MQx4XFZV6CAN639bDUJC94PBom8C8PL2wwGrp1RMAKRMIwBDaSm8vHVfjRpdf9Mi8T/7RLgnEc3OljTbWlxxRfNwNn1P7j9Vkhbc3TOONSSJTvMe/dHW3e0G4CPlV9gUFNsBeg/Aaz2k1CfAkRf7bqY1oDaHBDL3oTw== 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=8kaSMl4l3yOuOYqRVKCvJZQR+BIGjkX2obubDkXDwxA=; b=SneDzsUq7M90IGi5NOSkbCki7lOyULNZCNGl239GH+reN0RpFUpYOHtTSmAAa374oPlrih/kYutqbmtVDLUOIqEXk4xVhVGQqo0SeOlDJb12+/suUZ3lAmLNyN4T/a6jCQFj1mrUfanEpptIcd4we8jaWGnZCqXOUttdfMI54vVsvCa3GQFBBdTetJf/rC4mKldoZ3JBC3yiHtPI0jYBnrMTyvvPHXJCSDljncI4juHMXjtr4jVBSDl7WMXY+C4TyI3qjr6tsztjPtrXNUbhXtCFZXXcqFmYs5Yb3v+4ZDxFHedCEiuzTxKKYwWxeEa4YQcJ/1W3+wgxrjcFEsqu+Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 12.22.5.236) smtp.rcpttodomain=alsa-project.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8kaSMl4l3yOuOYqRVKCvJZQR+BIGjkX2obubDkXDwxA=; b=b2PKXL2dWfRWLcOn9OR/h9wbcO2ovaV3UaApXJywEdw14y65sSJJ9aNDJttQUtZSBK1aBgFpDkTKil1o4e07EQ92MRadNLwOc/pjEHORzoU5iHjIc2ZjoahdBqsvdUxejDbSJOX2Cyb4GCEymrns7ob7UBEfPPThXRPx7vI/sVuqXQp499ptYuTVNwKnhm3wmg0vdCjIXFAW0HT7PyQ2/fuBh3btWPPyosY2+UxniSRO7/sncD4PGHT88yBWpWEBwaTdGa+bcDP1odpvWvsrS2W6Be7PUby5Vbpszc8W4f3MI1pT1jjdaT8GSxteYv5uTbshSZVUuiL2HscQng/fGQ== Received: from BN6PR22CA0031.namprd22.prod.outlook.com (2603:10b6:404:37::17) by DM6PR12MB2875.namprd12.prod.outlook.com (2603:10b6:5:15c::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5102.22; Thu, 31 Mar 2022 14:03:51 +0000 Received: from BN8NAM11FT021.eop-nam11.prod.protection.outlook.com (2603:10b6:404:37:cafe::13) by BN6PR22CA0031.outlook.office365.com (2603:10b6:404:37::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.23 via Frontend Transport; Thu, 31 Mar 2022 14:03:51 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 12.22.5.236) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 12.22.5.236 as permitted sender) receiver=protection.outlook.com; client-ip=12.22.5.236; helo=mail.nvidia.com; Received: from mail.nvidia.com (12.22.5.236) by BN8NAM11FT021.mail.protection.outlook.com (10.13.177.114) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.5123.19 via Frontend Transport; Thu, 31 Mar 2022 14:03:50 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by DRHQMAIL109.nvidia.com (10.27.9.19) with Microsoft SMTP Server (TLS) id 15.0.1497.32; Thu, 31 Mar 2022 14:03:50 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Thu, 31 Mar 2022 07:03:49 -0700 Received: from audio.nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.8) with Microsoft SMTP Server id 15.2.986.22 via Frontend Transport; Thu, 31 Mar 2022 07:03:45 -0700 From: Sameer Pujar To: , , , , , , CC: , , , , , , , , Sameer Pujar Subject: [PATCH v2 1/6] ASoC: tegra: Add binding doc for ASRC module Date: Thu, 31 Mar 2022 19:33:27 +0530 Message-ID: <1648735412-32220-2-git-send-email-spujar@nvidia.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1648735412-32220-1-git-send-email-spujar@nvidia.com> References: <1648735412-32220-1-git-send-email-spujar@nvidia.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3586f027-7fd8-45ab-047c-08da131f48a7 X-MS-TrafficTypeDiagnostic: DM6PR12MB2875: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: FLoA5WfJg7cqzr0E6/DE0Ux/kp2mwOwkmMr5YOmez0zZLq4aPENRlvukw3tmn3djY0F54ozoNyzsYvqdBb2nJc+o2KYzkd5+gW/v3U+Wq1aRjUQb3FitVjYz7R3hhW47CBD3O3W+uT9rCPPLAcSU9m4lVGZuO+xIgFyKWmsH9i9RvIhtkzXagR0wHOTBpAmZcjnSnqNE2QVTKD6XTT4HF4ViwQnOg6siT86EC0JyKYsBwU/GJGps6FLPwFXk7jbYYKj5131HCOLKY5usg+LQM87XcI81XyQsNdXI5bliLpcf+lHEHth3EIKwwZFNGE/uItqKRvjr8g3yPUdEleefAnVHGDZWm2EPuzT5ix3eMIIO5oxIz5e0OQOIm/ZcVIDjkdH6TvTOhM6Cwj8PQu5A9xanWlid8eEYszV39uA3sVh0zA9LLGM7CKGwVa+5/OEIHXlAYP7mxItJBBUqXRhOQSIbbCunl788n//5L5TDGh/dMc0TTvnsjJhWoOPfT9/twWTpMgZPniTpnVAsGV84c/IaSMY3ltREDWYVgi1pf2037Rgw6OzkAlk9iQ52XOOkvGSUw6jirU5+QeqhFLPerJrI3uB7Keqzw6TfhGnpDwmfY9Dz9P8cawAI+e1tCcwYn+A9Y6m5RTWHl4TeIoU+LT+c7g2psVpmzTMBPdQ1mSsdgjO7qtlpnJze9a9Yk5HxuFZqjsA+3sE7eDpWeudbAK8WsnrjjS4aQyd87SGqXkTRYSekGGygAHoJlAlBDfwEz+uqP3ug0c57oukdiyCxk/+WSvViK9tg4ttbTSXdH09h3qEZzphR8ZYzBFpxSWTaGkuq+nwarKY0SUxlpaqZ+Q== X-Forefront-Antispam-Report: CIP:12.22.5.236;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:mail.nvidia.com;PTR:InfoNoRecords;CAT:NONE;SFS:(13230001)(4636009)(46966006)(36840700001)(40470700004)(36860700001)(8936002)(7416002)(7696005)(81166007)(70206006)(8676002)(82310400004)(86362001)(70586007)(47076005)(508600001)(2906002)(966005)(316002)(6666004)(4326008)(2616005)(5660300002)(107886003)(186003)(356005)(336012)(426003)(54906003)(26005)(40460700003)(36756003)(110136005)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Mar 2022 14:03:50.8447 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3586f027-7fd8-45ab-047c-08da131f48a7 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[12.22.5.236];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT021.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB2875 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This patch adds YAML schema for DT bindings of Asynchronous Sample Rate Converter (ASRC) module. It will be registered as an ASoC component and can be plugged into an audio path as per need via ALSA mixer controls. The bindings are applicable on Tegra186 and later where the ASRC device is present. Signed-off-by: Sameer Pujar --- .../bindings/sound/nvidia,tegra186-asrc.yaml | 81 ++++++++++++++++++= ++++ .../bindings/sound/nvidia,tegra210-ahub.yaml | 4 ++ 2 files changed, 85 insertions(+) create mode 100644 Documentation/devicetree/bindings/sound/nvidia,tegra186= -asrc.yaml diff --git a/Documentation/devicetree/bindings/sound/nvidia,tegra186-asrc.y= aml b/Documentation/devicetree/bindings/sound/nvidia,tegra186-asrc.yaml new file mode 100644 index 0000000..520d0d0 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/nvidia,tegra186-asrc.yaml @@ -0,0 +1,81 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/sound/nvidia,tegra186-asrc.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Tegra186 ASRC Device Tree Bindings + +description: | + Asynchronous Sample Rate Converter (ASRC) converts the sampling frequency + of the input signal from one frequency to another. It can handle over a + wide range of sample rate ratios (freq_in/freq_out) from 1:24 to 24:1. + ASRC has two modes of operation. One where ratio can be programmed in SW + and the other where it gets the information from ratio estimator module. + + It supports sample rate conversions in the range of 8 to 192 kHz and + supports 6 streams upto 12 total channels. The input data size can be + 16, 24 and 32 bits. + +maintainers: + - Jon Hunter + - Mohan Kumar + - Sameer Pujar + +allOf: + - $ref: name-prefix.yaml# + +properties: + $nodename: + pattern: "^asrc@[0-9a-f]*$" + + compatible: + oneOf: + - const: nvidia,tegra186-asrc + - items: + - enum: + - nvidia,tegra234-asrc + - nvidia,tegra194-asrc + - const: nvidia,tegra186-asrc + + reg: + maxItems: 1 + + sound-name-prefix: + pattern: "^ASRC[1-9]$" + + ports: + $ref: /schemas/graph.yaml#/properties/ports + description: | + ASRC has seven input ports and six output ports. Accordingly ACIF + (Audio Client Interfaces) port nodes are defined to represent the + ASRC inputs (port 0 to 6) and outputs (port 7 to 12). These are + connected to corresponding ports on AHUB (Audio Hub). Additional + input (port 6) is for receiving ratio information from estimator. + + patternProperties: + '^port@[0-6]': + $ref: audio-graph-port.yaml# + unevaluatedProperties: false + description: ASRC ACIF input ports + '^port@[7-9]|1[1-2]': + $ref: audio-graph-port.yaml# + unevaluatedProperties: false + description: ASRC ACIF output ports + +required: + - compatible + - reg + +additionalProperties: false + +examples: + - | + + asrc@2910000 { + compatible =3D "nvidia,tegra186-asrc"; + reg =3D <0x2910000 0x2000>; + sound-name-prefix =3D "ASRC1"; + }; + +... diff --git a/Documentation/devicetree/bindings/sound/nvidia,tegra210-ahub.y= aml b/Documentation/devicetree/bindings/sound/nvidia,tegra210-ahub.yaml index 4727f1e..6df6f85 100644 --- a/Documentation/devicetree/bindings/sound/nvidia,tegra210-ahub.yaml +++ b/Documentation/devicetree/bindings/sound/nvidia,tegra210-ahub.yaml @@ -106,6 +106,10 @@ patternProperties: type: object $ref: nvidia,tegra210-mixer.yaml# =20 + '^asrc@[0-9a-f]+$': + type: object + $ref: nvidia,tegra186-asrc.yaml# + required: - compatible - reg --=20 2.7.4 From nobody Fri Jun 19 17:03:18 2026 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 421F2C433F5 for ; Thu, 31 Mar 2022 14:04:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237237AbiCaOF7 (ORCPT ); Thu, 31 Mar 2022 10:05:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35824 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237185AbiCaOFy (ORCPT ); Thu, 31 Mar 2022 10:05:54 -0400 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2061.outbound.protection.outlook.com [40.107.92.61]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C22185A165; Thu, 31 Mar 2022 07:04:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DiO5As/dTrT4bji0UF/pHjUCanBu/nEIv86pHetxg5CwG4bkrTBSPtOjhXHWqKdGkwP4TE9igacDc59cOxW2FPEU0LYF9e5y398eUM5QaNBuGhztGOt4OuqnBYvIuElXc3k32C3AF35mQNagYmM8jvLlkmym/U4r1h6M8DsLnUloqiSqW/eT4p9riG8wPCTU7k+glzG5giY59J9AaNYVQ+8xOtqmaltWRrIGa073L3oJFrqdjdd1WwnBHxVbrX0+nNh6akeS0xrTDGW4thdqH9u3DwtZq6ErWACyhyFkmWTUlM9dOr7zYzueCVXOe1xVuxA5NovG0Dn4RRohYKepUg== 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=vJd88mxQOrNTUrmgCCLfUV+rP+BZp4hs900KT8rMUBI=; b=fUN4/txt4b/KYZyIF5pPQRFFldbWUHXY1KGI12RErMKDDZoafRZ8IE9AI3bnOu2cey+2WrnuhorPwWkGP7T0bFPGqpmkR7K9lbmPl7jkn6cObENVK3tm7+vArBKuKDYL/ABe9Wn/CfPQ9gUa9T3rcmSRjeIhua8vha0ldSrePkfuCl/5uFQGTVsmaAjo/DnwW8zdx1i1BXW7UugV3mBFyfZ8UViyDLJJLUAC5AtS6RFkQLtBQjOwLYF5wRpYKLztABWfvfzX74HL9vzuiNkIwyZxstvbzUM2W9iZSSn7DeK8YBAe7Izcfs2fyKtRn/EAiPzImFiyHJIzDeY1pmHdDQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 12.22.5.235) smtp.rcpttodomain=alsa-project.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vJd88mxQOrNTUrmgCCLfUV+rP+BZp4hs900KT8rMUBI=; b=gSGqOWgC25RatMqaSLBLFTt63pjxkCa9JOMOXYSybTipR8oJzWo0vy9U92/LnYivJ7K+E/E9LLsWE3Jmnw+GqQ6czY9VD8REvI0cH3oMWOR7OPk/27CxZO9JliFrOlk8dziv9yR6umYz3X8H3yjaD0sj/EgZ1pPo7ZkBxK8swuXTUt3lnpxMVWT9g7q7fFR9pt1ZdZM57C2UTFrEdQv6MYnIKDKVrot/ZXQp1S3usWwZK6f2wYfczNftWting2hAFnLZ44KBl4P16pz26h7I9ikKbN4s4WAEPBfy4NsaXUzQwuyTnYpwB/B9NpYwY1RQ6zwMM2Vo1EW5sjttvzHmhA== Received: from BN9PR03CA0241.namprd03.prod.outlook.com (2603:10b6:408:ff::6) by MW5PR12MB5621.namprd12.prod.outlook.com (2603:10b6:303:193::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5102.22; Thu, 31 Mar 2022 14:03:58 +0000 Received: from BN8NAM11FT036.eop-nam11.prod.protection.outlook.com (2603:10b6:408:ff:cafe::2b) by BN9PR03CA0241.outlook.office365.com (2603:10b6:408:ff::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.13 via Frontend Transport; Thu, 31 Mar 2022 14:03:57 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 12.22.5.235) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 12.22.5.235 as permitted sender) receiver=protection.outlook.com; client-ip=12.22.5.235; helo=mail.nvidia.com; Received: from mail.nvidia.com (12.22.5.235) by BN8NAM11FT036.mail.protection.outlook.com (10.13.177.168) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.5123.19 via Frontend Transport; Thu, 31 Mar 2022 14:03:55 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by DRHQMAIL107.nvidia.com (10.27.9.16) with Microsoft SMTP Server (TLS) id 15.0.1497.32; Thu, 31 Mar 2022 14:03:55 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Thu, 31 Mar 2022 07:03:53 -0700 Received: from audio.nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.8) with Microsoft SMTP Server id 15.2.986.22 via Frontend Transport; Thu, 31 Mar 2022 07:03:49 -0700 From: Sameer Pujar To: , , , , , , CC: , , , , , , , , Sameer Pujar Subject: [PATCH v2 2/6] ASoC: tegra: Add Tegra186 based ASRC driver Date: Thu, 31 Mar 2022 19:33:28 +0530 Message-ID: <1648735412-32220-3-git-send-email-spujar@nvidia.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1648735412-32220-1-git-send-email-spujar@nvidia.com> References: <1648735412-32220-1-git-send-email-spujar@nvidia.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 39b82fef-8f60-4035-d1f3-08da131f4bbb X-MS-TrafficTypeDiagnostic: MW5PR12MB5621: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: QCdcMB9QuIs0LgyBGJcvi0IXLAOQaCUTlTSEU6gOUqepRIcTH90RLfgZB0NycovlWoRtVOjE2UqieBtPO8PksQZGI8zfOPcx5utNyBbcku84JLynnmqBMr2Ae3kMDk9MjXq1DXYgYfr6FawsXGzomolmTcpHPf8N6iRvO6RfDQdSuxG/VNag60LHpjTKPtBO8TDr5qTb8NzgWCYXZmPOkhD8BwvGVFBqh0Ttr0ZhABtcmBznq3OF+oP0jWrqRcX/FLjgcRFKgY5BkAYGW1Y968SSK/rMO2kcyyAnCAFnNVinpLVUaXpAnEq1rcG2ELdmt9dQ+oxDeHbpxOq3Coru/M0L+vt/DdS8FRuQel4bWmfiKmwPadcpqIAhPY9VrnnxIF2foxGqEIFDJU0i6X5yemPx27ux0AdTutJYOXtcYaXCAvksBY1zqN3C5GyJNVsfVhpuIlbic+otspyH9aUOK7aepsmbkMRYnseAyHgmDrmDQJB5HobOAxsiefzg0fUM0p7pB9OtJqg0m8p07UtnxgUeLaSDNM6Xxu1S/YCorj8IpVeMlnIRfw67Ifb7cyg2xX+1Fb0N8RpWTi8wxU0VHeOa9Y5R1zEOLz5zSXieWuw6YEhLBrHci4vxwg3MEM7lRL3qhtGyB3v0chV2Xi9NShI1U9X7ebevD5T3d6HDqf4LUCo8Tvdz6YCzgjulGrMEJO2Nks4uq0kcjIetuGlAtg== X-Forefront-Antispam-Report: CIP:12.22.5.235;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:mail.nvidia.com;PTR:ErrorRetry;CAT:NONE;SFS:(13230001)(4636009)(40470700004)(36840700001)(46966006)(7696005)(70586007)(2616005)(47076005)(86362001)(8676002)(36756003)(4326008)(54906003)(8936002)(316002)(2906002)(70206006)(6666004)(508600001)(110136005)(107886003)(426003)(40460700003)(82310400004)(36860700001)(186003)(5660300002)(336012)(30864003)(26005)(81166007)(83380400001)(7416002)(356005)(36900700001)(579004);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Mar 2022 14:03:55.9360 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 39b82fef-8f60-4035-d1f3-08da131f4bbb X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[12.22.5.235];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT036.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR12MB5621 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Asynchronous Sample Rate Converter (ASRC) converts the sampling frequency of the input signal from one frequency to another. It can handle over a wide range of sample rate ratios (freq_in/freq_out) from 1:24 to 24:1. ASRC has two modes of operation. One where ratio can be programmed in SW and the other where it gets the information from ratio estimator module. The latter mode above can help address the cases where the sample rate is not known at the stream set up time or is potentially time varying. In addition, the ratio between input and output sample rate can be any arbitrary number and the input and output clocks could be derived from asynchronous clocks. This patch registers ASRC driver with ASoC framework. The component driver exposes DAPM widgets, routes and kcontrols for the device. The DAI driver exposes ASRC interfaces, which can be used to connect different components in the ASoC layer. Makefile and Kconfig support is added to allow build the driver. Signed-off-by: Sameer Pujar --- sound/soc/tegra/Kconfig | 12 + sound/soc/tegra/Makefile | 2 + sound/soc/tegra/tegra186_asrc.c | 1046 +++++++++++++++++++++++++++++++++++= ++++ sound/soc/tegra/tegra186_asrc.h | 112 +++++ 4 files changed, 1172 insertions(+) create mode 100644 sound/soc/tegra/tegra186_asrc.c create mode 100644 sound/soc/tegra/tegra186_asrc.h diff --git a/sound/soc/tegra/Kconfig b/sound/soc/tegra/Kconfig index cd45487..2482d98 100644 --- a/sound/soc/tegra/Kconfig +++ b/sound/soc/tegra/Kconfig @@ -85,6 +85,18 @@ config SND_SOC_TEGRA210_I2S compatible devices. Say Y or M if you want to add support for Tegra210 I2S module. =20 +config SND_SOC_TEGRA186_ASRC + tristate "Tegra186 ASRC module" + help + Config to enable the Asynchronous Sample Rate Converter (ASRC), + which converts the sampling frequency of the input signal from + one frequency to another. It can handle over a wide range of + sample rate ratios (freq_in/freq_out) from 1:24 to 24:1. + ASRC has two modes of operation. One where ratio can be programmed + in SW and the other where it gets information from ratio estimator + module. + Say Y or M if you want to add support for Tegra186 ASRC module. + config SND_SOC_TEGRA186_DSPK tristate "Tegra186 DSPK module" help diff --git a/sound/soc/tegra/Makefile b/sound/soc/tegra/Makefile index f19d566..70a498d 100644 --- a/sound/soc/tegra/Makefile +++ b/sound/soc/tegra/Makefile @@ -11,6 +11,7 @@ snd-soc-tegra30-i2s-objs :=3D tegra30_i2s.o snd-soc-tegra210-ahub-objs :=3D tegra210_ahub.o snd-soc-tegra210-dmic-objs :=3D tegra210_dmic.o snd-soc-tegra210-i2s-objs :=3D tegra210_i2s.o +snd-soc-tegra186-asrc-objs :=3D tegra186_asrc.o snd-soc-tegra186-dspk-objs :=3D tegra186_dspk.o snd-soc-tegra210-admaif-objs :=3D tegra210_admaif.o snd-soc-tegra210-mvc-objs :=3D tegra210_mvc.o @@ -29,6 +30,7 @@ obj-$(CONFIG_SND_SOC_TEGRA30_I2S) +=3D snd-soc-tegra30-i2= s.o obj-$(CONFIG_SND_SOC_TEGRA210_DMIC) +=3D snd-soc-tegra210-dmic.o obj-$(CONFIG_SND_SOC_TEGRA210_AHUB) +=3D snd-soc-tegra210-ahub.o obj-$(CONFIG_SND_SOC_TEGRA210_I2S) +=3D snd-soc-tegra210-i2s.o +obj-$(CONFIG_SND_SOC_TEGRA186_ASRC) +=3D snd-soc-tegra186-asrc.o obj-$(CONFIG_SND_SOC_TEGRA186_DSPK) +=3D snd-soc-tegra186-dspk.o obj-$(CONFIG_SND_SOC_TEGRA210_ADMAIF) +=3D snd-soc-tegra210-admaif.o obj-$(CONFIG_SND_SOC_TEGRA210_MVC) +=3D snd-soc-tegra210-mvc.o diff --git a/sound/soc/tegra/tegra186_asrc.c b/sound/soc/tegra/tegra186_asr= c.c new file mode 100644 index 0000000..3c1e20cb --- /dev/null +++ b/sound/soc/tegra/tegra186_asrc.c @@ -0,0 +1,1046 @@ +// SPDX-License-Identifier: GPL-2.0-only +// +// tegra186_asrc.c - Tegra186 ASRC driver +// +// Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "tegra186_asrc.h" +#include "tegra_cif.h" + +#define ASRC_STREAM_SOURCE_SELECT(id) \ + (TEGRA186_ASRC_CFG + ((id) * TEGRA186_ASRC_STREAM_STRIDE)) + +#define ASRC_STREAM_REG(reg, id) ((reg) + ((id) * TEGRA186_ASRC_STREAM_STR= IDE)) + +#define ASRC_STREAM_REG_DEFAULTS(id) \ + { ASRC_STREAM_REG(TEGRA186_ASRC_CFG, id), \ + (((id) + 1) << 4) }, \ + { ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_INT_PART, id), \ + 0x1 }, \ + { ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_FRAC_PART, id), \ + 0x0 }, \ + { ASRC_STREAM_REG(TEGRA186_ASRC_MUTE_UNMUTE_DURATION, id), \ + 0x400 }, \ + { ASRC_STREAM_REG(TEGRA186_ASRC_RX_CIF_CTRL, id), \ + 0x7500 }, \ + { ASRC_STREAM_REG(TEGRA186_ASRC_TX_CIF_CTRL, id), \ + 0x7500 } + +static const struct reg_default tegra186_asrc_reg_defaults[] =3D { + ASRC_STREAM_REG_DEFAULTS(0), + ASRC_STREAM_REG_DEFAULTS(1), + ASRC_STREAM_REG_DEFAULTS(2), + ASRC_STREAM_REG_DEFAULTS(3), + ASRC_STREAM_REG_DEFAULTS(4), + ASRC_STREAM_REG_DEFAULTS(5), + + { TEGRA186_ASRC_GLOBAL_ENB, 0}, + { TEGRA186_ASRC_GLOBAL_SOFT_RESET, 0}, + { TEGRA186_ASRC_GLOBAL_CG, 0x1 }, + { TEGRA186_ASRC_GLOBAL_CFG, 0x0 }, + { TEGRA186_ASRC_GLOBAL_SCRATCH_ADDR, 0}, + { TEGRA186_ASRC_GLOBAL_SCRATCH_CFG, 0x0c207980 }, + { TEGRA186_ASRC_RATIO_UPD_RX_CIF_CTRL, 0x00115500 }, + { TEGRA186_ASRC_GLOBAL_INT_MASK, 0x0}, + { TEGRA186_ASRC_GLOBAL_INT_SET, 0x0}, + { TEGRA186_ASRC_GLOBAL_INT_CLEAR, 0x0}, + { TEGRA186_ASRC_GLOBAL_APR_CTRL, 0x0}, + { TEGRA186_ASRC_GLOBAL_APR_CTRL_ACCESS_CTRL, 0x0}, + { TEGRA186_ASRC_GLOBAL_DISARM_APR, 0x0}, + { TEGRA186_ASRC_GLOBAL_DISARM_APR_ACCESS_CTRL, 0x0}, + { TEGRA186_ASRC_GLOBAL_RATIO_WR_ACCESS, 0x0}, + { TEGRA186_ASRC_GLOBAL_RATIO_WR_ACCESS_CTRL, 0x0}, + { TEGRA186_ASRC_CYA, 0x0}, +}; + +static void tegra186_asrc_lock_stream(struct tegra186_asrc *asrc, + unsigned int id) +{ + regmap_write(asrc->regmap, + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_LOCK_STATUS, + id), + 1); +} + +static int tegra186_asrc_runtime_suspend(struct device *dev) +{ + struct tegra186_asrc *asrc =3D dev_get_drvdata(dev); + + regcache_cache_only(asrc->regmap, true); + regcache_mark_dirty(asrc->regmap); + + return 0; +} + +static int tegra186_asrc_runtime_resume(struct device *dev) +{ + struct tegra186_asrc *asrc =3D dev_get_drvdata(dev); + int id; + + regcache_cache_only(asrc->regmap, false); + + /* + * Below sequence is recommended after a runtime PM cycle. + * This otherwise leads to transfer failures. The cache + * sync is done after this to restore other settings. + */ + regmap_write(asrc->regmap, TEGRA186_ASRC_GLOBAL_SCRATCH_ADDR, + TEGRA186_ASRC_ARAM_START_ADDR); + regmap_write(asrc->regmap, TEGRA186_ASRC_GLOBAL_ENB, + TEGRA186_ASRC_GLOBAL_EN); + + regcache_sync(asrc->regmap); + + for (id =3D 0; id < TEGRA186_ASRC_STREAM_MAX; id++) { + if (asrc->lane[id].ratio_source !=3D + TEGRA186_ASRC_RATIO_SOURCE_SW) + continue; + + regmap_write(asrc->regmap, + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_INT_PART, + id), + asrc->lane[id].int_part); + + regmap_write(asrc->regmap, + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_FRAC_PART, + id), + asrc->lane[id].frac_part); + + tegra186_asrc_lock_stream(asrc, id); + } + + return 0; +} + +static int tegra186_asrc_set_audio_cif(struct tegra186_asrc *asrc, + struct snd_pcm_hw_params *params, + unsigned int reg) +{ + int channels, audio_bits; + struct tegra_cif_conf cif_conf; + + memset(&cif_conf, 0, sizeof(struct tegra_cif_conf)); + + channels =3D params_channels(params); + + switch (params_format(params)) { + case SNDRV_PCM_FORMAT_S16_LE: + audio_bits =3D TEGRA_ACIF_BITS_16; + break; + case SNDRV_PCM_FORMAT_S24_LE: + case SNDRV_PCM_FORMAT_S32_LE: + audio_bits =3D TEGRA_ACIF_BITS_32; + break; + default: + return -EINVAL; + } + + cif_conf.audio_ch =3D channels; + cif_conf.client_ch =3D channels; + cif_conf.audio_bits =3D audio_bits; + cif_conf.client_bits =3D TEGRA_ACIF_BITS_24; + + tegra_set_cif(asrc->regmap, reg, &cif_conf); + + return 0; +} + +static int tegra186_asrc_in_hw_params(struct snd_pcm_substream *substream, + struct snd_pcm_hw_params *params, + struct snd_soc_dai *dai) +{ + struct device *dev =3D dai->dev; + struct tegra186_asrc *asrc =3D snd_soc_dai_get_drvdata(dai); + int ret, id =3D dai->id; + + /* Set input threshold */ + regmap_write(asrc->regmap, + ASRC_STREAM_REG(TEGRA186_ASRC_RX_THRESHOLD, dai->id), + asrc->lane[id].input_thresh); + + ret =3D tegra186_asrc_set_audio_cif(asrc, params, + ASRC_STREAM_REG(TEGRA186_ASRC_RX_CIF_CTRL, dai->id)); + if (ret) { + dev_err(dev, "Can't set ASRC RX%d CIF: %d\n", dai->id, ret); + return ret; + } + + return ret; +} + +static int tegra186_asrc_out_hw_params(struct snd_pcm_substream *substream, + struct snd_pcm_hw_params *params, + struct snd_soc_dai *dai) +{ + struct device *dev =3D dai->dev; + struct tegra186_asrc *asrc =3D snd_soc_dai_get_drvdata(dai); + int ret, id =3D dai->id - 7; + + /* Set output threshold */ + regmap_write(asrc->regmap, + ASRC_STREAM_REG(TEGRA186_ASRC_TX_THRESHOLD, id), + asrc->lane[id].output_thresh); + + ret =3D tegra186_asrc_set_audio_cif(asrc, params, + ASRC_STREAM_REG(TEGRA186_ASRC_TX_CIF_CTRL, id)); + if (ret) { + dev_err(dev, "Can't set ASRC TX%d CIF: %d\n", id, ret); + return ret; + } + + /* Set ENABLE_HW_RATIO_COMP */ + if (asrc->lane[id].hwcomp_disable) { + regmap_update_bits(asrc->regmap, + ASRC_STREAM_REG(TEGRA186_ASRC_CFG, id), + TEGRA186_ASRC_STREAM_ENABLE_HW_RATIO_COMP_MASK, + TEGRA186_ASRC_STREAM_ENABLE_HW_RATIO_COMP_DISABLE); + } else { + regmap_update_bits(asrc->regmap, + ASRC_STREAM_REG(TEGRA186_ASRC_CFG, id), + TEGRA186_ASRC_STREAM_ENABLE_HW_RATIO_COMP_MASK, + TEGRA186_ASRC_STREAM_ENABLE_HW_RATIO_COMP_ENABLE); + + regmap_write(asrc->regmap, + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_COMP, id), + TEGRA186_ASRC_STREAM_DEFAULT_HW_COMP_BIAS_VALUE); + } + + /* Set lock */ + regmap_update_bits(asrc->regmap, + ASRC_STREAM_REG(TEGRA186_ASRC_CFG, id), + 1, asrc->lane[id].ratio_source); + + if (asrc->lane[id].ratio_source =3D=3D TEGRA186_ASRC_RATIO_SOURCE_SW) { + regmap_write(asrc->regmap, + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_INT_PART, id), + asrc->lane[id].int_part); + regmap_write(asrc->regmap, + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_FRAC_PART, id), + asrc->lane[id].frac_part); + tegra186_asrc_lock_stream(asrc, id); + } + + return ret; +} + +static int tegra186_asrc_get_ratio_source(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct soc_enum *asrc_private =3D + (struct soc_enum *)kcontrol->private_value; + struct snd_soc_component *cmpnt =3D snd_soc_kcontrol_component(kcontrol); + struct tegra186_asrc *asrc =3D snd_soc_component_get_drvdata(cmpnt); + unsigned int id =3D asrc_private->reg / TEGRA186_ASRC_STREAM_STRIDE; + + ucontrol->value.enumerated.item[0] =3D asrc->lane[id].ratio_source; + + return 0; +} + +static int tegra186_asrc_put_ratio_source(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct soc_enum *asrc_private =3D + (struct soc_enum *)kcontrol->private_value; + struct snd_soc_component *cmpnt =3D snd_soc_kcontrol_component(kcontrol); + struct tegra186_asrc *asrc =3D snd_soc_component_get_drvdata(cmpnt); + unsigned int id =3D asrc_private->reg / TEGRA186_ASRC_STREAM_STRIDE; + bool change =3D false; + + asrc->lane[id].ratio_source =3D ucontrol->value.enumerated.item[0]; + + regmap_update_bits_check(asrc->regmap, asrc_private->reg, + TEGRA186_ASRC_STREAM_RATIO_TYPE_MASK, + asrc->lane[id].ratio_source, + &change); + + return change ? 1 : 0; +} + +static int tegra186_asrc_get_ratio_int(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct soc_mixer_control *asrc_private =3D + (struct soc_mixer_control *)kcontrol->private_value; + struct snd_soc_component *cmpnt =3D snd_soc_kcontrol_component(kcontrol); + struct tegra186_asrc *asrc =3D snd_soc_component_get_drvdata(cmpnt); + unsigned int id =3D asrc_private->reg / TEGRA186_ASRC_STREAM_STRIDE; + + regmap_read(asrc->regmap, + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_INT_PART, id), + &asrc->lane[id].int_part); + + ucontrol->value.integer.value[0] =3D asrc->lane[id].int_part; + + return 0; +} + +static int tegra186_asrc_put_ratio_int(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct soc_mixer_control *asrc_private =3D + (struct soc_mixer_control *)kcontrol->private_value; + struct snd_soc_component *cmpnt =3D snd_soc_kcontrol_component(kcontrol); + struct tegra186_asrc *asrc =3D snd_soc_component_get_drvdata(cmpnt); + unsigned int id =3D asrc_private->reg / TEGRA186_ASRC_STREAM_STRIDE; + bool change =3D false; + + if (asrc->lane[id].ratio_source =3D=3D TEGRA186_ASRC_RATIO_SOURCE_ARAD) { + dev_err(cmpnt->dev, + "Lane %d ratio source is ARAD, invalid SW update\n", + id); + return -EINVAL; + } + + asrc->lane[id].int_part =3D ucontrol->value.integer.value[0]; + + regmap_update_bits_check(asrc->regmap, + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_INT_PART, + id), + TEGRA186_ASRC_STREAM_RATIO_INT_PART_MASK, + asrc->lane[id].int_part, &change); + + tegra186_asrc_lock_stream(asrc, id); + + return change ? 1 : 0; +} + +static int tegra186_asrc_get_ratio_frac(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct soc_mreg_control *asrc_private =3D + (struct soc_mreg_control *)kcontrol->private_value; + struct snd_soc_component *cmpnt =3D snd_soc_kcontrol_component(kcontrol); + struct tegra186_asrc *asrc =3D snd_soc_component_get_drvdata(cmpnt); + unsigned int id =3D asrc_private->regbase / TEGRA186_ASRC_STREAM_STRIDE; + + regmap_read(asrc->regmap, + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_FRAC_PART, id), + &asrc->lane[id].frac_part); + + ucontrol->value.integer.value[0] =3D asrc->lane[id].frac_part; + + return 0; +} + +static int tegra186_asrc_put_ratio_frac(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct soc_mreg_control *asrc_private =3D + (struct soc_mreg_control *)kcontrol->private_value; + struct snd_soc_component *cmpnt =3D snd_soc_kcontrol_component(kcontrol); + struct tegra186_asrc *asrc =3D snd_soc_component_get_drvdata(cmpnt); + unsigned int id =3D asrc_private->regbase / TEGRA186_ASRC_STREAM_STRIDE; + bool change =3D false; + + if (asrc->lane[id].ratio_source =3D=3D TEGRA186_ASRC_RATIO_SOURCE_ARAD) { + dev_err(cmpnt->dev, + "Lane %d ratio source is ARAD, invalid SW update\n", + id); + return -EINVAL; + } + + asrc->lane[id].frac_part =3D ucontrol->value.integer.value[0]; + + regmap_update_bits_check(asrc->regmap, + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_FRAC_PART, + id), + TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MASK, + asrc->lane[id].frac_part, &change); + + tegra186_asrc_lock_stream(asrc, id); + + return change ? 1 : 0; +} + +static int tegra186_asrc_get_hwcomp_disable(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct soc_mixer_control *asrc_private =3D + (struct soc_mixer_control *)kcontrol->private_value; + struct snd_soc_component *cmpnt =3D snd_soc_kcontrol_component(kcontrol); + struct tegra186_asrc *asrc =3D snd_soc_component_get_drvdata(cmpnt); + unsigned int id =3D asrc_private->reg / TEGRA186_ASRC_STREAM_STRIDE; + + ucontrol->value.integer.value[0] =3D asrc->lane[id].hwcomp_disable; + + return 0; +} + +static int tegra186_asrc_put_hwcomp_disable(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct soc_mixer_control *asrc_private =3D + (struct soc_mixer_control *)kcontrol->private_value; + struct snd_soc_component *cmpnt =3D snd_soc_kcontrol_component(kcontrol); + struct tegra186_asrc *asrc =3D snd_soc_component_get_drvdata(cmpnt); + unsigned int id =3D asrc_private->reg / TEGRA186_ASRC_STREAM_STRIDE; + int value =3D ucontrol->value.integer.value[0]; + + if (value =3D=3D asrc->lane[id].hwcomp_disable) + return 0; + + asrc->lane[id].hwcomp_disable =3D value; + + return 1; +} + +static int tegra186_asrc_get_input_threshold(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct soc_mixer_control *asrc_private =3D + (struct soc_mixer_control *)kcontrol->private_value; + struct snd_soc_component *cmpnt =3D snd_soc_kcontrol_component(kcontrol); + struct tegra186_asrc *asrc =3D snd_soc_component_get_drvdata(cmpnt); + unsigned int id =3D asrc_private->reg / TEGRA186_ASRC_STREAM_STRIDE; + + ucontrol->value.integer.value[0] =3D (asrc->lane[id].input_thresh & 0x3); + + return 0; +} + +static int tegra186_asrc_put_input_threshold(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct soc_mixer_control *asrc_private =3D + (struct soc_mixer_control *)kcontrol->private_value; + struct snd_soc_component *cmpnt =3D snd_soc_kcontrol_component(kcontrol); + struct tegra186_asrc *asrc =3D snd_soc_component_get_drvdata(cmpnt); + unsigned int id =3D asrc_private->reg / TEGRA186_ASRC_STREAM_STRIDE; + int value =3D (asrc->lane[id].input_thresh & ~(0x3)) | + ucontrol->value.integer.value[0]; + + if (value =3D=3D asrc->lane[id].input_thresh) + return 0; + + asrc->lane[id].input_thresh =3D value; + + return 1; +} + +static int tegra186_asrc_get_output_threshold(struct snd_kcontrol *kcontro= l, + struct snd_ctl_elem_value *ucontrol) +{ + struct soc_mixer_control *asrc_private =3D + (struct soc_mixer_control *)kcontrol->private_value; + struct snd_soc_component *cmpnt =3D snd_soc_kcontrol_component(kcontrol); + struct tegra186_asrc *asrc =3D snd_soc_component_get_drvdata(cmpnt); + unsigned int id =3D asrc_private->reg / TEGRA186_ASRC_STREAM_STRIDE; + + ucontrol->value.integer.value[0] =3D (asrc->lane[id].output_thresh & 0x3); + + return 0; +} + +static int tegra186_asrc_put_output_threshold(struct snd_kcontrol *kcontro= l, + struct snd_ctl_elem_value *ucontrol) +{ + struct soc_mixer_control *asrc_private =3D + (struct soc_mixer_control *)kcontrol->private_value; + struct snd_soc_component *cmpnt =3D snd_soc_kcontrol_component(kcontrol); + struct tegra186_asrc *asrc =3D snd_soc_component_get_drvdata(cmpnt); + unsigned int id =3D asrc_private->reg / TEGRA186_ASRC_STREAM_STRIDE; + int value =3D (asrc->lane[id].output_thresh & ~(0x3)) | + ucontrol->value.integer.value[0]; + + if (value =3D=3D asrc->lane[id].output_thresh) + return 0; + + asrc->lane[id].output_thresh =3D value; + + return 1; +} + +static int tegra186_asrc_widget_event(struct snd_soc_dapm_widget *w, + struct snd_kcontrol *kcontrol, int event) +{ + struct snd_soc_component *cmpnt =3D snd_soc_dapm_to_component(w->dapm); + struct tegra186_asrc *asrc =3D dev_get_drvdata(cmpnt->dev); + unsigned int id =3D + (w->reg - TEGRA186_ASRC_ENABLE) / TEGRA186_ASRC_STREAM_STRIDE; + + regmap_write(asrc->regmap, + ASRC_STREAM_REG(TEGRA186_ASRC_SOFT_RESET, id), + 0x1); + + return 0; +} + +static const struct snd_soc_dai_ops tegra186_asrc_in_dai_ops =3D { + .hw_params =3D tegra186_asrc_in_hw_params, +}; + +static const struct snd_soc_dai_ops tegra186_asrc_out_dai_ops =3D { + .hw_params =3D tegra186_asrc_out_hw_params, +}; + +#define IN_DAI(id) \ + { \ + .name =3D "ASRC-RX-CIF"#id, \ + .playback =3D { \ + .stream_name =3D "RX" #id "-CIF-Playback",\ + .channels_min =3D 1, \ + .channels_max =3D 12, \ + .rates =3D SNDRV_PCM_RATE_8000_192000, \ + .formats =3D SNDRV_PCM_FMTBIT_S8 | \ + SNDRV_PCM_FMTBIT_S16_LE | \ + SNDRV_PCM_FMTBIT_S24_LE | \ + SNDRV_PCM_FMTBIT_S32_LE, \ + }, \ + .capture =3D { \ + .stream_name =3D "RX" #id "-CIF-Capture", \ + .channels_min =3D 1, \ + .channels_max =3D 12, \ + .rates =3D SNDRV_PCM_RATE_8000_192000, \ + .formats =3D SNDRV_PCM_FMTBIT_S8 | \ + SNDRV_PCM_FMTBIT_S16_LE | \ + SNDRV_PCM_FMTBIT_S24_LE | \ + SNDRV_PCM_FMTBIT_S32_LE, \ + }, \ + .ops =3D &tegra186_asrc_in_dai_ops, \ + } + +#define OUT_DAI(id) \ + { \ + .name =3D "ASRC-TX-CIF"#id, \ + .playback =3D { \ + .stream_name =3D "TX" #id "-CIF-Playback",\ + .channels_min =3D 1, \ + .channels_max =3D 12, \ + .rates =3D SNDRV_PCM_RATE_8000_192000, \ + .formats =3D SNDRV_PCM_FMTBIT_S8 | \ + SNDRV_PCM_FMTBIT_S16_LE | \ + SNDRV_PCM_FMTBIT_S24_LE | \ + SNDRV_PCM_FMTBIT_S32_LE, \ + }, \ + .capture =3D { \ + .stream_name =3D "TX" #id "-CIF-Capture", \ + .channels_min =3D 1, \ + .channels_max =3D 12, \ + .rates =3D SNDRV_PCM_RATE_8000_192000, \ + .formats =3D SNDRV_PCM_FMTBIT_S8 | \ + SNDRV_PCM_FMTBIT_S16_LE | \ + SNDRV_PCM_FMTBIT_S24_LE | \ + SNDRV_PCM_FMTBIT_S32_LE, \ + }, \ + .ops =3D &tegra186_asrc_out_dai_ops, \ + } + +static struct snd_soc_dai_driver tegra186_asrc_dais[] =3D { + /* ASRC Input */ + IN_DAI(1), + IN_DAI(2), + IN_DAI(3), + IN_DAI(4), + IN_DAI(5), + IN_DAI(6), + IN_DAI(7), + /* ASRC Output */ + OUT_DAI(1), + OUT_DAI(2), + OUT_DAI(3), + OUT_DAI(4), + OUT_DAI(5), + OUT_DAI(6), +}; + +static const struct snd_soc_dapm_widget tegra186_asrc_widgets[] =3D { + SND_SOC_DAPM_AIF_IN("RX1", NULL, 0, SND_SOC_NOPM, 0, 0), + SND_SOC_DAPM_AIF_IN("RX2", NULL, 0, SND_SOC_NOPM, 0, 0), + SND_SOC_DAPM_AIF_IN("RX3", NULL, 0, SND_SOC_NOPM, 0, 0), + SND_SOC_DAPM_AIF_IN("RX4", NULL, 0, SND_SOC_NOPM, 0, 0), + SND_SOC_DAPM_AIF_IN("RX5", NULL, 0, SND_SOC_NOPM, 0, 0), + SND_SOC_DAPM_AIF_IN("RX6", NULL, 0, SND_SOC_NOPM, 0, 0), + SND_SOC_DAPM_AIF_IN("RX7", NULL, 0, SND_SOC_NOPM, 0, 0), + + SND_SOC_DAPM_AIF_OUT_E("TX1", NULL, 0, + ASRC_STREAM_REG(TEGRA186_ASRC_ENABLE, 0), + TEGRA186_ASRC_STREAM_EN_SHIFT, 0, + tegra186_asrc_widget_event, + SND_SOC_DAPM_POST_PMD), + + SND_SOC_DAPM_AIF_OUT_E("TX2", NULL, 0, + ASRC_STREAM_REG(TEGRA186_ASRC_ENABLE, 1), + TEGRA186_ASRC_STREAM_EN_SHIFT, 0, + tegra186_asrc_widget_event, + SND_SOC_DAPM_POST_PMD), + + SND_SOC_DAPM_AIF_OUT_E("TX3", NULL, 0, + ASRC_STREAM_REG(TEGRA186_ASRC_ENABLE, 2), + TEGRA186_ASRC_STREAM_EN_SHIFT, 0, + tegra186_asrc_widget_event, + SND_SOC_DAPM_POST_PMD), + + SND_SOC_DAPM_AIF_OUT_E("TX4", NULL, 0, + ASRC_STREAM_REG(TEGRA186_ASRC_ENABLE, 3), + TEGRA186_ASRC_STREAM_EN_SHIFT, 0, + tegra186_asrc_widget_event, + SND_SOC_DAPM_POST_PMD), + + SND_SOC_DAPM_AIF_OUT_E("TX5", NULL, 0, + ASRC_STREAM_REG(TEGRA186_ASRC_ENABLE, 4), + TEGRA186_ASRC_STREAM_EN_SHIFT, 0, + tegra186_asrc_widget_event, + SND_SOC_DAPM_POST_PMD), + + SND_SOC_DAPM_AIF_OUT_E("TX6", NULL, 0, + ASRC_STREAM_REG(TEGRA186_ASRC_ENABLE, 5), + TEGRA186_ASRC_STREAM_EN_SHIFT, 0, + tegra186_asrc_widget_event, + SND_SOC_DAPM_POST_PMD), + + SND_SOC_DAPM_SPK("Depacketizer", NULL), +}; + +#define ASRC_STREAM_ROUTE(id, sname) \ + { "RX" #id " XBAR-" sname, NULL, "RX" #id " XBAR-TX" }, \ + { "RX" #id "-CIF-" sname, NULL, "RX" #id " XBAR-" sname }, \ + { "RX" #id, NULL, "RX" #id "-CIF-" sname }, \ + { "TX" #id, NULL, "RX" #id }, \ + { "TX" #id "-CIF-" sname, NULL, "TX" #id }, \ + { "TX" #id " XBAR-" sname, NULL, "TX" #id "-CIF-" sname }, \ + { "TX" #id " XBAR-RX", NULL, "TX" #id " XBAR-" sname }, + +#define ASRC_ROUTE(id) \ + ASRC_STREAM_ROUTE(id, "Playback") \ + ASRC_STREAM_ROUTE(id, "Capture") + +#define ASRC_RATIO_ROUTE(sname) \ + { "RX7 XBAR-" sname, NULL, "RX7 XBAR-TX" }, \ + { "RX7-CIF-" sname, NULL, "RX7 XBAR-" sname }, \ + { "RX7", NULL, "RX7-CIF-" sname }, \ + { "Depacketizer", NULL, "RX7" }, + +static const struct snd_soc_dapm_route tegra186_asrc_routes[] =3D { + ASRC_ROUTE(1) + ASRC_ROUTE(2) + ASRC_ROUTE(3) + ASRC_ROUTE(4) + ASRC_ROUTE(5) + ASRC_ROUTE(6) + ASRC_RATIO_ROUTE("Playback") + ASRC_RATIO_ROUTE("Capture") +}; + +static const char * const tegra186_asrc_ratio_source_text[] =3D { + "ARAD", + "SW", +}; + +#define ASRC_SOURCE_DECL(name, id) \ + static const struct soc_enum name =3D \ + SOC_ENUM_SINGLE(ASRC_STREAM_SOURCE_SELECT(id), \ + 0, 2, tegra186_asrc_ratio_source_text) + +ASRC_SOURCE_DECL(src_select1, 0); +ASRC_SOURCE_DECL(src_select2, 1); +ASRC_SOURCE_DECL(src_select3, 2); +ASRC_SOURCE_DECL(src_select4, 3); +ASRC_SOURCE_DECL(src_select5, 4); +ASRC_SOURCE_DECL(src_select6, 5); + +#define SOC_SINGLE_EXT_FRAC(xname, xregbase, xmax, xget, xput) \ +{ \ + .iface =3D SNDRV_CTL_ELEM_IFACE_MIXER, \ + .name =3D (xname), \ + .info =3D snd_soc_info_xr_sx, \ + .get =3D xget, \ + .put =3D xput, \ + \ + .private_value =3D (unsigned long)&(struct soc_mreg_control) \ + { \ + .regbase =3D xregbase, \ + .regcount =3D 1, \ + .nbits =3D 32, \ + .invert =3D 0, \ + .min =3D 0, \ + .max =3D xmax \ + } \ +} + +static const struct snd_kcontrol_new tegra186_asrc_controls[] =3D { + /* Controls for integer part of ratio */ + SOC_SINGLE_EXT("Ratio1 Integer Part", + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_INT_PART, 0), + 0, TEGRA186_ASRC_STREAM_RATIO_INT_PART_MASK, 0, + tegra186_asrc_get_ratio_int, + tegra186_asrc_put_ratio_int), + + SOC_SINGLE_EXT("Ratio2 Integer Part", + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_INT_PART, 1), + 0, TEGRA186_ASRC_STREAM_RATIO_INT_PART_MASK, 0, + tegra186_asrc_get_ratio_int, + tegra186_asrc_put_ratio_int), + + SOC_SINGLE_EXT("Ratio3 Integer Part", + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_INT_PART, 2), + 0, TEGRA186_ASRC_STREAM_RATIO_INT_PART_MASK, 0, + tegra186_asrc_get_ratio_int, + tegra186_asrc_put_ratio_int), + + SOC_SINGLE_EXT("Ratio4 Integer Part", + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_INT_PART, 3), + 0, TEGRA186_ASRC_STREAM_RATIO_INT_PART_MASK, 0, + tegra186_asrc_get_ratio_int, + tegra186_asrc_put_ratio_int), + + SOC_SINGLE_EXT("Ratio5 Integer Part", + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_INT_PART, 4), + 0, TEGRA186_ASRC_STREAM_RATIO_INT_PART_MASK, 0, + tegra186_asrc_get_ratio_int, + tegra186_asrc_put_ratio_int), + + SOC_SINGLE_EXT("Ratio6 Integer Part", + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_INT_PART, 5), + 0, TEGRA186_ASRC_STREAM_RATIO_INT_PART_MASK, 0, + tegra186_asrc_get_ratio_int, + tegra186_asrc_put_ratio_int), + + /* Controls for fractional part of ratio */ + SOC_SINGLE_EXT_FRAC("Ratio1 Fractional Part", + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_FRAC_PART, 0), + TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MASK, + tegra186_asrc_get_ratio_frac, + tegra186_asrc_put_ratio_frac), + + SOC_SINGLE_EXT_FRAC("Ratio2 Fractional Part", + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_FRAC_PART, 1), + TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MASK, + tegra186_asrc_get_ratio_frac, + tegra186_asrc_put_ratio_frac), + + SOC_SINGLE_EXT_FRAC("Ratio3 Fractional Part", + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_FRAC_PART, 2), + TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MASK, + tegra186_asrc_get_ratio_frac, + tegra186_asrc_put_ratio_frac), + + SOC_SINGLE_EXT_FRAC("Ratio4 Fractional Part", + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_FRAC_PART, 3), + TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MASK, + tegra186_asrc_get_ratio_frac, + tegra186_asrc_put_ratio_frac), + + SOC_SINGLE_EXT_FRAC("Ratio5 Fractional Part", + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_FRAC_PART, 4), + TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MASK, + tegra186_asrc_get_ratio_frac, + tegra186_asrc_put_ratio_frac), + + SOC_SINGLE_EXT_FRAC("Ratio6 Fractional Part", + ASRC_STREAM_REG(TEGRA186_ASRC_RATIO_FRAC_PART, 5), + TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MASK, + tegra186_asrc_get_ratio_frac, + tegra186_asrc_put_ratio_frac), + + /* Source of ratio provider */ + SOC_ENUM_EXT("Ratio1 Source", src_select1, + tegra186_asrc_get_ratio_source, + tegra186_asrc_put_ratio_source), + + SOC_ENUM_EXT("Ratio2 Source", src_select2, + tegra186_asrc_get_ratio_source, + tegra186_asrc_put_ratio_source), + + SOC_ENUM_EXT("Ratio3 Source", src_select3, + tegra186_asrc_get_ratio_source, + tegra186_asrc_put_ratio_source), + + SOC_ENUM_EXT("Ratio4 Source", src_select4, + tegra186_asrc_get_ratio_source, + tegra186_asrc_put_ratio_source), + + SOC_ENUM_EXT("Ratio5 Source", src_select5, + tegra186_asrc_get_ratio_source, + tegra186_asrc_put_ratio_source), + + SOC_ENUM_EXT("Ratio6 Source", src_select6, + tegra186_asrc_get_ratio_source, + tegra186_asrc_put_ratio_source), + + /* Disable HW managed overflow/underflow issue at input and output */ + SOC_SINGLE_EXT("Stream1 HW Component Disable", + ASRC_STREAM_REG(TEGRA186_ASRC_CFG, 0), 0, 1, 0, + tegra186_asrc_get_hwcomp_disable, + tegra186_asrc_put_hwcomp_disable), + + SOC_SINGLE_EXT("Stream2 HW Component Disable", + ASRC_STREAM_REG(TEGRA186_ASRC_CFG, 1), 0, 1, 0, + tegra186_asrc_get_hwcomp_disable, + tegra186_asrc_put_hwcomp_disable), + + SOC_SINGLE_EXT("Stream3 HW Component Disable", + ASRC_STREAM_REG(TEGRA186_ASRC_CFG, 2), 0, 1, 0, + tegra186_asrc_get_hwcomp_disable, + tegra186_asrc_put_hwcomp_disable), + + SOC_SINGLE_EXT("Stream4 HW Component Disable", + ASRC_STREAM_REG(TEGRA186_ASRC_CFG, 3), 0, 1, 0, + tegra186_asrc_get_hwcomp_disable, + tegra186_asrc_put_hwcomp_disable), + + SOC_SINGLE_EXT("Stream5 HW Component Disable", + ASRC_STREAM_REG(TEGRA186_ASRC_CFG, 4), 0, 1, 0, + tegra186_asrc_get_hwcomp_disable, + tegra186_asrc_put_hwcomp_disable), + + SOC_SINGLE_EXT("Stream6 HW Component Disable", + ASRC_STREAM_REG(TEGRA186_ASRC_CFG, 5), 0, 1, 0, + tegra186_asrc_get_hwcomp_disable, + tegra186_asrc_put_hwcomp_disable), + + /* Input threshold for watermark fields */ + SOC_SINGLE_EXT("Stream1 Input Threshold", + ASRC_STREAM_REG(TEGRA186_ASRC_RX_THRESHOLD, 0), 0, 3, 0, + tegra186_asrc_get_input_threshold, + tegra186_asrc_put_input_threshold), + + SOC_SINGLE_EXT("Stream2 Input Threshold", + ASRC_STREAM_REG(TEGRA186_ASRC_RX_THRESHOLD, 1), 0, 3, 0, + tegra186_asrc_get_input_threshold, + tegra186_asrc_put_input_threshold), + + SOC_SINGLE_EXT("Stream3 Input Threshold", + ASRC_STREAM_REG(TEGRA186_ASRC_RX_THRESHOLD, 2), 0, 3, 0, + tegra186_asrc_get_input_threshold, + tegra186_asrc_put_input_threshold), + + SOC_SINGLE_EXT("Stream4 Input Threshold", + ASRC_STREAM_REG(TEGRA186_ASRC_RX_THRESHOLD, 3), 0, 3, 0, + tegra186_asrc_get_input_threshold, + tegra186_asrc_put_input_threshold), + + SOC_SINGLE_EXT("Stream5 Input Threshold", + ASRC_STREAM_REG(TEGRA186_ASRC_RX_THRESHOLD, 4), 0, 3, 0, + tegra186_asrc_get_input_threshold, + tegra186_asrc_put_input_threshold), + + SOC_SINGLE_EXT("Stream6 Input Threshold", + ASRC_STREAM_REG(TEGRA186_ASRC_RX_THRESHOLD, 4), 0, 3, 0, + tegra186_asrc_get_input_threshold, + tegra186_asrc_put_input_threshold), + + /* Output threshold for watermark fields */ + SOC_SINGLE_EXT("Stream1 Output Threshold", + ASRC_STREAM_REG(TEGRA186_ASRC_TX_THRESHOLD, 0), 0, 3, 0, + tegra186_asrc_get_output_threshold, + tegra186_asrc_put_output_threshold), + + SOC_SINGLE_EXT("Stream2 Output Threshold", + ASRC_STREAM_REG(TEGRA186_ASRC_TX_THRESHOLD, 1), 0, 3, 0, + tegra186_asrc_get_output_threshold, + tegra186_asrc_put_output_threshold), + + SOC_SINGLE_EXT("Stream3 Output Threshold", + ASRC_STREAM_REG(TEGRA186_ASRC_TX_THRESHOLD, 2), 0, 3, 0, + tegra186_asrc_get_output_threshold, + tegra186_asrc_put_output_threshold), + + SOC_SINGLE_EXT("Stream4 Output Threshold", + ASRC_STREAM_REG(TEGRA186_ASRC_TX_THRESHOLD, 3), 0, 3, 0, + tegra186_asrc_get_output_threshold, + tegra186_asrc_put_output_threshold), + + SOC_SINGLE_EXT("Stream5 Output Threshold", + ASRC_STREAM_REG(TEGRA186_ASRC_TX_THRESHOLD, 4), 0, 3, 0, + tegra186_asrc_get_output_threshold, + tegra186_asrc_put_output_threshold), + + SOC_SINGLE_EXT("Stream6 Output Threshold", + ASRC_STREAM_REG(TEGRA186_ASRC_TX_THRESHOLD, 5), 0, 3, 0, + tegra186_asrc_get_output_threshold, + tegra186_asrc_put_output_threshold), +}; + +static const struct snd_soc_component_driver tegra186_asrc_cmpnt =3D { + .dapm_widgets =3D tegra186_asrc_widgets, + .num_dapm_widgets =3D ARRAY_SIZE(tegra186_asrc_widgets), + .dapm_routes =3D tegra186_asrc_routes, + .num_dapm_routes =3D ARRAY_SIZE(tegra186_asrc_routes), + .controls =3D tegra186_asrc_controls, + .num_controls =3D ARRAY_SIZE(tegra186_asrc_controls), +}; + +static bool tegra186_asrc_wr_reg(struct device *dev, unsigned int reg) +{ + if (reg < TEGRA186_ASRC_STREAM_LIMIT) + reg %=3D TEGRA186_ASRC_STREAM_STRIDE; + + switch (reg) { + case TEGRA186_ASRC_CFG ... TEGRA186_ASRC_RATIO_COMP: + case TEGRA186_ASRC_RX_CIF_CTRL: + case TEGRA186_ASRC_TX_CIF_CTRL: + case TEGRA186_ASRC_ENABLE: + case TEGRA186_ASRC_SOFT_RESET: + case TEGRA186_ASRC_GLOBAL_ENB ... TEGRA186_ASRC_RATIO_UPD_RX_CIF_CTRL: + case TEGRA186_ASRC_GLOBAL_INT_MASK ... TEGRA186_ASRC_GLOBAL_INT_CLEAR: + case TEGRA186_ASRC_GLOBAL_APR_CTRL ... TEGRA186_ASRC_CYA: + return true; + default: + return false; + } +} + +static bool tegra186_asrc_rd_reg(struct device *dev, unsigned int reg) +{ + if (reg < TEGRA186_ASRC_STREAM_LIMIT) + reg %=3D TEGRA186_ASRC_STREAM_STRIDE; + + if (tegra186_asrc_wr_reg(dev, reg)) + return true; + + switch (reg) { + case TEGRA186_ASRC_RX_STATUS: + case TEGRA186_ASRC_TX_STATUS: + case TEGRA186_ASRC_STATUS ... TEGRA186_ASRC_OUTSAMPLEBUF_CFG: + case TEGRA186_ASRC_RATIO_UPD_RX_STATUS: + case TEGRA186_ASRC_GLOBAL_STATUS ... TEGRA186_ASRC_GLOBAL_INT_STATUS: + case TEGRA186_ASRC_GLOBAL_TRANSFER_ERROR_LOG: + return true; + default: + return false; + } +} + +static bool tegra186_asrc_volatile_reg(struct device *dev, unsigned int re= g) +{ + if (reg < TEGRA186_ASRC_STREAM_LIMIT) + reg %=3D TEGRA186_ASRC_STREAM_STRIDE; + + switch (reg) { + case TEGRA186_ASRC_RX_STATUS: + case TEGRA186_ASRC_TX_STATUS: + case TEGRA186_ASRC_SOFT_RESET: + case TEGRA186_ASRC_RATIO_INT_PART: + case TEGRA186_ASRC_RATIO_FRAC_PART: + case TEGRA186_ASRC_STATUS: + case TEGRA186_ASRC_RATIO_LOCK_STATUS: + case TEGRA186_ASRC_RATIO_UPD_RX_STATUS: + case TEGRA186_ASRC_GLOBAL_SOFT_RESET: + case TEGRA186_ASRC_GLOBAL_STATUS: + case TEGRA186_ASRC_GLOBAL_STREAM_ENABLE_STATUS: + case TEGRA186_ASRC_GLOBAL_INT_STATUS: + case TEGRA186_ASRC_GLOBAL_TRANSFER_ERROR_LOG: + return true; + default: + return false; + } +} + +static const struct regmap_config tegra186_asrc_regmap_config =3D { + .reg_bits =3D 32, + .reg_stride =3D 4, + .val_bits =3D 32, + .max_register =3D TEGRA186_ASRC_CYA, + .writeable_reg =3D tegra186_asrc_wr_reg, + .readable_reg =3D tegra186_asrc_rd_reg, + .volatile_reg =3D tegra186_asrc_volatile_reg, + .reg_defaults =3D tegra186_asrc_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(tegra186_asrc_reg_defaults), + .cache_type =3D REGCACHE_FLAT, +}; + +static const struct of_device_id tegra186_asrc_of_match[] =3D { + { .compatible =3D "nvidia,tegra186-asrc" }, + {}, +}; +MODULE_DEVICE_TABLE(of, tegra186_asrc_of_match); + +static int tegra186_asrc_platform_probe(struct platform_device *pdev) +{ + struct device *dev =3D &pdev->dev; + struct tegra186_asrc *asrc; + void __iomem *regs; + unsigned int i; + int err; + + asrc =3D devm_kzalloc(dev, sizeof(*asrc), GFP_KERNEL); + if (!asrc) + return -ENOMEM; + + dev_set_drvdata(dev, asrc); + + regs =3D devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(regs)) + return PTR_ERR(regs); + + asrc->regmap =3D devm_regmap_init_mmio(dev, regs, + &tegra186_asrc_regmap_config); + if (IS_ERR(asrc->regmap)) { + dev_err(dev, "regmap init failed\n"); + return PTR_ERR(asrc->regmap); + } + + regcache_cache_only(asrc->regmap, true); + + regmap_write(asrc->regmap, TEGRA186_ASRC_GLOBAL_CFG, + TEGRA186_ASRC_GLOBAL_CFG_FRAC_32BIT_PRECISION); + + /* Initialize default output srate */ + for (i =3D 0; i < TEGRA186_ASRC_STREAM_MAX; i++) { + asrc->lane[i].ratio_source =3D TEGRA186_ASRC_RATIO_SOURCE_SW; + asrc->lane[i].int_part =3D 1; + asrc->lane[i].frac_part =3D 0; + asrc->lane[i].hwcomp_disable =3D 0; + asrc->lane[i].input_thresh =3D + TEGRA186_ASRC_STREAM_DEFAULT_INPUT_HW_COMP_THRESH_CFG; + asrc->lane[i].output_thresh =3D + TEGRA186_ASRC_STREAM_DEFAULT_OUTPUT_HW_COMP_THRESH_CFG; + } + + err =3D devm_snd_soc_register_component(dev, &tegra186_asrc_cmpnt, + tegra186_asrc_dais, + ARRAY_SIZE(tegra186_asrc_dais)); + if (err) { + dev_err(dev, "can't register ASRC component, err: %d\n", err); + return err; + } + + pm_runtime_enable(dev); + + return 0; +} + +static int tegra186_asrc_platform_remove(struct platform_device *pdev) +{ + pm_runtime_disable(&pdev->dev); + + return 0; +} + +static const struct dev_pm_ops tegra186_asrc_pm_ops =3D { + SET_RUNTIME_PM_OPS(tegra186_asrc_runtime_suspend, + tegra186_asrc_runtime_resume, NULL) + SET_LATE_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, + pm_runtime_force_resume) +}; + +static struct platform_driver tegra186_asrc_driver =3D { + .driver =3D { + .name =3D "tegra186-asrc", + .of_match_table =3D tegra186_asrc_of_match, + .pm =3D &tegra186_asrc_pm_ops, + }, + .probe =3D tegra186_asrc_platform_probe, + .remove =3D tegra186_asrc_platform_remove, +}; +module_platform_driver(tegra186_asrc_driver) + +MODULE_AUTHOR("Junghyun Kim "); +MODULE_DESCRIPTION("Tegra186 ASRC ASoC driver"); +MODULE_LICENSE("GPL"); diff --git a/sound/soc/tegra/tegra186_asrc.h b/sound/soc/tegra/tegra186_asr= c.h new file mode 100644 index 0000000..094fcc7 --- /dev/null +++ b/sound/soc/tegra/tegra186_asrc.h @@ -0,0 +1,112 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * tegra186_asrc.h - Definitions for Tegra186 ASRC driver + * + * Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. + * + */ + +#ifndef __TEGRA186_ASRC_H__ +#define __TEGRA186_ASRC_H__ + +/* ASRC stream related offset */ +#define TEGRA186_ASRC_CFG 0x0 +#define TEGRA186_ASRC_RATIO_INT_PART 0x4 +#define TEGRA186_ASRC_RATIO_FRAC_PART 0x8 +#define TEGRA186_ASRC_RATIO_LOCK_STATUS 0xc +#define TEGRA186_ASRC_MUTE_UNMUTE_DURATION 0x10 +#define TEGRA186_ASRC_TX_THRESHOLD 0x14 +#define TEGRA186_ASRC_RX_THRESHOLD 0x18 +#define TEGRA186_ASRC_RATIO_COMP 0x1c +#define TEGRA186_ASRC_RX_STATUS 0x20 +#define TEGRA186_ASRC_RX_CIF_CTRL 0x24 +#define TEGRA186_ASRC_TX_STATUS 0x2c +#define TEGRA186_ASRC_TX_CIF_CTRL 0x30 +#define TEGRA186_ASRC_ENABLE 0x38 +#define TEGRA186_ASRC_SOFT_RESET 0x3c +#define TEGRA186_ASRC_STATUS 0x4c +#define TEGRA186_ASRC_STATEBUF_ADDR 0x5c +#define TEGRA186_ASRC_STATEBUF_CFG 0x60 +#define TEGRA186_ASRC_INSAMPLEBUF_ADDR 0x64 +#define TEGRA186_ASRC_INSAMPLEBUF_CFG 0x68 +#define TEGRA186_ASRC_OUTSAMPLEBUF_ADDR 0x6c +#define TEGRA186_ASRC_OUTSAMPLEBUF_CFG 0x70 + +/* ASRC Global registers offset */ +#define TEGRA186_ASRC_GLOBAL_ENB 0x2f4 +#define TEGRA186_ASRC_GLOBAL_SOFT_RESET 0x2f8 +#define TEGRA186_ASRC_GLOBAL_CG 0x2fc +#define TEGRA186_ASRC_GLOBAL_CFG 0x300 +#define TEGRA186_ASRC_GLOBAL_SCRATCH_ADDR 0x304 +#define TEGRA186_ASRC_GLOBAL_SCRATCH_CFG 0x308 +#define TEGRA186_ASRC_RATIO_UPD_RX_CIF_CTRL 0x30c +#define TEGRA186_ASRC_RATIO_UPD_RX_STATUS 0x310 +#define TEGRA186_ASRC_GLOBAL_STATUS 0x314 +#define TEGRA186_ASRC_GLOBAL_STREAM_ENABLE_STATUS 0x318 +#define TEGRA186_ASRC_GLOBAL_INT_STATUS 0x324 +#define TEGRA186_ASRC_GLOBAL_INT_MASK 0x328 +#define TEGRA186_ASRC_GLOBAL_INT_SET 0x32c +#define TEGRA186_ASRC_GLOBAL_INT_CLEAR 0x330 +#define TEGRA186_ASRC_GLOBAL_TRANSFER_ERROR_LOG 0x334 +#define TEGRA186_ASRC_GLOBAL_APR_CTRL 0x1000 +#define TEGRA186_ASRC_GLOBAL_APR_CTRL_ACCESS_CTRL 0x1004 +#define TEGRA186_ASRC_GLOBAL_DISARM_APR 0x1008 +#define TEGRA186_ASRC_GLOBAL_DISARM_APR_ACCESS_CTRL 0x100c +#define TEGRA186_ASRC_GLOBAL_RATIO_WR_ACCESS 0x1010 +#define TEGRA186_ASRC_GLOBAL_RATIO_WR_ACCESS_CTRL 0x1014 +#define TEGRA186_ASRC_CYA 0x1018 + +#define TEGRA186_ASRC_STREAM_DEFAULT_HW_COMP_BIAS_VALUE 0xaaaa +#define TEGRA186_ASRC_STREAM_DEFAULT_INPUT_HW_COMP_THRESH_CFG 0x00201002 +#define TEGRA186_ASRC_STREAM_DEFAULT_OUTPUT_HW_COMP_THRESH_CFG 0x00201002 + +#define TEGRA186_ASRC_GLOBAL_CFG_FRAC_28BIT_PRECISION 0 +#define TEGRA186_ASRC_GLOBAL_CFG_FRAC_32BIT_PRECISION 1 + +#define TEGRA186_ASRC_STREAM_ENABLE_HW_RATIO_COMP_SHIFT 31 +#define TEGRA186_ASRC_STREAM_ENABLE_HW_RATIO_COMP_MASK (1 << TEGRA186_ASR= C_STREAM_ENABLE_HW_RATIO_COMP_SHIFT) +#define TEGRA186_ASRC_STREAM_ENABLE_HW_RATIO_COMP_ENABLE (1 << TEGRA186_AS= RC_STREAM_ENABLE_HW_RATIO_COMP_SHIFT) +#define TEGRA186_ASRC_STREAM_ENABLE_HW_RATIO_COMP_DISABLE (0 << TEGRA186_A= SRC_STREAM_ENABLE_HW_RATIO_COMP_SHIFT) + +#define TEGRA186_ASRC_STREAM_RATIO_TYPE_SHIFT 0 +#define TEGRA186_ASRC_STREAM_RATIO_TYPE_MASK (1 << TEGRA186_ASRC_STREAM_= RATIO_TYPE_SHIFT) + +#define TEGRA186_ASRC_STREAM_EN_SHIFT 0 +#define TEGRA186_ASRC_STREAM_EN (1 << TEGRA186_ASRC_STREAM_EN_SHIFT) +#define TEGRA186_ASRC_GLOBAL_EN_SHIFT 0 +#define TEGRA186_ASRC_GLOBAL_EN (1 << TEGRA186_ASRC_GLOBAL_EN_SHIFT) + +#define TEGRA186_ASRC_STREAM_STATEBUF_CFG_SIZE_SHIFT 0 +#define TEGRA186_ASRC_STREAM_STATEBUF_CFG_SIZE_MASK (0xffff << TEGRA186_A= SRC_STREAM_STATEBUF_CFG_SIZE_SHIFT) +#define TEGRA186_ASRC_STREAM_INSAMPLEBUF_CFG_SIZE_SHIFT 0 +#define TEGRA186_ASRC_STREAM_INSAMPLEBUF_CFG_SIZE_MASK (0xffff << TEGRA18= 6_ASRC_STREAM_INSAMPLEBUF_CFG_SIZE_SHIFT) +#define TEGRA186_ASRC_STREAM_OUTSAMPLEBUF_CFG_SIZE_SHIFT 0 +#define TEGRA186_ASRC_STREAM_OUTSAMPLEBUF_CFG_SIZE_MASK (0xffff << TEGRA1= 86_ASRC_STREAM_OUTSAMPLEBUF_CFG_SIZE_SHIFT) + +#define TEGRA186_ASRC_STREAM_RATIO_INT_PART_MASK 0x1f +#define TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MASK 0xffffffff + +#define TEGRA186_ASRC_STREAM_STRIDE 0x80 +#define TEGRA186_ASRC_STREAM_MAX 0x6 +#define TEGRA186_ASRC_STREAM_LIMIT 0x2f0 + +#define TEGRA186_ASRC_RATIO_SOURCE_ARAD 0x0 +#define TEGRA186_ASRC_RATIO_SOURCE_SW 0x1 + +#define TEGRA186_ASRC_ARAM_START_ADDR 0x3f800000 + +struct tegra186_asrc_lane { + unsigned int int_part; + unsigned int frac_part; + unsigned int ratio_source; + unsigned int hwcomp_disable; + unsigned int input_thresh; + unsigned int output_thresh; +}; + +struct tegra186_asrc { + struct tegra186_asrc_lane lane[TEGRA186_ASRC_STREAM_MAX]; + struct regmap *regmap; +}; + +#endif --=20 2.7.4 From nobody Fri Jun 19 17:03:18 2026 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 5D859C433FE for ; Thu, 31 Mar 2022 14:04:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237249AbiCaOGC (ORCPT ); Thu, 31 Mar 2022 10:06:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35908 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237227AbiCaOFz (ORCPT ); Thu, 31 Mar 2022 10:05:55 -0400 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2087.outbound.protection.outlook.com [40.107.94.87]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0D83D5AA75; Thu, 31 Mar 2022 07:04:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=W+gtsZ5YGpw1gGupQ1wUWdoHUoL863TOTXdAhY8FH3YHskjeWC2CIYQnFaNfjpyL0OddOvwfnHtj+GPwEXTWm7vNOlRAYDmUVfroExVkIVCVRSJgeh4Jo85hfMKxpu1EuJ53B2H21VwgbZEgt+ltasDAIb8yAKGkFc6ScJCxmJIstgmfV3rogRy0om2PfGs8DrYLOh6PxEdpTWn6sQLKciydFX4K9DSVvmH8zfYP4qeikhSKK/V2w/ekiyx1qVvdRbecIb37PelzuOhAcdgnl36tV7WXILMITY7gaO1IDchgR8efq2MJdRoLgaFQhO3+72UZB1uMnDZfhgwDkwGJ7w== 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=Qe5SYG1TP+sQ5em8T8L2BI8X1qzj8arzo+ME4eAewaQ=; b=JcXSlxO/th6V0hwnOFJqMEG/xvI+FIwcXNSWXkAIq0lHhhye8r9lP/h/h2X3oHknQYQ2iwm9CvHoNyUTBJ5xBtmVlko/Bh4IfadTvoBb/SXpGlLDRbgzMs7FLHHGaiYlToEb0bI9wAWc6oHO17IuvvrZP3qeCfQyX5kx4tYKVT51x8NOeWxZajyvZsIhCB0WUPi3ewMPCTDkXRl+GvHfQ42T4d6NwpGYlmMhNYkbuMTpaXNLD+KLR/v/fZ5B0QTU0IF5PSRPKAuGntdH/tdtlJh7ykC78EgAMdBctnSARAMgqy6vANUIDHIyhzBuoskU1GiZ6lnxobLwW0NuXWqh4A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 12.22.5.238) smtp.rcpttodomain=alsa-project.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Qe5SYG1TP+sQ5em8T8L2BI8X1qzj8arzo+ME4eAewaQ=; b=U4Fgarmua9onLPkBCS4rprkuh2BEOWD7t2Kbrr43c0Fa8rsZK3s4NbQG+EzQ2nOPEhzC7WVXFRhxKbhPJYQLQE0ukDtfOBHZS4VHXRFuRUR2otjKtqeDSCyw6KKiYIHozOQ12Nn9zYYesRHg4WySzgMf2LRv9IjedLtUVk0QBjZ3ksW9DtqCkDro+zo/QmT/h2rjxI2sLD0Elc0CgVwXBJPlqhGu5y8nwTKdmQ5w8VYNwwIPgc/kqf9dCXrHn1cDyjRCN5vs0pmGiJzZ+xZ/DO3OqiObd/Evf3UIHDMjMUzhUCcbfk+JgIj+UeICm0ihIFvoYoJyxxjFn5aWnTbafg== Received: from BN0PR10CA0003.namprd10.prod.outlook.com (2603:10b6:408:143::35) by MN2PR12MB3390.namprd12.prod.outlook.com (2603:10b6:208:c9::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.21; Thu, 31 Mar 2022 14:04:01 +0000 Received: from BN8NAM11FT018.eop-nam11.prod.protection.outlook.com (2603:10b6:408:143:cafe::25) by BN0PR10CA0003.outlook.office365.com (2603:10b6:408:143::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.23 via Frontend Transport; Thu, 31 Mar 2022 14:04:01 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 12.22.5.238) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 12.22.5.238 as permitted sender) receiver=protection.outlook.com; client-ip=12.22.5.238; helo=mail.nvidia.com; Received: from mail.nvidia.com (12.22.5.238) by BN8NAM11FT018.mail.protection.outlook.com (10.13.176.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.5123.19 via Frontend Transport; Thu, 31 Mar 2022 14:04:00 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by DRHQMAIL105.nvidia.com (10.27.9.14) with Microsoft SMTP Server (TLS) id 15.0.1497.32; Thu, 31 Mar 2022 14:03:59 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Thu, 31 Mar 2022 07:03:58 -0700 Received: from audio.nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.8) with Microsoft SMTP Server id 15.2.986.22 via Frontend Transport; Thu, 31 Mar 2022 07:03:54 -0700 From: Sameer Pujar To: , , , , , , CC: , , , , , , , , Sameer Pujar Subject: [PATCH v2 3/6] ASoC: tegra: AHUB routes for ASRC module Date: Thu, 31 Mar 2022 19:33:29 +0530 Message-ID: <1648735412-32220-4-git-send-email-spujar@nvidia.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1648735412-32220-1-git-send-email-spujar@nvidia.com> References: <1648735412-32220-1-git-send-email-spujar@nvidia.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9c7ca5e4-bf88-4dab-6e75-08da131f4e49 X-MS-TrafficTypeDiagnostic: MN2PR12MB3390: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: bPSeKvBTeif/6/P9ODdGOUV3u4IzXLqFc4uZSFxhiC/qwpTzrZJe6CFwZcYRSFmZDvsrW1X6EElws27/Vzkc1mtj7DwuYG/j+6CXol5SYOvCPvHtNcAXNRmw7sLpO23mty8QTc+6NLX1+nVyqYfvgWnPWOvWbOpCkTN8/AO6hyGU9j/VW6Z6G7mjykInASemi4zhLrNoOgR/K6YO5tnxhsxy3iAsdsxPams2WAo6W+YN2dBe/YPYlFYssi+wG5ZjbMtT3IRNOFfdynCqltet53lTWVpiY6S+HNP45yD8fzaHQEOJbqk1R+NV7nHpcYttWCLb7fjxeKdRFdmXfClQ8qtRVCfaugXbYVRtd3/gskWRGIoSvpmcmIsFekYl+3Cm9neKADePodYy2/4e15k9pvbYE3bl1fI9jVYaJ494vyDSIRX6ROiCPehq+w7GVx0KNqOZgI0C6JNjUYaUAPQA70j2ysDB4p1qc9jk/vg6jbe829WcbMsviID352JCNHen6bn6Jrgb1skmA2uTwVA8L3lzeJOqSMQxciYH0VOxkD9ByGXdbV0MbZv7Qszyhy/tCTYFL+9D/RmFkDmCYWLpf/y9vmhMuJE/ioVRPurOhxdlMgWwx+Gb5BSMgP8HmY77jX28MSxxil5y0rmfemvj4tW9F5gQfdWvR8LU/KR8DwiVJ5FiDWR5GC6c3zfaJcE8LBJpgifD6Ujo1heUuPxHWQ== X-Forefront-Antispam-Report: CIP:12.22.5.238;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:mail.nvidia.com;PTR:InfoNoRecords;CAT:NONE;SFS:(13230001)(4636009)(36840700001)(46966006)(40470700004)(81166007)(36756003)(6666004)(356005)(7696005)(5660300002)(508600001)(110136005)(7416002)(8936002)(2616005)(2906002)(54906003)(40460700003)(36860700001)(186003)(82310400004)(4326008)(8676002)(86362001)(26005)(47076005)(316002)(426003)(336012)(107886003)(83380400001)(70206006)(70586007)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Mar 2022 14:04:00.2976 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9c7ca5e4-bf88-4dab-6e75-08da131f4e49 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[12.22.5.238];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT018.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB3390 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add AHUB routes for ASRC module. The ASRC module can be plugged into audio path as per the need. The routing controls can be used to setup the audio path with ASRC similar to the already existing routes. The routes are added to Tegra186 and later Tegra SoCs where ASRC module is present. Signed-off-by: Sameer Pujar --- sound/soc/tegra/tegra210_ahub.c | 82 +++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/sound/soc/tegra/tegra210_ahub.c b/sound/soc/tegra/tegra210_ahu= b.c index bccf8b8..e1f90da 100644 --- a/sound/soc/tegra/tegra210_ahub.c +++ b/sound/soc/tegra/tegra210_ahub.c @@ -280,6 +280,20 @@ static struct snd_soc_dai_driver tegra186_ahub_dais[] = =3D { DAI(MIXER1 TX3), DAI(MIXER1 TX4), DAI(MIXER1 TX5), + /* XBAR -> ASRC -> XBAR */ + DAI(ASRC1 RX1), + DAI(ASRC1 TX1), + DAI(ASRC1 RX2), + DAI(ASRC1 TX2), + DAI(ASRC1 RX3), + DAI(ASRC1 TX3), + DAI(ASRC1 RX4), + DAI(ASRC1 TX4), + DAI(ASRC1 RX5), + DAI(ASRC1 TX5), + DAI(ASRC1 RX6), + DAI(ASRC1 TX6), + DAI(ASRC1 RX7), }; =20 static const char * const tegra210_ahub_mux_texts[] =3D { @@ -388,6 +402,12 @@ static const char * const tegra186_ahub_mux_texts[] = =3D { "MIXER1 TX3", "MIXER1 TX4", "MIXER1 TX5", + "ASRC1 TX1", + "ASRC1 TX2", + "ASRC1 TX3", + "ASRC1 TX4", + "ASRC1 TX5", + "ASRC1 TX6", }; =20 static const unsigned int tegra210_ahub_mux_values[] =3D { @@ -513,6 +533,13 @@ static const unsigned int tegra186_ahub_mux_values[] = =3D { MUX_VALUE(1, 2), MUX_VALUE(1, 3), MUX_VALUE(1, 4), + /* ASRC */ + MUX_VALUE(3, 24), + MUX_VALUE(3, 25), + MUX_VALUE(3, 26), + MUX_VALUE(3, 27), + MUX_VALUE(3, 28), + MUX_VALUE(3, 29), }; =20 /* Controls for t210 */ @@ -623,6 +650,13 @@ MUX_ENUM_CTRL_DECL_186(t186_mixer17_tx, 0x26); MUX_ENUM_CTRL_DECL_186(t186_mixer18_tx, 0x27); MUX_ENUM_CTRL_DECL_186(t186_mixer19_tx, 0x28); MUX_ENUM_CTRL_DECL_186(t186_mixer110_tx, 0x29); +MUX_ENUM_CTRL_DECL_186(t186_asrc11_tx, 0x6c); +MUX_ENUM_CTRL_DECL_186(t186_asrc12_tx, 0x6d); +MUX_ENUM_CTRL_DECL_186(t186_asrc13_tx, 0x6e); +MUX_ENUM_CTRL_DECL_186(t186_asrc14_tx, 0x6f); +MUX_ENUM_CTRL_DECL_186(t186_asrc15_tx, 0x70); +MUX_ENUM_CTRL_DECL_186(t186_asrc16_tx, 0x71); +MUX_ENUM_CTRL_DECL_186(t186_asrc17_tx, 0x72); =20 /* Controls for t234 */ MUX_ENUM_CTRL_DECL_234(t234_mvc1_tx, 0x44); @@ -651,6 +685,13 @@ MUX_ENUM_CTRL_DECL_234(t234_admaif17_tx, 0x60); MUX_ENUM_CTRL_DECL_234(t234_admaif18_tx, 0x61); MUX_ENUM_CTRL_DECL_234(t234_admaif19_tx, 0x62); MUX_ENUM_CTRL_DECL_234(t234_admaif20_tx, 0x63); +MUX_ENUM_CTRL_DECL_234(t234_asrc11_tx, 0x64); +MUX_ENUM_CTRL_DECL_234(t234_asrc12_tx, 0x65); +MUX_ENUM_CTRL_DECL_234(t234_asrc13_tx, 0x66); +MUX_ENUM_CTRL_DECL_234(t234_asrc14_tx, 0x67); +MUX_ENUM_CTRL_DECL_234(t234_asrc15_tx, 0x68); +MUX_ENUM_CTRL_DECL_234(t234_asrc16_tx, 0x69); +MUX_ENUM_CTRL_DECL_234(t234_asrc17_tx, 0x6a); =20 /* * The number of entries in, and order of, this array is closely tied to t= he @@ -813,6 +854,19 @@ static const struct snd_soc_dapm_widget tegra186_ahub_= widgets[] =3D { TX_WIDGETS("MIXER1 TX3"), TX_WIDGETS("MIXER1 TX4"), TX_WIDGETS("MIXER1 TX5"), + WIDGETS("ASRC1 RX1", t186_asrc11_tx), + WIDGETS("ASRC1 RX2", t186_asrc12_tx), + WIDGETS("ASRC1 RX3", t186_asrc13_tx), + WIDGETS("ASRC1 RX4", t186_asrc14_tx), + WIDGETS("ASRC1 RX5", t186_asrc15_tx), + WIDGETS("ASRC1 RX6", t186_asrc16_tx), + WIDGETS("ASRC1 RX7", t186_asrc17_tx), + TX_WIDGETS("ASRC1 TX1"), + TX_WIDGETS("ASRC1 TX2"), + TX_WIDGETS("ASRC1 TX3"), + TX_WIDGETS("ASRC1 TX4"), + TX_WIDGETS("ASRC1 TX5"), + TX_WIDGETS("ASRC1 TX6"), }; =20 static const struct snd_soc_dapm_widget tegra234_ahub_widgets[] =3D { @@ -909,6 +963,19 @@ static const struct snd_soc_dapm_widget tegra234_ahub_= widgets[] =3D { TX_WIDGETS("MIXER1 TX3"), TX_WIDGETS("MIXER1 TX4"), TX_WIDGETS("MIXER1 TX5"), + WIDGETS("ASRC1 RX1", t234_asrc11_tx), + WIDGETS("ASRC1 RX2", t234_asrc12_tx), + WIDGETS("ASRC1 RX3", t234_asrc13_tx), + WIDGETS("ASRC1 RX4", t234_asrc14_tx), + WIDGETS("ASRC1 RX5", t234_asrc15_tx), + WIDGETS("ASRC1 RX6", t234_asrc16_tx), + WIDGETS("ASRC1 RX7", t234_asrc17_tx), + TX_WIDGETS("ASRC1 TX1"), + TX_WIDGETS("ASRC1 TX2"), + TX_WIDGETS("ASRC1 TX3"), + TX_WIDGETS("ASRC1 TX4"), + TX_WIDGETS("ASRC1 TX5"), + TX_WIDGETS("ASRC1 TX6"), }; =20 #define TEGRA_COMMON_MUX_ROUTES(name) \ @@ -975,7 +1042,13 @@ static const struct snd_soc_dapm_widget tegra234_ahub= _widgets[] =3D { { name " Mux", "ADX4 TX1", "ADX4 TX1 XBAR-RX" }, \ { name " Mux", "ADX4 TX2", "ADX4 TX2 XBAR-RX" }, \ { name " Mux", "ADX4 TX3", "ADX4 TX3 XBAR-RX" }, \ - { name " Mux", "ADX4 TX4", "ADX4 TX4 XBAR-RX" }, + { name " Mux", "ADX4 TX4", "ADX4 TX4 XBAR-RX" }, \ + { name " Mux", "ASRC1 TX1", "ASRC1 TX1 XBAR-RX" }, \ + { name " Mux", "ASRC1 TX2", "ASRC1 TX2 XBAR-RX" }, \ + { name " Mux", "ASRC1 TX3", "ASRC1 TX3 XBAR-RX" }, \ + { name " Mux", "ASRC1 TX4", "ASRC1 TX4 XBAR-RX" }, \ + { name " Mux", "ASRC1 TX5", "ASRC1 TX5 XBAR-RX" }, \ + { name " Mux", "ASRC1 TX6", "ASRC1 TX6 XBAR-RX" }, =20 #define TEGRA210_MUX_ROUTES(name) \ TEGRA_COMMON_MUX_ROUTES(name) @@ -1135,6 +1208,13 @@ static const struct snd_soc_dapm_route tegra186_ahub= _routes[] =3D { TEGRA186_MUX_ROUTES("MIXER1 RX8") TEGRA186_MUX_ROUTES("MIXER1 RX9") TEGRA186_MUX_ROUTES("MIXER1 RX10") + TEGRA186_MUX_ROUTES("ASRC1 RX1") + TEGRA186_MUX_ROUTES("ASRC1 RX2") + TEGRA186_MUX_ROUTES("ASRC1 RX3") + TEGRA186_MUX_ROUTES("ASRC1 RX4") + TEGRA186_MUX_ROUTES("ASRC1 RX5") + TEGRA186_MUX_ROUTES("ASRC1 RX6") + TEGRA186_MUX_ROUTES("ASRC1 RX7") }; =20 static const struct snd_soc_component_driver tegra210_ahub_component =3D { --=20 2.7.4 From nobody Fri Jun 19 17:03:18 2026 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 54420C4332F for ; Thu, 31 Mar 2022 14:04:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234168AbiCaOGc (ORCPT ); Thu, 31 Mar 2022 10:06:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37414 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237298AbiCaOGO (ORCPT ); Thu, 31 Mar 2022 10:06:14 -0400 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2044.outbound.protection.outlook.com [40.107.243.44]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 085BF5AA69; Thu, 31 Mar 2022 07:04:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=e0IiH3tYX1K4ES6lpobGqLxiELlhhrZsJfL2vlyGm/FBEkLYTEterXVihsh5NtOIDbct6LXbPUGkrafLbmCVv9P8cWVhusAPblA2O8+oobtFaO574JYusv0PzuPNtcj/jeLHvBTbROjaCf9oUVRwQcFNbV4FmXV2a3oR30JAzr9Bu9JPRrJ4hvZCK5FizKDI80Bf17CA3amp4Gb/uaZzB18+RUwa880rGNltFgjOAc9eOUZqiU5N4j4QY4Q93nNVHVZJYSI+oiypK3LAgD2xOFXHUImJuQBVB9Ev+ytT/DpBSoOLLSZEHx8vLOfRisGy1Dnioyrs+suu5h5G+A2WHg== 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=lC6L2XdDaQF847syeS0jq7DiNVTyw430JpljyPB2jTQ=; b=WcL0vbwu8U5eJSeqidBvzahgXjbXEGGg1Q+Vc/KqlcSZg/D6jGs/JWhtUkzvrStk1Qx0RZIzz1ejMa2ffx27qrn7d0S95xSo6OnqizC/zH+HUSAh6FBtjTDKMNSs45+2O20sGMJDpJnK0IYXZgD26awmrm9NZ4anLqshC+gNxx0/OHq1zZ+YrfJ5FPh+uroHccsp+QDhagZYF/mJ52UKn042dSilojjZ2RnLQ6ClLBVSuh9NC7/3J2dJoXhpQqlqMYil1k2QuS6fIPUDyz0RBugX1VZAQRBoEf4JXvRfUZxCfFt1TmaHSbG84zO+j5q7C08clSWZmTkSj87kU87XIA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 12.22.5.236) smtp.rcpttodomain=alsa-project.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lC6L2XdDaQF847syeS0jq7DiNVTyw430JpljyPB2jTQ=; b=DhCwM771Xk3RYhCB5B55cmnPdEoILG1xE0gyo9bgWWdLIz1+ArtYhgszsqrLVSj7kecyQEUrqdMSTN7pFn03Ad/YO4GcF9q+O+UNFtMet2RSqCDRYl5HXUyh5EJ/j3UqtBA0ezqcaiAXnOLgELD8/3Zvy2DTJBuMQbT6428zvPmax3BCxj5mJXmMF3MeyX7xXhTBKm0TJW2KQx7bjyA1hdcmB8fQsxrm31HUNFPfRswtYu3e6ue02mjGCoRTXyLjPZfkDf52Zfg45pMh4bH0lQujDVDBSTmulfRPe62lMtREnRShgOWkIxnO6f4OoAavOo9MHRGMjhcM4W0AeTpw8Q== Received: from BN9PR03CA0958.namprd03.prod.outlook.com (2603:10b6:408:108::33) by MN2PR12MB4093.namprd12.prod.outlook.com (2603:10b6:208:198::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.19; Thu, 31 Mar 2022 14:04:12 +0000 Received: from BN8NAM11FT056.eop-nam11.prod.protection.outlook.com (2603:10b6:408:108:cafe::7f) by BN9PR03CA0958.outlook.office365.com (2603:10b6:408:108::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.23 via Frontend Transport; Thu, 31 Mar 2022 14:04:12 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 12.22.5.236) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 12.22.5.236 as permitted sender) receiver=protection.outlook.com; client-ip=12.22.5.236; helo=mail.nvidia.com; Received: from mail.nvidia.com (12.22.5.236) by BN8NAM11FT056.mail.protection.outlook.com (10.13.177.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.5123.19 via Frontend Transport; Thu, 31 Mar 2022 14:04:11 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) by DRHQMAIL109.nvidia.com (10.27.9.19) with Microsoft SMTP Server (TLS) id 15.0.1497.32; Thu, 31 Mar 2022 14:04:03 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Thu, 31 Mar 2022 07:04:03 -0700 Received: from audio.nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.8) with Microsoft SMTP Server id 15.2.986.22 via Frontend Transport; Thu, 31 Mar 2022 07:03:59 -0700 From: Sameer Pujar To: , , , , , , CC: , , , , , , , , Sameer Pujar Subject: [PATCH v2 4/6] arm64: defconfig: Build Tegra ASRC module Date: Thu, 31 Mar 2022 19:33:30 +0530 Message-ID: <1648735412-32220-5-git-send-email-spujar@nvidia.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1648735412-32220-1-git-send-email-spujar@nvidia.com> References: <1648735412-32220-1-git-send-email-spujar@nvidia.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: eb37624a-19ae-470e-3240-08da131f54d6 X-MS-TrafficTypeDiagnostic: MN2PR12MB4093: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: o2Oyl/opd02ktkNrkiLm7iyTDSh0e8qROIdRh2woXMXr4CVHvIjijm78K51qcnjWK9HfXvWb/vfjVutn2l+xoKk/ZfXkdGSVfIOb5A4T03CVTom4OWb5kzxuc0gQ4qDy42uoxVpQmVgLOfShPjoqv7csHjaxZvBl5E+h9LDWMT5VxEfedmqiZdfngXsMWR7HRLAlWWx3MAh3Qknf+3dayqUPxHhxKtKEWCc2wwp1zcUw7Lou8tm1OadAGMAW1TNQZUkW3J8yJ6oVAPrHjUVnbltZ7CTs+6UVJuL5tmmGXWZYS08L2456GoxM7NdNjd3rfraQi3EDwxGa4ZLQt1h7/KX+ucb+lMZDRFCV3Dpkvy2YRf5UwneRnI5J0ZZTpdqS5TGsVLjYA9CJKSPb5VN4AlPMB5gOeuZCQS/OybZV1X5RGgL46WlK9JRbNYUSZKJXl80ICyUNCe5VZIdOIEovO/nF5PRTGEV5lChNf95CJiH5Y4qio/m8bjyzu6MFe/ZYMjuR71aco0ic57wg1dVfi/d2YA+2u9dgj6g9sH4ummuSU9piJa33cKXGwwPQ85ZzCVk3aJyiwDoG5MWknl46LyEqDgljIHfqdB1n6jWkGSQbzn8+b6OWmofISNlraJ3EJ48GYTmQ0xhLwewRGGI7UPsn9RsFimhEaYQtyT3usthaaxKMT0Xa6a0lZakP0tXTkCIeCTYfKFPUZ8pZOgiY3g== X-Forefront-Antispam-Report: CIP:12.22.5.236;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:mail.nvidia.com;PTR:InfoNoRecords;CAT:NONE;SFS:(13230001)(4636009)(36840700001)(40470700004)(46966006)(8676002)(36860700001)(70206006)(54906003)(7696005)(6666004)(70586007)(316002)(82310400004)(110136005)(508600001)(86362001)(40460700003)(426003)(2616005)(107886003)(26005)(186003)(336012)(7416002)(47076005)(2906002)(81166007)(356005)(36756003)(8936002)(4744005)(4326008)(5660300002)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Mar 2022 14:04:11.2709 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: eb37624a-19ae-470e-3240-08da131f54d6 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[12.22.5.236];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT056.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4093 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Asynchronous Sample Rate Converter (ASRC) module is a client of AHUB on Tegra186 and later SoCs. To use this module enable the driver build. Signed-off-by: Sameer Pujar --- arch/arm64/configs/defconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig index 813e644..7a8d9ad 100644 --- a/arch/arm64/configs/defconfig +++ b/arch/arm64/configs/defconfig @@ -798,6 +798,7 @@ CONFIG_SND_SOC_TEGRA=3Dm CONFIG_SND_SOC_TEGRA210_AHUB=3Dm CONFIG_SND_SOC_TEGRA210_DMIC=3Dm CONFIG_SND_SOC_TEGRA210_I2S=3Dm +CONFIG_SND_SOC_TEGRA186_ASRC=3Dm CONFIG_SND_SOC_TEGRA186_DSPK=3Dm CONFIG_SND_SOC_TEGRA210_ADMAIF=3Dm CONFIG_SND_SOC_TEGRA210_MVC=3Dm --=20 2.7.4 From nobody Fri Jun 19 17:03:18 2026 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 4780AC433FE for ; Thu, 31 Mar 2022 14:04:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237275AbiCaOGi (ORCPT ); Thu, 31 Mar 2022 10:06:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38136 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237287AbiCaOGX (ORCPT ); Thu, 31 Mar 2022 10:06:23 -0400 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2050.outbound.protection.outlook.com [40.107.237.50]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 63904606CF; Thu, 31 Mar 2022 07:04:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gNqQ7pGHB2M7juiOyYHBmTZJf4mQ1dVRcbh0T76Z7jPp+VAB4A0jrxes6HaHTjoL3u9saPVE3m5OJNO1Ut2hoUWQg85N4vIQCzZVbh3kASpexyz2NzcsqdYcjJMqUT3FXNbTRwxH7xiK3Mv0OTbkoo6vex8SbMWmiCtQeVjZFYxWwmcdcWwed2BJDEnEEKY+pGx00KPSx6Y3FpICoTZpc6H2bV9RM+6oNf95IHKSuF550bka+k4pg7BQIVT5xE52YI5Vm7fwfqVxUHr2xfYz+HFPN4vNtRi+Z+0kafWRBJvTR6bHLqzeKQbxBC4ptm2xzo44sWtGf63UiiivTVAPNQ== 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=lvBL2G1yjeV6OA5thnvh+CqEDiFd6WmrNsoTXXT5OBw=; b=NK2E+Xbnuu5FZ+7vZhMR77w4AbF5MGAhcT6U+aROqzxFvKANy3JGKMn3gy3xMmOFEsc0pMdex1UMvxILFBlKYBzocDuOGHtBODntv4GIQa9I55RBP9oYlkJOmvjH85706IeZtEOel3Dry7fEiyc2WDPQLA3hUuVmbJL0ECTJ9Gz1B5TRaMb2C+/Y/WwkMPCdDZVlbM+3jrYRU5a2DHcwTVPZEEFcuC72Vg4yCRyHB6WLhKkFjH6w4Z/hv0QWoAE13Yz9YuN4sC0gGMao3P6Vo3ePMWOrp9C8RQwBEHxBRYsBeG2K0k2aMfopr/YvkzNsYf9gSUonpx8fWvw+U0f1DA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 12.22.5.235) smtp.rcpttodomain=alsa-project.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lvBL2G1yjeV6OA5thnvh+CqEDiFd6WmrNsoTXXT5OBw=; b=uFIRhD1Iyw5AdDKlNaU2D9jnlV4CGB5WdFNZTlgwHReyM4gY5r60QLaO2c0hIHfSL2CQL3GdTBqfOqP+2COZCYSCu7T758QHEMpAegEcuuORttZqmL4NWflD+PMjdcK10jf0ItU1vV3wxXEGdN/0MyuQq8gB8LFpz334Rh0meAG1sDo79Mb3B1lWLd351fqqRhdtG30kTn/EkjCudq4gZFKqjnzHJxAYzSWgq5649+9KAEA5wHmcB5kLHunCM8ReWOIMJ/2xyfW9RQQojjZRQnro83W6ygkyynbUaqYlJ16iuoHpbRiZt5945FuoSXYdmPrW06GmDM+LDy8nn2qDUA== Received: from BN9PR03CA0089.namprd03.prod.outlook.com (2603:10b6:408:fc::34) by CY4PR12MB1926.namprd12.prod.outlook.com (2603:10b6:903:11b::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.23; Thu, 31 Mar 2022 14:04:20 +0000 Received: from BN8NAM11FT053.eop-nam11.prod.protection.outlook.com (2603:10b6:408:fc:cafe::79) by BN9PR03CA0089.outlook.office365.com (2603:10b6:408:fc::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.23 via Frontend Transport; Thu, 31 Mar 2022 14:04:20 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 12.22.5.235) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 12.22.5.235 as permitted sender) receiver=protection.outlook.com; client-ip=12.22.5.235; helo=mail.nvidia.com; Received: from mail.nvidia.com (12.22.5.235) by BN8NAM11FT053.mail.protection.outlook.com (10.13.177.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.5123.19 via Frontend Transport; Thu, 31 Mar 2022 14:04:19 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) by DRHQMAIL107.nvidia.com (10.27.9.16) with Microsoft SMTP Server (TLS) id 15.0.1497.32; Thu, 31 Mar 2022 14:04:08 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Thu, 31 Mar 2022 07:04:07 -0700 Received: from audio.nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.8) with Microsoft SMTP Server id 15.2.986.22 via Frontend Transport; Thu, 31 Mar 2022 07:04:03 -0700 From: Sameer Pujar To: , , , , , , CC: , , , , , , , , Sameer Pujar Subject: [PATCH v2 5/6] arm64: tegra: Add ASRC device on Tegra186 and later Date: Thu, 31 Mar 2022 19:33:31 +0530 Message-ID: <1648735412-32220-6-git-send-email-spujar@nvidia.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1648735412-32220-1-git-send-email-spujar@nvidia.com> References: <1648735412-32220-1-git-send-email-spujar@nvidia.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3bee82ce-5c26-494b-e424-08da131f5982 X-MS-TrafficTypeDiagnostic: CY4PR12MB1926: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: vbkJywPlesf1eMtLW/rk/ba9Tu+uqFk5ZZpAWG8rMwNV5AtH3D3sEepFlYzPFIo9l4iQPQmd6QdbgoiiB3FktRwkRDoe+HY5FzoLTtjm617unUV9khJLqG8EbV9Y3h3u//W2GSHLKGTLnbjCny4evLZpBlZS+KphUOoHvn8gr/bG/Ziy3SZJPd0LjKDdavESFTIncG9SCiykBefuBY1yNDenRejAhg73MoPp3gJ3C8lY2j06wd1M7WsHmWdWfHzyx9wxmtWGF4OiAz0Xic7PO07KO7/kbXmXZVQKbAg5TsX8sqrcKGUfehNDuL6yfGAkCx7IoQgcYOO1336RAhiZrWSxjjHA/cylbYTxJmAXfHPeSK1h8oyZkf6OI8KtCz/INTwqKlhnOzG4cK5wc3OWbSk+15IzOtPqeTL8WGSJArlMeIt7kqybkhzv3v1rQGEoyOleaCbC4yj75erhx02KihzTJiz3pMs1uA+EkVI09KRL/OWzjN49NAKS7AOIPZwnSJEIyQ+xz6ehk06LmOoczffqWMGf2oZ/xZcsuX+5fa+1TP3N+87/coz9Cv5Dp8PT+KPiOx7VeI0XatNt1KU/aYY8uSm/32W/tApKG9AONtZMonXwQ38d1lFe5i+68dN2zAOLSJysO+fTKtmKwmxRJDxdpf9QAHmPh53KxCchkR79DWG0+F4LBpWYLCuSHtsvShj2cbqHLjIwvQQUA3gQbw== X-Forefront-Antispam-Report: CIP:12.22.5.235;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:mail.nvidia.com;PTR:InfoNoRecords;CAT:NONE;SFS:(13230001)(4636009)(46966006)(36840700001)(40470700004)(110136005)(356005)(54906003)(86362001)(82310400004)(4326008)(70586007)(70206006)(316002)(8936002)(8676002)(426003)(336012)(107886003)(2616005)(26005)(186003)(47076005)(5660300002)(36860700001)(83380400001)(6666004)(508600001)(40460700003)(81166007)(7696005)(36756003)(7416002)(2906002)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Mar 2022 14:04:19.1136 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3bee82ce-5c26-494b-e424-08da131f5982 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[12.22.5.235];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT053.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1926 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Asynchronous Sample Rate Converter (ASRC) is a client of AHUB and is present on Tegra186 and later generations of Tegra SoC. Add this device on the relevant SoC DTSI files. Signed-off-by: Sameer Pujar --- arch/arm64/boot/dts/nvidia/tegra186.dtsi | 7 +++++++ arch/arm64/boot/dts/nvidia/tegra194.dtsi | 8 ++++++++ arch/arm64/boot/dts/nvidia/tegra234.dtsi | 8 ++++++++ 3 files changed, 23 insertions(+) diff --git a/arch/arm64/boot/dts/nvidia/tegra186.dtsi b/arch/arm64/boot/dts= /nvidia/tegra186.dtsi index e9b40f5..2e7faa1 100644 --- a/arch/arm64/boot/dts/nvidia/tegra186.dtsi +++ b/arch/arm64/boot/dts/nvidia/tegra186.dtsi @@ -516,6 +516,13 @@ sound-name-prefix =3D "MIXER1"; status =3D "disabled"; }; + + tegra_asrc: asrc@2910000 { + compatible =3D "nvidia,tegra186-asrc"; + reg =3D <0x2910000 0x2000>; + sound-name-prefix =3D "ASRC1"; + status =3D "disabled"; + }; }; }; =20 diff --git a/arch/arm64/boot/dts/nvidia/tegra194.dtsi b/arch/arm64/boot/dts= /nvidia/tegra194.dtsi index 751ebe5..4306181 100644 --- a/arch/arm64/boot/dts/nvidia/tegra194.dtsi +++ b/arch/arm64/boot/dts/nvidia/tegra194.dtsi @@ -569,6 +569,14 @@ sound-name-prefix =3D "MIXER1"; status =3D "disabled"; }; + + tegra_asrc: asrc@2910000 { + compatible =3D "nvidia,tegra194-asrc", + "nvidia,tegra186-asrc"; + reg =3D <0x2910000 0x2000>; + sound-name-prefix =3D "ASRC1"; + status =3D "disabled"; + }; }; }; =20 diff --git a/arch/arm64/boot/dts/nvidia/tegra234.dtsi b/arch/arm64/boot/dts= /nvidia/tegra234.dtsi index aaace60..0a6ff6d 100644 --- a/arch/arm64/boot/dts/nvidia/tegra234.dtsi +++ b/arch/arm64/boot/dts/nvidia/tegra234.dtsi @@ -378,6 +378,14 @@ iommus =3D <&smmu_niso0 TEGRA234_SID_APE>; status =3D "disabled"; }; + + tegra_asrc: asrc@2910000 { + compatible =3D "nvidia,tegra234-asrc", + "nvidia,tegra186-asrc"; + reg =3D <0x2910000 0x2000>; + sound-name-prefix =3D "ASRC1"; + status =3D "disabled"; + }; }; =20 adma: dma-controller@2930000 { --=20 2.7.4 From nobody Fri Jun 19 17:03:18 2026 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 DA14CC4167B for ; Thu, 31 Mar 2022 14:04:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237242AbiCaOG0 (ORCPT ); Thu, 31 Mar 2022 10:06:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37500 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237270AbiCaOGP (ORCPT ); Thu, 31 Mar 2022 10:06:15 -0400 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2088.outbound.protection.outlook.com [40.107.244.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AAC065F8D7; Thu, 31 Mar 2022 07:04:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eGrgjS73OKDqJiswLwp47SXAZEqjVvCyX0OUrct8NdGwLkYWL/n0DF7gt8wm6DYPm7+JVJxM09cvkMkYGRtZAkpm7yEokP7Zp21dDgFETKjJ9rgDRVEAa5qEAXL26BsvHf7f1pujUAc6iy0lOCIwtHGSglp/hf+MRTvOtp7eyDOARevCHr6zARWUXTvXEW8htskLumYcaQw4aTjQauoVvjJW3ubOxDc3R6uVyCO0jxqPme4evod2yg7LWnPEBjs39deQd+SI+1FMQyQ/dMx/fjdmX7p4FJ7SkKNVB58qIWZA8gWyBS0CzDb2OnJ3Cv/aBiz3p9D5Gr0AoNBeBm4D6Q== 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=iDSXocJiUNY1Pz+1qKhIaiV1ijyOWkdOcNqFV7QpXEo=; b=Q/ALnMgCscey+5T8yuccRucUNf/yLxMGhiOwc9QEwM0aXwN3o0FnghjhiZfnn20Z3TlJZBmRmP3exucLRQkhXFb+c0Yw84ElgHDlcJLW0OdQ1Fk/pYBoiIYzDwBt2oCGekHGaXfoYfuQ7icsEuTq4S+KVuLU0zaaVHmalgaJOUwycR5yGYoZ5WPk+MJ5O2Tb8/Qj+difEpxtSkfuIgDjlRD9G56Ipl5VWc3nJGg6yfKyinTeBqmeQqvsjjJAkzz3A4S6rcQ2flxvvyWfhhygjRCzREkbwF/JiFa2R2gsBZd6nAv3p0uclgTE/g4nVDJsQkRUNK5TbOIcNt7rBCq6Jg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 12.22.5.238) smtp.rcpttodomain=alsa-project.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iDSXocJiUNY1Pz+1qKhIaiV1ijyOWkdOcNqFV7QpXEo=; b=JETQtE3A7EZ0Nh1mBS5X3NQJnh9D+mVzMTVraGNIsz5yJY6rBx8EuTbDiGraDHJJuAjQm69/7rV+SG+lygslCLuSTxgFnKwOguWunTiPv12Bs3uA5giYTBVDUahqtNIokFodBP7ktpusuvaNVnK5pQPOgvd2YCOeWFVw72VK/ktTcxFX7YbJVEFvYTcugbI2YfuP5IjApGWsZ4GZv/qMhso6z24+/YbXfJxY3dTMapjTCx1aHv2WkCncb9R5BtHynJ5Kty7aeCcAfrllRbVTp2GrkCUu8Bg9IC+3DwyvkG5srbH00NH71ACrEgUjUgxFhAS8nPrE3jxjAhOzRvuVsw== Received: from BN9PR03CA0864.namprd03.prod.outlook.com (2603:10b6:408:13d::29) by CO6PR12MB5476.namprd12.prod.outlook.com (2603:10b6:303:138::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.21; Thu, 31 Mar 2022 14:04:14 +0000 Received: from BN8NAM11FT055.eop-nam11.prod.protection.outlook.com (2603:10b6:408:13d:cafe::2e) by BN9PR03CA0864.outlook.office365.com (2603:10b6:408:13d::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.23 via Frontend Transport; Thu, 31 Mar 2022 14:04:14 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 12.22.5.238) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 12.22.5.238 as permitted sender) receiver=protection.outlook.com; client-ip=12.22.5.238; helo=mail.nvidia.com; Received: from mail.nvidia.com (12.22.5.238) by BN8NAM11FT055.mail.protection.outlook.com (10.13.177.62) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.5123.19 via Frontend Transport; Thu, 31 Mar 2022 14:04:13 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by DRHQMAIL105.nvidia.com (10.27.9.14) with Microsoft SMTP Server (TLS) id 15.0.1497.32; Thu, 31 Mar 2022 14:04:12 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Thu, 31 Mar 2022 07:04:12 -0700 Received: from audio.nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.8) with Microsoft SMTP Server id 15.2.986.22 via Frontend Transport; Thu, 31 Mar 2022 07:04:08 -0700 From: Sameer Pujar To: , , , , , , CC: , , , , , , , , Sameer Pujar Subject: [PATCH v2 6/6] arm64: tegra: Enable ASRC on various platforms Date: Thu, 31 Mar 2022 19:33:32 +0530 Message-ID: <1648735412-32220-7-git-send-email-spujar@nvidia.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1648735412-32220-1-git-send-email-spujar@nvidia.com> References: <1648735412-32220-1-git-send-email-spujar@nvidia.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c41b89c8-4ed1-4eaf-8f26-08da131f5640 X-MS-TrafficTypeDiagnostic: CO6PR12MB5476: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: /CqU2HyGJE2zoy9zYBoFNIMd4/xbe4QHcxi2+eLECnELAFyOca8DkhYpUHBmOXzLnYReJpdOv7jQ66jn1eAt4Ou5FKmxrwZIou+iBtSlyRWscWXkGIyzeXMpbBJDJsGTbgZR/qRMrQzxuvK09FgAWCNv5FUNLdrctQvdib9r7mDl7pjK3t67b4kCZGSTHaLCww8iOKaKaG0G+aE/jdJLX1i/Vwd+uJt4kQf2A10O0RLF/PnfSxrpg5eGnlDwmt1Pvs8H/TD/gro2GF0bz56yuP7E4mRO5pJuMO/Sc7s3A8xP9G/OUPf9xDbAolfyUbYc2jvz43nfw+PMnsU2eN8/VTr+CoWHAYY5EwEEIzipD7hHoWqpxm9ixxK5pkz8y8Z7qJBVXQtVFXEuwYUmOKeeiZQw38i4DGXQJE0SSQnPPpxcHZlrjhKSoPpzqAgOdwaQfFr8qDmEyQk4dsx9FuyvDf84ykxMuZsEZcnkrj7WuZHzo1Top0STTXZInrH5ttFyJPu/x72OiecduIavfn4VjRQEmiRrJMAjf1cqEEKstwKlbDaPVGsAXdZMqanXZ0k0z2NtCM5cjyd0vYFPSpAE5ungDJ0D/l3FUbCtLoj3ddvnIboRevDEoouobkNSDvwBvQlTIeOS1+4rSscBxPYrK+e3U/o4ZR9tjYegAH+8Ue2AulMFZtA3h0CC7w8AbkD3uZOt1c+u8CwP+0IpWvbe9g== X-Forefront-Antispam-Report: CIP:12.22.5.238;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:mail.nvidia.com;PTR:InfoNoRecords;CAT:NONE;SFS:(13230001)(4636009)(40470700004)(46966006)(36840700001)(82310400004)(30864003)(356005)(8936002)(7416002)(5660300002)(81166007)(6666004)(2616005)(107886003)(54906003)(426003)(40460700003)(186003)(26005)(336012)(508600001)(7696005)(110136005)(36860700001)(4326008)(316002)(47076005)(70206006)(70586007)(8676002)(86362001)(2906002)(36756003)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Mar 2022 14:04:13.5832 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c41b89c8-4ed1-4eaf-8f26-08da131f5640 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[12.22.5.238];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT055.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO6PR12MB5476 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Enable ASRC module usage on various Jetson Platforms. This can be plugged into an audio path using ALSA mixer controls. Signed-off-by: Sameer Pujar --- arch/arm64/boot/dts/nvidia/tegra186-p2771-0000.dts | 223 +++++++++++++++++= ++++ arch/arm64/boot/dts/nvidia/tegra194-p2972-0000.dts | 223 +++++++++++++++++= ++++ .../arm64/boot/dts/nvidia/tegra194-p3509-0000.dtsi | 223 +++++++++++++++++= ++++ .../dts/nvidia/tegra234-p3737-0000+p3701-0000.dts | 223 +++++++++++++++++= ++++ 4 files changed, 892 insertions(+) diff --git a/arch/arm64/boot/dts/nvidia/tegra186-p2771-0000.dts b/arch/arm6= 4/boot/dts/nvidia/tegra186-p2771-0000.dts index c4dee05..70737a0 100644 --- a/arch/arm64/boot/dts/nvidia/tegra186-p2771-0000.dts +++ b/arch/arm64/boot/dts/nvidia/tegra186-p2771-0000.dts @@ -811,6 +811,110 @@ remote-endpoint =3D <&mixer_out5_ep>; }; }; + + xbar_asrc_in1_port: port@63 { + reg =3D <0x63>; + + xbar_asrc_in1_ep: endpoint { + remote-endpoint =3D <&asrc_in1_ep>; + }; + }; + + port@64 { + reg =3D <0x64>; + + xbar_asrc_out1_ep: endpoint { + remote-endpoint =3D <&asrc_out1_ep>; + }; + }; + + xbar_asrc_in2_port: port@65 { + reg =3D <0x65>; + + xbar_asrc_in2_ep: endpoint { + remote-endpoint =3D <&asrc_in2_ep>; + }; + }; + + port@66 { + reg =3D <0x66>; + + xbar_asrc_out2_ep: endpoint { + remote-endpoint =3D <&asrc_out2_ep>; + }; + }; + + xbar_asrc_in3_port: port@67 { + reg =3D <0x67>; + + xbar_asrc_in3_ep: endpoint { + remote-endpoint =3D <&asrc_in3_ep>; + }; + }; + + port@68 { + reg =3D <0x68>; + + xbar_asrc_out3_ep: endpoint { + remote-endpoint =3D <&asrc_out3_ep>; + }; + }; + + xbar_asrc_in4_port: port@69 { + reg =3D <0x69>; + + xbar_asrc_in4_ep: endpoint { + remote-endpoint =3D <&asrc_in4_ep>; + }; + }; + + port@6a { + reg =3D <0x6a>; + + xbar_asrc_out4_ep: endpoint { + remote-endpoint =3D <&asrc_out4_ep>; + }; + }; + + xbar_asrc_in5_port: port@6b { + reg =3D <0x6b>; + + xbar_asrc_in5_ep: endpoint { + remote-endpoint =3D <&asrc_in5_ep>; + }; + }; + + port@6c { + reg =3D <0x6c>; + + xbar_asrc_out5_ep: endpoint { + remote-endpoint =3D <&asrc_out5_ep>; + }; + }; + + xbar_asrc_in6_port: port@6d { + reg =3D <0x6d>; + + xbar_asrc_in6_ep: endpoint { + remote-endpoint =3D <&asrc_in6_ep>; + }; + }; + + port@6e { + reg =3D <0x6e>; + + xbar_asrc_out6_ep: endpoint { + remote-endpoint =3D <&asrc_out6_ep>; + }; + }; + + xbar_asrc_in7_port: port@6f { + reg =3D <0x6f>; + + xbar_asrc_in7_ep: endpoint { + remote-endpoint =3D <&asrc_in7_ep>; + }; + }; }; =20 admaif@290f000 { @@ -1935,6 +2039,119 @@ }; }; }; + + asrc@2910000 { + status =3D "okay"; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + port@0 { + reg =3D <0x0>; + + asrc_in1_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in1_ep>; + }; + }; + + port@1 { + reg =3D <0x1>; + + asrc_in2_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in2_ep>; + }; + }; + + port@2 { + reg =3D <0x2>; + + asrc_in3_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in3_ep>; + }; + }; + + port@3 { + reg =3D <0x3>; + + asrc_in4_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in4_ep>; + }; + }; + + port@4 { + reg =3D <0x4>; + + asrc_in5_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in5_ep>; + }; + }; + + port@5 { + reg =3D <0x5>; + + asrc_in6_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in6_ep>; + }; + }; + + port@6 { + reg =3D <0x6>; + + asrc_in7_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in7_ep>; + }; + }; + + asrc_out1_port: port@7 { + reg =3D <0x7>; + + asrc_out1_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out1_ep>; + }; + }; + + asrc_out2_port: port@8 { + reg =3D <0x8>; + + asrc_out2_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out2_ep>; + }; + }; + + asrc_out3_port: port@9 { + reg =3D <0x9>; + + asrc_out3_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out3_ep>; + }; + }; + + asrc_out4_port: port@a { + reg =3D <0xa>; + + asrc_out4_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out4_ep>; + }; + }; + + asrc_out5_port: port@b { + reg =3D <0xb>; + + asrc_out5_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out5_ep>; + }; + }; + + asrc_out6_port: port@c { + reg =3D <0xc>; + + asrc_out6_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out6_ep>; + }; + }; + }; + }; }; }; =20 @@ -2331,6 +2548,10 @@ <&xbar_mixer_in5_port>, <&xbar_mixer_in6_port>, <&xbar_mixer_in7_port>, <&xbar_mixer_in8_port>, <&xbar_mixer_in9_port>, <&xbar_mixer_in10_port>, + <&xbar_asrc_in1_port>, <&xbar_asrc_in2_port>, + <&xbar_asrc_in3_port>, <&xbar_asrc_in4_port>, + <&xbar_asrc_in5_port>, <&xbar_asrc_in6_port>, + <&xbar_asrc_in7_port>, /* HW accelerators */ <&sfc1_out_port>, <&sfc2_out_port>, <&sfc3_out_port>, <&sfc4_out_port>, @@ -2348,6 +2569,8 @@ <&mixer_out1_port>, <&mixer_out2_port>, <&mixer_out3_port>, <&mixer_out4_port>, <&mixer_out5_port>, + <&asrc_out1_port>, <&asrc_out2_port>, <&asrc_out3_port>, + <&asrc_out4_port>, <&asrc_out5_port>, <&asrc_out6_port>, /* I/O */ <&i2s1_port>, <&i2s2_port>, <&i2s3_port>, <&i2s4_port>, <&i2s5_port>, <&i2s6_port>, <&dmic1_port>, <&dmic2_port>, diff --git a/arch/arm64/boot/dts/nvidia/tegra194-p2972-0000.dts b/arch/arm6= 4/boot/dts/nvidia/tegra194-p2972-0000.dts index 2478ece9e..6719638 100644 --- a/arch/arm64/boot/dts/nvidia/tegra194-p2972-0000.dts +++ b/arch/arm64/boot/dts/nvidia/tegra194-p2972-0000.dts @@ -764,6 +764,110 @@ remote-endpoint =3D <&mixer_out5_ep>; }; }; + + xbar_asrc_in1_port: port@63 { + reg =3D <0x63>; + + xbar_asrc_in1_ep: endpoint { + remote-endpoint =3D <&asrc_in1_ep>; + }; + }; + + port@64 { + reg =3D <0x64>; + + xbar_asrc_out1_ep: endpoint { + remote-endpoint =3D <&asrc_out1_ep>; + }; + }; + + xbar_asrc_in2_port: port@65 { + reg =3D <0x65>; + + xbar_asrc_in2_ep: endpoint { + remote-endpoint =3D <&asrc_in2_ep>; + }; + }; + + port@66 { + reg =3D <0x66>; + + xbar_asrc_out2_ep: endpoint { + remote-endpoint =3D <&asrc_out2_ep>; + }; + }; + + xbar_asrc_in3_port: port@67 { + reg =3D <0x67>; + + xbar_asrc_in3_ep: endpoint { + remote-endpoint =3D <&asrc_in3_ep>; + }; + }; + + port@68 { + reg =3D <0x68>; + + xbar_asrc_out3_ep: endpoint { + remote-endpoint =3D <&asrc_out3_ep>; + }; + }; + + xbar_asrc_in4_port: port@69 { + reg =3D <0x69>; + + xbar_asrc_in4_ep: endpoint { + remote-endpoint =3D <&asrc_in4_ep>; + }; + }; + + port@6a { + reg =3D <0x6a>; + + xbar_asrc_out4_ep: endpoint { + remote-endpoint =3D <&asrc_out4_ep>; + }; + }; + + xbar_asrc_in5_port: port@6b { + reg =3D <0x6b>; + + xbar_asrc_in5_ep: endpoint { + remote-endpoint =3D <&asrc_in5_ep>; + }; + }; + + port@6c { + reg =3D <0x6c>; + + xbar_asrc_out5_ep: endpoint { + remote-endpoint =3D <&asrc_out5_ep>; + }; + }; + + xbar_asrc_in6_port: port@6d { + reg =3D <0x6d>; + + xbar_asrc_in6_ep: endpoint { + remote-endpoint =3D <&asrc_in6_ep>; + }; + }; + + port@6e { + reg =3D <0x6e>; + + xbar_asrc_out6_ep: endpoint { + remote-endpoint =3D <&asrc_out6_ep>; + }; + }; + + xbar_asrc_in7_port: port@6f { + reg =3D <0x6f>; + + xbar_asrc_in7_ep: endpoint { + remote-endpoint =3D <&asrc_in7_ep>; + }; + }; }; =20 admaif@290f000 { @@ -1734,6 +1838,119 @@ }; }; }; + + asrc@2910000 { + status =3D "okay"; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + port@0 { + reg =3D <0x0>; + + asrc_in1_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in1_ep>; + }; + }; + + port@1 { + reg =3D <0x1>; + + asrc_in2_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in2_ep>; + }; + }; + + port@2 { + reg =3D <0x2>; + + asrc_in3_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in3_ep>; + }; + }; + + port@3 { + reg =3D <0x3>; + + asrc_in4_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in4_ep>; + }; + }; + + port@4 { + reg =3D <0x4>; + + asrc_in5_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in5_ep>; + }; + }; + + port@5 { + reg =3D <0x5>; + + asrc_in6_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in6_ep>; + }; + }; + + port@6 { + reg =3D <0x6>; + + asrc_in7_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in7_ep>; + }; + }; + + asrc_out1_port: port@7 { + reg =3D <0x7>; + + asrc_out1_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out1_ep>; + }; + }; + + asrc_out2_port: port@8 { + reg =3D <0x8>; + + asrc_out2_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out2_ep>; + }; + }; + + asrc_out3_port: port@9 { + reg =3D <0x9>; + + asrc_out3_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out3_ep>; + }; + }; + + asrc_out4_port: port@a { + reg =3D <0xa>; + + asrc_out4_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out4_ep>; + }; + }; + + asrc_out5_port: port@b { + reg =3D <0xb>; + + asrc_out5_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out5_ep>; + }; + }; + + asrc_out6_port: port@c { + reg =3D <0xc>; + + asrc_out6_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out6_ep>; + }; + }; + }; + }; }; }; =20 @@ -2052,6 +2269,10 @@ <&xbar_mixer_in5_port>, <&xbar_mixer_in6_port>, <&xbar_mixer_in7_port>, <&xbar_mixer_in8_port>, <&xbar_mixer_in9_port>, <&xbar_mixer_in10_port>, + <&xbar_asrc_in1_port>, <&xbar_asrc_in2_port>, + <&xbar_asrc_in3_port>, <&xbar_asrc_in4_port>, + <&xbar_asrc_in5_port>, <&xbar_asrc_in6_port>, + <&xbar_asrc_in7_port>, /* HW accelerators */ <&sfc1_out_port>, <&sfc2_out_port>, <&sfc3_out_port>, <&sfc4_out_port>, @@ -2068,6 +2289,8 @@ <&adx4_out3_port>, <&adx4_out4_port>, <&mixer_out1_port>, <&mixer_out2_port>, <&mixer_out3_port>, <&mixer_out4_port>, <&mixer_out5_port>, + <&asrc_out1_port>, <&asrc_out2_port>, <&asrc_out3_port>, + <&asrc_out4_port>, <&asrc_out5_port>, <&asrc_out6_port>, /* BE I/O Ports */ <&i2s1_port>, <&i2s2_port>, <&i2s4_port>, <&i2s6_port>, <&dmic3_port>; diff --git a/arch/arm64/boot/dts/nvidia/tegra194-p3509-0000.dtsi b/arch/arm= 64/boot/dts/nvidia/tegra194-p3509-0000.dtsi index 32ce790..9c4871b 100644 --- a/arch/arm64/boot/dts/nvidia/tegra194-p3509-0000.dtsi +++ b/arch/arm64/boot/dts/nvidia/tegra194-p3509-0000.dtsi @@ -774,6 +774,110 @@ remote-endpoint =3D <&mixer_out5_ep>; }; }; + + xbar_asrc_in1_port: port@63 { + reg =3D <0x63>; + + xbar_asrc_in1_ep: endpoint { + remote-endpoint =3D <&asrc_in1_ep>; + }; + }; + + port@64 { + reg =3D <0x64>; + + xbar_asrc_out1_ep: endpoint { + remote-endpoint =3D <&asrc_out1_ep>; + }; + }; + + xbar_asrc_in2_port: port@65 { + reg =3D <0x65>; + + xbar_asrc_in2_ep: endpoint { + remote-endpoint =3D <&asrc_in2_ep>; + }; + }; + + port@66 { + reg =3D <0x66>; + + xbar_asrc_out2_ep: endpoint { + remote-endpoint =3D <&asrc_out2_ep>; + }; + }; + + xbar_asrc_in3_port: port@67 { + reg =3D <0x67>; + + xbar_asrc_in3_ep: endpoint { + remote-endpoint =3D <&asrc_in3_ep>; + }; + }; + + port@68 { + reg =3D <0x68>; + + xbar_asrc_out3_ep: endpoint { + remote-endpoint =3D <&asrc_out3_ep>; + }; + }; + + xbar_asrc_in4_port: port@69 { + reg =3D <0x69>; + + xbar_asrc_in4_ep: endpoint { + remote-endpoint =3D <&asrc_in4_ep>; + }; + }; + + port@6a { + reg =3D <0x6a>; + + xbar_asrc_out4_ep: endpoint { + remote-endpoint =3D <&asrc_out4_ep>; + }; + }; + + xbar_asrc_in5_port: port@6b { + reg =3D <0x6b>; + + xbar_asrc_in5_ep: endpoint { + remote-endpoint =3D <&asrc_in5_ep>; + }; + }; + + port@6c { + reg =3D <0x6c>; + + xbar_asrc_out5_ep: endpoint { + remote-endpoint =3D <&asrc_out5_ep>; + }; + }; + + xbar_asrc_in6_port: port@6d { + reg =3D <0x6d>; + + xbar_asrc_in6_ep: endpoint { + remote-endpoint =3D <&asrc_in6_ep>; + }; + }; + + port@6e { + reg =3D <0x6e>; + + xbar_asrc_out6_ep: endpoint { + remote-endpoint =3D <&asrc_out6_ep>; + }; + }; + + xbar_asrc_in7_port: port@6f { + reg =3D <0x6f>; + + xbar_asrc_in7_ep: endpoint { + remote-endpoint =3D <&asrc_in7_ep>; + }; + }; }; =20 admaif@290f000 { @@ -1794,6 +1898,119 @@ }; }; }; + + asrc@2910000 { + status =3D "okay"; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + port@0 { + reg =3D <0x0>; + + asrc_in1_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in1_ep>; + }; + }; + + port@1 { + reg =3D <0x1>; + + asrc_in2_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in2_ep>; + }; + }; + + port@2 { + reg =3D <0x2>; + + asrc_in3_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in3_ep>; + }; + }; + + port@3 { + reg =3D <0x3>; + + asrc_in4_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in4_ep>; + }; + }; + + port@4 { + reg =3D <0x4>; + + asrc_in5_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in5_ep>; + }; + }; + + port@5 { + reg =3D <0x5>; + + asrc_in6_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in6_ep>; + }; + }; + + port@6 { + reg =3D <0x6>; + + asrc_in7_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in7_ep>; + }; + }; + + asrc_out1_port: port@7 { + reg =3D <0x7>; + + asrc_out1_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out1_ep>; + }; + }; + + asrc_out2_port: port@8 { + reg =3D <0x8>; + + asrc_out2_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out2_ep>; + }; + }; + + asrc_out3_port: port@9 { + reg =3D <0x9>; + + asrc_out3_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out3_ep>; + }; + }; + + asrc_out4_port: port@a { + reg =3D <0xa>; + + asrc_out4_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out4_ep>; + }; + }; + + asrc_out5_port: port@b { + reg =3D <0xb>; + + asrc_out5_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out5_ep>; + }; + }; + + asrc_out6_port: port@c { + reg =3D <0xc>; + + asrc_out6_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out6_ep>; + }; + }; + }; + }; }; }; =20 @@ -2102,6 +2319,10 @@ <&xbar_mixer_in5_port>, <&xbar_mixer_in6_port>, <&xbar_mixer_in7_port>, <&xbar_mixer_in8_port>, <&xbar_mixer_in9_port>, <&xbar_mixer_in10_port>, + <&xbar_asrc_in1_port>, <&xbar_asrc_in2_port>, + <&xbar_asrc_in3_port>, <&xbar_asrc_in4_port>, + <&xbar_asrc_in5_port>, <&xbar_asrc_in6_port>, + <&xbar_asrc_in7_port>, /* HW accelerators */ <&sfc1_out_port>, <&sfc2_out_port>, <&sfc3_out_port>, <&sfc4_out_port>, @@ -2119,6 +2340,8 @@ <&mixer_out1_port>, <&mixer_out2_port>, <&mixer_out3_port>, <&mixer_out4_port>, <&mixer_out5_port>, + <&asrc_out1_port>, <&asrc_out2_port>, <&asrc_out3_port>, + <&asrc_out4_port>, <&asrc_out5_port>, <&asrc_out6_port>, /* BE I/O Ports */ <&i2s3_port>, <&i2s5_port>, <&dmic1_port>, <&dmic2_port>, <&dmic4_port>, diff --git a/arch/arm64/boot/dts/nvidia/tegra234-p3737-0000+p3701-0000.dts = b/arch/arm64/boot/dts/nvidia/tegra234-p3737-0000+p3701-0000.dts index 34d6a01..eaf1994 100644 --- a/arch/arm64/boot/dts/nvidia/tegra234-p3737-0000+p3701-0000.dts +++ b/arch/arm64/boot/dts/nvidia/tegra234-p3737-0000+p3701-0000.dts @@ -763,6 +763,110 @@ remote-endpoint =3D <&mix_out5>; }; }; + + xbar_asrc_in1_port: port@63 { + reg =3D <0x63>; + + xbar_asrc_in1_ep: endpoint { + remote-endpoint =3D <&asrc_in1_ep>; + }; + }; + + port@64 { + reg =3D <0x64>; + + xbar_asrc_out1_ep: endpoint { + remote-endpoint =3D <&asrc_out1_ep>; + }; + }; + + xbar_asrc_in2_port: port@65 { + reg =3D <0x65>; + + xbar_asrc_in2_ep: endpoint { + remote-endpoint =3D <&asrc_in2_ep>; + }; + }; + + port@66 { + reg =3D <0x66>; + + xbar_asrc_out2_ep: endpoint { + remote-endpoint =3D <&asrc_out2_ep>; + }; + }; + + xbar_asrc_in3_port: port@67 { + reg =3D <0x67>; + + xbar_asrc_in3_ep: endpoint { + remote-endpoint =3D <&asrc_in3_ep>; + }; + }; + + port@68 { + reg =3D <0x68>; + + xbar_asrc_out3_ep: endpoint { + remote-endpoint =3D <&asrc_out3_ep>; + }; + }; + + xbar_asrc_in4_port: port@69 { + reg =3D <0x69>; + + xbar_asrc_in4_ep: endpoint { + remote-endpoint =3D <&asrc_in4_ep>; + }; + }; + + port@6a { + reg =3D <0x6a>; + + xbar_asrc_out4_ep: endpoint { + remote-endpoint =3D <&asrc_out4_ep>; + }; + }; + + xbar_asrc_in5_port: port@6b { + reg =3D <0x6b>; + + xbar_asrc_in5_ep: endpoint { + remote-endpoint =3D <&asrc_in5_ep>; + }; + }; + + port@6c { + reg =3D <0x6c>; + + xbar_asrc_out5_ep: endpoint { + remote-endpoint =3D <&asrc_out5_ep>; + }; + }; + + xbar_asrc_in6_port: port@6d { + reg =3D <0x6d>; + + xbar_asrc_in6_ep: endpoint { + remote-endpoint =3D <&asrc_in6_ep>; + }; + }; + + port@6e { + reg =3D <0x6e>; + + xbar_asrc_out6_ep: endpoint { + remote-endpoint =3D <&asrc_out6_ep>; + }; + }; + + xbar_asrc_in7_port: port@6f { + reg =3D <0x6f>; + + xbar_asrc_in7_ep: endpoint { + remote-endpoint =3D <&asrc_in7_ep>; + }; + }; }; =20 i2s@2901000 { @@ -1733,6 +1837,119 @@ }; }; }; + + asrc@2910000 { + status =3D "okay"; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + port@0 { + reg =3D <0x0>; + + asrc_in1_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in1_ep>; + }; + }; + + port@1 { + reg =3D <0x1>; + + asrc_in2_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in2_ep>; + }; + }; + + port@2 { + reg =3D <0x2>; + + asrc_in3_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in3_ep>; + }; + }; + + port@3 { + reg =3D <0x3>; + + asrc_in4_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in4_ep>; + }; + }; + + port@4 { + reg =3D <0x4>; + + asrc_in5_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in5_ep>; + }; + }; + + port@5 { + reg =3D <0x5>; + + asrc_in6_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in6_ep>; + }; + }; + + port@6 { + reg =3D <0x6>; + + asrc_in7_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_in7_ep>; + }; + }; + + asrc_out1_port: port@7 { + reg =3D <0x7>; + + asrc_out1_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out1_ep>; + }; + }; + + asrc_out2_port: port@8 { + reg =3D <0x8>; + + asrc_out2_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out2_ep>; + }; + }; + + asrc_out3_port: port@9 { + reg =3D <0x9>; + + asrc_out3_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out3_ep>; + }; + }; + + asrc_out4_port: port@a { + reg =3D <0xa>; + + asrc_out4_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out4_ep>; + }; + }; + + asrc_out5_port: port@b { + reg =3D <0xb>; + + asrc_out5_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out5_ep>; + }; + }; + + asrc_out6_port: port@c { + reg =3D <0xc>; + + asrc_out6_ep: endpoint { + remote-endpoint =3D <&xbar_asrc_out6_ep>; + }; + }; + }; + }; }; =20 dma-controller@2930000 { @@ -1823,6 +2040,10 @@ <&xbar_mix_in5_port>, <&xbar_mix_in6_port>, <&xbar_mix_in7_port>, <&xbar_mix_in8_port>, <&xbar_mix_in9_port>, <&xbar_mix_in10_port>, + <&xbar_asrc_in1_port>, <&xbar_asrc_in2_port>, + <&xbar_asrc_in3_port>, <&xbar_asrc_in4_port>, + <&xbar_asrc_in5_port>, <&xbar_asrc_in6_port>, + <&xbar_asrc_in7_port>, /* HW accelerators */ <&sfc1_out_port>, <&sfc2_out_port>, <&sfc3_out_port>, <&sfc4_out_port>, @@ -1839,6 +2060,8 @@ <&adx4_out3_port>, <&adx4_out4_port>, <&mix_out1_port>, <&mix_out2_port>, <&mix_out3_port>, <&mix_out4_port>, <&mix_out5_port>, + <&asrc_out1_port>, <&asrc_out2_port>, <&asrc_out3_port>, + <&asrc_out4_port>, <&asrc_out5_port>, <&asrc_out6_port>, /* BE I/O Ports */ <&i2s1_port>, <&i2s2_port>, <&i2s4_port>, <&i2s6_port>, <&dmic3_port>; --=20 2.7.4