ALSA: hda - Support rereading widgets under the function group
A codec may allow software to hide some unused pin/cvt widgets. Sometimes BIOS does not enable the hidden widgets properly although they are needed for the board. Thus the driver need to enable them as a board-specific fixup and the whole tree will change. This patch implements a common code for rereading codec widgets. So the fixup code can call it after enabling the hidden widgets. Signed-off-by: Mengdong Lin <mengdong.lin@intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
4eea30914f
commit
a15d05db41
2 changed files with 25 additions and 0 deletions
|
@ -1441,6 +1441,30 @@ int snd_hda_codec_new(struct hda_bus *bus,
|
|||
}
|
||||
EXPORT_SYMBOL_HDA(snd_hda_codec_new);
|
||||
|
||||
int snd_hda_codec_update_widgets(struct hda_codec *codec)
|
||||
{
|
||||
hda_nid_t fg;
|
||||
int err;
|
||||
|
||||
/* Assume the function group node does not change,
|
||||
* only the widget nodes may change.
|
||||
*/
|
||||
kfree(codec->wcaps);
|
||||
fg = codec->afg ? codec->afg : codec->mfg;
|
||||
err = read_widget_caps(codec, fg);
|
||||
if (err < 0) {
|
||||
snd_printk(KERN_ERR "hda_codec: cannot malloc\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
snd_array_free(&codec->init_pins);
|
||||
err = read_pin_defaults(codec);
|
||||
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL_HDA(snd_hda_codec_update_widgets);
|
||||
|
||||
|
||||
/**
|
||||
* snd_hda_codec_configure - (Re-)configure the HD-audio codec
|
||||
* @codec: the HDA codec
|
||||
|
|
|
@ -935,6 +935,7 @@ int snd_hda_bus_new(struct snd_card *card, const struct hda_bus_template *temp,
|
|||
int snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr,
|
||||
struct hda_codec **codecp);
|
||||
int snd_hda_codec_configure(struct hda_codec *codec);
|
||||
int snd_hda_codec_update_widgets(struct hda_codec *codec);
|
||||
|
||||
/*
|
||||
* low level functions
|
||||
|
|
Loading…
Reference in a new issue