Re: [PATCH 3/4] pxa-ssp: don't touch ssp registers when stream is running

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Mark,

On Thu, Mar 05, 2009 at 11:23:37AM +0100, Daniel Mack wrote:
> On Wed, Mar 04, 2009 at 08:42:22PM +0000, Mark Brown wrote:
> > On Wed, Mar 04, 2009 at 09:39:11PM +0100, Daniel Mack wrote:
> > > On Wed, Mar 04, 2009 at 08:33:52PM +0000, Mark Brown wrote:
> > 
> > > > I'd expect an error to be reported here - if we needed to change the
> > > > settings and can't things could go wrong.  Ideally it'd check to see if
> > > > the DAI format was being changed and only error if it was.
> > 
> > > In my tests, pxa_ssp_set_dai_fmt() was simply called twice, once for the
> > > input, once for the ouput. Hence I believed a silent exit in such a case
> > 
> > That'll be because you weren't changing the DAI format - hence my
> > comment about only erroring if the format is changed.
> 
> Ok, that makes sense. We should probably do something silimar in
> set_hw_params() were we also currently exit silently in case of running
> streams.

Could you have a look on the patch below please - does that look better?

Thanks,
Daniel


>From b0399b4d42265313768044ab6bb5754162b70fd5 Mon Sep 17 00:00:00 2001
From: Daniel Mack <daniel@xxxxxxxx>
Date: Tue, 10 Mar 2009 16:36:58 +0100
Subject: [PATCH 2/2] pxa-ssp: don't touch registers if stream is running

In pxa_ssp_set_dai_fmt(), check whether there is anything to do at all.
If there would be but the SSP port is in use already, bail out.

Signed-off-by: Daniel Mack <daniel@xxxxxxxx>
Cc: Philipp Zabel <philipp.zabel@xxxxxxxxx>
Cc: Liam Girdwood <lrg@xxxxxxxxxx>
---
 sound/soc/pxa/pxa-ssp.c |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/sound/soc/pxa/pxa-ssp.c b/sound/soc/pxa/pxa-ssp.c
index 1b3a81c..569c0a6 100644
--- a/sound/soc/pxa/pxa-ssp.c
+++ b/sound/soc/pxa/pxa-ssp.c
@@ -525,6 +525,17 @@ static int pxa_ssp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
 	u32 sscr1;
 	u32 sspsp;
 
+	/* check if we need to change anything at all */
+	if (priv->dai_fmt == fmt)
+		return 0;
+
+	/* we can only change the settings if the port is not in use */
+	if (ssp_read_reg(ssp, SSCR0) & SSCR0_SSE) {
+		dev_err(&ssp->pdev->dev,
+			"can't change hardware dai format: stream is in use");
+		return -EINVAL;
+	}
+
 	/* reset port settings */
 	sscr0 = ssp_read_reg(ssp, SSCR0) &
 		(SSCR0_ECS |  SSCR0_NCS | SSCR0_MOD | SSCR0_ACS);
-- 
1.6.2

_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux