#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;
}
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;
}
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
return 0;
}
+#if 0
static int rk32_edp_detect_hpd(struct rk32_edp *edp)
{
int timeout_loop = 0;
return 0;
}
-
+#endif
static int rk32_edp_read_edid(struct rk32_edp *edp)
{
unsigned char edid[EDID_LENGTH * 2];
return 0;
}
+#if 0
static int rk32_edp_handle_edid(struct rk32_edp *edp)
{
u8 buf[12];
return retval;
}
+
static int rk32_edp_enable_rx_to_enhanced_mode(struct rk32_edp *edp,
bool enable)
{
}*/
}
+
static int rk32_edp_is_enhanced_mode_available(struct rk32_edp *edp)
{
u8 data;
return DPCD_ENHANCED_FRAME_CAP(data);
}
+
static void rk32_edp_disable_rx_zmux(struct rk32_edp *edp)
{
/*rk32_edp_write_byte_to_dpcd(edp,
return 0;
}
+#endif
+#if defined(SW_LT)
static int rk32_edp_training_pattern_dis(struct rk32_edp *edp)
{
int retval;
rk32_edp_reduce_link_rate(edp);
return -EIO;
}
-
+#endif
static int rk32_edp_get_max_rx_bandwidth(struct rk32_edp *edp,
u8 *bandwidth)
{
return 0;
}
+#if defined(SW_LT)
static int rk32_edp_sw_link_training(struct rk32_edp *edp)
{
int retval = 0;
return retval;
}
-
+#else
static int rk32_edp_hw_link_training(struct rk32_edp *edp)
{
u32 cnt = 50;
return val;
}
+#endif
+
static int rk32_edp_set_link_train(struct rk32_edp *edp)
{
int retval;
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);
return retval;
}
+#if 0
static int rk32_edp_enable_scramble(struct rk32_edp *edp, bool enable)
{
u8 data;
return 0;
}
+#endif
static irqreturn_t rk32_edp_isr(int irq, void *arg)
{
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;
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;
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) \
.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)
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();