aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/exynos/exynos_mixer.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/exynos/exynos_mixer.c')
-rw-r--r--drivers/gpu/drm/exynos/exynos_mixer.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c
index 2f4f72f07047..ec3e376b7e01 100644
--- a/drivers/gpu/drm/exynos/exynos_mixer.c
+++ b/drivers/gpu/drm/exynos/exynos_mixer.c
@@ -643,12 +643,14 @@ static void mixer_win_reset(struct mixer_context *ctx)
643 /* setting graphical layers */ 643 /* setting graphical layers */
644 val = MXR_GRP_CFG_COLOR_KEY_DISABLE; /* no blank key */ 644 val = MXR_GRP_CFG_COLOR_KEY_DISABLE; /* no blank key */
645 val |= MXR_GRP_CFG_WIN_BLEND_EN; 645 val |= MXR_GRP_CFG_WIN_BLEND_EN;
646 val |= MXR_GRP_CFG_BLEND_PRE_MUL;
647 val |= MXR_GRP_CFG_PIXEL_BLEND_EN;
648 val |= MXR_GRP_CFG_ALPHA_VAL(0xff); /* non-transparent alpha */ 646 val |= MXR_GRP_CFG_ALPHA_VAL(0xff); /* non-transparent alpha */
649 647
650 /* the same configuration for both layers */ 648 /* Don't blend layer 0 onto the mixer background */
651 mixer_reg_write(res, MXR_GRAPHIC_CFG(0), val); 649 mixer_reg_write(res, MXR_GRAPHIC_CFG(0), val);
650
651 /* Blend layer 1 into layer 0 */
652 val |= MXR_GRP_CFG_BLEND_PRE_MUL;
653 val |= MXR_GRP_CFG_PIXEL_BLEND_EN;
652 mixer_reg_write(res, MXR_GRAPHIC_CFG(1), val); 654 mixer_reg_write(res, MXR_GRAPHIC_CFG(1), val);
653 655
654 /* setting video layers */ 656 /* setting video layers */
@@ -820,7 +822,6 @@ static void mixer_win_disable(void *ctx, int win)
820 822
821static int mixer_check_timing(void *ctx, struct fb_videomode *timing) 823static int mixer_check_timing(void *ctx, struct fb_videomode *timing)
822{ 824{
823 struct mixer_context *mixer_ctx = ctx;
824 u32 w, h; 825 u32 w, h;
825 826
826 w = timing->xres; 827 w = timing->xres;
@@ -831,9 +832,6 @@ static int mixer_check_timing(void *ctx, struct fb_videomode *timing)
831 timing->refresh, (timing->vmode & 832 timing->refresh, (timing->vmode &
832 FB_VMODE_INTERLACED) ? true : false); 833 FB_VMODE_INTERLACED) ? true : false);
833 834
834 if (mixer_ctx->mxr_ver == MXR_VER_0_0_0_16)
835 return 0;
836
837 if ((w >= 464 && w <= 720 && h >= 261 && h <= 576) || 835 if ((w >= 464 && w <= 720 && h >= 261 && h <= 576) ||
838 (w >= 1024 && w <= 1280 && h >= 576 && h <= 720) || 836 (w >= 1024 && w <= 1280 && h >= 576 && h <= 720) ||
839 (w >= 1664 && w <= 1920 && h >= 936 && h <= 1080)) 837 (w >= 1664 && w <= 1920 && h >= 936 && h <= 1080))
@@ -1047,13 +1045,13 @@ static int mixer_resources_init(struct exynos_drm_hdmi_context *ctx,
1047 spin_lock_init(&mixer_res->reg_slock); 1045 spin_lock_init(&mixer_res->reg_slock);
1048 1046
1049 mixer_res->mixer = devm_clk_get(dev, "mixer"); 1047 mixer_res->mixer = devm_clk_get(dev, "mixer");
1050 if (IS_ERR_OR_NULL(mixer_res->mixer)) { 1048 if (IS_ERR(mixer_res->mixer)) {
1051 dev_err(dev, "failed to get clock 'mixer'\n"); 1049 dev_err(dev, "failed to get clock 'mixer'\n");
1052 return -ENODEV; 1050 return -ENODEV;
1053 } 1051 }
1054 1052
1055 mixer_res->sclk_hdmi = devm_clk_get(dev, "sclk_hdmi"); 1053 mixer_res->sclk_hdmi = devm_clk_get(dev, "sclk_hdmi");
1056 if (IS_ERR_OR_NULL(mixer_res->sclk_hdmi)) { 1054 if (IS_ERR(mixer_res->sclk_hdmi)) {
1057 dev_err(dev, "failed to get clock 'sclk_hdmi'\n"); 1055 dev_err(dev, "failed to get clock 'sclk_hdmi'\n");
1058 return -ENODEV; 1056 return -ENODEV;
1059 } 1057 }
@@ -1096,17 +1094,17 @@ static int vp_resources_init(struct exynos_drm_hdmi_context *ctx,
1096 struct resource *res; 1094 struct resource *res;
1097 1095
1098 mixer_res->vp = devm_clk_get(dev, "vp"); 1096 mixer_res->vp = devm_clk_get(dev, "vp");
1099 if (IS_ERR_OR_NULL(mixer_res->vp)) { 1097 if (IS_ERR(mixer_res->vp)) {
1100 dev_err(dev, "failed to get clock 'vp'\n"); 1098 dev_err(dev, "failed to get clock 'vp'\n");
1101 return -ENODEV; 1099 return -ENODEV;
1102 } 1100 }
1103 mixer_res->sclk_mixer = devm_clk_get(dev, "sclk_mixer"); 1101 mixer_res->sclk_mixer = devm_clk_get(dev, "sclk_mixer");
1104 if (IS_ERR_OR_NULL(mixer_res->sclk_mixer)) { 1102 if (IS_ERR(mixer_res->sclk_mixer)) {
1105 dev_err(dev, "failed to get clock 'sclk_mixer'\n"); 1103 dev_err(dev, "failed to get clock 'sclk_mixer'\n");
1106 return -ENODEV; 1104 return -ENODEV;
1107 } 1105 }
1108 mixer_res->sclk_dac = devm_clk_get(dev, "sclk_dac"); 1106 mixer_res->sclk_dac = devm_clk_get(dev, "sclk_dac");
1109 if (IS_ERR_OR_NULL(mixer_res->sclk_dac)) { 1107 if (IS_ERR(mixer_res->sclk_dac)) {
1110 dev_err(dev, "failed to get clock 'sclk_dac'\n"); 1108 dev_err(dev, "failed to get clock 'sclk_dac'\n");
1111 return -ENODEV; 1109 return -ENODEV;
1112 } 1110 }