From ad446e7a06367e7b2d7f5d4508bb339bda43ae78 Mon Sep 17 00:00:00 2001 From: Zheng Yang Date: Thu, 26 Mar 2015 14:40:32 +0800 Subject: [PATCH] HDMI: add dts node "rockchip,defaultmode" to define HDMI default output mode. Signed-off-by: Zheng Yang --- .../devicetree/bindings/video/rockchip_hdmi.txt | 1 + drivers/video/rockchip/hdmi/rockchip-hdmi-core.c | 2 +- drivers/video/rockchip/hdmi/rockchip-hdmi-lcdc.c | 8 ++++---- drivers/video/rockchip/hdmi/rockchip-hdmi.h | 1 + .../rockchip/hdmi/rockchip-hdmiv1/rockchip_hdmiv1.c | 12 ++++++++++-- .../rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2.c | 11 +++++++++-- 6 files changed, 26 insertions(+), 9 deletions(-) diff --git a/Documentation/devicetree/bindings/video/rockchip_hdmi.txt b/Documentation/devicetree/bindings/video/rockchip_hdmi.txt index 9bd5eb06ac2c..806527857ae2 100644 --- a/Documentation/devicetree/bindings/video/rockchip_hdmi.txt +++ b/Documentation/devicetree/bindings/video/rockchip_hdmi.txt @@ -28,6 +28,7 @@ Required properties: - rockchip,cec_enable: hdmi cec function is described as follow <0>: cec function is disabled. <1>: cec function is enabled. +- rockchip,defaultmode: hdmi default output video mode. Example: hdmi: hdmi@ff980000 { diff --git a/drivers/video/rockchip/hdmi/rockchip-hdmi-core.c b/drivers/video/rockchip/hdmi/rockchip-hdmi-core.c index b9b3f4e92991..4fecefed0c65 100644 --- a/drivers/video/rockchip/hdmi/rockchip-hdmi-core.c +++ b/drivers/video/rockchip/hdmi/rockchip-hdmi-core.c @@ -457,7 +457,7 @@ struct hdmi *rockchip_hdmi_register(struct hdmi_property *property, } else if (hdmi->autoset) { hdmi->vic = 0; } else { - hdmi->vic = HDMI_VIDEO_DEFAULT_MODE; + hdmi->vic = hdmi->property->defaultmode; } hdmi->colormode = HDMI_VIDEO_DEFAULT_COLORMODE; hdmi->colordepth = HDMI_DEPP_COLOR_AUTO; diff --git a/drivers/video/rockchip/hdmi/rockchip-hdmi-lcdc.c b/drivers/video/rockchip/hdmi/rockchip-hdmi-lcdc.c index 51248470f2c9..7ca74fdcd2f1 100644 --- a/drivers/video/rockchip/hdmi/rockchip-hdmi-lcdc.c +++ b/drivers/video/rockchip/hdmi/rockchip-hdmi-lcdc.c @@ -40,7 +40,7 @@ static int hdmi_set_info(struct rk_screen *screen, struct hdmi *hdmi) return HDMI_ERROR_FALSE; if (hdmi->vic == 0) - hdmi->vic = HDMI_VIDEO_DEFAULT_MODE; + hdmi->vic = hdmi->property->defaultmode; for (i = 0; i < ARRAY_SIZE(hdmi_mode); i++) { if (hdmi_mode[i].vic == (hdmi->vic & HDMI_VIC_MASK) || @@ -136,7 +136,7 @@ int hdmi_find_best_mode(struct hdmi *hdmi, int vic) /* If parse edid error, we select default mode; */ if (hdmi->edid.specs == NULL || hdmi->edid.specs->modedb_len == 0) - return HDMI_VIDEO_DEFAULT_MODE; + return hdmi->property->defaultmode; /*modelist = list_entry(head->prev, struct display_modelist, list);*/ else @@ -167,7 +167,7 @@ int hdmi_set_lcdc(struct hdmi *hdmi) hdmi->vic = hdmi_find_best_mode(hdmi, hdmi->vic); if (hdmi->vic == 0) - hdmi->vic = HDMI_VIDEO_DEFAULT_MODE; + hdmi->vic = hdmi->property->defaultmode; rc = hdmi_set_info(&screen, hdmi); @@ -457,7 +457,7 @@ static void hdmi_sort_modelist(struct hdmi_edid *edid, int feature) hdmi_mode[i].mode.xres == 4096) continue; if ((feature & SUPPORT_TMDS_600M) == 0 && - !(modelist->vic & HDMI_VIDEO_YUV420) && + !(modelist->vic & HDMI_VIDEO_YUV420) && hdmi_mode[i].mode.pixclock > 340000000) continue; if ((modelist->vic & HDMI_VIDEO_YUV420) && diff --git a/drivers/video/rockchip/hdmi/rockchip-hdmi.h b/drivers/video/rockchip/hdmi/rockchip-hdmi.h index 51da78dc60d6..33b8598554ee 100644 --- a/drivers/video/rockchip/hdmi/rockchip-hdmi.h +++ b/drivers/video/rockchip/hdmi/rockchip-hdmi.h @@ -338,6 +338,7 @@ struct hdmi_property { int videosrc; int display; int feature; + int defaultmode; void *priv; }; diff --git a/drivers/video/rockchip/hdmi/rockchip-hdmiv1/rockchip_hdmiv1.c b/drivers/video/rockchip/hdmi/rockchip-hdmiv1/rockchip_hdmiv1.c index aa4166823eee..5feb1f8e6c6e 100644 --- a/drivers/video/rockchip/hdmi/rockchip-hdmiv1/rockchip_hdmiv1.c +++ b/drivers/video/rockchip/hdmi/rockchip-hdmiv1/rockchip_hdmiv1.c @@ -244,14 +244,22 @@ static int rockchip_hdmiv1_parse_dt(struct hdmi_dev *hdmi_dev) if (!of_property_read_u32(np, "rockchip,cec_enable", &val) && (val == 1)) { - pr_info("hdmi support cec\n"); + pr_debug("hdmi support cec\n"); rockchip_hdmiv1_property.feature |= SUPPORT_CEC; } if (!of_property_read_u32(np, "rockchip,hdcp_enable", &val) && (val == 1)) { - pr_info("hdmi support hdcp\n"); + pr_debug("hdmi support hdcp\n"); rockchip_hdmiv1_property.feature |= SUPPORT_HDCP; } + if (!of_property_read_u32(np, "rockchip,defaultmode", &val) && + (val > 0)) { + pr_debug("default mode is %d\n", val); + rockchip_hdmiv1_property.defaultmode = val; + } else { + rockchip_hdmiv1_property.defaultmode = + HDMI_VIDEO_DEFAULT_MODE; + } /*hdmi_dev->grf_base = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");*/ return 0; diff --git a/drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2.c b/drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2.c index ea96adbc2f99..87d8158f6753 100644 --- a/drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2.c +++ b/drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2.c @@ -339,14 +339,21 @@ static int rockchip_hdmiv2_parse_dt(struct hdmi_dev *hdmi_dev) if (!of_property_read_u32(np, "rockchip,cec_enable", &val) && (val == 1)) { - pr_info("hdmi support cec\n"); + pr_debug("hdmi support cec\n"); rk_hdmi_property.feature |= SUPPORT_CEC; } if (!of_property_read_u32(np, "rockchip,hdcp_enable", &val) && (val == 1)) { - pr_info("hdmi support hdcp\n"); + pr_debug("hdmi support hdcp\n"); rk_hdmi_property.feature |= SUPPORT_HDCP; } + if (!of_property_read_u32(np, "rockchip,defaultmode", &val) && + (val > 0)) { + pr_debug("default mode is %d\n", val); + rk_hdmi_property.defaultmode = val; + } else { + rk_hdmi_property.defaultmode = HDMI_VIDEO_DEFAULT_MODE; + } #ifdef CONFIG_MFD_SYSCON hdmi_dev->grf_base = syscon_regmap_lookup_by_phandle(np, "rockchip,grf"); -- 2.34.1