video: rockchip: hdmi: support rk3366
authorZheng Yang <zhengyang@rock-chips.com>
Wed, 17 Feb 2016 07:51:41 +0000 (15:51 +0800)
committerGerrit Code Review <gerrit@rock-chips.com>
Thu, 18 Feb 2016 04:02:42 +0000 (12:02 +0800)
Change-Id: I944e9749e559c25651de619c89eead0589c1eb5b
Signed-off-by: Zheng Yang <zhengyang@rock-chips.com>
drivers/video/rockchip/hdmi/rockchip-hdmi-lcdc.c
drivers/video/rockchip/hdmi/rockchip-hdmi.h
drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2.c
drivers/video/rockchip/hdmi/rockchip-hdmiv2/rockchip_hdmiv2_hw.c

index 9228fd13438760adf40b789c9f04f3116e108fb1..3fb7d689d66a48e004e397eb27fd53d86269f323 100644 (file)
@@ -848,7 +848,7 @@ static int hdmi_set_info(struct rk_screen *screen, struct hdmi *hdmi)
        screen->pin_dclk = 1;
 
        /* Swap rule */
-       if (hdmi->soctype > HDMI_SOC_RK3288 &&
+       if (hdmi->soctype > HDMI_SOC_RK312X &&
            screen->color_mode > COLOR_RGB &&
            (screen->face == OUT_P888 ||
             screen->face == OUT_P101010))
index e061fd6e3948293ef319079f07af9c8b1a48b24f..953f054792b7320c2fa7068e436bb8b088d85793 100644 (file)
@@ -373,9 +373,10 @@ struct hdmi_property {
 enum {
        HDMI_SOC_RK3036 = 0,
        HDMI_SOC_RK312X,
+       HDMI_SOC_RK322X,
        HDMI_SOC_RK3288,
+       HDMI_SOC_RK3366,
        HDMI_SOC_RK3368,
-       HDMI_SOC_RK322X
 };
 
 /* HDMI Information */
index 6850b8ed18c9009db7b9e881608d225af42e811a..86cedf5f548c69d949fc816089b3d99e4ce3d966 100644 (file)
@@ -209,12 +209,18 @@ void ext_pll_set_27m_out(void)
 
 static int rockchip_hdmiv2_clk_enable(struct hdmi_dev *hdmi_dev)
 {
-       if (hdmi_dev->soctype == HDMI_SOC_RK322X) {
+       if (hdmi_dev->soctype == HDMI_SOC_RK322X ||
+           hdmi_dev->soctype == HDMI_SOC_RK3366) {
                if ((hdmi_dev->clk_on & HDMI_EXT_PHY_CLK_ON) == 0) {
                        if (!hdmi_dev->pclk_phy) {
-                               hdmi_dev->pclk_phy =
-                                       devm_clk_get(hdmi_dev->dev,
-                                                    "pclk_hdmi_phy");
+                               if (hdmi_dev->soctype == HDMI_SOC_RK322X)
+                                       hdmi_dev->pclk_phy =
+                                               devm_clk_get(hdmi_dev->dev,
+                                                            "pclk_hdmi_phy");
+                               else
+                                       hdmi_dev->pclk_phy =
+                                               devm_clk_get(hdmi_dev->dev,
+                                                            "dclk_hdmi_phy");
                                if (IS_ERR(hdmi_dev->pclk_phy)) {
                                        dev_err(hdmi_dev->dev,
                                                "get hdmi phy pclk error\n");
@@ -391,9 +397,10 @@ static struct hdmi_ops rk_hdmi_ops;
 
 #if defined(CONFIG_OF)
 static const struct of_device_id rk_hdmi_dt_ids[] = {
+       {.compatible = "rockchip,rk322x-hdmi",},
        {.compatible = "rockchip,rk3288-hdmi",},
+       {.compatible = "rockchip,rk3366-hdmi",},
        {.compatible = "rockchip,rk3368-hdmi",},
-       {.compatible = "rockchip,rk322x-hdmi",},
        {}
 };
 
@@ -413,6 +420,8 @@ static int rockchip_hdmiv2_parse_dt(struct hdmi_dev *hdmi_dev)
                hdmi_dev->soctype = HDMI_SOC_RK3368;
        } else if (!strcmp(match->compatible, "rockchip,rk322x-hdmi")) {
                hdmi_dev->soctype = HDMI_SOC_RK322X;
+       } else if (!strcmp(match->compatible, "rockchip,rk3366-hdmi")) {
+               hdmi_dev->soctype = HDMI_SOC_RK3366;
        } else {
                pr_err("It is not a valid rockchip soc!");
                return -ENOMEM;
@@ -584,6 +593,18 @@ static int rockchip_hdmiv2_probe(struct platform_device *pdev)
                 *              SUPPORT_YUV420 |
                 *              SUPPORT_DEEP_10BIT;
                 */
+       } else if (hdmi_dev->soctype == HDMI_SOC_RK3366) {
+               rk_hdmi_property.feature |=
+                               SUPPORT_YCBCR_INPUT |
+                               SUPPORT_1080I |
+                               SUPPORT_480I_576I;
+               if (rk_hdmi_property.videosrc == DISPLAY_SOURCE_LCDC0)
+                       rk_hdmi_property.feature |=
+                                               SUPPORT_4K |
+                                               SUPPORT_4K_4096 |
+                                               SUPPORT_YUV420 |
+                                               SUPPORT_YCBCR_INPUT |
+                                               SUPPORT_TMDS_600M;
        } else {
                ret = -ENXIO;
                goto failed1;
index ec80cdbdde9f23169a79a2b47c2d73cbd64b70a9..f43138d66270d220d7798feddcf122815ec1c622 100755 (executable)
@@ -693,6 +693,8 @@ static int rockchip_hdmiv2_config_phy(struct hdmi_dev *hdmi_dev)
 
        if (hdmi_dev->soctype == HDMI_SOC_RK322X)
                return ext_phy_config(hdmi_dev);
+       else if (hdmi_dev->soctype == HDMI_SOC_RK3366)
+               clk_set_rate(hdmi_dev->pclk_phy, hdmi_dev->pixelclk);
 
        hdmi_msk_reg(hdmi_dev, PHY_I2CM_DIV,
                     m_PHY_I2CM_FAST_STD, v_PHY_I2CM_FAST_STD(0));