From patchwork Wed Jan 17 06:51:29 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 10168621 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 30ED260386 for ; Wed, 17 Jan 2018 06:53:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1B3E227B81 for ; Wed, 17 Jan 2018 06:53:49 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0FA1527F10; Wed, 17 Jan 2018 06:53:49 +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 4A8FF27B81 for ; Wed, 17 Jan 2018 06:53:48 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 97709267776; Wed, 17 Jan 2018 07:52: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 B81CA266FD8; Wed, 17 Jan 2018 07:52:30 +0100 (CET) Received: from mail-pl0-f66.google.com (mail-pl0-f66.google.com [209.85.160.66]) by alsa0.perex.cz (Postfix) with ESMTP id 9E127266F6D for ; Wed, 17 Jan 2018 07:52:28 +0100 (CET) Received: by mail-pl0-f66.google.com with SMTP id f4so6721724plr.10 for ; Tue, 16 Jan 2018 22:52:28 -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=YbZ0FflN6IHSYeHGX2vgw+s05QKIXTo00qO5Wy8gd85D2Z0Ii1YtvvdRgBeNQmwTg/ eXJ8gScEsikSE0ebWKMUOfnsHkZMCinCCyR2azF/dJy5Jxx82OZ8Yi7S8A2mGAmKXRjo 6RG5rs0W0lwcGgkmD7uvecvbp2RElxvRKmn4IhOe1J0132p6Oumwm2LDF+EBecl+jvK+ qaiVk5VtEj6X3lG1azJZhyXdJJPidyQNl64GPeiLdfqi0tn709X5Fchcc6q07R7iQovn cj2EEREt1Fpl/RtAu3Xy5qaYoQk9JNCdr4PCM9XfTHc/jZ2Sgngekh1E5fN95HJbkc9/ qiKQ== 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=DqrGER4J5lopsr3tO+dzd1xYDX1ROamv4WOcw5VWT72hizwbBHPW9LdrnM4jGHRJmz m975QUdUkZj77vh7NEWPVC1ZdUKbi/o8C01S9kxTtxDU8ri86kOgDgK5asFBcz+8Z5f+ M+idDiroHBVxImdkXviNiUPvCsgO45goADdaakqBzfZfZ1RyEJPiXpLaXctfO7jJ1kSH JV0P82JIkFQOkTcMK77vJINdvYJIqhuR6XD/fgaCqlyBuSf4rwb5kzOZh4Di/aTP8dfz QBx+83nxKAOzx9P0JMqjaSzgV7SdSotzXefwPJbUGKj18paKdVDLgF2/Y7jgGIC7KrLa o6Yg== X-Gm-Message-State: AKwxyteznkah9lYsFHCGit1Z46gHTqYC1Cxc5k+X9/MIwfZ1X/JWCnUR JWEMXFEFeyVw7KMjQL2IjnA= X-Google-Smtp-Source: ACJfBou7+sNefCDmG/qlYnZJgsmBLKtbEnL04GKf1r/E+VcGE9VizMVsbSwNPQO//GTKrlqjr/sfYA== X-Received: by 10.84.210.79 with SMTP id z73mr22711072plh.313.1516171947502; Tue, 16 Jan 2018 22:52:27 -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 e185sm7503221pfg.155.2018.01.16.22.52.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 16 Jan 2018 22:52:27 -0800 (PST) From: Nicolin Chen To: timur@tabi.org, broonie@kernel.org, mail@maciej.szmigiero.name Date: Tue, 16 Jan 2018 22:51:29 -0800 Message-Id: <1516171902-32669-5-git-send-email-nicoleotsuka@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1516171902-32669-1-git-send-email-nicoleotsuka@gmail.com> References: <1516171902-32669-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 v5 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); } }