|
@@ -1043,7 +1043,10 @@ static u32 ironlake_get_pp_control(struct intel_dp *intel_dp)
|
|
|
static bool _edp_panel_vdd_on(struct intel_dp *intel_dp)
|
|
|
{
|
|
|
struct drm_device *dev = intel_dp_to_dev(intel_dp);
|
|
|
+ struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
|
|
|
+ struct intel_encoder *intel_encoder = &intel_dig_port->base;
|
|
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
|
|
+ enum intel_display_power_domain power_domain;
|
|
|
u32 pp;
|
|
|
u32 pp_stat_reg, pp_ctrl_reg;
|
|
|
bool need_to_disable = !intel_dp->want_panel_vdd;
|
|
@@ -1056,7 +1059,8 @@ static bool _edp_panel_vdd_on(struct intel_dp *intel_dp)
|
|
|
if (edp_have_panel_vdd(intel_dp))
|
|
|
return need_to_disable;
|
|
|
|
|
|
- intel_runtime_pm_get(dev_priv);
|
|
|
+ power_domain = intel_display_port_power_domain(intel_encoder);
|
|
|
+ intel_display_power_get(dev_priv, power_domain);
|
|
|
|
|
|
DRM_DEBUG_KMS("Turning eDP VDD on\n");
|
|
|
|
|
@@ -1103,6 +1107,11 @@ static void edp_panel_vdd_off_sync(struct intel_dp *intel_dp)
|
|
|
WARN_ON(!mutex_is_locked(&dev->mode_config.mutex));
|
|
|
|
|
|
if (!intel_dp->want_panel_vdd && edp_have_panel_vdd(intel_dp)) {
|
|
|
+ struct intel_digital_port *intel_dig_port =
|
|
|
+ dp_to_dig_port(intel_dp);
|
|
|
+ struct intel_encoder *intel_encoder = &intel_dig_port->base;
|
|
|
+ enum intel_display_power_domain power_domain;
|
|
|
+
|
|
|
DRM_DEBUG_KMS("Turning eDP VDD off\n");
|
|
|
|
|
|
pp = ironlake_get_pp_control(intel_dp);
|
|
@@ -1121,7 +1130,8 @@ static void edp_panel_vdd_off_sync(struct intel_dp *intel_dp)
|
|
|
if ((pp & POWER_TARGET_ON) == 0)
|
|
|
intel_dp->last_power_cycle = jiffies;
|
|
|
|
|
|
- intel_runtime_pm_put(dev_priv);
|
|
|
+ power_domain = intel_display_port_power_domain(intel_encoder);
|
|
|
+ intel_display_power_put(dev_priv, power_domain);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1205,8 +1215,11 @@ void intel_edp_panel_on(struct intel_dp *intel_dp)
|
|
|
|
|
|
void intel_edp_panel_off(struct intel_dp *intel_dp)
|
|
|
{
|
|
|
+ struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
|
|
|
+ struct intel_encoder *intel_encoder = &intel_dig_port->base;
|
|
|
struct drm_device *dev = intel_dp_to_dev(intel_dp);
|
|
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
|
|
+ enum intel_display_power_domain power_domain;
|
|
|
u32 pp;
|
|
|
u32 pp_ctrl_reg;
|
|
|
|
|
@@ -1236,7 +1249,8 @@ void intel_edp_panel_off(struct intel_dp *intel_dp)
|
|
|
wait_panel_off(intel_dp);
|
|
|
|
|
|
/* We got a reference when we enabled the VDD. */
|
|
|
- intel_runtime_pm_put(dev_priv);
|
|
|
+ power_domain = intel_display_port_power_domain(intel_encoder);
|
|
|
+ intel_display_power_put(dev_priv, power_domain);
|
|
|
}
|
|
|
|
|
|
void intel_edp_backlight_on(struct intel_dp *intel_dp)
|