diff -Nur linux-3.18.6.orig/sound/soc/bcm/bcm2708-i2s.c linux-3.18.6/sound/soc/bcm/bcm2708-i2s.c --- linux-3.18.6.orig/sound/soc/bcm/bcm2708-i2s.c 2015-02-12 12:00:42.809186343 +0100 +++ linux-3.18.6/sound/soc/bcm/bcm2708-i2s.c 2015-02-12 13:35:35.929213859 +0100 @@ -171,6 +171,11 @@ /* I2S pin configuration */ static int bcm2708_i2s_gpio=BCM2708_I2S_GPIO_AUTO; +static bool use_mmap = 1; +module_param(use_mmap, bool, S_IRUGO); +MODULE_PARM_DESC(use_mmap, "Use MMAP"); + + /* General device struct */ struct bcm2708_i2s_dev { struct device *dev; @@ -874,7 +879,7 @@ .name = "bcm2708-i2s-comp", }; -static const struct snd_pcm_hardware bcm2708_pcm_hardware = { +static struct snd_pcm_hardware bcm2708_pcm_hardware = { .info = SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_JOINT_DUPLEX, .formats = SNDRV_PCM_FMTBIT_S16_LE | @@ -966,6 +971,12 @@ return ret; } + if (use_mmap) { + printk("Enable ALSA MMAP support for I2S\n"); + bcm2708_pcm_hardware.info |= SNDRV_PCM_INFO_MMAP; + bcm2708_pcm_hardware.info |= SNDRV_PCM_INFO_MMAP_VALID; + } + ret = snd_dmaengine_pcm_register(&pdev->dev, &bcm2708_dmaengine_pcm_config, SND_DMAENGINE_PCM_FLAG_COMPAT);