mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
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
@ -1441,6 +1441,30 @@ int snd_hda_codec_new(struct hda_bus *bus,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_HDA(snd_hda_codec_new);
|
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
|
* snd_hda_codec_configure - (Re-)configure the HD-audio codec
|
||||||
* @codec: the HDA 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,
|
int snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr,
|
||||||
struct hda_codec **codecp);
|
struct hda_codec **codecp);
|
||||||
int snd_hda_codec_configure(struct hda_codec *codec);
|
int snd_hda_codec_configure(struct hda_codec *codec);
|
||||||
|
int snd_hda_codec_update_widgets(struct hda_codec *codec);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* low level functions
|
* low level functions
|
||||||
|
Loading…
Reference in New Issue
Block a user