mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-19 10:14:23 +08:00
ALSA: hda - Add chained_before flag to the fixup entry
Sometimes we want to call a fixup after applying other existing fixups, but currently the fixup chain mechanism allows only the call the others after the target fixup. This patch adds a new flag, chained_before, to struct hda_fixup, for allowing the chained call before the current execution. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
3e367f155f
commit
1f57825077
@ -696,20 +696,18 @@ static void set_pin_targets(struct hda_codec *codec,
|
||||
snd_hda_set_pin_ctl_cache(codec, cfg->nid, cfg->val);
|
||||
}
|
||||
|
||||
void snd_hda_apply_fixup(struct hda_codec *codec, int action)
|
||||
static void apply_fixup(struct hda_codec *codec, int id, int action, int depth)
|
||||
{
|
||||
int id = codec->fixup_id;
|
||||
#ifdef CONFIG_SND_DEBUG_VERBOSE
|
||||
const char *modelname = codec->fixup_name;
|
||||
#endif
|
||||
int depth = 0;
|
||||
|
||||
if (!codec->fixup_list)
|
||||
return;
|
||||
|
||||
while (id >= 0) {
|
||||
const struct hda_fixup *fix = codec->fixup_list + id;
|
||||
|
||||
if (fix->chained_before)
|
||||
apply_fixup(codec, fix->chain_id, action, depth + 1);
|
||||
|
||||
switch (fix->type) {
|
||||
case HDA_FIXUP_PINS:
|
||||
if (action != HDA_FIXUP_ACT_PRE_PROBE || !fix->v.pins)
|
||||
@ -749,13 +747,19 @@ void snd_hda_apply_fixup(struct hda_codec *codec, int action)
|
||||
codec->chip_name, fix->type);
|
||||
break;
|
||||
}
|
||||
if (!fix->chained)
|
||||
if (!fix->chained || fix->chained_before)
|
||||
break;
|
||||
if (++depth > 10)
|
||||
break;
|
||||
id = fix->chain_id;
|
||||
}
|
||||
}
|
||||
|
||||
void snd_hda_apply_fixup(struct hda_codec *codec, int action)
|
||||
{
|
||||
if (codec->fixup_list)
|
||||
apply_fixup(codec, codec->fixup_id, action, 0);
|
||||
}
|
||||
EXPORT_SYMBOL_HDA(snd_hda_apply_fixup);
|
||||
|
||||
void snd_hda_pick_fixup(struct hda_codec *codec,
|
||||
|
@ -401,7 +401,8 @@ struct hda_model_fixup {
|
||||
|
||||
struct hda_fixup {
|
||||
int type;
|
||||
bool chained;
|
||||
bool chained:1; /* call the chained fixup(s) after this */
|
||||
bool chained_before:1; /* call the chained fixup(s) before this */
|
||||
int chain_id;
|
||||
union {
|
||||
const struct hda_pintbl *pins;
|
||||
|
Loading…
Reference in New Issue
Block a user