aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/exynos/exynos_mixer.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c
index 4c5aed7e54c8..c00abbe3cd13 100644
--- a/drivers/gpu/drm/exynos/exynos_mixer.c
+++ b/drivers/gpu/drm/exynos/exynos_mixer.c
@@ -1061,7 +1061,7 @@ static void mixer_poweron(struct exynos_drm_manager *mgr)
1061 mutex_unlock(&ctx->mixer_mutex); 1061 mutex_unlock(&ctx->mixer_mutex);
1062 return; 1062 return;
1063 } 1063 }
1064 ctx->powered = true; 1064
1065 mutex_unlock(&ctx->mixer_mutex); 1065 mutex_unlock(&ctx->mixer_mutex);
1066 1066
1067 pm_runtime_get_sync(ctx->dev); 1067 pm_runtime_get_sync(ctx->dev);
@@ -1072,6 +1072,10 @@ static void mixer_poweron(struct exynos_drm_manager *mgr)
1072 clk_prepare_enable(res->sclk_mixer); 1072 clk_prepare_enable(res->sclk_mixer);
1073 } 1073 }
1074 1074
1075 mutex_lock(&ctx->mixer_mutex);
1076 ctx->powered = true;
1077 mutex_unlock(&ctx->mixer_mutex);
1078
1075 mixer_reg_write(res, MXR_INT_EN, ctx->int_en); 1079 mixer_reg_write(res, MXR_INT_EN, ctx->int_en);
1076 mixer_win_reset(ctx); 1080 mixer_win_reset(ctx);
1077 1081
@@ -1084,14 +1088,20 @@ static void mixer_poweroff(struct exynos_drm_manager *mgr)
1084 struct mixer_resources *res = &ctx->mixer_res; 1088 struct mixer_resources *res = &ctx->mixer_res;
1085 1089
1086 mutex_lock(&ctx->mixer_mutex); 1090 mutex_lock(&ctx->mixer_mutex);
1087 if (!ctx->powered) 1091 if (!ctx->powered) {
1088 goto out; 1092 mutex_unlock(&ctx->mixer_mutex);
1093 return;
1094 }
1089 mutex_unlock(&ctx->mixer_mutex); 1095 mutex_unlock(&ctx->mixer_mutex);
1090 1096
1091 mixer_window_suspend(mgr); 1097 mixer_window_suspend(mgr);
1092 1098
1093 ctx->int_en = mixer_reg_read(res, MXR_INT_EN); 1099 ctx->int_en = mixer_reg_read(res, MXR_INT_EN);
1094 1100
1101 mutex_lock(&ctx->mixer_mutex);
1102 ctx->powered = false;
1103 mutex_unlock(&ctx->mixer_mutex);
1104
1095 clk_disable_unprepare(res->mixer); 1105 clk_disable_unprepare(res->mixer);
1096 if (ctx->vp_enabled) { 1106 if (ctx->vp_enabled) {
1097 clk_disable_unprepare(res->vp); 1107 clk_disable_unprepare(res->vp);
@@ -1099,12 +1109,6 @@ static void mixer_poweroff(struct exynos_drm_manager *mgr)
1099 } 1109 }
1100 1110
1101 pm_runtime_put_sync(ctx->dev); 1111 pm_runtime_put_sync(ctx->dev);
1102
1103 mutex_lock(&ctx->mixer_mutex);
1104 ctx->powered = false;
1105
1106out:
1107 mutex_unlock(&ctx->mixer_mutex);
1108} 1112}
1109 1113
1110static void mixer_dpms(struct exynos_drm_manager *mgr, int mode) 1114static void mixer_dpms(struct exynos_drm_manager *mgr, int mode)