[PATCH 03/15] drm/ast: Reorganize widescreen test around hardware Gens

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.

Signed-off-by: Thomas Zimmermann <tzimmermann@xxxxxxx>
---
 drivers/gpu/drm/ast/ast_main.c | 47 +++++++++++++++++++++-------------
 1 file changed, 29 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
index 2a813f0128eb8..4f402e0b9b5c1 100644
--- a/drivers/gpu/drm/ast/ast_main.c
+++ b/drivers/gpu/drm/ast/ast_main.c
@@ -40,29 +40,40 @@ static void ast_detect_widescreen(struct ast_device *ast)
 {
 	u8 vgacrd0;
 
-	/* Check if we support wide screen */
-	switch (AST_GEN(ast)) {
-	case 1:
-		ast->support_wide_screen = false;
-		break;
-	default:
+	ast->support_wide_screen = false;
+
+	if (AST_GEN(ast) >= 7) {
+		ast->support_wide_screen = true;
+	} else if (AST_GEN(ast) >= 6) {
+		vgacrd0 = ast_get_index_reg(ast, AST_IO_VGACRI, 0xd0);
+		if (!(vgacrd0 & AST_IO_VGACRD0_VRAM_INIT_BY_BMC))
+			ast->support_wide_screen = true;
+		else if (vgacrd0 & AST_IO_VGACRD0_IKVM_WIDESCREEN)
+			ast->support_wide_screen = true;
+		else if (ast->chip == AST2510)
+			ast->support_wide_screen = true;
+	} else if (AST_GEN(ast) >= 5) {
+		vgacrd0 = ast_get_index_reg(ast, AST_IO_VGACRI, 0xd0);
+		if (!(vgacrd0 & AST_IO_VGACRD0_VRAM_INIT_BY_BMC))
+			ast->support_wide_screen = true;
+		else if (vgacrd0 & AST_IO_VGACRD0_IKVM_WIDESCREEN)
+			ast->support_wide_screen = true;
+		else if (ast->chip == AST1400)
+			ast->support_wide_screen = true;
+	} else if (AST_GEN(ast) >= 4) {
+		vgacrd0 = ast_get_index_reg(ast, AST_IO_VGACRI, 0xd0);
+		if (!(vgacrd0 & AST_IO_VGACRD0_VRAM_INIT_BY_BMC))
+			ast->support_wide_screen = true;
+		else if (vgacrd0 & AST_IO_VGACRD0_IKVM_WIDESCREEN)
+			ast->support_wide_screen = true;
+		else if (ast->chip == AST1300)
+			ast->support_wide_screen = true;
+	} else if (AST_GEN(ast) >= 2) {
 		vgacrd0 = ast_get_index_reg(ast, AST_IO_VGACRI, 0xd0);
 		if (!(vgacrd0 & AST_IO_VGACRD0_VRAM_INIT_BY_BMC))
 			ast->support_wide_screen = true;
 		else if (vgacrd0 & AST_IO_VGACRD0_IKVM_WIDESCREEN)
 			ast->support_wide_screen = true;
-		else {
-			ast->support_wide_screen = false;
-			if (ast->chip == AST1300)
-				ast->support_wide_screen = true;
-			if (ast->chip == AST1400)
-				ast->support_wide_screen = true;
-			if (ast->chip == AST2510)
-				ast->support_wide_screen = true;
-			if (IS_AST_GEN7(ast))
-				ast->support_wide_screen = true;
-		}
-		break;
 	}
 }
 
-- 
2.47.1




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux