[linux声卡驱动之ALSA移植][三星s5pv210移植kernel 3.8.13, codec是wm8960 ]

小书包VIP 2016-07-20 08:01:11
Dear Sir:
您好!
我在移植ALSA时,出现以下错误:
playback write error(DMA or IIRQ trouble?), I2S 没有data出来,无声音输出!
查看流程发现没有正确map dma buffer, 即.mmap = snd_pcm_mmap中没有跑流程snd_pcm_mmap_data(),而是走case SNDRV_PCM_MMAP_OFFSET_STATUS。
static int snd_pcm_mmap(struct file *file, struct vm_area_struct *area)
{
printk("(+)%s[in], line:%d\n", __func__, __LINE__);
struct snd_pcm_file * pcm_file;
struct snd_pcm_substream *substream;
unsigned long offset;

pcm_file = file->private_data;
substream = pcm_file->substream;
if (PCM_RUNTIME_CHECK(substream))
return -ENXIO;

offset = area->vm_pgoff << PAGE_SHIFT;
switch (offset) {
case SNDRV_PCM_MMAP_OFFSET_STATUS:
if (pcm_file->no_compat_mmap)
return -ENXIO;
printk("(-)%s[out], line:%d\n\n", __func__, __LINE__);
return snd_pcm_mmap_status(substream, file, area); //return -6
case SNDRV_PCM_MMAP_OFFSET_CONTROL:
if (pcm_file->no_compat_mmap)
return -ENXIO;
printk("(-)%s[out], line:%d\n", __func__, __LINE__);
return snd_pcm_mmap_control(substream, file, area);
default:
printk("(-)%s[out], line:%d\n", __func__, __LINE__);
return snd_pcm_mmap_data(substream, file, area); //没有正确map dma buffer?
}
return 0;
}

/*
* don't support mmap for status and control records.
*/
static int snd_pcm_mmap_status(struct snd_pcm_substream *substream, struct file *file,
struct vm_area_struct *area)
{
return -ENXIO; // return -6
}
导致出现上述问题的原因有可能是什么,各位如有深究过alsa, 期待您的回复!
...全文
857 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧