PM / devfreq: add devfreq_suspend/resume() functions
This patch adds implementation for global suspend/resume for devfreq framework. System suspend will next use these functions. Suggested-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de> Suggested-by: Chanwoo Choi <cw00.choi@samsung.com> Signed-off-by: Lukasz Luba <l.luba@partner.samsung.com> Reviewed-by: Chanwoo Choi <cw00.choi@samsung.com> Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
This commit is contained in:
Родитель
83f8ca45af
Коммит
5903195605
|
@ -934,6 +934,50 @@ int devfreq_resume_device(struct devfreq *devfreq)
|
|||
}
|
||||
EXPORT_SYMBOL(devfreq_resume_device);
|
||||
|
||||
/**
|
||||
* devfreq_suspend() - Suspend devfreq governors and devices
|
||||
*
|
||||
* Called during system wide Suspend/Hibernate cycles for suspending governors
|
||||
* and devices preserving the state for resume. On some platforms the devfreq
|
||||
* device must have precise state (frequency) after resume in order to provide
|
||||
* fully operating setup.
|
||||
*/
|
||||
void devfreq_suspend(void)
|
||||
{
|
||||
struct devfreq *devfreq;
|
||||
int ret;
|
||||
|
||||
mutex_lock(&devfreq_list_lock);
|
||||
list_for_each_entry(devfreq, &devfreq_list, node) {
|
||||
ret = devfreq_suspend_device(devfreq);
|
||||
if (ret)
|
||||
dev_err(&devfreq->dev,
|
||||
"failed to suspend devfreq device\n");
|
||||
}
|
||||
mutex_unlock(&devfreq_list_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* devfreq_resume() - Resume devfreq governors and devices
|
||||
*
|
||||
* Called during system wide Suspend/Hibernate cycle for resuming governors and
|
||||
* devices that are suspended with devfreq_suspend().
|
||||
*/
|
||||
void devfreq_resume(void)
|
||||
{
|
||||
struct devfreq *devfreq;
|
||||
int ret;
|
||||
|
||||
mutex_lock(&devfreq_list_lock);
|
||||
list_for_each_entry(devfreq, &devfreq_list, node) {
|
||||
ret = devfreq_resume_device(devfreq);
|
||||
if (ret)
|
||||
dev_warn(&devfreq->dev,
|
||||
"failed to resume devfreq device\n");
|
||||
}
|
||||
mutex_unlock(&devfreq_list_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* devfreq_add_governor() - Add devfreq governor
|
||||
* @governor: the devfreq governor to be added
|
||||
|
|
|
@ -205,6 +205,9 @@ extern void devm_devfreq_remove_device(struct device *dev,
|
|||
extern int devfreq_suspend_device(struct devfreq *devfreq);
|
||||
extern int devfreq_resume_device(struct devfreq *devfreq);
|
||||
|
||||
extern void devfreq_suspend(void);
|
||||
extern void devfreq_resume(void);
|
||||
|
||||
/**
|
||||
* update_devfreq() - Reevaluate the device and configure frequency
|
||||
* @devfreq: the devfreq device
|
||||
|
@ -331,6 +334,9 @@ static inline int devfreq_resume_device(struct devfreq *devfreq)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline void devfreq_suspend(void) {}
|
||||
static inline void devfreq_resume(void) {}
|
||||
|
||||
static inline struct dev_pm_opp *devfreq_recommended_opp(struct device *dev,
|
||||
unsigned long *freq, u32 flags)
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче