From patchwork Tue Mar 20 08:18:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mukunda,Vijendar" X-Patchwork-Id: 10296631 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 6CE5E602C2 for ; Tue, 20 Mar 2018 08:16:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5D77C29567 for ; Tue, 20 Mar 2018 08:16:51 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 50E402956B; Tue, 20 Mar 2018 08:16:51 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.8 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_SIGNED, RCVD_IN_DNSWL_NONE, T_DKIM_INVALID autolearn=no version=3.3.1 Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BBE0729567 for ; Tue, 20 Mar 2018 08:16:49 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 93AF7267214; Tue, 20 Mar 2018 09:16:45 +0100 (CET) X-Original-To: alsa-devel@alsa-project.org Delivered-To: alsa-devel@alsa-project.org Received: by alsa0.perex.cz (Postfix, from userid 1000) id 62854267219; Tue, 20 Mar 2018 09:16:42 +0100 (CET) Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0058.outbound.protection.outlook.com [104.47.38.58]) by alsa0.perex.cz (Postfix) with ESMTP id E3950267214 for ; Tue, 20 Mar 2018 09:16:38 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=xgnJDZTGoHRtW9n7+gp2DoYKsuarNk0n+yHU0MRDmPY=; b=e2WaP2bquFUl/nYegNkQpAmWZ21FzyGy+oUNNBTSEvRgOB9gxmBxjNTx//XsWPGKfkscLKxxiKDUC+u9i0CMnHQgqEPEjPzdeBQ0imcx9dGlUh1kFsIyaxvFuwBlgc1JAC250zgXJStAxU0iIheGgAbqY5UJALJIuSFT9EZqHkw= Received: from SN1PR12CA0109.namprd12.prod.outlook.com (2603:10b6:802:21::44) by BN1PR12MB0019.namprd12.prod.outlook.com (2a01:111:e400:52::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.588.14; Tue, 20 Mar 2018 08:16:32 +0000 Received: from CO1NAM03FT023.eop-NAM03.prod.protection.outlook.com (2a01:111:f400:7e48::200) by SN1PR12CA0109.outlook.office365.com (2603:10b6:802:21::44) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.588.14 via Frontend Transport; Tue, 20 Mar 2018 08:16:31 +0000 Authentication-Results: spf=none (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; gmail.com; dkim=none (message not signed) header.d=none; gmail.com; dmarc=permerror action=none header.from=amd.com; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) Received: from SATLEXCHOV01.amd.com (165.204.84.17) by CO1NAM03FT023.mail.protection.outlook.com (10.152.80.157) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.567.18 via Frontend Transport; Tue, 20 Mar 2018 08:16:31 +0000 Received: from LinuxHost.amd.com (10.34.1.3) by SATLEXCHOV01.amd.com (10.181.40.71) with Microsoft SMTP Server id 14.3.382.0; Tue, 20 Mar 2018 03:16:30 -0500 From: Vijendar Mukunda To: , , Date: Tue, 20 Mar 2018 13:48:41 +0530 Message-ID: <1521533921-21782-1-git-send-email-Vijendar.Mukunda@amd.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:165.204.84.17; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(396003)(39380400002)(39860400002)(346002)(376002)(2980300002)(428003)(199004)(189003)(59450400001)(7696005)(47776003)(36756003)(53416004)(2906002)(50226002)(54906003)(8936002)(336012)(51416003)(110136005)(426003)(6666003)(4326008)(305945005)(2201001)(53936002)(105586002)(50466002)(39060400002)(186003)(5660300001)(106466001)(72206003)(68736007)(104016004)(356003)(48376002)(81166006)(81156014)(86362001)(26005)(316002)(97736004)(8676002)(478600001)(77096007)(16586007); DIR:OUT; SFP:1101; SCL:1; SRVR:BN1PR12MB0019; H:SATLEXCHOV01.amd.com; FPR:; SPF:None; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; CO1NAM03FT023; 1:sild2vT1k4BEvAEPLzkP0jfK70edrqD48AfbTgHY3mla+VMqJ+/9lmM+9408NJ/Coq0c3C56DdvqMtFvdbGN/Z7tGVcdYXyWgDJ+ljJYah+y2XKXIUyzUgzxnlYKqoXM X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ee7c0696-c3e2-480c-6114-08d58e3ae33b X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060); SRVR:BN1PR12MB0019; X-Microsoft-Exchange-Diagnostics: 1; BN1PR12MB0019; 3:Yd2LOn2t6Wdh8BRqkxtK0rYCJLNxg/UQSl+Owe8sQAxAvOnfxnxDeB4aVZEO7hvpEcsdEIbRp2rGMdwLcg7QoIbHCcjujEl7+y9QTpsguyG6OFiFIRn9x8CUfOJ56nAAXbD+Ll5fQjibGISTWHZQTjlfl7D8jWVuY2t14pf+zw3i+Mr9BpLyqr8c6tfBaDFlqMaVHxLWKUkQaw/YhKE47PzMhPiTbiC+EAjcmEDi6XRGvi550tDM76q8eirYiAaCht0H6T0V/37Ggc4OknHV7rGUs1uAjO/qrziJ/KAz3/1xLA7BaiHEgjmdLG2um67Ok97L0XsWR5WQpHJpDPs4pbqoR9s+GrcDjWKTNSh3weY=; 25:0/5tBXdhu9QlzuPYrHrFVC8Tn1tz2stZP+z2EjGyE3Lp6ZLad4u38WLt54HxIXoXCpY56IkXDpVs6BnrghAYNenGUfxFhiNNxaIULUyDvU5pC7/sB6lIlL7rI9M3bPEJzyGK9PxsWRWPkY01EwDQRLFd0wSXoKBigUh/gKY/4VjCe8sedzn2HxQFuzeSFQwLDztEmDz0XyJ0cSuBJEXhCdUoA4b6Zlj8orjdw2OcS2/PmtRKv3TFFriMKEgnHIVbq2VdCXYedo618gVica+0bvFKwB4jgP+K6fkPaubVe/nzrowhIYmdlrVwZNEol/UTq3W7zRkOxe31MqqkHODk3g== X-MS-TrafficTypeDiagnostic: BN1PR12MB0019: X-Microsoft-Exchange-Diagnostics: 1; BN1PR12MB0019; 31:BRJHUJCSqntBhswhEDH306bOigiJipMNoXfYdut7FY7GRKGf8KgGGm64pFi5QbE8bnw6qFD0qf29BaZrlFKZJup/dsxNczvXHgNYZ365yPZfSMSz++lv72zYbilR4OMB0SPras7ivroH+i+b6/Q8akRcrmf2B+QJki/Jk83pq3V3KpKHn4E28ahn5BH9iM/2Ey0awCaSES0ZvBr1vpFr2mfDPaeatCxLpdA9GjxZHoY=; 20:ws/6h2+u1SVz3tP1B0Rc1ZTfXVyA899F0UPzeXCj7qa1Ljnxu0nn3csA2/0A3rKIM+q/nWxoiA3kTX4Afc5X6ww7koL0nKWGldWfj/msuHq3KnQ+JqZPDLNUgriCol01I+3fJYUMNtxAK+MIIukUMpdZg155wqC6syAN7edvY7RbIPDGTIwDA1comcDCADcHOI3iZ6QF/ck343RYhEffrEWHGQaJLfIuoh+4QP/xzHrcdooMUd+NuE/4obnezwGDMny4ovrj/uWk/0N8065Tc8+Jv5Fz8mpNRhUhP/rAgmCiq0uCDCBrOPLKETEkvps12lkOjrVK9+6TmjuJkt4UPhckJguxXOILo2wuARW3WPmS27NbP602QMzahnLa55/hHhZqnBlckeoG6r8zR2KAS7U6BfpVNBG8ZJKwxG779A6ey0ew79NjjP32BkpEdQbBOeEHUh+xV3H9K5w/6E7cTMywIGYvJNFCYAblPfmQzAl51z2dOEptrEnwYTNhcX5v X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3002001)(93006095)(93003095)(10201501046)(3231221)(944501308)(52105095)(6055026)(6041310)(20161123560045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123558120)(6072148)(201708071742011); SRVR:BN1PR12MB0019; BCL:0; PCL:0; RULEID:; SRVR:BN1PR12MB0019; X-Microsoft-Exchange-Diagnostics: 1; BN1PR12MB0019; 4:TVHr0oa6h5E2Yn/82JfhDToVQaay42247m/BQJSvelu4beAfBwzXOw+PV+vTGlywHVzCLkcXHFfv4/ynI7y8wCDTplM/aDc+z0OUok0167oDXRum4yD4h9upjx13h0cwA14Nx2b1EDA5jwAL53nAA3UKLe0wj1GJxYeoCXvFU3tvYP2i6g4zAQeM+EtIIeKrw2uWp67P3nUNrt74kUMNur5hSKWpGL5cK370KyCaKob5rMS0+lRIlXPPCYIQBdmys2wCaabgpjkcYVUZyv7gETTqJ15UzX3qxHCP9URHWQgMDITk3jncbiWjwWPBAtWr X-Forefront-PRVS: 061725F016 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN1PR12MB0019; 23:6UAUwYezYj5ZH77T3RPEFZ7DF8DCuSL3fSlt3Viuu?= =?us-ascii?Q?IWlRqAcBIxmsy8tSs6s/tXjLwUZ6HJIxW9VLGCpHcA2EXclkzxmRlgq/QHlf?= =?us-ascii?Q?OZmjTytRKvWqQfe1jErdEzAKVEG/rGf8B1ERzZiqi/Nzy4YFGsdgs/D5PlXI?= =?us-ascii?Q?DmwklSSnhS9nzOzfXWtQpj72OZwMIiMXKFVphvFAEjGQwsDkO5buyceLlFl7?= =?us-ascii?Q?AKt25X98TDNzgBB4fS6Ll6hrPRRge/M6PyOMmMyiT2T1xAAdoBonPdcbQtYM?= =?us-ascii?Q?RfiP8NZgUzEUVYyrPoxvd/JS5ZiSql2WSdp6N1na8LfQywOAP8UpbMNJK19m?= =?us-ascii?Q?bY6WG5V66ak4atButLUjfqdAzYp/LYzqKtnopFb266CTj7HMum0hSVDIBeg8?= =?us-ascii?Q?Feum68jWC/0flatGXg3fc123NuRlB9ybeIf//zcYtKLfWV203W9xZTYFUqb0?= =?us-ascii?Q?RkC74tQyGSnSoga1AcziqsNYK2iwPhLCHbLq7Tsp/SiuWWsQfUUjEVjfe4WJ?= =?us-ascii?Q?9InAPtQjJOdnkQWFefnhQEOJsMeSl/n/lJj6HwgGYjEK9OYaXOJ1IWLOk1TM?= =?us-ascii?Q?wIKmmjxnSE/vu7lGHMnOSYfaaIFSvCTbKAEkgYOXm5CGLRHJysZn7pxWuJxV?= =?us-ascii?Q?BmmDwvC9Of3wfxZif97orFhNJjrXU9pQhd25PFdGdyHShImIkE5kG88MJCNh?= =?us-ascii?Q?HLRTBRnENfCKbqd7bptLqcBdQWFAXD3yMk7hrtN2O9yXy7LRYjYyCWPX6+JR?= =?us-ascii?Q?GPxF1xg4RxNL5Ia0QvdDnCaoNdU9d/Yno4hadz1dJNPVSVmw+U/eocBSF0en?= =?us-ascii?Q?Lm+4aNKkLAgu/RwUE/XQDdFqrBOpkk0iREwy65SrsvdmLAJ9X8kIkN93DlmT?= =?us-ascii?Q?4P12FJ4SlbIcfkzf8TaMzWZT/4Bpk/iPm0Ng75ObmjGo4AvFquBToQ+XepfJ?= =?us-ascii?Q?fSSBNv5j1TT/pq1YUCtP5NCVS0V/diYlbtXqlkCHduG/llhOqkAgYj6ZQ1Hq?= =?us-ascii?Q?seN01M+MhyKYVrbHAvUCsaN3RaIYAFicTCoCY3WQEfnwZBH30dMbt3PIxw09?= =?us-ascii?Q?jUfcNFsjARCZvO6ahDWziXIBDvnlKRYu2RsBjJS20o2mC0vD78PaUiiDXnsZ?= =?us-ascii?Q?WT2d2vx0Uk=3D?= X-Microsoft-Antispam-Message-Info: 1/ZAOlWtQrryTEwwfGSglGX71MU/U4S7EcjoFG4UV/6Tu1fd0rlcmSp4uXNR4ZNyjoLUYWx6LwZC7A6yQ00fGsuCcHYdvj0w9YZCS0mIUGABsDsFBdr9V/if/D8ygmCuODUttKJdNgsYAmjKrqZrvXnEOVm5rL/2rHQTk4OGeIhidG8NF3J0UoOz/UsSoqXp X-Microsoft-Exchange-Diagnostics: 1; BN1PR12MB0019; 6:mdm7Z0kXdjY6iPMJiQgBuX1Me7MgUTsSSNfGXtr5KZ2MqTWrcjDA4ZzfrMHF19p5YkeXGMjUhjHWSH6xbSs3OXqlPQruABbyiJz8fVd95I7eIZBojdsiAxK3kok68i6Rcc4CJRA1debpdwp0zOyldVdr8lXpnXSyaDYTEdqHJiA8pKZlyEys5A/jwHrN4KrT0poNuSywKP4WeVeLAq1XqngKTJVwg43DYAcB4GO6k/5nufApV1+E4EvbTSUpF0GWVHxpjFuXLgQ0sMOJ450t31FFd4Hy3nqQ/kNPkHVnEIp5WcMuKzFXc4a3WtS4f7RFLdheqwycmLxNKH8buS0ObmMwjsOqkscl8ow5mXmpy6Y=; 5:c6rYlj4KPZWK1fc3NNqQPkpwy2QRKIuC4nds82hxLLGDSdBdzmPjb0nS0beomf7MHkdtx1Q/P32rfuA1MA92YJsuWi+apjDtwjjslV4wvNZGxd6N6y7SG3WG2xxgz2wZV5mZz2nJZN9Vf3OV5IcFJi0UH+t4I6GnLEHDDj5JNQA=; 24:zw2Yb6hiPcw2VwgpMIj4gmZw9FpN8G9jggioqtOMz72B6aeB6ucNi9164NxINC+BeR4ZL26Tf9dgIVnn5t7seUqDzUhQHpJRJGZORUp4b8c=; 7:n9izOPcym+IHpGZKJpwlCllMAbKcAwTVOLMLZnkfJOOa7E0OvGQI9+AxHpRJLcdAGQcgDpSVwHGm0ZAc1DDRRYJrU9t37GIoKG8VPZpaBfqxaRR0LXXYDzagPLG5pgFLvG3aMqjuI75KfQv4+sMn0sFEeKowZ1wiC1UIxbYmkIJq+FEB9gIHYXTAK0R2gjBPELdh4cCp/Qv8zdfmv2ilqzfi3rLZUGb/gra2ElhwY+lmXAKwujS6/0fFRmWx4n3h SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN1PR12MB0019; 20:i1wHghU8JqmQaYldnqOh+pCXHllY5GJuaO4DiiPkpjRrGDvTuq8O0SUcCzEtoKSJ8iHc3ykU9HWiDEBWKKGWTanscV35CuUoH6WBai7b/3MgLESwp7ePckqFsKZHlU8n/t6Su3exI52DZ9bgGvX+EplI3x9wzI2QydUESFtTnzJfg+zzvjoaLoRrNk8fYc6cLW+ncb8tRWJ6+GMeaoHWbO5eN98lsLJ5RsaqC0um8Rk1O9pg66Gq2TS2c4WMgwlX X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Mar 2018 08:16:31.1235 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ee7c0696-c3e2-480c-6114-08d58e3ae33b X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[SATLEXCHOV01.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN1PR12MB0019 Cc: tiwai@suse.de, Alexander.Deucher@amd.com, Akshu Agrawal , lgirdwood@gmail.com, Vijendar Mukunda Subject: [alsa-devel] [PATCH V3] ASoC: amd: dma driver changes for BT I2S controller instance X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org X-Virus-Scanned: ClamAV using ClamSMTP With in ACP, There are three I2S controllers can be configured/enabled ( I2S SP, I2S MICSP, I2S BT). Default enabled I2S controller instance is I2S SP. This patch provides required changes to support I2S BT controller Instance. Signed-off-by: Vijendar Mukunda Signed-off-by: Akshu Agrawal Reviewed-by: Alex Deucher --- v1-->v2: removed cpu_dai name comparisons to get the current i2s instance value. Modified code to get the current I2S controller instance value based on dwc i2s_instance v2->v3: moved I2S instance macro definitions to designware header file sound/soc/amd/acp-pcm-dma.c | 106 +++++++++++++++++++++++++++++++++++--------- sound/soc/amd/acp.h | 7 +++ 2 files changed, 91 insertions(+), 22 deletions(-) diff --git a/sound/soc/amd/acp-pcm-dma.c b/sound/soc/amd/acp-pcm-dma.c index 540088d..a61c4e0 100644 --- a/sound/soc/amd/acp-pcm-dma.c +++ b/sound/soc/amd/acp-pcm-dma.c @@ -697,6 +697,7 @@ static int acp_dma_open(struct snd_pcm_substream *substream) struct snd_soc_pcm_runtime *prtd = substream->private_data; struct snd_soc_component *component = snd_soc_rtdcom_lookup(prtd, DRV_NAME); struct audio_drv_data *intr_data = dev_get_drvdata(component->dev); + struct dw_i2s_dev *dev = snd_soc_dai_get_drvdata(prtd->cpu_dai); struct audio_substream_data *adata = kzalloc(sizeof(struct audio_substream_data), GFP_KERNEL); if (adata == NULL) @@ -710,7 +711,21 @@ static int acp_dma_open(struct snd_pcm_substream *substream) default: runtime->hw = acp_pcm_hardware_playback; } + adata->i2s_play_instance = dev->i2s_instance; + if (adata->i2s_play_instance == I2S_SP_INSTANCE) + adata->i2ssp_renderbytescount = 0; + else if (adata->i2s_play_instance == I2S_BT_INSTANCE) + adata->i2sbt_renderbytescount = 0; + else + return -EINVAL; } else { + adata->i2s_capture_instance = dev->i2s_instance; + if (adata->i2s_capture_instance == I2S_SP_INSTANCE) + adata->i2ssp_capturebytescount = 0; + else if (adata->i2s_capture_instance == I2S_BT_INSTANCE) + adata->i2sbt_capturebytescount = 0; + else + return -EINVAL; switch (intr_data->asic_type) { case CHIP_STONEY: runtime->hw = acp_st_pcm_hardware_capture; @@ -736,11 +751,20 @@ static int acp_dma_open(struct snd_pcm_substream *substream) * This enablement is not required for another stream, if current * stream is not closed */ - if (!intr_data->play_i2ssp_stream && !intr_data->capture_i2ssp_stream) + if (!intr_data->play_i2ssp_stream && !intr_data->capture_i2ssp_stream && + !intr_data->play_i2sbt_stream && + !intr_data->capture_i2sbt_stream) acp_reg_write(1, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB); if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { - intr_data->play_i2ssp_stream = substream; + switch (adata->i2s_play_instance) { + case I2S_BT_INSTANCE: + intr_data->play_i2sbt_stream = substream; + break; + case I2S_SP_INSTANCE: + default: + intr_data->play_i2ssp_stream = substream; + } /* For Stoney, Memory gating is disabled,i.e SRAM Banks * won't be turned off. The default state for SRAM banks is ON. * Setting SRAM bank state code skipped for STONEY platform. @@ -751,7 +775,14 @@ static int acp_dma_open(struct snd_pcm_substream *substream) bank, true); } } else { - intr_data->capture_i2ssp_stream = substream; + switch (adata->i2s_capture_instance) { + case I2S_BT_INSTANCE: + intr_data->capture_i2sbt_stream = substream; + break; + case I2S_SP_INSTANCE: + default: + intr_data->capture_i2ssp_stream = substream; + } if (intr_data->asic_type != CHIP_STONEY) { for (bank = 5; bank <= 8; bank++) acp_set_sram_bank_state(intr_data->acp_mmio, @@ -1010,34 +1041,49 @@ static int acp_dma_close(struct snd_pcm_substream *substream) struct snd_soc_component *component = snd_soc_rtdcom_lookup(prtd, DRV_NAME); struct audio_drv_data *adata = dev_get_drvdata(component->dev); - kfree(rtd); - if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { - adata->play_i2ssp_stream = NULL; - /* For Stoney, Memory gating is disabled,i.e SRAM Banks - * won't be turned off. The default state for SRAM banks is ON. - * Setting SRAM bank state code skipped for STONEY platform. - * added condition checks for Carrizo platform only - */ - if (adata->asic_type != CHIP_STONEY) { - for (bank = 1; bank <= 4; bank++) - acp_set_sram_bank_state(adata->acp_mmio, bank, - false); + switch (rtd->i2s_play_instance) { + case I2S_BT_INSTANCE: + adata->play_i2sbt_stream = NULL; + break; + case I2S_SP_INSTANCE: + default: + adata->play_i2ssp_stream = NULL; + /* For Stoney, Memory gating is disabled,i.e SRAM Banks + * won't be turned off. The default state for SRAM banks + * is ON.Setting SRAM bank state code skipped for STONEY + * platform.Added condition checks for Carrizo platform + * only. + */ + if (adata->asic_type != CHIP_STONEY) { + for (bank = 1; bank <= 4; bank++) + acp_set_sram_bank_state(adata->acp_mmio, + bank, false); + } } } else { - adata->capture_i2ssp_stream = NULL; - if (adata->asic_type != CHIP_STONEY) { - for (bank = 5; bank <= 8; bank++) - acp_set_sram_bank_state(adata->acp_mmio, bank, - false); + switch (rtd->i2s_capture_instance) { + case I2S_BT_INSTANCE: + adata->capture_i2sbt_stream = NULL; + break; + case I2S_SP_INSTANCE: + default: + adata->capture_i2ssp_stream = NULL; + if (adata->asic_type != CHIP_STONEY) { + for (bank = 5; bank <= 8; bank++) + acp_set_sram_bank_state(adata->acp_mmio, + bank, false); + } } } /* Disable ACP irq, when the current stream is being closed and * another stream is also not active. - */ - if (!adata->play_i2ssp_stream && !adata->capture_i2ssp_stream) + */ + if (!adata->play_i2ssp_stream && !adata->capture_i2ssp_stream && + !adata->play_i2sbt_stream && !adata->capture_i2sbt_stream) acp_reg_write(0, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB); + kfree(rtd); return 0; } @@ -1089,6 +1135,8 @@ static int acp_audio_probe(struct platform_device *pdev) audio_drv_data->play_i2ssp_stream = NULL; audio_drv_data->capture_i2ssp_stream = NULL; + audio_drv_data->play_i2sbt_stream = NULL; + audio_drv_data->capture_i2sbt_stream = NULL; audio_drv_data->asic_type = *pdata; @@ -1177,6 +1225,20 @@ static int acp_pcm_resume(struct device *dev) adata->capture_i2ssp_stream->runtime->private_data, adata->asic_type); } + if (adata->asic_type != CHIP_CARRIZO) { + if (adata->play_i2sbt_stream && + adata->play_i2sbt_stream->runtime) { + config_acp_dma(adata->acp_mmio, + adata->play_i2sbt_stream->runtime->private_data, + adata->asic_type); + } + if (adata->capture_i2sbt_stream && + adata->capture_i2sbt_stream->runtime) { + config_acp_dma(adata->acp_mmio, + adata->capture_i2sbt_stream->runtime->private_data, + adata->asic_type); + } + } acp_reg_write(1, adata->acp_mmio, mmACP_EXTERNAL_INTR_ENB); return 0; } diff --git a/sound/soc/amd/acp.h b/sound/soc/amd/acp.h index ba01510..c86bef4 100644 --- a/sound/soc/amd/acp.h +++ b/sound/soc/amd/acp.h @@ -4,6 +4,7 @@ #include "include/acp_2_2_d.h" #include "include/acp_2_2_sh_mask.h" +#include "../dwc/local.h" #define ACP_PAGE_SIZE_4K_ENABLE 0x02 @@ -88,12 +89,18 @@ struct audio_substream_data { uint64_t size; u64 i2ssp_renderbytescount; u64 i2ssp_capturebytescount; + u64 i2sbt_renderbytescount; + u64 i2sbt_capturebytescount; void __iomem *acp_mmio; + u16 i2s_play_instance; + u16 i2s_capture_instance; }; struct audio_drv_data { struct snd_pcm_substream *play_i2ssp_stream; struct snd_pcm_substream *capture_i2ssp_stream; + struct snd_pcm_substream *play_i2sbt_stream; + struct snd_pcm_substream *capture_i2sbt_stream; void __iomem *acp_mmio; u32 asic_type; };