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