[PATCH] pm: print the name of failed suspend function for platformdevice

From: Li Fei
Date: Mon Mar 18 2013 - 02:00:15 EST



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.liu@xxxxxxxxx>
Signed-off-by: Li Fei <fei.li@xxxxxxxxx>
---
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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/