diff options
author | Benjamin Gaignard <benjamin.gaignard@linaro.org> | 2014-12-04 11:17:32 +0100 |
---|---|---|
committer | Benjamin Gaignard <benjamin.gaignard@linaro.org> | 2014-12-11 13:58:19 +0100 |
commit | 2f7d0e82ce9fdbb450613abe28c3bbe1bda069a6 (patch) | |
tree | 6a7bc50d4eda4dae8ce503f49222de63b471f5ff | |
parent | 765692078f08d0229e545d3c1a50bddbc16c800c (diff) |
drm: sti: clear all mixer control
Make sure that mixer control register is correctly reset
before use it.
Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
-rw-r--r-- | drivers/gpu/drm/sti/sti_drm_crtc.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/sti/sti_mixer.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/sti/sti_mixer.h | 1 |
3 files changed, 12 insertions, 0 deletions
diff --git a/drivers/gpu/drm/sti/sti_drm_crtc.c b/drivers/gpu/drm/sti/sti_drm_crtc.c index 36a1ad3c4823..d42c63f756ef 100644 --- a/drivers/gpu/drm/sti/sti_drm_crtc.c +++ b/drivers/gpu/drm/sti/sti_drm_crtc.c @@ -38,6 +38,8 @@ static void sti_drm_crtc_prepare(struct drm_crtc *crtc) if (clk_prepare_enable(compo->clk_compo_aux)) DRM_INFO("Failed to prepare/enable compo_aux clk\n"); } + + sti_mixer_clear_all_layers(mixer); } static void sti_drm_crtc_commit(struct drm_crtc *crtc) diff --git a/drivers/gpu/drm/sti/sti_mixer.c b/drivers/gpu/drm/sti/sti_mixer.c index 79f369db9fb6..6bcdf3f86d22 100644 --- a/drivers/gpu/drm/sti/sti_mixer.c +++ b/drivers/gpu/drm/sti/sti_mixer.c @@ -215,6 +215,15 @@ int sti_mixer_set_layer_status(struct sti_mixer *mixer, return 0; } +void sti_mixer_clear_all_layers(struct sti_mixer *mixer) +{ + u32 val; + + DRM_DEBUG_DRIVER("%s clear all layer\n", sti_mixer_to_str(mixer)); + val = sti_mixer_reg_read(mixer, GAM_MIXER_CTL) & 0xFFFF0000; + sti_mixer_reg_write(mixer, GAM_MIXER_CTL, val); +} + void sti_mixer_set_matrix(struct sti_mixer *mixer) { unsigned int i; diff --git a/drivers/gpu/drm/sti/sti_mixer.h b/drivers/gpu/drm/sti/sti_mixer.h index 874372102e52..750e1fd5a8ce 100644 --- a/drivers/gpu/drm/sti/sti_mixer.h +++ b/drivers/gpu/drm/sti/sti_mixer.h @@ -39,6 +39,7 @@ struct sti_mixer *sti_mixer_create(struct device *dev, int id, int sti_mixer_set_layer_status(struct sti_mixer *mixer, struct sti_layer *layer, bool status); +void sti_mixer_clear_all_layers(struct sti_mixer *mixer); int sti_mixer_set_layer_depth(struct sti_mixer *mixer, struct sti_layer *layer); int sti_mixer_active_video_area(struct sti_mixer *mixer, struct drm_display_mode *mode); |