Skip to content

Commit 6331417

Browse files
Lukasz Lubamyungjoo
authored andcommitted
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>
1 parent 40e020c commit 6331417

File tree

1 file changed

+36
-26
lines changed

1 file changed

+36
-26
lines changed

drivers/devfreq/devfreq.c

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,40 @@ static int devfreq_notify_transition(struct devfreq *devfreq,
285285
return 0;
286286
}
287287

288+
static int devfreq_set_target(struct devfreq *devfreq, unsigned long new_freq,
289+
u32 flags)
290+
{
291+
struct devfreq_freqs freqs;
292+
unsigned long cur_freq;
293+
int err = 0;
294+
295+
if (devfreq->profile->get_cur_freq)
296+
devfreq->profile->get_cur_freq(devfreq->dev.parent, &cur_freq);
297+
else
298+
cur_freq = devfreq->previous_freq;
299+
300+
freqs.old = cur_freq;
301+
freqs.new = new_freq;
302+
devfreq_notify_transition(devfreq, &freqs, DEVFREQ_PRECHANGE);
303+
304+
err = devfreq->profile->target(devfreq->dev.parent, &new_freq, flags);
305+
if (err) {
306+
freqs.new = cur_freq;
307+
devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE);
308+
return err;
309+
}
310+
311+
freqs.new = new_freq;
312+
devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE);
313+
314+
if (devfreq_update_status(devfreq, new_freq))
315+
dev_err(&devfreq->dev,
316+
"Couldn't update frequency transition information.\n");
317+
318+
devfreq->previous_freq = new_freq;
319+
return err;
320+
}
321+
288322
/* Load monitoring helper functions for governors use */
289323

290324
/**
@@ -296,8 +330,7 @@ static int devfreq_notify_transition(struct devfreq *devfreq,
296330
*/
297331
int update_devfreq(struct devfreq *devfreq)
298332
{
299-
struct devfreq_freqs freqs;
300-
unsigned long freq, cur_freq, min_freq, max_freq;
333+
unsigned long freq, min_freq, max_freq;
301334
int err = 0;
302335
u32 flags = 0;
303336

@@ -333,31 +366,8 @@ int update_devfreq(struct devfreq *devfreq)
333366
flags |= DEVFREQ_FLAG_LEAST_UPPER_BOUND; /* Use LUB */
334367
}
335368

336-
if (devfreq->profile->get_cur_freq)
337-
devfreq->profile->get_cur_freq(devfreq->dev.parent, &cur_freq);
338-
else
339-
cur_freq = devfreq->previous_freq;
340-
341-
freqs.old = cur_freq;
342-
freqs.new = freq;
343-
devfreq_notify_transition(devfreq, &freqs, DEVFREQ_PRECHANGE);
369+
return devfreq_set_target(devfreq, freq, flags);
344370

345-
err = devfreq->profile->target(devfreq->dev.parent, &freq, flags);
346-
if (err) {
347-
freqs.new = cur_freq;
348-
devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE);
349-
return err;
350-
}
351-
352-
freqs.new = freq;
353-
devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE);
354-
355-
if (devfreq_update_status(devfreq, freq))
356-
dev_err(&devfreq->dev,
357-
"Couldn't update frequency transition information.\n");
358-
359-
devfreq->previous_freq = freq;
360-
return err;
361371
}
362372
EXPORT_SYMBOL(update_devfreq);
363373

0 commit comments

Comments
 (0)