Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp5791029imu; Tue, 13 Nov 2018 11:48:01 -0800 (PST) X-Google-Smtp-Source: AJdET5ed6My9YfO4je186fiYLEXZcLuZAG/OezHmETeQqM4pbx/8RJEDs2g2QX3+8IrJmZ4g6byV X-Received: by 2002:a63:ae01:: with SMTP id q1mr5868414pgf.402.1542138481494; Tue, 13 Nov 2018 11:48:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542138481; cv=none; d=google.com; s=arc-20160816; b=Vsu04lwZ2SUrV/AEVjbo022e+SWjehW/e4YhF1NkfsB8g2QonfFCzl4mLJ+7A1plhc gunP3YSSci2zDtBCTBTnMIikykGT8socAE5mxaLaAOGAraasJXPH2J+DaYAI0DRgssHg 5UGLuqT4N0TlJ7eRVkdSo1sPOUT7oOEq7aDKWv3UYUrRWqX/AdivAmFiXMCOaR0xRSpv 8V1V0ml/h8FFHqdRwJf+WsVr1fMg+rTkJTrY/BLrDo80Q8C7CBFfErR4bjRs6obiyJ39 vqYnC5ODINJIBEHiaquP0jVORU8aq+pRQYHX4qxAfNwplo3rJCetLLSUGtyPtAZ4v0WF r00Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:date:message-id:in-reply-to:subject:cc:to :from:dkim-signature; bh=E0O/ytWCh5O+GakgZIqOB35+GfKc/DK3yhczSQgHEuk=; b=c5J/zca1cyEcmGui4gbqyAV0upj2UAP/jLBXZjCFlVCEwJWfVSNS/60Zn/Jnic66qi SCM/NKxbdi9A0o0HsaZ5uvW9SmLQzvodJ/0tyaTojFAt9Pq4BlOQ9BYaDgS/30x42ceM zbq6uKsjmbWtq+W6866ojBqjfrQubMNtI43OXuc0+lfTQ1ZjHhUoKqacxbkBEOjFq8A9 gniJPTjMgg8nD6u6rwHHtl1Mm4nOzFjoFqKCC9S8YfZNZmlEL6QzMCjVv2UGhI7NRgSo BTtywuNMOneE7xNrPk56diUvY13P7Turm0aJKDFh0bdvy6EUQGDk3FzqeGiMwg0Z156E 71Kw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@sirena.org.uk header.s=20170815-heliosphere header.b=c6b4rvLQ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x11-v6si21772154pln.425.2018.11.13.11.47.46; Tue, 13 Nov 2018 11:48:01 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@sirena.org.uk header.s=20170815-heliosphere header.b=c6b4rvLQ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730905AbeKNFpb (ORCPT + 99 others); Wed, 14 Nov 2018 00:45:31 -0500 Received: from heliosphere.sirena.org.uk ([172.104.155.198]:50958 "EHLO heliosphere.sirena.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728686AbeKNFpb (ORCPT ); Wed, 14 Nov 2018 00:45:31 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sirena.org.uk; s=20170815-heliosphere; h=Date:Message-Id:In-Reply-To: Subject:Cc:To:From:Sender:Reply-To:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:References: List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner: List-Archive; bh=E0O/ytWCh5O+GakgZIqOB35+GfKc/DK3yhczSQgHEuk=; b=c6b4rvLQXB3m +DRiRidyBY6gFQ3ZYGHo7mlvl82IFKVV9jMSY4qRq2SI3LOOpiVwu9+VvLPO9ryZ0wuwXf3BQlVR2 xSCAXJWNwgy4c6CY0t5vFtMoz3pCur8kD+DvlkHc9cJVpTTdEZ+slia24iA4JE5sgU8CQRZ/fzQ0L KLaXU=; Received: from [64.114.255.97] (helo=finisterre.ee.mobilebroadband) by heliosphere.sirena.org.uk with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1gMedC-0002Va-Hb; Tue, 13 Nov 2018 19:45:50 +0000 Received: by finisterre.ee.mobilebroadband (Postfix, from userid 1000) id 8AFCA440078; Tue, 13 Nov 2018 19:45:44 +0000 (GMT) From: Mark Brown To: Vijendar Mukunda Cc: Maruthi Bayyavarapu , Ravulapati Vishnu vardhan Rao , Vijendar Mukunda , Mark Brown , "moderated list:SOUND, - SOC LAYER / DYNAMIC AUDIO POWER MANAGEM..." , Maruthi Bayyavarapu , open list , Takashi Iwai , Liam Girdwood , Sanju R Mehta , Vishnuvardhanrao.Ravulapati@amd.com, Mark Brown , Alexander.Deucher@amd.com, alsa-devel@alsa-project.org Subject: Applied "ASoC: amd: add acp3x tdm mode support" to the asoc tree In-Reply-To: <1542000903-19020-9-git-send-email-Vijendar.Mukunda@amd.com> Message-Id: <20181113194544.8AFCA440078@finisterre.ee.mobilebroadband> Date: Tue, 13 Nov 2018 19:45:44 +0000 (GMT) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The patch ASoC: amd: add acp3x tdm mode support has been applied to the asoc tree at https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted. You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed. If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced. Please add any relevant lists and maintainers to the CCs when replying to this mail. Thanks, Mark From 67aa06aef5836d2ceb1b9280ca2cee9cc4b1e004 Mon Sep 17 00:00:00 2001 From: Vijendar Mukunda Date: Mon, 12 Nov 2018 11:04:59 +0530 Subject: [PATCH] ASoC: amd: add acp3x tdm mode support ACP3x I2S (CPU DAI) can act in normal I2S and TDM modes. Added support for TDM mode. Desired mode can be selected from ASoC machine driver. Signed-off-by: Maruthi Bayyavarapu Tested-by: Ravulapati Vishnu vardhan Rao Signed-off-by: Vijendar Mukunda Signed-off-by: Mark Brown --- sound/soc/amd/raven/acp3x-pcm-dma.c | 62 +++++++++++++++++++++++++++++ sound/soc/amd/raven/acp3x.h | 7 ++++ 2 files changed, 69 insertions(+) diff --git a/sound/soc/amd/raven/acp3x-pcm-dma.c b/sound/soc/amd/raven/acp3x-pcm-dma.c index ed2c16379d2c..15a5f3b4db71 100644 --- a/sound/soc/amd/raven/acp3x-pcm-dma.c +++ b/sound/soc/amd/raven/acp3x-pcm-dma.c @@ -27,7 +27,9 @@ #define DRV_NAME "acp3x-i2s-audio" struct i2s_dev_data { + bool tdm_mode; unsigned int i2s_irq; + u32 tdm_fmt; void __iomem *acp3x_base; struct snd_pcm_substream *play_stream; struct snd_pcm_substream *capture_stream; @@ -423,6 +425,64 @@ static struct snd_pcm_ops acp3x_dma_ops = { .mmap = acp3x_dma_mmap, }; + +static int acp3x_dai_i2s_set_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt) +{ + + struct i2s_dev_data *adata = snd_soc_dai_get_drvdata(cpu_dai); + + switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { + case SND_SOC_DAIFMT_I2S: + adata->tdm_mode = false; + break; + case SND_SOC_DAIFMT_DSP_A: + adata->tdm_mode = true; + break; + default: + return -EINVAL; + } + + return 0; +} + +static int acp3x_dai_set_tdm_slot(struct snd_soc_dai *cpu_dai, u32 tx_mask, + u32 rx_mask, int slots, int slot_width) +{ + u32 val = 0; + u16 slot_len; + + struct i2s_dev_data *adata = snd_soc_dai_get_drvdata(cpu_dai); + + switch (slot_width) { + case SLOT_WIDTH_8: + slot_len = 8; + break; + case SLOT_WIDTH_16: + slot_len = 16; + break; + case SLOT_WIDTH_24: + slot_len = 24; + break; + case SLOT_WIDTH_32: + slot_len = 0; + break; + default: + return -EINVAL; + } + + val = rv_readl(adata->acp3x_base + mmACP_BTTDM_ITER); + rv_writel((val | 0x2), adata->acp3x_base + mmACP_BTTDM_ITER); + val = rv_readl(adata->acp3x_base + mmACP_BTTDM_IRER); + rv_writel((val | 0x2), adata->acp3x_base + mmACP_BTTDM_IRER); + + val = (FRM_LEN | (slots << 15) | (slot_len << 18)); + rv_writel(val, adata->acp3x_base + mmACP_BTTDM_TXFRMT); + rv_writel(val, adata->acp3x_base + mmACP_BTTDM_RXFRMT); + + adata->tdm_fmt = val; + return 0; +} + static int acp3x_dai_i2s_hwparams(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) @@ -510,6 +570,8 @@ static int acp3x_dai_i2s_trigger(struct snd_pcm_substream *substream, struct snd_soc_dai_ops acp3x_dai_i2s_ops = { .hw_params = acp3x_dai_i2s_hwparams, .trigger = acp3x_dai_i2s_trigger, + .set_fmt = acp3x_dai_i2s_set_fmt, + .set_tdm_slot = acp3x_dai_set_tdm_slot, }; static struct snd_soc_dai_driver acp3x_i2s_dai_driver = { diff --git a/sound/soc/amd/raven/acp3x.h b/sound/soc/amd/raven/acp3x.h index 9f33e34b868e..95fef8570577 100644 --- a/sound/soc/amd/raven/acp3x.h +++ b/sound/soc/amd/raven/acp3x.h @@ -32,6 +32,13 @@ #define MIN_BUFFER MAX_BUFFER #define FIFO_SIZE 0x100 #define DMA_SIZE 0x40 +#define FRM_LEN 0x100 + +#define SLOT_WIDTH_8 0x08 +#define SLOT_WIDTH_16 0x10 +#define SLOT_WIDTH_24 0x18 +#define SLOT_WIDTH_32 0x20 + static inline u32 rv_readl(void __iomem *base_addr) { -- 2.19.1