From: Zheng Yang Date: Mon, 18 Apr 2016 07:09:34 +0000 (+0800) Subject: video: rockchip: hdmi: fix HDMI CTS HF1-33 X-Git-Tag: firefly_0821_release~804 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=b4c2f5e3e2e7752e2d54165c428ccd9944bd13d6;p=firefly-linux-kernel-4.4.55.git 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 --- 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);