From 254c7a75dad87702643d16dcb0b4e86f599634c6 Mon Sep 17 00:00:00 2001 From: Zongdong Jiao Date: Wed, 18 Sep 2019 15:47:33 +0800 Subject: [PATCH] hdmitx: add hdr_priority [1/1] PD#SWPL-14089 Problem: Need add 'hdr_priority' to mask sysfs 'dv_cap' Solution: Parse the variable 'hdr_priority' from uboot environment Verify: G12/U212 Change-Id: I6fca18669c068ac793ca9230c6497b0ef2cbe07c Signed-off-by: Zongdong Jiao --- .../vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c | 3 ++- .../vout/hdmitx/hdmi_tx_20/hdmi_tx_main.c | 22 ++++++++++++++++++- .../media/vout/hdmi_tx/hdmi_tx_module.h | 1 + 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c index 2ecfc5f0c1fc..e906c7e27e21 100644 --- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c +++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c @@ -1702,7 +1702,8 @@ static int hdmitx_edid_block_parse(struct hdmitx_dev *hdmitx_device, switch (ext_tag) { case EXTENSION_VENDOR_SPECIFIC: t = &blockbuf[offset]; - Edid_ParsingVendSpec(prxcap, t); + if (!hdmitx_device->hdr_priority) + Edid_ParsingVendSpec(prxcap, t); break; case EXTENSION_COLORMETRY_TAG: prxcap->colorimetry_data = 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 2725281216f3..99a22dacf489 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 @@ -2889,7 +2889,7 @@ static ssize_t show_dv_cap(struct device *dev, int i; const struct dv_info *dv = &hdmitx_device.rxcap.dv_info; - if (dv->ieeeoui != DV_IEEE_OUI) { + if (dv->ieeeoui != DV_IEEE_OUI || hdmitx_device.hdr_priority) { pos += snprintf(buf + pos, PAGE_SIZE, "The Rx don't support DolbyVision\n"); return pos; @@ -4144,6 +4144,14 @@ static void hdmitx_get_edid(struct hdmitx_dev *hdev) hdmitx_edid_clear(hdev); hdmitx_edid_parse(hdev); hdmitx_edid_buf_compare_print(hdev); + + if (hdev->hdr_priority) { /* clear dv_info */ + struct dv_info *dv = &hdev->rxcap.dv_info; + + memset(dv, 0, sizeof(struct dv_info)); + pr_info("clear dv_info\n"); + } + mutex_unlock(&getedid_mutex); } @@ -5339,3 +5347,15 @@ static int __init hdmitx_boot_frac_rate(char *str) } __setup("frac_rate_policy=", hdmitx_boot_frac_rate); + +static int __init hdmitx_boot_hdr_priority(char *str) +{ + if (strncmp("1", str, 1) == 0) { + hdmitx_device.hdr_priority = 1; + pr_info("hdmitx boot hdr_priority: 1\n"); + } + return 0; +} + +__setup("hdr_priority=", hdmitx_boot_hdr_priority); + 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 992b09667438..453b46eaeeac 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 @@ -476,6 +476,7 @@ struct hdmitx_dev { unsigned int flag_3dss:1; unsigned int dongle_mode:1; unsigned int cedst_en:1; /* configure in DTS */ + unsigned int hdr_priority:1; unsigned int drm_feature;/*Direct Rander Management*/ };