From: Zheng Yang Date: Thu, 30 Jul 2015 08:53:26 +0000 (+0800) Subject: hdmi:rk3036/rk3128: support 3D type Frame packing. X-Git-Tag: firefly_0821_release~3869 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=fcad39d771893c1a1aed219d09d0b812285d3531;p=firefly-linux-kernel-4.4.55.git hdmi:rk3036/rk3128: support 3D type Frame packing. Signed-off-by: Zheng Yang --- diff --git a/drivers/video/rockchip/hdmi/rockchip-hdmiv1/rockchip_hdmiv1_hw.c b/drivers/video/rockchip/hdmi/rockchip-hdmiv1/rockchip_hdmiv1_hw.c index 88d7d3221596..fd3b8038b0cd 100644 --- a/drivers/video/rockchip/hdmi/rockchip-hdmiv1/rockchip_hdmiv1_hw.c +++ b/drivers/video/rockchip/hdmi/rockchip-hdmiv1/rockchip_hdmiv1_hw.c @@ -608,10 +608,16 @@ static int rockchip_hdmiv1_config_video(struct hdmi *hdmi_drv, rockchip_hdmiv1_video_csc(hdmi_drv, vpara); /* Set ext video timing */ - if (mode->vmode || mode->pixclock <= 27000000) { + if ((mode->vmode || mode->pixclock <= 27000000) && + vpara->format_3d != HDMI_3D_FRAME_PACKING) { hdmi_writel(hdmi_dev, VIDEO_TIMING_CTL, 0); } else { - value = v_EXTERANL_VIDEO(1) | v_INETLACE(mode->vmode); + if (vpara->format_3d == HDMI_3D_FRAME_PACKING) + value = v_EXTERANL_VIDEO(1) | + v_INETLACE(0); + else + value = v_EXTERANL_VIDEO(1) | + v_INETLACE(mode->vmode); if (mode->sync & FB_SYNC_HOR_HIGH_ACT) value |= v_HSYNC_POLARITY(1); if (mode->sync & FB_SYNC_VERT_HIGH_ACT) @@ -640,8 +646,23 @@ static int rockchip_hdmiv1_config_video(struct hdmi *hdmi_drv, hdmi_writel(hdmi_dev, VIDEO_EXT_HDURATION_H, (value >> 8) & 0xFF); - value = mode->upper_margin + mode->yres + mode->lower_margin + - mode->vsync_len; + if (vpara->format_3d == HDMI_3D_FRAME_PACKING) { + if (mode->vmode == 0) + value = mode->upper_margin + + mode->lower_margin + + mode->vsync_len + + 2 * mode->yres; + else + value = 4 * (mode->upper_margin + + mode->lower_margin + + mode->vsync_len) + + 2 * mode->yres + 2; + } else { + value = mode->upper_margin + + mode->lower_margin + + mode->vsync_len + + mode->yres; + } hdmi_writel(hdmi_dev, VIDEO_EXT_VTOTAL_L, value & 0xFF); hdmi_writel(hdmi_dev, VIDEO_EXT_VTOTAL_H, (value >> 8) & 0xFF);