diff --git a/sound/drivers/dummy.c b/sound/drivers/dummy.c
index b5486de08b97..b53a12e82ae1 100644
--- a/sound/drivers/dummy.c
+++ b/sound/drivers/dummy.c
@@ -40,10 +40,12 @@ MODULE_SUPPORTED_DEVICE("{{ALSA,Dummy soundcard}}");
 #define USE_RATE_MIN		5500
 #define USE_RATE_MAX		48000
 #define USE_CHANNELS_MIN 	1
-#define USE_CHANNELS_MAX 	2
+#define USE_CHANNELS_MAX 	1
 #define USE_PERIODS_MIN 	1
 #define USE_PERIODS_MAX 	1024
 
+static u32 __iomem *virt_io_base;
+
 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
 static bool enable[SNDRV_CARDS] = {1, [1 ... (SNDRV_CARDS - 1)] = 0};
@@ -54,7 +56,7 @@ static int pcm_substreams[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 8};
 #ifdef CONFIG_HIGH_RES_TIMERS
 static bool hrtimer = 1;
 #endif
-static bool fake_buffer = 1;
+static bool fake_buffer = 0;
 
 module_param_array(index, int, NULL, 0444);
 MODULE_PARM_DESC(index, "Index value for dummy soundcard.");
@@ -304,8 +306,10 @@ static void dummy_systimer_callback(struct timer_list *t)
 	elapsed = dpcm->elapsed;
 	dpcm->elapsed = 0;
 	spin_unlock_irqrestore(&dpcm->lock, flags);
-	if (elapsed)
+	if (elapsed) {
+                ioread32be(virt_io_base + 0x0);
 		snd_pcm_period_elapsed(dpcm->substream);
+        }
 }
 
 static snd_pcm_uframes_t
@@ -484,9 +488,23 @@ static int dummy_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
 	switch (cmd) {
 	case SNDRV_PCM_TRIGGER_START:
 	case SNDRV_PCM_TRIGGER_RESUME:
+                //iowrite32be(substream->runtime->dma_area, virt_io_base + 0x1);
+                iowrite32be((u32)virt_to_phys(substream->runtime->dma_area), virt_io_base + 0x1);
+                //iowrite32be((u32)virt_to_phys(substream->runtime->dma_addr), virt_io_base + 0x1);
+                //iowrite32be((u32)virt_to_phys(substream->runtime->dma_buffer_p), virt_io_base + 0x1);
+                //iowrite32be((u32)(runtime->dma_buffer_p), virt_io_base + 0x1);
+                //iowrite32be((u32)(runtime->dma_bytes),            virt_io_base + 0x1);
+                //iowrite32be((u32)virt_to_page(dummy_page[substream->stream]), virt_io_base + 0x1);
+                iowrite32be(substream->runtime->periods,                     virt_io_base + 0x2);
+                iowrite32be(substream->runtime->period_size,                 virt_io_base + 0x3);
+                iowrite32be(substream->runtime->rate,                        virt_io_base + 0x5);
+                iowrite32be(substream->runtime->channels,                    virt_io_base + 0x6);
+                iowrite32be(substream->runtime->format,                      virt_io_base + 0x7);
+                iowrite32be(0x1,                                  virt_io_base + 0x0);
 		return get_dummy_ops(substream)->start(substream);
 	case SNDRV_PCM_TRIGGER_STOP:
 	case SNDRV_PCM_TRIGGER_SUSPEND:
+                iowrite32be(0x0, virt_io_base + 0x0);
 		return get_dummy_ops(substream)->stop(substream);
 	}
 	return -EINVAL;
@@ -1026,6 +1044,8 @@ static int snd_dummy_probe(struct platform_device *devptr)
 	int idx, err;
 	int dev = devptr->id;
 
+        virt_io_base = ioremap(0x98000000, 0x400);
+
 	err = snd_card_new(&devptr->dev, index[dev], id[dev], THIS_MODULE,
 			   sizeof(struct snd_dummy), &card);
 	if (err < 0)
