diff options
Diffstat (limited to 'drivers/gpu/drm/exynos/exynos_mixer.c')
-rw-r--r-- | drivers/gpu/drm/exynos/exynos_mixer.c | 22 |
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 | ||
821 | static int mixer_check_timing(void *ctx, struct fb_videomode *timing) | 823 | static 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 | } |