From a62924520b760c140aae917eb4539ab726427e3a Mon Sep 17 00:00:00 2001 From: Narender Ankam Date: Thu, 16 Nov 2017 19:08:03 +0530 Subject: [PATCH] msm: mdss: dp: do not include VICs from YC420 VDB Display Port driver never supported YC420 formats. Also w.r.t to display quality, 4K30 RGB 8bit is better than 4K60 YC420 8bit. So, do not include edid modes(VICs) from YC420 Video Data Block while parsing EDID. Change-Id: I77f2c45c22beceb7f554a4c063f6e6947dc4ba8a Signed-off-by: Narender Ankam --- drivers/video/fbdev/msm/mdss_dp.c | 1 + drivers/video/fbdev/msm/mdss_hdmi_edid.c | 4 ++++ drivers/video/fbdev/msm/mdss_hdmi_edid.h | 1 + drivers/video/fbdev/msm/mdss_hdmi_tx.c | 1 + drivers/video/fbdev/msm/mdss_hdmi_util.c | 6 ++++++ 5 files changed, 13 insertions(+) diff --git a/drivers/video/fbdev/msm/mdss_dp.c b/drivers/video/fbdev/msm/mdss_dp.c index 71584dff75cb..3240c0e71fb6 100644 --- a/drivers/video/fbdev/msm/mdss_dp.c +++ b/drivers/video/fbdev/msm/mdss_dp.c @@ -1967,6 +1967,7 @@ static int mdss_dp_edid_init(struct mdss_panel_data *pdata) edid_init_data.kobj = dp_drv->kobj; edid_init_data.max_pclk_khz = dp_drv->max_pclk_khz; + edid_init_data.yc420_support = false; edid_data = hdmi_edid_init(&edid_init_data); if (!edid_data) { diff --git a/drivers/video/fbdev/msm/mdss_hdmi_edid.c b/drivers/video/fbdev/msm/mdss_hdmi_edid.c index a49c5290753c..e11c7d86572f 100644 --- a/drivers/video/fbdev/msm/mdss_hdmi_edid.c +++ b/drivers/video/fbdev/msm/mdss_hdmi_edid.c @@ -165,6 +165,10 @@ static bool hdmi_edid_is_mode_supported(struct hdmi_edid_ctrl *edid_ctrl, pclk > edid_ctrl->init_data.max_pclk_khz) return false; + if ((out_format == MDP_Y_CBCR_H2V2) && + !edid_ctrl->init_data.yc420_support) + return false; + return true; } diff --git a/drivers/video/fbdev/msm/mdss_hdmi_edid.h b/drivers/video/fbdev/msm/mdss_hdmi_edid.h index af802bb45f89..63785e95bd59 100644 --- a/drivers/video/fbdev/msm/mdss_hdmi_edid.h +++ b/drivers/video/fbdev/msm/mdss_hdmi_edid.h @@ -24,6 +24,7 @@ struct hdmi_edid_init_data { struct kobject *kobj; struct hdmi_util_ds_data ds_data; u32 max_pclk_khz; + bool yc420_support; u8 *buf; u32 buf_size; }; diff --git a/drivers/video/fbdev/msm/mdss_hdmi_tx.c b/drivers/video/fbdev/msm/mdss_hdmi_tx.c index 5cb436261115..13dd88c0f602 100644 --- a/drivers/video/fbdev/msm/mdss_hdmi_tx.c +++ b/drivers/video/fbdev/msm/mdss_hdmi_tx.c @@ -1825,6 +1825,7 @@ static int hdmi_tx_init_edid(struct hdmi_tx_ctrl *hdmi_ctrl) edid_init_data.kobj = hdmi_ctrl->kobj; edid_init_data.ds_data = hdmi_ctrl->ds_data; edid_init_data.max_pclk_khz = hdmi_ctrl->max_pclk_khz; + edid_init_data.yc420_support = true; edid_data = hdmi_edid_init(&edid_init_data); if (!edid_data) { diff --git a/drivers/video/fbdev/msm/mdss_hdmi_util.c b/drivers/video/fbdev/msm/mdss_hdmi_util.c index 5bc46d8c8f92..1384c39d4c6f 100644 --- a/drivers/video/fbdev/msm/mdss_hdmi_util.c +++ b/drivers/video/fbdev/msm/mdss_hdmi_util.c @@ -632,6 +632,12 @@ const char *msm_hdmi_mode_2string(u32 mode) case HDMI_RES_AR_16_10: aspect_ratio = "16/10"; break; + case HDMI_RES_AR_64_27: + aspect_ratio = "64/27"; + break; + case HDMI_RES_AR_256_135: + aspect_ratio = "256/135"; + break; default: aspect_ratio = "???"; };