drm/rockchip: analogix_dp: Add support for RK3368 eDP
authorWeiYong Bi <bivvy.bi@rock-chips.com>
Sat, 25 Mar 2017 02:14:05 +0000 (10:14 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Mon, 27 Mar 2017 09:38:47 +0000 (17:38 +0800)
Change-Id: I738ddf122776081cf41adef2921644ddfc6e07dd
Signed-off-by: WeiYong Bi <bivvy.bi@rock-chips.com>
Documentation/devicetree/bindings/display/rockchip/analogix_dp-rockchip.txt
drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c
drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
include/drm/bridge/analogix_dp.h

index 781f34bd9c68c2fb964ce98ab3dffd9116be0393..f996e0d7be0b2c855db193400c0ce80e4cd53ac6 100644 (file)
@@ -2,7 +2,9 @@ Rockchip RK3288 specific extensions to the Analogix Display Port
 ================================
 
 Required properties:
-- compatible: "rockchip,rk3288-dp" or "rockchip,rk3399-edp"
+- compatible: "rockchip,rk3288-dp",
+             "rockchip,rk3368-edp",
+             "rockchip,rk3399-edp";
 
 - reg: physical base address of the controller and length
 
index 97ced6b24c5af8b95fd2a0a42a0da36d81905c33..bc1a57522ad44fa64645c9d6f6da76384f8073f9 100644 (file)
@@ -76,7 +76,8 @@ void analogix_dp_init_analog_param(struct analogix_dp_device *dp)
 
        if (dp->plat_data && (dp->plat_data->dev_type == ROCKCHIP_DP)) {
                reg = REF_CLK_24M;
-               if (dp->plat_data->subdev_type == RK3288_DP)
+               if (dp->plat_data->subdev_type == RK3288_DP ||
+                   dp->plat_data->subdev_type == RK3368_EDP)
                        reg ^= REF_CLK_MASK;
 
                writel(reg, dp->reg_base + ANALOGIX_DP_PLL_REG_1);
index 434f634997252455438b3bfe663a1e43fc361566..810676cc72c72af9a17dd43e3a2026e7df895191 100644 (file)
@@ -47,6 +47,7 @@ struct rockchip_dp_chip_data {
        u32     lcdsel_big;
        u32     lcdsel_lit;
        u32     chip_type;
+       bool    has_vop_sel;
 };
 
 struct rockchip_dp_device {
@@ -140,6 +141,9 @@ static void rockchip_dp_drm_encoder_enable(struct drm_encoder *encoder)
        int ret;
        u32 val;
 
+       if (!dp->data->has_vop_sel)
+               return;
+
        ret = drm_of_encoder_active_endpoint_id(dp->dev->of_node, encoder);
        if (ret < 0)
                return;
@@ -382,6 +386,11 @@ static const struct rockchip_dp_chip_data rk3399_edp = {
        .lcdsel_big = 0 | BIT(21),
        .lcdsel_lit = BIT(5) | BIT(21),
        .chip_type = RK3399_EDP,
+       .has_vop_sel = true,
+};
+
+static const struct rockchip_dp_chip_data rk3368_edp = {
+       .chip_type = RK3368_EDP,
 };
 
 static const struct rockchip_dp_chip_data rk3288_dp = {
@@ -389,10 +398,12 @@ static const struct rockchip_dp_chip_data rk3288_dp = {
        .lcdsel_big = 0 | BIT(21),
        .lcdsel_lit = BIT(5) | BIT(21),
        .chip_type = RK3288_DP,
+       .has_vop_sel = true,
 };
 
 static const struct of_device_id rockchip_dp_dt_ids[] = {
        {.compatible = "rockchip,rk3288-dp", .data = &rk3288_dp },
+       {.compatible = "rockchip,rk3368-edp", .data = &rk3368_edp },
        {.compatible = "rockchip,rk3399-edp", .data = &rk3399_edp },
        {}
 };
index 181db097c12a7fd260d32d937701ac670eae72d7..d51a694eb9eeea0d1a7c57882555666dd2690003 100644 (file)
@@ -20,6 +20,7 @@ enum analogix_dp_devtype {
 
 enum analogix_dp_sub_devtype {
        RK3288_DP,
+       RK3368_EDP,
        RK3399_EDP,
 };