diff options
author | Takashi Iwai <tiwai@suse.de> | 2010-05-12 10:32:42 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2010-05-12 10:32:42 +0200 |
commit | 9fe17b5d47d3d3c85b35623dea8f571a184134c0 (patch) | |
tree | c2cb92b7f898a68b8cbb3adb8deee265b1f06684 /sound | |
parent | 6a45f7822544c54a2cf070d84f4e85f2fb32ec02 (diff) | |
download | kernel_samsung_smdk4412-9fe17b5d47d3d3c85b35623dea8f571a184134c0.zip kernel_samsung_smdk4412-9fe17b5d47d3d3c85b35623dea8f571a184134c0.tar.gz kernel_samsung_smdk4412-9fe17b5d47d3d3c85b35623dea8f571a184134c0.tar.bz2 |
ALSA: pcm - Use pgprot_noncached() for MIPS non-coherent archs
MIPS non-coherent archs need the noncached pgprot in mmap of PCM buffers.
But, since the coherency needs to be checked dynamically via
plat_device_is_coherent(), we need an ugly check dependent on MIPS
in ALSA core code.
This should be cleaned up in MIPS arch side (e.g. creating
dma_mmap_coherent()) in near future.
Tested-by: Wu Zhangjin <wuzhangjin@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/core/pcm_native.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index 8728876..20b5982 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c @@ -36,6 +36,9 @@ #include <sound/timer.h> #include <sound/minors.h> #include <asm/io.h> +#if defined(CONFIG_MIPS) && defined(CONFIG_DMA_NONCOHERENT) +#include <dma-coherence.h> +#endif /* * Compatibility @@ -3184,6 +3187,10 @@ static int snd_pcm_default_mmap(struct snd_pcm_substream *substream, substream->runtime->dma_area, substream->runtime->dma_addr, area->vm_end - area->vm_start); +#elif defined(CONFIG_MIPS) && defined(CONFIG_DMA_NONCOHERENT) + if (substream->dma_buffer.dev.type == SNDRV_DMA_TYPE_DEV && + !plat_device_is_coherent(substream->dma_buffer.dev.dev)) + area->vm_page_prot = pgprot_noncached(area->vm_page_prot); #endif /* ARCH_HAS_DMA_MMAP_COHERENT */ /* mmap with fault handler */ area->vm_ops = &snd_pcm_vm_ops_data_fault; |