From 751632f10721e3716ba87f0a93a4673aca292538 Mon Sep 17 00:00:00 2001 From: Yi Zhou Date: Wed, 23 May 2018 20:45:56 +0800 Subject: [PATCH] hdmitx: use bt2020 colorimetry when connecting BT2020 TVs PD#165557: hdmitx: use bt2020 colorimtery when connecting BT2020 TVs Change-Id: I4af19ac0e70df60eb469b67fbc567d31ec6f0f4b Signed-off-by: Yi Zhou --- .../amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c | 14 ++++++++------ .../amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c | 13 ++++++++++--- include/linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h | 1 + 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c index 280df7f..4900e8c 100644 --- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c +++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c @@ -1108,7 +1108,9 @@ static void hdr_work_func(struct work_struct *work) unsigned char DRM_DB[26] = {0x0}; hdev->HWOp.SetPacket(HDMI_PACKET_DRM, DRM_DB, DRM_HB); - hdev->HWOp.CntlConfig(hdev, CONF_AVI_BT2020, CLR_AVI_BT2020); + hdmitx_device.HWOp.CntlConfig(&hdmitx_device, + CONF_AVI_BT2020, hdev->colormetry); + msleep(1500);/*delay 1.5s*/ hdev->HWOp.SetPacket(HDMI_PACKET_DRM, NULL, NULL); hdev->hdmi_current_hdr_mode = 0; @@ -1135,6 +1137,7 @@ static void hdmitx_set_drm_pkt(struct master_display_info_s *data) if (data) { hdev->hdr_transfer_feature = (data->features >> 8) & 0xff; hdev->hdr_color_feature = (data->features >> 16) & 0xff; + hdev->colormetry = (data->features >> 30) & 0x1; } if ((!data) || (!(hdev->RXCap.hdr_sup_eotf_smpte_st_2084) && !(hdev->RXCap.hdr_sup_eotf_hdr) && @@ -1143,15 +1146,14 @@ static void hdmitx_set_drm_pkt(struct master_display_info_s *data) DRM_HB[1] = 0; DRM_HB[2] = 0; hdmitx_device.HWOp.SetPacket(HDMI_PACKET_DRM, NULL, NULL); - hdmitx_device.HWOp.CntlConfig(&hdmitx_device, CONF_AVI_BT2020, - CLR_AVI_BT2020); + hdmitx_device.HWOp.CntlConfig(&hdmitx_device, + CONF_AVI_BT2020, hdev->colormetry); return; } /*SDR*/ if (hdev->hdr_transfer_feature == T_BT709 && hdev->hdr_color_feature == C_BT709) { - if (hdev->hdmi_last_hdr_mode != 0) schedule_work(&hdev->work_hdr); return; } @@ -1256,8 +1258,8 @@ static void hdmitx_set_drm_pkt(struct master_display_info_s *data) default: /*other case*/ hdmitx_device.HWOp.SetPacket(HDMI_PACKET_DRM, NULL, NULL); - hdmitx_device.HWOp.CntlConfig(&hdmitx_device, CONF_AVI_BT2020, - CLR_AVI_BT2020); + hdmitx_device.HWOp.CntlConfig(&hdmitx_device, + CONF_AVI_BT2020, CLR_AVI_BT2020); break; } diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c index c648756..2584440 100644 --- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c +++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c @@ -3825,6 +3825,8 @@ void set_crt_video_enc(uint32_t vIdx, uint32_t inSel, uint32_t DivN) void hdmitx_set_avi_colorimetry(struct hdmi_format_para *para) { + struct hdmitx_dev *hdev = get_hdmitx_device(); + if (!para) return; @@ -3880,9 +3882,14 @@ void hdmitx_set_avi_colorimetry(struct hdmi_format_para *para) hdmitx_set_reg_bits(HDMITX_DWC_FC_AVICONF2, 0, 4, 3); break; default: - /* C1C0 709 */ - hdmitx_set_reg_bits(HDMITX_DWC_FC_AVICONF1, 2, 6, 2); - hdmitx_set_reg_bits(HDMITX_DWC_FC_AVICONF2, 0, 4, 3); + if (hdev->colormetry) { + hdmitx_set_reg_bits(HDMITX_DWC_FC_AVICONF1, 3, 6, 2); + hdmitx_set_reg_bits(HDMITX_DWC_FC_AVICONF2, 6, 4, 3); + } else { + /* C1C0 709 */ + hdmitx_set_reg_bits(HDMITX_DWC_FC_AVICONF1, 2, 6, 2); + hdmitx_set_reg_bits(HDMITX_DWC_FC_AVICONF2, 0, 4, 3); + } break; } } diff --git a/include/linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h b/include/linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h index fa7c6c2..be6a2f7 100644 --- a/include/linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h +++ b/include/linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h @@ -360,6 +360,7 @@ struct hdmitx_dev { enum hdmi_hdr_transfer hdr_transfer_feature; enum hdmi_hdr_color hdr_color_feature; /* 0: sdr 1:standard HDR 2:non standard 3:HLG*/ + unsigned int colormetry; unsigned int hdmi_last_hdr_mode; unsigned int hdmi_current_hdr_mode; unsigned int dv_src_feature; -- 2.7.4