[alsa-devel] Question about ASOC codec drivers
Neil Jones
neiljay at gmail.com
Tue Jan 18 18:35:22 CET 2011
Hi,
Im trying to write an ASOC Codec driver for a new codec and im having
problems setting up the widgets and interconnects.
The input structure is similar to the wm8731 so i have based my codec
on this (my widget code is included at the bottom)
problem is I get this error on startup:
Failed to add route Line Input->Input Mux
Add then when I run alsa-mixer I get a memfault in the strcpy in
snd_soc_info_enum_double()
it appears to be indexing a string 1 past the end, ie
uinfo->value.enumerated.item = 3 but e->texts is pointing to the
tansen_input_select[] array of strings which only has 3 entries, so it
blows up (e->max = 7??).
also shouldn't the strcpy by a strncpy as we are copying to a fixed
64byte buffer ?
thanks for anyhelp.
Neil
my widget code:
static const struct snd_kcontrol_new tansen_snd_controls[] = {
SOC_DOUBLE_R("Master Playback Volume",
TANSEN_TM_OP_TOP7, TANSEN_TM_OP_TOP8,
0, 0xFF, 0
),
SOC_DOUBLE("Line/IPOD-In Gain", TANSEN_TM_IP_TOP5, 5, 2, 0x7, 0),
SOC_DOUBLE("Mic-In Gain", TANSEN_TM_IP_TOP4, 0, 4, 0xF, 0),
};
static const char *tansen_input_select[] = { "Mic In",
"Line In",
"IPOD In",
};
static const struct soc_enum tansen_ip_enum =
SOC_ENUM_SINGLE(TANSEN_TM_IP_TOP2, 4, 0x7, tansen_input_select);
/* Input mux */
static const struct snd_kcontrol_new tansen_input_mux_controls =
SOC_DAPM_ENUM("Input Select", tansen_ip_enum);
static const struct snd_soc_dapm_widget tansen_dapm_widgets[] = {
SND_SOC_DAPM_DAC("DAC", "Playback", SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_OUTPUT("LHPOUT"),
SND_SOC_DAPM_OUTPUT("RHPOUT"),
SND_SOC_DAPM_ADC("ADC", "Capture", SND_SOC_NOPM, 0, 0),
SND_SOC_DAPM_MUX("Input Mux", SND_SOC_NOPM, 0, 0, &tansen_input_mux_controls),
SND_SOC_DAPM_PGA("PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
SND_SOC_DAPM_MICBIAS("Mic Bias", TANSEN_TM_MICBIAS_1, 4, 1),
SND_SOC_DAPM_INPUT("MICIN"),
SND_SOC_DAPM_INPUT("RLINEIN"),
SND_SOC_DAPM_INPUT("LLINEIN"),
SND_SOC_DAPM_INPUT("RIPODIN"),
SND_SOC_DAPM_INPUT("LIPODIN")
};
static const struct snd_soc_dapm_route intercon[] = {
/* outputs */
{"RHPOUT", NULL, "DAC"},
{"LHPOUT", NULL, "DAC"},
/* input mux */
{"Input Mux", "Line In", "Line Input"},
{"Input Mux", "Mic In", "Mic bias"},
{"Input Mux", "Ipod In", "Ipod Input"},
{"ADC", NULL, "PGA"},
{"PGA", NULL, "Input Mux"},
/* inputs */
{"Line Input", NULL, "LLINEIN"},
{"Line Input", NULL, "RLINEIN"},
{"Ipod Input", NULL, "LIPODIN"},
{"Ipod Input", NULL, "RIPODIN"},
{"Mic bias", NULL, "MICIN"},
};
More information about the Alsa-devel
mailing list