ALSA: pcm: Check mmap capability of runtime dma buffer at first
[sfrench/cifs-2.6.git] / sound / core / pcm_native.c
index 71323d807dbf45ca3eb95d61397afe7f2c93e4f5..dc9fa312faddfb27bec0b134b5f78498ca15f9a5 100644 (file)
@@ -243,13 +243,18 @@ int snd_pcm_info_user(struct snd_pcm_substream *substream,
 
 static bool hw_support_mmap(struct snd_pcm_substream *substream)
 {
+       struct snd_dma_buffer *dmabuf;
+
        if (!(substream->runtime->hw.info & SNDRV_PCM_INFO_MMAP))
                return false;
 
        if (substream->ops->mmap || substream->ops->page)
                return true;
 
-       switch (substream->dma_buffer.dev.type) {
+       dmabuf = snd_pcm_get_dma_buf(substream);
+       if (!dmabuf)
+               dmabuf = &substream->dma_buffer;
+       switch (dmabuf->dev.type) {
        case SNDRV_DMA_TYPE_UNKNOWN:
                /* we can't know the device, so just assume that the driver does
                 * everything right
@@ -259,7 +264,7 @@ static bool hw_support_mmap(struct snd_pcm_substream *substream)
        case SNDRV_DMA_TYPE_VMALLOC:
                return true;
        default:
-               return dma_can_mmap(substream->dma_buffer.dev.dev);
+               return dma_can_mmap(dmabuf->dev.dev);
        }
 }