ASoC: don't touch pxa-ssp registers when stream is running
authorDaniel Mack <daniel@caiaq.de>
Tue, 10 Mar 2009 15:41:00 +0000 (16:41 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Tue, 10 Mar 2009 19:44:04 +0000 (19:44 +0000)
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@caiaq.de>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/pxa/pxa-ssp.c

index 7fc13f03d1d2343621dad9ec19da2b3cb4706f58..52d97c4b82b19725e9528706eeae02c1c044c004 100644 (file)
@@ -522,6 +522,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);