Skip to content

Commit

Permalink
ALSA: hda/generic - Fix wrong initial power state for fixed pins
Browse files Browse the repository at this point in the history
When the widget power-saving is enabled, the first automute hook
invocation checks through the whole pins and it also tries to
synchronize the power state.  However, this results in a wrong state
because it calls unconditionally snd_hda_jack_detect_state().
This patch adds a check of jack detectability before the actual jack
detection call.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
Takashi Iwai committed Apr 9, 2015
1 parent 2206dc9 commit d5ac010
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions sound/pci/hda/hda_generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -3959,6 +3959,14 @@ static hda_nid_t set_path_power(struct hda_codec *codec, hda_nid_t nid,
return changed;
}

/* check the jack status for power control */
static bool detect_pin_state(struct hda_codec *codec, hda_nid_t pin)
{
if (!is_jack_detectable(codec, pin))
return true;
return snd_hda_jack_detect_state(codec, pin) != HDA_JACK_NOT_PRESENT;
}

/* power up/down the paths of the given pin according to the jack state;
* power = 0/1 : only power up/down if it matches with the jack state,
* < 0 : force power up/down to follow the jack sate
Expand All @@ -3973,7 +3981,8 @@ static hda_nid_t set_pin_power_jack(struct hda_codec *codec, hda_nid_t pin,
if (!codec->power_save_node)
return 0;

on = snd_hda_jack_detect_state(codec, pin) != HDA_JACK_NOT_PRESENT;
on = detect_pin_state(codec, pin);

if (power >= 0 && on != power)
return 0;
return set_path_power(codec, pin, on, -1);
Expand Down Expand Up @@ -4225,8 +4234,7 @@ static void do_automute(struct hda_codec *codec, int num_pins, hda_nid_t *pins,
if (codec->power_save_node) {
bool on = !mute;
if (on)
on = snd_hda_jack_detect_state(codec, nid)
!= HDA_JACK_NOT_PRESENT;
on = detect_pin_state(codec, nid);
set_path_power(codec, nid, on, -1);
}
}
Expand Down

0 comments on commit d5ac010

Please sign in to comment.