ALSA: hda - Make user_pin overriding the driver setup
Make user_pin overriding even the driver pincfg, e.g. the static / fixed pin config table in patch_sigmatel.c. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
346ff70fdb
commit
5e7b8e0d87
2 changed files with 14 additions and 5 deletions
|
@ -380,7 +380,8 @@ user_pin_configs::
|
|||
Shows the pin default config values to override the BIOS setup.
|
||||
Writing this (with two numbers, NID and value) appends the new
|
||||
value. The given will be used instead of the initial BIOS value at
|
||||
the next reconfiguration time.
|
||||
the next reconfiguration time. Note that this config will override
|
||||
even the driver pin configs, too.
|
||||
reconfig::
|
||||
Triggers the codec re-configuration. When any value is written to
|
||||
this file, the driver re-initialize and parses the codec tree
|
||||
|
|
|
@ -739,7 +739,9 @@ int snd_hda_add_pincfg(struct hda_codec *codec, struct snd_array *list,
|
|||
hda_nid_t nid, unsigned int cfg)
|
||||
{
|
||||
struct hda_pincfg *pin;
|
||||
unsigned int oldcfg;
|
||||
|
||||
oldcfg = snd_hda_codec_get_pincfg(codec, nid);
|
||||
pin = look_up_pincfg(codec, list, nid);
|
||||
if (!pin) {
|
||||
pin = snd_array_new(list);
|
||||
|
@ -748,7 +750,13 @@ int snd_hda_add_pincfg(struct hda_codec *codec, struct snd_array *list,
|
|||
pin->nid = nid;
|
||||
}
|
||||
pin->cfg = cfg;
|
||||
set_pincfg(codec, nid, cfg);
|
||||
|
||||
/* change only when needed; e.g. if the pincfg is already present
|
||||
* in user_pins[], don't write it
|
||||
*/
|
||||
cfg = snd_hda_codec_get_pincfg(codec, nid);
|
||||
if (oldcfg != cfg)
|
||||
set_pincfg(codec, nid, cfg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -764,14 +772,14 @@ unsigned int snd_hda_codec_get_pincfg(struct hda_codec *codec, hda_nid_t nid)
|
|||
{
|
||||
struct hda_pincfg *pin;
|
||||
|
||||
pin = look_up_pincfg(codec, &codec->driver_pins, nid);
|
||||
if (pin)
|
||||
return pin->cfg;
|
||||
#ifdef CONFIG_SND_HDA_HWDEP
|
||||
pin = look_up_pincfg(codec, &codec->user_pins, nid);
|
||||
if (pin)
|
||||
return pin->cfg;
|
||||
#endif
|
||||
pin = look_up_pincfg(codec, &codec->driver_pins, nid);
|
||||
if (pin)
|
||||
return pin->cfg;
|
||||
pin = look_up_pincfg(codec, &codec->init_pins, nid);
|
||||
if (pin)
|
||||
return pin->cfg;
|
||||
|
|
Loading…
Reference in a new issue