Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
DMA(Direct Memory Access,直接内存存取),顾名思义,不占用cpu资源,从一个硬件存储区域把一部分连续的数据复制到另一个硬件存储区域。
这里的用例就是:
录音时,把录音数据从I2S搬运到驱动内存。
放音时,把驱动里的播放数据搬到I2S。
DMA buffer配置:
I2S初始化的时候会有如下调用:
rockchip_i2s_probe -> rk_i2s.c
rockchip_pcm_platform_register -> rk_pcm.c
snd_dmaengine_pcm_register -> //rockchip_dmaengine_pcm_config中包含了预分配的size,prealloc_buffer_size = PAGE_SIZE * 512;
snd_soc_add_platform -> //后面会调用dmaengine_no_residue_pcm_platform中的dmaengine_pcm_new()
dmaengine_no_residue_pcm_platform结构:
static const struct snd_soc_platform_driver dmaengine_no_residue_pcm_platform = {
.ops = &dmaengine_no_residue_