zoukankan      html  css  js  c++  java
  • DAPM event机制

    概要

    通过dapm事件机制,widget可以定义自己的event回调函数来监听dapm事件。

    有些dapm widget和其它组件 在上下电顺序上有要求,而且这些组件电源不是通过寄存器控制或者说这些组件无法定义成widget注册到dapm框架,通过dapm机制控制其电源。可以通过dapm事件机制或amix进行控制。

    例如:对于那些位于codec之外的组件,例如喇叭功放、外部的前置放大器等等,这些组件和有些widget有上下电顺序要求。由于组件不是使用codec内部的寄存器进行电源控制,无法定义成widget,我们就必须利用dapm的事件机制,获得相应的上下电事件,从而可以控制组件和widget之间的上下电顺序。

    dapm widget event种类

    widget event回调函数

    下面的widget默认需要提供event回调函数:

    这些widget都是位于codec外部的器件,它们无法使用通用的寄存器操作来控制widget的电源状态,所以需要我们提供event回调函数。

    在定义snd_soc_dapm_clock_supply、snd_soc_dapm_regulator_supply、snd_soc_dapm_pinctrl类型widgets时,会默认定义相应的event回调函数。代码如下所示:

    #define SND_SOC_DAPM_CLOCK_SUPPLY(wname) 
    {	.id = snd_soc_dapm_clock_supply, .name = wname, 
    	.reg = SND_SOC_NOPM, .event = dapm_clock_event, 
    	.event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD }
    #define SND_SOC_DAPM_REGULATOR_SUPPLY(wname, wdelay, wflags)	    
    {	.id = snd_soc_dapm_regulator_supply, .name = wname, 
    	.reg = SND_SOC_NOPM, .shift = wdelay, .event = dapm_regulator_event, 
    	.event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD, 
    	.on_val = wflags}
    #define SND_SOC_DAPM_PINCTRL(wname, active, sleep) 
    {	.id = snd_soc_dapm_pinctrl, .name = wname, 
    	.priv = (&(struct snd_soc_dapm_pinctrl_priv) 
    		{ .active_state = active, .sleep_state = sleep,}), 
    	.reg = SND_SOC_NOPM, .event = dapm_pinctrl_event, 
    	.event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD }
    

    在定义snd_soc_dapm_supply类型的widget时,可以定义event回调函数。代码如下:

    #define SND_SOC_DAPM_SUPPLY(wname, wreg, wshift, winvert, wevent, wflags) 
    {	.id = snd_soc_dapm_supply, .name = wname, 
    	SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), 
    	.event = wevent, .event_flags = wflags}
    

    注意这些硬件资源类型的widgets,是通过widget name来获取资源句柄的
    supply类型widget必须添加到audio route路由表里,其event()回调函数才会被调用

  • 相关阅读:
    自动化运维之日志系统ES+Kibana展示(二)
    自动化运维之日志系统ElasticSearch篇(一)
    Zabbix应用监控系列之Redis状态监控
    zabbix监控tomcat
    Dynamic CRM2016在一台本地服务器安装部署
    windows server 2012r2 中文输入法不能使用
    microsoft dynamic CRM2016安装时报错组件未安装
    Linux RHCE 文件,目录和帮助(转)
    Linux系统管理员的命令行工具箱目录(转)
    linux本地用户和组的管理(转)
  • 原文地址:https://www.cnblogs.com/bobfly1984/p/13966732.html
Copyright © 2011-2022 走看看