From: Hitesh K. Patel <[email protected]>

Clean up DSR source and Enable it in Kernel config by default.

Signed-off-by: Jackie Li <[email protected]>
Signed-off-by: Hitesh K. Patel <[email protected]>
---
 drivers/staging/mrst/Kconfig                       |    2 +-
 drivers/staging/mrst/drv/psb_drm.h                 |    2 +
 drivers/staging/mrst/drv/psb_drv.c                 |   32 ++++++++++++++-----
 .../linux_framebuffer_mrst/mrstlfb_linux.c         |    6 +++-
 4 files changed, 31 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/mrst/Kconfig b/drivers/staging/mrst/Kconfig
index 1c174da..4863f5e 100644
--- a/drivers/staging/mrst/Kconfig
+++ b/drivers/staging/mrst/Kconfig
@@ -60,7 +60,7 @@ config DRM_MDFLD
 config MDFLD_DSI_DSR
        bool "Support DSI Display Self Refreshment"
        depends on MDFLD_DSI_DBI
-       default n
+       default y
        help
          Choose this option if you have a Type1 MIPI panel.
 
diff --git a/drivers/staging/mrst/drv/psb_drm.h 
b/drivers/staging/mrst/drv/psb_drm.h
index 1cf651b..a24e272 100644
--- a/drivers/staging/mrst/drv/psb_drm.h
+++ b/drivers/staging/mrst/drv/psb_drm.h
@@ -677,6 +677,8 @@ struct drm_psb_getpageaddrs_arg {
 #define DRM_PSB_DPU_DSR_ON 0x21
 #define DRM_PSB_DPU_DSR_OFF 0x22
 
+#define DRM_PSB_DSR_ENABLE     0xfffffffe
+#define DRM_PSB_DSR_DISABLE    0xffffffff
 
 struct psb_drm_dpu_rect {  
     int x, y;             
diff --git a/drivers/staging/mrst/drv/psb_drv.c 
b/drivers/staging/mrst/drv/psb_drv.c
index 10ac8c7..545cc39 100644
--- a/drivers/staging/mrst/drv/psb_drv.c
+++ b/drivers/staging/mrst/drv/psb_drv.c
@@ -2070,9 +2070,29 @@ static int psb_dpu_query_ioctl(struct drm_device *dev, 
void *arg,
 static int psb_dpu_dsr_on_ioctl(struct drm_device *dev, void *arg,
                                   struct drm_file *file_priv)
 {
-       /*todo: kick in DSR */
-       DRM_INFO("dsr kick in\n");
-       return 0;
+       u32 * param = (u32 *)arg;
+       struct drm_psb_private * dev_priv =
+               (struct drm_psb_private *)dev->dev_private;
+
+       if(!param) {
+               DRM_ERROR("Invalid parameter\n");
+               return -EINVAL;
+       }
+
+       DRM_INFO("dsr kick in. param 0x%08x\n", *param);
+
+       if(*param == DRM_PSB_DSR_DISABLE) {
+               DRM_INFO("DSR is turned off\n");
+               dev_priv->b_dsr_enable = false;
+               mdfld_dsi_dbi_exit_dsr (dev, MDFLD_DSR_2D_3D);
+               return 0;
+       } else if(*param == DRM_PSB_DSR_ENABLE) {
+               DRM_INFO("DSR is turned on\n");
+               dev_priv->b_dsr_enable = true;
+               return 0;
+       }
+
+       return -EINVAL;
 }
 
 #if MDFLD_JLIU7_DPU
@@ -2114,8 +2134,6 @@ static int psb_dpu_dsr_off_ioctl(struct drm_device *dev, 
void *arg,
        struct psb_drm_dpu_rect d_r_new = dsr_off_arg->damage_rect; 
        struct psb_drm_dpu_rect d_r_old = dev_priv->damage_rect_2d_3d;
 
-//     DRM_INFO("exit from DSR, x = %d, y = %d, width = %d, height = %d. \n", 
d_r_new.x, d_r_new.y, d_r_new.width, d_r_new.height);
-
        if (dev_priv->b_dpu_enable)  
                psb_dpu_combine_rect (&d_r_new, &d_r_old, 
&dev_priv->damage_rect_2d_3d);
 #endif /* MDFLD_JLIU7_DPU */
@@ -2125,7 +2143,6 @@ static int psb_dpu_dsr_off_ioctl(struct drm_device *dev, 
void *arg,
                mdfld_dsi_dbi_exit_dsr (dev, MDFLD_DSR_2D_3D);
        }
 
-//     DRM_INFO("exit from DSR\n");
        return 0;
 }
 #else /* MDFLD_JLIU7_DPU_2 */
@@ -2139,8 +2156,6 @@ static int psb_dpu_dsr_off_ioctl(struct drm_device *dev, 
void *arg,
        struct psb_drm_dpu_rect d_r_new = dsr_off_arg->damage_rect; 
        struct psb_drm_dpu_rect d_r_old = dev_priv->damage_rect_2d_3d;
 
-//     DRM_INFO("exit from DSR, x = %d, y = %d, width = %d, height = %d. \n", 
d_r_new.x, d_r_new.y, d_r_new.width, d_r_new.height);
-
        if (dev_priv->b_dpu_enable)  
                psb_dpu_combine_rect (&d_r_new, &d_r_old, 
&dev_priv->damage_rect_2d_3d);
 #endif /* MDFLD_JLIU7_DPU */
@@ -2150,7 +2165,6 @@ static int psb_dpu_dsr_off_ioctl(struct drm_device *dev, 
void *arg,
                mdfld_dsi_dbi_exit_dsr (dev, MDFLD_DSR_2D_3D);
        }
 
-//     DRM_INFO("exit from DSR\n");
        return 0;
 }
 #endif /* MDFLD_JLIU7_DPU_2 */
diff --git 
a/drivers/staging/mrst/pvr/services4/3rdparty/linux_framebuffer_mrst/mrstlfb_linux.c
 
b/drivers/staging/mrst/pvr/services4/3rdparty/linux_framebuffer_mrst/mrstlfb_linux.c
index dd6a4a4..8c62d1f 100644
--- 
a/drivers/staging/mrst/pvr/services4/3rdparty/linux_framebuffer_mrst/mrstlfb_linux.c
+++ 
b/drivers/staging/mrst/pvr/services4/3rdparty/linux_framebuffer_mrst/mrstlfb_linux.c
@@ -50,6 +50,8 @@
 
 #include "psb_drv.h"
 
+#include "mdfld_dsi_dbi.h"
+
 #if !defined(SUPPORT_DRI_DRM)
 #error "SUPPORT_DRI_DRM must be set"
 #endif
@@ -167,8 +169,10 @@ void MRSTLFBFlipToSurface(MRSTLFB_DEVINFO *psDevInfo,  
unsigned long uiAddr)
                        dspsurf = DSPCSURF;
                        MRSTLFBVSyncWriteReg(psDevInfo, dspsurf, uiAddr);
 #endif
-                       /*TODO: Add plane B flip here*/
+                       /*if in DSR mode, exit it!*/
+                       mdfld_dsi_dbi_exit_dsr (psDevInfo->psDrmDevice, 
MDFLD_DSR_2D_3D);
 
+                       /*TODO: Add plane B flip here*/
                } else {
                        MRSTLFBVSyncWriteReg(psDevInfo, dspbase, uiAddr);
                }
-- 
1.7.1

_______________________________________________
MeeGo-kernel mailing list
[email protected]
http://lists.meego.com/listinfo/meego-kernel

Reply via email to