Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / sound / soc / kirkwood / kirkwood-dma.c
index 210438261a49fab17aeb6fe857846e9bccba74e7..d038540271285f90b8d093643fcfeb7de07cc8b6 100644 (file)
@@ -94,9 +94,10 @@ static irqreturn_t kirkwood_dma_irq(int irq, void *dev_id)
        return IRQ_HANDLED;
 }
 
-static void kirkwood_dma_conf_mbus_windows(void __iomem *base, int win,
-                                       unsigned long dma,
-                                       struct mbus_dram_target_info *dram)
+static void
+kirkwood_dma_conf_mbus_windows(void __iomem *base, int win,
+                              unsigned long dma,
+                              const struct mbus_dram_target_info *dram)
 {
        int i;
 
@@ -106,7 +107,7 @@ static void kirkwood_dma_conf_mbus_windows(void __iomem *base, int win,
 
        /* try to find matching cs for current dma address */
        for (i = 0; i < dram->num_cs; i++) {
-               struct mbus_dram_window *cs = dram->cs + i;
+               const struct mbus_dram_window *cs = dram->cs + i;
                if ((cs->base & 0xffff0000) < (dma & 0xffff0000)) {
                        writel(cs->base & 0xffff0000,
                                base + KIRKWOOD_AUDIO_WIN_BASE_REG(win));
@@ -127,6 +128,7 @@ static int kirkwood_dma_open(struct snd_pcm_substream *substream)
        struct snd_soc_dai *cpu_dai = soc_runtime->cpu_dai;
        struct kirkwood_dma_data *priv;
        struct kirkwood_dma_priv *prdata = snd_soc_platform_get_drvdata(platform);
+       const struct mbus_dram_target_info *dram;
        unsigned long addr;
 
        priv = snd_soc_dai_get_dma_data(cpu_dai, substream);
@@ -175,15 +177,16 @@ static int kirkwood_dma_open(struct snd_pcm_substream *substream)
                writel((unsigned long)-1, priv->io + KIRKWOOD_ERR_MASK);
        }
 
+       dram = mv_mbus_dram_info();
        addr = virt_to_phys(substream->dma_buffer.area);
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
                prdata->play_stream = substream;
                kirkwood_dma_conf_mbus_windows(priv->io,
-                       KIRKWOOD_PLAYBACK_WIN, addr, priv->dram);
+                       KIRKWOOD_PLAYBACK_WIN, addr, dram);
        } else {
                prdata->rec_stream = substream;
                kirkwood_dma_conf_mbus_windows(priv->io,
-                       KIRKWOOD_RECORD_WIN, addr, priv->dram);
+                       KIRKWOOD_RECORD_WIN, addr, dram);
        }
 
        return 0;
@@ -315,7 +318,6 @@ static int kirkwood_dma_preallocate_dma_buffer(struct snd_pcm *pcm,
 static int kirkwood_dma_new(struct snd_soc_pcm_runtime *rtd)
 {
        struct snd_card *card = rtd->card->snd_card;
-       struct snd_soc_dai *dai = rtd->cpu_dai;
        struct snd_pcm *pcm = rtd->pcm;
        int ret;
 
@@ -324,14 +326,14 @@ static int kirkwood_dma_new(struct snd_soc_pcm_runtime *rtd)
        if (!card->dev->coherent_dma_mask)
                card->dev->coherent_dma_mask = 0xffffffff;
 
-       if (dai->driver->playback.channels_min) {
+       if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) {
                ret = kirkwood_dma_preallocate_dma_buffer(pcm,
                                SNDRV_PCM_STREAM_PLAYBACK);
                if (ret)
                        return ret;
        }
 
-       if (dai->driver->capture.channels_min) {
+       if (pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream) {
                ret = kirkwood_dma_preallocate_dma_buffer(pcm,
                                SNDRV_PCM_STREAM_CAPTURE);
                if (ret)