]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/mgag200: vga-bmc: Control BMC scanout from encoder
authorThomas Zimmermann <tzimmermann@suse.de>
Mon, 5 Aug 2024 13:06:00 +0000 (15:06 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Fri, 9 Aug 2024 06:13:47 +0000 (08:13 +0200)
Move calls to stop and start BMC scanout from CRTC helpers to the
VGA-BMC encoder's atomic_disable and atomic_enable. Makes the BMC
scanout transparent to the CRTC.

DRM's atomic helpers call an encoder's atomic_disable and atomic_enable
helpers for all enabled encoders. The BMC stops scanning out the VGA
signal if modeset disables the VGA encoder, and starts scanning out
if the modeset enables the VGA encoder.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240805130622.63458-5-tzimmermann@suse.de
drivers/gpu/drm/mgag200/mgag200_g200er.c
drivers/gpu/drm/mgag200/mgag200_g200ev.c
drivers/gpu/drm/mgag200/mgag200_g200se.c
drivers/gpu/drm/mgag200/mgag200_mode.c
drivers/gpu/drm/mgag200/mgag200_vga_bmc.c

index e0f7816ad87a86f4ad8226686ca1ceb95f179ebd..b99b308a7e5454b06356ad5a17d13683edd5752e 100644 (file)
@@ -207,9 +207,6 @@ static void mgag200_g200er_crtc_helper_atomic_enable(struct drm_crtc *crtc,
 
        mgag200_enable_display(mdev);
 
-       if (mdev->info->sync_bmc)
-               mgag200_bmc_start_scanout(mdev);
-
        drm_crtc_vblank_on(crtc);
 }
 
index a2c683f82127eef347e2c9a2f2ea925ab9eee169..717e4357adcca3937e2dd9b2e3bf6d6f85683ca6 100644 (file)
@@ -208,9 +208,6 @@ static void mgag200_g200ev_crtc_helper_atomic_enable(struct drm_crtc *crtc,
 
        mgag200_enable_display(mdev);
 
-       if (mdev->info->sync_bmc)
-               mgag200_bmc_start_scanout(mdev);
-
        drm_crtc_vblank_on(crtc);
 }
 
index b83f3f31ed0e6335d2b63f8b3c916642f3afa7db..0db7e14e3328d067b55898596e09717d0a8a13d8 100644 (file)
@@ -339,9 +339,6 @@ static void mgag200_g200se_crtc_helper_atomic_enable(struct drm_crtc *crtc,
 
        mgag200_enable_display(mdev);
 
-       if (mdev->info->sync_bmc)
-               mgag200_bmc_start_scanout(mdev);
-
        drm_crtc_vblank_on(crtc);
 }
 
index 8dc16821e1cd6a4983c914b46b365b5fa6911b0d..7159909aca1eb6581daa621b0829d7c51c040e13 100644 (file)
@@ -693,9 +693,6 @@ void mgag200_crtc_helper_atomic_enable(struct drm_crtc *crtc, struct drm_atomic_
 
        mgag200_enable_display(mdev);
 
-       if (mdev->info->sync_bmc)
-               mgag200_bmc_start_scanout(mdev);
-
        drm_crtc_vblank_on(crtc);
 }
 
@@ -705,9 +702,6 @@ void mgag200_crtc_helper_atomic_disable(struct drm_crtc *crtc, struct drm_atomic
 
        drm_crtc_vblank_off(crtc);
 
-       if (mdev->info->sync_bmc)
-               mgag200_bmc_stop_scanout(mdev);
-
        mgag200_disable_display(mdev);
 }
 
index 77340f2dee17598c7fa6a7a002e304dd11438ea5..a5a3ac108bd5bc2882fb1c34d16ab87888ee76ea 100644 (file)
@@ -8,6 +8,24 @@
 #include "mgag200_ddc.h"
 #include "mgag200_drv.h"
 
+static void mgag200_vga_bmc_encoder_atomic_disable(struct drm_encoder *encoder,
+                                                  struct drm_atomic_state *state)
+{
+       struct mga_device *mdev = to_mga_device(encoder->dev);
+
+       if (mdev->info->sync_bmc)
+               mgag200_bmc_stop_scanout(mdev);
+}
+
+static void mgag200_vga_bmc_encoder_atomic_enable(struct drm_encoder *encoder,
+                                                 struct drm_atomic_state *state)
+{
+       struct mga_device *mdev = to_mga_device(encoder->dev);
+
+       if (mdev->info->sync_bmc)
+               mgag200_bmc_start_scanout(mdev);
+}
+
 static int mgag200_vga_bmc_encoder_atomic_check(struct drm_encoder *encoder,
                                                struct drm_crtc_state *new_crtc_state,
                                                struct drm_connector_state *new_connector_state)
@@ -21,6 +39,8 @@ static int mgag200_vga_bmc_encoder_atomic_check(struct drm_encoder *encoder,
 }
 
 static const struct drm_encoder_helper_funcs mgag200_dac_encoder_helper_funcs = {
+       .atomic_disable = mgag200_vga_bmc_encoder_atomic_disable,
+       .atomic_enable = mgag200_vga_bmc_encoder_atomic_enable,
        .atomic_check = mgag200_vga_bmc_encoder_atomic_check,
 };