summaryrefslogtreecommitdiff
authorZongdong 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)
commitc674593fc604fbaa41c8a585732d73f00fd60c7e (patch)
tree26a8287a6bcc2cb1a34b1511882b03fd76e799ec
parentc3dbb353219e81eabe662c3618724d357fdd630b (diff)
downloaduboot-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>
Diffstat
-rw-r--r--common/cmd_hdmitx.c64
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) {