[alsa-devel] HDA independent headphone
Raymond Yau
superquad.vortex2 at gmail.com
Tue Jan 22 09:04:46 CET 2013
> > > Actually, it works fine in Skype when using "AD1989B Analog (hw:
0,2)". I
> > > was confused because I changed only "Speakers" to that device and
tried
> > > making a test sound. That did not work, apparently test sound goes to
> > > whatever "Ringing" is set to. But when making actual calls, it works
as
> > > expected and I can take advantage of the Independent HP feature.
> >
> > Hm, there should be nothing to touch the indep-HP mixer control from
> > PCM, so I have no idea why it went wrong.
> >
> > BTW, I guess we have still an issue regarding indep HP. When it's ON,
> > should the auto-mute be disabled, no?
> > Although one can disable the automute manually, it'd be maybe more
> > user-friendly if the driver does it by itself.
> >
>
> The patch is below, already merged in test/hda-gen-parser branch (and
> test/hda-migrate and master branch, too), as usual.
>
Does it mean that the value of the "front headphone jack" kcontrol is no
longer updated when the independent headphone is switch on ?
>
> ---
> From: Takashi Iwai <tiwai at suse.de>
> Subject: [PATCH] ALSA: hda - Disable HP auto-mute during independent HP
mode
>
> Both the HP auto-mute and the independent HP mode conflict with each
> other. Make HP auto-mute disabled (only for the affected HP jack)
> during the driver is in HP independent mode.
>
> Signed-off-by: Takashi Iwai <tiwai at suse.de>
> ---
> sound/pci/hda/hda_generic.c | 19 ++++++++++++++++---
> 1 file changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
> index 63d12ef..258fb5e 100644
> --- a/sound/pci/hda/hda_generic.c
> +++ b/sound/pci/hda/hda_generic.c
> @@ -1889,6 +1889,13 @@ static int indep_hp_put(struct snd_kcontrol
*kcontrol,
> *dacp = 0;
> else
> *dacp = spec->alt_dac_nid;
> +
> + /* update HP auto-mute state too */
> + if (spec->hp_automute_hook)
> + spec->hp_automute_hook(codec, NULL);
> + else
> + snd_hda_gen_hp_automute(codec, NULL);
> +
> ret = 1;
> }
> unlock:
> @@ -3467,10 +3474,16 @@ static void call_update_outputs(struct hda_codec
*codec)
> void snd_hda_gen_hp_automute(struct hda_codec *codec, struct
hda_jack_tbl *jack)
> {
> struct hda_gen_spec *spec = codec->spec;
> + hda_nid_t *pins = spec->autocfg.hp_pins;
> + int num_pins = ARRAY_SIZE(spec->autocfg.hp_pins);
> +
> + /* No detection for the first HP jack during indep-HP mode */
> + if (spec->indep_hp_enabled) {
> + pins++;
> + num_pins--;
> + }
>
> - spec->hp_jack_present =
> - detect_jacks(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
> - spec->autocfg.hp_pins);
> + spec->hp_jack_present = detect_jacks(codec, num_pins, pins);
> if (!spec->detect_hp || (!spec->automute_speaker &&
!spec->automute_lo))
> return;
> call_update_outputs(codec);
> --
> 1.8.1.1
>
More information about the Alsa-devel
mailing list