On Thursday 14 May 2009 12:05:50 ext Jarkko Nikula wrote:
Did you implement this fake or actually real PGA between "HeadsetL Mixer" and "HSOL"?
I seems that there is an error in audio path that output pin control is tied to mixer and there is no widget in audio path defining the output amplifier. See
SND_SOC_DAPM_MIXER_E("HeadsetL Mixer", SND_SOC_NOPM, 0, 0, &twl4030_dapm_hsol_controls[0], ARRAY_SIZE(twl4030_dapm_hsol_controls), headsetl_event, SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD), ... {"HSOL", NULL, "HeadsetL Mixer"}, {"HSOR", NULL, "HeadsetR Mixer"},
I have this: SND_SOC_DAPM_MIXER_E("HeadsetL Mixer", SND_SOC_NOPM, 0, 0, &twl4030_dapm_hsol_controls[0], ARRAY_SIZE(twl4030_dapm_hsol_controls), headsetl_event, SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD), ... SND_SOC_DAPM_PGA_E("HeadsetL fake PGA", SND_SOC_NOPM, 0, 0, NULL, 0, headsetlfake_event, SND_SOC_DAPM_POST_PMU|SND_SOC_DAPM_POST_PMD), ... {"HeadsetL Mixer", "Voice", "VDL_APGA"}, {"HeadsetL Mixer", "AudioL1", "ARXL1_APGA"}, {"HeadsetL Mixer", "AudioL2", "ARXL2_APGA"}, {"HeadsetL fake PGA", NULL, "HeadsetL Mixer"}, ... {"HSOL", NULL, "HeadsetL fake PGA"},
I have moved the code form the headsetl_event to headsetlfake_event, so the ramp is configured in the fake PGA event handler.
So startup/shutdown order should be correct if you define a new PGA between the HSOx and Headsetx mixer and let that to manage output pin power.
The order between the PGAs are not correct for the startup. In playback case we have two PGA with this new 'fake PGA': ARXL2_APGA and the "HeadsetL fake PGA"
DAPM is handling first the "HeadsetL fake PGA" than the ARXL2_APGA both for startup and for standby. For standby it is OK, but for startup the ARXL2_APGA should be handled prior to the "HeadsetL fake PGA" => in reverse order.