[alsa-devel] [PATCH v2] ALSA: hda - Disable IDT eapd_switch if there are no internal speakers

Takashi Iwai tiwai at suse.de
Thu Mar 14 15:36:16 CET 2013


At Thu, 14 Mar 2013 15:28:29 +0100,
David Henningsson wrote:
> 
> If there are no internal speakers, we should not turn the eapd switch
> off, because it might be necessary to keep high for Headphone.
> 
> BugLink: https://bugs.launchpad.net/bugs/1155016
> Signed-off-by: David Henningsson <david.henningsson at canonical.com>
> ---
>  sound/pci/hda/patch_sigmatel.c |   29 +++++++++++++++++++++++++++++
>  1 file changed, 29 insertions(+)
> 
> I'm okay with your suggestion. I only changed from "false" to "0" to be consistent
> with other usage of eapd_switch.

Thanks, applied now.


Takashi

> 
> diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
> index d57c81e..3566731 100644
> --- a/sound/pci/hda/patch_sigmatel.c
> +++ b/sound/pci/hda/patch_sigmatel.c
> @@ -815,6 +815,29 @@ static int find_mute_led_cfg(struct hda_codec *codec, int default_polarity)
>  	return 0;
>  }
>  
> +/* check whether a built-in speaker is included in parsed pins */
> +static bool has_builtin_speaker(struct hda_codec *codec)
> +{
> +	struct sigmatel_spec *spec = codec->spec;
> +	hda_nid_t *nid_pin;
> +	int nids, i;
> +
> +	if (spec->gen.autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT) {
> +		nid_pin = spec->gen.autocfg.line_out_pins;
> +		nids = spec->gen.autocfg.line_outs;
> +	} else {
> +		nid_pin = spec->gen.autocfg.speaker_pins;
> +		nids = spec->gen.autocfg.speaker_outs;
> +	}
> +
> +	for (i = 0; i < nids; i++) {
> +		unsigned int def_conf = snd_hda_codec_get_pincfg(codec, nid_pin[i]);
> +		if (snd_hda_get_input_pin_attr(def_conf) == INPUT_PIN_ATTR_INT)
> +			return true;
> +	}
> +	return false;
> +}
> +
>  /*
>   * PC beep controls
>   */
> @@ -3891,6 +3914,12 @@ static int patch_stac92hd73xx(struct hda_codec *codec)
>  		return err;
>  	}
>  
> +	/* Don't GPIO-mute speakers if there are no internal speakers, because
> +	 * the GPIO might be necessary for Headphone
> +	 */
> +	if (spec->eapd_switch && !has_builtin_speaker(codec))
> +		spec->eapd_switch = 0;
> +
>  	codec->proc_widget_hook = stac92hd7x_proc_hook;
>  
>  	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE);
> -- 
> 1.7.9.5
> 


More information about the Alsa-devel mailing list