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
