600D Audio Controls?

Started by testaevisual, June 17, 2012, 06:16:10 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

1%

Some good news.. mic select is working... also there is mic type. I think those will be easiest to implement.

Still no monitoring :(

ML21624 supports it... ML21621, its not mentioned in the crappy crappy datasheet.

bart


nanomad

The 1100D port will probably re-use your work. Great job!  ::)
EOS 1100D | EOS 650 (No, I didn't forget the D) | Ye Olde Canon EF Lenses ('87): 50 f/1.8 - 28 f/2.8 - 70-210 f/4 | EF-S 18-55 f/3.5-5.6 | Metz 36 AF-5

1%

I've set up some of the analog volumes and implemented the mic in/type controls.

Volumes get reset when you hit rec or play so its best to use them after recording is started or with the mic amp powered at stop. Figured out some of the bit setting. Still a bunch is missing.

1%

Audio remote shot works if you power up the mic from debug first. Going to work on getting that to happen automatically.

Threshold while in photo mode is for some reason much higher.

1%

The big stumbling block on audio monitoring is how to turn

static const struct snd_soc_dapm_widget ml26124_dapm_widgets[] = {
SND_SOC_DAPM_SUPPLY("MCLKEN", ML26124_CLK_EN, 0, 0, NULL, 0),
SND_SOC_DAPM_SUPPLY("PLLEN", ML26124_CLK_EN, 1, 0, NULL, 0),
SND_SOC_DAPM_SUPPLY("PLLOE", ML26124_CLK_EN, 2, 0, NULL, 0),
SND_SOC_DAPM_SUPPLY("MICBIAS", ML26124_PW_REF_PW_MNG, 2, 0, NULL, 0),
SND_SOC_DAPM_MIXER("Output Mixer", SND_SOC_NOPM, 0, 0,
   &ml26124_output_mixer_controls[0],
   ARRAY_SIZE(ml26124_output_mixer_controls)),
SND_SOC_DAPM_DAC("DAC", "Playback", ML26124_PW_DAC_PW_MNG, 1, 0),
SND_SOC_DAPM_ADC("ADC", "Capture", ML26124_PW_IN_PW_MNG, 1, 0),
SND_SOC_DAPM_PGA("PGA", ML26124_PW_IN_PW_MNG, 3, 0, NULL, 0),
SND_SOC_DAPM_MUX("Input Mux", SND_SOC_NOPM, 0, 0,
  &ml26124_input_mux_controls),
SND_SOC_DAPM_SWITCH("Line Out Enable", SND_SOC_NOPM, 0, 0,
     &ml26124_line_control),
SND_SOC_DAPM_INPUT("MDIN"),
SND_SOC_DAPM_INPUT("MIN"),
SND_SOC_DAPM_INPUT("LIN"),
SND_SOC_DAPM_OUTPUT("SPOUT"),
SND_SOC_DAPM_OUTPUT("LOUT"),
};

static const struct snd_soc_dapm_route ml26124_intercon[] = {
/* Supply */
{"DAC", NULL, "MCLKEN"},
{"ADC", NULL, "MCLKEN"},
{"DAC", NULL, "PLLEN"},
{"ADC", NULL, "PLLEN"},
{"DAC", NULL, "PLLOE"},
{"ADC", NULL, "PLLOE"},

/* output mixer */
{"Output Mixer", "DAC Switch", "DAC"},
{"Output Mixer", "Line in loopback Switch", "LIN"},

/* outputs */
{"LOUT", NULL, "Output Mixer"},
{"SPOUT", NULL, "Output Mixer"},
{"Line Out Enable", NULL, "LOUT"},

/* input */
{"ADC", NULL, "Input Mux"},
{"Input Mux", "Analog MIC SingleEnded in", "PGA"},
{"Input Mux", "Analog MIC Differential in", "PGA"},
{"PGA", NULL, "MIN"},
};


into register commands. There is no DAPM unless you're using ALSA on something that can run it. It won't be in the firmware.

The only hints form the alsa dev list were:


Let me discuss about intercon settings.

Anticipated routes are like below.
Analog MIC(single ended) -> PGA -> ADC -> SAI
Analog MIC(differential) -> PGA -> ADC -> SAI
Digital MIC -> SAI
SAI -> DAC -> SPOUT
SAI -> DAC -> LOUT
LINEIN -> SPOUT

1%

Powered on the dac and headphone amp... hear hissing and it mutes when you tap the microphone. Can also turn on both channels of IC and move the stereo mic from right to left and back.

miyake

@1%

Did you write document which is clear thing?
I just want to help you mapping(confirm) register value and Alsa driver's value.
But I don't know which one is clearly understanding.

I created a wikia account and let me know which part is confirmed in source code.
I wil write to our understanding to wikia.

miyake

I'm not perfect understanding.
But now I can use ptp on my win 7 x64.

Let me confirm what you need:
Collect a memory value for each modes(normal,recording, play, palying)


First testing .
QuoteDAC (digital->analog) (550D and 600D, bcoz handled by tx19a I think)
StopASIFDMADAC=
0xC05000B0 <- 0
0XC092020C <- 0
-

normal:
<conn> m 0xC05000B0 16
c05000b0  24 00 00 00 00 00 00 00  07 00 00 00 00 00 00 00  |$...............|

recording:
<conn> m 0xC05000B0 16
c05000b0  24 00 00 00 00 00 00 00  07 00 00 00 00 00 00 00  |$...............|

play mode but not play:
<conn> m 0xC05000B0 16
c05000b0  24 00 00 00 00 00 00 00  07 00 00 00 00 00 00 00  |$...............|

playing :
<conn> m 0xC05000B0 16
c05000b0  27 00 00 00 00 00 00 00  07 00 00 00 00 00 00 00  |'...............|


Are these correct understanding? Is it a helpful for you?

Good night

1%

That is a canon function... you want audio_ic_write or read for direct communication. When I looked at that function in firmware it basically does a bunch of IC writes and leaves things muted till you actually play a file. Also sets up buffers for playing/writing, etc.

I can already turn the dac on and hear stuff... I just can't send it through mixer, etc.

The registers in audio.h are pretty much right.. just their values are not all known and there are a few extra in canon firmware I'm going to have to find.

In the alsa file the registers are even, in camera they are odd but the same thing. We have same value in the even registers but for some reason it doesn't change.

audio_ic_write( ML_PW_SPAMP_PW_MNG | 0xff ); // power speaker amp FF, BF no difference: is amp power 1f is speaker bf is headphone or "AV"
audio_ic_write( ML_PW_LOUT_PW_MNG | 0xff ); // Line out PM to all ON ... I think this is line out amp: same deal?

audio_ic_write( ML_PW_DAC_PW_MNG | 0x02 ); // power up dac  : Dac comes on but I don't think audio is being amplified at all, very very quiet.


Problem is IC has modes play and rec so I think we have to skip canon and just control it directly.  I tried to make a hybrid register setting between rec and play but it didn't make a difference.

miyake

Just wrote :
http://magiclantern.wikia.com/wiki/600D/Audio#Alsa_driver_analyzing

for easy to understanding.
I will check your debug.c

And I found this on ml26124.h

        /* Record/Playback Running Control Register */
        if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
         snd_soc_update_bits(codec, ML26124_REC_PLYBAK_RUN, 0x2, 0x2);
        else
         snd_soc_update_bits(codec, ML26124_REC_PLYBAK_RUN, 0x1, 0x1);


It this a something help to understanding rec/play mode handling?

miyake

I'm really confusing... Sorry for can't help you.

In alsa driver  I fond

#define DVOL_CTL_DVMUTE_ON       BIT(4) /* Digital volume MUTE On */
#define DVOL_CTL_DVMUTE_OFF      0      /* Digital volume MUTE Off */

static int ml26124_mute(struct snd_soc_dai *dai, int mute)
{
        struct snd_soc_codec *codec = dai->codec;

        if (mute)
         snd_soc_update_bits(codec, ML26124_DVOL_CTL, BIT(4),
         DVOL_CTL_DVMUTE_ON);
        else
         snd_soc_update_bits(codec, ML26124_DVOL_CTL, BIT(4),
         DVOL_CTL_DVMUTE_OFF);
        return 0;
}


So I think , we only to set this bit to 1 when we need to mute like this.
audio_ic_write( ML_DVOL_CTL | 0x10000);

But your xmuteav() is a lot of audio_ic_write(). and in your xmuteav() had this:
audio_ic_write ( 0x6908 ); // Set Dvol Stuff to "Play"

This means
audio_ic_write( ML_DVOL_CTL | 0x1000);

I found matching item for this in alsa driver
SOC_SINGLE("Digital Volume Fade Switch", ML26124_DVOL_CTL, 3, 1, 0),

You descrived "Set Dvol Stuff to "Play"" but it means Fade Switch will switching to ON.

How did you know those register values in debug.c?

miyake

Quote from: 1% on July 24, 2012, 06:14:13 AM

In the alsa file the registers are even, in camera they are odd but the same thing. We have same value in the even registers but for some reason it doesn't change.

audio_ic_write( ML_PW_SPAMP_PW_MNG | 0xff ); // power speaker amp FF, BF no difference: is amp power 1f is speaker bf is headphone or "AV"
audio_ic_write( ML_PW_LOUT_PW_MNG | 0xff ); // Line out PM to all ON ... I think this is line out amp: same deal?

audio_ic_write( ML_PW_DAC_PW_MNG | 0x02 ); // power up dac  : Dac comes on but I don't think audio is being amplified at all, very very quiet.


These have no maximum value definition in alsa driver. So I guess it's READ ONLY register.

1%

Dvol control has lots of switches and yes a mute... I made a mute/unmute and it seemed to work but camera would stop recording when sound stopped flowing to the buffer.

I got most of the functions from http://magiclantern.wikia.com/wiki/600D/Audio they came from the firmware.

As far as I know audio IC write can only write one byte. So you cannot write 0x1000 because you're writing 00 to register 0x10 which is probably 0x11 or "software reset".

I was way more confused when I first started... and I don't know how right I have the bits.




DVol -0x69
11111111
   xSOC_SINGLE("Play Limiter", ML26124_DVOL_CTL, 0, 1, 0),
      x SOC_SINGLE("Capture Limiter", ML26124_DVOL_CTL, 1, 1, 0),
    x   SOC_SINGLE("Digital Volume Fade Switch", ML26124_DVOL_CTL, 3, 1, 0),
   x    SOC_SINGLE("Digital Switch", ML26124_DVOL_CTL, 4, 1, 0),
0001 0000 - Digital Switch (mute?)
0000 x000 - Digital Fade
0000 00x0 - Capture Limiter
0000 000x - Play Limiter

0011 1110 - 2c Rec - value of dvol in rec
0000 1000 -08 Play 
0010 1110 2e          - that ASIFMDAC function sets this too
0011 1110 then 3e  - then sets this
0011 1110 Mute AV 



So if you look at that, the switches are all there but I don't know if my bits are moved over by 1 or in the right location.
Of course no SOC single function in the camera so can only switch bits manually. I found some values by looking at what value the camera was writing and then converting to bits. Combined with the alsa driver you can then figure out what gets switched on and it mostly corresponds.

So with this information I make up my own value and see what it does. 0x13 is rec/play. In rec it is 11 and in play it is 12.... so I change that to registers and try to turn on both so I write 13 to experiment so (0x1313)

and etc, etc,

>>>>

Cannot be read only... camera sets it... no max value because its a power control register.

miyake

Oh sorry, 0x10000 is binary. not HEX....

coutts

I may be able to help with this, i worked with the 500d audio chip a lot last year. Is there a factory documentation for the audio chip? This is what I used when working on the 500d as it tells you exactly what registers to modify for certain features.

Here's some tips:

static inline void
audio_ic_set_mgain(
                                   unsigned             mgain
                                   )
{
        unsigned sig1 = audio_ic_read( AUDIO_IC_SIG1 ); // Read the value of register 'Signal Select 1', store it in sig1.
                                                                                                        // We will use this later when we set individual bits on/off for
                                                                                                        // different gain values.
    unsigned sig2 = audio_ic_read( AUDIO_IC_SIG2 ); // Read the value of register 'Signal Select 2', store it in sig2.
   
       
    // Setting the bits for each possible gain setting in the 500d, individually so it's easy to understand.
        //              - 24 hours ago I didn't even understand how to configure the audio chip, so I think this is pretty good
        //                for my first implemenation :)
        //
        // Basically, different gain settings use different combinations of the MGAIN0, MGAIN1, MGAIN2, and MGAIN3 bits being set/cleared.
        // Here's a reference table for the settings, taken from the pdf linked from line 201 above:
        //
        //---------------------------------------------------------
        // MGAIN3  |  MGAIN2  |  MGAIN1  |  MGAIN0 ||  Gain Value
        //---------------------------------------------------------
        //    0    |     0    |    0     |    0    ||     0 dB
        //    0    |     0    |    0     |    1    ||   +20 dB (default setting)
        //    0    |     0    |    1     |    0    ||   +26 dB
        //    0    |     0    |    1     |    1    ||   +32 dB
        //    0    |     1    |    0     |    0    ||   +10 dB
        //    0    |     1    |    0     |    1    ||   +17 dB
        //    0    |     1    |    1     |    0    ||   +23 dB
        //    0    |     1    |    1     |    1    ||   +29 dB
        //    1    |     0    |    0     |    0    ||    +3 dB
        //    1    |     0    |    0     |    1    ||    +6 dB
        //---------------------------------------------------------
        //
        // So my switch statement below looks at the value of the mgain variable (which is changed by the gain setting in the ML menu),
        // and sets the correct combination of bits accordingly.
        //
        // &= ~(1 << x) means clear bit x
        // |= 1 << x means set bit x
        //
        // That should be enough to bring anybody up to speed on things.
        // -Coutts
    switch (mgain)
    {
        case 0: // 0 dB
            sig1 &= ~(1 << 0); //clear bit1 [MGAIN0] in register 'Signal Select 1'
            sig1 &= ~(1 << 1); //clear bit2 [MGAIN2]    "
            sig1 &= ~(1 << 3); //clear bit3 [MGAIN3]    "
            sig2 &= ~(1 << 5); //clear bit4 [MGAIN1] in register 'Signal Select 2'
            break;
           
        case 1: // 3 dB
            sig1 &= ~(1 << 0); //clear MGAIN0
            sig1 &= ~(1 << 1); //clear MGAIN2
            sig1 |= 1 << 3;        //set MGAIN3
            sig2 &= ~(1 << 5); //clear MGAIN1
            break;


more here:
https://bitbucket.org/hudson/magic-lantern/src/77f7db1f8a6e/platform/500D.111/audio.c.500d_under_construction.c

1%

Different chip... no MGAIN or any of that: completely 100% at odds with old audio.c

No documentation except for 7k0r programming guide and alsa driver for the next IC model up. When I tried to get info out of the company they cried about NDA with vendors because audio ICs are TOP SECRET.

Who made the IC in the 500D?


coutts

For 500d:
http://www.asahi-kasei.co.jp/akm/en/product/ak4636/ak4636_f01e.pdf

I didn't so much mean to follow the MGAIN stuff, moreso look at how I set individual bits for the MGAIN registers. Thinking of things in binary may make it easier to understand.

miyake

I just looking lapis-semiconductor web site in Japanese lang.
And checking technical question form.
But it for customer?only,, because it need a "describe product name" and "plan for volume production"....
I guess they are not give us the document. maybe,

miyake

Quote from: 1% on July 24, 2012, 04:06:04 PM
Cannot be read only... camera sets it... no max value because its a power control register.


I see, Read only is just my guess. forget this.

a1ex

ML26121.pdf :)

credits goto Coutts

@miyake-san: can you convert this to a format that we can read? (jpeg pages, for example) None of my PDF readers (including Adobe reader) open this correctly.

miyake

I found 2 PDFs.
1st one is korean, and only 4 pages.

2nd one is 78K0R/Kx3

Already 1% had a English document?

If you don't have , I'll try to transrate this document to wikia with my poor English.

1%

Yea, I already got the english 7k0r guide, the other one looks the same but its a little bigger. The datasheet is more of a product announcement.

If you find more than in the english version, let me know but from a cursory look its the same.

English version is U19514EJ1V0AN00.pdf ... just type it into google.

miyake

normal(not recording,standby)
ML_SMPLING_RATE 08
ML_PLLNL 96
ML_PLLNH 00
ML_PLLML 00
ML_PLLMH 03
ML_PLLDIV 05
ML_CLK_EN 0f
ML_CLK_CTL 04
ML_SW_RST 00
ML_REC_PLYBAK_RUN 11
ML_MIC_TIM 12
ML_PW_REF_PW_MNG 06
ML_PW_IN_PW_MNG 0a
ML_PW_DAC_PW_MNG 00
ML_PW_SPAMP_PW_MNG 00
ML_PW_LOUT_PW_MNG 00
ML_PW_ZCCMP_PW_MNG 02
ML_PW_MICBIAS_VOL 02
ML_PW_MIC_IN_VOL 3f
ML_PW_MIC_BOST_VOL 10
ML_PW_SPK_AMP_VOL 1b
ML_PW_AMP_VOL_FUNC 01
ML_PW_AMP_VOL_FADE 00
ML_SPK_AMP_OUT 00
ML_MIC_IF_CTL 00
ML_MIC_SELECT 01
ML_SAI_TRANS_CTL 0b
ML_SAI_RCV_CTL 0b
ML_SAI_MODE_SEL 00
ML_FILTER_EN 0f
ML_DVOL_CTL 2e
ML_MIXER_VOL_CTL 10
ML_RECORD_DIG_VOL ff
ML_PLBAK_DIG_VOL ff
ML_DIGI_BOOST_VOL 00
ML_EQ_GAIN_BRAND0 dd
ML_EQ_GAIN_BRAND1 dd
ML_EQ_GAIN_BRAND2 e7
ML_EQ_GAIN_BRAND3 e7
ML_EQ_GAIN_BRAND4 e7
ML_HPF2_CUTOFF 04
ML_EQBRAND0_F0L 0d
ML_EQBRAND0_F0H db
ML_EQBRAND0_F1L 0c
ML_EQBRAND0_F1H 1b
ML_EQBRAND1_F0L 6d
ML_EQBRAND1_F0H 08
ML_EQBRAND1_F1L 41
ML_EQBRAND1_F1H ed
ML_EQBRAND2_F0L 00
ML_EQBRAND2_F0H 00
ML_EQBRAND2_F1L 00
ML_EQBRAND2_F1H 00
ML_EQBRAND3_F0L 00
ML_EQBRAND3_F0H 00
ML_EQBRAND3_F1L 00
ML_EQBRAND3_F1H 00
ML_EQBRAND4_F0L 00
ML_EQBRAND4_F0H 00
ML_EQBRAND4_F1L 00
ML_EQBRAND4_F1H 00
ML_ALC_MODE 01
ML_ALC_ATTACK_TIM 08
ML_ALC_DECAY_TIM 08
ML_ALC_HOLD_TIM 00
ML_ALC_TARGET_LEV 0b
ML_ALC_MAXMIN_GAIN 70
ML_NOIS_GATE_THRSH 00
ML_ALC_ZERO_TIMOUT 01
ML_PL_ATTACKTIME 04
ML_PL_DECAYTIME 05
ML_PL_TARGETTIME 0d
ML_PL_MAXMIN_GAIN 70
ML_PLYBAK_BOST_VOL 10
ML_PL_0CROSS_TIMOUT 00
ML_NODOC_E5 06
ML_INPUT_ADC 08
ML_INPUT_ANALOG_SINGLE 08
ML_INPUT_ANALOG_DIFF 08
ML_INPUT_PGA 08
ML_SUP_DAC_MCLKEN 08
ML_SUP_ADC_MCLKEN 08
ML_SUP_DAC_PLLEN 08
ML_SUP_ADC_PLLEN 08
ML_SUP_DAC_PLLOE 08
ML_SUP_ADC_PLLOE 96
ML_OUTMIX_DACSW 00
ML_OUTMIX_LOOPSW 03
ML_OUTPUT_LOUT 00
ML_OUTPUT_SPOUT 06
ML_OUTPUT_LOUTON 00
AUDIO_IC_SIG1 0a
AUDIO_IC_SIG2 0a
AUDIO_IC_IVL 00
AUDIO_IC_IVR 00
AUDIO_IC_PM1 06
AUDIO_IC_PM3 02
AUDIO_IC_MODE3 02
AUDIO_IC_MODE4 02
AUDIO_IC_FIL1 02
AUDIO_IC_ALCVOL 00
AUDIO_IC_ALC1 00


AGC off , windocut off
diff of normal and recording
]
--- AUDIOREG-normal.TXT 2012-07-26 10:01:34.000000000 +0900
+++ AUDIOREG-recording.TXT      2012-07-26 10:02:48.000000000 +0900
@@ -16,7 +16,7 @@
ML_PW_LOUT_PW_MNG 00
ML_PW_ZCCMP_PW_MNG 02
ML_PW_MICBIAS_VOL 02
-ML_PW_MIC_IN_VOL 3f
+ML_PW_MIC_IN_VOL 37
ML_PW_MIC_BOST_VOL 10
ML_PW_SPK_AMP_VOL 1b
ML_PW_AMP_VOL_FUNC 01
@@ -28,7 +28,7 @@
ML_SAI_RCV_CTL 0b
ML_SAI_MODE_SEL 00
ML_FILTER_EN 0f
-ML_DVOL_CTL 2e
+ML_DVOL_CTL 2c
ML_MIXER_VOL_CTL 10
ML_RECORD_DIG_VOL ff
ML_PLBAK_DIG_VOL ff


AGCoff and AGCon
--- AUDIOREG-normal.TXT 2012-07-26 10:01:34.000000000 +0900
+++ AUDIOREG-AGCon.TXT  2012-07-26 10:05:46.000000000 +0900
@@ -7,19 +7,19 @@
ML_CLK_EN 0f
ML_CLK_CTL 04
ML_SW_RST 00
-ML_REC_PLYBAK_RUN 11
+ML_REC_PLYBAK_RUN 00
ML_MIC_TIM 12
ML_PW_REF_PW_MNG 06
-ML_PW_IN_PW_MNG 0a
+ML_PW_IN_PW_MNG 00
ML_PW_DAC_PW_MNG 00
ML_PW_SPAMP_PW_MNG 00
ML_PW_LOUT_PW_MNG 00
ML_PW_ZCCMP_PW_MNG 02
ML_PW_MICBIAS_VOL 02
-ML_PW_MIC_IN_VOL 3f
-ML_PW_MIC_BOST_VOL 10
+ML_PW_MIC_IN_VOL 10
+ML_PW_MIC_BOST_VOL 00
ML_PW_SPK_AMP_VOL 1b
-ML_PW_AMP_VOL_FUNC 01
+ML_PW_AMP_VOL_FUNC 03
ML_PW_AMP_VOL_FADE 00
ML_SPK_AMP_OUT 00
ML_MIC_IF_CTL 00
@@ -27,9 +27,9 @@
ML_SAI_TRANS_CTL 0b
ML_SAI_RCV_CTL 0b
ML_SAI_MODE_SEL 00
-ML_FILTER_EN 0f
+ML_FILTER_EN 00
ML_DVOL_CTL 2e
-ML_MIXER_VOL_CTL 10
+ML_MIXER_VOL_CTL 00
ML_RECORD_DIG_VOL ff
ML_PLBAK_DIG_VOL ff
ML_DIGI_BOOST_VOL 00



volume 70% vs 100%

--- AUDIOREG-normal.TXT 2012-07-26 10:01:34.000000000 +0900
+++ AUDIOREG-volmax.TXT 2012-07-26 10:19:16.000000000 +0900
@@ -7,19 +7,19 @@
ML_CLK_EN 0f
ML_CLK_CTL 04
ML_SW_RST 00
-ML_REC_PLYBAK_RUN 11
+ML_REC_PLYBAK_RUN 00
ML_MIC_TIM 12
ML_PW_REF_PW_MNG 06
-ML_PW_IN_PW_MNG 0a
+ML_PW_IN_PW_MNG 00
ML_PW_DAC_PW_MNG 00
ML_PW_SPAMP_PW_MNG 00
ML_PW_LOUT_PW_MNG 00
ML_PW_ZCCMP_PW_MNG 02
ML_PW_MICBIAS_VOL 02
-ML_PW_MIC_IN_VOL 3f
-ML_PW_MIC_BOST_VOL 10
+ML_PW_MIC_IN_VOL 10
+ML_PW_MIC_BOST_VOL 00
ML_PW_SPK_AMP_VOL 1b
-ML_PW_AMP_VOL_FUNC 01
+ML_PW_AMP_VOL_FUNC 03
ML_PW_AMP_VOL_FADE 00
ML_SPK_AMP_OUT 00
ML_MIC_IF_CTL 00
@@ -27,9 +27,9 @@
ML_SAI_TRANS_CTL 0b
ML_SAI_RCV_CTL 0b
ML_SAI_MODE_SEL 00
-ML_FILTER_EN 0f
-ML_DVOL_CTL 2e
-ML_MIXER_VOL_CTL 10
+ML_FILTER_EN 00
+ML_DVOL_CTL 2c
+ML_MIXER_VOL_CTL 00
ML_RECORD_DIG_VOL ff
ML_PLBAK_DIG_VOL ff
ML_DIGI_BOOST_VOL 00

1%

First log:

2nd log: Recording turn on Capture Limiter and changes mic input volume.

Others... you're losing settings when rec/play/run goes to 00.

In one log
-ML_FILTER_EN 0f
+ML_FILTER_EN 00

Turns off filters.



AUDIO_IC_SIG1 0a
AUDIO_IC_SIG2 0a
AUDIO_IC_IVL 00
AUDIO_IC_IVR 00
AUDIO_IC_PM1 06
AUDIO_IC_PM3 02
AUDIO_IC_MODE3 02
AUDIO_IC_MODE4 02
AUDIO_IC_FIL1 02
AUDIO_IC_ALCVOL 00
AUDIO_IC_ALC1 00


All copies of the real registers in random unrelated spots, does not apply.


One thing strikes me though. Do volumes actually go down from FF to 10 or something like that... ff being lowest. And
L_MIXER_VOL_CTL is it 10 or 00 when recording. Which one is mute? I may have things backwards with this.