From 39c34527e735b84e6ceb8a2e386aed0060111858 Mon Sep 17 00:00:00 2001 From: Zheng Yang Date: Wed, 16 Nov 2016 19:26:24 +0800 Subject: [PATCH] video: rockchip: hdmi: fix CTS HF1-53 HDR test 1. HDR MetaData HB2 is 26. 2. Under HF1-53, HDR MetaData should be sent and PB1 value should be exist in EDID. Change-Id: I616b4cdcf321ea0080b845c868d1f4cd4881fd14 Signed-off-by: Zheng Yang --- drivers/video/rockchip/hdmi/rockchip-hdmi-core.c | 8 ++++++-- drivers/video/rockchip/hdmi/rockchip-hdmi-sysfs.c | 8 +++++--- .../rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.c | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/drivers/video/rockchip/hdmi/rockchip-hdmi-core.c b/drivers/video/rockchip/hdmi/rockchip-hdmi-core.c index 134a15afda0e..ee38a1fd63b9 100644 --- a/drivers/video/rockchip/hdmi/rockchip-hdmi-core.c +++ b/drivers/video/rockchip/hdmi/rockchip-hdmi-core.c @@ -196,12 +196,16 @@ static void hdmi_wq_set_video(struct hdmi *hdmi) video->vic = hdmi->vic & HDMI_VIC_MASK; video->eotf = 0; if (hdmi->eotf) { - if (hdmi->eotf & hdmi->edid.hdr.hdrinfo.eotf) + if (hdmi->eotf & hdmi->edid.hdr.hdrinfo.eotf) { video->eotf = hdmi->eotf; - else + } else { pr_err("sink eotf %x not support eotf %x\n", hdmi->edid.hdr.hdrinfo.eotf, hdmi->eotf); + if (hdmi->edid.hdr.hdrinfo.eotf & + EOTF_TRADITIONAL_GMMA_SDR) + video->eotf = EOTF_TRADITIONAL_GMMA_SDR; + } } /* ST_2084 must be 10bit and bt2020 */ if (video->eotf & EOTF_ST_2084) { diff --git a/drivers/video/rockchip/hdmi/rockchip-hdmi-sysfs.c b/drivers/video/rockchip/hdmi/rockchip-hdmi-sysfs.c index 925171b36814..8ca4d6745fc0 100644 --- a/drivers/video/rockchip/hdmi/rockchip-hdmi-sysfs.c +++ b/drivers/video/rockchip/hdmi/rockchip-hdmi-sysfs.c @@ -258,12 +258,14 @@ static int hdmi_set_color(struct rk_display_device *device, } else if (!strncmp(buf, "hdr", 3)) { if (sscanf(buf, "hdr=%d", &value) == -1) return -1; - pr_debug("current hdr eotf is %d input hdr eotf is %d\n", - hdmi->eotf, value); + pr_info("current hdr eotf is %d input hdr eotf is %d\n", + hdmi->eotf, value); if (hdmi->eotf != value && - (hdmi->eotf & hdmi->edid.hdr.hdrinfo.eotf || + (value & hdmi->edid.hdr.hdrinfo.eotf || hdmi->eotf == 0)) hdmi->eotf = value; + else + return 0; } else { pr_err("%s unkown event\n", __func__); return -1; diff --git a/drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.c b/drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.c index 9395644e5357..4eb5a24bcdca 100644 --- a/drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.c +++ b/drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.c @@ -1855,7 +1855,7 @@ static void hdmi_dev_config_hdr(struct hdmi_dev *hdmi_dev, return; hdmi_writel(hdmi_dev, FC_DRM_HB, 1);/*verion = 0x1*/ - hdmi_writel(hdmi_dev, (FC_DRM_HB + 1), 27);/*length of following data*/ + hdmi_writel(hdmi_dev, (FC_DRM_HB + 1), 26);/*length of following data*/ hdmi_writel(hdmi_dev, FC_DRM_PB, eotf / 2); hdmi_writel(hdmi_dev, FC_DRM_PB + 1, 0);