Loading sound/pci/hda/hda_auto_parser.c +18 −21 Original line number Diff line number Diff line Loading @@ -622,28 +622,27 @@ int snd_hda_get_pin_label(struct hda_codec *codec, hda_nid_t nid, } EXPORT_SYMBOL_HDA(snd_hda_get_pin_label); int snd_hda_gen_add_verbs(struct hda_gen_spec *spec, int snd_hda_add_verbs(struct hda_codec *codec, const struct hda_verb *list) { const struct hda_verb **v; v = snd_array_new(&spec->verbs); v = snd_array_new(&codec->verbs); if (!v) return -ENOMEM; *v = list; return 0; } EXPORT_SYMBOL_HDA(snd_hda_gen_add_verbs); EXPORT_SYMBOL_HDA(snd_hda_add_verbs); void snd_hda_gen_apply_verbs(struct hda_codec *codec) void snd_hda_apply_verbs(struct hda_codec *codec) { struct hda_gen_spec *spec = codec->spec; int i; for (i = 0; i < spec->verbs.used; i++) { struct hda_verb **v = snd_array_elem(&spec->verbs, i); for (i = 0; i < codec->verbs.used; i++) { struct hda_verb **v = snd_array_elem(&codec->verbs, i); snd_hda_sequence_write(codec, *v); } } EXPORT_SYMBOL_HDA(snd_hda_gen_apply_verbs); EXPORT_SYMBOL_HDA(snd_hda_apply_verbs); void snd_hda_apply_pincfgs(struct hda_codec *codec, const struct hda_pintbl *cfg) Loading @@ -655,18 +654,17 @@ EXPORT_SYMBOL_HDA(snd_hda_apply_pincfgs); void snd_hda_apply_fixup(struct hda_codec *codec, int action) { struct hda_gen_spec *spec = codec->spec; int id = spec->fixup_id; int id = codec->fixup_id; #ifdef CONFIG_SND_DEBUG_VERBOSE const char *modelname = spec->fixup_name; const char *modelname = codec->fixup_name; #endif int depth = 0; if (!spec->fixup_list) if (!codec->fixup_list) return; while (id >= 0) { const struct hda_fixup *fix = spec->fixup_list + id; const struct hda_fixup *fix = codec->fixup_list + id; switch (fix->type) { case HDA_FIXUP_PINS: Loading @@ -683,7 +681,7 @@ void snd_hda_apply_fixup(struct hda_codec *codec, int action) snd_printdd(KERN_INFO SFX "%s: Apply fix-verbs for %s\n", codec->chip_name, modelname); snd_hda_gen_add_verbs(codec->spec, fix->v.verbs); snd_hda_add_verbs(codec, fix->v.verbs); break; case HDA_FIXUP_FUNC: if (!fix->v.func) Loading Loading @@ -713,15 +711,14 @@ void snd_hda_pick_fixup(struct hda_codec *codec, const struct snd_pci_quirk *quirk, const struct hda_fixup *fixlist) { struct hda_gen_spec *spec = codec->spec; const struct snd_pci_quirk *q; int id = -1; const char *name = NULL; /* when model=nofixup is given, don't pick up any fixups */ if (codec->modelname && !strcmp(codec->modelname, "nofixup")) { spec->fixup_list = NULL; spec->fixup_id = -1; codec->fixup_list = NULL; codec->fixup_id = -1; return; } Loading Loading @@ -759,10 +756,10 @@ void snd_hda_pick_fixup(struct hda_codec *codec, } } spec->fixup_id = id; codec->fixup_id = id; if (id >= 0) { spec->fixup_list = fixlist; spec->fixup_name = name; codec->fixup_list = fixlist; codec->fixup_name = name; } } EXPORT_SYMBOL_HDA(snd_hda_pick_fixup); sound/pci/hda/hda_auto_parser.h +0 −78 Original line number Diff line number Diff line Loading @@ -89,82 +89,4 @@ int snd_hda_parse_pin_defcfg(struct hda_codec *codec, #define snd_hda_parse_pin_def_config(codec, cfg, ignore) \ snd_hda_parse_pin_defcfg(codec, cfg, ignore, 0) /* */ struct hda_gen_spec { /* fix-up list */ int fixup_id; const struct hda_fixup *fixup_list; const char *fixup_name; /* additional init verbs */ struct snd_array verbs; }; /* * Fix-up pin default configurations and add default verbs */ struct hda_pintbl { hda_nid_t nid; u32 val; }; struct hda_model_fixup { const int id; const char *name; }; struct hda_fixup { int type; bool chained; int chain_id; union { const struct hda_pintbl *pins; const struct hda_verb *verbs; void (*func)(struct hda_codec *codec, const struct hda_fixup *fix, int action); } v; }; /* fixup types */ enum { HDA_FIXUP_INVALID, HDA_FIXUP_PINS, HDA_FIXUP_VERBS, HDA_FIXUP_FUNC, }; /* fixup action definitions */ enum { HDA_FIXUP_ACT_PRE_PROBE, HDA_FIXUP_ACT_PROBE, HDA_FIXUP_ACT_INIT, HDA_FIXUP_ACT_BUILD, }; int snd_hda_gen_add_verbs(struct hda_gen_spec *spec, const struct hda_verb *list); void snd_hda_gen_apply_verbs(struct hda_codec *codec); void snd_hda_apply_pincfgs(struct hda_codec *codec, const struct hda_pintbl *cfg); void snd_hda_apply_fixup(struct hda_codec *codec, int action); void snd_hda_pick_fixup(struct hda_codec *codec, const struct hda_model_fixup *models, const struct snd_pci_quirk *quirk, const struct hda_fixup *fixlist); static inline void snd_hda_gen_init(struct hda_gen_spec *spec) { snd_array_init(&spec->verbs, sizeof(struct hda_verb *), 8); } static inline void snd_hda_gen_free(struct hda_gen_spec *spec) { snd_array_free(&spec->verbs); } #endif /* __SOUND_HDA_AUTO_PARSER_H */ sound/pci/hda/hda_codec.c +2 −0 Original line number Diff line number Diff line Loading @@ -1253,6 +1253,7 @@ int snd_hda_codec_new(struct hda_bus *bus, snd_array_init(&codec->conn_lists, sizeof(hda_nid_t), 64); snd_array_init(&codec->spdif_out, sizeof(struct hda_spdif_out), 16); snd_array_init(&codec->jacktbl, sizeof(struct hda_jack_tbl), 16); snd_array_init(&codec->verbs, sizeof(struct hda_verb *), 8); INIT_DELAYED_WORK(&codec->jackpoll_work, hda_jackpoll_work); #ifdef CONFIG_PM Loading Loading @@ -2407,6 +2408,7 @@ int snd_hda_codec_reset(struct hda_codec *codec) snd_array_free(&codec->driver_pins); snd_array_free(&codec->cvt_setups); snd_array_free(&codec->spdif_out); snd_array_free(&codec->verbs); codec->num_pcms = 0; codec->pcm_info = NULL; codec->preset = NULL; Loading sound/pci/hda/hda_codec.h +8 −0 Original line number Diff line number Diff line Loading @@ -896,6 +896,14 @@ struct hda_codec { /* jack detection */ struct snd_array jacks; #endif /* fix-up list */ int fixup_id; const struct hda_fixup *fixup_list; const char *fixup_name; /* additional init verbs */ struct snd_array verbs; }; /* direction */ Loading sound/pci/hda/hda_local.h +53 −0 Original line number Diff line number Diff line Loading @@ -385,6 +385,59 @@ int snd_hda_check_board_codec_sid_config(struct hda_codec *codec, int snd_hda_add_new_ctls(struct hda_codec *codec, const struct snd_kcontrol_new *knew); /* * Fix-up pin default configurations and add default verbs */ struct hda_pintbl { hda_nid_t nid; u32 val; }; struct hda_model_fixup { const int id; const char *name; }; struct hda_fixup { int type; bool chained; int chain_id; union { const struct hda_pintbl *pins; const struct hda_verb *verbs; void (*func)(struct hda_codec *codec, const struct hda_fixup *fix, int action); } v; }; /* fixup types */ enum { HDA_FIXUP_INVALID, HDA_FIXUP_PINS, HDA_FIXUP_VERBS, HDA_FIXUP_FUNC, }; /* fixup action definitions */ enum { HDA_FIXUP_ACT_PRE_PROBE, HDA_FIXUP_ACT_PROBE, HDA_FIXUP_ACT_INIT, HDA_FIXUP_ACT_BUILD, }; int snd_hda_add_verbs(struct hda_codec *codec, const struct hda_verb *list); void snd_hda_apply_verbs(struct hda_codec *codec); void snd_hda_apply_pincfgs(struct hda_codec *codec, const struct hda_pintbl *cfg); void snd_hda_apply_fixup(struct hda_codec *codec, int action); void snd_hda_pick_fixup(struct hda_codec *codec, const struct hda_model_fixup *models, const struct snd_pci_quirk *quirk, const struct hda_fixup *fixlist); /* * unsolicited event handler */ Loading Loading
sound/pci/hda/hda_auto_parser.c +18 −21 Original line number Diff line number Diff line Loading @@ -622,28 +622,27 @@ int snd_hda_get_pin_label(struct hda_codec *codec, hda_nid_t nid, } EXPORT_SYMBOL_HDA(snd_hda_get_pin_label); int snd_hda_gen_add_verbs(struct hda_gen_spec *spec, int snd_hda_add_verbs(struct hda_codec *codec, const struct hda_verb *list) { const struct hda_verb **v; v = snd_array_new(&spec->verbs); v = snd_array_new(&codec->verbs); if (!v) return -ENOMEM; *v = list; return 0; } EXPORT_SYMBOL_HDA(snd_hda_gen_add_verbs); EXPORT_SYMBOL_HDA(snd_hda_add_verbs); void snd_hda_gen_apply_verbs(struct hda_codec *codec) void snd_hda_apply_verbs(struct hda_codec *codec) { struct hda_gen_spec *spec = codec->spec; int i; for (i = 0; i < spec->verbs.used; i++) { struct hda_verb **v = snd_array_elem(&spec->verbs, i); for (i = 0; i < codec->verbs.used; i++) { struct hda_verb **v = snd_array_elem(&codec->verbs, i); snd_hda_sequence_write(codec, *v); } } EXPORT_SYMBOL_HDA(snd_hda_gen_apply_verbs); EXPORT_SYMBOL_HDA(snd_hda_apply_verbs); void snd_hda_apply_pincfgs(struct hda_codec *codec, const struct hda_pintbl *cfg) Loading @@ -655,18 +654,17 @@ EXPORT_SYMBOL_HDA(snd_hda_apply_pincfgs); void snd_hda_apply_fixup(struct hda_codec *codec, int action) { struct hda_gen_spec *spec = codec->spec; int id = spec->fixup_id; int id = codec->fixup_id; #ifdef CONFIG_SND_DEBUG_VERBOSE const char *modelname = spec->fixup_name; const char *modelname = codec->fixup_name; #endif int depth = 0; if (!spec->fixup_list) if (!codec->fixup_list) return; while (id >= 0) { const struct hda_fixup *fix = spec->fixup_list + id; const struct hda_fixup *fix = codec->fixup_list + id; switch (fix->type) { case HDA_FIXUP_PINS: Loading @@ -683,7 +681,7 @@ void snd_hda_apply_fixup(struct hda_codec *codec, int action) snd_printdd(KERN_INFO SFX "%s: Apply fix-verbs for %s\n", codec->chip_name, modelname); snd_hda_gen_add_verbs(codec->spec, fix->v.verbs); snd_hda_add_verbs(codec, fix->v.verbs); break; case HDA_FIXUP_FUNC: if (!fix->v.func) Loading Loading @@ -713,15 +711,14 @@ void snd_hda_pick_fixup(struct hda_codec *codec, const struct snd_pci_quirk *quirk, const struct hda_fixup *fixlist) { struct hda_gen_spec *spec = codec->spec; const struct snd_pci_quirk *q; int id = -1; const char *name = NULL; /* when model=nofixup is given, don't pick up any fixups */ if (codec->modelname && !strcmp(codec->modelname, "nofixup")) { spec->fixup_list = NULL; spec->fixup_id = -1; codec->fixup_list = NULL; codec->fixup_id = -1; return; } Loading Loading @@ -759,10 +756,10 @@ void snd_hda_pick_fixup(struct hda_codec *codec, } } spec->fixup_id = id; codec->fixup_id = id; if (id >= 0) { spec->fixup_list = fixlist; spec->fixup_name = name; codec->fixup_list = fixlist; codec->fixup_name = name; } } EXPORT_SYMBOL_HDA(snd_hda_pick_fixup);
sound/pci/hda/hda_auto_parser.h +0 −78 Original line number Diff line number Diff line Loading @@ -89,82 +89,4 @@ int snd_hda_parse_pin_defcfg(struct hda_codec *codec, #define snd_hda_parse_pin_def_config(codec, cfg, ignore) \ snd_hda_parse_pin_defcfg(codec, cfg, ignore, 0) /* */ struct hda_gen_spec { /* fix-up list */ int fixup_id; const struct hda_fixup *fixup_list; const char *fixup_name; /* additional init verbs */ struct snd_array verbs; }; /* * Fix-up pin default configurations and add default verbs */ struct hda_pintbl { hda_nid_t nid; u32 val; }; struct hda_model_fixup { const int id; const char *name; }; struct hda_fixup { int type; bool chained; int chain_id; union { const struct hda_pintbl *pins; const struct hda_verb *verbs; void (*func)(struct hda_codec *codec, const struct hda_fixup *fix, int action); } v; }; /* fixup types */ enum { HDA_FIXUP_INVALID, HDA_FIXUP_PINS, HDA_FIXUP_VERBS, HDA_FIXUP_FUNC, }; /* fixup action definitions */ enum { HDA_FIXUP_ACT_PRE_PROBE, HDA_FIXUP_ACT_PROBE, HDA_FIXUP_ACT_INIT, HDA_FIXUP_ACT_BUILD, }; int snd_hda_gen_add_verbs(struct hda_gen_spec *spec, const struct hda_verb *list); void snd_hda_gen_apply_verbs(struct hda_codec *codec); void snd_hda_apply_pincfgs(struct hda_codec *codec, const struct hda_pintbl *cfg); void snd_hda_apply_fixup(struct hda_codec *codec, int action); void snd_hda_pick_fixup(struct hda_codec *codec, const struct hda_model_fixup *models, const struct snd_pci_quirk *quirk, const struct hda_fixup *fixlist); static inline void snd_hda_gen_init(struct hda_gen_spec *spec) { snd_array_init(&spec->verbs, sizeof(struct hda_verb *), 8); } static inline void snd_hda_gen_free(struct hda_gen_spec *spec) { snd_array_free(&spec->verbs); } #endif /* __SOUND_HDA_AUTO_PARSER_H */
sound/pci/hda/hda_codec.c +2 −0 Original line number Diff line number Diff line Loading @@ -1253,6 +1253,7 @@ int snd_hda_codec_new(struct hda_bus *bus, snd_array_init(&codec->conn_lists, sizeof(hda_nid_t), 64); snd_array_init(&codec->spdif_out, sizeof(struct hda_spdif_out), 16); snd_array_init(&codec->jacktbl, sizeof(struct hda_jack_tbl), 16); snd_array_init(&codec->verbs, sizeof(struct hda_verb *), 8); INIT_DELAYED_WORK(&codec->jackpoll_work, hda_jackpoll_work); #ifdef CONFIG_PM Loading Loading @@ -2407,6 +2408,7 @@ int snd_hda_codec_reset(struct hda_codec *codec) snd_array_free(&codec->driver_pins); snd_array_free(&codec->cvt_setups); snd_array_free(&codec->spdif_out); snd_array_free(&codec->verbs); codec->num_pcms = 0; codec->pcm_info = NULL; codec->preset = NULL; Loading
sound/pci/hda/hda_codec.h +8 −0 Original line number Diff line number Diff line Loading @@ -896,6 +896,14 @@ struct hda_codec { /* jack detection */ struct snd_array jacks; #endif /* fix-up list */ int fixup_id; const struct hda_fixup *fixup_list; const char *fixup_name; /* additional init verbs */ struct snd_array verbs; }; /* direction */ Loading
sound/pci/hda/hda_local.h +53 −0 Original line number Diff line number Diff line Loading @@ -385,6 +385,59 @@ int snd_hda_check_board_codec_sid_config(struct hda_codec *codec, int snd_hda_add_new_ctls(struct hda_codec *codec, const struct snd_kcontrol_new *knew); /* * Fix-up pin default configurations and add default verbs */ struct hda_pintbl { hda_nid_t nid; u32 val; }; struct hda_model_fixup { const int id; const char *name; }; struct hda_fixup { int type; bool chained; int chain_id; union { const struct hda_pintbl *pins; const struct hda_verb *verbs; void (*func)(struct hda_codec *codec, const struct hda_fixup *fix, int action); } v; }; /* fixup types */ enum { HDA_FIXUP_INVALID, HDA_FIXUP_PINS, HDA_FIXUP_VERBS, HDA_FIXUP_FUNC, }; /* fixup action definitions */ enum { HDA_FIXUP_ACT_PRE_PROBE, HDA_FIXUP_ACT_PROBE, HDA_FIXUP_ACT_INIT, HDA_FIXUP_ACT_BUILD, }; int snd_hda_add_verbs(struct hda_codec *codec, const struct hda_verb *list); void snd_hda_apply_verbs(struct hda_codec *codec); void snd_hda_apply_pincfgs(struct hda_codec *codec, const struct hda_pintbl *cfg); void snd_hda_apply_fixup(struct hda_codec *codec, int action); void snd_hda_pick_fixup(struct hda_codec *codec, const struct hda_model_fixup *models, const struct snd_pci_quirk *quirk, const struct hda_fixup *fixlist); /* * unsolicited event handler */ Loading