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: 872425 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3zgKlk1rh1z9s7h for ; Tue, 13 Feb 2018 09:17:06 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="jXLlghvM"; dkim-atps=neutral Received: from bilbo.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3zgKlk0W9BzDqZ7 for ; Tue, 13 Feb 2018 09:17:06 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="jXLlghvM"; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:400e:c05::243; helo=mail-pg0-x243.google.com; envelope-from=nicoleotsuka@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="jXLlghvM"; dkim-atps=neutral Received: from mail-pg0-x243.google.com (mail-pg0-x243.google.com [IPv6:2607:f8b0:400e:c05::243]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3zgKR910CDzF0pP for ; Tue, 13 Feb 2018 09:02:45 +1100 (AEDT) Received: by mail-pg0-x243.google.com with SMTP id l24so2381284pgc.5 for ; Mon, 12 Feb 2018 14:02:45 -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=RKlNWX3sfXK1uXQgP7beTCjNS085ecbTW5uk4Ftq9gsFEmzTYx/C60MsJYUBDbb+r1 YrvbfCfN1eRdwoRWWNrm+Zv6AZ6ryO8hkNDV2CMmTkLJbuJGCIM0jvzQGjehZIH14Wda tplfYJuh0WVdxG3O3J7h8CgRS793jW1p/K8OAOwNetQG+6m1+bDZiLvFdK3hpbrLaKXE 6PgTqI3Mbz7XFAa2+eRGkJQJqbtYfNSih2KHsDgJ6s4QFYMAySWnsQsgCVd2ykhchNln yxCnf3Vcatvqz8wids9ouB5zsL93NHEHboTU6tjhIiuRDZiV75pmjCNnoKXKiz//cCCu Pf1w== X-Gm-Message-State: APf1xPBItWIeoavRsqcBv7XRngdME7PJPRqlfaO99LeVJv9khW8mKggF 9OKBfk1HksMTTkwWnjboDJs= 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 Subject: [PATCH v6 04/17] ASoC: fsl_ssi: Maintain a mask of active streams 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> X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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 Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" 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); } }