summaryrefslogtreecommitdiff
path: root/src/i830_hdmi.c
diff options
context:
space:
mode:
authorZhenyu Wang <zhenyu.z.wang@intel.com>2008-09-19 15:20:55 +0800
committerZhenyu Wang <zhenyu.z.wang@intel.com>2008-09-19 15:20:55 +0800
commit2f93cfbc7e96acc32efb5e1ca49b817a81cba6e3 (patch)
tree92183ce31054f54578156b939c8332acf126dbf9 /src/i830_hdmi.c
parent1fbe4d602816c9dfc5fba917b9fdc257d8d025b0 (diff)
Fix output detection for DVI-I
For CRT this trys to probe all possible port for EDID and detects got confirmed by EDID's d/a type bit. For HDMI/DVI, also using EDID d/a type bit to ensure it should handle the connect or not.
Diffstat (limited to 'src/i830_hdmi.c')
-rw-r--r--src/i830_hdmi.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/i830_hdmi.c b/src/i830_hdmi.c
index d56eec90..44e5c056 100644
--- a/src/i830_hdmi.c
+++ b/src/i830_hdmi.c
@@ -139,6 +139,8 @@ i830_hdmi_detect(xf86OutputPtr output)
struct i830_hdmi_priv *dev_priv = intel_output->dev_priv;
I830Ptr pI830 = I830PTR(pScrn);
uint32_t temp, bit;
+ xf86OutputStatus status;
+ xf86MonPtr edid_mon;
/* For G4X, PEG_BAND_GAP_DATA 3:0 must first be written 0xd.
* Failure to do so will result in spurious interrupts being
@@ -171,9 +173,15 @@ i830_hdmi_detect(xf86OutputPtr output)
}
if ((INREG(PORT_HOTPLUG_STAT) & bit) != 0)
- return XF86OutputStatusConnected;
+ status = XF86OutputStatusConnected;
else
return XF86OutputStatusDisconnected;
+
+ edid_mon = xf86OutputGetEDID (output, intel_output->pDDCBus);
+ if (!edid_mon || !DIGITAL(edid_mon->features.input_type))
+ status = XF86OutputStatusDisconnected;
+ xfree(edid_mon);
+ return status;
}
static void