Okay, after waking up and stopped being stupid, I cloned latest alsa-kernel, this however still resulted in your patch failing, but I managed to install it manually.
I still can't run speaker-test with more than 2 channels. (HDMI is card1 now) -- /proc/asound/card1/eld#0.0 monitor_present 1 eld_valid 1 monitor_name connection_type HDMI eld_version [0x0] reserved edid_version [0x0] no CEA EDID Timing Extension block present manufacture_id 0x0 product_id 0x0 port_id 0x0 support_hdcp 0 support_ai 0 audio_sync_delay 0 speakers [0xffff] FL/FR LFE FC RL/RR RC FLC/FRC RLC/RRC FLW/FRW FLH/FRH TC FCH sad_count 0 --
Now monitor is present (which I should add, it also was when I updated to kernel 3.0 without any alsa patch), and there are many more channels, which is probably because due to your patch hardcoding the channel count.
-- codec#0 Codec: ATI R6xx HDMI Address: 0 AFG Function Id: 0x1 (unsol 0) Vendor Id: 0x1002aa01 Subsystem Id: 0x00aa0100 Revision Id: 0x100200 No Modem Function Group found Default PCM: rates [0x70]: 32000 44100 48000 bits [0x2]: 16 formats [0x5]: PCM AC3 Default Amp-In caps: N/A Default Amp-Out caps: N/A GPIO: io=0, o=0, i=0, unsolicited=0, wake=0 Node 0x02 [Audio Output] wcaps 0x201: Stereo Digital Converter: stream=1, channel=0 Digital: Enabled Digital category: 0x0 Node 0x03 [Pin Complex] wcaps 0x400381: Stereo Digital Control: name="IEC958 Playback Con Mask", index=0, device=0 Control: name="IEC958 Playback Pro Mask", index=0, device=0 Control: name="IEC958 Playback Default", index=0, device=0 Control: name="IEC958 Playback Switch", index=0, device=0 Pincap 0x00000094: OUT Detect HDMI Pin Default 0x18560010: [Jack] Digital Out at Int HDMI Conn = Digital, Color = Unknown DefAssociation = 0x1, Sequence = 0x0 Pin-ctls: 0x00: Unsolicited: tag=03, enabled=1 Connection: 1 0x02 --
2011/8/8 Andrée 'Glaucous' glakke1@gmail.com
I'm not quite sure which version (of patch_hdmi.c) you are using, since the patch fails on kernel 3.0-stable.
-- patching file sound/pci/hda/patch_hdmi.c Hunk #1 FAILED at 923. Hunk #2 FAILED at 996. 2 out of 2 hunks FAILED -- saving rejects to file sound/pci/hda/patch_hdmi.c.rej
On 8 August 2011 16:58, Takashi Iwai tiwai@suse.de wrote:
At Mon, 8 Aug 2011 16:43:31 +0200, Andrée 'Glaucous' wrote:
Thanks.
# hda-verb /dev/snd/hwC2D0 0x03 GET_PIN_SENSE 0 nid = 0x3, verb = 0xf09, param = 0x0 value = 0xffffffff
This looks pretty invalid.
With monitor connected and outputting.
So, either codec or the a driver is too lazy to give the info.
Also, looking at your codec proc file, the codec doesn't give the right channel count, too.
What happens with the patch below?
Takashi
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c index 19cb72d..4da81b3 100644 --- a/sound/pci/hda/patch_hdmi.c +++ b/sound/pci/hda/patch_hdmi.c @@ -923,6 +923,7 @@ static void hdmi_present_sense(struct hda_codec *codec, hda_nid_t pin_nid,
memset(eld, 0, sizeof(*eld));
printk(KERN_INFO "XXX HDMI pin_sense = 0x%x\n", present); eld->monitor_present = !!(present & AC_PINSENSE_PRESENCE); if (eld->monitor_present) eld->eld_valid = !!(present & AC_PINSENSE_ELDV);
@@ -996,6 +997,7 @@ static int hdmi_add_cvt(struct hda_codec *codec, hda_nid_t cvt_nid)
chans = get_wcaps(codec, cvt_nid); chans = get_wcaps_channels(chans);
chans = 8; /* XXX */ cvt_idx = spec->num_cvts; per_cvt = &spec->cvts[cvt_idx];