On pe, 2016-10-14 at 19:56 +0530, Shashank Sharma wrote: > As per the software design, we are driving lspcon in > PCON mode. But while resuming from suspend, lspcon can go > in LS mode (which is its default operating mode on power on) > > This patch adds a resume function for lspcon, which makes sure > its operating in PCON mode, post resume. > > V2: Address review comments from Imre > - move lspcon_resume call to encoder->reset() > - use early returns > > Signed-off-by: Shashank Sharma <shashank.sharma@xxxxxxxxx> Reviewed-by: Imre Deak <imre.deak@xxxxxxxxx> > --- > drivers/gpu/drm/i915/intel_dp.c | 7 ++++++- > drivers/gpu/drm/i915/intel_drv.h | 1 + > drivers/gpu/drm/i915/intel_lspcon.c | 8 ++++++++ > 3 files changed, 15 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/intel_dp.c > b/drivers/gpu/drm/i915/intel_dp.c > index bc03f61..25f4060 100644 > --- a/drivers/gpu/drm/i915/intel_dp.c > +++ b/drivers/gpu/drm/i915/intel_dp.c > @@ -4755,11 +4755,16 @@ static void > intel_edp_panel_vdd_sanitize(struct intel_dp *intel_dp) > void intel_dp_encoder_reset(struct drm_encoder *encoder) > { > struct drm_i915_private *dev_priv = to_i915(encoder->dev); > - struct intel_dp *intel_dp = enc_to_intel_dp(encoder); > + struct intel_digital_port *intel_dig_port = > enc_to_dig_port(encoder); > + struct intel_lspcon *lspcon = &intel_dig_port->lspcon; > + struct intel_dp *intel_dp = &intel_dig_port->dp; > > if (!HAS_DDI(dev_priv)) > intel_dp->DP = I915_READ(intel_dp->output_reg); > > + if (IS_GEN9(dev_priv) && lspcon->active) > + lspcon_resume(lspcon); > + > if (to_intel_encoder(encoder)->type != INTEL_OUTPUT_EDP) > return; > > diff --git a/drivers/gpu/drm/i915/intel_drv.h > b/drivers/gpu/drm/i915/intel_drv.h > index abff78f..0d0de3a 100644 > --- a/drivers/gpu/drm/i915/intel_drv.h > +++ b/drivers/gpu/drm/i915/intel_drv.h > @@ -1850,4 +1850,5 @@ void intel_color_load_luts(struct > drm_crtc_state *crtc_state); > > /* intel_lspcon.c */ > bool lspcon_init(struct intel_digital_port *intel_dig_port); > +void lspcon_resume(struct intel_lspcon *lspcon); > #endif /* __INTEL_DRV_H__ */ > diff --git a/drivers/gpu/drm/i915/intel_lspcon.c > b/drivers/gpu/drm/i915/intel_lspcon.c > index 628ae6fb..d606f1a 100644 > --- a/drivers/gpu/drm/i915/intel_lspcon.c > +++ b/drivers/gpu/drm/i915/intel_lspcon.c > @@ -89,6 +89,14 @@ static bool lspcon_probe(struct intel_lspcon > *lspcon) > return true; > } > > +void lspcon_resume(struct intel_lspcon *lspcon) > +{ > + if (lspcon_change_mode(lspcon, DRM_LSPCON_MODE_PCON, true)) > + DRM_ERROR("LSPCON resume failed\n"); > + else > + DRM_DEBUG_KMS("LSPCON resume success\n"); > +} > + > bool lspcon_init(struct intel_digital_port *intel_dig_port) > { > struct intel_dp *dp = &intel_dig_port->dp; _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx