At Mon, 14 Jan 2013 13:31:22 +0100, Manolo DÃaz wrote:
El lun, 14 ene 2013 a las 11:42 horas Raymond Yau escribió:
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:
- 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); }
}
- 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);
No. Doing those insertions and deletions mixer crashes are still here but I have no headphone control and headphone doesn't sound in auto model.
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.htm...
I've tried to patch it, but this is what's happened (linux stable 3.7.2):
patching file sound/pci/hda/hda_generic.c Hunk #1 FAILED at 41. Hunk #2 FAILED at 1485. Hunk #3 FAILED at 2905. Hunk #4 FAILED at 3057. Hunk #5 succeeded at 1086 with fuzz 2 (offset -1994 lines). Hunk #6 FAILED at 3192. Hunk #7 FAILED at 3209. 6 out of 7 hunks FAILED -- saving rejects to file sound/pci/hda/hda_generic.c.rej can't find file to patch at input line 187 Perhaps you used the wrong -p or --strip option? The text leading up to this was:
|diff --git a/sound/pci/hda/hda_generic.h b/sound/pci/hda/hda_generic.h |index 85d138f..5c1569c 100644 |--- a/sound/pci/hda/hda_generic.h |+++ b/sound/pci/hda/hda_generic.h
What sources is supposed should we patch?
You need to apply over 100 patches :)
Takashi