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.sha...@intel.com>

Reviewed-by: Imre Deak <imre.d...@intel.com>

> ---
>  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@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to