Skip to content

Commit 615db6d

Browse files
Shawn Guorafaeljw
authored andcommitted
PM: domains: Pass generic PM noirq hooks to genpd_finish_suspend()
While argument `poweroff` works fine for genpd_finish_suspend() to handle distinction between suspend and poweroff, it won't scale if we want to use it for freeze as well. Pass generic PM noirq hooks as arguments instead, so that the function can possibly cover freeze case too. Signed-off-by: Shawn Guo <shawn.guo@linaro.org> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
1 parent 5616ce7 commit 615db6d

1 file changed

Lines changed: 13 additions & 12 deletions

File tree

drivers/base/power/domain.c

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,12 +1189,15 @@ static int genpd_prepare(struct device *dev)
11891189
* genpd_finish_suspend - Completion of suspend or hibernation of device in an
11901190
* I/O pm domain.
11911191
* @dev: Device to suspend.
1192-
* @poweroff: Specifies if this is a poweroff_noirq or suspend_noirq callback.
1192+
* @suspend_noirq: Generic suspend_noirq callback.
1193+
* @resume_noirq: Generic resume_noirq callback.
11931194
*
11941195
* Stop the device and remove power from the domain if all devices in it have
11951196
* been stopped.
11961197
*/
1197-
static int genpd_finish_suspend(struct device *dev, bool poweroff)
1198+
static int genpd_finish_suspend(struct device *dev,
1199+
int (*suspend_noirq)(struct device *dev),
1200+
int (*resume_noirq)(struct device *dev))
11981201
{
11991202
struct generic_pm_domain *genpd;
12001203
int ret = 0;
@@ -1203,10 +1206,7 @@ static int genpd_finish_suspend(struct device *dev, bool poweroff)
12031206
if (IS_ERR(genpd))
12041207
return -EINVAL;
12051208

1206-
if (poweroff)
1207-
ret = pm_generic_poweroff_noirq(dev);
1208-
else
1209-
ret = pm_generic_suspend_noirq(dev);
1209+
ret = suspend_noirq(dev);
12101210
if (ret)
12111211
return ret;
12121212

@@ -1217,10 +1217,7 @@ static int genpd_finish_suspend(struct device *dev, bool poweroff)
12171217
!pm_runtime_status_suspended(dev)) {
12181218
ret = genpd_stop_dev(genpd, dev);
12191219
if (ret) {
1220-
if (poweroff)
1221-
pm_generic_restore_noirq(dev);
1222-
else
1223-
pm_generic_resume_noirq(dev);
1220+
resume_noirq(dev);
12241221
return ret;
12251222
}
12261223
}
@@ -1244,7 +1241,9 @@ static int genpd_suspend_noirq(struct device *dev)
12441241
{
12451242
dev_dbg(dev, "%s()\n", __func__);
12461243

1247-
return genpd_finish_suspend(dev, false);
1244+
return genpd_finish_suspend(dev,
1245+
pm_generic_suspend_noirq,
1246+
pm_generic_resume_noirq);
12481247
}
12491248

12501249
/**
@@ -1353,7 +1352,9 @@ static int genpd_poweroff_noirq(struct device *dev)
13531352
{
13541353
dev_dbg(dev, "%s()\n", __func__);
13551354

1356-
return genpd_finish_suspend(dev, true);
1355+
return genpd_finish_suspend(dev,
1356+
pm_generic_poweroff_noirq,
1357+
pm_generic_restore_noirq);
13571358
}
13581359

13591360
/**

0 commit comments

Comments
 (0)