drm/i915: Do intel_panel_destroy_backlight() later
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Mon, 8 Oct 2018 13:46:40 +0000 (16:46 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 9 Oct 2018 13:32:55 +0000 (16:32 +0300)
Currently we destroy the backlight during connector unregistration.
That means the final modeset performed by drm_atomic_helper_shutdown()
will leave the backlight on. We don't want that so let's just move
intel_panel_destroy_backlight() into intel_panel_fini() which gets
called during connector destuction.

We still unregister the user visible backlight device during connector
unregistration.

Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20181008134641.24868-1-ville.syrjala@linux.intel.com
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106386

drivers/gpu/drm/i915/intel_display.c
drivers/gpu/drm/i915/intel_drv.h
drivers/gpu/drm/i915/intel_panel.c

index 741fc5b4f9d926b061505ff6abe28579ad95f44a..6a7fe89f3145775305f06b5d3e20bb5592bbe8ee 100644 (file)
@@ -15860,7 +15860,6 @@ void intel_connector_unregister(struct drm_connector *connector)
        struct intel_connector *intel_connector = to_intel_connector(connector);
 
        intel_backlight_device_unregister(intel_connector);
-       intel_panel_destroy_backlight(connector);
 }
 
 static void intel_hpd_poll_fini(struct drm_device *dev)
index 7a9f5ee4604fdec187f707aaefd545b83d96c00e..8050d06c722a6cb3415b458baba4e70f7924ca34 100644 (file)
@@ -1904,7 +1904,6 @@ int intel_panel_setup_backlight(struct drm_connector *connector,
 void intel_panel_enable_backlight(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);
-void intel_panel_destroy_backlight(struct drm_connector *connector);
 extern struct drm_display_mode *intel_find_panel_downclock(
                                struct drm_i915_private *dev_priv,
                                struct drm_display_mode *fixed_mode,
index 4a9f139e7b7383c8f244bac833679c3b5302214b..7df9bcd2bb20313b4d706c7219c03d8dd05189e4 100644 (file)
@@ -1814,11 +1814,8 @@ int intel_panel_setup_backlight(struct drm_connector *connector, enum pipe pipe)
        return 0;
 }
 
-void intel_panel_destroy_backlight(struct drm_connector *connector)
+static void intel_panel_destroy_backlight(struct intel_panel *panel)
 {
-       struct intel_connector *intel_connector = to_intel_connector(connector);
-       struct intel_panel *panel = &intel_connector->panel;
-
        /* dispose of the pwm */
        if (panel->backlight.pwm)
                pwm_put(panel->backlight.pwm);
@@ -1923,6 +1920,8 @@ void intel_panel_fini(struct intel_panel *panel)
        struct intel_connector *intel_connector =
                container_of(panel, struct intel_connector, panel);
 
+       intel_panel_destroy_backlight(panel);
+
        if (panel->fixed_mode)
                drm_mode_destroy(intel_connector->base.dev, panel->fixed_mode);