All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicolin Chen <nicoleotsuka@gmail.com>
To: timur@tabi.org, broonie@kernel.org
Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	alsa-devel@alsa-project.org, lgirdwood@gmail.com,
	fabio.estevam@nxp.com, mail@maciej.szmigiero.name,
	caleb@crome.org, arnaud.mouiche@invoxia.com, lukma@denx.de,
	kernel@pengutronix.de
Subject: [PATCH v1 02/15] ASoC: fsl_ssi: Maintain a mask of active streams
Date: Tue, 19 Dec 2017 09:00:06 -0800	[thread overview]
Message-ID: <1513702819-42310-3-git-send-email-nicoleotsuka@gmail.com> (raw)
In-Reply-To: <1513702819-42310-1-git-send-email-nicoleotsuka@gmail.com>

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 <nicoleotsuka@gmail.com>
---
 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);
 	}
 }
 
-- 
2.7.4

WARNING: multiple messages have this Message-ID (diff)
From: Nicolin Chen <nicoleotsuka@gmail.com>
To: timur@tabi.org, broonie@kernel.org
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: [PATCH v1 02/15] ASoC: fsl_ssi: Maintain a mask of active streams
Date: Tue, 19 Dec 2017 09:00:06 -0800	[thread overview]
Message-ID: <1513702819-42310-3-git-send-email-nicoleotsuka@gmail.com> (raw)
In-Reply-To: <1513702819-42310-1-git-send-email-nicoleotsuka@gmail.com>

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 <nicoleotsuka@gmail.com>
---
 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);
 	}
 }
 
-- 
2.7.4

  parent reply	other threads:[~2017-12-19 17:06 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-19 17:00 [PATCH v1 00/15] ASoC: fsl_ssi: Clean up - program flow level Nicolin Chen
2017-12-19 17:00 ` Nicolin Chen
2017-12-19 17:00 ` [PATCH v1 01/15] ASoC: fsl_ssi: Clean up set_dai_tdm_slot() Nicolin Chen
2018-01-01 18:39   ` Maciej S. Szmigiero
2018-01-01 18:39     ` Maciej S. Szmigiero
2018-01-04 19:08     ` Nicolin Chen
2018-01-04 19:08       ` Nicolin Chen
2018-02-22 13:17   ` Applied "ASoC: fsl_ssi: Clean up set_dai_tdm_slot()" to the asoc tree Mark Brown
2018-02-22 13:17     ` Mark Brown
2017-12-19 17:00 ` Nicolin Chen [this message]
2017-12-19 17:00   ` [PATCH v1 02/15] ASoC: fsl_ssi: Maintain a mask of active streams Nicolin Chen
2017-12-19 17:00 ` [PATCH v1 03/15] ASoC: fsl_ssi: Rename fsl_ssi_disable_val macro Nicolin Chen
2017-12-19 17:00   ` Nicolin Chen
2018-01-01 21:29   ` Maciej S. Szmigiero
2018-01-04 19:42     ` Nicolin Chen
2017-12-19 17:00 ` [PATCH v1 04/15] ASoC: fsl_ssi: Clear FIFO directly in fsl_ssi_config() Nicolin Chen
2017-12-19 17:00   ` Nicolin Chen
2017-12-19 17:00 ` [PATCH v1 05/15] ASoC: fsl_ssi: Clean up helper functions of trigger() Nicolin Chen
2017-12-19 17:00   ` Nicolin Chen
2018-01-01 21:59   ` Maciej S. Szmigiero
2018-01-01 21:59     ` Maciej S. Szmigiero
2018-01-04 19:44     ` Nicolin Chen
2018-01-04 19:44       ` Nicolin Chen
2017-12-19 17:00 ` [PATCH v1 06/15] ASoC: fsl_ssi: Add DAIFMT define for AC97 Nicolin Chen
2017-12-19 17:00   ` Nicolin Chen
2018-02-22 13:16   ` Applied "ASoC: fsl_ssi: Add DAIFMT define for AC97" to the asoc tree Mark Brown
2018-02-22 13:16     ` Mark Brown
2017-12-19 17:00 ` [PATCH v1 07/15] ASoC: fsl_ssi: Clean up fsl_ssi_setup_regvals() Nicolin Chen
2017-12-19 17:00   ` Nicolin Chen
2018-02-22 13:16   ` Applied "ASoC: fsl_ssi: Clean up fsl_ssi_setup_regvals()" to the asoc tree Mark Brown
2018-02-22 13:16     ` Mark Brown
2017-12-19 17:00 ` [PATCH v1 08/15] ASoC: fsl_ssi: Set xFEN0 and xFEN1 together Nicolin Chen
2018-02-22 13:16   ` Applied "ASoC: fsl_ssi: Set xFEN0 and xFEN1 together" to the asoc tree Mark Brown
2018-02-22 13:16     ` Mark Brown
2017-12-19 17:00 ` [PATCH v1 09/15] ASoC: fsl_ssi: Use snd_soc_init_dma_data instead Nicolin Chen
2018-02-22 13:16   ` Applied "ASoC: fsl_ssi: Use snd_soc_init_dma_data instead" to the asoc tree Mark Brown
2018-02-22 13:16     ` Mark Brown
2017-12-19 17:00 ` [PATCH v1 10/15] ASoC: fsl_ssi: Move one-time configurations to dai_probe() Nicolin Chen
2017-12-19 17:00 ` [PATCH v1 11/15] ASoC: fsl_ssi: Setup AC97 in dai_probe() Nicolin Chen
2018-01-01 15:17   ` Maciej S. Szmigiero
2018-01-04 19:07     ` Nicolin Chen
2018-01-04 20:38       ` Maciej S. Szmigiero
2018-01-04 20:58         ` Nicolin Chen
2017-12-19 17:00 ` [PATCH v1 12/15] ASoC: fsl_ssi: Clean up _fsl_ssi_set_dai_fmt() Nicolin Chen
2017-12-19 17:00 ` [PATCH v1 13/15] ASoC: fsl_ssi: Remove cpu_dai_drv from fsl_ssi structure Nicolin Chen
2017-12-19 17:00 ` [PATCH v1 14/15] ASoC: fsl_ssi: Move DT related code to a separate probe() Nicolin Chen
2017-12-19 17:00 ` [PATCH v1 15/15] ASoC: fsl_ssi: Use ssi->streams instead of reading register Nicolin Chen
2017-12-19 17:34 ` [PATCH v1 00/15] ASoC: fsl_ssi: Clean up - program flow level Timur Tabi
2018-01-02 23:28 ` Caleb Crome
2018-01-04 19:48   ` Nicolin Chen
2018-01-04 19:48     ` Nicolin Chen
2018-01-04 19:50     ` Caleb Crome
2018-01-04 19:50       ` Caleb Crome

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1513702819-42310-3-git-send-email-nicoleotsuka@gmail.com \
    --to=nicoleotsuka@gmail.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=arnaud.mouiche@invoxia.com \
    --cc=broonie@kernel.org \
    --cc=caleb@crome.org \
    --cc=fabio.estevam@nxp.com \
    --cc=kernel@pengutronix.de \
    --cc=lgirdwood@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=lukma@denx.de \
    --cc=mail@maciej.szmigiero.name \
    --cc=timur@tabi.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.