[alsa-devel] No audio output via built-in speaker on a MacMini while headphone jack is plugged in

Takashi Iwai tiwai at suse.de
Tue Mar 15 16:24:55 CET 2016


On Mon, 14 Mar 2016 19:39:26 +0100,
moosotc at gmail.com wrote:
> 
> Takashi Iwai <tiwai at suse.de> writes:
> 
> > On Mon, 14 Mar 2016 18:16:11 +0100,
> > moosotc at gmail.com wrote:
> >> 
> >> Takashi Iwai <tiwai at suse.de> writes:
> >> 
> >> > On Mon, 14 Mar 2016 09:11:10 +0100,
> >> > moosotc at gmail.com wrote:
> >> >> 
> >> >> [1 Output of alsa-info.sh <application/octet-stream (base64)>]
> >> >> 
> >> >> 
> >> >> `amixer set Speaker unmute' makes no difference
> >> >> physically unplugging the headphone jack from the socket does, i.e.
> >> >> `amixer set Speaker (un)mute' does the right thing.
> >> >
> >> > Could you give more details?  The description is too concise and
> >> > vague.
> >> >
> >> 
> >> I have a script to toggles sound emission by the built-in speaker:
> >> 
> >> #!/bin/sh
> >> amixer get Speaker | grep -q "\[on\]" && onoff="mute" || onoff="unmute"
> >> amixer set Speaker $onoff
> >> echo "$onoff"
> >> 
> >> As we speak:
> >> 
> >> `--> atoggle
> >> Simple mixer control 'Speaker',0
> >>   Capabilities: pvolume pswitch
> >>   Playback channels: Front Left - Front Right
> >>   Limits: Playback 0 - 127
> >>   Mono:
> >>   Front Left: Playback 127 [100%] [0.00dB] [on]
> >>   Front Right: Playback 127 [100%] [0.00dB] [on]
> >> unmute
> >> 
> >> This setting is ignored when (i.e. speaker is always silent) if the
> >> headphone jack is plugged in.
> >> 
> >> This used to work in prior kernels, I believe I've shared my bisection
> >> results with you in one of the earlier (personal) e-mails, if there's a
> >> better way to achieve the desired result (i.e. control sound emission by
> >> the speaker regardless of the headphone jack plug-status) I'll happily
> >> use that instead.
> >
> > As mentioned, make sure that you disable auto-mute mode:
> >   amixer set "Auto-Mute Mode" "Disabled"
> >
> > If you still have no speaker output even after that, give alsa-info.sh
> > output with non-working state, and also the alsa-info.sh output from
> > the working state on the earlier kernel.
> >
> >
>     jack      | speaker | auto-mute | spaker emits sound
> 000 unplugged | muted   | disabled  | no
> 001 unplugged | muted   | enabled   | no
> 010 unplugged | unmuted | disabled  | yes
> 011 unplugged | unmuted | enabled   | yes
> 100 plugged   | muted   | disabled  | no
> 101 plugged   | muted   | enabled   | no
> 110 plugged   | unmuted | disabled  | no
> 111 plugged   | unmuted | enabled   | no
> 
> alsa-info outputs can be found in the attached archive

Thanks.  This seems to be the missing GPIO setup when the auto-mute is
disabled.  Could you give the patch below?


Takashi

---
diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
index c1c855a6c0af..a47e8ae0eb30 100644
--- a/sound/pci/hda/patch_cirrus.c
+++ b/sound/pci/hda/patch_cirrus.c
@@ -174,8 +174,12 @@ static void cs_automute(struct hda_codec *codec)
 	snd_hda_gen_update_outputs(codec);
 
 	if (spec->gpio_eapd_hp || spec->gpio_eapd_speaker) {
-		spec->gpio_data = spec->gen.hp_jack_present ?
-			spec->gpio_eapd_hp : spec->gpio_eapd_speaker;
+		if (spec->gen.automute_speaker)
+			spec->gpio_data = spec->gen.hp_jack_present ?
+				spec->gpio_eapd_hp : spec->gpio_eapd_speaker;
+		else
+			spec->gpio_data =
+				spec->gpio_eapd_hp | spec->gpio_eapd_speaker;
 		snd_hda_codec_write(codec, 0x01, 0,
 				    AC_VERB_SET_GPIO_DATA, spec->gpio_data);
 	}


More information about the Alsa-devel mailing list