diff options
author | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2015-05-05 10:17:36 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2015-05-21 17:22:01 -0400 |
commit | 3c65d1d1bb92ea959e8bce3eeae90fe5c3daa58a (patch) | |
tree | e72379927a76eb4328b1d98e407696e73acf5c12 /drivers/gpu/drm/i915/intel_sdvo.c | |
parent | a4790cec3adf5eec91f397b1884706a71c70730f (diff) |
drm/i915: Disable SDVO port after the pipe on PCH platforms
While at it also remove the redundant/unneeded w/a like done for hdmi
already.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
[danvet: Mention that this also removes the unneeded w/a, as suggested
by Jesse.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_sdvo.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_sdvo.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c index 4a876914f212..d24ef75596a1 100644 --- a/drivers/gpu/drm/i915/intel_sdvo.c +++ b/drivers/gpu/drm/i915/intel_sdvo.c | |||
@@ -1465,6 +1465,15 @@ static void intel_disable_sdvo(struct intel_encoder *encoder) | |||
1465 | } | 1465 | } |
1466 | } | 1466 | } |
1467 | 1467 | ||
1468 | static void pch_disable_sdvo(struct intel_encoder *encoder) | ||
1469 | { | ||
1470 | } | ||
1471 | |||
1472 | static void pch_post_disable_sdvo(struct intel_encoder *encoder) | ||
1473 | { | ||
1474 | intel_disable_sdvo(encoder); | ||
1475 | } | ||
1476 | |||
1468 | static void intel_enable_sdvo(struct intel_encoder *encoder) | 1477 | static void intel_enable_sdvo(struct intel_encoder *encoder) |
1469 | { | 1478 | { |
1470 | struct drm_device *dev = encoder->base.dev; | 1479 | struct drm_device *dev = encoder->base.dev; |
@@ -1477,14 +1486,9 @@ static void intel_enable_sdvo(struct intel_encoder *encoder) | |||
1477 | bool success; | 1486 | bool success; |
1478 | 1487 | ||
1479 | temp = I915_READ(intel_sdvo->sdvo_reg); | 1488 | temp = I915_READ(intel_sdvo->sdvo_reg); |
1480 | if ((temp & SDVO_ENABLE) == 0) { | 1489 | temp |= SDVO_ENABLE; |
1481 | /* HW workaround for IBX, we need to move the port | 1490 | intel_sdvo_write_sdvox(intel_sdvo, temp); |
1482 | * to transcoder A before disabling it, so restore it here. */ | ||
1483 | if (HAS_PCH_IBX(dev)) | ||
1484 | temp |= SDVO_PIPE_SEL(intel_crtc->pipe); | ||
1485 | 1491 | ||
1486 | intel_sdvo_write_sdvox(intel_sdvo, temp | SDVO_ENABLE); | ||
1487 | } | ||
1488 | for (i = 0; i < 2; i++) | 1492 | for (i = 0; i < 2; i++) |
1489 | intel_wait_for_vblank(dev, intel_crtc->pipe); | 1493 | intel_wait_for_vblank(dev, intel_crtc->pipe); |
1490 | 1494 | ||
@@ -2987,7 +2991,12 @@ bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, bool is_sdvob) | |||
2987 | } | 2991 | } |
2988 | 2992 | ||
2989 | intel_encoder->compute_config = intel_sdvo_compute_config; | 2993 | intel_encoder->compute_config = intel_sdvo_compute_config; |
2990 | intel_encoder->disable = intel_disable_sdvo; | 2994 | if (HAS_PCH_SPLIT(dev)) { |
2995 | intel_encoder->disable = pch_disable_sdvo; | ||
2996 | intel_encoder->post_disable = pch_post_disable_sdvo; | ||
2997 | } else { | ||
2998 | intel_encoder->disable = intel_disable_sdvo; | ||
2999 | } | ||
2991 | intel_encoder->pre_enable = intel_sdvo_pre_enable; | 3000 | intel_encoder->pre_enable = intel_sdvo_pre_enable; |
2992 | intel_encoder->enable = intel_enable_sdvo; | 3001 | intel_encoder->enable = intel_enable_sdvo; |
2993 | intel_encoder->get_hw_state = intel_sdvo_get_hw_state; | 3002 | intel_encoder->get_hw_state = intel_sdvo_get_hw_state; |