diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c index 06e203df4059b75215657d7796ddee6cb7bdee01..921582d4fe054850ea32ba7e773daf33ed1ca07b 100644 --- a/sound/pci/hda/hda_generic.c +++ b/sound/pci/hda/hda_generic.c @@ -735,6 +735,14 @@ static void set_pin_eapd(struct hda_codec *codec, hda_nid_t pin, bool enable) enable ? 0x02 : 0x00); } +/* re-initialize the path specified by the given path index */ +static void resume_path_from_idx(struct hda_codec *codec, int path_idx) +{ + struct nid_path *path = snd_hda_get_path_from_idx(codec, path_idx); + if (path) + snd_hda_activate_path(codec, path, path->active, false); +} + /* * Helper functions for creating mixer ctl elements @@ -4684,16 +4692,8 @@ static void init_analog_input(struct hda_codec *codec) /* init loopback inputs */ if (spec->mixer_nid) { - struct nid_path *path; - path = snd_hda_get_path_from_idx(codec, spec->loopback_paths[i]); - if (path) - snd_hda_activate_path(codec, path, - path->active, false); - path = snd_hda_get_path_from_idx(codec, - spec->loopback_merge_path); - if (path) - snd_hda_activate_path(codec, path, path->active, - false); + resume_path_from_idx(codec, spec->loopback_paths[i]); + resume_path_from_idx(codec, spec->loopback_merge_path); } } } @@ -4741,11 +4741,8 @@ static void init_digital(struct hda_codec *codec) set_output_and_unmute(codec, spec->digout_paths[i]); pin = spec->autocfg.dig_in_pin; if (pin) { - struct nid_path *path; restore_pin_ctl(codec, pin); - path = snd_hda_get_path_from_idx(codec, spec->digin_path); - if (path) - snd_hda_activate_path(codec, path, path->active, false); + resume_path_from_idx(codec, spec->digin_path); } }