Skip to content

Commit

Permalink
ASoC: Blackfin I2S: fix resuming when device hasn't been used
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Cliff Cai authored and Mark Brown committed Sep 18, 2009
1 parent fab19ba commit ad80efc
Showing 1 changed file with 7 additions and 12 deletions.
19 changes: 7 additions & 12 deletions sound/soc/blackfin/bf5xx-i2s.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit ad80efc

Please sign in to comment.