ALSA: HDA: Fix DAC assignment for secondary headphone on Sigmatel/IDT
PATCH 1/1 ALSA: HDA: Fix DAC assignment for secondary headphone on Sigmatel/IDT
This patch should be safe enough for 3.2, but do you think it is safe enough for stable as well?
If we run out of DACs when trying to assign a DAC to a secondary headphone, prefer the DAC of the first headphone to the primary (usually line out) DAC.
Signature · 2 lines
David Henningsson, Canonical Ltd. http://launchpad.net/~diwic
Quoted 1 line
From
465121dd0bbb8e5da99b0fd709bfdcd42a4961e9Mon Sep 17 00:00:00 2001
From: David Henningsson <[email protected]>
Date: Wed, 5 Oct 2011 09:49:05 +0200
Subject: [PATCH] ALSA: HDA: Fix DAC assignment for secondary headphone on
Sigmatel/IDT
If we run out of DACs when trying to assign a DAC to a secondary headphone, prefer the DAC of the first headphone to the primary (usually line out) DAC.
--- sound/pci/hda/patch_sigmatel.c | 18 +++++++++++++++--- 1 files changed, 15 insertions(+), 3 deletions(-)
sound/pci/hda/patch_sigmatel.c +15 -3
@@ -2972,8 +2972,9 @@ static int check_all_dac_nids(struct sigmatel_spec *spec, hda_nid_t nid)static hda_nid_t get_unassigned_dac (struct hda_codec *codec,hda_nid_t nid) {struct sigmatel_spec *spec = codec->spec; +struct auto_pin_cfg *cfg = &spec->autocfg;int j, conn_len; -hda_nid_t conn[HDA_MAX_CONNECTIONS ]; +hda_nid_t conn[HDA_MAX_CONNECTIONS ], fallback_dac;unsigned int wcaps, wtype; conn_len = snd_hda_get_connections(codec, nid, conn,
@@ -3001,10 +3002,21 @@ static hda_nid_t get_unassigned_dac(struct hda_codec *codec, hda_nid_t nid)return conn[j]; } } -/* if all DACs are already assigned, connect to the primary DAC */ + +/* if all DACs are already assigned, connect to the primary DAC, +unless we're assigning a secondary headphone */ + fallback_dac = spec->multiout.dac_nids[0 ]; +if (spec->multiout.hp_nid) { +for (j =0 ; j < cfg->hp_outs; j++) +if (cfg->hp_pins[j] == nid) { + fallback_dac = spec->multiout.hp_nid; +break ; + } + } +if (conn_len >1 ) {for (j =0 ; j < conn_len; j++) { -if (conn[j] == spec->multiout.dac_nids[0 ]) { +if (conn[j] == fallback_dac) {snd_hda_codec_write_cache (codec, nid,0 ,AC_VERB_SET_CONNECT_SEL , j);break ;
Signature · 1 line
1.7.5.4
At Wed, 05 Oct 2011 10:00:18 +0200,
Quoted 10 lines · David Henningsson
This patch should be safe enough for 3.2, but do you think it is safe enough for stable as well?
If we run out of DACs when trying to assign a DAC to a secondary headphone, prefer the DAC of the first headphone to the primary (usually line out) DAC.
BugLink http://bugs.launchpad.net/bugs/845275 (there are codec info atthis link as well)
Looks good. Applied now.
Thanks!
Takashi