From patchwork Mon Feb 12 22:03:12 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 10214573 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 B2A7860467 for ; Mon, 12 Feb 2018 22:03:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8CFDE289A7 for ; Mon, 12 Feb 2018 22:03:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 80FA1289BB; Mon, 12 Feb 2018 22:03:45 +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 3AF81289A7 for ; Mon, 12 Feb 2018 22:03:44 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 8767C267614; Mon, 12 Feb 2018 23:02:49 +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 E49E52675DD; Mon, 12 Feb 2018 23:02:46 +0100 (CET) Received: from mail-pg0-f66.google.com (mail-pg0-f66.google.com [74.125.83.66]) by alsa0.perex.cz (Postfix) with ESMTP id 3E8792675C7 for ; Mon, 12 Feb 2018 23:02:44 +0100 (CET) Received: by mail-pg0-f66.google.com with SMTP id g2so8413456pgn.7 for ; Mon, 12 Feb 2018 14:02:44 -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=+m7HeDB/B6bm7HhRss6IHd2husUIg0zUy4tlR1ikfrQ=; b=jXLlghvMtHyJzvRPWUgpfetKdmmteYIG81M753CwExRVzaFHaIdy2knKRGfNMFqyi4 tjZ/Varf/Wtql+2M8XnZGs/0m0LuHNqUCmPq30H6DU75gLg4ysqvUCQzlq0FIR/55Xaa XzZ6BtKlne2QXZpRd3AtjSgzurVNlY6WM8t60g2jT0ESwLTyEKTFL/UJ0R270SR5UZMN bn1CWGoDwv1BStUKqrQjbmEoUYaU3RpmI4iaT6aLvd20Nz+K+Nj2A9AyhYjd/Yal+1sM pkyCzeAftQr3oFD7soy4dOw9VNB/1Uz+wmkPGdaaMT+WfgNB1urkleaztI2dBJUFqfze SHqw== 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=+m7HeDB/B6bm7HhRss6IHd2husUIg0zUy4tlR1ikfrQ=; b=gksKd02Z/PSFZioRZ7beLeVU1MCuhN9wiPb3xo0LG2IA8Rg6wfhFH6A662yNvAmV8K 8nckVU6oXJzxsd6VbeYz51MjU7MbeysyjfCpgruh5zMHFk5arOAWdOuueMQWKPu0Opgh z225HJ78YA50n5Zg3w7zZZ+83HDBl87ydxR/+O6Z27z1mErGpjnSBEHD4qpP/9T2qSdV TYscprk/nWSpvLN/kpM5kqNwd+syN6JyqdtiUIZm5A4KGh1P/iGqt+7u8ubHTzvvd5Qj lYeRZP6gNQIl4dhMpbPa81cs/i4Qxs4/j93olx4mTUFZASCHWaAeeLEahovKW5IxebPE aOPQ== X-Gm-Message-State: APf1xPBtneS9+SQBhl9S1ksDyZlgRSyubkVPLd/REgWLYvwAWBaYK65m s/O3Sq0BVKVUGKE9frl8lws= X-Google-Smtp-Source: AH8x226XYfDEnf3YwFjAvL7z4955/8G9QC/y79+CEU1c2A9iFKamT0xVJ7cGyXoEicjj1yLqCZgvsg== X-Received: by 10.101.90.8 with SMTP id y8mr10243470pgs.34.1518472963212; Mon, 12 Feb 2018 14:02:43 -0800 (PST) Received: from Asurada-Nvidia.nvidia.com (thunderhill.nvidia.com. [216.228.112.22]) by smtp.gmail.com with ESMTPSA id c8sm13386159pgn.72.2018.02.12.14.02.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 12 Feb 2018 14:02:42 -0800 (PST) From: Nicolin Chen To: broonie@kernel.org, timur@tabi.org Date: Mon, 12 Feb 2018 14:03:12 -0800 Message-Id: <1518473005-14090-5-git-send-email-nicoleotsuka@gmail.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1518473005-14090-1-git-send-email-nicoleotsuka@gmail.com> References: <1518473005-14090-1-git-send-email-nicoleotsuka@gmail.com> Cc: mail@maciej.szmigiero.name, kernel@pengutronix.de, lgirdwood@gmail.com, alsa-devel@alsa-project.org, caleb@crome.org, linux-kernel@vger.kernel.org, arnaud.mouiche@invoxia.com, lukma@denx.de, fabio.estevam@nxp.com, linuxppc-dev@lists.ozlabs.org Subject: [alsa-devel] [PATCH v6 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 Tested-by: Maciej S. Szmigiero Reviewed-by: Maciej S. Szmigiero --- 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 14046c3..b277a56 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); } }