From patchwork Mon Jan 15 04:21:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 10162991 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 1DC35601C0 for ; Mon, 15 Jan 2018 04:23:18 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1F9F528904 for ; Mon, 15 Jan 2018 04:23:18 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 14864289FD; Mon, 15 Jan 2018 04:23:18 +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=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, 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 731F228904 for ; Mon, 15 Jan 2018 04:23:17 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 884D6267365; Mon, 15 Jan 2018 05:22:27 +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 178EE26734C; Mon, 15 Jan 2018 05:22:24 +0100 (CET) Received: from mail-pl0-f68.google.com (mail-pl0-f68.google.com [209.85.160.68]) by alsa0.perex.cz (Postfix) with ESMTP id D0E7826731A for ; Mon, 15 Jan 2018 05:22:20 +0100 (CET) Received: by mail-pl0-f68.google.com with SMTP id d21so2801965pll.1 for ; Sun, 14 Jan 2018 20:22:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=+5mqrBKBC5C93e3+UyK9lVahL7rP8FLaTqZ7YFlqpvA=; b=GboCjIkKX1+N0ripb2bEketCFc84KGAgP4igG+WRi2GkBQcjB7NhsTVT/JMJrtECUL 9OjXUbol+wQn67+jYjQ5nHAb6AKiNIWVysCMJfY5VtcV/qZZMcuOX86gZWA026/e85Bg MeL+I43zPIhANdj8cKvCMTm12awV6pVT62V5CDCZJ0o/6L4Jc98p+VKa3PsDi8AweZC/ EHkAzFIZRj8vSts9S2WC5CjQKtieg93CLa3Hr77BptUYnyW4bBOteE8Be/NIPyZUxgN5 Rrg+IU+XS+3I2n7kuraCQ07Io21nJELX0wfIkS8LE2hxVhh2166oUi13cQzW3Yp4+TQj aHSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=+5mqrBKBC5C93e3+UyK9lVahL7rP8FLaTqZ7YFlqpvA=; b=hFAdh6ZoYfVCQBdc0zz/qRgxAFo0XbdtunE3TbwWH39aCMletwl/NPEWVcMKOdUq8S VDLKAuiBCaYu0cfyPmOzZh+sWUlRsL9NjnYEw94EzPzC/p9mAYuz6GR9C/T0qFi4FaGV ozr/Kd9f5H9adZO05QPNjuYXrUlsCA2UMcJRob6dtgp1OBYbE7jrUCuDJ7Mqqp4iB4mz d3uu4zZhFSAHNs08ZvvbQnHt8AqPSkCnmSuushMu5zWgv97K3JRRU1VMOq/YC3jOBBIs 5j6FxW+e0SzB35ZEb3plX+JbAMImJVyV8qrDKY0kO5Ku9LJjG1H/KPpEJ8AvjpDSF1MR BPjA== X-Gm-Message-State: AKwxytdyIhy+lqK4CIWMeJ6vGAtOCbE0CGL+dGVWjdmk0uSBBi53nB6v EN3pJ2Nxf4ZFbZ51M31VPS0= X-Google-Smtp-Source: ACJfBov4eyoovh4vsW6L5Hc3JgkHZ34SpD39QNQJrQSEHMYEzL8/seozvwwnA584T8hcGXjwoWZNOg== X-Received: by 10.84.129.229 with SMTP id b92mr19580719plb.319.1515990139055; Sun, 14 Jan 2018 20:22:19 -0800 (PST) Received: from Asurada-CZ80.localdomain (c-73-231-2-134.hsd1.ca.comcast.net. [73.231.2.134]) by smtp.gmail.com with ESMTPSA id v7sm17011018pgs.83.2018.01.14.20.22.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 14 Jan 2018 20:22:18 -0800 (PST) From: Nicolin Chen To: timur@tabi.org, broonie@kernel.org, mail@maciej.szmigiero.name Date: Sun, 14 Jan 2018 20:21:14 -0800 Message-Id: <1515990087-11598-5-git-send-email-nicoleotsuka@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1515990087-11598-1-git-send-email-nicoleotsuka@gmail.com> References: <1515990087-11598-1-git-send-email-nicoleotsuka@gmail.com> Cc: alsa-devel@alsa-project.org, kernel@pengutronix.de, linux-kernel@vger.kernel.org, caleb@crome.org, lgirdwood@gmail.com, arnaud.mouiche@invoxia.com, lukma@denx.de, fabio.estevam@nxp.com, linuxppc-dev@lists.ozlabs.org Subject: [alsa-devel] [PATCH v3 04/17] ASoC: fsl_ssi: Maintain a mask of active streams 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: , MIME-Version: 1.0 Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org X-Virus-Scanned: ClamAV using ClamSMTP Checking TE and RE bits in SCR register doesn't work for AC97 mode which enables SSIEN, TE and RE in the fsl_ssi_setup_ac97() that's called during probe(). So when running into the trigger(), it will always get the result of both TE and RE being enabled already, even if actually there is no active stream. This patch fixes this issue by adding a variable to log the active streams manually. Signed-off-by: Nicolin Chen Tested-by: Caleb Crome --- Changelog v3 * Replaced "bool dir" with "int dir" v2 * Replaced bool tx with bool dir sound/soc/fsl/fsl_ssi.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c index 8984ee2..51e7405 100644 --- a/sound/soc/fsl/fsl_ssi.c +++ b/sound/soc/fsl/fsl_ssi.c @@ -205,6 +205,7 @@ struct fsl_ssi_soc_data { * @cpu_dai_drv: CPU DAI driver for this device * * @dai_fmt: DAI configuration this device is currently used with + * @streams: Mask of current active streams: BIT(TX) and BIT(RX) * @i2s_net: I2S and Network mode configurations of SCR register * @use_dma: DMA is used or FIQ with stream filter * @use_dual_fifo: DMA with support for dual FIFO mode @@ -249,6 +250,7 @@ struct fsl_ssi { struct snd_soc_dai_driver cpu_dai_drv; unsigned int dai_fmt; + u8 streams; u8 i2s_net; bool use_dma; bool use_dual_fifo; @@ -444,15 +446,14 @@ static void fsl_ssi_fifo_clear(struct fsl_ssi *ssi, bool is_rx) static void fsl_ssi_config(struct fsl_ssi *ssi, bool enable, struct fsl_ssi_regvals *vals) { + int dir = (&ssi->regvals[TX] == vals) ? TX : RX; struct regmap *regs = ssi->regs; struct fsl_ssi_regvals *avals; int nr_active_streams; - u32 scr; int keep_active; - regmap_read(regs, REG_SSI_SCR, &scr); - - nr_active_streams = !!(scr & SSI_SCR_TE) + !!(scr & SSI_SCR_RE); + nr_active_streams = !!(ssi->streams & BIT(TX)) + + !!(ssi->streams & BIT(RX)); if (nr_active_streams - 1 > 0) keep_active = 1; @@ -474,6 +475,9 @@ static void fsl_ssi_config(struct fsl_ssi *ssi, bool enable, keep_active); /* Safely disable SCR register for the stream */ regmap_update_bits(regs, REG_SSI_SCR, scr, 0); + + /* Log the disabled stream to the mask */ + ssi->streams &= ~BIT(dir); } /* @@ -549,6 +553,9 @@ static void fsl_ssi_config(struct fsl_ssi *ssi, bool enable, } /* Enable all remaining bits */ regmap_update_bits(regs, REG_SSI_SCR, vals->scr, vals->scr); + + /* Log the enabled stream to the mask */ + ssi->streams |= BIT(dir); } }