From: Rajesh Poornachandran <[email protected]>

Medfield Runtim PM Support with DSR

Note:
- Panel would be ON and in DSR during S0i3. Panel will get turned OFF on X 
screen saver timeout.
- GFX PCI D3 will happen once value in /proc/dri/0/rtpm expires.
        - This value can be set to 10/20/30 secs by doing echo 1/2/3 into 
/proc/dri/0/rtpm.
        - Current value can be read via "cat /proc/dri/0/rtpm"

Signed-off-by: Rajesh Poornachandran <[email protected]>
Signed-off-by: Hitesh K. Patel <[email protected]>
---
 drivers/staging/mrst/drv/mdfld_dsi_dbi.c           |   21 +++++
 drivers/staging/mrst/drv/psb_drv.c                 |   48 +++++++++++-
 drivers/staging/mrst/drv/psb_drv.h                 |    1 +
 drivers/staging/mrst/drv/psb_intel_display2.c      |   23 ++++--
 drivers/staging/mrst/drv/psb_intel_reg.h           |    3 +
 drivers/staging/mrst/drv/psb_powermgmt.c           |   83 ++++++++++++++++---
 drivers/staging/mrst/drv/psb_reg.h                 |    6 +-
 .../mrst/pvr/services4/system/unified/sysconfig.c  |    2 +-
 8 files changed, 160 insertions(+), 27 deletions(-)

diff --git a/drivers/staging/mrst/drv/mdfld_dsi_dbi.c 
b/drivers/staging/mrst/drv/mdfld_dsi_dbi.c
index 45d8030..eff8976 100644
--- a/drivers/staging/mrst/drv/mdfld_dsi_dbi.c
+++ b/drivers/staging/mrst/drv/mdfld_dsi_dbi.c
@@ -33,6 +33,8 @@
 
 extern int allow_runtime_pm;
 extern struct drm_device *gpDrmDevice;
+bool bindsr = false;
+extern int gfxrtdelay;
 /**
  * set refreshing area
  */
@@ -407,6 +409,18 @@ void mdfld_dsi_dbi_enter_dsr (struct mdfld_dsi_dbi_output 
* dbi_output, int pipe
        
        /*update mode state to IN_DSR*/
        dbi_output->mode_flags |= MODE_SETTING_IN_DSR;
+
+#ifdef CONFIG_PM_RUNTIME
+       //Runtime PM
+        if(allow_runtime_pm && pipe == 2){
+               int ret = 0;
+               ret = pm_schedule_suspend(&gpDrmDevice->pdev->dev, gfxrtdelay);
+               if(ret)
+                      WARN(1, "FIXME-RAJESH: %s ret code: %d \n", __func__, 
ret);
+                bindsr = true;
+       }
+#endif
+
 }
 
 #ifndef CONFIG_MDFLD_DSI_DPU
@@ -421,6 +435,13 @@ static void mdfld_dbi_output_exit_dsr (struct 
mdfld_dsi_dbi_output * dbi_output,
        u32 dspcntr_reg = DSPACNTR;
        u32 reg_offset = 0;
 
+#ifdef CONFIG_PM_RUNTIME
+        //Runtime PM
+        if(allow_runtime_pm){
+               bindsr = false;
+       }
+#endif
+
        /*if mode setting on-going, back off*/
        if((dbi_output->mode_flags & MODE_SETTING_ON_GOING) ||
                (psb_crtc && psb_crtc->mode_flags & MODE_SETTING_ON_GOING)) 
diff --git a/drivers/staging/mrst/drv/psb_drv.c 
b/drivers/staging/mrst/drv/psb_drv.c
index a744e32..c07225b 100644
--- a/drivers/staging/mrst/drv/psb_drv.c
+++ b/drivers/staging/mrst/drv/psb_drv.c
@@ -78,6 +78,7 @@ int drm_topaz_pmpolicy = PSB_PMPOLICY_NOPM;
 int drm_topaz_sbuswa;
 int drm_psb_ospm = 1;
 int drm_psb_topaz_clockgating = 0;
+int gfxrtdelay = 2 * 1000;
 static int PanelID = GCT_DETECT;
 
 static int psb_probe(struct pci_dev *pdev, const struct pci_device_id *ent);
@@ -89,6 +90,7 @@ MODULE_PARM_DESC(disable_vsync, "Disable vsync interrupts");
 MODULE_PARM_DESC(force_pipeb, "Forces PIPEB to become primary fb");
 MODULE_PARM_DESC(ta_mem_size, "TA memory size in kiB");
 MODULE_PARM_DESC(ospm, "switch for ospm support");
+MODULE_PARM_DESC(rtpm, "Specifies Runtime PM delay for GFX");
 MODULE_PARM_DESC(msvdx_pmpolicy, "msvdx power management policy btw frames");
 MODULE_PARM_DESC(topaz_pmpolicy, "topaz power managerment policy btw frames");
 MODULE_PARM_DESC(topaz_sbuswa, "WA for topaz sysbus write");
@@ -101,6 +103,7 @@ module_param_named(msvdx_command_delay, drm_msvdx_delay, 
int, 0600);
 module_param_named(topaz_pmpolicy, drm_topaz_pmpolicy, int, 0600);
 module_param_named(topaz_sbuswa, drm_topaz_sbuswa, int, 0600);
 module_param_named(ospm, drm_psb_ospm, int, 0600);
+module_param_named(rtpm, gfxrtdelay, int, 0600);
 module_param_named(topaz_clockgating, drm_psb_topaz_clockgating, int, 0600);
 #ifndef MODULE
 /* Make ospm configurable via cmdline firstly, and others can be enabled if 
needed. */
@@ -2659,6 +2662,44 @@ static int psb_blc_read(char *buf, char **start, off_t 
offset, int request,
        return len - offset;
 }
 
+static int psb_rtpm_read(char *buf, char **start, off_t offset, int request,
+                        int *eof, void *data)
+{
+       printk(KERN_ALERT "Current Runtime PM delay for GFX: %d (ms) \n", 
gfxrtdelay);
+
+       return 0;
+}
+
+static int psb_rtpm_write(struct file *file, const char *buffer,
+       unsigned long count, void *data)
+{
+       char buf[2];
+       int temp = 0;
+       if (count != sizeof(buf)) {
+               return -EINVAL;
+       } else {
+               if (copy_from_user(buf, buffer, count))
+                       return -EINVAL;
+               if (buf[count-1] != '\n')
+                       return -EINVAL;
+               temp = buf[0] - '0';
+               switch(temp){
+                       case 1:
+                               gfxrtdelay = 10 * 1000;
+                       break;
+
+                       case 2:
+                               gfxrtdelay = 20 * 1000;
+                       break;
+                       default:
+                               gfxrtdelay = 30 * 1000;
+                       break;
+               }
+               printk(KERN_ALERT "Runtime PM delay set for GFX: %d (ms) \n", 
gfxrtdelay);
+       }
+       return count;
+}
+
 static int psb_ospm_read(char *buf, char **start, off_t offset, int request,
                         int *eof, void *data)
 {
@@ -2762,21 +2803,26 @@ static int psb_proc_init(struct drm_minor *minor)
 {
        struct proc_dir_entry *ent;
        struct proc_dir_entry *ent1;
+       struct proc_dir_entry *rtpm;
        ent = create_proc_entry(OSPM_PROC_ENTRY, 0644, minor->proc_root);
+       rtpm = create_proc_entry(RTPM_PROC_ENTRY, 0644, minor->proc_root);
        ent1 = create_proc_read_entry(BLC_PROC_ENTRY, 0, minor->proc_root,
                psb_blc_read, minor);
 
-       if (!ent || !ent1)
+       if (!ent || !ent1 || !rtpm)
                return -1;
        ent->read_proc = psb_ospm_read;
        ent->write_proc = psb_ospm_write;
        ent->data = (void *)minor;
+       rtpm->read_proc = psb_rtpm_read;
+       rtpm->write_proc = psb_rtpm_write;
        return 0;
 }
 
 static void psb_proc_cleanup(struct drm_minor *minor)
 {
        remove_proc_entry(OSPM_PROC_ENTRY, minor->proc_root);
+       remove_proc_entry(RTPM_PROC_ENTRY, minor->proc_root);
        remove_proc_entry(BLC_PROC_ENTRY, minor->proc_root);
        return;
 }
diff --git a/drivers/staging/mrst/drv/psb_drv.h 
b/drivers/staging/mrst/drv/psb_drv.h
index 02efbdd..d61532c 100644
--- a/drivers/staging/mrst/drv/psb_drv.h
+++ b/drivers/staging/mrst/drv/psb_drv.h
@@ -85,6 +85,7 @@ enum panel_type {
 #define DRIVER_DESC "drm driver for the Intel GMA500"
 #define DRIVER_AUTHOR "Intel Corporation"
 #define OSPM_PROC_ENTRY "ospm"
+#define RTPM_PROC_ENTRY "rtpm"
 #define BLC_PROC_ENTRY "mrst_blc"
 
 #define PSB_DRM_DRIVER_DATE "2009-03-10"
diff --git a/drivers/staging/mrst/drv/psb_intel_display2.c 
b/drivers/staging/mrst/drv/psb_intel_display2.c
index bcdda91..e4e8017 100644
--- a/drivers/staging/mrst/drv/psb_intel_display2.c
+++ b/drivers/staging/mrst/drv/psb_intel_display2.c
@@ -37,6 +37,7 @@ extern int allow_runtime_pm;
 extern struct drm_device *gpDrmDevice;
 extern void mdfld_save_display(struct drm_device *dev);
 
+
 /* MDFLD_PLATFORM start */
 void mdfldWaitForPipeDisable(struct drm_device *dev, int pipe)
 {
@@ -733,20 +734,23 @@ static void mdfld_crtc_dpms(struct drm_crtc *crtc, int 
mode)
                   if it's on this pipe */
                /* psb_intel_crtc_dpms_video(crtc, true); TODO */
 
+#ifdef CONFIG_PM_RUNTIME
                //Runtime PM
-               if(allow_runtime_pm){
-                       dev_priv->is_mipi_on = true;
-               }
+                if(allow_runtime_pm){
+                        dev_priv->is_mipi_on = true;
+                }
+#endif
 
                break;
        case DRM_MODE_DPMS_OFF:
                /* Give the overlay scaler a chance to disable
                 * if it's on this pipe */
                /* psb_intel_crtc_dpms_video(crtc, FALSE); TODO */
-
-               //Runtime PM
+#ifdef CONFIG_PM_RUNTIME
+                //Runtime PM
                 if(allow_runtime_pm && dev_priv->is_mipi_on && pipe == 0)
-                         mdfld_save_display(gpDrmDevice);
+                          mdfld_save_display(gpDrmDevice);
+#endif
 
                if (pipe != 1)
                        mdfld_dsi_gen_fifo_ready (dev, gen_fifo_stat_reg, 
HS_CTRL_FIFO_EMPTY | HS_DATA_FIFO_EMPTY);
@@ -801,12 +805,13 @@ static void mdfld_crtc_dpms(struct drm_crtc *crtc, int 
mode)
 #endif  /* MDFLD_PO_JLIU7 */   
                        }
                }
-
-               //Runtime PM
+#ifdef CONFIG_PM_RUNTIME
+               //Runtime PM
                 if(allow_runtime_pm && pipe == 1){
                         dev_priv->is_mipi_on = false;
-                        pm_request_idle(&gpDrmDevice->pdev->dev);
+                        //pm_request_idle(&gpDrmDevice->pdev->dev);
                 }
+#endif
 
                break;
        }
diff --git a/drivers/staging/mrst/drv/psb_intel_reg.h 
b/drivers/staging/mrst/drv/psb_intel_reg.h
index c95da7d..1e9af71 100644
--- a/drivers/staging/mrst/drv/psb_intel_reg.h
+++ b/drivers/staging/mrst/drv/psb_intel_reg.h
@@ -811,6 +811,9 @@ Ignore alpha.1110 = 32 - bit RGBX(8 : 8 : 8 : 8) pixel 
format.
 ;--------------------------------------------------------------------------*/
 #define MIPIC_REG_OFFSET             0x800
 #define DEVICE_READY_REG             0xb000
+#define LP_OUTPUT_HOLD               BIT16
+#define EXIT_ULPS_DEV_READY          0x3
+#define LP_OUTPUT_HOLD_RELEASE       0x810000
 # define ENTERING_ULPS         (2 << 1)
 # define EXITING_ULPS          (1 << 1)
 # define ULPS_MASK             (3 << 1)
diff --git a/drivers/staging/mrst/drv/psb_powermgmt.c 
b/drivers/staging/mrst/drv/psb_powermgmt.c
index ca0a87f..3abf30f 100644
--- a/drivers/staging/mrst/drv/psb_powermgmt.c
+++ b/drivers/staging/mrst/drv/psb_powermgmt.c
@@ -45,6 +45,7 @@ extern IMG_UINT32 gui32SGXDeviceID;
 extern IMG_UINT32 gui32MRSTDisplayDeviceID;
 extern IMG_UINT32 gui32MRSTMSVDXDeviceID;
 extern IMG_UINT32 gui32MRSTTOPAZDeviceID;
+extern bool bindsr;
 
 struct drm_device *gpDrmDevice = NULL;
 static struct mutex g_ospm_mutex;
@@ -986,6 +987,9 @@ static int mdfld_save_cursor_overlay_registers(struct 
drm_device *dev)
  */
 static int mdfld_restore_display_registers(struct drm_device *dev, int pipe)
 {
+        //to get  panel out of ULPS mode.
+        u32 temp = 0;
+        u32 device_ready_reg = DEVICE_READY_REG;
        int ret = 0;
        struct drm_psb_private *dev_priv = dev->dev_private;
        struct mdfld_dsi_dbi_output * dsi_output = dev_priv->dbi_output;
@@ -1224,13 +1228,36 @@ static int mdfld_restore_display_registers(struct 
drm_device *dev, int pipe)
     
        msleep(20);
 
+        /* LP Hold Release */
+        temp = REG_READ(mipi_reg);
+        temp |= LP_OUTPUT_HOLD_RELEASE;
+        REG_WRITE(mipi_reg, temp);
+        mdelay(1);
+
+
+        /* Set DSI host to exit from Utra Low Power State */
+        temp = REG_READ(device_ready_reg);
+        temp &= ~ULPS_MASK;
+        temp |= 0x3;
+        temp |= EXIT_ULPS_DEV_READY;
+        REG_WRITE(device_ready_reg, temp);
+        mdelay(1);
+
+        temp = REG_READ(device_ready_reg);
+        temp &= ~ULPS_MASK;
+        temp |= EXITING_ULPS;
+        REG_WRITE(device_ready_reg, temp);
+        mdelay(1);
+
+#if 0
+
        /*send exit_sleep_mode DCS*/
        ret = mdfld_dsi_dbi_send_dcs(dsi_output, exit_sleep_mode, NULL, 0, 
CMD_DATA_SRC_SYSTEM_MEM);
        if(ret) {
                DRM_ERROR("%s, sent exit_sleep_mode faild. \n", __FUNCTION__);
                return -EINVAL;
        }
-
+#endif
        if (dev_priv->platform_rev_id != MDFLD_PNW_A0) {
                /*send set_tear_on DCS*/
                ret = mdfld_dsi_dbi_send_dcs(dsi_output, set_tear_on, &param, 
1, CMD_DATA_SRC_SYSTEM_MEM);
@@ -1260,12 +1287,14 @@ static int mdfld_restore_display_registers(struct 
drm_device *dev, int pipe)
                return -EINVAL;
        }
 
+#if 0
        /*send set_display_on DCS*/
        ret = mdfld_dsi_dbi_send_dcs(dsi_output, set_display_on, NULL, 0, 
CMD_DATA_SRC_SYSTEM_MEM);
        if(ret) {
                DRM_ERROR("%s, sent set_display_on faild. \n", __FUNCTION__);
                return -EINVAL;
        }
+#endif
 
        if (dev_priv->platform_rev_id != MDFLD_PNW_A0) {
 
@@ -1338,7 +1367,9 @@ static int mdfld_restore_cursor_overlay_registers(struct 
drm_device *dev)
  */
 void mdfld_save_display(struct drm_device *dev)
 {
+#ifdef OSPM_GFX_DPK
        printk(KERN_ALERT "ospm_save_display\n");
+#endif
 
        mdfld_save_cursor_overlay_registers(dev);
 
@@ -1363,6 +1394,10 @@ void ospm_suspend_display(struct drm_device *dev)
        struct mdfld_dbi_dsr_info * dsr_info = dev_priv->dbi_dsr_info;
        struct timer_list * dsr_timer = &dsr_info->dsr_timer;
 #endif
+        //to put panel into ULPS mode.
+        u32 temp = 0;
+        u32 device_ready_reg = DEVICE_READY_REG;
+        u32 mipi_reg = MIPI;
 
        if (!(g_hw_power_status_mask & OSPM_DISPLAY_ISLAND))
                return;
@@ -1386,8 +1421,11 @@ void ospm_suspend_display(struct drm_device *dev)
 
                if(dev_priv->is_mipi_on){
                        mdfld_save_display_registers(dev, 0);
+//Put the panel in ULPS mode; don't turn OFF during S0ix.
+#if 0
                        if (mdfld_dsi_dbi_update_power(dev_priv->dbi_output, 
DRM_MODE_DPMS_OFF)) 
                                DRM_ERROR("%s, can't disable dbi_0 panel. \n", 
__FUNCTION__);
+#endif
                        
                }
 
@@ -1395,8 +1433,11 @@ void ospm_suspend_display(struct drm_device *dev)
 
                if(dev_priv->is_mipi_on){
                        mdfld_save_display_registers(dev, 2);
+//Put the panel in ULPS mode; don't turn OFF during S0ix.
+#if 0
                        if (mdfld_dsi_dbi_update_power(dev_priv->dbi_output2, 
DRM_MODE_DPMS_OFF)) 
                                DRM_ERROR("%s, can't disable dbi_2 panel. \n", 
__FUNCTION__);
+#endif
 
                }
 
@@ -1421,6 +1462,18 @@ void ospm_suspend_display(struct drm_device *dev)
                }
 #endif 
 
+               /* Put the panel in ULPS mode for S0ix. */
+               temp = REG_READ(device_ready_reg);
+               temp &= ~ULPS_MASK;
+               temp |= ENTERING_ULPS;
+               REG_WRITE(device_ready_reg, temp);
+
+               //LP Hold
+               temp = REG_READ(mipi_reg);
+               temp &= ~LP_OUTPUT_HOLD;
+               REG_WRITE(mipi_reg, temp);
+               mdelay(1);
+
        } else {
                save_display_registers(dev);
                
@@ -1548,7 +1601,9 @@ static void ospm_suspend_pci(struct pci_dev *pdev)
        if (gbSuspended)
                return;
 
-       /*printk(KERN_ALERT "ospm_suspend_pci\n");*/
+#ifdef OSPM_GFX_DPK
+       printk(KERN_ALERT "ospm_suspend_pci\n");
+#endif
 
 #ifdef CONFIG_MDFD_GL3
        // Power off GL3 after all GFX sub-systems are powered off.
@@ -1584,7 +1639,9 @@ static bool ospm_resume_pci(struct pci_dev *pdev)
        if (!gbSuspended)
                return true;
 
-       /*printk(KERN_ALERT "ospm_resume_pci\n");*/
+#ifdef OSPM_GFX_DPK
+       printk(KERN_ALERT "ospm_resume_pci\n");
+#endif
 
        pci_set_power_state(pdev, PCI_D0);
        pci_restore_state(pdev);
@@ -1769,7 +1826,7 @@ void ospm_power_island_up(int hw_islands)
                        if (dev_priv->platform_rev_id != MDFLD_PNW_A0)
                                pwr_mask = MDFLD_PWRGT_DISPLAY_STS_B0;
                        else
-                               pwr_mask = MDFLD_PWRGT_DISPLAY_STS;
+                               pwr_mask = MDFLD_PWRGT_DISPLAY_STS_A0;
                }
 
                while (true) {
@@ -1891,7 +1948,7 @@ void ospm_power_island_down(int islands)
                        if (dev_priv->platform_rev_id != MDFLD_PNW_A0)
                                pwr_mask = MDFLD_PWRGT_DISPLAY_STS_B0;
                        else
-                               pwr_mask = MDFLD_PWRGT_DISPLAY_STS;
+                               pwr_mask = MDFLD_PWRGT_DISPLAY_STS_A0;
                }
 
                while (true) {
@@ -1947,6 +2004,10 @@ bool ospm_power_using_hw_begin(int hw_island, UHBUsage 
usage)
                        return false;
                else {
                        locked = false;
+#ifdef CONFIG_PM_RUNTIME
+                       /* increment pm_runtime_refcount */
+                       pm_runtime_get(&pdev->dev);
+#endif
                        goto increase_count;
                }
        }
@@ -2064,8 +2125,6 @@ increase_count:
                                atomic_inc(&g_display_access_count);
                                break;
                }
-               /* increment pm_runtime_refcount */
-               pm_runtime_get(&pdev->dev);
        }
 
        if (!b_atomic && locked)
@@ -2110,7 +2169,6 @@ void ospm_power_using_hw_end(int hw_island)
 }
 int psb_runtime_suspend(struct device *dev)
 {
-       struct drm_psb_private* dev_priv = gpDrmDevice->dev_private;
        pm_message_t state;
        int ret = 0;
        state.event = 0;
@@ -2120,11 +2178,11 @@ int psb_runtime_suspend(struct device *dev)
 #endif
         if (atomic_read(&g_graphics_access_count) || 
atomic_read(&g_videoenc_access_count)
            || atomic_read(&g_videodec_access_count) || 
atomic_read(&g_display_access_count)
-           || dev_priv->is_mipi_on ){
+          || (bindsr == false) ){
 #ifdef OSPM_GFX_DPK
-                printk(KERN_ALERT "OSPM_GFX_DPK: GFX: %d VEC: %d VED: %d DC: 
%d MIPI: %d \n", atomic_read(&g_graphics_access_count),
+                printk(KERN_ALERT "OSPM_GFX_DPK: GFX: %d VEC: %d VED: %d DC: 
%d DSR: %d \n", atomic_read(&g_graphics_access_count),
                          atomic_read(&g_videoenc_access_count), 
atomic_read(&g_videodec_access_count), atomic_read(&g_display_access_count),
-                        dev_priv->is_mipi_on);
+                        bindsr?1:0);
 #endif
                 return -EBUSY;
         }
@@ -2142,7 +2200,6 @@ int psb_runtime_resume(struct device *dev)
 
 int psb_runtime_idle(struct device *dev)
 {
-       struct drm_psb_private* dev_priv = gpDrmDevice->dev_private;
 #if 1
     int msvdx_hw_busy = 0;
     int topaz_hw_busy = 0;
@@ -2153,7 +2210,7 @@ int psb_runtime_idle(struct device *dev)
        /*printk (KERN_ALERT "lvds:%d,mipi:%d\n", dev_priv->is_lvds_on, 
dev_priv->is_mipi_on);*/
        if (atomic_read(&g_graphics_access_count) || 
atomic_read(&g_videoenc_access_count)
           || atomic_read(&g_videodec_access_count) || 
atomic_read(&g_display_access_count)
-          || dev_priv->is_lvds_on || dev_priv->is_mipi_on
+          || (bindsr == false)
 #if 1
        || (msvdx_hw_busy == 1)
        || (topaz_hw_busy == 1))
diff --git a/drivers/staging/mrst/drv/psb_reg.h 
b/drivers/staging/mrst/drv/psb_reg.h
index cbe5405..d80b4f3 100644
--- a/drivers/staging/mrst/drv/psb_reg.h
+++ b/drivers/staging/mrst/drv/psb_reg.h
@@ -572,7 +572,7 @@
 #define MDFLD_PWRGT_DISPLAY_B_CNTR  0x0000c000 
 #define MDFLD_PWRGT_DISPLAY_C_CNTR  0x00030000 
 #define MDFLD_PWRGT_DISP_MIPI_CNTR  0x000c0000 
-#define MDFLD_PWRGT_DISPLAY_CNTR    (MDFLD_PWRGT_DISPLAY_A_CNTR | 
MDFLD_PWRGT_DISPLAY_C_CNTR)// 0x000fc00c 
+#define MDFLD_PWRGT_DISPLAY_CNTR    (MDFLD_PWRGT_DISPLAY_A_CNTR | 
MDFLD_PWRGT_DISPLAY_B_CNTR | MDFLD_PWRGT_DISPLAY_C_CNTR | 
MDFLD_PWRGT_DISP_MIPI_CNTR)// 0x000fc00c
 // Display SSS register bits are different in A0 vs. B0
 #define PSB_PWRGT_GFX_MASK         0x3
 #define MDFLD_PWRGT_DISPLAY_A_STS              0x000000c0
@@ -583,6 +583,6 @@
 #define MDFLD_PWRGT_DISPLAY_B_STS_B0   0x0000c000
 #define MDFLD_PWRGT_DISPLAY_C_STS_B0   0x00030000
 #define MDFLD_PWRGT_DISP_MIPI_STS  0x000c0000 
-#define MDFLD_PWRGT_DISPLAY_STS    (MDFLD_PWRGT_DISPLAY_A_STS | 
MDFLD_PWRGT_DISPLAY_C_STS)// 0x000fc00c 
-#define MDFLD_PWRGT_DISPLAY_STS_B0    (MDFLD_PWRGT_DISPLAY_A_STS_B0 | 
MDFLD_PWRGT_DISPLAY_C_STS_B0)// 0x000fc00c
+#define MDFLD_PWRGT_DISPLAY_STS_A0    (MDFLD_PWRGT_DISPLAY_A_STS | 
MDFLD_PWRGT_DISPLAY_B_STS | MDFLD_PWRGT_DISPLAY_C_STS | 
MDFLD_PWRGT_DISP_MIPI_STS)// 0x000fc00c
+#define MDFLD_PWRGT_DISPLAY_STS_B0    (MDFLD_PWRGT_DISPLAY_A_STS_B0 | 
MDFLD_PWRGT_DISPLAY_B_STS_B0 | MDFLD_PWRGT_DISPLAY_C_STS_B0 | 
MDFLD_PWRGT_DISP_MIPI_STS)// 0x000fc00c
 #endif
diff --git a/drivers/staging/mrst/pvr/services4/system/unified/sysconfig.c 
b/drivers/staging/mrst/pvr/services4/system/unified/sysconfig.c
index 1053174..abadea2 100644
--- a/drivers/staging/mrst/pvr/services4/system/unified/sysconfig.c
+++ b/drivers/staging/mrst/pvr/services4/system/unified/sysconfig.c
@@ -1163,9 +1163,9 @@ PVRSRV_ERROR SysDevicePrePowerState(IMG_UINT32            
        ui32DeviceIndex,
                {
                        PVR_DPF((PVR_DBG_MESSAGE,"SysDevicePrePowerState: 
Remove SGX power"));
 #if defined(SUPPORT_DRI_DRM_EXT)
-                       ospm_power_using_hw_end(OSPM_GRAPHICS_ISLAND);
                        psb_irq_uninstall_islands(gpDrmDevice, 
OSPM_GRAPHICS_ISLAND);
                        ospm_power_island_down(OSPM_GRAPHICS_ISLAND);
+                       ospm_power_using_hw_end(OSPM_GRAPHICS_ISLAND);
 #endif
                }
 #if 0
-- 
1.7.1

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

Reply via email to