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()回调函数才会被调用

  • 相关阅读:
    「日常训练」Single-use Stones (CFR476D2D)
    「日常训练」Greedy Arkady (CFR476D2C)
    「Haskell 学习」二 类型和函数(上)
    「学习记录」《数值分析》第二章计算实习题(Python语言)
    「日常训练」Alena And The Heater (CFR466D2D)
    Dubbo 消费者
    Dubbo 暴露服务
    Rpc
    git fail to push some refs....
    Spring Cloud (6)config 客户端配置 与GitHub通信
  • 原文地址:https://www.cnblogs.com/bobfly1984/p/13966732.html
Copyright © 2011-2022 走看看