This patch tries to correct the problem of full duplex mode not working
over a single McBSP based CPU DAI.
Created against linux-2.6.31-rc5.
Tested on Amstrad Delta.
Signed-off-by: Janusz Krzysztofik <jkrzyszt(a)tis.icnet.pl>
---
--- linux-2.6.31-rc5/sound/soc/omap/omap-mcbsp.c.orig 2009-08-01 02:40:45.000000000 +0200
+++ linux-2.6.31-rc5/sound/soc/omap/omap-mcbsp.c 2009-08-03 03:28:07.000000000 +0200
@@ -183,6 +183,7 @@ static int omap_mcbsp_dai_trigger(struct
struct snd_soc_pcm_runtime *rtd = substream->private_data;
struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data);
+ u16 buf;
int err = 0;
switch (cmd) {
@@ -191,6 +192,14 @@ static int omap_mcbsp_dai_trigger(struct
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
if (!mcbsp_data->active++)
omap_mcbsp_start(mcbsp_data->bus_id);
+ else if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
+ /* looks like capture already in progress,
+ * start playback by taking it out of error condition */
+ omap_mcbsp_pollwrite(mcbsp_data->bus_id, 0x0);
+ else
+ /* looks like playback already in progress,
+ * start capture by taking it out of error condition */
+ omap_mcbsp_pollread(mcbsp_data->bus_id, &buf);
break;
case SNDRV_PCM_TRIGGER_STOP: