Hi,

On 08-01-19 17:08, Maarten Lankhorst 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 <[email protected]>
Cc: Tolga Cakir <[email protected]>
Cc: Basil Eric Rabi <[email protected]>
Cc: Hans de Goede <[email protected]>
Cc: Ville Syrjälä <[email protected]>
Reported-by: Ville Syrjälä <[email protected]>
Signed-off-by: Maarten Lankhorst <[email protected]>

Entire series looks good to me:

Reviewed-by: Hans de Goede <[email protected]>

Regards,

Hans

p.s.

I'll also reply to the other 4 patches to get the Rev-by on all patches in 
patchwork.


---
  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;
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to