rk fb: add set screen status for ddr change
authorzwl <zwl@rockchips.com>
Tue, 1 Jul 2014 02:32:18 +0000 (10:32 +0800)
committerzwl <zwl@rockchips.com>
Tue, 1 Jul 2014 02:32:18 +0000 (10:32 +0800)
drivers/video/rockchip/rk_fb.c
drivers/video/rockchip/transmitter/rk32_mipi_dsi.c
include/linux/rk_fb.h

index 3c1b6c917ca9d899b977e172ecf3ec5bfd20f53c..2fbb3104e64b197520886c6714802aa44ee8d847 100755 (executable)
@@ -569,6 +569,36 @@ u64 rk_fb_get_prmry_screen_framedone_t(void)
        return dev_drv->frame_time.framedone_t;
 }
 
+/*
+ * set prmry screen status
+ */
+int rk_fb_set_prmry_screen_status(int status)
+{
+       struct rk_lcdc_driver *dev_drv = rk_get_prmry_lcdc_drv();
+       struct rk_screen *screen = dev_drv->cur_screen;
+
+       switch (status) {
+       case SCREEN_PREPARE_DDR_CHANGE:
+               if (screen->type == SCREEN_MIPI
+                       || screen->type == SCREEN_DUAL_MIPI) {
+                       if (dev_drv->trsm_ops->dsp_pwr_off)
+                               dev_drv->trsm_ops->dsp_pwr_off();
+               }
+               break;
+       case SCREEN_UNPREPARE_DDR_CHANGE:
+               if (screen->type == SCREEN_MIPI
+                       || screen->type == SCREEN_DUAL_MIPI) {
+                       if (dev_drv->trsm_ops->dsp_pwr_on)
+                               dev_drv->trsm_ops->dsp_pwr_on();
+               }
+               break;
+       default:
+               break;
+       }
+
+       return 0;
+}
+
 #if 0
 static struct rk_lcdc_driver *rk_get_extend_lcdc_drv(void)
 {
index 1b654a4eb5c466c7e06ea7b8eeb3943295d0b0e1..37434edbd7ce3eddf864981ab9e86a91f355c291 100755 (executable)
@@ -101,6 +101,8 @@ static int rk32_mipi_dsi_enable_hs_clk(void *arg, u32 enable);
 static int rk32_mipi_dsi_enable_video_mode(void *arg, u32 enable);
 static int rk32_mipi_dsi_enable_command_mode(void *arg, u32 enable);
 static int rk32_mipi_dsi_is_enable(void *arg, u32 enable);
+static int rk32_mipi_power_down_DDR();
+static int rk32_mipi_power_up_DDR();
 int rk_mipi_screen_standby(u8 enable);
 
 #ifdef CONFIG_RK_3288_DSI_UBOOT
@@ -1377,6 +1379,8 @@ static struct rk_fb_trsm_ops trsm_dsi_ops =
 {
        .enable = rk32_dsi_enable,
        .disable = rk32_dsi_disable,
+       .dsp_pwr_on = rk32_mipi_power_up_DDR,
+       .dsp_pwr_off = rk32_mipi_power_down_DDR,
 };
 #endif
 static void rk32_init_phy_mode(int lcdc_id)
@@ -1557,15 +1561,15 @@ int rk32_mipi_enable(vidinfo_t *vid)
 }
 #endif
 #ifdef CONFIG_MIPI_DSI_LINUX
-int rk32_mipi_power_down_DDR(void)
+static int rk32_mipi_power_down_DDR(void)
 {      
        dsi_is_enable(0, 0);    
        if (rk_mipi_get_dsi_num() ==2)      
                dsi_is_enable(1, 0);            
        return 0;   
 }
-EXPORT_SYMBOL(rk32_mipi_power_down_DDR);
-int rk32_mipi_power_up_DDR(void)
+
+static int rk32_mipi_power_up_DDR(void)
 {      
        dsi_is_enable(0, 0);    
        if (rk_mipi_get_dsi_num() ==2)      
@@ -1577,7 +1581,6 @@ int rk32_mipi_power_up_DDR(void)
                dsi_is_enable(1, 1);    
        return 0;
 }
-EXPORT_SYMBOL(rk32_mipi_power_up_DDR);
 
 static int rk32_mipi_dsi_probe(struct platform_device *pdev)
 {
index 3bf63af3b887b86ad14d9302e974bba2d96fc489..37da53946f80d740fa2e1fa6cce80770f77d4be1 100755 (executable)
@@ -112,6 +112,7 @@ extern int rk_fb_poll_prmry_screen_vblank(void);
 extern u32 rk_fb_get_prmry_screen_ft(void);
 extern u32 rk_fb_get_prmry_screen_vbt(void);
 extern u64 rk_fb_get_prmry_screen_framedone_t(void);
+extern int rk_fb_set_prmry_screen_status(int status);
 extern bool rk_fb_poll_wait_frame_complete(void);
 
 /********************************************************************
@@ -242,6 +243,10 @@ typedef enum {
        H_COS           = 0x1
 } bcsh_hue_mode;
 
+typedef enum {
+       SCREEN_PREPARE_DDR_CHANGE = 0x0,
+       SCREEN_UNPREPARE_DDR_CHANGE,
+} screen_status;
 
 struct rk_fb_rgb {
        struct fb_bitfield red;
@@ -385,6 +390,8 @@ struct rk_lcdc_driver;
 struct rk_fb_trsm_ops {
        int (*enable)(void);
        int (*disable)(void);
+       int (*dsp_pwr_on) (void);
+       int (*dsp_pwr_off) (void);
 };
 
 struct rk_lcdc_drv_ops {