--- linux-2.6.16-oe/sound/soc/pxa/pxa2xx-pcm.c	Thu Mar 30 16:55:14 2006
+++ linux-2.6.16/sound/soc/pxa/pxa2xx-pcm.c	Fri Mar 31 20:01:35 2006
@@ -380,7 +380,15 @@ static int pxa2xx_pcm_resume(struct plat
 	DCMD(prtd->dma_ch) = 0;
 	*prtd->params->drcmr = prtd->dma_ch | DRCMR_MAPVLD;
 	DDADR(prtd->dma_ch) = prtd->dma_desc_array_phys;
+
+ 	/* FIXME: suspend/resume triggers should be used? */
+ 	if (runtime->status->state != SNDRV_PCM_STATE_RUNNING &&
+         (runtime->status->state != SNDRV_PCM_STATE_DRAINING ||
+ 		 runtime->trigger_master != NULL ||
+          runtime->trigger_master->stream != SNDRV_PCM_STREAM_PLAYBACK)) return 0;
+
 	DCSR(prtd->dma_ch) |= DCSR_RUN;	
+	
 	return 0;
 }	
 
--- linux-2.6.16-oe/sound/soc/soc-core.c	Thu Mar 30 16:55:14 2006
+++ linux-2.6.16/sound/soc/soc-core.c	Mon Apr 17 13:07:59 2006
@@ -64,6 +64,7 @@ static const unsigned char formats[] = {
 	18, 18, 18, 18
 };
 
+#ifdef CONFIG_SND_AC97_BUS
 /* unregister ac97 codec */
 static int soc_ac97_dev_unregister(struct snd_soc_codec *codec)
 {
@@ -95,6 +96,7 @@ static int soc_ac97_dev_register(struct 
 	}
 	return 0;
 }
+#endif
 
 /* get rate format from rate */
 static inline int soc_get_rate_format(int rate)
@@ -1160,8 +1162,10 @@ int snd_soc_register_card(struct snd_soc
 		return ret;
 	}
 	
+#ifdef CONFIG_SND_AC97_BUS
 	if(ac97)
 		soc_ac97_dev_register(codec);
+#endif
 	
 	snd_soc_dapm_sys_add(socdev->dev);
 	return ret;
@@ -1178,9 +1182,10 @@ EXPORT_SYMBOL_GPL(snd_soc_register_card)
 void snd_soc_free_pcms(struct snd_soc_device *socdev)
 {
 	struct snd_soc_codec *codec = socdev->codec;
-
+#ifdef CONFIG_SND_AC97_BUS
 	if(codec->ac97)
 		soc_ac97_dev_unregister(codec);
+#endif
 	if(codec->card)
 		snd_card_free(codec->card);
 }
