mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
PM / devfreq: refactor set_target frequency function
The refactoring is needed for the new client in devfreq: suspend. To avoid code duplication, move it to the new local function devfreq_set_target. Suggested-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de> Suggested-by: Chanwoo Choi <cw00.choi@samsung.com> Reviewed-by: Chanwoo Choi <cw00.choi@samsung.com> Signed-off-by: Lukasz Luba <l.luba@partner.samsung.com> Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
This commit is contained in:
parent
40e020c129
commit
633141721b
@ -285,6 +285,40 @@ static int devfreq_notify_transition(struct devfreq *devfreq,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int devfreq_set_target(struct devfreq *devfreq, unsigned long new_freq,
|
||||
u32 flags)
|
||||
{
|
||||
struct devfreq_freqs freqs;
|
||||
unsigned long cur_freq;
|
||||
int err = 0;
|
||||
|
||||
if (devfreq->profile->get_cur_freq)
|
||||
devfreq->profile->get_cur_freq(devfreq->dev.parent, &cur_freq);
|
||||
else
|
||||
cur_freq = devfreq->previous_freq;
|
||||
|
||||
freqs.old = cur_freq;
|
||||
freqs.new = new_freq;
|
||||
devfreq_notify_transition(devfreq, &freqs, DEVFREQ_PRECHANGE);
|
||||
|
||||
err = devfreq->profile->target(devfreq->dev.parent, &new_freq, flags);
|
||||
if (err) {
|
||||
freqs.new = cur_freq;
|
||||
devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE);
|
||||
return err;
|
||||
}
|
||||
|
||||
freqs.new = new_freq;
|
||||
devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE);
|
||||
|
||||
if (devfreq_update_status(devfreq, new_freq))
|
||||
dev_err(&devfreq->dev,
|
||||
"Couldn't update frequency transition information.\n");
|
||||
|
||||
devfreq->previous_freq = new_freq;
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Load monitoring helper functions for governors use */
|
||||
|
||||
/**
|
||||
@ -296,8 +330,7 @@ static int devfreq_notify_transition(struct devfreq *devfreq,
|
||||
*/
|
||||
int update_devfreq(struct devfreq *devfreq)
|
||||
{
|
||||
struct devfreq_freqs freqs;
|
||||
unsigned long freq, cur_freq, min_freq, max_freq;
|
||||
unsigned long freq, min_freq, max_freq;
|
||||
int err = 0;
|
||||
u32 flags = 0;
|
||||
|
||||
@ -333,31 +366,8 @@ int update_devfreq(struct devfreq *devfreq)
|
||||
flags |= DEVFREQ_FLAG_LEAST_UPPER_BOUND; /* Use LUB */
|
||||
}
|
||||
|
||||
if (devfreq->profile->get_cur_freq)
|
||||
devfreq->profile->get_cur_freq(devfreq->dev.parent, &cur_freq);
|
||||
else
|
||||
cur_freq = devfreq->previous_freq;
|
||||
return devfreq_set_target(devfreq, freq, flags);
|
||||
|
||||
freqs.old = cur_freq;
|
||||
freqs.new = freq;
|
||||
devfreq_notify_transition(devfreq, &freqs, DEVFREQ_PRECHANGE);
|
||||
|
||||
err = devfreq->profile->target(devfreq->dev.parent, &freq, flags);
|
||||
if (err) {
|
||||
freqs.new = cur_freq;
|
||||
devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE);
|
||||
return err;
|
||||
}
|
||||
|
||||
freqs.new = freq;
|
||||
devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE);
|
||||
|
||||
if (devfreq_update_status(devfreq, freq))
|
||||
dev_err(&devfreq->dev,
|
||||
"Couldn't update frequency transition information.\n");
|
||||
|
||||
devfreq->previous_freq = freq;
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(update_devfreq);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user