Merge remote-tracking branch 'origin/develop-3.10' into develop-3.10-next
[firefly-linux-kernel-4.4.55.git] / drivers / video / rockchip / transmitter / rk32_dp.c
index 63b635b6c91ccaac586d6e823e4a628f9dcb04c4..51461f1af80b8724e3b889e889ffee0400eb7da5 100644 (file)
 #endif
 
 /*#define EDP_BIST_MODE*/
-
+/*#define SW_LT*/
 static struct rk32_edp *rk32_edp;
 
 static int rk32_edp_clk_enable(struct rk32_edp *edp)
 {
        if (!edp->clk_on) {
-               clk_enable(edp->pd);
-               clk_enable(edp->pclk);
-               clk_enable(edp->clk_edp);
-               clk_enable(edp->clk_24m);
+               clk_prepare_enable(edp->pd);
+               clk_prepare_enable(edp->pclk);
+               clk_prepare_enable(edp->clk_edp);
+               clk_prepare_enable(edp->clk_24m);
                edp->clk_on = true;
        }
 
@@ -57,10 +57,10 @@ static int rk32_edp_clk_enable(struct rk32_edp *edp)
 static int rk32_edp_clk_disable(struct rk32_edp *edp)
 {
        if (edp->clk_on) {
-               clk_disable(edp->pclk);
-               clk_disable(edp->clk_edp);
-               clk_disable(edp->clk_24m);
-               clk_disable(edp->pd);
+               clk_disable_unprepare(edp->pclk);
+               clk_disable_unprepare(edp->clk_edp);
+               clk_disable_unprepare(edp->clk_24m);
+               clk_disable_unprepare(edp->pd);
                edp->clk_on = false;
        }
 
@@ -92,7 +92,7 @@ static int rk32_edp_init_edp(struct rk32_edp *edp)
        struct rk_screen *screen = &edp->screen;
        u32 val = 0;
 
-       screen->lcdc_id = 1;
+       rk_fb_get_prmry_screen(screen);
        if (screen->lcdc_id == 1)  /*select lcdc*/
                val = EDP_SEL_VOP_LIT | (EDP_SEL_VOP_LIT << 16);
        else
@@ -110,6 +110,7 @@ static int rk32_edp_init_edp(struct rk32_edp *edp)
        return 0;
 }
 
+#if 0
 static int rk32_edp_detect_hpd(struct rk32_edp *edp)
 {
        int timeout_loop = 0;
@@ -129,7 +130,7 @@ static int rk32_edp_detect_hpd(struct rk32_edp *edp)
 
        return 0;
 }
-
+#endif
 static int rk32_edp_read_edid(struct rk32_edp *edp)
 {
        unsigned char edid[EDID_LENGTH * 2];
@@ -252,6 +253,7 @@ static int rk32_edp_read_edid(struct rk32_edp *edp)
        return 0;
 }
 
+#if 0
 static int rk32_edp_handle_edid(struct rk32_edp *edp)
 {
        u8 buf[12];
@@ -275,6 +277,7 @@ static int rk32_edp_handle_edid(struct rk32_edp *edp)
        return retval;
 }
 
+
 static int rk32_edp_enable_rx_to_enhanced_mode(struct rk32_edp *edp,
                                                bool enable)
 {
@@ -316,6 +319,7 @@ void rk32_edp_rx_control(struct rk32_edp *edp, bool enable)
        }*/
 }
 
+
 static int rk32_edp_is_enhanced_mode_available(struct rk32_edp *edp)
 {
        u8 data;
@@ -329,6 +333,7 @@ static int rk32_edp_is_enhanced_mode_available(struct rk32_edp *edp)
        return DPCD_ENHANCED_FRAME_CAP(data);
 }
 
+
 static void rk32_edp_disable_rx_zmux(struct rk32_edp *edp)
 {
        /*rk32_edp_write_byte_to_dpcd(edp,
@@ -357,7 +362,9 @@ static int rk32_edp_set_enhanced_mode(struct rk32_edp *edp)
 
        return 0;
 }
+#endif
 
+#if defined(SW_LT)
 static int rk32_edp_training_pattern_dis(struct rk32_edp *edp)
 {
        int retval;
@@ -832,7 +839,7 @@ reduce_link_rate:
        rk32_edp_reduce_link_rate(edp);
        return -EIO;
 }
-
+#endif
 static int rk32_edp_get_max_rx_bandwidth(struct rk32_edp *edp,
                                        u8 *bandwidth)
 {
@@ -916,6 +923,7 @@ static int rk32_edp_init_training(struct rk32_edp *edp)
        return 0;
 }
 
+#if defined(SW_LT)
 static int rk32_edp_sw_link_training(struct rk32_edp *edp)
 {
        int retval = 0;
@@ -952,7 +960,7 @@ static int rk32_edp_sw_link_training(struct rk32_edp *edp)
        return retval;
 }
 
-
+#else
 static int rk32_edp_hw_link_training(struct rk32_edp *edp)
 {
        u32 cnt = 50;
@@ -977,6 +985,8 @@ static int rk32_edp_hw_link_training(struct rk32_edp *edp)
        return val;
 
 }
+#endif
+
 static int rk32_edp_set_link_train(struct rk32_edp *edp)
 {
        int retval;
@@ -984,7 +994,7 @@ static int rk32_edp_set_link_train(struct rk32_edp *edp)
        retval = rk32_edp_init_training(edp);
        if (retval < 0)
                dev_err(edp->dev, "DP LT init failed!\n");
-#if 0
+#if defined(SW_LT)
        retval = rk32_edp_sw_link_training(edp);
 #else
        retval = rk32_edp_hw_link_training(edp);
@@ -1065,6 +1075,7 @@ static int rk32_edp_config_video(struct rk32_edp *edp,
        return retval;
 }
 
+#if 0
 static int rk32_edp_enable_scramble(struct rk32_edp *edp, bool enable)
 {
        u8 data;
@@ -1102,6 +1113,7 @@ static int rk32_edp_enable_scramble(struct rk32_edp *edp, bool enable)
 
        return 0;
 }
+#endif
 
 static irqreturn_t rk32_edp_isr(int irq, void *arg)
 {
@@ -1226,6 +1238,11 @@ static int edp_dpcd_debugfs_show(struct seq_file *s, void *v)
        return 0;
 }
 
+static ssize_t edp_dpcd_write (struct file *file, const char __user *buf, size_t count, loff_t *ppos)
+{ 
+       return count;
+}
+
 static int edp_edid_debugfs_show(struct seq_file *s, void *v)
 {
        struct rk32_edp *edp = s->private;
@@ -1238,6 +1255,18 @@ static int edp_edid_debugfs_show(struct seq_file *s, void *v)
        return 0;
 }
 
+static ssize_t edp_edid_write (struct file *file, const char __user *buf, size_t count, loff_t *ppos)
+{ 
+       struct rk32_edp *edp =  ((struct seq_file *)file->private_data)->private;
+       if (!edp) {
+               dev_err(edp->dev, "no edp device!\n");
+               return -ENODEV;
+       }
+       rk32_edp_disable();
+       rk32_edp_enable();
+       return count;
+}
+
 static int edp_reg_debugfs_show(struct seq_file *s, void *v)
 {
        int i = 0;
@@ -1255,6 +1284,10 @@ static int edp_reg_debugfs_show(struct seq_file *s, void *v)
        return 0;
 }
 
+static ssize_t edp_reg_write (struct file *file, const char __user *buf, size_t count, loff_t *ppos)
+{ 
+       return count;
+}
 
 #define EDP_DEBUG_ENTRY(name) \
 static int edp_##name##_debugfs_open(struct inode *inode, struct file *file) \
@@ -1266,14 +1299,14 @@ static const struct file_operations edp_##name##_debugfs_fops = { \
        .owner = THIS_MODULE, \
        .open = edp_##name##_debugfs_open, \
        .read = seq_read, \
+       .write = edp_##name##_write,    \
        .llseek = seq_lseek, \
        .release = single_release, \
 }
 
-EDP_DEBUG_ENTRY(dpcd);
+EDP_DEBUG_ENTRY(dpcd); 
 EDP_DEBUG_ENTRY(edid);
 EDP_DEBUG_ENTRY(reg);
-
 #endif
 
 static int rk32_edp_probe(struct platform_device *pdev)
@@ -1339,10 +1372,6 @@ static int rk32_edp_probe(struct platform_device *pdev)
                dev_err(&pdev->dev, "cannot get pclk\n");
                return PTR_ERR(edp->pclk);
        }
-       clk_prepare(edp->pd);
-       clk_prepare(edp->pclk);
-       clk_prepare(edp->clk_edp);
-       clk_prepare(edp->clk_24m);
        rk32_edp_clk_enable(edp);
        if (!support_uboot_display())
                rk32_edp_pre_init();