From: Daniel(Qiang), Miao <qiang.m...@intel.com>

code refine on video dec/enc pm status at
/sys/devices/pci0000:00/0000:00:02.0/msvdx_pmstate
/sys/devices/pci0000:00/0000:00:02.0/topaz_pmstate
when using video driver runtime pm and dec/enc D0i3

Signed-off-by: Daniel(Qiang), Miao <qiang.m...@intel.com>
Signed-off-by: Hitesh K. Patel <hitesh.k.pa...@intel.com>
---
 drivers/staging/mrst/drv/psb_powermgmt.c |   26 ++++++++++++++++++++++----
 1 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/mrst/drv/psb_powermgmt.c 
b/drivers/staging/mrst/drv/psb_powermgmt.c
index 8c50579..9a849d5 100644
--- a/drivers/staging/mrst/drv/psb_powermgmt.c
+++ b/drivers/staging/mrst/drv/psb_powermgmt.c
@@ -180,6 +180,7 @@ static int ospm_runtime_pm_topaz_suspend(struct drm_device 
*dev)
        int ret = 0;
        struct drm_psb_private *dev_priv = dev->dev_private;
        struct topaz_private *topaz_priv = dev_priv->topaz_private;
+       struct pnw_topaz_private *pnw_topaz_priv = dev_priv->topaz_private;
 
        //printk(KERN_ALERT "enter %s\n", __func__);
 
@@ -211,17 +212,18 @@ static int ospm_runtime_pm_topaz_suspend(struct 
drm_device *dev)
         }
     }
 
-       TOPAZ_NEW_PMSTATE(dev, topaz_priv, PSB_PMSTATE_POWERDOWN);
 
        psb_irq_uninstall_islands(gpDrmDevice, OSPM_VIDEO_ENC_ISLAND);
     if(IS_MRST(dev)) {
         lnc_topaz_save_mtx_state(gpDrmDevice);
         lnc_unmap_topaz_reg(gpDrmDevice);
+       TOPAZ_NEW_PMSTATE(dev, topaz_priv, PSB_PMSTATE_POWERDOWN);
     }
 
     if(IS_MDFLD(dev)) {
         pnw_topaz_save_mtx_state(gpDrmDevice);
         pnw_unmap_topaz_reg(gpDrmDevice);
+       PNW_TOPAZ_NEW_PMSTATE(dev, pnw_topaz_priv, PSB_PMSTATE_POWERDOWN);
     }
        ospm_power_island_down(OSPM_VIDEO_ENC_ISLAND);
        //printk(KERN_ALERT "%s done\n", __func__);
@@ -233,21 +235,23 @@ static int ospm_runtime_pm_topaz_resume(struct drm_device 
*dev)
 {
        struct drm_psb_private *dev_priv = dev->dev_private;
        struct topaz_private *topaz_priv = dev_priv->topaz_private;
+       struct pnw_topaz_private *pnw_topaz_priv = dev_priv->topaz_private;
 
        //printk(KERN_ALERT "ospm_runtime_pm_topaz_resume\n");
 
-       TOPAZ_NEW_PMSTATE(dev, topaz_priv, PSB_PMSTATE_POWERUP);
 
     if (IS_MRST(dev)) {
         lnc_map_topaz_reg(gpDrmDevice);
         psb_irq_uninstall_islands(gpDrmDevice, OSPM_VIDEO_ENC_ISLAND);
         lnc_topaz_restore_mtx_state(gpDrmDevice);
+       TOPAZ_NEW_PMSTATE(dev, topaz_priv, PSB_PMSTATE_POWERUP);
     }
 
     if (IS_MDFLD(dev)) {
         pnw_map_topaz_reg(gpDrmDevice);
         psb_irq_uninstall_islands(gpDrmDevice, OSPM_VIDEO_ENC_ISLAND);
         pnw_topaz_restore_mtx_state(gpDrmDevice);
+       PNW_TOPAZ_NEW_PMSTATE(dev, pnw_topaz_priv, PSB_PMSTATE_POWERUP);
     }
 
        return 0;
@@ -299,6 +303,9 @@ out:
 #else
 void ospm_apm_power_down_msvdx(struct drm_device *dev)
 {
+       struct drm_psb_private *dev_priv = dev->dev_private;
+       struct msvdx_private *msvdx_priv = dev_priv->msvdx_private;
+
        mutex_lock(&g_ospm_mutex);
        if (!ospm_power_is_hw_on(OSPM_VIDEO_DEC_ISLAND))
                goto out;
@@ -312,6 +319,7 @@ void ospm_apm_power_down_msvdx(struct drm_device *dev)
        psb_msvdx_save_context(dev);
        ospm_power_island_down(OSPM_VIDEO_DEC_ISLAND);
        gbSuspendInProgress = false;
+       MSVDX_NEW_PMSTATE(dev, msvdx_priv, PSB_PMSTATE_POWERDOWN);
 out:
        mutex_unlock(&g_ospm_mutex);
        return;
@@ -319,25 +327,35 @@ out:
 
 void ospm_apm_power_down_topaz(struct drm_device *dev)
 {
+       struct drm_psb_private *dev_priv = dev->dev_private;
+       struct topaz_private *topaz_priv = dev_priv->topaz_private;
+       struct pnw_topaz_private *pnw_topaz_priv = dev_priv->topaz_private;
+
        mutex_lock(&g_ospm_mutex);
 
        if (!ospm_power_is_hw_on(OSPM_VIDEO_ENC_ISLAND))
                goto out;
        if (atomic_read(&g_videoenc_access_count))
                goto out;
-       if (lnc_check_topaz_idle(dev))
-               goto out;
+       if (IS_MRST(dev))
+               if (lnc_check_topaz_idle(dev))
+                       goto out;
+       if (IS_MDFLD(dev))
+               if (pnw_check_topaz_idle(dev))
+                       goto out;
  
        gbSuspendInProgress = true;
        if (IS_MRST(dev)) {
             psb_irq_uninstall_islands(dev, OSPM_VIDEO_ENC_ISLAND);
                lnc_topaz_save_mtx_state(dev);
                lnc_unmap_topaz_reg(dev);
+               TOPAZ_NEW_PMSTATE(dev, topaz_priv, PSB_PMSTATE_POWERDOWN);
        }
        if (IS_MDFLD(dev)) {
                psb_irq_uninstall_islands(dev, OSPM_VIDEO_ENC_ISLAND);
             pnw_topaz_save_mtx_state(gpDrmDevice);
                pnw_unmap_topaz_reg(gpDrmDevice);
+               PNW_TOPAZ_NEW_PMSTATE(dev, pnw_topaz_priv, 
PSB_PMSTATE_POWERDOWN);
        }
        ospm_power_island_down(OSPM_VIDEO_ENC_ISLAND);
        gbSuspendInProgress = false;
-- 
1.7.1

_______________________________________________
MeeGo-kernel mailing list
MeeGo-kernel@lists.meego.com
http://lists.meego.com/listinfo/meego-kernel

Reply via email to