diff options
author | Damien Lespiau <damien.lespiau@intel.com> | 2012-12-13 11:09:03 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-12-14 05:19:34 -0500 |
commit | c36346e302b3a36bfb10b58167b69ab7ac95f10a (patch) | |
tree | a0b27c25dd211faa6763e121afe1aac873898ae6 | |
parent | 577c7a505b5601a9a441039dd37543775f9af8f5 (diff) |
drm/i915: Implement ibx_digital_port_connected() for IBX
CPT+ PCHs have different bit definition to read the HPD live status. I
don't have an ILK with digital ports handy, which is why this patch is
separate from the CPT+ implementation. If the docs don't lie, it should
all be fine though.
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 6adeabda2587..7f1b07c9061d 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -997,22 +997,34 @@ bool ibx_digital_port_connected(struct drm_i915_private *dev_priv, | |||
997 | { | 997 | { |
998 | u32 bit; | 998 | u32 bit; |
999 | 999 | ||
1000 | /* XXX: IBX has different SDEISR bits */ | 1000 | if (HAS_PCH_IBX(dev_priv->dev)) { |
1001 | if (HAS_PCH_IBX(dev_priv->dev)) | 1001 | switch(port->port) { |
1002 | return true; | 1002 | case PORT_B: |
1003 | 1003 | bit = SDE_PORTB_HOTPLUG; | |
1004 | switch(port->port) { | 1004 | break; |
1005 | case PORT_B: | 1005 | case PORT_C: |
1006 | bit = SDE_PORTB_HOTPLUG_CPT; | 1006 | bit = SDE_PORTC_HOTPLUG; |
1007 | break; | 1007 | break; |
1008 | case PORT_C: | 1008 | case PORT_D: |
1009 | bit = SDE_PORTC_HOTPLUG_CPT; | 1009 | bit = SDE_PORTD_HOTPLUG; |
1010 | break; | 1010 | break; |
1011 | case PORT_D: | 1011 | default: |
1012 | bit = SDE_PORTD_HOTPLUG_CPT; | 1012 | return true; |
1013 | break; | 1013 | } |
1014 | default: | 1014 | } else { |
1015 | return true; | 1015 | switch(port->port) { |
1016 | case PORT_B: | ||
1017 | bit = SDE_PORTB_HOTPLUG_CPT; | ||
1018 | break; | ||
1019 | case PORT_C: | ||
1020 | bit = SDE_PORTC_HOTPLUG_CPT; | ||
1021 | break; | ||
1022 | case PORT_D: | ||
1023 | bit = SDE_PORTD_HOTPLUG_CPT; | ||
1024 | break; | ||
1025 | default: | ||
1026 | return true; | ||
1027 | } | ||
1016 | } | 1028 | } |
1017 | 1029 | ||
1018 | return I915_READ(SDEISR) & bit; | 1030 | return I915_READ(SDEISR) & bit; |