]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/ast: Reorganize widescreen test around hardware Gens
authorThomas Zimmermann <tzimmermann@suse.de>
Fri, 31 Jan 2025 09:21:04 +0000 (10:21 +0100)
committerThomas Zimmermann <tzimmermann@suse.de>
Mon, 3 Feb 2025 13:01:06 +0000 (14:01 +0100)
Testing for support of widescreen modes mixes up various hardware
Gens. First branch by hardware Gen, then do specific tests for each
Gen. By default, widesscreen support is disabled.

Later patches will add more specific tests for each Gen.

v2:
- move shared detection code into helper (Jocelyn)

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250131092257.115596-5-tzimmermann@suse.de
drivers/gpu/drm/ast/ast_main.c

index 1cfbe404e5a0af24e29825f2bed899294ae5d609..93ae9a275c9604111e3e58afd9d0b0e0187def6a 100644 (file)
 
 #include "ast_drv.h"
 
+/* Try to detect WSXGA+ on Gen2+ */
+static bool __ast_2100_detect_wsxga_p(struct ast_device *ast)
+{
+       u8 vgacrd0 = ast_get_index_reg(ast, AST_IO_VGACRI, 0xd0);
+
+       if (!(vgacrd0 & AST_IO_VGACRD0_VRAM_INIT_BY_BMC))
+               return true;
+       if (vgacrd0 & AST_IO_VGACRD0_IKVM_WIDESCREEN)
+               return true;
+
+       return false;
+}
+
 static void ast_detect_widescreen(struct ast_device *ast)
 {
-       u8 vgacrd0;
+       ast->support_wsxga_p = false;
 
-       /* Check if we support wide screen */
-       switch (AST_GEN(ast)) {
-       case 1:
-               ast->support_wsxga_p = false;
-               break;
-       default:
-               vgacrd0 = ast_get_index_reg(ast, AST_IO_VGACRI, 0xd0);
-               if (!(vgacrd0 & AST_IO_VGACRD0_VRAM_INIT_BY_BMC))
+       if (AST_GEN(ast) >= 7) {
+               ast->support_wsxga_p = true;
+       } else if (AST_GEN(ast) >= 6) {
+               if (__ast_2100_detect_wsxga_p(ast))
                        ast->support_wsxga_p = true;
-               else if (vgacrd0 & AST_IO_VGACRD0_IKVM_WIDESCREEN)
+               else if (ast->chip == AST2510)
+                       ast->support_wsxga_p = true;
+       } else if (AST_GEN(ast) >= 5) {
+               if (__ast_2100_detect_wsxga_p(ast))
+                       ast->support_wsxga_p = true;
+               else if (ast->chip == AST1400)
+                       ast->support_wsxga_p = true;
+       } else if (AST_GEN(ast) >= 4) {
+               if (__ast_2100_detect_wsxga_p(ast))
+                       ast->support_wsxga_p = true;
+               else if (ast->chip == AST1300)
+                       ast->support_wsxga_p = true;
+       } else if (AST_GEN(ast) >= 2) {
+               if (__ast_2100_detect_wsxga_p(ast))
                        ast->support_wsxga_p = true;
-               else {
-                       ast->support_wsxga_p = false;
-                       if (ast->chip == AST1300)
-                               ast->support_wsxga_p = true;
-                       if (ast->chip == AST1400)
-                               ast->support_wsxga_p = true;
-                       if (ast->chip == AST2510)
-                               ast->support_wsxga_p = true;
-                       if (IS_AST_GEN7(ast))
-                               ast->support_wsxga_p = true;
-               }
-               break;
        }
 }