Skip to content

Commit

Permalink
ALSA: hda - Add chained_before flag to the fixup entry
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Takashi Iwai committed Jan 23, 2013
1 parent 3e367f1 commit 1f57825
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 8 deletions.
18 changes: 11 additions & 7 deletions sound/pci/hda/hda_auto_parser.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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,
Expand Down
3 changes: 2 additions & 1 deletion sound/pci/hda/hda_local.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 1f57825

Please sign in to comment.