Skip to content

Commit

Permalink
ALSA: hda - Support rereading widgets under the function group
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Mengdong Lin authored and Takashi Iwai committed Feb 8, 2013
1 parent 4eea309 commit a15d05d
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 0 deletions.
24 changes: 24 additions & 0 deletions sound/pci/hda/hda_codec.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions sound/pci/hda/hda_codec.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit a15d05d

Please sign in to comment.