]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/mgag200: Implement struct drm_plane_helper_funcs.atomic_enable
authorThomas Zimmermann <tzimmermann@suse.de>
Thu, 9 Feb 2023 15:41:05 +0000 (16:41 +0100)
committerThomas Zimmermann <tzimmermann@suse.de>
Mon, 20 Feb 2023 14:20:41 +0000 (15:20 +0100)
Enable the primary plane for mgag200 hardware via atomic_enable.
Atomic helpers invoke this callback only when the plane becomes
active.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230209154107.30680-5-tzimmermann@suse.de
drivers/gpu/drm/mgag200/mgag200_drv.h
drivers/gpu/drm/mgag200/mgag200_mode.c

index 9e604dbb8e44820acf3373abb6d4253a5d45cfac..57c7edcab6029a31aac7f28a1281b8a6492cded5 100644 (file)
@@ -375,12 +375,15 @@ int mgag200_primary_plane_helper_atomic_check(struct drm_plane *plane,
                                              struct drm_atomic_state *new_state);
 void mgag200_primary_plane_helper_atomic_update(struct drm_plane *plane,
                                                struct drm_atomic_state *old_state);
+void mgag200_primary_plane_helper_atomic_enable(struct drm_plane *plane,
+                                               struct drm_atomic_state *state);
 void mgag200_primary_plane_helper_atomic_disable(struct drm_plane *plane,
                                                 struct drm_atomic_state *old_state);
 #define MGAG200_PRIMARY_PLANE_HELPER_FUNCS \
        DRM_GEM_SHADOW_PLANE_HELPER_FUNCS, \
        .atomic_check = mgag200_primary_plane_helper_atomic_check, \
        .atomic_update = mgag200_primary_plane_helper_atomic_update, \
+       .atomic_enable = mgag200_primary_plane_helper_atomic_enable, \
        .atomic_disable = mgag200_primary_plane_helper_atomic_disable
 
 #define MGAG200_PRIMARY_PLANE_FUNCS \
index 47e86eadb239aaea1b325ac77572759707a6b5b1..0f2dd26755df98e9052484a5fafd208b645eefa6 100644 (file)
@@ -501,7 +501,6 @@ void mgag200_primary_plane_helper_atomic_update(struct drm_plane *plane,
        struct drm_framebuffer *fb = plane_state->fb;
        struct drm_atomic_helper_damage_iter iter;
        struct drm_rect damage;
-       u8 seq1;
 
        drm_atomic_helper_damage_iter_init(&iter, old_plane_state, plane_state);
        drm_atomic_for_each_plane_damage(&iter, &damage) {
@@ -511,13 +510,19 @@ void mgag200_primary_plane_helper_atomic_update(struct drm_plane *plane,
        /* Always scanout image at VRAM offset 0 */
        mgag200_set_startadd(mdev, (u32)0);
        mgag200_set_offset(mdev, fb);
+}
 
-       if (!old_plane_state->crtc && plane_state->crtc) { // enabling
-               RREG_SEQ(0x01, seq1);
-               seq1 &= ~MGAREG_SEQ1_SCROFF;
-               WREG_SEQ(0x01, seq1);
-               msleep(20);
-       }
+void mgag200_primary_plane_helper_atomic_enable(struct drm_plane *plane,
+                                               struct drm_atomic_state *state)
+{
+       struct drm_device *dev = plane->dev;
+       struct mga_device *mdev = to_mga_device(dev);
+       u8 seq1;
+
+       RREG_SEQ(0x01, seq1);
+       seq1 &= ~MGAREG_SEQ1_SCROFF;
+       WREG_SEQ(0x01, seq1);
+       msleep(20);
 }
 
 void mgag200_primary_plane_helper_atomic_disable(struct drm_plane *plane,