From patchwork Tue Dec 19 17:00:06 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 10123775 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 8C58F603B5 for ; Tue, 19 Dec 2017 17:01:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6AB86288B4 for ; Tue, 19 Dec 2017 17:01:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5FC112903E; Tue, 19 Dec 2017 17:01:44 +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 B43E7288B4 for ; Tue, 19 Dec 2017 17:01:43 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 225B52676DD; Tue, 19 Dec 2017 18:01:15 +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 101302676D6; Tue, 19 Dec 2017 18:01:12 +0100 (CET) Received: from mail-pg0-f65.google.com (mail-pg0-f65.google.com [74.125.83.65]) by alsa0.perex.cz (Postfix) with ESMTP id 9D6B8266D09 for ; Tue, 19 Dec 2017 18:01:09 +0100 (CET) Received: by mail-pg0-f65.google.com with SMTP id j9so10768396pgc.11 for ; Tue, 19 Dec 2017 09:01:09 -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=TLlV41PXOO/j+2hFrVToykh1dwLSVdtm3m2pnkkrsa0=; b=IUDNpq5Wn0uLyYWvqzS5hhKBUCRtCby9mUx69X0BGmGw4zC0d8dC+5ChnRJpb6Fqo5 j8RiNPw0OPMO20KAnIx6LOwOeELdMq9rtpOQRtmKGztPy7K6q2N252qjt9xle4vELRWA ujj2oDmF1p9nAra9Vr/BzDYT7hbP3QTvi4/yxHOtsiZGmjzjpBSy7YmrMP3Uds7H9MMV 6HJfiOGJNHsve979kcN1i1mMs2I0WQYUdxK0YHcT8vZDB1GT/WrS1uNFFrW0NdCrNKuQ q+lnM1VxEafmdcwWy3DgKol6PRTP7+jMY3ZfRy08t578iSLT0WaT3x5N/urgKnt+Uqmf 8KpQ== 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=TLlV41PXOO/j+2hFrVToykh1dwLSVdtm3m2pnkkrsa0=; b=XX2N5EnJouc+vqtDc+f0IduthwBeXIRIII9AE7YJ+Cjj+vEV7akUPN5ei523MWihq7 NrSfi93U+buAXbTi99EwTmJ9eTnYrIeJdcaPTjJFx8IVw8tixX2n3ggO6lzU50EgjOwY 9vroRZPPReLUnVjAbikLtlGewgjd98JZ7XfxPcyXXo5YIlCt6ww2rp/GpxvrfHTFaQuZ 5ddy9yvdrGNGjwB62KeMjdwkBTfJtrkeecXAKYC7rLB3cu/22OENmjqJ8OK72kfWm+rw AbzEY+xLhPTUbepV13Kb8WRg7jq4wrR7yhWqVqhMlkIen/vsMgqyyZYCJi4hrFJGetXh unlQ== X-Gm-Message-State: AKGB3mIEXc6cmqrkUaQsNwh+qh89cECKe+rzyjwwFB00hW34LuJePkkf kfcx9y0Ewdz7/hSQAhIS0LU= X-Google-Smtp-Source: ACJfBoucqq6EVAk40RvDszE5RQS0irEVRSvlemQ/pXN8qHKrIbkgmAOqYSH4WbVNiVkDw5m5v7Xg4A== X-Received: by 10.98.89.220 with SMTP id k89mr3937853pfj.36.1513702868020; Tue, 19 Dec 2017 09:01:08 -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 q9sm34490181pfl.116.2017.12.19.09.01.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 19 Dec 2017 09:01:07 -0800 (PST) From: Nicolin Chen To: timur@tabi.org, broonie@kernel.org Date: Tue, 19 Dec 2017 09:00:06 -0800 Message-Id: <1513702819-42310-3-git-send-email-nicoleotsuka@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1513702819-42310-1-git-send-email-nicoleotsuka@gmail.com> References: <1513702819-42310-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 v1 02/15] 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 --- 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 ed2712b..f05f78d 100644 --- a/sound/soc/fsl/fsl_ssi.c +++ b/sound/soc/fsl/fsl_ssi.c @@ -201,6 +201,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 @@ -245,6 +246,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; @@ -440,15 +442,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) { + bool tx = &ssi->regvals[TX] == vals; 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; @@ -470,6 +471,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(tx); } /* @@ -545,6 +549,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(tx); } }