Print more info when platform device suspend function failed.
Without this patch, we can not get the real platform device suspend
API info.

Example without this patch:
pm_op(): platform_pm_suspend+0x0/0x50 returns -11
PM: Device power.0 failed to suspend: error -11

And with this patch:
platform_pm_suspend(): power_suspend+0x0/0x30 returns -11
pm_op(): platform_pm_suspend+0x0/0x80 returns -11
PM: Device power.0 failed to suspend: error -11

Signed-off-by: liu chuansheng <chuansheng....@intel.com>
Signed-off-by: Li Fei <fei...@intel.com>
---
 drivers/base/platform.c |   19 +++++++++++++++----
 1 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index c0b8df3..96a452a 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -747,8 +747,10 @@ static int platform_legacy_suspend(struct device *dev, 
pm_message_t mesg)
        struct platform_device *pdev = to_platform_device(dev);
        int ret = 0;
 
-       if (dev->driver && pdrv->suspend)
+       if (dev->driver && pdrv->suspend) {
                ret = pdrv->suspend(pdev, mesg);
+               suspend_report_result(pdrv->suspend, ret);
+       }
 
        return ret;
 }
@@ -778,10 +780,13 @@ int platform_pm_suspend(struct device *dev)
                return 0;
 
        if (drv->pm) {
-               if (drv->pm->suspend)
+               if (drv->pm->suspend) {
                        ret = drv->pm->suspend(dev);
+                       suspend_report_result(drv->pm->suspend, ret);
+               }
        } else {
                ret = platform_legacy_suspend(dev, PMSG_SUSPEND);
+               suspend_report_result(platform_legacy_suspend, ret);
        }
 
        return ret;
@@ -818,10 +823,13 @@ int platform_pm_freeze(struct device *dev)
                return 0;
 
        if (drv->pm) {
-               if (drv->pm->freeze)
+               if (drv->pm->freeze) {
                        ret = drv->pm->freeze(dev);
+                       suspend_report_result(drv->pm->freeze, ret);
+               }
        } else {
                ret = platform_legacy_suspend(dev, PMSG_FREEZE);
+               suspend_report_result(platform_legacy_suspend, ret);
        }
 
        return ret;
@@ -854,10 +862,13 @@ int platform_pm_poweroff(struct device *dev)
                return 0;
 
        if (drv->pm) {
-               if (drv->pm->poweroff)
+               if (drv->pm->poweroff) {
                        ret = drv->pm->poweroff(dev);
+                       suspend_report_result(drv->pm->poweroff, ret);
+               }
        } else {
                ret = platform_legacy_suspend(dev, PMSG_HIBERNATE);
+               suspend_report_result(platform_legacy_suspend, ret);
        }
 
        return ret;
-- 
1.7.4.1





--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to