drm/ast: Cleanup analog init code path
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 4 Sep 2014 07:45:26 +0000 (17:45 +1000)
committerDave Airlie <airlied@redhat.com>
Mon, 15 Sep 2014 01:37:46 +0000 (11:37 +1000)
Move the MMIO mangling to a separate routine and actually
disable the DVO output when using pure analog.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/ast/ast_dp501.c

index 7e2ddde..76f07f3 100644 (file)
@@ -379,11 +379,39 @@ static bool ast_init_dvo(struct drm_device *dev)
        return true;
 }
 
+
+static void ast_init_analog(struct drm_device *dev)
+{
+       struct ast_private *ast = dev->dev_private;
+       u32 data;
+
+       /*
+        * Set DAC source to VGA mode in SCU2C via the P2A
+        * bridge. First configure the P2U to target the SCU
+        * in case it isn't at this stage.
+        */
+       ast_write32(ast, 0xf004, 0x1e6e0000);
+       ast_write32(ast, 0xf000, 0x1);
+
+       /* Then unlock the SCU with the magic password */
+       ast_write32(ast, 0x12000, 0x1688a8a8);
+       ast_write32(ast, 0x12000, 0x1688a8a8);
+       ast_write32(ast, 0x12000, 0x1688a8a8);
+
+       /* Finally, clear bits [17:16] of SCU2c */
+       data = ast_read32(ast, 0x1202c);
+       data &= 0xfffcffff;
+       ast_write32(ast, 0, data);
+
+       /* Disable DVO */
+       ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xa3, 0xcf, 0x00);
+}
+
 void ast_init_3rdtx(struct drm_device *dev)
 {
        struct ast_private *ast = dev->dev_private;
        u8 jreg;
-       u32 data;
+
        if (ast->chip == AST2300 || ast->chip == AST2400) {
                jreg = ast_get_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xd1, 0xff);
                switch (jreg & 0x0e) {
@@ -399,23 +427,8 @@ void ast_init_3rdtx(struct drm_device *dev)
                default:
                        if (ast->tx_chip_type == AST_TX_SIL164)
                                ast_init_dvo(dev);
-                       else {
-                               /*
-                                * Set DAC source to VGA mode in SCU2C via the P2A
-                                * bridge. First configure the P2U to target the SCU
-                                * in case it isn't at this stage.
-                                */
-                               ast_write32(ast, 0xf004, 0x1e6e0000);
-                               ast_write32(ast, 0xf000, 0x1);
-                               /* Then unlock the SCU with the magic password */
-                               ast_write32(ast, 0x12000, 0x1688a8a8);
-                               ast_write32(ast, 0x12000, 0x1688a8a8);
-                               ast_write32(ast, 0x12000, 0x1688a8a8);
-                               /* Finally, clear bits [17:16] of SCU2c */
-                               data = ast_read32(ast, 0x1202c);
-                               data &= 0xfffcffff;
-                               ast_write32(ast, 0, data);
-                       }
+                       else
+                               ast_init_analog(dev);
                }
        }
 }