探究声卡之controls

本文深入探讨了声卡controls的内核实现,从snd_soc_add_controls函数的使用到snd_ctl_add如何加载control,详细阐述了如何通过snd_kcontrol结构体构建并管理controls,同时介绍了控制的注册和通知过程。
摘要由CSDN通过智能技术生成

一方面,从内核实现的角度来说,每个声卡的驱动,如wm9713.c/uda134x.c,都有一句:
snd_soc_add_controls(。。。。)函数,这个函数就是用来添加control的。

 

另一方面,从用户空间来说,controls的实现目的就是提供给用户更好的控制和使用WM9714声卡。既然提供给用户使用,那么少不了系统调用来操作,也就是内核要实现内核操作函数。

在注册control的时候,我们是调用注册函数snd_ctl_dev_register来实现的,在该函数里就有:

if ((err = snd_register_device(SNDRV_DEVICE_TYPE_CONTROL, card, -1,
           &snd_ctl_f_ops, card, name)) < 0)

其中snd_ctl_f_ops就是control的操作函数了:

static const struct file_operations snd_ctl_f_ops =
{
 .owner = THIS_MODULE,
 .read =  snd_ctl_read,
 .open =  snd_ctl_open,
 .release = snd_ctl_release,
 .llseek = no_llseek,
 .poll =  snd_ctl_poll,
 .unlocked_ioctl = snd_ctl_ioctl,
 .compat_ioctl = snd_ctl_ioctl_compat,
 .fasync = snd_ctl_fasync,
};


 

 

现在我们先从第一方面说起,

snd_soc_add_controls(。。。。)函数如何实现control的加载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值