[alsa-devel] HDA headset button support

Kailang kailang at realtek.com
Thu Nov 29 08:30:37 CET 2018


Hi Takashi,

Belowing was the unplug dump.
[ 5184.677125] snd_hda_jack_unsol_event nid=0x21 res=0x8000020 tag=0x2
[ 5184.696467] snd_hda_jack_report_sync nid=0x55 state=0x800 jack->pin_sense=0x0
[ 5184.696477] snd_hda_jack_report_sync nid=0x21 state=0x0 jack->pin_sense=0x0
[ 5184.696481] snd_hda_jack_report_sync nid=0x19 state=0x2 jack->pin_sense=0x80000000
[ 5184.696484] snd_hda_jack_report_sync nid=0x12 state=0x2 jack->pin_sense=0x80000000
[ 5184.696486] snd_hda_jack_report_sync nid=0x14 state=0x4 jack->pin_sense=0x80000000
[ 5184.696490] snd_hda_jack_unsol_event nid=0x19 res=0xc000000 tag=0x3
[ 5184.716529] snd_hda_jack_report_sync nid=0x55 state=0x800 jack->pin_sense=0x0
[ 5184.716537] snd_hda_jack_report_sync nid=0x21 state=0x0 jack->pin_sense=0x0
[ 5184.716545] snd_hda_jack_report_sync nid=0x19 state=0x0 jack->pin_sense=0x0
[ 5184.716548] snd_hda_jack_report_sync nid=0x12 state=0x2 jack->pin_sense=0x80000000
[ 5184.716551] snd_hda_jack_report_sync nid=0x14 state=0x4 jack->pin_sense=0x80000000

>> [ 5184.696467] snd_hda_jack_report_sync nid=0x55 state=0x800 jack->pin_sense=0x0
If state of 0x55 keep value, plug and unplug jack will update 0x55 button sync.
I test add the code to clear the jack->button_state = 0. The issue will be gone.

But why 0x14 and 0x12 had pin sens?
[ 5184.716548] snd_hda_jack_report_sync nid=0x12 state=0x2 jack->pin_sense=0x80000000
[ 5184.716551] snd_hda_jack_report_sync nid=0x14 state=0x4 jack->pin_sense=0x80000000

This modify also update for all pins. When I test press the HS button, the dump show as upper list.

BR,
Kailang

-----Original Message-----
From: Kailang 
Sent: Thursday, November 29, 2018 3:03 PM
To: 'Takashi Iwai' <tiwai at suse.de>
Cc: (alsa-devel at alsa-project.org) <alsa-devel at alsa-project.org>
Subject: RE: HDA headset button support

Hi Takashi,

I test the patch.
It will go to Max or Min volume when I press HS button up or down.

+			state = jack->button_state;
+			if (get_jack_plug_state(jack->pin_sense))
+				state |= jack->type;
+			snd_jack_report(jack->jack, state);
			If (jack->nid == 0x55)
				snd_jack_report(jack->jack, 0); ==> Add this will solve keep volume up and down.

If the pin sense active, it will update Mic and Headphone state. (Upper code) But it still had chance to update 0x55 during unplug and plug state.
So, Maybe need to clear the Button state. I guess.

BR,
Kailang

-----Original Message-----
From: Takashi Iwai <tiwai at suse.de>
Sent: Wednesday, November 28, 2018 10:05 PM
To: Kailang <kailang at realtek.com>
Cc: (alsa-devel at alsa-project.org) <alsa-devel at alsa-project.org>
Subject: Re: HDA headset button support

On Wed, 28 Nov 2018 13:03:58 +0100,
Kailang wrote:
> 
> Hi Takashi,
> 
> >I'd rather like to extend snd_hda_jack_add_kctl() with the key 
> >support (maybe adding a new function).  You can pass there the 
> >combination of SND_JACK_BTN_X with KEY_XXX in an array.
> 
> Do you mean create new function like below?
> snd_hda_jack_add_key_kctl()
> 
> It couldn't use snd_hda_jack_add_kctl() directly.
> Because it had report pin state and get type from NID.
> 
> 	type = get_input_jack_type(codec, nid);
>         .....
>         .....
>  	state = snd_hda_jack_detect(codec, nid);
> 	snd_jack_report(jack->jack, state ? jack->type : 0);
> 
> So, to create a new function in hda_jack.c was better.

Well, this seems more deeper than I thought.

Below is my quick attempt to add the infrastructure.  This adds more flexibility but still easiness for other possible button implementations, hopefully.

Could you check the series below?


thanks,

Takashi


------Please consider the environment before printing this e-mail.


More information about the Alsa-devel mailing list