diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2014-09-04 03:45:26 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2014-09-14 21:37:46 -0400 |
commit | 37b9b81f3074ce35fadf64d321b79292494220d1 (patch) | |
tree | 986e82be706d31e7774444fe76fe613b6e7a3d5e /drivers/gpu/drm/ast | |
parent | 42fb1427443b8a72a3c07efa14d53c63d324cba8 (diff) |
drm/ast: Cleanup analog init code path
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>
Diffstat (limited to 'drivers/gpu/drm/ast')
-rw-r--r-- | drivers/gpu/drm/ast/ast_dp501.c | 49 |
1 files changed, 31 insertions, 18 deletions
diff --git a/drivers/gpu/drm/ast/ast_dp501.c b/drivers/gpu/drm/ast/ast_dp501.c index 7e2ddde474e3..76f07f38b941 100644 --- a/drivers/gpu/drm/ast/ast_dp501.c +++ b/drivers/gpu/drm/ast/ast_dp501.c | |||
@@ -379,11 +379,39 @@ static bool ast_init_dvo(struct drm_device *dev) | |||
379 | return true; | 379 | return true; |
380 | } | 380 | } |
381 | 381 | ||
382 | |||
383 | static void ast_init_analog(struct drm_device *dev) | ||
384 | { | ||
385 | struct ast_private *ast = dev->dev_private; | ||
386 | u32 data; | ||
387 | |||
388 | /* | ||
389 | * Set DAC source to VGA mode in SCU2C via the P2A | ||
390 | * bridge. First configure the P2U to target the SCU | ||
391 | * in case it isn't at this stage. | ||
392 | */ | ||
393 | ast_write32(ast, 0xf004, 0x1e6e0000); | ||
394 | ast_write32(ast, 0xf000, 0x1); | ||
395 | |||
396 | /* Then unlock the SCU with the magic password */ | ||
397 | ast_write32(ast, 0x12000, 0x1688a8a8); | ||
398 | ast_write32(ast, 0x12000, 0x1688a8a8); | ||
399 | ast_write32(ast, 0x12000, 0x1688a8a8); | ||
400 | |||
401 | /* Finally, clear bits [17:16] of SCU2c */ | ||
402 | data = ast_read32(ast, 0x1202c); | ||
403 | data &= 0xfffcffff; | ||
404 | ast_write32(ast, 0, data); | ||
405 | |||
406 | /* Disable DVO */ | ||
407 | ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xa3, 0xcf, 0x00); | ||
408 | } | ||
409 | |||
382 | void ast_init_3rdtx(struct drm_device *dev) | 410 | void ast_init_3rdtx(struct drm_device *dev) |
383 | { | 411 | { |
384 | struct ast_private *ast = dev->dev_private; | 412 | struct ast_private *ast = dev->dev_private; |
385 | u8 jreg; | 413 | u8 jreg; |
386 | u32 data; | 414 | |
387 | if (ast->chip == AST2300 || ast->chip == AST2400) { | 415 | if (ast->chip == AST2300 || ast->chip == AST2400) { |
388 | jreg = ast_get_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xd1, 0xff); | 416 | jreg = ast_get_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xd1, 0xff); |
389 | switch (jreg & 0x0e) { | 417 | switch (jreg & 0x0e) { |
@@ -399,23 +427,8 @@ void ast_init_3rdtx(struct drm_device *dev) | |||
399 | default: | 427 | default: |
400 | if (ast->tx_chip_type == AST_TX_SIL164) | 428 | if (ast->tx_chip_type == AST_TX_SIL164) |
401 | ast_init_dvo(dev); | 429 | ast_init_dvo(dev); |
402 | else { | 430 | else |
403 | /* | 431 | ast_init_analog(dev); |
404 | * Set DAC source to VGA mode in SCU2C via the P2A | ||
405 | * bridge. First configure the P2U to target the SCU | ||
406 | * in case it isn't at this stage. | ||
407 | */ | ||
408 | ast_write32(ast, 0xf004, 0x1e6e0000); | ||
409 | ast_write32(ast, 0xf000, 0x1); | ||
410 | /* Then unlock the SCU with the magic password */ | ||
411 | ast_write32(ast, 0x12000, 0x1688a8a8); | ||
412 | ast_write32(ast, 0x12000, 0x1688a8a8); | ||
413 | ast_write32(ast, 0x12000, 0x1688a8a8); | ||
414 | /* Finally, clear bits [17:16] of SCU2c */ | ||
415 | data = ast_read32(ast, 0x1202c); | ||
416 | data &= 0xfffcffff; | ||
417 | ast_write32(ast, 0, data); | ||
418 | } | ||
419 | } | 432 | } |
420 | } | 433 | } |
421 | } | 434 | } |