Rockchip Android13 AudioCodecs ES8316 Debugging-Erlebnis

Das Debuggen von Audio ist in Software-Debugging und Treiber-Debugging unterteilt.

Bei der Überprüfung der Ausgabe des Andorid13-Audio-Headsets mithilfe der APK zum Abspielen von Audio wurde festgestellt, dass nur das rechte Headset über eine Ausgabe verfügt und das linke Headset keinen Ton hat. Laut Debugging-Erfahrung handelt es sich im Allgemeinen um ein Treiberproblem.

  1. Probieren Sie zuerst tinyplay aus, um Kopfhörer abzuspielen. Um tinyplay zu verwenden, müssen Sie tinymix zuerst auf den Kopfhörerkanal umschalten:

rk3588_t:/ # tinymix
Mixer name: 'rockchip-es8316'
Number of controls: 42
ctl     type    num     name                                     value

0       ENUM    1       I2STDM Digital Loopback Mode             Disabled
1       INT     2       Headphone Playback Volume                3 3
2       INT     2       Headphone Mixer Volume                   0 0
3       ENUM    1       Playback Polarity                        Normal
4       INT     2       DAC Playback Volume                      192 192
5       BOOL    1       DAC Soft Ramp Switch                     Off
6       INT     1       DAC Soft Ramp Rate                       4
7       BOOL    1       DAC Notch Filter Switch                  Off
8       BOOL    1       DAC Double Fs Switch                     Off
9       INT     1       DAC Stereo Enhancement                   0
10      BOOL    1       DAC Mono Mix Switch                      Off
11      ENUM    1       Capture Polarity                         Normal
12      BOOL    1       Mic Boost Switch                         On
13      INT     1       ADC Capture Volume                       0
14      INT     1       ADC PGA Gain Volume                      0
15      BOOL    1       ADC Soft Ramp Switch                     On
16      BOOL    1       ADC Double Fs Switch                     Off
17      BOOL    1       ALC Capture Switch                       On
18      INT     1       ALC Capture Max Volume                   13
19      INT     1       ALC Capture Min Volume                   8
20      INT     1       ALC Capture Target Volume                10
21      INT     1       ALC Capture Hold Time                    0
22      INT     1       ALC Capture Decay Time                   3
23      INT     1       ALC Capture Attack Time                  2
24      BOOL    1       ALC Capture Noise Gate Switch            Off
25      INT     1       ALC Capture Noise Gate Threshold         0
26      ENUM    1       ALC Capture Noise Gate Type              Constant PGA Gain
27      BOOL    1       Headphone Jack                           On
28      BOOL    1       Headset Mic Jack                         Off
29      BOOL    1       Headphone Switch                         On
30      BOOL    1       Speaker Switch                           On
31      BOOL    1       Main Mic Switch                          On
32      BOOL    1       Headset Mic Switch                       Off
33      ENUM    1       Differential Mux                         lin1-rin1
34      ENUM    1       Digital Mic Mux                          dmic disable
35      ENUM    1       DAC Source Mux                           LDATA TO LDAC, RDATA TO RDAC
36      ENUM    1       Left Headphone Mux                       lin1-rin1
37      ENUM    1       Right Headphone Mux                      lin1-rin1
38      BOOL    1       Left Headphone Mixer LLIN Switch         Off
39      BOOL    1       Left Headphone Mixer Left DAC Switch     Off
40      BOOL    1       Right Headphone Mixer RLIN Switch        Off
41      BOOL    1       Right Headphone Mixer Right DAC Switch   Off

Suchen Sie die Codec-Konfiguration des Audio-Hal-Layer-Codes, hardware/rockchip/audio/tinyalsa_hal/codec_config. Wechseln Sie die Beschreibung des Kopfhörerausgangs in es8316_config.h:

const struct config_control es8316_headphone_normal_controls[] = {
    {
        .ctl_name = "DAC Playback Volume",
        .int_val = {192, 192},
    },
    {
        .ctl_name = "Left Headphone Mixer Left DAC Switch",
        .int_val = {on},
    },
    {
        .ctl_name = "Right Headphone Mixer Right DAC Switch",
    .int_val = {on},
    },
};

Anschließend schalten Sie mit tinymix entsprechend der obigen Konfiguration auf den Kopfhörerkanal um:

tinymix 4 192 192
tinymix 39 1
tinymix 41 1

Spielen Sie dann mit tinyplay die es8316-Soundkarte ab und testen Sie den Kopfhörerausgang:

tinyplay data/48000_2channel.wav -D 0 -d 0 -n 3 -p 480

Zu diesem Zeitpunkt, als ich die Kopfhörer hörte, hatte nur der rechte Kopfhörer eine Ausgabe, nachdem ich bestätigt hatte, dass es kein Problem mit den Kopfhörern gab. Bestätigen Sie beim Vergleich von Android 12, dass der Codec normal ist, und vergleichen Sie die Codec-Register während der Wiedergabe der beiden Versionen.

/d/regmap/7-0010 # cat registers // es8316挂在到i2c7总线上

Die Vergleichsregister unterscheiden sich wie folgt:

Vergleichen Sie die Differenzregisterwerte und ändern Sie den Codec-Code in das Konfigurationsregister.

diff --git a/sound/soc/codecs/es8316.c b/sound/soc/codecs/es8316.c
old mode 100644
new mode 100755
index 609459077f9d..2aa290a2e46d
--- a/sound/soc/codecs/es8316.c
+++ b/sound/soc/codecs/es8316.c
@@ -744,6 +744,15 @@ static int es8316_probe(struct snd_soc_component *component)
      */
     snd_soc_component_write(component, ES8316_CLKMGR_ADCOSR, 0x32);
 
+    snd_soc_component_write(component, ES8316_CAL_HPLIV, 0x87);
+    snd_soc_component_write(component, ES8316_CAL_HPRIV, 0x8c);
+    snd_soc_component_write(component, ES8316_CAL_HPLMV, 0x00);
+    snd_soc_component_write(component, ES8316_CAL_HPRMV, 0xff);
+    //snd_soc_component_write(component, ES8316_SYS_PDN, 0x07);
+    snd_soc_component_write(component, ES8316_ADC_ALC1, 0xcd);
+    snd_soc_component_write(component, ES8316_ADC_ALC2, 0x08);
+    snd_soc_component_write(component, ES8316_ADC_ALC3, 0xa0);
+    es8316_enable_micbias_for_mic_gnd_short_detect(component);
     return 0;
 }
 

Nach der Änderung sind die Registerkonfigurationen während der Wiedergabe der beiden Codec-Versionen konsistent. Ich habe festgestellt, dass es in Android 13 immer noch ein Problem mit dem Kopfhörerausgang gibt. Ich vermute, dass es sich um ein Problem mit der Platine handelt. Ersetzen Sie es einfach durch eine andere Platine, dann ist alles in Ordnung.

Wenn es sich um eine Linux-Version handelt, verwenden Sie das Alsa-Utils-Tool amixer, um die Route zu wechseln:

root@linaro-alip:/# amixer -c 0 contents
numid=28,iface=CARD,name='Headphone Jack'
  ; type=BOOLEAN,access=r-------,values=1
  : values=on
numid=29,iface=CARD,name='Headset Mic Jack'
  ; type=BOOLEAN,access=r-------,values=1
  : values=off
numid=3,iface=MIXER,name='Headphone Mixer Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=11,step=0
  : values=0,0
  | dBrange-
    rangemin=0,,rangemax=4
      | dBscale-min=-12.00dB,step=1.50dB,mute=0
    rangemin=8,,rangemax=11
      | dBscale-min=-4.50dB,step=1.50dB,mute=0

numid=30,iface=MIXER,name='Headphone Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=2,iface=MIXER,name='Headphone Playback Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=3,step=0
  : values=3,3
  | dBrange-
    rangemin=0,,rangemax=0
      | dBscale-min=-48.00dB,step=0.00dB,mute=0
    rangemin=1,,rangemax=3
      | dBscale-min=-24.00dB,step=12.00dB,mute=0

numid=13,iface=MIXER,name='Mic Boost Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=17,iface=MIXER,name='ADC Double Fs Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=15,iface=MIXER,name='ADC PGA Gain Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=10,step=0
  : values=0
  | dBrange-
    rangemin=0,,rangemax=0
      | dBscale-min=-3.50dB,step=0.00dB,mute=0
    rangemin=1,,rangemax=1
      | dBscale-min=0.00dB,step=0.00dB,mute=0
    rangemin=2,,rangemax=2
      | dBscale-min=2.50dB,step=0.00dB,mute=0
    rangemin=3,,rangemax=3
      | dBscale-min=4.50dB,step=0.00dB,mute=0
    rangemin=4,,rangemax=7
      | dBscale-min=7.00dB,step=3.00dB,mute=0
    rangemin=8,,rangemax=10
      | dBscale-min=18.00dB,step=3.00dB,mute=0

numid=16,iface=MIXER,name='ADC Soft Ramp Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=14,iface=MIXER,name='ADC Capture Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=192,step=0
  : values=0
  | dBscale-min=-96.00dB,step=0.50dB,mute=1
numid=12,iface=MIXER,name='Capture Polarity'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Normal'
  ; Item #1 'Invert'
  : values=0
numid=4,iface=MIXER,name='Playback Polarity'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'Normal'
  ; Item #1 'R Invert'
  ; Item #2 'L Invert'
  ; Item #3 'L + R Invert'
  : values=0
numid=1,iface=MIXER,name='I2STDM Digital Loopback Mode'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'Disabled'
  ; Item #1 'Mode1'
  ; Item #2 'Mode2'
  ; Item #3 'Mode2 Swap'
  : values=0
numid=24,iface=MIXER,name='ALC Capture Attack Time'
  ; type=INTEGER,access=rw------,values=1,min=0,max=10,step=0
  : values=2
numid=23,iface=MIXER,name='ALC Capture Decay Time'
  ; type=INTEGER,access=rw------,values=1,min=0,max=10,step=0
  : values=3
numid=22,iface=MIXER,name='ALC Capture Hold Time'
  ; type=INTEGER,access=rw------,values=1,min=0,max=10,step=0
  : values=0
numid=19,iface=MIXER,name='ALC Capture Max Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=28,step=0
  : values=13
  | dBscale-min=-6.50dB,step=1.50dB,mute=0
numid=20,iface=MIXER,name='ALC Capture Min Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=28,step=0
  : values=8
  | dBscale-min=-12.00dB,step=1.50dB,mute=0
numid=25,iface=MIXER,name='ALC Capture Noise Gate Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=26,iface=MIXER,name='ALC Capture Noise Gate Threshold'
  ; type=INTEGER,access=rw------,values=1,min=0,max=31,step=0
  : values=0
numid=27,iface=MIXER,name='ALC Capture Noise Gate Type'
  ; type=ENUMERATED,access=rw------,values=1,items=2
  ; Item #0 'Constant PGA Gain'
  ; Item #1 'Mute ADC Output'
  : values=0
numid=18,iface=MIXER,name='ALC Capture Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=21,iface=MIXER,name='ALC Capture Target Volume'
  ; type=INTEGER,access=rw---R--,values=1,min=0,max=10,step=0
  : values=10
  | dBscale-min=-16.50dB,step=1.50dB,mute=0
numid=9,iface=MIXER,name='DAC Double Fs Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=11,iface=MIXER,name='DAC Mono Mix Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=8,iface=MIXER,name='DAC Notch Filter Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=5,iface=MIXER,name='DAC Playback Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=192,step=0
  : values=152,152
  | dBscale-min=-96.00dB,step=0.50dB,mute=1
numid=7,iface=MIXER,name='DAC Soft Ramp Rate'
  ; type=INTEGER,access=rw------,values=1,min=0,max=4,step=0
  : values=4
numid=6,iface=MIXER,name='DAC Soft Ramp Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=36,iface=MIXER,name='DAC Source Mux'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'LDATA TO LDAC, RDATA TO RDAC'
  ; Item #1 'LDATA TO LDAC, LDATA TO RDAC'
  ; Item #2 'RDATA TO LDAC, RDATA TO RDAC'
  ; Item #3 'RDATA TO LDAC, LDATA TO RDAC'
  : values=0
numid=10,iface=MIXER,name='DAC Stereo Enhancement'
  ; type=INTEGER,access=rw------,values=1,min=0,max=7,step=0
  : values=0
numid=34,iface=MIXER,name='Differential Mux'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'lin1-rin1'
  ; Item #1 'lin2-rin2'
  ; Item #2 'lin1-rin1 with 20db Boost'
  ; Item #3 'lin2-rin2 with 20db Boost'
  : values=0
numid=35,iface=MIXER,name='Digital Mic Mux'
  ; type=ENUMERATED,access=rw------,values=1,items=3
  ; Item #0 'dmic disable'
  ; Item #1 'dmic data at high level'
  ; Item #2 'dmic data at low level'
  : values=0
numid=33,iface=MIXER,name='Headset Mic Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=39,iface=MIXER,name='Left Headphone Mixer LLIN Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=40,iface=MIXER,name='Left Headphone Mixer Left DAC Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=37,iface=MIXER,name='Left Headphone Mux'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'lin1-rin1'
  ; Item #1 'lin2-rin2'
  ; Item #2 'lin-rin with Boost'
  ; Item #3 'lin-rin with Boost and PGA'
  : values=0
numid=32,iface=MIXER,name='Main Mic Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=on
numid=41,iface=MIXER,name='Right Headphone Mixer RLIN Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=42,iface=MIXER,name='Right Headphone Mixer Right DAC Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
numid=38,iface=MIXER,name='Right Headphone Mux'
  ; type=ENUMERATED,access=rw------,values=1,items=4
  ; Item #0 'lin1-rin1'
  ; Item #1 'lin2-rin2'
  ; Item #2 'lin-rin with Boost'
  ; Item #3 'lin-rin with Boost and PGA'
  : values=0
numid=31,iface=MIXER,name='Speaker Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off

Im Vergleich zum obigen Tinymix sind die wichtigsten Änderungen an ctl wie folgt:

numid=5,iface=MIXER,name='DAC Playback Volume'
  ; type=INTEGER,access=rw---R--,values=2,min=0,max=192,step=0
  : values=152,152
  | dBscale-min=-96.00dB,step=0.50dB,mute=1
.....
numid=40,iface=MIXER,name='Left Headphone Mixer Left DAC Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off
......
numid=42,iface=MIXER,name='Right Headphone Mixer Right DAC Switch'
  ; type=BOOLEAN,access=rw------,values=1
  : values=off

Amixer wird wie folgt geändert:

amixer -c 0 contents
amixer -c 0 cset numid=5 192 192
amixer -c 0 cset numid=40 1
amixer -c 0 cset numid=42 1
amixer -c 0 cset numid=2 3
amixer -c 0 cset numid=31 1

3588 Linux-Codec-Registerbefehl:

cat /sys/kernel/debug/regmap/7-0010/registers

Nachdem die Register konsistent sind, ist immer noch kein Ton zu hören. Im Vergleich zu Linux siehe dts: rk3588-evb3-lp5.dtsi:

&i2c7 {
    status = "okay";
    es8316: es8316@10 {
        status = "okay";
        #sound-dai-cells = <0>;
        compatible = "everest,es8316";
        reg = <0x10>;
        clocks = <&mclkout_i2s0>; //linux版本
        clock-names = "mclk";
        assigned-clocks = <&mclkout_i2s0>;
        assigned-clock-rates = <12288000>;
        pinctrl-names = "default";
        pinctrl-0 = <&i2s0_mclk>;
    };
};

Und die Android-Version:

es8316: es8316@10 {
        status = "okay";
        #sound-dai-cells = <0>;
        compatible = "everest,es8316";
        reg = <0x10>;
        clocks = <&cru I2S0_8CH_MCLKOUT>; // android版本
        clock-names = "mclk";
        assigned-clocks = <&cru I2S0_8CH_MCLKOUT>;
        assigned-clock-rates = <12288000>;
        pinctrl-names = "default";
        pinctrl-0 = <&i2s0_mclk>;
 };

Nach der Änderung hat aplay jetzt Ton.

aplay -D hw:0,0 sdcard/48000_2channel.wav

Supongo que te gusta

Origin blog.csdn.net/zhoudidong/article/details/129458899
Recomendado
Clasificación