diff options
author | Thomas Zimmermann <tzimmermann@suse.de> | 2019-11-07 09:33:59 +0100 |
---|---|---|
committer | Thomas Zimmermann <tzimmermann@suse.de> | 2019-11-08 11:03:10 +0100 |
commit | 0d45ad989d0262e4f289600d39d765df0c8871af (patch) | |
tree | 012c43a3dc3c3aeed6df78ada485aa083bb5a643 /drivers/gpu/drm/ast | |
parent | drm/ast: Don't clear base address and offset with default values (diff) | |
download | linux-0d45ad989d0262e4f289600d39d765df0c8871af.tar.xz linux-0d45ad989d0262e4f289600d39d765df0c8871af.zip |
drm/ast: Split ast_set_ext_reg() into color and threshold function
In ast_set_ext_reg() sets several framebuffer options and CRT threshold
parameters. The former is mostly state of the primary plane; the latter
is constant. Hence, split the function in two and make it work with
atomic modesetting.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191107083404.6852-5-tzimmermann@suse.de
Diffstat (limited to 'drivers/gpu/drm/ast')
-rw-r--r-- | drivers/gpu/drm/ast/ast_mode.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c index b3f82c2d274d..5feb687191e0 100644 --- a/drivers/gpu/drm/ast/ast_mode.c +++ b/drivers/gpu/drm/ast/ast_mode.c @@ -419,11 +419,10 @@ static void ast_set_dclk_reg(struct drm_device *dev, struct drm_display_mode *mo ((clk_info->param3 & 0x3) << 4)); } -static void ast_set_ext_reg(struct drm_crtc *crtc, struct drm_display_mode *mode, - struct ast_vbios_mode_info *vbios_mode) +static void ast_set_color_reg(struct drm_crtc *crtc, + const struct drm_framebuffer *fb) { struct ast_private *ast = crtc->dev->dev_private; - const struct drm_framebuffer *fb = crtc->primary->fb; u8 jregA0 = 0, jregA3 = 0, jregA8 = 0; switch (fb->format->cpp[0] * 8) { @@ -448,6 +447,11 @@ static void ast_set_ext_reg(struct drm_crtc *crtc, struct drm_display_mode *mode ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xa0, 0x8f, jregA0); ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xa3, 0xf0, jregA3); ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xa8, 0xfd, jregA8); +} + +static void ast_set_crtthd_reg(struct drm_crtc *crtc) +{ + struct ast_private *ast = crtc->dev->dev_private; /* Set Threshold */ if (ast->chip == AST2300 || ast->chip == AST2400 || @@ -467,7 +471,7 @@ static void ast_set_ext_reg(struct drm_crtc *crtc, struct drm_display_mode *mode } static void ast_set_sync_reg(struct drm_device *dev, struct drm_display_mode *mode, - struct ast_vbios_mode_info *vbios_mode) + struct ast_vbios_mode_info *vbios_mode) { struct ast_private *ast = dev->dev_private; u8 jreg; @@ -595,7 +599,8 @@ static int ast_crtc_mode_set(struct drm_crtc *crtc, ast_set_crtc_reg(crtc, adjusted_mode, &vbios_mode); ast_set_offset_reg(crtc); ast_set_dclk_reg(dev, adjusted_mode, &vbios_mode); - ast_set_ext_reg(crtc, adjusted_mode, &vbios_mode); + ast_set_color_reg(crtc, fb); + ast_set_crtthd_reg(crtc); ast_set_sync_reg(dev, adjusted_mode, &vbios_mode); ast_set_dac_reg(crtc, adjusted_mode, &vbios_mode); |