On Thu, 06 Sep 2012 07:59:52 +0200 Takashi Iwai tiwai@suse.de wrote:
At Wed, 5 Sep 2012 19:22:39 +0200, Pierre Ossman wrote:
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.
I've studied the Intel driver to get some feel for it, and it seems to work like this:
1) The graphics driver gets the EDID data from the GPU.
2) The kernel constructs the ELD structure from the EDID.
3) The graphics driver writes the ELD to some GPU registers.
4) The audio driver reads the ELD via the HDA interface.
But if you're saying that the hardware doesn't really need the ELD, then steps 3-4 could be replaced by a pure software channel. This would be convenient as it is currently unknown how to do 3) on radeon.
(2 is currently missing in the radeon driver, but it is trivial to add AFAICT)
I am a bit confused though. If the hardware doesn't actually look at the ELD, why are the widgets caps not indicating support for 8 channels? Isn't that coming straight from the hardware?
And static_hdmi_pcm is described as "Don't restrict PCM parameters per ELD info", which doesn't seem to be the case as I cannot get more than 2 channels no matter the setting of that parameter.
Rgds