[Intel-gfx] [PATCH v6 5/5] drm/i915: Add lspcon resume function
Imre Deak
imre.deak at intel.com
Mon Oct 17 10:42:52 UTC 2016
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 at intel.com>
Reviewed-by: Imre Deak <imre.deak at 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;
More information about the Intel-gfx
mailing list