Browse Source

drm/i915: Read the right SDVO register when detecting SVDO/HDMI.

This fixes incorrect detection of the second SDVO/HDMI output on G4X, and
extra boot time on pre-G4X.

Signed-off-by: Kristian Høgsberg <krh@redhat.com>
Signed-off-by: Eric Anholt <eric@anholt.net>
Kristian Høgsberg 16 years ago
parent
commit
13520b051e
1 changed files with 9 additions and 1 deletions
  1. 9 1
      drivers/gpu/drm/i915/intel_display.c

+ 9 - 1
drivers/gpu/drm/i915/intel_display.c

@@ -1735,13 +1735,21 @@ static void intel_setup_outputs(struct drm_device *dev)
 
 
 	if (IS_I9XX(dev)) {
 	if (IS_I9XX(dev)) {
 		int found;
 		int found;
+		u32 reg;
 
 
 		if (I915_READ(SDVOB) & SDVO_DETECTED) {
 		if (I915_READ(SDVOB) & SDVO_DETECTED) {
 			found = intel_sdvo_init(dev, SDVOB);
 			found = intel_sdvo_init(dev, SDVOB);
 			if (!found && SUPPORTS_INTEGRATED_HDMI(dev))
 			if (!found && SUPPORTS_INTEGRATED_HDMI(dev))
 				intel_hdmi_init(dev, SDVOB);
 				intel_hdmi_init(dev, SDVOB);
 		}
 		}
-		if (!IS_G4X(dev) || (I915_READ(SDVOB) & SDVO_DETECTED)) {
+
+		/* Before G4X SDVOC doesn't have its own detect register */
+		if (IS_G4X(dev))
+			reg = SDVOC;
+		else
+			reg = SDVOB;
+
+		if (I915_READ(reg) & SDVO_DETECTED) {
 			found = intel_sdvo_init(dev, SDVOC);
 			found = intel_sdvo_init(dev, SDVOC);
 			if (!found && SUPPORTS_INTEGRATED_HDMI(dev))
 			if (!found && SUPPORTS_INTEGRATED_HDMI(dev))
 				intel_hdmi_init(dev, SDVOC);
 				intel_hdmi_init(dev, SDVOC);