[Intel-gfx] [PATCH v5] drm/i915: pass ELD to HDMI/DP audio driver
Wu Fengguang
fengguang.wu at intel.com
Wed Nov 9 07:59:53 CET 2011
Hi Christopher,
I don't find anything wrong with the ELD parsing code, however I do
find a bug that prevented ELD from being passed to the audio driver on
SandyBridge.
I just posted the fix. For your convenience, it's attached in this
email too.
Thanks,
Fengguang
On Fri, Oct 28, 2011 at 03:57:23AM +0800, Christopher White wrote:
> There appears to be some issues with the patch? I'm on SandyBridge and
> using the HD3000's HDMI.
>
> I've now tried manually merging the ELD patch (both files Wu Fengguang
> submitted) and compiling Kernel 3.0.4. I've also tried drm-intel-next
> Kernel 3.1 pre-built from
> http://kernel.ubuntu.com/~kernel-ppa/mainline/drm-intel-next/current/ as
> I knew it was built from keithp's latest drm-intel-next repository.
>
> Both of these methods had the patch applied, yet neither were able to
> read the ELD correctly from my Onkyo TX-SR607 receiver.
>
> If I manually dump the EDID from my receiver and analyze it with Monitor
> Asset Manager (by EnTech Taiwan), it shows that the ELD contains an 8
> channel specification up to 192 kHz, and that's what's being exposed
> over HDMI to the Intel graphics adapter, yet this isn't detected. It
> just plain isn't being read, and is falling back to the default 2ch
> 16kHz configuration. It's exactly as it was in the past, before this
> patch attempt.
>
> You can see my 256 byte EDID dump, straight from the receiver, over at:
> http://www.pulseforce.com/node/edid.dump
>
> It shows exactly what the receiver is exposing over HDMI, proving that
> it's not the device that's at fault.
>
> Any ideas what's wrong? Here's the HDMI messages from the startup log:
>
> HDMI status: Pin=7 Presence_Detect=1 ELD_Valid=1
> HDMI: detected monitor at connection type HDMI
> HDMI: available speakers: FL/FR
> HDMI: supports coding type LPCM: channels = 2, rates = 44100 48000
> 88200, bits = 16
> HDMI hot plug event: Pin=7 Presence_Detect=1 ELD_Valid=1
> HDMI status: Pin=7 Presence_Detect=1 ELD_Valid=1
> input: HDA Intel PCH HDMI/DP as
> /devices/pci0000:00/0000:00:1b.0/sound/card0/input9
> HDMI: detected monitor at connection type HDMI
> HDMI: available speakers: FL/FR
> HDMI: supports coding type LPCM: channels = 2, rates = 44100 48000
> 88200, bits = 16
> HDMI hot plug event: Pin=7 Presence_Detect=1 ELD_Valid=1
> HDMI status: Pin=7 Presence_Detect=1 ELD_Valid=1
> HDMI: detected monitor at connection type HDMI
> HDMI: available speakers: FL/FR
> HDMI: supports coding type LPCM: channels = 2, rates = 44100 48000
> 88200, bits = 16
>
>
>
> Christopher White
-------------- next part --------------
Subject: drm/i915: fix ELD writing for SandyBridge
Date: Wed Nov 09 13:17:14 CST 2011
SandyBridge should be using the same register addresses as IvyBridge.
Signed-off-by: Wu Fengguang <fengguang.wu at intel.com>
---
drivers/gpu/drm/i915/i915_reg.h | 6 +++---
drivers/gpu/drm/i915/intel_display.c | 10 +++++-----
2 files changed, 8 insertions(+), 8 deletions(-)
--- linux.orig/drivers/gpu/drm/i915/i915_reg.h 2011-11-09 13:17:19.000000000 +0800
+++ linux/drivers/gpu/drm/i915/i915_reg.h 2011-11-09 13:18:39.000000000 +0800
@@ -3543,8 +3543,8 @@
#define GEN5_ELD_VALIDB (1 << 0)
#define GEN5_CP_READYB (1 << 1)
-#define GEN7_HDMIW_HDMIEDID_A 0xE5050
-#define GEN7_AUD_CNTRL_ST_A 0xE50B4
-#define GEN7_AUD_CNTRL_ST2 0xE50C0
+#define GEN6_HDMIW_HDMIEDID_A 0xE5050
+#define GEN6_AUD_CNTL_ST_A 0xE50B4
+#define GEN6_AUD_CNTRL_ST2 0xE50C0
#endif /* _I915_REG_H_ */
--- linux.orig/drivers/gpu/drm/i915/intel_display.c 2011-11-09 13:19:28.000000000 +0800
+++ linux/drivers/gpu/drm/i915/intel_display.c 2011-11-09 13:20:02.000000000 +0800
@@ -5857,14 +5857,14 @@ static void ironlake_write_eld(struct dr
int aud_cntl_st;
int aud_cntrl_st2;
- if (IS_IVYBRIDGE(connector->dev)) {
- hdmiw_hdmiedid = GEN7_HDMIW_HDMIEDID_A;
- aud_cntl_st = GEN7_AUD_CNTRL_ST_A;
- aud_cntrl_st2 = GEN7_AUD_CNTRL_ST2;
- } else {
+ if (IS_GEN5(connector->dev)) {
hdmiw_hdmiedid = GEN5_HDMIW_HDMIEDID_A;
aud_cntl_st = GEN5_AUD_CNTL_ST_A;
aud_cntrl_st2 = GEN5_AUD_CNTL_ST2;
+ } else {
+ hdmiw_hdmiedid = GEN6_HDMIW_HDMIEDID_A;
+ aud_cntl_st = GEN6_AUD_CNTL_ST_A;
+ aud_cntrl_st2 = GEN6_AUD_CNTRL_ST2;
}
i = to_intel_crtc(crtc)->pipe;
More information about the Intel-gfx
mailing list