At Mon, 21 Jan 2013 21:21:45 +0100, Takashi Iwai wrote:
At Mon, 21 Jan 2013 14:11:47 -0500, Miro Hodak wrote:
[1 <text/plain; ISO-8859-1 (7bit)>] On Mon, Jan 21, 2013 at 12:44 PM, Miro Hodak mhodak127@gmail.com wrote:
On Mon, Jan 21, 2013 at 12:29 PM, Takashi Iwai tiwai@suse.de wrote:
At Mon, 21 Jan 2013 12:08:13 -0500, Miro Hodak wrote:
On Mon, Jan 21, 2013 at 4:18 AM, Raymond Yau <
superquad.vortex2@gmail.com>wrote:
> I have been playing with Independent HP feature and while I can get
it
to work in aplay and mplayer, it does not seem to work on vlc and
Skype.
Both applications seem to have options for sending sound to HPs
("AD1989B
Analog Front Speakers" or "AD1989B Analog (hw: 0,2)" - Skype only),
but
none of those options sends sound to the HPs. Any thoughts on this?
Because the driver should not allow user to change the independent headphone switch when there is any playing stream
The Independent HP switch is on before starting these apps (vlc and
Skype).
Maybe it's because you set it beforehand? The previous mixer state is restored usually upon login or reboot.
Takashi
Well, I verify that the Independent HP mode works just before trying these applications so mixer should be in correct state.
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 necessary change would be likely trivial, so I'm going to implement it tomorrow.
The patch is below, already merged in test/hda-gen-parser branch (and test/hda-migrate and master branch, too), as usual.
Takashi
--- From: Takashi Iwai tiwai@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@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);