@@ -6536,6 +6536,7 @@ intel_dp_detect(struct drm_connector *connector,
struct drm_i915_private *dev_priv = to_i915(connector->dev);
struct intel_dp *intel_dp = intel_attached_dp(to_intel_connector(connector));
struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
+ struct intel_lspcon *lspcon = dp_to_lspcon(intel_dp);
struct intel_encoder *encoder = &dig_port->base;
enum drm_connector_status status;
@@ -6632,9 +6633,13 @@ intel_dp_detect(struct drm_connector *connector,
intel_dp_check_service_irq(intel_dp);
out:
- if (status != connector_status_connected && !intel_dp->is_mst)
+ if (status != connector_status_connected && !intel_dp->is_mst) {
intel_dp_unset_edid(intel_dp);
+ if (lspcon && lspcon->active)
+ lspcon_standby(dp_to_dig_port(intel_dp));
+ }
+
/*
* Make sure the refs for power wells enabled during detect are
* dropped to avoid a new detect cycle triggered by HPD polling.
@@ -550,6 +550,14 @@ static bool lspcon_init(struct intel_digital_port *dig_port)
return true;
}
+void lspcon_standby(struct intel_digital_port *dig_port)
+{
+ struct intel_dp *dp = &dig_port->dp;
+
+ if (drm_dp_dpcd_writeb(&dp->aux, DP_SET_POWER, DP_SET_POWER_D3) <= 0)
+ DRM_DEBUG_KMS("LSPCON failed to write power state to D3\n");
+}
+
void lspcon_resume(struct intel_digital_port *dig_port)
{
struct intel_lspcon *lspcon = &dig_port->lspcon;
@@ -16,6 +16,7 @@ struct intel_encoder;
struct intel_lspcon;
void lspcon_resume(struct intel_digital_port *dig_port);
+void lspcon_standby(struct intel_digital_port *dig_port);
void lspcon_wait_pcon_mode(struct intel_lspcon *lspcon);
void lspcon_write_infoframe(struct intel_encoder *encoder,
const struct intel_crtc_state *crtc_state,
After system boot up, LSPCON will be configured as PCON mode. But it never go into power saving state. Source driver can do the following. Then LSPCON can enter standby mode automatically to save more power. 1. At PCON mode, source driver write 0x2 to DPCD 600h. 2. At LS mode, try to disable DP_DUAL_MODE_TMDS_OEN. v2: fix typo Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: Jani Nikula <jani.nikula@linux.intel.com> Cc: Uma Shankar <uma.shankar@intel.com> Cc: Cooper Chiou <cooper.chiou@intel.com> Cc: Khaled Almahallawy <khaled.almahallawy@intel.com> Signed-off-by: Lee Shawn C <shawn.c.lee@intel.com> --- drivers/gpu/drm/i915/display/intel_dp.c | 7 ++++++- drivers/gpu/drm/i915/display/intel_lspcon.c | 8 ++++++++ drivers/gpu/drm/i915/display/intel_lspcon.h | 1 + 3 files changed, 15 insertions(+), 1 deletion(-)