From 7077964e43cf4367b7b76b0eecca009064e16b31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= Date: Tue, 18 Nov 2014 14:55:57 +0200 Subject: [PATCH] drm/i915: Try to avoid pps_{lock,unlock}() on DP ports MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ville Syrjälä --- drivers/gpu/drm/i915/intel_dp.c | 48 ++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 6421593..0a68672 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -807,17 +807,19 @@ intel_dp_aux_ch(struct intel_dp *intel_dp, uint32_t status; int try, clock = 0; bool has_aux_irq = HAS_AUX_IRQ(dev); - bool vdd; + bool vdd = false; - pps_lock(intel_dp); + if (is_edp(intel_dp)) { + pps_lock(intel_dp); - /* - * We will be called with VDD already enabled for dpcd/edid/oui reads. - * In such cases we want to leave VDD enabled and it's up to upper layers - * to turn it off. But for eg. i2c-dev access we need to turn it on/off - * ourselves. - */ - vdd = edp_panel_vdd_on(intel_dp); + /* + * We will be called with VDD already enabled for dpcd/edid/oui reads. + * In such cases we want to leave VDD enabled and it's up to upper layers + * to turn it off. But for eg. i2c-dev access we need to turn it on/off + * ourselves. + */ + vdd = edp_panel_vdd_on(intel_dp); + } /* dp aux is extremely sensitive to irq latency, hence request the * lowest possible wakeup latency and so prevent the cpu from going into @@ -924,10 +926,12 @@ out: pm_qos_update_request(&dev_priv->pm_qos, PM_QOS_DEFAULT_VALUE); intel_aux_display_runtime_put(dev_priv); - if (vdd) - edp_panel_vdd_off(intel_dp, false); + if (is_edp(intel_dp)) { + if (vdd) + edp_panel_vdd_off(intel_dp, false); - pps_unlock(intel_dp); + pps_unlock(intel_dp); + } return ret; } @@ -2287,18 +2291,22 @@ static void intel_enable_dp(struct intel_encoder *encoder) if (WARN_ON(dp_reg & DP_PORT_EN)) return; - pps_lock(intel_dp); + if (is_edp(intel_dp)) { + pps_lock(intel_dp); - if (IS_VALLEYVIEW(dev)) - vlv_init_panel_power_sequencer(intel_dp); + if (IS_VALLEYVIEW(dev)) + vlv_init_panel_power_sequencer(intel_dp); - intel_dp_enable_port(intel_dp); + intel_dp_enable_port(intel_dp); - edp_panel_vdd_on(intel_dp); - edp_panel_on(intel_dp); - edp_panel_vdd_off(intel_dp, true); + edp_panel_vdd_on(intel_dp); + edp_panel_on(intel_dp); + edp_panel_vdd_off(intel_dp, true); - pps_unlock(intel_dp); + pps_unlock(intel_dp); + } else { + intel_dp_enable_port(intel_dp); + } if (IS_VALLEYVIEW(dev)) vlv_wait_port_ready(dev_priv, dp_to_dig_port(intel_dp)); -- 2.0.4