[alsa-devel] [PATCH 1/3] [ALSA] hda - Support rereading widgets under the function group
From: Mengdong Lin mengdong.lin@intel.com
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
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index 3c92514..e80f835 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c @@ -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 diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h index 0be1826..e8c9442 100644 --- a/sound/pci/hda/hda_codec.h +++ b/sound/pci/hda/hda_codec.h @@ -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
At Fri, 8 Feb 2013 17:09:31 -0500, mengdong.lin@intel.com wrote:
From: Mengdong Lin mengdong.lin@intel.com
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
Applied all three patches. Thanks.
Takashi
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index 3c92514..e80f835 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c @@ -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
diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h index 0be1826..e8c9442 100644 --- a/sound/pci/hda/hda_codec.h +++ b/sound/pci/hda/hda_codec.h @@ -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
-- 1.7.10.4
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
participants (2)
-
mengdong.lin@intel.com
-
Takashi Iwai