#endif
+static struct edp_anx6345 *edp;
//#define BIST_MODE 0
static int i2c_master_reg8_send(const struct i2c_client *client,
const char reg, const char *buf, int count, int scl_rate)
}
-#ifdef CONFIG_HAS_EARLYSUSPEND
-static void anx6345_early_suspend(struct early_suspend *h)
+static int anx6345_disable(void)
{
- struct edp_anx6345 *anx6345 = container_of(h, struct edp_anx6345, early_suspend);
+ struct edp_anx6345 *anx6345 = edp;
+
+ if (!anx6345->pdata->pwron)
+ return 0;
gpio_set_value(anx6345->pdata->dvdd33_en_pin,!anx6345->pdata->dvdd33_en_val);
gpio_set_value(anx6345->pdata->dvdd18_en_pin,!anx6345->pdata->dvdd18_en_val);
+ anx6345->pdata->pwron = false;
+
+ return 0;
+
}
+
-static void anx6345_late_resume(struct early_suspend *h)
+static int anx6345_enable(void)
{
- struct edp_anx6345 *anx6345 = container_of(h, struct edp_anx6345, early_suspend);
- gpio_set_value(anx6345->pdata->dvdd33_en_pin,anx6345->pdata->dvdd33_en_val);
- msleep(5);
- gpio_set_value(anx6345->pdata->dvdd18_en_pin,anx6345->pdata->dvdd18_en_val);
- gpio_set_value(anx6345->pdata->edp_rst_pin,0);
- msleep(50);
- gpio_set_value(anx6345->pdata->edp_rst_pin,1);
+ struct edp_anx6345 *anx6345 = edp;
+
+ if (!anx6345->pdata->pwron) {
+ gpio_set_value(anx6345->pdata->dvdd33_en_pin,anx6345->pdata->dvdd33_en_val);
+ msleep(5);
+ gpio_set_value(anx6345->pdata->dvdd18_en_pin,anx6345->pdata->dvdd18_en_val);
+ gpio_set_value(anx6345->pdata->edp_rst_pin,0);
+ msleep(50);
+ gpio_set_value(anx6345->pdata->edp_rst_pin,1);
+ anx6345->pdata->pwron = true;
+ }
anx6345->edp_anx_init(anx6345->client);
+ return 0;
+}
+#ifdef CONFIG_HAS_EARLYSUSPEND
+static void anx6345_early_suspend(struct early_suspend *h)
+{
+ anx6345_disable();
+}
+
+static void anx6345_late_resume(struct early_suspend *h)
+{
+ anx6345_enable();
}
#endif
msleep(50);
gpio_direction_output(pdata->edp_rst_pin, 1);
}
+ pdata->pwron = true;
return 0;
}
+
+struct rk_fb_trsm_ops trsm_edp_ops = {
+ .enable = anx6345_enable,
+ .disable = anx6345_disable,
+
+};
static void anx6345_parse_dt(struct edp_anx6345 *anx6345)
{
struct device_node *np = anx6345->client->dev.of_node;
}
i2c_set_clientdata(client,anx6345);
rk_fb_get_prmry_screen(&anx6345->screen);
+ if (anx6345->screen.type != SCREEN_EDP){
+ dev_err(&client->dev, "screen is not edp!\n");
+ return -EINVAL;
+ }
if(anx6345->pdata->power_ctl)
anx6345->pdata->power_ctl(anx6345->pdata);
#if defined(CONFIG_DEBUG_FS)
anx6345->debugfs_dir = debugfs_create_dir("edp", NULL);
- if (IS_ERR(anx6345->debugfs_dir))
- {
- printk(KERN_ERR "failed to create debugfs dir for edp!\n");
+ if (IS_ERR(anx6345->debugfs_dir)) {
+ dev_err(&client->dev, "failed to create debugfs dir for edp!\n");
}
else
debugfs_create_file("edp-reg", S_IRUSR,anx6345->debugfs_dir,anx6345,&edp_reg_fops);
anx6345->edp_anx_init = anx980x_init;
else
anx6345->edp_anx_init = anx6345_init;
+ edp = anx6345;
- anx6345->edp_anx_init(client);
+ rk_fb_trsm_ops_register(&trsm_edp_ops, SCREEN_EDP);
dev_info(&client->dev, "edp anx%x probe ok \n", get_dp_chip_id(client));
i2c_del_driver(&anx6345_i2c_driver);
}
-fs_initcall_sync(anx6345_module_init);
+subsys_initcall_sync(anx6345_module_init);
module_exit(anx6345_module_exit);
/*#define EDP_BIST_MODE*/
+static struct rk32_edp *rk32_edp;
static int rk32_edp_init_edp(struct rk32_edp *edp)
{
struct rk_screen *screen = &edp->screen;
return IRQ_HANDLED;
}
-static int rk32_edp_enable(struct rk32_edp *edp)
+static int rk32_edp_enable(void)
{
int ret = 0;
int retry = 0;
-
+ struct rk32_edp *edp = rk32_edp;
if (edp->enabled)
goto out;
return ret;
}
-static void rk32_edp_disable(struct rk32_edp *edp)
+static int rk32_edp_disable(void )
{
+ struct rk32_edp *edp = rk32_edp;
+
if (!edp->enabled)
- return ;
+ return 0;
edp->enabled = 0;
clk_disable(edp->clk_24m);
clk_disable(edp->clk_edp);
+ return 0;
}
-
-static void rk32_edp_init(struct rk32_edp *edp)
-{
-
- rk32_edp_enable(edp);
-}
+static struct rk_fb_trsm_ops trsm_edp_ops = {
+ .enable = rk32_edp_enable,
+ .disable = rk32_edp_disable,
+};
static int rk32_edp_probe(struct platform_device *pdev)
{
struct rk32_edp *edp;
dev_err(&pdev->dev, "cannot claim IRQ %d\n", edp->irq);
return ret;
}
-
- rk32_edp_init(edp);
+ rk32_edp = edp;
+ rk_fb_trsm_ops_register(&trsm_edp_ops, SCREEN_EDP);
dev_info(&pdev->dev, "rk32 edp driver probe success\n");
return 0;
}
-fs_initcall(rk32_edp_module_init);
+subsys_initcall_sync(rk32_edp_module_init);
module_exit(rk32_edp_module_exit);
#include "rk32_lvds.h"
-static int rk32_lvds_disable(struct rk32_lvds *lvds)
+static struct rk32_lvds *rk32_lvds;
+static int rk32_lvds_disable(void)
{
+ struct rk32_lvds *lvds = rk32_lvds;
writel_relaxed(0x80008000, RK_GRF_VIRT + RK3288_GRF_SOC_CON7);
writel_relaxed(0x00, lvds->regs + LVDS_CFG_REG_21); /*disable tx*/
writel_relaxed(0xff, lvds->regs + LVDS_CFG_REG_c); /*disable pll*/
return 0;
}
-static int rk32_lvds_en(struct rk32_lvds *lvds)
+static int rk32_lvds_en(void)
{
+ struct rk32_lvds *lvds = rk32_lvds;
struct rk_screen *screen = &lvds->screen;
u32 h_bp = screen->mode.hsync_len + screen->mode.left_margin;
u32 val ;
}
-static int rk32_lvds_init(struct rk32_lvds *lvds, bool enable)
-{
-
- if (enable)
- rk32_lvds_en(lvds);
- else
- rk32_lvds_disable(lvds);
- return 0;
-}
+static struct rk_fb_trsm_ops trsm_lvds_ops = {
+ .enable = rk32_lvds_en,
+ .disable = rk32_lvds_disable,
+};
static int rk32_lvds_probe(struct platform_device *pdev)
{
dev_err(&pdev->dev, "ioremap reg failed\n");
return PTR_ERR(lvds->regs);
}
- rk32_lvds_init(lvds, true);
+
+ rk32_lvds = lvds;
+ rk_fb_trsm_ops_register(&trsm_lvds_ops,SCREEN_LVDS);
dev_info(&pdev->dev, "rk32 lvds driver probe success\n");
return 0;