From patchwork Mon Jan 15 23:16:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 10165447 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 AB15C602C2 for ; Mon, 15 Jan 2018 23:18:30 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9A2EE27B2F for ; Mon, 15 Jan 2018 23:18:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8E42A27BFF; Mon, 15 Jan 2018 23:18:30 +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 B487427B2F for ; Mon, 15 Jan 2018 23:18:29 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 263FA26764E; Tue, 16 Jan 2018 00:17:37 +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 42F08267628; Tue, 16 Jan 2018 00:17:31 +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 5026826761C for ; Tue, 16 Jan 2018 00:17:26 +0100 (CET) Received: by mail-pl0-f68.google.com with SMTP id d21so4724214pll.1 for ; Mon, 15 Jan 2018 15:17:26 -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=KVl/uG3EXgHuVhLlM1CQbfLGZHuNxpAPsQcFdBAAElYQtAwpg50fa6PsInkNOm97pa eica5i4IEl9eQLIvkPMqzD8oPp+1Fe+4gsEHMojRFY1O4+0qzocBLz7T625OJaiQfJ5v HAu7+wkLdZQphsebCXlzdrIn2ZTgt1nWFOjMBE826jbXPlxbunpmwBfTCn3KiDtBBBQK 6kdu0W4wpWYbpc1qdvvbZstIHOKTI9FyKBKZULqic9SBJP+3ecVzF9H2bkp0iAgfyOCh 5Fk9uGtOlkYEDB6PhJGo0SMoULW+RkXPodMTpOMHSwWk9NmH2v1G2dNZO8Rsamny7aCa s1tA== 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=F6LhPLq7cgfSMGqMS5/ct8juJp5l2eQnESw1hOVRJ6t638vDHeHxSr5b+Ef7MpiOvj irnEuGal2N77OxH9pJb/+qavSrYYwcYI6kH63v7YnX5xEW62XegJYtjK3LJINB/yl8ev 26nSgfiv1mp1P2kiGnq61aRqiH/J2V5nd7zVbcP9Wst2KqJmJhu8TV92ejpaZ00tSmGI FGKboTamkAyd0eDqSDCPtKlLjx71HkHESXf0XItgWm+xeItLDZNLiplQQ4Kpia+i784L NGorguyGxOJXzsMcfOqE/xAsjT7a6lu10lEoA/J/ZlV9htCQyHdlSfEpTtmDH4nCy0jX evPQ== X-Gm-Message-State: AKGB3mL6gw8RSkrNPUsXL88DOqr4CnNUZtGbD3VPJHvFS7N0humDQlur rJ/OuFhdG92w5iaLZ9ck87g= X-Google-Smtp-Source: ACJfBovxzsdC1rz1RkLG0Rv/+Wh5Si76ZYARdX5DzltYhRf6FywYbSkbcuaDzEUgBfphwtQS/H73OQ== X-Received: by 10.159.252.193 with SMTP id o1mr36457938pls.26.1516058245667; Mon, 15 Jan 2018 15:17:25 -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 b6sm776442pfe.85.2018.01.15.15.17.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 15 Jan 2018 15:17:25 -0800 (PST) From: Nicolin Chen To: timur@tabi.org, broonie@kernel.org, mail@maciej.szmigiero.name Date: Mon, 15 Jan 2018 15:16:19 -0800 Message-Id: <1516058192-65519-5-git-send-email-nicoleotsuka@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1516058192-65519-1-git-send-email-nicoleotsuka@gmail.com> References: <1516058192-65519-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 v4 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); } }