author | Zongdong Jiao <zongdong.jiao@amlogic.com> | 2019-12-09 06:13:09 (GMT) |
---|---|---|
committer | Zongdong Jiao <zongdong.jiao@amlogic.com> | 2019-12-12 05:55:36 (GMT) |
commit | c674593fc604fbaa41c8a585732d73f00fd60c7e (patch) | |
tree | 26a8287a6bcc2cb1a34b1511882b03fd76e799ec | |
parent | c3dbb353219e81eabe662c3618724d357fdd630b (diff) | |
download | uboot-c674593fc604fbaa41c8a585732d73f00fd60c7e.zip uboot-c674593fc604fbaa41c8a585732d73f00fd60c7e.tar.gz uboot-c674593fc604fbaa41c8a585732d73f00fd60c7e.tar.bz2 |
hdmitx: add hdr_priority [1/1]
PD#SWPL-14089
Problem:
Need add 'hdr_priority' to mask sysfs 'dv_cap' in uboot
Solution:
Parse the variable 'hdr_priority' from uboot environment
Verify:
G12/U212
Change-Id: I114244ba98b4469db01ea5aa8446f3a091a5a4b6
Signed-off-by: Zongdong Jiao <zongdong.jiao@amlogic.com>
-rw-r--r-- | common/cmd_hdmitx.c | 64 |
1 files changed, 33 insertions, 31 deletions
diff --git a/common/cmd_hdmitx.c b/common/cmd_hdmitx.c index f00be91..22cd686 100644 --- a/common/cmd_hdmitx.c +++ b/common/cmd_hdmitx.c @@ -687,13 +687,42 @@ static int selectBestMode(struct rx_cap *pRXCap, bool isAuto, int manualMode) return HDMI_1920x1080p60_16x9; //default } +static void get_parse_edid_data(struct hdmitx_dev *hdev) +{ + unsigned char *edid = hdev->rawedid; + unsigned int byte_num = 0; + unsigned char blk_no = 1; + char *hdr_priority = getenv("hdr_priority"); + + /* get edid data */ + while (byte_num < 128 * blk_no) { + hdev->HWOp.read_edid(&edid[byte_num], byte_num & 0x7f, byte_num / 128); + if (byte_num == 120) { + blk_no = edid[126] + 1; + if (blk_no > 4) + blk_no = 4; /* MAX Read Blocks 4 */ + } + byte_num += 8; + } + + if (0) + dump_full_edid(hdev->rawedid); + + /* parse edid data */ + hdmi_edid_parsing(hdev->rawedid, &hdev->RXCap); + + /* if hdr_priority is 1, then mark dv_info */ + if (hdr_priority && (strcmp(hdr_priority, "1") == 0)) { + memset(&hdev->RXCap.dv_info, 0, sizeof(struct dv_info)); + pr_info("hdr_priority: %s and clear dv_info\n", hdr_priority); + } +} + static int do_get_parse_edid(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]) { struct hdmitx_dev *hdev = &hdmitx_device; - unsigned int byte_num = 0; unsigned char *edid = hdev->rawedid; - unsigned char blk_no = 1; unsigned char *store_checkvalue; memset(edid, 0, EDID_BLK_SIZE * EDID_BLK_NO); unsigned int i; @@ -710,19 +739,7 @@ static int do_get_parse_edid(cmd_tbl_t * cmdtp, int flag, int argc, int inColorSpace = -1, inColorDepth = -1; int bestColorAttributes = -1; - while (byte_num < 128 * blk_no) { - hdmitx_device.HWOp.read_edid(&edid[byte_num], byte_num & 0x7f, byte_num / 128); - if (byte_num == 120) { - blk_no = edid[126] + 1; - if (blk_no > 4) - blk_no = 4; /* MAX Read Blocks 4 */ - } - byte_num += 8; - } - - if (hdmi_edid_parsing(hdev->rawedid, &hdev->RXCap) == 0) { - dump_full_edid(hdev->rawedid); - } + get_parse_edid_data(hdev); /*check if the tv has changed or anything wrong*/ //store_checkvalue = (unsigned char*)get_logoparam_value("logoparam.var.hdmi_crcvalue"); @@ -865,9 +882,7 @@ static int do_get_preferred_mode(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]) { struct hdmitx_dev *hdev = &hdmitx_device; - unsigned int byte_num = 0; unsigned char *edid = hdev->rawedid; - unsigned char blk_no = 1; struct hdmi_format_para *para; char pref_mode[64]; char color_attr[64]; @@ -895,21 +910,8 @@ static int do_get_preferred_mode(cmd_tbl_t * cmdtp, int flag, int argc, goto bypass_edid_read; } - /* Read complete EDID data sequentially */ - while (byte_num < 128 * blk_no) { - hdmitx_device.HWOp.read_edid(&edid[byte_num], byte_num & 0x7f, byte_num / 128); - if (byte_num == 120) { - blk_no = edid[126] + 1; - if (blk_no > 4) - blk_no = 4; /* MAX Read Blocks 4 */ - } - byte_num += 8; - } + get_parse_edid_data(hdev); - if (hdmi_edid_parsing(hdev->rawedid, &hdev->RXCap) == 0) { - if (0) - dump_full_edid(hdev->rawedid); - } para = hdmi_get_fmt_paras(hdev->RXCap.preferred_mode); if (para) { |