This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TLV320AIC3104:SND_SOC_DAPM_PRE_PMD 您能告诉我生成事件的触发器吗?

Guru**** 2479395 points
Other Parts Discussed in Thread: TLV320AIC3104

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/826474/tlv320aic3104-snd_soc_dapm_pre_pmd-could-you-tell-me-about-the-trigger-that-generates-the-event

器件型号:TLV320AIC3104

■总结

在初始化过程中执行麦克风偏置控制(※)的设置、
麦克风偏置无效、因为在初始化处理后会通知 SND_SOC_DAPM_PRE_PMD 事件

※tlv320aic3104.pdf -表31。 第0页/寄存器25:MICBIAS 控制寄存器

■详细信息

函数调用顺序(linux-imx\sound/soc/codecs\tlv320aic3x.c)

aic3x_i2c_probe ()
→器件树中设置了 aI3x-micbias vg =<1>(MICBIAS 输出被供电至2.0V)、
AIC3X_MICBIAS_2_0V 在 aic3x->micBIAS_vg 中设置

static int aic3x_i2c_probe (struct i2c_client *i2c,
const struct i2c_device_id *id)
{

・・・

if (!OF_property_read_u32 (np,"ai3x-micbis-vg",&value){

case 1:aic3x->micicx_read_u32 (np,"aicx_bias v3v_beg",&beg")= v3v_beg_beg_beg_v3v_beg_beg_aic v=v3v_beg_aicbeg_beg_beg_aic
v3v=v_aic
v_beg_dias_beg_aic v3v=v_beg_beg_beg_beg_aic







v_aic v_aic v3v
DEV_ERR(&i2c->DEV,“不合适的微偏置电压”
“可在 DT\n"找到);
}
否则{aic3x->micbias
_vg = AIC3X_MICBIAS_OFF;
}
・・・
} 

aic3x_probe ()

→MICBIAS 控制寄存器的值根据 aic3x->micBIAS_vg (0x40)的值进行更新

静态 int aic3x_probe (struct snd_soc_codec *编解码器)
{
・・・
switch (aic3x->model){
case AIC3X_model_3X:
case AIC3X_model_33:
snd_soc_add_codec_controls (codec、aic3x_extra snd_controls、
array_size (aic3x_model_model_33)、snic3x_codec_controls
;snic3_doccotr_controls (codec_controls)
array_size (aic3x_mono_controls));
break;
case AIC3X_model_3007:
snd_soc_add_codec_controls (codec、aic3x_extra snd_controls、
array_size (aic3x_extra snd_controls));
SND_SoC_add_codec_controls (编解码器、
&aic3x_classd_amp_gain_ctrl、1);
break;
case AIC3X_model_3104:
break;
}

/*设置麦克风偏置电压*/
switch (aic3x->micbias vg){
case AIC3X_MICBIAS_2_0V:
case AIC3X_MICBIAS_2_5V:
case AIC3X_MICBIAS_AVDDV:
SND_SoC_UPDATE_Bits (CODEC、MICBIAS_CTRL、
MICBIAS_LEVEL_MASK、
(aic3x->micbias _vg)<< MICBIAS_LEVEL_SHIFT);
break;
case AIC3X_MICBIAS_OFF:
//
*注意到要执行的操作。 目标不会在此处输入。 这只是为了避免
*编译时间警告"警告:枚举值
*'AIC3X_MICBIAS_OFF'未在开关中处理"
*
/中断;
}

aic3x_add_widget (codec);

返回0;
} 


3. aic3x_init ()
4. MIC_BIAS_EVENT ()
→通知了 SND_SOC_DAPM_PRE_PMD 事件并更新了 MICBIAS 控制寄存器的值(0x40→0x00)
※之后,不会出现“snd_SOC_DAPM_POST_PMU”事件通知,
在初始化过程中设置的 MICBIAS 控制寄存器值仍然被覆盖。

/*
*麦克风偏置电源开/关与共享相同的寄存器位
*麦克风偏置的输出电压。 当打开麦克风偏置电源时、我们
*需要将其回收到电压值。
* 0x0 =关闭电源
* 0x1 = MICBIAS 输出供电至2.0V、
* 0x2 = MICBIAS 输出供电至2.5V
* 0x3 = MICBIAS 输出连接到 AVDD
*
静态 int mim_bias 事件(struct snd_soc_dapm_widget *w、
    struct snd_kcontrol *kcontrol,int 事件)
    struct snd_soc_codec *codec = snd_soc_dapm_TO_codec (w->dapm);
    struct aic3x_priv* aic3x = snd_soc_codec_get_drvdata (codec);

    switch (event){
    案例 SND_SOC_DAPM_POST_PMU:
        /*将麦克风偏置电压更改为用户定义的*/
        SND_SoC_UPDATE_BITS (编解码器、MICBIAS_CTRL、
                MICBIAS_LEVEL_MASK、
                aic3x->micbias vg << MICBIAS_LEVEL_SHIFT);
        中断;

    案例 SND_SOC_DAPM_PRE_PMD:
        SND_SoC_UPDATE_BITS (编解码器、MICBIAS_CTRL、
                MICBIAS_LEVEL_MASK、0);
        中断;
    }
    返回0;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    根据我的理解、这看起来像是一个编码问题、遗憾的是我们没有进行任何代码调试。 如果您想共享一些示波器快照或其他寄存器配置、我们很乐意查看它们。  

    此致、

    Aaron