aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_dp.c
diff options
context:
space:
mode:
authorPaulo Zanoni <paulo.r.zanoni@intel.com>2014-03-07 18:05:20 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-03-18 11:31:35 -0400
commit849e39f5d7e52eb44d37bbd5ce695f7cdcbe923c (patch)
tree4333d9b36f650605c228498b3ad1f8f7a668879d /drivers/gpu/drm/i915/intel_dp.c
parenta95f6a007042e76627d9722cb1a81f97c718f74b (diff)
drm/i915: properly disable the VDD when disabling the panel
Commit b3064154dfd37deb386b1e459c54e1ca2460b3d5 tried to revert commit dff392dbd258381a6c3164f38420593f2d291e3b, but wasn't complete, which resulted in regressions on Haswell. So this commit should fix b3064154dfd37deb386b1e459c54e1ca2460b3d5 by undoing what it did and providing an actual complete revert of dff392dbd258381a6c3164f38420593f2d291e3b. Fixes regression introduced by: commit b3064154dfd37deb386b1e459c54e1ca2460b3d5 Author: Patrik Jakobsson <patrik.r.jakobsson@gmail.com> Date: Tue Mar 4 00:42:44 2014 +0100 drm/i915: Don't just say it, actually force edp vdd Testcase: igt/pm_pc8 Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Tested-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp.c')
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index d2b2f51f839f..a76406b3b610 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -91,7 +91,6 @@ static struct intel_dp *intel_attached_dp(struct drm_connector *connector)
91} 91}
92 92
93static void intel_dp_link_down(struct intel_dp *intel_dp); 93static void intel_dp_link_down(struct intel_dp *intel_dp);
94static void edp_panel_vdd_on(struct intel_dp *intel_dp);
95static void edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync); 94static void edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync);
96 95
97static int 96static int
@@ -1162,7 +1161,7 @@ static u32 ironlake_get_pp_control(struct intel_dp *intel_dp)
1162 return control; 1161 return control;
1163} 1162}
1164 1163
1165static void edp_panel_vdd_on(struct intel_dp *intel_dp) 1164void edp_panel_vdd_on(struct intel_dp *intel_dp)
1166{ 1165{
1167 struct drm_device *dev = intel_dp_to_dev(intel_dp); 1166 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1168 struct drm_i915_private *dev_priv = dev->dev_private; 1167 struct drm_i915_private *dev_priv = dev->dev_private;
@@ -1338,11 +1337,16 @@ void intel_edp_panel_off(struct intel_dp *intel_dp)
1338 1337
1339 pp_ctrl_reg = _pp_ctrl_reg(intel_dp); 1338 pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
1340 1339
1340 intel_dp->want_panel_vdd = false;
1341
1341 I915_WRITE(pp_ctrl_reg, pp); 1342 I915_WRITE(pp_ctrl_reg, pp);
1342 POSTING_READ(pp_ctrl_reg); 1343 POSTING_READ(pp_ctrl_reg);
1343 1344
1344 intel_dp->last_power_cycle = jiffies; 1345 intel_dp->last_power_cycle = jiffies;
1345 wait_panel_off(intel_dp); 1346 wait_panel_off(intel_dp);
1347
1348 /* We got a reference when we enabled the VDD. */
1349 intel_runtime_pm_put(dev_priv);
1346} 1350}
1347 1351
1348void intel_edp_backlight_on(struct intel_dp *intel_dp) 1352void intel_edp_backlight_on(struct intel_dp *intel_dp)
@@ -1880,7 +1884,6 @@ static void intel_disable_dp(struct intel_encoder *encoder)
1880 intel_edp_backlight_off(intel_dp); 1884 intel_edp_backlight_off(intel_dp);
1881 intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF); 1885 intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF);
1882 intel_edp_panel_off(intel_dp); 1886 intel_edp_panel_off(intel_dp);
1883 edp_panel_vdd_off(intel_dp, true);
1884 1887
1885 /* cpu edp my only be disable _after_ the cpu pipe/plane is disabled. */ 1888 /* cpu edp my only be disable _after_ the cpu pipe/plane is disabled. */
1886 if (!(port == PORT_A || IS_VALLEYVIEW(dev))) 1889 if (!(port == PORT_A || IS_VALLEYVIEW(dev)))