From b4c2f5e3e2e7752e2d54165c428ccd9944bd13d6 Mon Sep 17 00:00:00 2001 From: Zheng Yang Date: Mon, 18 Apr 2016 15:09:34 +0800 Subject: [PATCH] video: rockchip: hdmi: fix HDMI CTS HF1-33 Accroding to CEA 861-F: When the Length field is set to L==1, the Y420CMDB does not include a YCbCr 4:2:0 Capability Bit Map and all the SVDs in the regular Video Data Block(s) support YCbCr 4:2:0 sampling mode. Change-Id: I6d0be6465d361c74ff72c79ef6f120910e2a74ff Signed-off-by: Zheng Yang --- .../video/rockchip/hdmi/rockchip-hdmi-edid.c | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/drivers/video/rockchip/hdmi/rockchip-hdmi-edid.c b/drivers/video/rockchip/hdmi/rockchip-hdmi-edid.c index 33b007148d86..b8c4b3949549 100644 --- a/drivers/video/rockchip/hdmi/rockchip-hdmi-edid.c +++ b/drivers/video/rockchip/hdmi/rockchip-hdmi-edid.c @@ -341,14 +341,23 @@ static void hdmi_edid_parse_yuv420cmdb(unsigned char *buf, int count, struct display_modelist *modelist; int i, j, yuv420_mask = 0, vic; - for (i = 0; i < count - 1; i++) { - EDBG("vic which support yuv420 mode is %x\n", buf[i]); - yuv420_mask |= buf[i] << (8 * i); - } - for (i = 0; i < 32; i++) { - if (yuv420_mask & (1 << i)) { + if (count == 1) { + list_for_each(pos, head) { + modelist = + list_entry(pos, struct display_modelist, list); + vic = modelist->vic | HDMI_VIDEO_YUV420; + hdmi_add_vic(vic, head); + } + } else { + for (i = 0; i < count - 1; i++) { + EDBG("vic which support yuv420 mode is %x\n", buf[i]); + yuv420_mask |= buf[i] << (8 * i); + } + for (i = 0; i < 32; i++) { + if (!(yuv420_mask & (1 << i))) + continue; j = 0; - for (pos = head->next; pos != (head); pos = pos->next) { + list_for_each(pos, head) { if (j++ == i) { modelist = list_entry(pos, struct display_modelist, list); -- 2.34.1