[alsa-devel] HD-audio regression after commit 34588709af61be1550b4e2bcee5c85d0ac4f34d4
Raymond Yau
superquad.vortex2 at gmail.com
Mon Jan 14 04:42:23 CET 2013
>
> Commit identified in the subject (ALSA: HDA - Add Independent Headphone
for
> all models of ad1988/ad1989) causes problem with audio on at least two
Asus
> boards and is still present in current kernel. The boards on which this
> problem is seen are Asus M3A79-T DELUXE and Asus Rampage II Gene (actually
> a slightly modified version used in Asus CG5290 desktop).
>
> The symptoms:
> 1. XFCE and Gnome2 audio mixers crash whenever sound is started or
stopped.
> The error message is:
> simple_none.c:1350: get_enum_item_ops: Assertion `helem' failed.
This is caused by the active access flag of independent headphone control
static void activate_ctl(struct hda_codec *codec, const char *name, int
active)
{
struct snd_kcontrol *ctl = snd_hda_find_mixer_ctl(codec, name);
if (ctl) {
- ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_INACTIVE;
- ctl->vd[0].access |= active ? 0 :
- SNDRV_CTL_ELEM_ACCESS_INACTIVE;
ctl->vd[0].access &= ~SNDRV_CTL_ELEM_ACCESS_WRITE;
ctl->vd[0].access |= active ?
SNDRV_CTL_ELEM_ACCESS_WRITE : 0;
snd_ctl_notify(codec->bus->card,
SNDRV_CTL_EVENT_MASK_INFO, &ctl->id);
}
}
>
> 2. On one of the boards (Asus M3A79-T DELUXE) the mixer control labels are
> misconfigured since muting the Master channel does not turn the sound off.
For model=auto
It is bug of hda parser which put node 0x1a in speaker out pin when the
pincap only support input
Your need either
ignore this node in hda parser or
Ignore the node as speaker when pincap is INPUT in patch_analog.c
/* add playback controls for speaker and HP outputs */
static int ad1988_auto_create_extra_out(struct hda_codec *codec, hda_nid_t
pin,
const char *pfx)
{
struct ad198x_spec *spec = codec->spec;
hda_nid_t nid;
int i, idx, err;
char name[32];
if (! pin)
return 0;
+
+ if ((snd_hda_query_pin_caps(codec, pin) & AC_PINCTL_OUT_EN) == 0)
+ return 0;
+
idx = ad1988_pin_idx(pin);
nid = ad1988_idx_to_dac(codec, idx);
Node 0x1a [Pin Complex] wcaps 0x400000: Mono
Pincap 0x00000020: IN
Pin Default 0x911711f0: [Fixed] Speaker at Int Rear
Conn = Analog, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN
Node 0x03 [Audio Output] wcaps 0x405: Stereo Amp-Out
Control: name="Speaker Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Control: name="Headphone Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Amp-Out caps: ofs=0x27, nsteps=0x27, stepsize=0x05, mute=0
Amp-Out vals: [0x1e 0x1e]
Converter: stream=0, channel=0
Power states: D0 D3
Power: setting=D0, actual=D0
Node 0x22 [Audio Mixer] wcaps 0x200103: Stereo Amp-In
Control: name="Speaker Playback Switch", index=0, device=0
ControlAmp: chs=3, dir=In, idx=2, ofs=0
Control: name="Headphone Playback Switch", index=0, device=0
ControlAmp: chs=3, dir=In, idx=2, ofs=0
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x00 0x00] [0x00 0x00]
Connection: 2
0x37 0x21
> Either Master is mislabeled or it does not work correctly.
>
> Other than that, the sound actually works fine, but it is very annoying
> when mixer keeps crashing. Reverting to kernel just before the commit
fixes
> these issues. Thus it appears that the commit
> 34588709af61be1550b4e2bcee5c85d0ac4f34d4 breaks autodetect for these
> boards. A workaround is to force the 6stack-dig model and this fixes
> problems on both boards, but, of course, it would be preferred if things
> work out of the box.
>
If possible try the proposed generic hda parser from sound-unstable.git
http://mailman.alsa-project.org/pipermail/alsa-devel/2013-January/058330.html
http://mailman.alsa-project.org/pipermail/alsa-devel/2013-January/058367.html
>
> Alsa-info for both boards can be found below.
>
Model=auto does not include headphone as slave of virtual master , the
volume of headphone and line out jacks are controlled independently since
you can play different streams to headphone and line out jacks (multi
stream playback)
May need dynamically inlcude/exclude headphone play volume and switch as
slave of the virtual master controls
Do you need to include HDMI playback volume as slave of the virtual master
volume ?
Can HDMI and SPDIF work independently since there are two digital audio
output convertor and the number of SDO of hda controller is 4 ?
Node 0x1b [Pin Complex] wcaps 0x40030d: Stereo Digital Amp-Out
Control: name="IEC958 Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Amp-Out caps: ofs=0x27, nsteps=0x27, stepsize=0x05, mute=1
Amp-Out vals: [0x00 0x00]
Pincap 0x00000010: OUT
Pin Default 0x0145f1a0: [Jack] SPDIF Out at Ext Rear
Conn = Optical, Color = Other
DefAssociation = 0xa, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x40: OUT
Connection: 1
0x02
Node 0x1d [Pin Complex] wcaps 0x40030d: Stereo Digital Amp-Out
Control: name="HDMI Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Amp-Out caps: ofs=0x27, nsteps=0x27, stepsize=0x05, mute=1
Amp-Out vals: [0x00 0x00]
Pincap 0x00000010: OUT
Pin Default 0x1856f1b0: [Jack] Digital Out at Int HDMI
Conn = Digital, Color = Other
DefAssociation = 0xb, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x40: OUT
Connection: 1
0x0b
For 6stack-dig
Thus model create digital capture even when there is no spdif in pin
complex
Node 0x07 [Audio Input] wcaps 0x130391: Stereo Digital
Control: name="IEC958 Capture Switch", index=0, device=0
Control: name="IEC958 Capture Default", index=0, device=0
Device: name="AD198x Digital", type="SPDIF", device=1
Converter: stream=0, channel=0
SDI-Select: 0
Digital:
Digital category: 0x0
PCM:
rates [0x7e0]: 44100 48000 88200 96000 176400 192000
bits [0xe]: 16 20 24
formats [0x5]: PCM AC3
Unsolicited: tag=00, enabled=0
Delay: 3 samples
Connection: 1
0x1c
Node 0x1c [Pin Complex] wcaps 0x40020b: Stereo Digital Amp-In
Amp-In caps: ofs=0x17, nsteps=0x1f, stepsize=0x05, mute=1
Amp-In vals: [0x97 0x97]
Pincap 0x00000020: IN
Pin Default 0x41c5f160: [N/A] SPDIF In at Ext Rear
Conn = Optical, Color = Other
DefAssociation = 0x6, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN
> Results of alsa-info
>
> Asus Rampage II Gene:
>
> Before the commit: http://pastebin.com/gCZurk6D
> After the commit (autodetect): http://pastebin.com/3hNX2g1c
> After the commit (6stack_dig model): http://pastebin.com/dL0UGeTW
>
> More recent kernel:
> 3.6.11-gentoo (autodetect): http://pastebin.com/0gjnhYA2
> 3.6.11-gentoo (6stack_dig model): http://pastebin.com/K9bsWBWW
>
> Asus M3A79-T DELUXE
>
> Before the commit: http://pastebin.com/hyUBmpDL
> After the commit (autodetect) : http://pastebin.com/gzGg60bM
> After the commit (6stack_dig model): http://pastebin.com/y88jCMhM
More information about the Alsa-devel
mailing list