From a6cdcd9fee0164f79075063fd163d142a55fcbc5 Mon Sep 17 00:00:00 2001 From: "ling.ma@intel.com" Date: Tue, 16 Jun 2009 16:47:52 +0800 Subject: [PATCH] Set hot plug interrupt to detect HDMI output We detect HDMI output connection status by writing to HOT Plug Interrupt Detect Enable bit in PORT_HOTPLUG_EN. The behavior will generate an specified interrupt, which is caught by audio driver, but during one detection driver set all Detect Enable bits of HDMIB, HDMIC and HDMID, which generate wrong interrupt signals for current output, according to the signals audio driver misunderstand device status. The patch intends to handle corresponding output precisely. It fixed fredesktop bug #21371 Signed-off-by: Ma Ling --- src/i830_hdmi.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/i830_hdmi.c b/src/i830_hdmi.c index 0abb1512..63fc6dc9 100644 --- a/src/i830_hdmi.c +++ b/src/i830_hdmi.c @@ -166,14 +166,22 @@ i830_hdmi_detect(xf86OutputPtr output) temp = INREG(PORT_HOTPLUG_EN); - OUTREG(PORT_HOTPLUG_EN, - temp | - HDMIB_HOTPLUG_INT_EN | - HDMIC_HOTPLUG_INT_EN | - HDMID_HOTPLUG_INT_EN); + switch (dev_priv->output_reg) { + case SDVOB: + temp |= HDMIB_HOTPLUG_INT_EN; + break; + case SDVOC: + temp |= HDMIC_HOTPLUG_INT_EN; + break; + default: + return XF86OutputStatusUnknown; + } + + OUTREG(PORT_HOTPLUG_EN, temp); POSTING_READ(PORT_HOTPLUG_EN); + i830WaitForVblank(pScrn); switch (dev_priv->output_reg) { case SDVOB: bit = HDMIB_HOTPLUG_INT_STATUS;