On Tue, 08 Jan 2019, Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> wrote: > Restore our saved values for backlight. This way even with fastset on > S4 resume we will correctly restore the backlight to the active values. > > Changes since v1: > - Call enable_backlight() when backlight.level is set. On suspend > backlight.enabled is always cleared, this makes it not a good > indicator. Also check for crtc->state->active. > Changes since v2: > - Use the new update_pipe() callback to run this on resume as well. > > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> > Cc: Tolga Cakir <cevelnet@xxxxxxxxx> > Cc: Basil Eric Rabi <ericbasil.rabi@xxxxxxxxx> > Cc: Hans de Goede <jwrdegoede@xxxxxxxxxxxxxxxxx> > Cc: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > Reported-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> Reviewed-by: Jani Nikula <jani.nikula@xxxxxxxxx> > --- > drivers/gpu/drm/i915/icl_dsi.c | 1 + > drivers/gpu/drm/i915/intel_ddi.c | 2 ++ > drivers/gpu/drm/i915/intel_dp.c | 1 + > drivers/gpu/drm/i915/intel_drv.h | 3 ++ > drivers/gpu/drm/i915/intel_lvds.c | 1 + > drivers/gpu/drm/i915/intel_panel.c | 49 +++++++++++++++++++++++------- > drivers/gpu/drm/i915/vlv_dsi.c | 1 + > 7 files changed, 47 insertions(+), 11 deletions(-) > > diff --git a/drivers/gpu/drm/i915/icl_dsi.c b/drivers/gpu/drm/i915/icl_dsi.c > index 4dd793b78996..3f92881600c5 100644 > --- a/drivers/gpu/drm/i915/icl_dsi.c > +++ b/drivers/gpu/drm/i915/icl_dsi.c > @@ -1378,6 +1378,7 @@ void icl_dsi_init(struct drm_i915_private *dev_priv) > encoder->disable = gen11_dsi_disable; > encoder->port = port; > encoder->get_config = gen11_dsi_get_config; > + encoder->update_pipe = intel_panel_update_backlight; > encoder->compute_config = gen11_dsi_compute_config; > encoder->get_hw_state = gen11_dsi_get_hw_state; > encoder->type = INTEL_OUTPUT_DSI; > diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c > index 2d6ed990a232..d32865dc44e8 100644 > --- a/drivers/gpu/drm/i915/intel_ddi.c > +++ b/drivers/gpu/drm/i915/intel_ddi.c > @@ -3548,6 +3548,8 @@ static void intel_ddi_update_pipe_dp(struct intel_encoder *encoder, > > intel_psr_enable(intel_dp, crtc_state); > intel_edp_drrs_enable(intel_dp, crtc_state); > + > + intel_panel_update_backlight(encoder, crtc_state, conn_state); > } > > static void intel_ddi_update_pipe(struct intel_encoder *encoder, > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c > index 62fd11540942..0cbacdc70b07 100644 > --- a/drivers/gpu/drm/i915/intel_dp.c > +++ b/drivers/gpu/drm/i915/intel_dp.c > @@ -6981,6 +6981,7 @@ bool intel_dp_init(struct drm_i915_private *dev_priv, > intel_encoder->compute_config = intel_dp_compute_config; > intel_encoder->get_hw_state = intel_dp_get_hw_state; > intel_encoder->get_config = intel_dp_get_config; > + intel_encoder->update_pipe = intel_panel_update_backlight; > intel_encoder->suspend = intel_dp_encoder_suspend; > if (IS_CHERRYVIEW(dev_priv)) { > intel_encoder->pre_pll_enable = chv_dp_pre_pll_enable; > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h > index 1a11c2beb7f3..0a6fb42e2086 100644 > --- a/drivers/gpu/drm/i915/intel_drv.h > +++ b/drivers/gpu/drm/i915/intel_drv.h > @@ -2023,6 +2023,9 @@ int intel_panel_setup_backlight(struct drm_connector *connector, > enum pipe pipe); > void intel_panel_enable_backlight(const struct intel_crtc_state *crtc_state, > const struct drm_connector_state *conn_state); > +void intel_panel_update_backlight(struct intel_encoder *encoder, > + const struct intel_crtc_state *crtc_state, > + const struct drm_connector_state *conn_state); > void intel_panel_disable_backlight(const struct drm_connector_state *old_conn_state); > extern struct drm_display_mode *intel_find_panel_downclock( > struct drm_i915_private *dev_priv, > diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c > index b85e195f7c8a..189693b4c5e8 100644 > --- a/drivers/gpu/drm/i915/intel_lvds.c > +++ b/drivers/gpu/drm/i915/intel_lvds.c > @@ -909,6 +909,7 @@ void intel_lvds_init(struct drm_i915_private *dev_priv) > } > intel_encoder->get_hw_state = intel_lvds_get_hw_state; > intel_encoder->get_config = intel_lvds_get_config; > + intel_encoder->update_pipe = intel_panel_update_backlight; > intel_connector->get_hw_state = intel_connector_get_hw_state; > > intel_connector_attach_encoder(intel_connector, intel_encoder); > diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c > index ee3e0842d542..f71b33cf1c97 100644 > --- a/drivers/gpu/drm/i915/intel_panel.c > +++ b/drivers/gpu/drm/i915/intel_panel.c > @@ -1087,20 +1087,11 @@ static void pwm_enable_backlight(const struct intel_crtc_state *crtc_state, > intel_panel_actually_set_backlight(conn_state, panel->backlight.level); > } > > -void intel_panel_enable_backlight(const struct intel_crtc_state *crtc_state, > - const struct drm_connector_state *conn_state) > +static void __intel_panel_enable_backlight(const struct intel_crtc_state *crtc_state, > + const struct drm_connector_state *conn_state) > { > struct intel_connector *connector = to_intel_connector(conn_state->connector); > - struct drm_i915_private *dev_priv = to_i915(connector->base.dev); > struct intel_panel *panel = &connector->panel; > - enum pipe pipe = to_intel_crtc(crtc_state->base.crtc)->pipe; > - > - if (!panel->backlight.present) > - return; > - > - DRM_DEBUG_KMS("pipe %c\n", pipe_name(pipe)); > - > - mutex_lock(&dev_priv->backlight_lock); > > WARN_ON(panel->backlight.max == 0); > > @@ -1117,6 +1108,24 @@ void intel_panel_enable_backlight(const struct intel_crtc_state *crtc_state, > panel->backlight.enabled = true; > if (panel->backlight.device) > panel->backlight.device->props.power = FB_BLANK_UNBLANK; > +} > + > +void intel_panel_enable_backlight(const struct intel_crtc_state *crtc_state, > + const struct drm_connector_state *conn_state) > +{ > + struct intel_connector *connector = to_intel_connector(conn_state->connector); > + struct drm_i915_private *dev_priv = to_i915(connector->base.dev); > + struct intel_panel *panel = &connector->panel; > + enum pipe pipe = to_intel_crtc(crtc_state->base.crtc)->pipe; > + > + if (!panel->backlight.present) > + return; > + > + DRM_DEBUG_KMS("pipe %c\n", pipe_name(pipe)); > + > + mutex_lock(&dev_priv->backlight_lock); > + > + __intel_panel_enable_backlight(crtc_state, conn_state); > > mutex_unlock(&dev_priv->backlight_lock); > } > @@ -1773,6 +1782,24 @@ static int pwm_setup_backlight(struct intel_connector *connector, > return 0; > } > > +void intel_panel_update_backlight(struct intel_encoder *encoder, > + const struct intel_crtc_state *crtc_state, > + const struct drm_connector_state *conn_state) > +{ > + struct intel_connector *connector = to_intel_connector(conn_state->connector); > + struct drm_i915_private *dev_priv = to_i915(connector->base.dev); > + struct intel_panel *panel = &connector->panel; > + > + if (!panel->backlight.present) > + return; > + > + mutex_lock(&dev_priv->backlight_lock); > + if (!panel->backlight.enabled) > + __intel_panel_enable_backlight(crtc_state, conn_state); > + > + mutex_unlock(&dev_priv->backlight_lock); > +} > + > int intel_panel_setup_backlight(struct drm_connector *connector, enum pipe pipe) > { > struct drm_i915_private *dev_priv = to_i915(connector->dev); > diff --git a/drivers/gpu/drm/i915/vlv_dsi.c b/drivers/gpu/drm/i915/vlv_dsi.c > index 361e962a7969..3dcf7ddca032 100644 > --- a/drivers/gpu/drm/i915/vlv_dsi.c > +++ b/drivers/gpu/drm/i915/vlv_dsi.c > @@ -1689,6 +1689,7 @@ void vlv_dsi_init(struct drm_i915_private *dev_priv) > intel_encoder->post_disable = intel_dsi_post_disable; > intel_encoder->get_hw_state = intel_dsi_get_hw_state; > intel_encoder->get_config = intel_dsi_get_config; > + intel_encoder->update_pipe = intel_panel_update_backlight; > > intel_connector->get_hw_state = intel_connector_get_hw_state; -- Jani Nikula, Intel Open Source Graphics Center _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx