diff mbox

[1/7] drm/i915: Detect SDVO/HDMI output always based on SDVO_B detection bit

Message ID 1251093029-24392-1-git-send-email-yakui.zhao@intel.com (mailing list archive)
State Accepted
Headers show

Commit Message

Zhao, Yakui Aug. 24, 2009, 5:50 a.m. UTC
From: Ma Ling <ling.ma@intel.com>

After the following commit is shipped, the SDVO C detection will depend on
the SDVO_C/DP detion bit. 
commit 13520b051e8888dd3af9bda639d83e7df76613d1
Author: Kristian Høgsberg <krh@redhat.com>
Date:   Fri Mar 13 15:42:14 2009 -0400

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

In fact it is incorrect. According to the spec we should continue to
detect the SDVO_B/C based on the SDVO_B detection bit.
Of course the detection bit is defined in G4X platform. But it is for
the HDMI_C detection rather than SDVO_C detection.

https://bugs.freedesktop.org/show_bug.cgi?id=20639

Signed-off-by: Ma Ling <ling.ma@intel.com>
Acked-by: Zhao Yakui <yakui.zhao@intel.com>
---
 drivers/gpu/drm/i915/intel_display.c |   18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

Comments

Zhao, Yakui Aug. 24, 2009, 6:10 a.m. UTC | #1
On Mon, 2009-08-24 at 13:50 +0800, yakui.zhao@intel.com wrote:
> From: Ma Ling <ling.ma@intel.com>
> 
> After the following commit is shipped, the SDVO C detection will depend on
> the SDVO_C/DP detion bit. 
> commit 13520b051e8888dd3af9bda639d83e7df76613d1
> Author: Kristian Høgsberg <krh@redhat.com>
> Date:   Fri Mar 13 15:42:14 2009 -0400
> 
>     drm/i915: Read the right SDVO register when detecting SVDO/HDMI.
> 
> In fact it is incorrect. According to the spec we should continue to
> detect the SDVO_B/C based on the SDVO_B detection bit.
> Of course the detection bit is defined in G4X platform. But it is for
> the HDMI_C detection rather than SDVO_C detection.

Hi, Eric
   Will you please pick up this patch set? Several bugs of high priority
are blocked by the patch set(22891/22247).
   1. fix the issue about SDVO C detection on G4x platform (This is a
regression)
   2. Set crtc/clone mask in different output devices. This will be
set in the initialization of every output device. In such case we can
set the crtc/clone mask correctly. And this patch is to avoid that one
pipe is shared by two HDMIs.
   3. Set the TV_format based on connector type(integrated TV)
      When the connector type is S-video/composite, we had better use
the TV format that is for component. And we can get the correct
modeline.
   4. Enable PAL/SCEAM TV and add the property for SDVO TV 
        Add the support of PAL/SCEAM for SDVO TV. At the same time the
property is also added for SDVO TV
   5. Sync about SDVO multiplier on G33 platfom between UMS and KMS
   6. Add the window control property for SDVO-TV. (of course the
brightness/contrast/hue/saturation properties are also added for
SDVO-TV). This is realized by using the picture enhancements SDVO
command.
   7. Add the brightness property for SDVO-LVDS. When the brightness
enhancement is supported for SDVO-LVDS, we will add the property for it.

Thanks.
   Yakui
  
> 
> https://bugs.freedesktop.org/show_bug.cgi?id=20639
> 
> Signed-off-by: Ma Ling <ling.ma@intel.com>
> Acked-by: Zhao Yakui <yakui.zhao@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c |   18 +++++++++---------
>  1 file changed, 9 insertions(+), 9 deletions(-)
> 
> Index: linux-2.6/drivers/gpu/drm/i915/intel_display.c
> ===================================================================
> --- linux-2.6.orig/drivers/gpu/drm/i915/intel_display.c	2009-08-21 16:30:34.000000000 +0800
> +++ linux-2.6/drivers/gpu/drm/i915/intel_display.c	2009-08-21 16:31:41.000000000 +0800
> @@ -3218,30 +3218,30 @@
>  			intel_dp_init(dev, PCH_DP_D);
>  
>  	} else if (IS_I9XX(dev)) {
> -		int found;
> -		u32 reg;
> +		bool found = false;
>  
>  		if (I915_READ(SDVOB) & SDVO_DETECTED) {
>  			found = intel_sdvo_init(dev, SDVOB);
>  			if (!found && SUPPORTS_INTEGRATED_HDMI(dev))
>  				intel_hdmi_init(dev, SDVOB);
> +
>  			if (!found && SUPPORTS_INTEGRATED_DP(dev))
>  				intel_dp_init(dev, DP_B);
>  		}
>  
>  		/* 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) {
> +		if (I915_READ(SDVOB) & SDVO_DETECTED)
>  			found = intel_sdvo_init(dev, SDVOC);
> -			if (!found && SUPPORTS_INTEGRATED_HDMI(dev))
> +
> +		if (!found && (I915_READ(SDVOC) & SDVO_DETECTED)) {
> +
> +			if (SUPPORTS_INTEGRATED_HDMI(dev))
>  				intel_hdmi_init(dev, SDVOC);
> -			if (!found && SUPPORTS_INTEGRATED_DP(dev))
> +			if (SUPPORTS_INTEGRATED_DP(dev))
>  				intel_dp_init(dev, DP_C);
>  		}
> +
>  		if (SUPPORTS_INTEGRATED_DP(dev) && (I915_READ(DP_D) & DP_DETECTED))
>  			intel_dp_init(dev, DP_D);
>  	} else
diff mbox

Patch

Index: linux-2.6/drivers/gpu/drm/i915/intel_display.c
===================================================================
--- linux-2.6.orig/drivers/gpu/drm/i915/intel_display.c	2009-08-21 16:30:34.000000000 +0800
+++ linux-2.6/drivers/gpu/drm/i915/intel_display.c	2009-08-21 16:31:41.000000000 +0800
@@ -3218,30 +3218,30 @@ 
 			intel_dp_init(dev, PCH_DP_D);
 
 	} else if (IS_I9XX(dev)) {
-		int found;
-		u32 reg;
+		bool found = false;
 
 		if (I915_READ(SDVOB) & SDVO_DETECTED) {
 			found = intel_sdvo_init(dev, SDVOB);
 			if (!found && SUPPORTS_INTEGRATED_HDMI(dev))
 				intel_hdmi_init(dev, SDVOB);
+
 			if (!found && SUPPORTS_INTEGRATED_DP(dev))
 				intel_dp_init(dev, DP_B);
 		}
 
 		/* 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) {
+		if (I915_READ(SDVOB) & SDVO_DETECTED)
 			found = intel_sdvo_init(dev, SDVOC);
-			if (!found && SUPPORTS_INTEGRATED_HDMI(dev))
+
+		if (!found && (I915_READ(SDVOC) & SDVO_DETECTED)) {
+
+			if (SUPPORTS_INTEGRATED_HDMI(dev))
 				intel_hdmi_init(dev, SDVOC);
-			if (!found && SUPPORTS_INTEGRATED_DP(dev))
+			if (SUPPORTS_INTEGRATED_DP(dev))
 				intel_dp_init(dev, DP_C);
 		}
+
 		if (SUPPORTS_INTEGRATED_DP(dev) && (I915_READ(DP_D) & DP_DETECTED))
 			intel_dp_init(dev, DP_D);
 	} else