summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/ast
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/ast')
-rw-r--r--drivers/gpu/drm/ast/ast_mode.c31
1 files changed, 10 insertions, 21 deletions
diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
index 4725ec911a66..33aca817b686 100644
--- a/drivers/gpu/drm/ast/ast_mode.c
+++ b/drivers/gpu/drm/ast/ast_mode.c
@@ -790,6 +790,8 @@ static void ast_crtc_helper_atomic_begin(struct drm_crtc *crtc,
static void ast_crtc_helper_atomic_flush(struct drm_crtc *crtc,
struct drm_crtc_state *old_crtc_state)
{
+ struct drm_device *dev = crtc->dev;
+ struct ast_private *ast = dev->dev_private;
const struct drm_framebuffer *fb = crtc->primary->state->fb;
struct drm_display_mode adjusted_mode;
struct ast_vbios_mode_info vbios_mode;
@@ -800,36 +802,18 @@ static void ast_crtc_helper_atomic_flush(struct drm_crtc *crtc,
if (!fb)
return;
- ast_set_color_reg(crtc, fb);
-
memset(&adjusted_mode, 0, sizeof(adjusted_mode));
drm_mode_copy(&adjusted_mode, &crtc->state->adjusted_mode);
succ = ast_get_vbios_mode_info(fb, &crtc->state->adjusted_mode,
&adjusted_mode, &vbios_mode);
if (WARN_ON_ONCE(!succ))
- return;
+ return; /* BUG: didn't validate this in atomic_check() */
+ ast_set_color_reg(crtc, fb);
ast_set_vbios_color_reg(crtc, fb, &vbios_mode);
-}
-static void
-ast_crtc_helper_atomic_enable(struct drm_crtc *crtc,
- struct drm_crtc_state *old_crtc_state)
-{
- struct drm_device *dev = crtc->dev;
- struct ast_private *ast = crtc->dev->dev_private;
- const struct drm_framebuffer *fb = crtc->primary->state->fb;
- struct drm_display_mode adjusted_mode;
- struct ast_vbios_mode_info vbios_mode;
- bool succ;
-
- memset(&adjusted_mode, 0, sizeof(adjusted_mode));
- drm_mode_copy(&adjusted_mode, &crtc->state->adjusted_mode);
-
- succ = ast_get_vbios_mode_info(fb, &crtc->state->adjusted_mode,
- &adjusted_mode, &vbios_mode);
- if (WARN_ON_ONCE(!succ))
+ if (!crtc->state->mode_changed)
return;
ast_set_vbios_mode_reg(crtc, &adjusted_mode, &vbios_mode);
@@ -840,7 +824,12 @@ ast_crtc_helper_atomic_enable(struct drm_crtc *crtc,
ast_set_crtthd_reg(crtc);
ast_set_sync_reg(dev, &adjusted_mode, &vbios_mode);
ast_set_dac_reg(crtc, &adjusted_mode, &vbios_mode);
+}
+static void
+ast_crtc_helper_atomic_enable(struct drm_crtc *crtc,
+ struct drm_crtc_state *old_crtc_state)
+{
ast_crtc_dpms(crtc, DRM_MODE_DPMS_ON);
}