At Wed, 5 Sep 2012 19:22:39 +0200, Pierre Ossman wrote:
On Wed, 05 Sep 2012 18:39:01 +0200 Takashi Iwai tiwai@suse.de wrote:
At Wed, 5 Sep 2012 18:19:23 +0200, Pierre Ossman wrote:
Noone with any insight? I'm ready to do some leg work, but I couldn't find anything in either the HDA specification, or the AMD documentation. :/
Well, HD-audio HDMI codec driver just extracts the available channel setup from the given ELD, and the ELD data is sent from the graphics driver. So, if anything missing in ELD, it's supposed to be in the graphics driver side. In other words, if ELD doesn't give 6 channels, HD-audio codec won't follow that channel setup, too.
I see. I got a bit confused by this code though:
/* Restrict capabilities by ELD if this isn't disabled */ if (!static_hdmi_pcm && eld->eld_valid) {
Which made me think that the ELD was just used to make sure you didn't send something the other end couldn't handle. IOW, eld_valid == false would give you all features the hw was capable off.
Some follow up questions, to confirm I haven't confused things:
- The ELD really needs to go into the hardware, not just end up in the hands of the audio driver? IOW, we cannot override this?
Usually ELD won't go to the hardware as is but translated in a different way in the graphics side.
- The HDA interface only defines reading the ELD, so writing it would have to be done by the graphics driver using some GPU interface?
Yes.
If so, I need to poke the AMD guys as I couldn't find any information in the public documentation about writing the ELD.
It's not about "writing" ELD. If you got no valid ELD, it is the graphics driver who didn't send it. The graphics hardware certainly sends some audio information, and the graphics driver translates into an ELD and notifies to the audio codec. This part is missing or wrongly done, supposedly.
Takashi
Thanks
-- Pierre Ossman
WARNING: This correspondence is being monitored by FRA, a Swedish intelligence agency. Make sure your server uses encryption for SMTP traffic and consider using PGP for end-to-end encryption.