功能:rt5651遇到无法录音的问题,分析及解决。

1.cat /proc/asound/cards 可以产看是否有注册上声卡。

2.tinycap 直接录音看是否有声音,如果没有声音就是驱动问题。

3.录音的时候命令tinymix查看通路

4.最终的分析是没有micbias1电压

5.查看寄存器,设置寄存器cat /sys/kernel/debug/regmap/

diff --git a/sound/soc/codecs/rt5651.c b/sound/soc/codecs/rt5651.c
index 89f332a..1d560c8 100644
--- a/sound/soc/codecs/rt5651.c
+++ b/sound/soc/codecs/rt5651.c
@@ -833,7 +833,6 @@ static int rt5651_bst1_event(struct snd_soc_dapm_widget *w,
        struct snd_kcontrol *kcontrol, int event)
 {
        struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
-
        switch (event) {
        case SND_SOC_DAPM_POST_PMU:
                snd_soc_component_update_bits(component, RT5651_PWR_ANLG2,
@@ -856,7 +855,6 @@ static int rt5651_bst2_event(struct snd_soc_dapm_widget *w,
        struct snd_kcontrol *kcontrol, int event)
 {
        struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
-
        switch (event) {
        case SND_SOC_DAPM_POST_PMU:
                snd_soc_component_update_bits(component, RT5651_PWR_ANLG2,
@@ -879,7 +877,6 @@ static int rt5651_bst3_event(struct snd_soc_dapm_widget *w,
        struct snd_kcontrol *kcontrol, int event)
 {
        struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
-
        switch (event) {
        case SND_SOC_DAPM_POST_PMU:
                snd_soc_component_update_bits(component, RT5651_PWR_ANLG2,
@@ -911,6 +908,8 @@ static const struct snd_soc_dapm_widget rt5651_dapm_widgets[] = {
        SND_SOC_DAPM_SUPPLY_S("ADC ASRC", 1, RT5651_PLL_MODE_2,
                              11, 0, NULL, 0),
 
+       SND_SOC_DAPM_SUPPLY("PLL1", RT5651_PWR_ANLG2,
+                       RT5651_PWR_PLL_BIT, 0, NULL, 0),
        /* micbias */
        SND_SOC_DAPM_SUPPLY("LDO", RT5651_PWR_ANLG1,
                        RT5651_PWR_LDO_BIT, 0, NULL, 0),
@@ -1135,6 +1134,10 @@ static const struct snd_soc_dapm_route rt5651_dapm_routes[] = {
        {"IN2P", NULL, "LDO"},
        {"IN3P", NULL, "LDO"},
 
+       {"BST1", NULL, "micbias1"},
+       {"BST2", NULL, "micbias1"},
+       {"BST3", NULL, "micbias1"},
+
        {"IN1P", NULL, "MIC1"},
        {"IN2P", NULL, "MIC2"},
        {"IN2N", NULL, "MIC2"},
@@ -1560,7 +1563,6 @@ static int rt5651_set_bias_level(struct snd_soc_component *component,
                        enum snd_soc_bias_level level)
 {
        struct rt5651_priv *rt5651 = snd_soc_component_get_drvdata(component);
-
        switch (level) {
        case SND_SOC_BIAS_PREPARE:
                if (SND_SOC_BIAS_STANDBY == snd_soc_component_get_bias_level(component)) {
@@ -1582,6 +1584,10 @@ static int rt5651_set_bias_level(struct snd_soc_component *component,
                        snd_soc_component_update_bits(component, RT5651_PWR_ANLG1,
                                RT5651_PWR_FV1 | RT5651_PWR_FV2,
                                RT5651_PWR_FV1 | RT5651_PWR_FV2);
+                          snd_soc_component_update_bits(component, RT5651_PWR_ANLG1,
+                                RT5651_PWR_LDO_DVO_MASK,
+                                RT5651_PWR_LDO_DVO_1_2V);
+
                        snd_soc_component_update_bits(component, RT5651_D_MISC, 0x1, 0x1);
                } else if (SND_SOC_BIAS_PREPARE == snd_soc_component_get_bias_level(component)) {
                        if (!IS_ERR(rt5651->mclk))
@@ -1604,6 +1610,7 @@ static int rt5651_set_bias_level(struct snd_soc_component *component,
                break;
 
        default:
+
                break;
        }

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐