ALSA: hda - Keep char arrays in input_mux items
Keep char array in the input_mux item itself instead of pointing to an external string. This is a preliminary work for improving the input-mux name based on the pin role. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
@@ -4662,17 +4662,8 @@ const char *auto_pin_cfg_labels[AUTO_PIN_LAST] = {
|
|||||||
};
|
};
|
||||||
EXPORT_SYMBOL_HDA(auto_pin_cfg_labels);
|
EXPORT_SYMBOL_HDA(auto_pin_cfg_labels);
|
||||||
|
|
||||||
static const char *input_labels[AUTO_PIN_LAST][4] = {
|
void snd_hda_get_input_pin_label(const struct auto_pin_cfg *cfg,
|
||||||
{ "Mic", "Mic 2", "Mic 3", "Mic 4" },
|
int input, char *str)
|
||||||
{ "Front Mic", "Front Mic 2", "Front Mic 3", "Front Mic 4" },
|
|
||||||
{ "Line", "Line 2", "Line 3", "Line 4" },
|
|
||||||
{ "Front Line", "Front Line 2", "Front Line 3", "Front Line 4" },
|
|
||||||
{ "CD", "CD 2", "CD 3", "CD 4" },
|
|
||||||
{ "Aux", "Aux 2", "Aux 3", "Aux 4" },
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *snd_hda_get_input_pin_label(const struct auto_pin_cfg *cfg,
|
|
||||||
int input)
|
|
||||||
{
|
{
|
||||||
int type = cfg->inputs[input].type;
|
int type = cfg->inputs[input].type;
|
||||||
int idx;
|
int idx;
|
||||||
@@ -4681,7 +4672,10 @@ const char *snd_hda_get_input_pin_label(const struct auto_pin_cfg *cfg,
|
|||||||
if (type != cfg->inputs[input].type)
|
if (type != cfg->inputs[input].type)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return input_labels[type][idx];
|
if (idx > 0)
|
||||||
|
sprintf(str, "%s %d", auto_pin_cfg_labels[type], idx);
|
||||||
|
else
|
||||||
|
strcpy(str, auto_pin_cfg_labels[type]);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_HDA(snd_hda_get_input_pin_label);
|
EXPORT_SYMBOL_HDA(snd_hda_get_input_pin_label);
|
||||||
|
|
||||||
|
@@ -566,7 +566,7 @@ static int parse_adc_sub_nodes(struct hda_codec *codec, struct hda_gspec *spec,
|
|||||||
}
|
}
|
||||||
label = spec->cap_labels[spec->input_mux.num_items];
|
label = spec->cap_labels[spec->input_mux.num_items];
|
||||||
strcpy(label, type);
|
strcpy(label, type);
|
||||||
spec->input_mux.items[spec->input_mux.num_items].label = label;
|
strcpy(spec->input_mux.items[spec->input_mux.num_items].label, label);
|
||||||
|
|
||||||
/* unmute the PIN external input */
|
/* unmute the PIN external input */
|
||||||
unmute_input(codec, node, 0); /* index = 0? */
|
unmute_input(codec, node, 0); /* index = 0? */
|
||||||
|
@@ -215,7 +215,7 @@ int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid);
|
|||||||
*/
|
*/
|
||||||
#define HDA_MAX_NUM_INPUTS 16
|
#define HDA_MAX_NUM_INPUTS 16
|
||||||
struct hda_input_mux_item {
|
struct hda_input_mux_item {
|
||||||
const char *label;
|
char label[32];
|
||||||
unsigned int index;
|
unsigned int index;
|
||||||
};
|
};
|
||||||
struct hda_input_mux {
|
struct hda_input_mux {
|
||||||
@@ -391,8 +391,8 @@ struct auto_pin_cfg_item {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct auto_pin_cfg;
|
struct auto_pin_cfg;
|
||||||
const char *snd_hda_get_input_pin_label(const struct auto_pin_cfg *cfg,
|
void snd_hda_get_input_pin_label(const struct auto_pin_cfg *cfg,
|
||||||
int input);
|
int input, char *label);
|
||||||
|
|
||||||
struct auto_pin_cfg {
|
struct auto_pin_cfg {
|
||||||
int line_outs;
|
int line_outs;
|
||||||
|
@@ -2926,13 +2926,13 @@ static int ad1988_auto_create_analog_input_ctls(struct ad198x_spec *spec,
|
|||||||
type <= AUTO_PIN_FRONT_MIC);
|
type <= AUTO_PIN_FRONT_MIC);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
imux->items[imux->num_items].label =
|
snd_hda_get_input_pin_label(cfg, i,
|
||||||
snd_hda_get_input_pin_label(cfg, i);
|
imux->items[imux->num_items].label);
|
||||||
imux->items[imux->num_items].index =
|
imux->items[imux->num_items].index =
|
||||||
ad1988_pin_to_adc_idx(cfg->inputs[i].pin);
|
ad1988_pin_to_adc_idx(cfg->inputs[i].pin);
|
||||||
imux->num_items++;
|
imux->num_items++;
|
||||||
}
|
}
|
||||||
imux->items[imux->num_items].label = "Mix";
|
strcpy(imux->items[imux->num_items].label, "Mix");
|
||||||
imux->items[imux->num_items].index = 9;
|
imux->items[imux->num_items].index = 9;
|
||||||
imux->num_items++;
|
imux->num_items++;
|
||||||
|
|
||||||
|
@@ -4974,8 +4974,8 @@ static int alc_auto_create_input_ctls(struct hda_codec *codec,
|
|||||||
if (idx < 0 && cap2)
|
if (idx < 0 && cap2)
|
||||||
idx = get_connection_index(codec, cap2, pin);
|
idx = get_connection_index(codec, cap2, pin);
|
||||||
if (idx >= 0) {
|
if (idx >= 0) {
|
||||||
imux->items[imux->num_items].label =
|
snd_hda_get_input_pin_label(cfg, i,
|
||||||
snd_hda_get_input_pin_label(cfg, i);
|
imux->items[imux->num_items].label);
|
||||||
imux->items[imux->num_items].index = idx;
|
imux->items[imux->num_items].index = idx;
|
||||||
imux->num_items++;
|
imux->num_items++;
|
||||||
}
|
}
|
||||||
@@ -10626,9 +10626,9 @@ static int alc_auto_add_mic_boost(struct hda_codec *codec)
|
|||||||
break;
|
break;
|
||||||
nid = cfg->inputs[i].pin;
|
nid = cfg->inputs[i].pin;
|
||||||
if (get_wcaps(codec, nid) & AC_WCAP_IN_AMP) {
|
if (get_wcaps(codec, nid) & AC_WCAP_IN_AMP) {
|
||||||
char label[32];
|
char pinname[32], label[32];
|
||||||
snprintf(label, sizeof(label), "%s Boost",
|
snd_hda_get_input_pin_label(cfg, i, pinname);
|
||||||
snd_hda_get_input_pin_label(cfg, i));
|
snprintf(label, sizeof(label), "%s Boost", pinname);
|
||||||
err = add_control(spec, ALC_CTL_WIDGET_VOL, label, 0,
|
err = add_control(spec, ALC_CTL_WIDGET_VOL, label, 0,
|
||||||
HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT));
|
HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT));
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
|
@@ -1116,7 +1116,7 @@ static int stac92xx_build_controls(struct hda_codec *codec)
|
|||||||
struct hda_input_mux *smux = &spec->private_smux;
|
struct hda_input_mux *smux = &spec->private_smux;
|
||||||
/* check for mute support on SPDIF out */
|
/* check for mute support on SPDIF out */
|
||||||
if (wcaps & AC_WCAP_OUT_AMP) {
|
if (wcaps & AC_WCAP_OUT_AMP) {
|
||||||
smux->items[smux->num_items].label = "Off";
|
strcpy(smux->items[smux->num_items].label, "Off");
|
||||||
smux->items[smux->num_items].index = 0;
|
smux->items[smux->num_items].index = 0;
|
||||||
smux->num_items++;
|
smux->num_items++;
|
||||||
spec->spdif_mute = 1;
|
spec->spdif_mute = 1;
|
||||||
@@ -3274,8 +3274,8 @@ static int stac92xx_auto_create_mono_output_ctls(struct hda_codec *codec)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
for (i = 0; i < num_cons; i++) {
|
for (i = 0; i < num_cons; i++) {
|
||||||
mono_mux->items[mono_mux->num_items].label =
|
strcpy(mono_mux->items[mono_mux->num_items].label,
|
||||||
stac92xx_mono_labels[i];
|
stac92xx_mono_labels[i]);
|
||||||
mono_mux->items[mono_mux->num_items].index = i;
|
mono_mux->items[mono_mux->num_items].index = i;
|
||||||
mono_mux->num_items++;
|
mono_mux->num_items++;
|
||||||
}
|
}
|
||||||
@@ -3404,7 +3404,7 @@ static int stac92xx_auto_create_spdif_mux_ctls(struct hda_codec *codec)
|
|||||||
labels = stac92xx_spdif_labels;
|
labels = stac92xx_spdif_labels;
|
||||||
|
|
||||||
for (i = 0; i < num_cons; i++) {
|
for (i = 0; i < num_cons; i++) {
|
||||||
spdif_mux->items[spdif_mux->num_items].label = labels[i];
|
strcpy(spdif_mux->items[spdif_mux->num_items].label, labels[i]);
|
||||||
spdif_mux->items[spdif_mux->num_items].index = i;
|
spdif_mux->items[spdif_mux->num_items].index = i;
|
||||||
spdif_mux->num_items++;
|
spdif_mux->num_items++;
|
||||||
}
|
}
|
||||||
@@ -3538,7 +3538,7 @@ static int stac92xx_auto_create_dmic_input_ctls(struct hda_codec *codec,
|
|||||||
int err, i;
|
int err, i;
|
||||||
unsigned int def_conf;
|
unsigned int def_conf;
|
||||||
|
|
||||||
dimux->items[dimux->num_items].label = stac92xx_dmic_labels[0];
|
strcpy(dimux->items[dimux->num_items].label, stac92xx_dmic_labels[0]);
|
||||||
dimux->items[dimux->num_items].index = 0;
|
dimux->items[dimux->num_items].index = 0;
|
||||||
dimux->num_items++;
|
dimux->num_items++;
|
||||||
|
|
||||||
@@ -3572,11 +3572,11 @@ static int stac92xx_auto_create_dmic_input_ctls(struct hda_codec *codec,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
dimux->items[dimux->num_items].label = label;
|
strcpy(dimux->items[dimux->num_items].label, label);
|
||||||
dimux->items[dimux->num_items].index = index;
|
dimux->items[dimux->num_items].index = index;
|
||||||
dimux->num_items++;
|
dimux->num_items++;
|
||||||
if (snd_hda_get_bool_hint(codec, "separate_dmux") != 1) {
|
if (snd_hda_get_bool_hint(codec, "separate_dmux") != 1) {
|
||||||
imux->items[imux->num_items].label = label;
|
strcpy(imux->items[imux->num_items].label, label);
|
||||||
imux->items[imux->num_items].index = index;
|
imux->items[imux->num_items].index = index;
|
||||||
imux->num_items++;
|
imux->num_items++;
|
||||||
}
|
}
|
||||||
@@ -3713,7 +3713,7 @@ static int stac92xx_auto_create_analog_input_ctls(struct hda_codec *codec, const
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
imux->items[imux->num_items].label = label;
|
strcpy(imux->items[imux->num_items].label, label);
|
||||||
imux->items[imux->num_items].index = index;
|
imux->items[imux->num_items].index = index;
|
||||||
imux->num_items++;
|
imux->num_items++;
|
||||||
}
|
}
|
||||||
|
@@ -2376,7 +2376,7 @@ static void create_hp_imux(struct via_spec *spec)
|
|||||||
/* for hp mode select */
|
/* for hp mode select */
|
||||||
i = 0;
|
i = 0;
|
||||||
while (texts[i] != NULL) {
|
while (texts[i] != NULL) {
|
||||||
imux->items[imux->num_items].label = texts[i];
|
strcpy(imux->items[imux->num_items].label, texts[i]);
|
||||||
imux->items[imux->num_items].index = i;
|
imux->items[imux->num_items].index = i;
|
||||||
imux->num_items++;
|
imux->num_items++;
|
||||||
i++;
|
i++;
|
||||||
@@ -2423,7 +2423,8 @@ static int vt_auto_create_analog_input_ctls(struct via_spec *spec,
|
|||||||
/* for internal loopback recording select */
|
/* for internal loopback recording select */
|
||||||
for (idx = 0; idx < num_idxs; idx++) {
|
for (idx = 0; idx < num_idxs; idx++) {
|
||||||
if (pin_idxs[idx] == 0xff) {
|
if (pin_idxs[idx] == 0xff) {
|
||||||
imux->items[imux->num_items].label = "Stereo Mixer";
|
strcpy(imux->items[imux->num_items].label,
|
||||||
|
"Stereo Mixer");
|
||||||
imux->items[imux->num_items].index = idx;
|
imux->items[imux->num_items].index = idx;
|
||||||
imux->num_items++;
|
imux->num_items++;
|
||||||
break;
|
break;
|
||||||
@@ -2445,8 +2446,8 @@ static int vt_auto_create_analog_input_ctls(struct via_spec *spec,
|
|||||||
type_idx, idx, cap_nid);
|
type_idx, idx, cap_nid);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
imux->items[imux->num_items].label =
|
snd_hda_get_input_pin_label(cfg, i,
|
||||||
snd_hda_get_input_pin_label(cfg, i);
|
imux->items[imux->num_items].label);
|
||||||
imux->items[imux->num_items].index = idx;
|
imux->items[imux->num_items].index = idx;
|
||||||
imux->num_items++;
|
imux->num_items++;
|
||||||
}
|
}
|
||||||
@@ -4336,7 +4337,7 @@ static int vt1702_auto_create_hp_ctls(struct via_spec *spec, hda_nid_t pin)
|
|||||||
/* for hp mode select */
|
/* for hp mode select */
|
||||||
i = 0;
|
i = 0;
|
||||||
while (texts[i] != NULL) {
|
while (texts[i] != NULL) {
|
||||||
imux->items[imux->num_items].label = texts[i];
|
strcpy(imux->items[imux->num_items].label, texts[i]);
|
||||||
imux->items[imux->num_items].index = i;
|
imux->items[imux->num_items].index = i;
|
||||||
imux->num_items++;
|
imux->num_items++;
|
||||||
i++;
|
i++;
|
||||||
@@ -5520,7 +5521,7 @@ static int vt2002P_auto_create_analog_input_ctls(struct via_spec *spec,
|
|||||||
return err;
|
return err;
|
||||||
|
|
||||||
/* for digital mic select */
|
/* for digital mic select */
|
||||||
imux->items[imux->num_items].label = "Digital Mic";
|
strcpy(imux->items[imux->num_items].label, "Digital Mic");
|
||||||
imux->items[imux->num_items].index = 4;
|
imux->items[imux->num_items].index = 4;
|
||||||
imux->num_items++;
|
imux->num_items++;
|
||||||
|
|
||||||
@@ -5843,7 +5844,7 @@ static int vt1812_auto_create_analog_input_ctls(struct via_spec *spec,
|
|||||||
return err;
|
return err;
|
||||||
|
|
||||||
/* for digital mic select */
|
/* for digital mic select */
|
||||||
imux->items[imux->num_items].label = "Digital Mic";
|
strcpy(imux->items[imux->num_items].label, "Digital Mic");
|
||||||
imux->items[imux->num_items].index = 6;
|
imux->items[imux->num_items].index = 6;
|
||||||
imux->num_items++;
|
imux->num_items++;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user