mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04: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 <[email protected]> Suggested-by: Chanwoo Choi <[email protected]> Reviewed-by: Chanwoo Choi <[email protected]> Signed-off-by: Lukasz Luba <[email protected]> Signed-off-by: MyungJoo Ham <[email protected]>
This commit is contained in:
parent
40e020c129
commit
633141721b
1 changed files with 36 additions and 26 deletions
|
|
@ -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 a new issue