return EXYNOS_MIXER_MODE_SD_PAL;
else if (width >= 1024 && width <= 1280 && height <= 720)
return EXYNOS_MIXER_MODE_HD_720;
- else if (width >= 1664 && width <= 1920 && height <= 1080)
+ else if ((width == 1440 && height == 900) ||
+ (width >= 1664 && width <= 1920 && height <= 1080))
return EXYNOS_MIXER_MODE_HD_1080;
else
return EXYNOS_MIXER_MODE_INVALID;
hdmi_set_reg(tg->field_top_hdmi, 2, 0x1); /* Reset value */
hdmi_set_reg(tg->field_bot_hdmi, 2, 0x233); /* Reset value */
hdmi_set_reg(tg->tg_3d, 1, 0x0);
+
+ /* Workaround 4 implementation for 1440x900 resolution support */
+ if (hdata->is_soc_exynos5) {
+ if (m->hdisplay == 1440 && m->vdisplay == 900 && m->clock == 106500) {
+ hdmi_set_reg(tg->hact_st, 2, m->htotal - m->hdisplay - 0xe0);
+ hdmi_set_reg(tg->hact_sz, 2, m->hdisplay + 0xe0);
+ }
+ }
}
static void hdmi_mode_set(void *ctx, void *mode)
struct mixer_resources mixer_res;
struct hdmi_win_data win_data[MIXER_WIN_NR];
unsigned long event_flags;
+ int previous_dxy;
};
/* event flags used */
mixer_reg_writemask(res, MXR_CFG, val, MXR_CFG_SCAN_MASK);
}
+static void mixer_set_layer_offset(struct mixer_context *mctx, u32 offset)
+{
+ struct mixer_resources *res = &mctx->mixer_res;
+ int current_dxy = mixer_reg_read(res, MXR_GRAPHIC1_DXY);
+
+ if (mctx->previous_dxy != current_dxy) {
+ current_dxy += MXR_GRP_DXY_DX(offset);
+ mixer_reg_write(res, MXR_GRAPHIC1_DXY, current_dxy);
+ mctx->previous_dxy = current_dxy;
+ }
+
+ mixer_reg_write(res, MXR_GRAPHIC0_DXY, MXR_GRP_DXY_DX(offset));
+}
+
static void mixer_cfg_rgb_fmt(struct mixer_context *mctx, unsigned int height)
{
struct mixer_resources *res = &mctx->mixer_res;
mixer_reg_write(res, MXR_GRAPHIC_BASE(win), dma_addr);
mixer_cfg_scan(mctx, mode_width, mode_height);
+
+ /* Workaround 4 implementation for 1440x900 resolution support */
+ if (res->is_soc_exynos5) {
+ if (mode_width == 1440 && mode_height == 900)
+ mixer_set_layer_offset(mctx, 224);
+ }
+
mixer_cfg_rgb_fmt(mctx, mode_height);
mixer_cfg_layer(mctx, win, true);
mixer_cfg_layer(mctx, MIXER_DEFAULT_WIN, true);