On Mon, 2024-12-02 at 13:16 +0000, Mark Brown wrote:
On Sun, Dec 01, 2024 at 05:15:45PM +0000, Jiaxin Yu (俞家鑫) wrote:
So I want to ask if I can do it by just adding SOC_DAPM_PIN_SWITCH("Speakers") and SOC_DAPM_PIN_SWITCH("HDMI")? Correspondingly, dapm widget and route path need to be added. That is "SND_SOC_DAPM_SPK("Speakers", NULL)/ SND_SOC_DAPM_LINE("HDMI1", NULL)" and "{"Speakers", NULL, "Speaker"}/ {"HDMI1", NULL, "TX"}".
Yes, that's what I'd expect to see.
Dear Mark,
So if I open the "HDMI Switch" amixer control, it will call 'hdmi_codec_startup', which in turn calls "audio_startup()" in 'hdmi_codec_ops'. Conversely, if I close it, it will call 'hdmi_codec_shutdown', which in turn calls 'audio_shutdown' in 'hdmi_codec_ops'. Is this understanding correct?
static const struct snd_soc_dai_ops hdmi_codec_i2s_dai_ops = { .probe = hdmi_dai_probe, .startup = hdmi_codec_startup, .shutdown = hdmi_codec_shutdown, .hw_params = hdmi_codec_hw_params, .prepare = hdmi_codec_prepare, .set_fmt = hdmi_codec_i2s_set_fmt, .mute_stream = hdmi_codec_mute, .pcm_new = hdmi_codec_pcm_new, .auto_selectable_formats = &hdmi_codec_formats, .num_auto_selectable_formats = 1, };
struct hdmi_codec_ops { /* * Called when ASoC starts an audio stream setup. * Optional */ int (*audio_startup)(struct device *dev, void *data);
/* * Shuts down the audio stream. * Mandatory */ void (*audio_shutdown)(struct device *dev, void *data);