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;
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) &&
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;
}
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;
}
void hdmitx_set_avi_colorimetry(struct hdmi_format_para *para)
{
+ struct hdmitx_dev *hdev = get_hdmitx_device();
+
if (!para)
return;
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;
}
}