ALSA: hda - Move the call of snd_hda_parse_pin_defcfg() from snd_hda_gen_parse_auto_config()
In some cases, we want to manipulate the auto_pin_cfg table before passing to snd_hda_gen_parse_auto_config() (e.g. Realtek SSID check code fiddles with the headphone pin). Also passing ignore_pins just for snd_hda_parse_pin_defcfg() isn't good. In this patch, snd_hda_gen_parse_auto_config() is changed to receive the auto_pin_cfg table to be parsed. The passed auto_pin_cfg table must have been initialized (typically by calling snd_hda_gen_parse_auto_config()) beforehand by the caller. Also together with this change, spec->parse_flags is also removed. Since this was referred only at the place calling snd_hda_parse_pin_defcfg(), no longer needed to be kept in spec. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
12c93df60c
commit
9eb413e5e4
@ -2785,21 +2785,23 @@ static int check_auto_mic_availability(struct hda_codec *codec)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* parse the BIOS configuration and set up the hda_gen_spec */
|
/*
|
||||||
/* return 1 if successful, 0 if the proper config is not found,
|
* Parse the given BIOS configuration and set up the hda_gen_spec
|
||||||
|
*
|
||||||
|
* return 1 if successful, 0 if the proper config is not found,
|
||||||
* or a negative error code
|
* or a negative error code
|
||||||
*/
|
*/
|
||||||
int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
|
int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
|
||||||
const hda_nid_t *ignore_nids)
|
struct auto_pin_cfg *cfg)
|
||||||
{
|
{
|
||||||
struct hda_gen_spec *spec = codec->spec;
|
struct hda_gen_spec *spec = codec->spec;
|
||||||
struct auto_pin_cfg *cfg = &spec->autocfg;
|
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = snd_hda_parse_pin_defcfg(codec, cfg, ignore_nids,
|
if (cfg != &spec->autocfg) {
|
||||||
spec->parse_flags);
|
spec->autocfg = *cfg;
|
||||||
if (err < 0)
|
cfg = &spec->autocfg;
|
||||||
return err;
|
}
|
||||||
|
|
||||||
if (!cfg->line_outs) {
|
if (!cfg->line_outs) {
|
||||||
if (cfg->dig_outs || cfg->dig_in_pin) {
|
if (cfg->dig_outs || cfg->dig_in_pin) {
|
||||||
spec->multiout.max_channels = 2;
|
spec->multiout.max_channels = 2;
|
||||||
@ -3586,7 +3588,11 @@ int snd_hda_parse_generic_codec(struct hda_codec *codec)
|
|||||||
snd_hda_gen_spec_init(spec);
|
snd_hda_gen_spec_init(spec);
|
||||||
codec->spec = spec;
|
codec->spec = spec;
|
||||||
|
|
||||||
err = snd_hda_gen_parse_auto_config(codec, NULL);
|
err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
@ -152,8 +152,6 @@ struct hda_gen_spec {
|
|||||||
unsigned int inv_dmic_split:1; /* inverted dmic w/a for conexant */
|
unsigned int inv_dmic_split:1; /* inverted dmic w/a for conexant */
|
||||||
unsigned int own_eapd_ctl:1; /* set EAPD by own function */
|
unsigned int own_eapd_ctl:1; /* set EAPD by own function */
|
||||||
|
|
||||||
unsigned int parse_flags; /* passed to snd_hda_parse_pin_defcfg() */
|
|
||||||
|
|
||||||
/* for virtual master */
|
/* for virtual master */
|
||||||
hda_nid_t vmaster_nid;
|
hda_nid_t vmaster_nid;
|
||||||
struct hda_vmaster_mute_hook vmaster_mute;
|
struct hda_vmaster_mute_hook vmaster_mute;
|
||||||
@ -197,7 +195,7 @@ snd_hda_gen_add_kctl(struct hda_gen_spec *spec, const char *name,
|
|||||||
const struct snd_kcontrol_new *temp);
|
const struct snd_kcontrol_new *temp);
|
||||||
|
|
||||||
int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
|
int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
|
||||||
const hda_nid_t *ignore_nids);
|
struct auto_pin_cfg *cfg);
|
||||||
int snd_hda_gen_build_controls(struct hda_codec *codec);
|
int snd_hda_gen_build_controls(struct hda_codec *codec);
|
||||||
int snd_hda_gen_build_pcms(struct hda_codec *codec);
|
int snd_hda_gen_build_pcms(struct hda_codec *codec);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user