summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Zimmermann <tzimmermann@suse.de>2025-01-31 10:21:04 +0100
committerThomas Zimmermann <tzimmermann@suse.de>2025-02-03 14:01:06 +0100
commit1bb3f70c418f8ac51a9f19b1f0fe6ddd889794e3 (patch)
treeb151cddf1a5fc40af975b9db53e26b037374e763
parent219c6a4a6f6eada64773bc250cc02c60b5358278 (diff)
drm/ast: Reorganize widescreen test around hardware Gens
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
-rw-r--r--drivers/gpu/drm/ast/ast_main.c54
1 files changed, 32 insertions, 22 deletions
diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
index 1cfbe404e5a0..93ae9a275c96 100644
--- a/drivers/gpu/drm/ast/ast_main.c
+++ b/drivers/gpu/drm/ast/ast_main.c
@@ -36,33 +36,43 @@
#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;
}
}