]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
drm/mipi-dbi: Remove ->enabled
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 12 Jun 2020 16:00:55 +0000 (18:00 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 24 Jun 2020 07:17:34 +0000 (09:17 +0200)
The atomic helpers try really hard to not lose track of things,
duplicating enabled tracking in the driver is at best confusing.
Double-enabling or disabling is a bug in atomic helpers.

In the fb_dirty function we can just assume that the fb always exists,
simple display pipe helpers guarantee that the crtc is only enabled
together with the output, so we always have a primary plane around.

Now in the update function we need to be a notch more careful, since
that can also get called when the crtc is off. And we don't want to
upload frames when that's the case, so filter that out too.

Reviewed-by: Noralf Trønnes <noralf@tronnes.org>
Acked-by: David Lechner <david@lechnology.com>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: David Lechner <david@lechnology.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200612160056.2082681-7-daniel.vetter@ffwll.ch
drivers/gpu/drm/drm_mipi_dbi.c
drivers/gpu/drm/tiny/ili9225.c
drivers/gpu/drm/tiny/st7586.c
include/drm/drm_mipi_dbi.h

index fd8d672972a9d736ed6bf1df6576b7ed941255a8..79532b9a324aa9bd247a6e8e1b373756fadfd66d 100644 (file)
@@ -268,7 +268,7 @@ static void mipi_dbi_fb_dirty(struct drm_framebuffer *fb, struct drm_rect *rect)
        bool full;
        void *tr;
 
-       if (!dbidev->enabled)
+       if (WARN_ON(!fb))
                return;
 
        if (!drm_dev_enter(fb->dev, &idx))
@@ -314,6 +314,9 @@ void mipi_dbi_pipe_update(struct drm_simple_display_pipe *pipe,
        struct drm_plane_state *state = pipe->plane.state;
        struct drm_rect rect;
 
+       if (!pipe->crtc.state->active)
+               return;
+
        if (drm_atomic_helper_damage_merged(old_state, state, &rect))
                mipi_dbi_fb_dirty(state->fb, &rect);
 }
@@ -325,9 +328,8 @@ EXPORT_SYMBOL(mipi_dbi_pipe_update);
  * @crtc_state: CRTC state
  * @plane_state: Plane state
  *
- * This function sets &mipi_dbi->enabled, flushes the whole framebuffer and
- * enables the backlight. Drivers can use this in their
- * &drm_simple_display_pipe_funcs->enable callback.
+ * Flushes the whole framebuffer and enables the backlight. Drivers can use this
+ * in their &drm_simple_display_pipe_funcs->enable callback.
  *
  * Note: Drivers which don't use mipi_dbi_pipe_update() because they have custom
  * framebuffer flushing, can't use this function since they both use the same
@@ -349,7 +351,6 @@ void mipi_dbi_enable_flush(struct mipi_dbi_dev *dbidev,
        if (!drm_dev_enter(&dbidev->drm, &idx))
                return;
 
-       dbidev->enabled = true;
        mipi_dbi_fb_dirty(fb, &rect);
        backlight_enable(dbidev->backlight);
 
@@ -390,13 +391,8 @@ void mipi_dbi_pipe_disable(struct drm_simple_display_pipe *pipe)
 {
        struct mipi_dbi_dev *dbidev = drm_to_mipi_dbi_dev(pipe->crtc.dev);
 
-       if (!dbidev->enabled)
-               return;
-
        DRM_DEBUG_KMS("\n");
 
-       dbidev->enabled = false;
-
        if (dbidev->backlight)
                backlight_disable(dbidev->backlight);
        else
index 16400064320f390df0c2c40caee82fb1340577e3..97a77262d7915c1762ee6d5efb3d57c442f073ce 100644 (file)
@@ -89,9 +89,6 @@ static void ili9225_fb_dirty(struct drm_framebuffer *fb, struct drm_rect *rect)
        bool full;
        void *tr;
 
-       if (!dbidev->enabled)
-               return;
-
        if (!drm_dev_enter(fb->dev, &idx))
                return;
 
@@ -167,6 +164,9 @@ static void ili9225_pipe_update(struct drm_simple_display_pipe *pipe,
        struct drm_plane_state *state = pipe->plane.state;
        struct drm_rect rect;
 
+       if (!pipe->crtc.state->active)
+               return;
+
        if (drm_atomic_helper_damage_merged(old_state, state, &rect))
                ili9225_fb_dirty(state->fb, &rect);
 }
@@ -275,7 +275,6 @@ static void ili9225_pipe_enable(struct drm_simple_display_pipe *pipe,
 
        ili9225_command(dbi, ILI9225_DISPLAY_CONTROL_1, 0x1017);
 
-       dbidev->enabled = true;
        ili9225_fb_dirty(fb, &rect);
 out_exit:
        drm_dev_exit(idx);
@@ -295,16 +294,11 @@ static void ili9225_pipe_disable(struct drm_simple_display_pipe *pipe)
         * unplug.
         */
 
-       if (!dbidev->enabled)
-               return;
-
        ili9225_command(dbi, ILI9225_DISPLAY_CONTROL_1, 0x0000);
        msleep(50);
        ili9225_command(dbi, ILI9225_POWER_CONTROL_2, 0x0007);
        msleep(50);
        ili9225_command(dbi, ILI9225_POWER_CONTROL_1, 0x0a02);
-
-       dbidev->enabled = false;
 }
 
 static int ili9225_dbi_command(struct mipi_dbi *dbi, u8 *cmd, u8 *par,
index 1311e5df87211cc512711a6570a4a165bb9ce9f4..d05de03891f8224cec0aebbf09f748124cd25adb 100644 (file)
@@ -118,9 +118,6 @@ static void st7586_fb_dirty(struct drm_framebuffer *fb, struct drm_rect *rect)
        struct mipi_dbi *dbi = &dbidev->dbi;
        int start, end, idx, ret = 0;
 
-       if (!dbidev->enabled)
-               return;
-
        if (!drm_dev_enter(fb->dev, &idx))
                return;
 
@@ -161,6 +158,9 @@ static void st7586_pipe_update(struct drm_simple_display_pipe *pipe,
        struct drm_plane_state *state = pipe->plane.state;
        struct drm_rect rect;
 
+       if (!pipe->crtc.state->active)
+               return;
+
        if (drm_atomic_helper_damage_merged(old_state, state, &rect))
                st7586_fb_dirty(state->fb, &rect);
 }
@@ -237,7 +237,6 @@ static void st7586_pipe_enable(struct drm_simple_display_pipe *pipe,
 
        msleep(100);
 
-       dbidev->enabled = true;
        st7586_fb_dirty(fb, &rect);
 
        mipi_dbi_command(dbi, MIPI_DCS_SET_DISPLAY_ON);
@@ -258,11 +257,7 @@ static void st7586_pipe_disable(struct drm_simple_display_pipe *pipe)
 
        DRM_DEBUG_KMS("\n");
 
-       if (!dbidev->enabled)
-               return;
-
        mipi_dbi_command(&dbidev->dbi, MIPI_DCS_SET_DISPLAY_OFF);
-       dbidev->enabled = false;
 }
 
 static const u32 st7586_formats[] = {
index 4d0e49c0ed2cf2efa11a61a9026689b800236dea..c2827ceaba0d2b4bd6829e75a9f18b5fd5a8888f 100644 (file)
@@ -94,11 +94,6 @@ struct mipi_dbi_dev {
         */
        struct drm_display_mode mode;
 
-       /**
-        * @enabled: Pipeline is enabled
-        */
-       bool enabled;
-
        /**
         * @tx_buf: Buffer used for transfer (copy clip rect area)
         */