Title: [3923] trunk/sound/blackfin/ad73311.c: task [#1726] add AD73311 power management support
Revision
3923
Author
cliff
Date
2007-11-22 04:47:08 -0600 (Thu, 22 Nov 2007)

Log Message

task [#1726] add AD73311 power management support

Diffstat

 ad73311.c |   76 +++++++++++++++++++++++++++++++++-----------------------------
 1 files changed, 41 insertions(+), 35 deletions(-)

Modified Paths

Diff

Modified: trunk/sound/blackfin/ad73311.c (3922 => 3923)


--- trunk/sound/blackfin/ad73311.c	2007-11-22 05:28:53 UTC (rev 3922)
+++ trunk/sound/blackfin/ad73311.c	2007-11-22 10:47:08 UTC (rev 3923)
@@ -127,7 +127,7 @@
  *************************************************************/
 
 static struct snd_pcm_hardware snd_ad73311_play_hw = {
-	.info = (SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER),
+	.info = (SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_RESUME),
 	.formats =          SNDRV_PCM_FMTBIT_S16_LE,
 	.rates =            SNDRV_PCM_RATE_8000,
 	.rate_min =         8000,
@@ -141,7 +141,7 @@
 	.periods_max =      FRAGMENTS_MAX,
 };
 static struct snd_pcm_hardware snd_ad73311_cap_hw = {
-	.info = (SNDRV_PCM_INFO_INTERLEAVED |SNDRV_PCM_INFO_BLOCK_TRANSFER),
+	.info = (SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_RESUME),
 	.formats =          SNDRV_PCM_FMTBIT_S16_LE,
 	.rates =            SNDRV_PCM_RATE_8000,
 	.rate_min =         8000,
@@ -255,22 +255,23 @@
 
 	spin_lock(&chip->ad73311_lock);
 	switch (cmd) {
-		case SNDRV_PCM_TRIGGER_START:
-			bf53x_sport_tx_start(chip->sport);
-			if (!(chip->runmode & RUN_RX))
-				snd_ad73311_startup();
+	case SNDRV_PCM_TRIGGER_START:
+	case SNDRV_PCM_TRIGGER_RESUME:
+		bf53x_sport_tx_start(chip->sport);
+		if (!(chip->runmode & RUN_RX))
+			snd_ad73311_startup();
 			chip->runmode |= RUN_TX;
-			break;
-		case SNDRV_PCM_TRIGGER_STOP:
-			chip->runmode &= ~RUN_TX;
-			bf53x_sport_tx_stop(chip->sport);
-			if (!chip->runmode & RUN_RX) {
-				snd_ad73311_stop();
-			}
-			break;
-		default:
-			spin_unlock(&chip->ad73311_lock);
-			return -EINVAL;
+		break;
+	case SNDRV_PCM_TRIGGER_STOP:
+	case SNDRV_PCM_TRIGGER_SUSPEND:
+		chip->runmode &= ~RUN_TX;
+		bf53x_sport_tx_stop(chip->sport);
+		if (!chip->runmode & RUN_RX)
+			snd_ad73311_stop();
+		break;
+	default:
+		spin_unlock(&chip->ad73311_lock);
+		return -EINVAL;
 	}
 	spin_unlock(&chip->ad73311_lock);
 
@@ -286,23 +287,23 @@
 	spin_lock(&chip->ad73311_lock);
 	snd_assert(substream == chip->rx_substream, return -EINVAL);
 	switch (cmd) {
-		case SNDRV_PCM_TRIGGER_START:
-			bf53x_sport_rx_start(chip->sport);
-			if (!(chip->runmode & RUN_TX)) {
-				snd_ad73311_startup();
-			}
-			chip->runmode |= RUN_RX;
-			break;
-		case SNDRV_PCM_TRIGGER_STOP:
-			chip->runmode &= ~RUN_RX;
-			bf53x_sport_rx_stop(chip->sport);
-			if (!(chip->runmode & RUN_TX)) {
-				snd_ad73311_stop();
-			}
-			break;
-		default:
-			spin_unlock(&chip->ad73311_lock);
-			return -EINVAL;
+	case SNDRV_PCM_TRIGGER_START:
+	case SNDRV_PCM_TRIGGER_RESUME:
+		bf53x_sport_rx_start(chip->sport);
+		if (!(chip->runmode & RUN_TX))
+			snd_ad73311_startup();
+		chip->runmode |= RUN_RX;
+		break;
+	case SNDRV_PCM_TRIGGER_STOP:
+	case SNDRV_PCM_TRIGGER_SUSPEND:
+		chip->runmode &= ~RUN_RX;
+		bf53x_sport_rx_stop(chip->sport);
+		if (!(chip->runmode & RUN_TX))
+			snd_ad73311_stop();
+		break;
+	default:
+		spin_unlock(&chip->ad73311_lock);
+		return -EINVAL;
 	}
 	spin_unlock(&chip->ad73311_lock);
 
@@ -662,8 +663,13 @@
 }
 static int snd_ad73311_resume(struct platform_device *pdev)
 {
+	int err = 0;
 	struct snd_card *card = platform_get_drvdata(pdev);
-
+	struct snd_ad73311 *ad73311 = card->private_data;
+	err = bf53x_sport_config_rx(ad73311->sport, RFSR, 0xF, 0, 0);
+	err = err || bf53x_sport_config_tx(ad73311->sport, TFSR, 0xF, 0, 0);
+	if (err)
+		snd_printk(KERN_ERR "Unable to set sport configuration\n");
 	snd_power_change_state(card, SNDRV_CTL_POWER_D0);
 
 	return 0;
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
http://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to