Skip to content

Commit

Permalink
bus: ti-sysc: Add suspend and resume handling
Browse files Browse the repository at this point in the history
This allows us to idle the module on suspend after the children
are suspended.

Signed-off-by: Tony Lindgren <tony@atomide.com>
  • Loading branch information
tmlind committed Feb 26, 2018
1 parent 2c355ff commit 62020f2
Showing 1 changed file with 34 additions and 0 deletions.
34 changes: 34 additions & 0 deletions drivers/bus/ti-sysc.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ static const char * const clock_names[] = { "fck", "ick", };
* @cfg: interconnect target module configuration
* @name: name if available
* @revision: interconnect target module revision
* @needs_resume: runtime resume needed on resume from suspend
*/
struct sysc {
struct device *dev;
Expand All @@ -71,6 +72,8 @@ struct sysc {
struct sysc_config cfg;
const char *name;
u32 revision;
bool enabled;
bool needs_resume;
};

static u32 sysc_read(struct sysc *ddata, int offset)
Expand Down Expand Up @@ -497,7 +500,38 @@ static int __maybe_unused sysc_runtime_resume(struct device *dev)
return 0;
}

#ifdef CONFIG_PM_SLEEP
static int sysc_suspend(struct device *dev)
{
struct sysc *ddata;

ddata = dev_get_drvdata(dev);

if (!ddata->enabled)
return 0;

ddata->needs_resume = true;

return sysc_runtime_suspend(dev);
}

static int sysc_resume(struct device *dev)
{
struct sysc *ddata;

ddata = dev_get_drvdata(dev);
if (ddata->needs_resume) {
ddata->needs_resume = false;

return sysc_runtime_resume(dev);
}

return 0;
}
#endif

static const struct dev_pm_ops sysc_pm_ops = {
SET_SYSTEM_SLEEP_PM_OPS(sysc_suspend, sysc_resume)
SET_RUNTIME_PM_OPS(sysc_runtime_suspend,
sysc_runtime_resume,
NULL)
Expand Down

0 comments on commit 62020f2

Please sign in to comment.