Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 257677
b: refs/heads/master
c: 64be285
h: refs/heads/master
i:
  257675: 1a64d95
v: v3
  • Loading branch information
Takashi Iwai committed Jun 20, 2011
1 parent ad2b60e commit 1b123d1
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 33 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3e0693e278ae2000cff0c9250074591696caedbf
refs/heads/master: 64be285b669e5eed65fb3630f1b2b549447b9f1e
63 changes: 31 additions & 32 deletions trunk/sound/pci/hda/patch_via.c
Original file line number Diff line number Diff line change
Expand Up @@ -1606,6 +1606,17 @@ static void via_free(struct hda_codec *codec)
kfree(codec->spec);
}

/* mute/unmute outputs */
static void toggle_output_mutes(struct hda_codec *codec, int num_pins,
hda_nid_t *pins, bool mute)
{
int i;
for (i = 0; i < num_pins; i++)
snd_hda_codec_write(codec, pins[i], 0,
AC_VERB_SET_PIN_WIDGET_CONTROL,
mute ? 0 : PIN_OUT);
}

/* mute internal speaker if HP is plugged */
static void via_hp_automute(struct hda_codec *codec)
{
Expand All @@ -1614,12 +1625,10 @@ static void via_hp_automute(struct hda_codec *codec)

present = snd_hda_jack_detect(codec, spec->autocfg.hp_pins[0]);

if (!spec->hp_independent_mode) {
/* auto mute */
snd_hda_codec_write(codec, spec->autocfg.line_out_pins[0], 0,
AC_VERB_SET_PIN_WIDGET_CONTROL,
present ? 0 : PIN_OUT);
}
if (!spec->hp_independent_mode)
toggle_output_mutes(codec, spec->autocfg.line_outs,
spec->autocfg.line_out_pins,
present);
}

/* mute mono out if HP or Line out is plugged */
Expand Down Expand Up @@ -1708,45 +1717,35 @@ static void via_speaker_automute(struct hda_codec *codec)

hp_present = snd_hda_jack_detect(codec, spec->autocfg.hp_pins[0]);

if (!spec->hp_independent_mode) {
snd_hda_codec_write(codec, spec->autocfg.speaker_pins[0], 0,
AC_VERB_SET_PIN_WIDGET_CONTROL,
hp_present ? 0 : PIN_OUT);
}
if (!spec->hp_independent_mode)
toggle_output_mutes(codec, spec->autocfg.speaker_outs,
spec->autocfg.speaker_pins,
hp_present);
}

/* mute line-out and internal speaker if HP is plugged */
static void via_hp_bind_automute(struct hda_codec *codec)
{
/* use long instead of int below just to avoid an internal compiler
* error with gcc 4.0.x
*/
unsigned long hp_present, present = 0;
int present;
struct via_spec *spec = codec->spec;
int i;

if (!spec->autocfg.hp_pins[0] || !spec->autocfg.line_out_pins[0])
return;

hp_present = snd_hda_jack_detect(codec, spec->autocfg.hp_pins[0]);
present = snd_hda_jack_detect(codec, spec->autocfg.hp_pins[0]);
if (!spec->hp_independent_mode)
toggle_output_mutes(codec, spec->autocfg.line_outs,
spec->autocfg.line_out_pins,
present);

present = snd_hda_jack_detect(codec, spec->autocfg.line_out_pins[0]);
if (!present)
present = snd_hda_jack_detect(codec,
spec->autocfg.line_out_pins[0]);

if (!spec->hp_independent_mode) {
/* Mute Line-Outs */
for (i = 0; i < spec->autocfg.line_outs; i++)
snd_hda_codec_write(codec,
spec->autocfg.line_out_pins[i], 0,
AC_VERB_SET_PIN_WIDGET_CONTROL,
hp_present ? 0 : PIN_OUT);
if (hp_present)
present = hp_present;
}
/* Speakers */
for (i = 0; i < spec->autocfg.speaker_outs; i++)
snd_hda_codec_write(codec, spec->autocfg.speaker_pins[i], 0,
AC_VERB_SET_PIN_WIDGET_CONTROL,
present ? 0 : PIN_OUT);
toggle_output_mutes(codec, spec->autocfg.speaker_outs,
spec->autocfg.speaker_pins,
present);
}


Expand Down

0 comments on commit 1b123d1

Please sign in to comment.