ASoC: Blackfin I2S: fix resuming when device hasn't been used
authorCliff Cai <cliff.cai@analog.com>
Thu, 17 Sep 2009 00:25:12 +0000 (20:25 -0400)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 18 Sep 2009 14:07:19 +0000 (15:07 +0100)
If the sound system hasn't been utilized yet and we suspend, then we
attempt to save/restore using state that doesn't exist.  So use a global
handle instead to reconfigure properly.

Signed-off-by: Cliff Cai <cliff.cai@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/blackfin/bf5xx-i2s.c

index 19539c68c053ecd1ec6be65f623b0b692b8523a5..1e9d161c76c4ff9b74e8f34b6cb923db76378850 100644 (file)
@@ -237,36 +237,31 @@ static void bf5xx_i2s_remove(struct platform_device *pdev,
 #ifdef CONFIG_PM
 static int bf5xx_i2s_suspend(struct snd_soc_dai *dai)
 {
-       struct sport_device *sport =
-               (struct sport_device *)dai->private_data;
 
        pr_debug("%s : sport %d\n", __func__, dai->id);
-       if (!dai->active)
-               return 0;
+
        if (dai->capture.active)
-               sport_rx_stop(sport);
+               sport_rx_stop(sport_handle);
        if (dai->playback.active)
-               sport_tx_stop(sport);
+               sport_tx_stop(sport_handle);
        return 0;
 }
 
 static int bf5xx_i2s_resume(struct snd_soc_dai *dai)
 {
        int ret;
-       struct sport_device *sport =
-               (struct sport_device *)dai->private_data;
 
        pr_debug("%s : sport %d\n", __func__, dai->id);
-       if (!dai->active)
-               return 0;
 
-       ret = sport_config_rx(sport, RFSR | RCKFE, RSFSE|0x1f, 0, 0);
+       ret = sport_config_rx(sport_handle, bf5xx_i2s.rcr1,
+                                     bf5xx_i2s.rcr2, 0, 0);
        if (ret) {
                pr_err("SPORT is busy!\n");
                return -EBUSY;
        }
 
-       ret = sport_config_tx(sport, TFSR | TCKFE, TSFSE|0x1f, 0, 0);
+       ret = sport_config_tx(sport_handle, bf5xx_i2s.tcr1,
+                                     bf5xx_i2s.tcr2, 0, 0);
        if (ret) {
                pr_err("SPORT is busy!\n");
                return -EBUSY;