[alsa-devel] [PATCH 1/2] ALSA: hda - Fix phantom jacks on VT1708
The VT1708 has no unsol event capability, and polling is set using the "Jack Detect" alsamixer control. In order not to create phantom Jack controls, temporary enable jackpoll during build_controls.
Signed-off-by: David Henningsson david.henningsson@canonical.com --- sound/pci/hda/patch_via.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c index 9641c0e..d46c448 100644 --- a/sound/pci/hda/patch_via.c +++ b/sound/pci/hda/patch_via.c @@ -661,6 +661,17 @@ static int via_init(struct hda_codec *codec) return 0; }
+static int vt1708_build_controls(struct hda_codec *codec) +{ + /* In order not to create "Phantom Jack" controls, + temporary enable jackpoll */ + int old_interval = codec->jackpoll_interval; + codec->jackpoll_interval = msecs_to_jiffies(100); + err = via_build_controls(codec); + codec->jackpoll_interval = old_interval; + return err; +} + static int vt1708_build_pcms(struct hda_codec *codec) { struct via_spec *spec = codec->spec; @@ -723,6 +734,7 @@ static int patch_vt1708(struct hda_codec *codec) spec->init_verbs[spec->num_iverbs++] = vt1708_init_verbs;
codec->patch_ops = via_patch_ops; + codec->patch_ops.build_controls = vt1708_build_controls; codec->patch_ops.build_pcms = vt1708_build_pcms;
/* clear jackpoll_interval again; it's set dynamically */
These days, GUIs such as Gnome sound settings want to be able to show the correct jack status even when no streams are currently running. I doubt this gives any measurable difference in power, but if it does, the "Jack Detect" control can still be used to turn polling off.
Signed-off-by: David Henningsson david.henningsson@canonical.com --- sound/pci/hda/patch_via.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c index d46c448..914ffc6 100644 --- a/sound/pci/hda/patch_via.c +++ b/sound/pci/hda/patch_via.c @@ -217,8 +217,7 @@ static void vt1708_update_hp_work(struct hda_codec *codec) struct via_spec *spec = codec->spec; if (spec->codec_type != VT1708 || !spec->gen.autocfg.hp_outs) return; - if (spec->vt1708_jack_detect && - (spec->gen.active_streams || hp_detect_with_aa(codec))) { + if (spec->vt1708_jack_detect) { if (!spec->hp_work_active) { codec->jackpoll_interval = msecs_to_jiffies(100); snd_hda_codec_write(codec, 0x1, 0, 0xf81, 0);
participants (1)
-
David Henningsson