[alsa-devel] HDMI LPCM (7.1) with AMD/FGLRX

Andrée 'Glaucous' glakke1 at gmail.com
Tue Aug 9 00:13:24 CEST 2011


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 at 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 at 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];
>>
>
>


More information about the Alsa-devel mailing list