From patchwork Thu Jan 11 06:43:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 10157293 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 8915D605BA for ; Thu, 11 Jan 2018 06:45:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7B285285C8 for ; Thu, 11 Jan 2018 06:45:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6F902286B5; Thu, 11 Jan 2018 06:45:12 +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 9C4DB285C8 for ; Thu, 11 Jan 2018 06:45:11 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 8F10B267865; Thu, 11 Jan 2018 07:44:17 +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 C8513266F51; Thu, 11 Jan 2018 07:44:10 +0100 (CET) Received: from mail-pf0-f194.google.com (mail-pf0-f194.google.com [209.85.192.194]) by alsa0.perex.cz (Postfix) with ESMTP id 13B7F266E70 for ; Thu, 11 Jan 2018 07:44:07 +0100 (CET) Received: by mail-pf0-f194.google.com with SMTP id u19so875310pfa.12 for ; Wed, 10 Jan 2018 22:44:07 -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=UEEUxET8cWSL4pEPLWtqOabWTAbs3eNDppK4UwYygRY=; b=QNh97znd8Q2y5hvaJ9NGNImg5NVfMqE3wOXq1x1YdmsasNI0avwzin6dxdyabV8VgG 8r7wZCML+WnlzZxJoeXbptwg0CDpyN2HmVCqWSrIMMjAz0ahZr4UpvMBXhfBDHBKNgoD p7UGNoiO13YiDA5Bd2K1sxgWs7ZwtL6joahc6rPKz0G8KH22o2EKUucBrCFwn9mILljT kYBeo4ku7LI1ghqEJtYJhuJhAp2cuMrESIOMCit0QN6uKVUaETEby5zKf3bf98jhbZ8V hfCgktFCrW3fYFd0ZkiVTaSF6CxEyEYnaBoyvXHuydCiRWr2uazBWbXOymHXrf+ylBXl lmuA== 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=UEEUxET8cWSL4pEPLWtqOabWTAbs3eNDppK4UwYygRY=; b=idHbJDsRaz9Dwg7Wt9hMSmFbtVJSObmptkhEF6iRpq/YIGbtdRG1ZyC3es1cwurnTB Die/dqprpYICBQk4Ch4OGP07WJg7Nrc8JuPHec3t0mkWx4WfQBl9UtUax29UArrhJmJS FGnFNupPbPixnGi8cwkDLOGm9IIuZH+PYBeH+/PSHCdwBhD2hqpodgLXTFk8IR9gTfqQ D7+P/YugrCa/1zZ7nftExYedekY21lVMtJmY5kwiLQ5cbtkcsiKPr3K/eetrb2SWnNdG +btGrUXhzEur69llsNbNBcfRiLrYvL+colQui+Z8gKW4zF/4aoJEhuOtJoqXU3fajbYY zMtg== X-Gm-Message-State: AKGB3mINMpJZIE4+9ftMC8U8YHJLcyt/7FtcAIo9ruOIIrQO7BKNv6cl 1EA7MO67NYa928Qm6XqYs4c= X-Google-Smtp-Source: ACJfBotBnTpZ0IwegVjobrTEnTyJKD7vkjOA3JEpKwxPRFFiH/b31OZM2fmbtXapMHjf05IrFzCATg== X-Received: by 10.159.202.134 with SMTP id p6mr22214791plo.112.1515653046734; Wed, 10 Jan 2018 22:44:06 -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 b69sm27959666pfk.128.2018.01.10.22.44.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 10 Jan 2018 22:44:06 -0800 (PST) From: Nicolin Chen To: timur@tabi.org, broonie@kernel.org, mail@maciej.szmigiero.name Date: Wed, 10 Jan 2018 22:43:02 -0800 Message-Id: <1515652995-15996-4-git-send-email-nicoleotsuka@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1515652995-15996-1-git-send-email-nicoleotsuka@gmail.com> References: <1515652995-15996-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 v2 03/16] 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 --- 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 491b660..aa14a5d 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 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; @@ -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(dir); } /* @@ -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(dir); } }