On Thu, Dec 16, 2021 at 05:54:45PM +0530, Ajit Kumar Pandey wrote:
Thanks for suggestion. We tried using SND_SOC_DAPM_PIN_SWITCH() for the speaker widget and it invoke dapm_event callback based on switch i.e max98357a_sdmode_event() but codec driver isn't enabling/disabling gpios in such event callback instead they are doing that in dai_ops trigger callback. In our platform single I2S controller instance (cpu-dai) is connected to two different endpoints with a single PCM device, hence we want to switch or enable/disable output based on Machine driver controls only.
DAPM should cope perfectly fine with this setup...
Initially we thought to configure gpio within sdmode_event callback but there was some pop noise issue reported in one platform with that change hence reverted. Check https://patchwork.kernel.org/project/alsa-devel/patch/20200721114232.2812254... So we thought of exposing a mixer control to enable/disable amp from UCM in our platform without breaking existing functionality. Please let us know any other alternative way if possible.
Whatever is going on this should be managed from the driver rather than having a direct control, especially given the issues I mentioned with there being zero coordination between this and the management that the driver already does. You could have DAPM controls set a variable and coordinate with whatever you're doing in the pcm_ops, I'm not clear what the use case is for having the manual control TBH.