]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - drivers/devfreq/devfreq.c
Merge tag 'nios2-v5.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/lftan...
[mirror_ubuntu-jammy-kernel.git] / drivers / devfreq / devfreq.c
CommitLineData
d2912cb1 1// SPDX-License-Identifier: GPL-2.0-only
a3c98b8b
MH
2/*
3 * devfreq: Generic Dynamic Voltage and Frequency Scaling (DVFS) Framework
4 * for Non-CPU Devices.
5 *
6 * Copyright (C) 2011 Samsung Electronics
7 * MyungJoo Ham <myungjoo.ham@samsung.com>
a3c98b8b
MH
8 */
9
10#include <linux/kernel.h>
23c7b54c 11#include <linux/kmod.h>
a3c98b8b 12#include <linux/sched.h>
490a421b 13#include <linux/debugfs.h>
a3c98b8b
MH
14#include <linux/errno.h>
15#include <linux/err.h>
16#include <linux/init.h>
417dc4bb 17#include <linux/export.h>
a3c98b8b 18#include <linux/slab.h>
952f6d13 19#include <linux/stat.h>
e4db1c74 20#include <linux/pm_opp.h>
a3c98b8b
MH
21#include <linux/devfreq.h>
22#include <linux/workqueue.h>
23#include <linux/platform_device.h>
24#include <linux/list.h>
25#include <linux/printk.h>
26#include <linux/hrtimer.h>
8f510aeb 27#include <linux/of.h>
05d7ae15 28#include <linux/pm_qos.h>
a3c98b8b
MH
29#include "governor.h"
30
cf451adf
LL
31#define CREATE_TRACE_POINTS
32#include <trace/events/devfreq.h>
33
05d7ae15
LC
34#define HZ_PER_KHZ 1000
35
1a1357ea 36static struct class *devfreq_class;
490a421b 37static struct dentry *devfreq_debugfs;
a3c98b8b
MH
38
39/*
7e6fdd4b
RV
40 * devfreq core provides delayed work based load monitoring helper
41 * functions. Governors can use these or can implement their own
42 * monitoring mechanism.
a3c98b8b 43 */
a3c98b8b 44static struct workqueue_struct *devfreq_wq;
a3c98b8b 45
3aa173b8
NM
46/* The list of all device-devfreq governors */
47static LIST_HEAD(devfreq_governor_list);
a3c98b8b
MH
48/* The list of all device-devfreq */
49static LIST_HEAD(devfreq_list);
50static DEFINE_MUTEX(devfreq_list_lock);
51
52/**
53 * find_device_devfreq() - find devfreq struct using device pointer
54 * @dev: device pointer used to lookup device devfreq.
55 *
56 * Search the list of device devfreqs and return the matched device's
57 * devfreq info. devfreq_list_lock should be held by the caller.
58 */
59static struct devfreq *find_device_devfreq(struct device *dev)
60{
61 struct devfreq *tmp_devfreq;
62
9348da2f 63 if (IS_ERR_OR_NULL(dev)) {
a3c98b8b
MH
64 pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
65 return ERR_PTR(-EINVAL);
66 }
67 WARN(!mutex_is_locked(&devfreq_list_lock),
68 "devfreq_list_lock must be locked.");
69
70 list_for_each_entry(tmp_devfreq, &devfreq_list, node) {
71 if (tmp_devfreq->dev.parent == dev)
72 return tmp_devfreq;
73 }
74
75 return ERR_PTR(-ENODEV);
76}
77
ab8f58ad
CC
78static unsigned long find_available_min_freq(struct devfreq *devfreq)
79{
80 struct dev_pm_opp *opp;
81 unsigned long min_freq = 0;
82
83 opp = dev_pm_opp_find_freq_ceil(devfreq->dev.parent, &min_freq);
84 if (IS_ERR(opp))
85 min_freq = 0;
86 else
87 dev_pm_opp_put(opp);
88
89 return min_freq;
90}
91
92static unsigned long find_available_max_freq(struct devfreq *devfreq)
93{
94 struct dev_pm_opp *opp;
95 unsigned long max_freq = ULONG_MAX;
96
97 opp = dev_pm_opp_find_freq_floor(devfreq->dev.parent, &max_freq);
98 if (IS_ERR(opp))
99 max_freq = 0;
100 else
101 dev_pm_opp_put(opp);
102
103 return max_freq;
104}
105
46cecc0b
LC
106/**
107 * get_freq_range() - Get the current freq range
108 * @devfreq: the devfreq instance
109 * @min_freq: the min frequency
110 * @max_freq: the max frequency
111 *
112 * This takes into consideration all constraints.
113 */
114static void get_freq_range(struct devfreq *devfreq,
115 unsigned long *min_freq,
116 unsigned long *max_freq)
117{
118 unsigned long *freq_table = devfreq->profile->freq_table;
05d7ae15 119 s32 qos_min_freq, qos_max_freq;
46cecc0b
LC
120
121 lockdep_assert_held(&devfreq->lock);
122
123 /*
124 * Initialize minimum/maximum frequency from freq table.
125 * The devfreq drivers can initialize this in either ascending or
126 * descending order and devfreq core supports both.
127 */
128 if (freq_table[0] < freq_table[devfreq->profile->max_state - 1]) {
129 *min_freq = freq_table[0];
130 *max_freq = freq_table[devfreq->profile->max_state - 1];
131 } else {
132 *min_freq = freq_table[devfreq->profile->max_state - 1];
133 *max_freq = freq_table[0];
134 }
135
05d7ae15
LC
136 /* Apply constraints from PM QoS */
137 qos_min_freq = dev_pm_qos_read_value(devfreq->dev.parent,
138 DEV_PM_QOS_MIN_FREQUENCY);
139 qos_max_freq = dev_pm_qos_read_value(devfreq->dev.parent,
140 DEV_PM_QOS_MAX_FREQUENCY);
141 *min_freq = max(*min_freq, (unsigned long)HZ_PER_KHZ * qos_min_freq);
142 if (qos_max_freq != PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE)
143 *max_freq = min(*max_freq,
144 (unsigned long)HZ_PER_KHZ * qos_max_freq);
145
46cecc0b
LC
146 /* Apply constraints from OPP interface */
147 *min_freq = max(*min_freq, devfreq->scaling_min_freq);
148 *max_freq = min(*max_freq, devfreq->scaling_max_freq);
149
150 if (*min_freq > *max_freq)
151 *min_freq = *max_freq;
152}
153
e552bbaf
JL
154/**
155 * devfreq_get_freq_level() - Lookup freq_table for the frequency
156 * @devfreq: the devfreq instance
157 * @freq: the target frequency
158 */
159static int devfreq_get_freq_level(struct devfreq *devfreq, unsigned long freq)
160{
161 int lev;
162
163 for (lev = 0; lev < devfreq->profile->max_state; lev++)
164 if (freq == devfreq->profile->freq_table[lev])
165 return lev;
166
167 return -EINVAL;
168}
169
ea572f81 170static int set_freq_table(struct devfreq *devfreq)
0ec09ac2
CC
171{
172 struct devfreq_dev_profile *profile = devfreq->profile;
173 struct dev_pm_opp *opp;
174 unsigned long freq;
175 int i, count;
176
177 /* Initialize the freq_table from OPP table */
178 count = dev_pm_opp_get_opp_count(devfreq->dev.parent);
179 if (count <= 0)
ea572f81 180 return -EINVAL;
0ec09ac2
CC
181
182 profile->max_state = count;
183 profile->freq_table = devm_kcalloc(devfreq->dev.parent,
184 profile->max_state,
185 sizeof(*profile->freq_table),
186 GFP_KERNEL);
187 if (!profile->freq_table) {
188 profile->max_state = 0;
ea572f81 189 return -ENOMEM;
0ec09ac2
CC
190 }
191
0ec09ac2
CC
192 for (i = 0, freq = 0; i < profile->max_state; i++, freq++) {
193 opp = dev_pm_opp_find_freq_ceil(devfreq->dev.parent, &freq);
194 if (IS_ERR(opp)) {
195 devm_kfree(devfreq->dev.parent, profile->freq_table);
196 profile->max_state = 0;
ea572f81 197 return PTR_ERR(opp);
0ec09ac2 198 }
8a31d9d9 199 dev_pm_opp_put(opp);
0ec09ac2
CC
200 profile->freq_table[i] = freq;
201 }
ea572f81
CC
202
203 return 0;
0ec09ac2
CC
204}
205
e552bbaf
JL
206/**
207 * devfreq_update_status() - Update statistics of devfreq behavior
208 * @devfreq: the devfreq instance
209 * @freq: the update target frequency
210 */
30582c25 211int devfreq_update_status(struct devfreq *devfreq, unsigned long freq)
e552bbaf 212{
e35d35a1 213 int lev, prev_lev, ret = 0;
b76b3479 214 u64 cur_time;
e552bbaf 215
2abb0d52 216 lockdep_assert_held(&devfreq->lock);
b76b3479 217 cur_time = get_jiffies_64();
e35d35a1 218
d0563a03
TJ
219 /* Immediately exit if previous_freq is not initialized yet. */
220 if (!devfreq->previous_freq)
221 goto out;
222
e35d35a1
SK
223 prev_lev = devfreq_get_freq_level(devfreq, devfreq->previous_freq);
224 if (prev_lev < 0) {
225 ret = prev_lev;
226 goto out;
227 }
228
1ebd0bc0
KK
229 devfreq->stats.time_in_state[prev_lev] +=
230 cur_time - devfreq->stats.last_update;
e35d35a1
SK
231
232 lev = devfreq_get_freq_level(devfreq, freq);
233 if (lev < 0) {
234 ret = lev;
235 goto out;
236 }
237
238 if (lev != prev_lev) {
1ebd0bc0
KK
239 devfreq->stats.trans_table[
240 (prev_lev * devfreq->profile->max_state) + lev]++;
241 devfreq->stats.total_trans++;
e552bbaf 242 }
e552bbaf 243
e35d35a1 244out:
1ebd0bc0 245 devfreq->stats.last_update = cur_time;
e35d35a1 246 return ret;
e552bbaf 247}
30582c25 248EXPORT_SYMBOL(devfreq_update_status);
e552bbaf 249
3aa173b8
NM
250/**
251 * find_devfreq_governor() - find devfreq governor from name
252 * @name: name of the governor
253 *
254 * Search the list of devfreq governors and return the matched
255 * governor's pointer. devfreq_list_lock should be held by the caller.
256 */
257static struct devfreq_governor *find_devfreq_governor(const char *name)
258{
259 struct devfreq_governor *tmp_governor;
260
9348da2f 261 if (IS_ERR_OR_NULL(name)) {
3aa173b8
NM
262 pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
263 return ERR_PTR(-EINVAL);
264 }
265 WARN(!mutex_is_locked(&devfreq_list_lock),
266 "devfreq_list_lock must be locked.");
267
268 list_for_each_entry(tmp_governor, &devfreq_governor_list, node) {
269 if (!strncmp(tmp_governor->name, name, DEVFREQ_NAME_LEN))
270 return tmp_governor;
271 }
272
273 return ERR_PTR(-ENODEV);
274}
275
23c7b54c
EBS
276/**
277 * try_then_request_governor() - Try to find the governor and request the
278 * module if is not found.
279 * @name: name of the governor
280 *
281 * Search the list of devfreq governors and request the module and try again
282 * if is not found. This can happen when both drivers (the governor driver
283 * and the driver that call devfreq_add_device) are built as modules.
284 * devfreq_list_lock should be held by the caller. Returns the matched
b53b0128 285 * governor's pointer or an error pointer.
23c7b54c
EBS
286 */
287static struct devfreq_governor *try_then_request_governor(const char *name)
288{
289 struct devfreq_governor *governor;
290 int err = 0;
291
292 if (IS_ERR_OR_NULL(name)) {
293 pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
294 return ERR_PTR(-EINVAL);
295 }
296 WARN(!mutex_is_locked(&devfreq_list_lock),
297 "devfreq_list_lock must be locked.");
298
299 governor = find_devfreq_governor(name);
300 if (IS_ERR(governor)) {
301 mutex_unlock(&devfreq_list_lock);
302
303 if (!strncmp(name, DEVFREQ_GOV_SIMPLE_ONDEMAND,
304 DEVFREQ_NAME_LEN))
305 err = request_module("governor_%s", "simpleondemand");
306 else
307 err = request_module("governor_%s", name);
308 /* Restore previous state before return */
309 mutex_lock(&devfreq_list_lock);
310 if (err)
7544fd7f 311 return (err < 0) ? ERR_PTR(err) : ERR_PTR(-EINVAL);
23c7b54c
EBS
312
313 governor = find_devfreq_governor(name);
314 }
315
316 return governor;
317}
318
0fe3a664
CC
319static int devfreq_notify_transition(struct devfreq *devfreq,
320 struct devfreq_freqs *freqs, unsigned int state)
321{
322 if (!devfreq)
323 return -EINVAL;
324
325 switch (state) {
326 case DEVFREQ_PRECHANGE:
327 srcu_notifier_call_chain(&devfreq->transition_notifier_list,
328 DEVFREQ_PRECHANGE, freqs);
329 break;
330
331 case DEVFREQ_POSTCHANGE:
332 srcu_notifier_call_chain(&devfreq->transition_notifier_list,
333 DEVFREQ_POSTCHANGE, freqs);
334 break;
335 default:
336 return -EINVAL;
337 }
338
339 return 0;
340}
341
63314172
LL
342static int devfreq_set_target(struct devfreq *devfreq, unsigned long new_freq,
343 u32 flags)
344{
345 struct devfreq_freqs freqs;
346 unsigned long cur_freq;
347 int err = 0;
348
349 if (devfreq->profile->get_cur_freq)
350 devfreq->profile->get_cur_freq(devfreq->dev.parent, &cur_freq);
351 else
352 cur_freq = devfreq->previous_freq;
353
354 freqs.old = cur_freq;
355 freqs.new = new_freq;
356 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_PRECHANGE);
357
358 err = devfreq->profile->target(devfreq->dev.parent, &new_freq, flags);
359 if (err) {
360 freqs.new = cur_freq;
361 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE);
362 return err;
363 }
364
365 freqs.new = new_freq;
366 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE);
367
368 if (devfreq_update_status(devfreq, new_freq))
369 dev_err(&devfreq->dev,
370 "Couldn't update frequency transition information.\n");
371
372 devfreq->previous_freq = new_freq;
83f8ca45
LL
373
374 if (devfreq->suspend_freq)
375 devfreq->resume_freq = cur_freq;
376
63314172
LL
377 return err;
378}
379
7e6fdd4b
RV
380/* Load monitoring helper functions for governors use */
381
a3c98b8b
MH
382/**
383 * update_devfreq() - Reevaluate the device and configure frequency.
384 * @devfreq: the devfreq instance.
385 *
386 * Note: Lock devfreq->lock before calling update_devfreq
387 * This function is exported for governors.
388 */
389int update_devfreq(struct devfreq *devfreq)
390{
63314172 391 unsigned long freq, min_freq, max_freq;
a3c98b8b 392 int err = 0;
ab5f299f 393 u32 flags = 0;
a3c98b8b
MH
394
395 if (!mutex_is_locked(&devfreq->lock)) {
396 WARN(true, "devfreq->lock must be locked by the caller.\n");
397 return -EINVAL;
398 }
399
1b5c1be2
NM
400 if (!devfreq->governor)
401 return -EINVAL;
402
a3c98b8b
MH
403 /* Reevaluate the proper frequency */
404 err = devfreq->governor->get_target_freq(devfreq, &freq);
405 if (err)
406 return err;
46cecc0b 407 get_freq_range(devfreq, &min_freq, &max_freq);
ab5f299f 408
df5cf4a3 409 if (freq < min_freq) {
f1d981ea 410 freq = min_freq;
ab5f299f
MH
411 flags &= ~DEVFREQ_FLAG_LEAST_UPPER_BOUND; /* Use GLB */
412 }
df5cf4a3 413 if (freq > max_freq) {
f1d981ea 414 freq = max_freq;
ab5f299f
MH
415 flags |= DEVFREQ_FLAG_LEAST_UPPER_BOUND; /* Use LUB */
416 }
417
63314172 418 return devfreq_set_target(devfreq, freq, flags);
0fe3a664 419
a3c98b8b 420}
2df5021f 421EXPORT_SYMBOL(update_devfreq);
a3c98b8b 422
7e6fdd4b
RV
423/**
424 * devfreq_monitor() - Periodically poll devfreq objects.
425 * @work: the work struct used to run devfreq_monitor periodically.
426 *
427 */
428static void devfreq_monitor(struct work_struct *work)
429{
430 int err;
431 struct devfreq *devfreq = container_of(work,
432 struct devfreq, work.work);
433
434 mutex_lock(&devfreq->lock);
435 err = update_devfreq(devfreq);
436 if (err)
437 dev_err(&devfreq->dev, "dvfs failed with (%d) error\n", err);
438
439 queue_delayed_work(devfreq_wq, &devfreq->work,
440 msecs_to_jiffies(devfreq->profile->polling_ms));
441 mutex_unlock(&devfreq->lock);
cf451adf
LL
442
443 trace_devfreq_monitor(devfreq);
7e6fdd4b
RV
444}
445
446/**
447 * devfreq_monitor_start() - Start load monitoring of devfreq instance
448 * @devfreq: the devfreq instance.
449 *
2c090832 450 * Helper function for starting devfreq device load monitoring. By
7e6fdd4b
RV
451 * default delayed work based monitoring is supported. Function
452 * to be called from governor in response to DEVFREQ_GOV_START
453 * event when device is added to devfreq framework.
454 */
455void devfreq_monitor_start(struct devfreq *devfreq)
456{
5c0f6c79
DO
457 if (devfreq->governor->interrupt_driven)
458 return;
459
7e6fdd4b
RV
460 INIT_DEFERRABLE_WORK(&devfreq->work, devfreq_monitor);
461 if (devfreq->profile->polling_ms)
462 queue_delayed_work(devfreq_wq, &devfreq->work,
463 msecs_to_jiffies(devfreq->profile->polling_ms));
464}
6dcdd8e3 465EXPORT_SYMBOL(devfreq_monitor_start);
7e6fdd4b
RV
466
467/**
468 * devfreq_monitor_stop() - Stop load monitoring of a devfreq instance
469 * @devfreq: the devfreq instance.
470 *
2c090832 471 * Helper function to stop devfreq device load monitoring. Function
7e6fdd4b
RV
472 * to be called from governor in response to DEVFREQ_GOV_STOP
473 * event when device is removed from devfreq framework.
474 */
475void devfreq_monitor_stop(struct devfreq *devfreq)
476{
5c0f6c79
DO
477 if (devfreq->governor->interrupt_driven)
478 return;
479
7e6fdd4b
RV
480 cancel_delayed_work_sync(&devfreq->work);
481}
6dcdd8e3 482EXPORT_SYMBOL(devfreq_monitor_stop);
7e6fdd4b
RV
483
484/**
485 * devfreq_monitor_suspend() - Suspend load monitoring of a devfreq instance
486 * @devfreq: the devfreq instance.
487 *
2c090832 488 * Helper function to suspend devfreq device load monitoring. Function
7e6fdd4b
RV
489 * to be called from governor in response to DEVFREQ_GOV_SUSPEND
490 * event or when polling interval is set to zero.
491 *
492 * Note: Though this function is same as devfreq_monitor_stop(),
493 * intentionally kept separate to provide hooks for collecting
494 * transition statistics.
495 */
496void devfreq_monitor_suspend(struct devfreq *devfreq)
497{
498 mutex_lock(&devfreq->lock);
499 if (devfreq->stop_polling) {
500 mutex_unlock(&devfreq->lock);
501 return;
502 }
503
39688ce6 504 devfreq_update_status(devfreq, devfreq->previous_freq);
7e6fdd4b
RV
505 devfreq->stop_polling = true;
506 mutex_unlock(&devfreq->lock);
5c0f6c79
DO
507
508 if (devfreq->governor->interrupt_driven)
509 return;
510
7e6fdd4b
RV
511 cancel_delayed_work_sync(&devfreq->work);
512}
6dcdd8e3 513EXPORT_SYMBOL(devfreq_monitor_suspend);
7e6fdd4b
RV
514
515/**
516 * devfreq_monitor_resume() - Resume load monitoring of a devfreq instance
517 * @devfreq: the devfreq instance.
518 *
2c090832 519 * Helper function to resume devfreq device load monitoring. Function
7e6fdd4b
RV
520 * to be called from governor in response to DEVFREQ_GOV_RESUME
521 * event or when polling interval is set to non-zero.
522 */
523void devfreq_monitor_resume(struct devfreq *devfreq)
524{
39688ce6
RV
525 unsigned long freq;
526
7e6fdd4b
RV
527 mutex_lock(&devfreq->lock);
528 if (!devfreq->stop_polling)
529 goto out;
530
5c0f6c79
DO
531 if (devfreq->governor->interrupt_driven)
532 goto out_update;
533
7e6fdd4b
RV
534 if (!delayed_work_pending(&devfreq->work) &&
535 devfreq->profile->polling_ms)
536 queue_delayed_work(devfreq_wq, &devfreq->work,
537 msecs_to_jiffies(devfreq->profile->polling_ms));
39688ce6 538
5c0f6c79 539out_update:
1ebd0bc0 540 devfreq->stats.last_update = get_jiffies_64();
7e6fdd4b
RV
541 devfreq->stop_polling = false;
542
39688ce6
RV
543 if (devfreq->profile->get_cur_freq &&
544 !devfreq->profile->get_cur_freq(devfreq->dev.parent, &freq))
545 devfreq->previous_freq = freq;
546
7e6fdd4b
RV
547out:
548 mutex_unlock(&devfreq->lock);
549}
6dcdd8e3 550EXPORT_SYMBOL(devfreq_monitor_resume);
7e6fdd4b
RV
551
552/**
3a1ec2e8 553 * devfreq_update_interval() - Update device devfreq monitoring interval
7e6fdd4b
RV
554 * @devfreq: the devfreq instance.
555 * @delay: new polling interval to be set.
556 *
557 * Helper function to set new load monitoring polling interval. Function
3a1ec2e8 558 * to be called from governor in response to DEVFREQ_GOV_UPDATE_INTERVAL event.
7e6fdd4b 559 */
3a1ec2e8 560void devfreq_update_interval(struct devfreq *devfreq, unsigned int *delay)
7e6fdd4b
RV
561{
562 unsigned int cur_delay = devfreq->profile->polling_ms;
563 unsigned int new_delay = *delay;
564
565 mutex_lock(&devfreq->lock);
566 devfreq->profile->polling_ms = new_delay;
567
568 if (devfreq->stop_polling)
569 goto out;
570
5c0f6c79
DO
571 if (devfreq->governor->interrupt_driven)
572 goto out;
573
7e6fdd4b
RV
574 /* if new delay is zero, stop polling */
575 if (!new_delay) {
576 mutex_unlock(&devfreq->lock);
577 cancel_delayed_work_sync(&devfreq->work);
578 return;
579 }
580
581 /* if current delay is zero, start polling with new delay */
582 if (!cur_delay) {
583 queue_delayed_work(devfreq_wq, &devfreq->work,
584 msecs_to_jiffies(devfreq->profile->polling_ms));
585 goto out;
586 }
587
588 /* if current delay is greater than new delay, restart polling */
589 if (cur_delay > new_delay) {
590 mutex_unlock(&devfreq->lock);
591 cancel_delayed_work_sync(&devfreq->work);
592 mutex_lock(&devfreq->lock);
593 if (!devfreq->stop_polling)
594 queue_delayed_work(devfreq_wq, &devfreq->work,
6d690f77 595 msecs_to_jiffies(devfreq->profile->polling_ms));
7e6fdd4b
RV
596 }
597out:
598 mutex_unlock(&devfreq->lock);
599}
3a1ec2e8 600EXPORT_SYMBOL(devfreq_update_interval);
a3c98b8b
MH
601
602/**
603 * devfreq_notifier_call() - Notify that the device frequency requirements
6d690f77 604 * has been changed out of devfreq framework.
c5b4a1c1
NM
605 * @nb: the notifier_block (supposed to be devfreq->nb)
606 * @type: not used
607 * @devp: not used
a3c98b8b
MH
608 *
609 * Called by a notifier that uses devfreq->nb.
610 */
611static int devfreq_notifier_call(struct notifier_block *nb, unsigned long type,
612 void *devp)
613{
614 struct devfreq *devfreq = container_of(nb, struct devfreq, nb);
e876e710 615 int err = -EINVAL;
a3c98b8b
MH
616
617 mutex_lock(&devfreq->lock);
f1d981ea
CC
618
619 devfreq->scaling_min_freq = find_available_min_freq(devfreq);
e876e710
LC
620 if (!devfreq->scaling_min_freq)
621 goto out;
f1d981ea
CC
622
623 devfreq->scaling_max_freq = find_available_max_freq(devfreq);
e7cc792d
LC
624 if (!devfreq->scaling_max_freq) {
625 devfreq->scaling_max_freq = ULONG_MAX;
e876e710 626 goto out;
e7cc792d 627 }
e876e710
LC
628
629 err = update_devfreq(devfreq);
f1d981ea 630
e876e710 631out:
a3c98b8b 632 mutex_unlock(&devfreq->lock);
e876e710
LC
633 if (err)
634 dev_err(devfreq->dev.parent,
635 "failed to update frequency from OPP notifier (%d)\n",
636 err);
a3c98b8b 637
e876e710 638 return NOTIFY_OK;
a3c98b8b
MH
639}
640
05d7ae15
LC
641/**
642 * qos_notifier_call() - Common handler for QoS constraints.
643 * @devfreq: the devfreq instance.
644 */
645static int qos_notifier_call(struct devfreq *devfreq)
646{
647 int err;
648
649 mutex_lock(&devfreq->lock);
650 err = update_devfreq(devfreq);
651 mutex_unlock(&devfreq->lock);
652 if (err)
653 dev_err(devfreq->dev.parent,
654 "failed to update frequency from PM QoS (%d)\n",
655 err);
656
657 return NOTIFY_OK;
658}
659
660/**
661 * qos_min_notifier_call() - Callback for QoS min_freq changes.
662 * @nb: Should be devfreq->nb_min
663 */
664static int qos_min_notifier_call(struct notifier_block *nb,
665 unsigned long val, void *ptr)
666{
667 return qos_notifier_call(container_of(nb, struct devfreq, nb_min));
668}
669
670/**
671 * qos_max_notifier_call() - Callback for QoS max_freq changes.
672 * @nb: Should be devfreq->nb_max
673 */
674static int qos_max_notifier_call(struct notifier_block *nb,
675 unsigned long val, void *ptr)
676{
677 return qos_notifier_call(container_of(nb, struct devfreq, nb_max));
678}
679
a3c98b8b 680/**
29b6968b
CC
681 * devfreq_dev_release() - Callback for struct device to release the device.
682 * @dev: the devfreq device
683 *
684 * Remove devfreq from the list and release its resources.
a3c98b8b 685 */
29b6968b 686static void devfreq_dev_release(struct device *dev)
a3c98b8b 687{
29b6968b 688 struct devfreq *devfreq = to_devfreq(dev);
05d7ae15 689 int err;
29b6968b 690
7e6fdd4b 691 mutex_lock(&devfreq_list_lock);
7e6fdd4b
RV
692 list_del(&devfreq->node);
693 mutex_unlock(&devfreq_list_lock);
a3c98b8b 694
05d7ae15
LC
695 err = dev_pm_qos_remove_notifier(devfreq->dev.parent, &devfreq->nb_max,
696 DEV_PM_QOS_MAX_FREQUENCY);
697 if (err && err != -ENOENT)
698 dev_warn(dev->parent,
699 "Failed to remove max_freq notifier: %d\n", err);
700 err = dev_pm_qos_remove_notifier(devfreq->dev.parent, &devfreq->nb_min,
701 DEV_PM_QOS_MIN_FREQUENCY);
702 if (err && err != -ENOENT)
703 dev_warn(dev->parent,
704 "Failed to remove min_freq notifier: %d\n", err);
705
27dbc542
LC
706 if (dev_pm_qos_request_active(&devfreq->user_max_freq_req)) {
707 err = dev_pm_qos_remove_request(&devfreq->user_max_freq_req);
4c6abef7 708 if (err < 0)
27dbc542
LC
709 dev_warn(dev->parent,
710 "Failed to remove max_freq request: %d\n", err);
711 }
712 if (dev_pm_qos_request_active(&devfreq->user_min_freq_req)) {
713 err = dev_pm_qos_remove_request(&devfreq->user_min_freq_req);
4c6abef7 714 if (err < 0)
27dbc542
LC
715 dev_warn(dev->parent,
716 "Failed to remove min_freq request: %d\n", err);
717 }
718
a3c98b8b
MH
719 if (devfreq->profile->exit)
720 devfreq->profile->exit(devfreq->dev.parent);
721
a3c98b8b 722 mutex_destroy(&devfreq->lock);
a3c98b8b
MH
723 kfree(devfreq);
724}
725
a3c98b8b
MH
726/**
727 * devfreq_add_device() - Add devfreq feature to the device
728 * @dev: the device to add devfreq feature.
729 * @profile: device-specific profile to run devfreq.
1b5c1be2 730 * @governor_name: name of the policy to choose frequency.
a3c98b8b
MH
731 * @data: private data for the governor. The devfreq framework does not
732 * touch this value.
733 */
734struct devfreq *devfreq_add_device(struct device *dev,
735 struct devfreq_dev_profile *profile,
1b5c1be2 736 const char *governor_name,
a3c98b8b
MH
737 void *data)
738{
739 struct devfreq *devfreq;
1b5c1be2 740 struct devfreq_governor *governor;
a3c98b8b
MH
741 int err = 0;
742
1b5c1be2 743 if (!dev || !profile || !governor_name) {
a3c98b8b
MH
744 dev_err(dev, "%s: Invalid parameters.\n", __func__);
745 return ERR_PTR(-EINVAL);
746 }
747
7e6fdd4b
RV
748 mutex_lock(&devfreq_list_lock);
749 devfreq = find_device_devfreq(dev);
750 mutex_unlock(&devfreq_list_lock);
751 if (!IS_ERR(devfreq)) {
df4d7b14 752 dev_err(dev, "%s: devfreq device already exists!\n",
9d0109be 753 __func__);
7e6fdd4b
RV
754 err = -EINVAL;
755 goto err_out;
a3c98b8b
MH
756 }
757
758 devfreq = kzalloc(sizeof(struct devfreq), GFP_KERNEL);
759 if (!devfreq) {
a3c98b8b 760 err = -ENOMEM;
3f19f08a 761 goto err_out;
a3c98b8b
MH
762 }
763
764 mutex_init(&devfreq->lock);
765 mutex_lock(&devfreq->lock);
766 devfreq->dev.parent = dev;
767 devfreq->dev.class = devfreq_class;
768 devfreq->dev.release = devfreq_dev_release;
42a6b25e 769 INIT_LIST_HEAD(&devfreq->node);
a3c98b8b 770 devfreq->profile = profile;
1b5c1be2 771 strncpy(devfreq->governor_name, governor_name, DEVFREQ_NAME_LEN);
a3c98b8b 772 devfreq->previous_freq = profile->initial_freq;
8d39fc08 773 devfreq->last_status.current_frequency = profile->initial_freq;
a3c98b8b 774 devfreq->data = data;
a3c98b8b
MH
775 devfreq->nb.notifier_call = devfreq_notifier_call;
776
0ec09ac2
CC
777 if (!devfreq->profile->max_state && !devfreq->profile->freq_table) {
778 mutex_unlock(&devfreq->lock);
ea572f81
CC
779 err = set_freq_table(devfreq);
780 if (err < 0)
a9487917 781 goto err_dev;
0ec09ac2
CC
782 mutex_lock(&devfreq->lock);
783 }
784
2c2cb1e6
MK
785 devfreq->scaling_min_freq = find_available_min_freq(devfreq);
786 if (!devfreq->scaling_min_freq) {
ab8f58ad
CC
787 mutex_unlock(&devfreq->lock);
788 err = -EINVAL;
789 goto err_dev;
790 }
791
2c2cb1e6
MK
792 devfreq->scaling_max_freq = find_available_max_freq(devfreq);
793 if (!devfreq->scaling_max_freq) {
ab8f58ad
CC
794 mutex_unlock(&devfreq->lock);
795 err = -EINVAL;
796 goto err_dev;
797 }
798
83f8ca45
LL
799 devfreq->suspend_freq = dev_pm_opp_get_suspend_opp_freq(dev);
800 atomic_set(&devfreq->suspend_count, 0);
801
66d0e797 802 dev_set_name(&devfreq->dev, "%s", dev_name(dev));
a3c98b8b
MH
803 err = device_register(&devfreq->dev);
804 if (err) {
7e6fdd4b 805 mutex_unlock(&devfreq->lock);
2d803dc8
AY
806 put_device(&devfreq->dev);
807 goto err_out;
a3c98b8b
MH
808 }
809
1ebd0bc0 810 devfreq->stats.trans_table = devm_kzalloc(&devfreq->dev,
6d690f77
MH
811 array3_size(sizeof(unsigned int),
812 devfreq->profile->max_state,
813 devfreq->profile->max_state),
814 GFP_KERNEL);
1ebd0bc0 815 if (!devfreq->stats.trans_table) {
25846fa1
YL
816 mutex_unlock(&devfreq->lock);
817 err = -ENOMEM;
818 goto err_devfreq;
819 }
820
1ebd0bc0 821 devfreq->stats.time_in_state = devm_kcalloc(&devfreq->dev,
6d690f77 822 devfreq->profile->max_state,
1ebd0bc0 823 sizeof(*devfreq->stats.time_in_state),
6d690f77 824 GFP_KERNEL);
1ebd0bc0 825 if (!devfreq->stats.time_in_state) {
25846fa1
YL
826 mutex_unlock(&devfreq->lock);
827 err = -ENOMEM;
828 goto err_devfreq;
829 }
830
1ebd0bc0
KK
831 devfreq->stats.total_trans = 0;
832 devfreq->stats.last_update = get_jiffies_64();
3e1d7fb0 833
0fe3a664
CC
834 srcu_init_notifier_head(&devfreq->transition_notifier_list);
835
a3c98b8b
MH
836 mutex_unlock(&devfreq->lock);
837
27dbc542
LC
838 err = dev_pm_qos_add_request(dev, &devfreq->user_min_freq_req,
839 DEV_PM_QOS_MIN_FREQUENCY, 0);
840 if (err < 0)
841 goto err_devfreq;
842 err = dev_pm_qos_add_request(dev, &devfreq->user_max_freq_req,
843 DEV_PM_QOS_MAX_FREQUENCY,
844 PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE);
845 if (err < 0)
846 goto err_devfreq;
847
05d7ae15
LC
848 devfreq->nb_min.notifier_call = qos_min_notifier_call;
849 err = dev_pm_qos_add_notifier(devfreq->dev.parent, &devfreq->nb_min,
850 DEV_PM_QOS_MIN_FREQUENCY);
851 if (err)
852 goto err_devfreq;
853
854 devfreq->nb_max.notifier_call = qos_max_notifier_call;
855 err = dev_pm_qos_add_notifier(devfreq->dev.parent, &devfreq->nb_max,
856 DEV_PM_QOS_MAX_FREQUENCY);
857 if (err)
858 goto err_devfreq;
859
a3c98b8b 860 mutex_lock(&devfreq_list_lock);
a3c98b8b 861
23c7b54c 862 governor = try_then_request_governor(devfreq->governor_name);
73613b16
CC
863 if (IS_ERR(governor)) {
864 dev_err(dev, "%s: Unable to find governor for the device\n",
865 __func__);
866 err = PTR_ERR(governor);
867 goto err_init;
868 }
869
870 devfreq->governor = governor;
871 err = devfreq->governor->event_handler(devfreq, DEVFREQ_GOV_START,
872 NULL);
7e6fdd4b
RV
873 if (err) {
874 dev_err(dev, "%s: Unable to start governor for the device\n",
875 __func__);
876 goto err_init;
a3c98b8b 877 }
23c7b54c
EBS
878
879 list_add(&devfreq->node, &devfreq_list);
880
0f376c9c 881 mutex_unlock(&devfreq_list_lock);
7e6fdd4b 882
3f19f08a
AL
883 return devfreq;
884
a3c98b8b 885err_init:
0f376c9c 886 mutex_unlock(&devfreq_list_lock);
25846fa1 887err_devfreq:
2f061fd0 888 devfreq_remove_device(devfreq);
2d803dc8 889 devfreq = NULL;
9e14de10 890err_dev:
8188b154 891 kfree(devfreq);
3f19f08a
AL
892err_out:
893 return ERR_PTR(err);
a3c98b8b 894}
7e6fdd4b 895EXPORT_SYMBOL(devfreq_add_device);
a3c98b8b
MH
896
897/**
898 * devfreq_remove_device() - Remove devfreq feature from a device.
c5b4a1c1 899 * @devfreq: the devfreq instance to be removed
de9c7394
MH
900 *
901 * The opposite of devfreq_add_device().
a3c98b8b
MH
902 */
903int devfreq_remove_device(struct devfreq *devfreq)
904{
905 if (!devfreq)
906 return -EINVAL;
907
2f061fd0
VD
908 if (devfreq->governor)
909 devfreq->governor->event_handler(devfreq,
910 DEVFREQ_GOV_STOP, NULL);
585fc83e 911 device_unregister(&devfreq->dev);
9f3bdd4f 912
a3c98b8b
MH
913 return 0;
914}
7e6fdd4b 915EXPORT_SYMBOL(devfreq_remove_device);
a3c98b8b 916
8cd84092
CC
917static int devm_devfreq_dev_match(struct device *dev, void *res, void *data)
918{
919 struct devfreq **r = res;
920
921 if (WARN_ON(!r || !*r))
922 return 0;
923
924 return *r == data;
925}
926
927static void devm_devfreq_dev_release(struct device *dev, void *res)
928{
929 devfreq_remove_device(*(struct devfreq **)res);
930}
931
932/**
933 * devm_devfreq_add_device() - Resource-managed devfreq_add_device()
934 * @dev: the device to add devfreq feature.
935 * @profile: device-specific profile to run devfreq.
936 * @governor_name: name of the policy to choose frequency.
937 * @data: private data for the governor. The devfreq framework does not
938 * touch this value.
939 *
940 * This function manages automatically the memory of devfreq device using device
941 * resource management and simplify the free operation for memory of devfreq
942 * device.
943 */
944struct devfreq *devm_devfreq_add_device(struct device *dev,
945 struct devfreq_dev_profile *profile,
946 const char *governor_name,
947 void *data)
948{
949 struct devfreq **ptr, *devfreq;
950
951 ptr = devres_alloc(devm_devfreq_dev_release, sizeof(*ptr), GFP_KERNEL);
952 if (!ptr)
953 return ERR_PTR(-ENOMEM);
954
955 devfreq = devfreq_add_device(dev, profile, governor_name, data);
956 if (IS_ERR(devfreq)) {
957 devres_free(ptr);
d1bf2d30 958 return devfreq;
8cd84092
CC
959 }
960
961 *ptr = devfreq;
962 devres_add(dev, ptr);
963
964 return devfreq;
965}
966EXPORT_SYMBOL(devm_devfreq_add_device);
967
8f510aeb
CC
968#ifdef CONFIG_OF
969/*
970 * devfreq_get_devfreq_by_phandle - Get the devfreq device from devicetree
971 * @dev - instance to the given device
972 * @index - index into list of devfreq
973 *
974 * return the instance of devfreq device
975 */
976struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, int index)
977{
978 struct device_node *node;
979 struct devfreq *devfreq;
980
981 if (!dev)
982 return ERR_PTR(-EINVAL);
983
984 if (!dev->of_node)
985 return ERR_PTR(-EINVAL);
986
987 node = of_parse_phandle(dev->of_node, "devfreq", index);
988 if (!node)
989 return ERR_PTR(-ENODEV);
990
991 mutex_lock(&devfreq_list_lock);
992 list_for_each_entry(devfreq, &devfreq_list, node) {
993 if (devfreq->dev.parent
994 && devfreq->dev.parent->of_node == node) {
995 mutex_unlock(&devfreq_list_lock);
3427c6f0 996 of_node_put(node);
8f510aeb
CC
997 return devfreq;
998 }
999 }
1000 mutex_unlock(&devfreq_list_lock);
3427c6f0 1001 of_node_put(node);
8f510aeb
CC
1002
1003 return ERR_PTR(-EPROBE_DEFER);
1004}
1005#else
1006struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, int index)
1007{
1008 return ERR_PTR(-ENODEV);
1009}
1010#endif /* CONFIG_OF */
1011EXPORT_SYMBOL_GPL(devfreq_get_devfreq_by_phandle);
1012
8cd84092
CC
1013/**
1014 * devm_devfreq_remove_device() - Resource-managed devfreq_remove_device()
e2fc1677 1015 * @dev: the device from which to remove devfreq feature.
8cd84092
CC
1016 * @devfreq: the devfreq instance to be removed
1017 */
1018void devm_devfreq_remove_device(struct device *dev, struct devfreq *devfreq)
1019{
1020 WARN_ON(devres_release(dev, devm_devfreq_dev_release,
1021 devm_devfreq_dev_match, devfreq));
1022}
1023EXPORT_SYMBOL(devm_devfreq_remove_device);
1024
206c30cf
RV
1025/**
1026 * devfreq_suspend_device() - Suspend devfreq of a device.
1027 * @devfreq: the devfreq instance to be suspended
de9c7394
MH
1028 *
1029 * This function is intended to be called by the pm callbacks
1030 * (e.g., runtime_suspend, suspend) of the device driver that
1031 * holds the devfreq.
206c30cf
RV
1032 */
1033int devfreq_suspend_device(struct devfreq *devfreq)
1034{
83f8ca45
LL
1035 int ret;
1036
a3c98b8b
MH
1037 if (!devfreq)
1038 return -EINVAL;
1039
83f8ca45 1040 if (atomic_inc_return(&devfreq->suspend_count) > 1)
1b5c1be2
NM
1041 return 0;
1042
83f8ca45
LL
1043 if (devfreq->governor) {
1044 ret = devfreq->governor->event_handler(devfreq,
1045 DEVFREQ_GOV_SUSPEND, NULL);
1046 if (ret)
1047 return ret;
1048 }
1049
1050 if (devfreq->suspend_freq) {
e1e047ac 1051 mutex_lock(&devfreq->lock);
83f8ca45 1052 ret = devfreq_set_target(devfreq, devfreq->suspend_freq, 0);
e1e047ac 1053 mutex_unlock(&devfreq->lock);
83f8ca45
LL
1054 if (ret)
1055 return ret;
1056 }
1057
1058 return 0;
206c30cf
RV
1059}
1060EXPORT_SYMBOL(devfreq_suspend_device);
1061
1062/**
1063 * devfreq_resume_device() - Resume devfreq of a device.
1064 * @devfreq: the devfreq instance to be resumed
de9c7394
MH
1065 *
1066 * This function is intended to be called by the pm callbacks
1067 * (e.g., runtime_resume, resume) of the device driver that
1068 * holds the devfreq.
206c30cf
RV
1069 */
1070int devfreq_resume_device(struct devfreq *devfreq)
1071{
83f8ca45
LL
1072 int ret;
1073
206c30cf
RV
1074 if (!devfreq)
1075 return -EINVAL;
1076
83f8ca45 1077 if (atomic_dec_return(&devfreq->suspend_count) >= 1)
1b5c1be2
NM
1078 return 0;
1079
83f8ca45 1080 if (devfreq->resume_freq) {
e1e047ac 1081 mutex_lock(&devfreq->lock);
83f8ca45 1082 ret = devfreq_set_target(devfreq, devfreq->resume_freq, 0);
e1e047ac 1083 mutex_unlock(&devfreq->lock);
83f8ca45
LL
1084 if (ret)
1085 return ret;
1086 }
1087
1088 if (devfreq->governor) {
1089 ret = devfreq->governor->event_handler(devfreq,
1090 DEVFREQ_GOV_RESUME, NULL);
1091 if (ret)
1092 return ret;
1093 }
1094
1095 return 0;
206c30cf
RV
1096}
1097EXPORT_SYMBOL(devfreq_resume_device);
1098
59031956
LL
1099/**
1100 * devfreq_suspend() - Suspend devfreq governors and devices
1101 *
1102 * Called during system wide Suspend/Hibernate cycles for suspending governors
1103 * and devices preserving the state for resume. On some platforms the devfreq
1104 * device must have precise state (frequency) after resume in order to provide
1105 * fully operating setup.
1106 */
1107void devfreq_suspend(void)
1108{
1109 struct devfreq *devfreq;
1110 int ret;
1111
1112 mutex_lock(&devfreq_list_lock);
1113 list_for_each_entry(devfreq, &devfreq_list, node) {
1114 ret = devfreq_suspend_device(devfreq);
1115 if (ret)
1116 dev_err(&devfreq->dev,
1117 "failed to suspend devfreq device\n");
1118 }
1119 mutex_unlock(&devfreq_list_lock);
1120}
1121
1122/**
1123 * devfreq_resume() - Resume devfreq governors and devices
1124 *
1125 * Called during system wide Suspend/Hibernate cycle for resuming governors and
1126 * devices that are suspended with devfreq_suspend().
1127 */
1128void devfreq_resume(void)
1129{
1130 struct devfreq *devfreq;
1131 int ret;
1132
1133 mutex_lock(&devfreq_list_lock);
1134 list_for_each_entry(devfreq, &devfreq_list, node) {
1135 ret = devfreq_resume_device(devfreq);
1136 if (ret)
1137 dev_warn(&devfreq->dev,
1138 "failed to resume devfreq device\n");
1139 }
1140 mutex_unlock(&devfreq_list_lock);
1141}
1142
3aa173b8
NM
1143/**
1144 * devfreq_add_governor() - Add devfreq governor
1145 * @governor: the devfreq governor to be added
1146 */
1147int devfreq_add_governor(struct devfreq_governor *governor)
1148{
1149 struct devfreq_governor *g;
1b5c1be2 1150 struct devfreq *devfreq;
3aa173b8
NM
1151 int err = 0;
1152
1153 if (!governor) {
1154 pr_err("%s: Invalid parameters.\n", __func__);
1155 return -EINVAL;
1156 }
1157
1158 mutex_lock(&devfreq_list_lock);
1159 g = find_devfreq_governor(governor->name);
1160 if (!IS_ERR(g)) {
1161 pr_err("%s: governor %s already registered\n", __func__,
1162 g->name);
1163 err = -EINVAL;
1164 goto err_out;
1165 }
9f3bdd4f 1166
3aa173b8
NM
1167 list_add(&governor->node, &devfreq_governor_list);
1168
1b5c1be2
NM
1169 list_for_each_entry(devfreq, &devfreq_list, node) {
1170 int ret = 0;
1171 struct device *dev = devfreq->dev.parent;
1172
1173 if (!strncmp(devfreq->governor_name, governor->name,
1174 DEVFREQ_NAME_LEN)) {
1175 /* The following should never occur */
1176 if (devfreq->governor) {
1177 dev_warn(dev,
1178 "%s: Governor %s already present\n",
1179 __func__, devfreq->governor->name);
1180 ret = devfreq->governor->event_handler(devfreq,
1181 DEVFREQ_GOV_STOP, NULL);
1182 if (ret) {
1183 dev_warn(dev,
1184 "%s: Governor %s stop = %d\n",
1185 __func__,
1186 devfreq->governor->name, ret);
1187 }
1188 /* Fall through */
1189 }
1190 devfreq->governor = governor;
1191 ret = devfreq->governor->event_handler(devfreq,
1192 DEVFREQ_GOV_START, NULL);
1193 if (ret) {
1194 dev_warn(dev, "%s: Governor %s start=%d\n",
1195 __func__, devfreq->governor->name,
1196 ret);
1197 }
a3c98b8b
MH
1198 }
1199 }
1200
3aa173b8
NM
1201err_out:
1202 mutex_unlock(&devfreq_list_lock);
a3c98b8b 1203
3aa173b8
NM
1204 return err;
1205}
1206EXPORT_SYMBOL(devfreq_add_governor);
a3c98b8b 1207
3aa173b8 1208/**
bafeb42b 1209 * devfreq_remove_governor() - Remove devfreq feature from a device.
3aa173b8
NM
1210 * @governor: the devfreq governor to be removed
1211 */
1212int devfreq_remove_governor(struct devfreq_governor *governor)
1213{
1214 struct devfreq_governor *g;
1b5c1be2 1215 struct devfreq *devfreq;
3aa173b8
NM
1216 int err = 0;
1217
1218 if (!governor) {
1219 pr_err("%s: Invalid parameters.\n", __func__);
1220 return -EINVAL;
1221 }
1222
1223 mutex_lock(&devfreq_list_lock);
1224 g = find_devfreq_governor(governor->name);
1225 if (IS_ERR(g)) {
1226 pr_err("%s: governor %s not registered\n", __func__,
b9e1c8e8 1227 governor->name);
f9c08e2a 1228 err = PTR_ERR(g);
3aa173b8
NM
1229 goto err_out;
1230 }
1b5c1be2
NM
1231 list_for_each_entry(devfreq, &devfreq_list, node) {
1232 int ret;
1233 struct device *dev = devfreq->dev.parent;
1234
1235 if (!strncmp(devfreq->governor_name, governor->name,
1236 DEVFREQ_NAME_LEN)) {
1237 /* we should have a devfreq governor! */
1238 if (!devfreq->governor) {
1239 dev_warn(dev, "%s: Governor %s NOT present\n",
1240 __func__, governor->name);
1241 continue;
1242 /* Fall through */
1243 }
1244 ret = devfreq->governor->event_handler(devfreq,
1245 DEVFREQ_GOV_STOP, NULL);
1246 if (ret) {
1247 dev_warn(dev, "%s: Governor %s stop=%d\n",
1248 __func__, devfreq->governor->name,
1249 ret);
1250 }
1251 devfreq->governor = NULL;
1252 }
1253 }
3aa173b8
NM
1254
1255 list_del(&governor->node);
1256err_out:
1257 mutex_unlock(&devfreq_list_lock);
1258
1259 return err;
a3c98b8b 1260}
3aa173b8 1261EXPORT_SYMBOL(devfreq_remove_governor);
a3c98b8b 1262
2fee1a7c
CC
1263static ssize_t name_show(struct device *dev,
1264 struct device_attribute *attr, char *buf)
1265{
1266 struct devfreq *devfreq = to_devfreq(dev);
1267 return sprintf(buf, "%s\n", dev_name(devfreq->dev.parent));
1268}
1269static DEVICE_ATTR_RO(name);
1270
a93d6b0a 1271static ssize_t governor_show(struct device *dev,
9005b650
MH
1272 struct device_attribute *attr, char *buf)
1273{
1b5c1be2
NM
1274 if (!to_devfreq(dev)->governor)
1275 return -EINVAL;
1276
9005b650
MH
1277 return sprintf(buf, "%s\n", to_devfreq(dev)->governor->name);
1278}
1279
a93d6b0a 1280static ssize_t governor_store(struct device *dev, struct device_attribute *attr,
0359d1af
NM
1281 const char *buf, size_t count)
1282{
1283 struct devfreq *df = to_devfreq(dev);
1284 int ret;
1285 char str_governor[DEVFREQ_NAME_LEN + 1];
bc658bef 1286 const struct devfreq_governor *governor, *prev_governor;
0359d1af
NM
1287
1288 ret = sscanf(buf, "%" __stringify(DEVFREQ_NAME_LEN) "s", str_governor);
1289 if (ret != 1)
1290 return -EINVAL;
1291
1292 mutex_lock(&devfreq_list_lock);
23c7b54c 1293 governor = try_then_request_governor(str_governor);
0359d1af
NM
1294 if (IS_ERR(governor)) {
1295 ret = PTR_ERR(governor);
1296 goto out;
1297 }
14a21e7b
TJ
1298 if (df->governor == governor) {
1299 ret = 0;
0359d1af 1300 goto out;
63f1e05f
GS
1301 } else if ((df->governor && df->governor->immutable) ||
1302 governor->immutable) {
bcf23c79
CC
1303 ret = -EINVAL;
1304 goto out;
14a21e7b 1305 }
0359d1af
NM
1306
1307 if (df->governor) {
1308 ret = df->governor->event_handler(df, DEVFREQ_GOV_STOP, NULL);
1309 if (ret) {
1310 dev_warn(dev, "%s: Governor %s not stopped(%d)\n",
1311 __func__, df->governor->name, ret);
1312 goto out;
1313 }
1314 }
bc658bef 1315 prev_governor = df->governor;
0359d1af
NM
1316 df->governor = governor;
1317 strncpy(df->governor_name, governor->name, DEVFREQ_NAME_LEN);
1318 ret = df->governor->event_handler(df, DEVFREQ_GOV_START, NULL);
bc658bef 1319 if (ret) {
0359d1af
NM
1320 dev_warn(dev, "%s: Governor %s not started(%d)\n",
1321 __func__, df->governor->name, ret);
bc658bef
SK
1322 df->governor = prev_governor;
1323 strncpy(df->governor_name, prev_governor->name,
1324 DEVFREQ_NAME_LEN);
1325 ret = df->governor->event_handler(df, DEVFREQ_GOV_START, NULL);
1326 if (ret) {
1327 dev_err(dev,
1328 "%s: reverting to Governor %s failed (%d)\n",
1329 __func__, df->governor_name, ret);
1330 df->governor = NULL;
1331 }
1332 }
0359d1af
NM
1333out:
1334 mutex_unlock(&devfreq_list_lock);
1335
1336 if (!ret)
1337 ret = count;
1338 return ret;
1339}
a93d6b0a
GKH
1340static DEVICE_ATTR_RW(governor);
1341
1342static ssize_t available_governors_show(struct device *d,
1343 struct device_attribute *attr,
1344 char *buf)
50a5b33e 1345{
bcf23c79 1346 struct devfreq *df = to_devfreq(d);
50a5b33e
NM
1347 ssize_t count = 0;
1348
1349 mutex_lock(&devfreq_list_lock);
bcf23c79
CC
1350
1351 /*
1352 * The devfreq with immutable governor (e.g., passive) shows
1353 * only own governor.
1354 */
d68adc8f 1355 if (df->governor && df->governor->immutable) {
bcf23c79 1356 count = scnprintf(&buf[count], DEVFREQ_NAME_LEN,
6d690f77 1357 "%s ", df->governor_name);
bcf23c79
CC
1358 /*
1359 * The devfreq device shows the registered governor except for
1360 * immutable governors such as passive governor .
1361 */
1362 } else {
1363 struct devfreq_governor *governor;
1364
1365 list_for_each_entry(governor, &devfreq_governor_list, node) {
1366 if (governor->immutable)
1367 continue;
1368 count += scnprintf(&buf[count], (PAGE_SIZE - count - 2),
1369 "%s ", governor->name);
1370 }
1371 }
1372
50a5b33e
NM
1373 mutex_unlock(&devfreq_list_lock);
1374
1375 /* Truncate the trailing space */
1376 if (count)
1377 count--;
1378
1379 count += sprintf(&buf[count], "\n");
1380
1381 return count;
1382}
a93d6b0a 1383static DEVICE_ATTR_RO(available_governors);
0359d1af 1384
a93d6b0a
GKH
1385static ssize_t cur_freq_show(struct device *dev, struct device_attribute *attr,
1386 char *buf)
7f98a905
RV
1387{
1388 unsigned long freq;
1389 struct devfreq *devfreq = to_devfreq(dev);
1390
1391 if (devfreq->profile->get_cur_freq &&
1392 !devfreq->profile->get_cur_freq(devfreq->dev.parent, &freq))
9d0109be 1393 return sprintf(buf, "%lu\n", freq);
7f98a905
RV
1394
1395 return sprintf(buf, "%lu\n", devfreq->previous_freq);
1396}
a93d6b0a 1397static DEVICE_ATTR_RO(cur_freq);
7f98a905 1398
a93d6b0a
GKH
1399static ssize_t target_freq_show(struct device *dev,
1400 struct device_attribute *attr, char *buf)
9005b650
MH
1401{
1402 return sprintf(buf, "%lu\n", to_devfreq(dev)->previous_freq);
1403}
a93d6b0a 1404static DEVICE_ATTR_RO(target_freq);
9005b650 1405
a93d6b0a 1406static ssize_t polling_interval_show(struct device *dev,
9005b650
MH
1407 struct device_attribute *attr, char *buf)
1408{
1409 return sprintf(buf, "%d\n", to_devfreq(dev)->profile->polling_ms);
1410}
1411
a93d6b0a 1412static ssize_t polling_interval_store(struct device *dev,
9005b650
MH
1413 struct device_attribute *attr,
1414 const char *buf, size_t count)
1415{
1416 struct devfreq *df = to_devfreq(dev);
1417 unsigned int value;
1418 int ret;
1419
1b5c1be2
NM
1420 if (!df->governor)
1421 return -EINVAL;
1422
9005b650
MH
1423 ret = sscanf(buf, "%u", &value);
1424 if (ret != 1)
12e26265 1425 return -EINVAL;
9005b650 1426
3a1ec2e8 1427 df->governor->event_handler(df, DEVFREQ_GOV_UPDATE_INTERVAL, &value);
9005b650
MH
1428 ret = count;
1429
9005b650
MH
1430 return ret;
1431}
a93d6b0a 1432static DEVICE_ATTR_RW(polling_interval);
9005b650 1433
a93d6b0a 1434static ssize_t min_freq_store(struct device *dev, struct device_attribute *attr,
6530b9de
MH
1435 const char *buf, size_t count)
1436{
1437 struct devfreq *df = to_devfreq(dev);
1438 unsigned long value;
1439 int ret;
6530b9de 1440
27dbc542
LC
1441 /*
1442 * Protect against theoretical sysfs writes between
1443 * device_add and dev_pm_qos_add_request
1444 */
1445 if (!dev_pm_qos_request_active(&df->user_min_freq_req))
1446 return -EAGAIN;
1447
6530b9de
MH
1448 ret = sscanf(buf, "%lu", &value);
1449 if (ret != 1)
12e26265 1450 return -EINVAL;
6530b9de 1451
27dbc542
LC
1452 /* Round down to kHz for PM QoS */
1453 ret = dev_pm_qos_update_request(&df->user_min_freq_req,
1454 value / HZ_PER_KHZ);
1455 if (ret < 0)
1456 return ret;
46cecc0b
LC
1457
1458 return count;
6530b9de
MH
1459}
1460
1051e2c3
CC
1461static ssize_t min_freq_show(struct device *dev, struct device_attribute *attr,
1462 char *buf)
1463{
f1d981ea 1464 struct devfreq *df = to_devfreq(dev);
46cecc0b
LC
1465 unsigned long min_freq, max_freq;
1466
1467 mutex_lock(&df->lock);
1468 get_freq_range(df, &min_freq, &max_freq);
1469 mutex_unlock(&df->lock);
f1d981ea 1470
46cecc0b 1471 return sprintf(buf, "%lu\n", min_freq);
1051e2c3 1472}
f9002b16 1473static DEVICE_ATTR_RW(min_freq);
1051e2c3 1474
a93d6b0a 1475static ssize_t max_freq_store(struct device *dev, struct device_attribute *attr,
6530b9de
MH
1476 const char *buf, size_t count)
1477{
1478 struct devfreq *df = to_devfreq(dev);
1479 unsigned long value;
1480 int ret;
6530b9de 1481
27dbc542
LC
1482 /*
1483 * Protect against theoretical sysfs writes between
1484 * device_add and dev_pm_qos_add_request
1485 */
1486 if (!dev_pm_qos_request_active(&df->user_max_freq_req))
1487 return -EINVAL;
1488
6530b9de
MH
1489 ret = sscanf(buf, "%lu", &value);
1490 if (ret != 1)
12e26265 1491 return -EINVAL;
6530b9de 1492
27dbc542
LC
1493 /*
1494 * PM QoS frequencies are in kHz so we need to convert. Convert by
1495 * rounding upwards so that the acceptable interval never shrinks.
1496 *
1497 * For example if the user writes "666666666" to sysfs this value will
1498 * be converted to 666667 kHz and back to 666667000 Hz before an OPP
1499 * lookup, this ensures that an OPP of 666666666Hz is still accepted.
1500 *
1501 * A value of zero means "no limit".
1502 */
1503 if (value)
1504 value = DIV_ROUND_UP(value, HZ_PER_KHZ);
1505 else
1506 value = PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE;
6530b9de 1507
27dbc542
LC
1508 ret = dev_pm_qos_update_request(&df->user_max_freq_req, value);
1509 if (ret < 0)
1510 return ret;
46cecc0b
LC
1511
1512 return count;
6530b9de
MH
1513}
1514
1051e2c3
CC
1515static ssize_t max_freq_show(struct device *dev, struct device_attribute *attr,
1516 char *buf)
1517{
f1d981ea 1518 struct devfreq *df = to_devfreq(dev);
46cecc0b
LC
1519 unsigned long min_freq, max_freq;
1520
1521 mutex_lock(&df->lock);
1522 get_freq_range(df, &min_freq, &max_freq);
1523 mutex_unlock(&df->lock);
f1d981ea 1524
46cecc0b 1525 return sprintf(buf, "%lu\n", max_freq);
6530b9de 1526}
a93d6b0a 1527static DEVICE_ATTR_RW(max_freq);
6530b9de 1528
a93d6b0a
GKH
1529static ssize_t available_frequencies_show(struct device *d,
1530 struct device_attribute *attr,
1531 char *buf)
d287de85
NM
1532{
1533 struct devfreq *df = to_devfreq(d);
d287de85 1534 ssize_t count = 0;
416b46a2 1535 int i;
d287de85 1536
416b46a2 1537 mutex_lock(&df->lock);
d287de85 1538
416b46a2 1539 for (i = 0; i < df->profile->max_state; i++)
d287de85 1540 count += scnprintf(&buf[count], (PAGE_SIZE - count - 2),
416b46a2 1541 "%lu ", df->profile->freq_table[i]);
d287de85 1542
416b46a2 1543 mutex_unlock(&df->lock);
d287de85
NM
1544 /* Truncate the trailing space */
1545 if (count)
1546 count--;
1547
1548 count += sprintf(&buf[count], "\n");
1549
1550 return count;
1551}
a93d6b0a 1552static DEVICE_ATTR_RO(available_frequencies);
d287de85 1553
a93d6b0a
GKH
1554static ssize_t trans_stat_show(struct device *dev,
1555 struct device_attribute *attr, char *buf)
e552bbaf
JL
1556{
1557 struct devfreq *devfreq = to_devfreq(dev);
1558 ssize_t len;
39688ce6 1559 int i, j;
e552bbaf
JL
1560 unsigned int max_state = devfreq->profile->max_state;
1561
34bd3220
MH
1562 if (max_state == 0)
1563 return sprintf(buf, "Not Supported.\n");
e552bbaf 1564
2abb0d52
LC
1565 mutex_lock(&devfreq->lock);
1566 if (!devfreq->stop_polling &&
1567 devfreq_update_status(devfreq, devfreq->previous_freq)) {
1568 mutex_unlock(&devfreq->lock);
1569 return 0;
1570 }
1571 mutex_unlock(&devfreq->lock);
1572
d7df1e46
CC
1573 len = sprintf(buf, " From : To\n");
1574 len += sprintf(buf + len, " :");
e552bbaf 1575 for (i = 0; i < max_state; i++)
d7df1e46 1576 len += sprintf(buf + len, "%10lu",
e552bbaf
JL
1577 devfreq->profile->freq_table[i]);
1578
1579 len += sprintf(buf + len, " time(ms)\n");
1580
1581 for (i = 0; i < max_state; i++) {
1582 if (devfreq->profile->freq_table[i]
1583 == devfreq->previous_freq) {
1584 len += sprintf(buf + len, "*");
1585 } else {
1586 len += sprintf(buf + len, " ");
1587 }
d7df1e46 1588 len += sprintf(buf + len, "%10lu:",
e552bbaf
JL
1589 devfreq->profile->freq_table[i]);
1590 for (j = 0; j < max_state; j++)
d7df1e46 1591 len += sprintf(buf + len, "%10u",
1ebd0bc0
KK
1592 devfreq->stats.trans_table[(i * max_state) + j]);
1593
b76b3479 1594 len += sprintf(buf + len, "%10llu\n", (u64)
1ebd0bc0 1595 jiffies64_to_msecs(devfreq->stats.time_in_state[i]));
e552bbaf
JL
1596 }
1597
1598 len += sprintf(buf + len, "Total transition : %u\n",
1ebd0bc0 1599 devfreq->stats.total_trans);
e552bbaf
JL
1600 return len;
1601}
14a34396
KK
1602
1603static ssize_t trans_stat_store(struct device *dev,
1604 struct device_attribute *attr,
1605 const char *buf, size_t count)
1606{
1607 struct devfreq *df = to_devfreq(dev);
1608 int err, value;
1609
1610 if (df->profile->max_state == 0)
1611 return count;
1612
1613 err = kstrtoint(buf, 10, &value);
1614 if (err || value != 0)
1615 return -EINVAL;
1616
1617 mutex_lock(&df->lock);
1ebd0bc0
KK
1618 memset(df->stats.time_in_state, 0, (df->profile->max_state *
1619 sizeof(*df->stats.time_in_state)));
1620 memset(df->stats.trans_table, 0, array3_size(sizeof(unsigned int),
14a34396
KK
1621 df->profile->max_state,
1622 df->profile->max_state));
1ebd0bc0
KK
1623 df->stats.total_trans = 0;
1624 df->stats.last_update = get_jiffies_64();
14a34396
KK
1625 mutex_unlock(&df->lock);
1626
1627 return count;
1628}
1629static DEVICE_ATTR_RW(trans_stat);
a93d6b0a
GKH
1630
1631static struct attribute *devfreq_attrs[] = {
2fee1a7c 1632 &dev_attr_name.attr,
a93d6b0a
GKH
1633 &dev_attr_governor.attr,
1634 &dev_attr_available_governors.attr,
1635 &dev_attr_cur_freq.attr,
1636 &dev_attr_available_frequencies.attr,
1637 &dev_attr_target_freq.attr,
1638 &dev_attr_polling_interval.attr,
1639 &dev_attr_min_freq.attr,
1640 &dev_attr_max_freq.attr,
1641 &dev_attr_trans_stat.attr,
1642 NULL,
9005b650 1643};
a93d6b0a 1644ATTRIBUTE_GROUPS(devfreq);
9005b650 1645
490a421b
CC
1646/**
1647 * devfreq_summary_show() - Show the summary of the devfreq devices
1648 * @s: seq_file instance to show the summary of devfreq devices
1649 * @data: not used
1650 *
1651 * Show the summary of the devfreq devices via 'devfreq_summary' debugfs file.
1652 * It helps that user can know the detailed information of the devfreq devices.
1653 *
1654 * Return 0 always because it shows the information without any data change.
1655 */
1656static int devfreq_summary_show(struct seq_file *s, void *data)
1657{
1658 struct devfreq *devfreq;
1659 struct devfreq *p_devfreq = NULL;
1660 unsigned long cur_freq, min_freq, max_freq;
1661 unsigned int polling_ms;
1662
1663 seq_printf(s, "%-30s %-10s %-10s %-15s %10s %12s %12s %12s\n",
1664 "dev_name",
1665 "dev",
1666 "parent_dev",
1667 "governor",
1668 "polling_ms",
1669 "cur_freq_Hz",
1670 "min_freq_Hz",
1671 "max_freq_Hz");
1672 seq_printf(s, "%30s %10s %10s %15s %10s %12s %12s %12s\n",
1673 "------------------------------",
1674 "----------",
1675 "----------",
1676 "---------------",
1677 "----------",
1678 "------------",
1679 "------------",
1680 "------------");
1681
1682 mutex_lock(&devfreq_list_lock);
1683
1684 list_for_each_entry_reverse(devfreq, &devfreq_list, node) {
1685#if IS_ENABLED(CONFIG_DEVFREQ_GOV_PASSIVE)
1686 if (!strncmp(devfreq->governor_name, DEVFREQ_GOV_PASSIVE,
1687 DEVFREQ_NAME_LEN)) {
1688 struct devfreq_passive_data *data = devfreq->data;
1689
1690 if (data)
1691 p_devfreq = data->parent;
1692 } else {
1693 p_devfreq = NULL;
1694 }
1695#endif
1696
1697 mutex_lock(&devfreq->lock);
1698 cur_freq = devfreq->previous_freq,
1699 get_freq_range(devfreq, &min_freq, &max_freq);
1700 polling_ms = devfreq->profile->polling_ms,
1701 mutex_unlock(&devfreq->lock);
1702
1703 seq_printf(s,
1704 "%-30s %-10s %-10s %-15s %10d %12ld %12ld %12ld\n",
1705 dev_name(devfreq->dev.parent),
1706 dev_name(&devfreq->dev),
1707 p_devfreq ? dev_name(&p_devfreq->dev) : "null",
1708 devfreq->governor_name,
1709 polling_ms,
1710 cur_freq,
1711 min_freq,
1712 max_freq);
1713 }
1714
1715 mutex_unlock(&devfreq_list_lock);
1716
1717 return 0;
1718}
1719DEFINE_SHOW_ATTRIBUTE(devfreq_summary);
1720
a3c98b8b
MH
1721static int __init devfreq_init(void)
1722{
1723 devfreq_class = class_create(THIS_MODULE, "devfreq");
1724 if (IS_ERR(devfreq_class)) {
1725 pr_err("%s: couldn't create class\n", __FILE__);
1726 return PTR_ERR(devfreq_class);
1727 }
7e6fdd4b
RV
1728
1729 devfreq_wq = create_freezable_workqueue("devfreq_wq");
ea7f4548 1730 if (!devfreq_wq) {
7e6fdd4b
RV
1731 class_destroy(devfreq_class);
1732 pr_err("%s: couldn't create workqueue\n", __FILE__);
ea7f4548 1733 return -ENOMEM;
7e6fdd4b 1734 }
a93d6b0a 1735 devfreq_class->dev_groups = devfreq_groups;
7e6fdd4b 1736
490a421b
CC
1737 devfreq_debugfs = debugfs_create_dir("devfreq", NULL);
1738 debugfs_create_file("devfreq_summary", 0444,
1739 devfreq_debugfs, NULL,
1740 &devfreq_summary_fops);
1741
a3c98b8b
MH
1742 return 0;
1743}
1744subsys_initcall(devfreq_init);
1745
a3c98b8b 1746/*
4091fb95 1747 * The following are helper functions for devfreq user device drivers with
a3c98b8b
MH
1748 * OPP framework.
1749 */
1750
1751/**
1752 * devfreq_recommended_opp() - Helper function to get proper OPP for the
1753 * freq value given to target callback.
c5b4a1c1
NM
1754 * @dev: The devfreq user device. (parent of devfreq)
1755 * @freq: The frequency given to target function
1756 * @flags: Flags handed from devfreq framework.
a3c98b8b 1757 *
8a31d9d9
VK
1758 * The callers are required to call dev_pm_opp_put() for the returned OPP after
1759 * use.
a3c98b8b 1760 */
47d43ba7
NM
1761struct dev_pm_opp *devfreq_recommended_opp(struct device *dev,
1762 unsigned long *freq,
1763 u32 flags)
a3c98b8b 1764{
47d43ba7 1765 struct dev_pm_opp *opp;
a3c98b8b 1766
ab5f299f
MH
1767 if (flags & DEVFREQ_FLAG_LEAST_UPPER_BOUND) {
1768 /* The freq is an upper bound. opp should be lower */
5d4879cd 1769 opp = dev_pm_opp_find_freq_floor(dev, freq);
ab5f299f
MH
1770
1771 /* If not available, use the closest opp */
0779726c 1772 if (opp == ERR_PTR(-ERANGE))
5d4879cd 1773 opp = dev_pm_opp_find_freq_ceil(dev, freq);
ab5f299f
MH
1774 } else {
1775 /* The freq is an lower bound. opp should be higher */
5d4879cd 1776 opp = dev_pm_opp_find_freq_ceil(dev, freq);
ab5f299f
MH
1777
1778 /* If not available, use the closest opp */
0779726c 1779 if (opp == ERR_PTR(-ERANGE))
5d4879cd 1780 opp = dev_pm_opp_find_freq_floor(dev, freq);
ab5f299f
MH
1781 }
1782
a3c98b8b
MH
1783 return opp;
1784}
bd7e9277 1785EXPORT_SYMBOL(devfreq_recommended_opp);
a3c98b8b
MH
1786
1787/**
1788 * devfreq_register_opp_notifier() - Helper function to get devfreq notified
6d690f77
MH
1789 * for any changes in the OPP availability
1790 * changes
c5b4a1c1
NM
1791 * @dev: The devfreq user device. (parent of devfreq)
1792 * @devfreq: The devfreq object.
a3c98b8b
MH
1793 */
1794int devfreq_register_opp_notifier(struct device *dev, struct devfreq *devfreq)
1795{
dc2c9ad5 1796 return dev_pm_opp_register_notifier(dev, &devfreq->nb);
a3c98b8b 1797}
bd7e9277 1798EXPORT_SYMBOL(devfreq_register_opp_notifier);
a3c98b8b
MH
1799
1800/**
1801 * devfreq_unregister_opp_notifier() - Helper function to stop getting devfreq
6d690f77
MH
1802 * notified for any changes in the OPP
1803 * availability changes anymore.
c5b4a1c1
NM
1804 * @dev: The devfreq user device. (parent of devfreq)
1805 * @devfreq: The devfreq object.
a3c98b8b
MH
1806 *
1807 * At exit() callback of devfreq_dev_profile, this must be included if
1808 * devfreq_recommended_opp is used.
1809 */
1810int devfreq_unregister_opp_notifier(struct device *dev, struct devfreq *devfreq)
1811{
dc2c9ad5 1812 return dev_pm_opp_unregister_notifier(dev, &devfreq->nb);
a3c98b8b 1813}
bd7e9277 1814EXPORT_SYMBOL(devfreq_unregister_opp_notifier);
a3c98b8b 1815
d5b040d0
CC
1816static void devm_devfreq_opp_release(struct device *dev, void *res)
1817{
1818 devfreq_unregister_opp_notifier(dev, *(struct devfreq **)res);
1819}
1820
1821/**
6d690f77
MH
1822 * devm_devfreq_register_opp_notifier() - Resource-managed
1823 * devfreq_register_opp_notifier()
d5b040d0
CC
1824 * @dev: The devfreq user device. (parent of devfreq)
1825 * @devfreq: The devfreq object.
1826 */
1827int devm_devfreq_register_opp_notifier(struct device *dev,
1828 struct devfreq *devfreq)
1829{
1830 struct devfreq **ptr;
1831 int ret;
1832
1833 ptr = devres_alloc(devm_devfreq_opp_release, sizeof(*ptr), GFP_KERNEL);
1834 if (!ptr)
1835 return -ENOMEM;
1836
1837 ret = devfreq_register_opp_notifier(dev, devfreq);
1838 if (ret) {
1839 devres_free(ptr);
1840 return ret;
1841 }
1842
1843 *ptr = devfreq;
1844 devres_add(dev, ptr);
1845
1846 return 0;
1847}
1848EXPORT_SYMBOL(devm_devfreq_register_opp_notifier);
1849
1850/**
6d690f77
MH
1851 * devm_devfreq_unregister_opp_notifier() - Resource-managed
1852 * devfreq_unregister_opp_notifier()
d5b040d0
CC
1853 * @dev: The devfreq user device. (parent of devfreq)
1854 * @devfreq: The devfreq object.
1855 */
1856void devm_devfreq_unregister_opp_notifier(struct device *dev,
1857 struct devfreq *devfreq)
1858{
1859 WARN_ON(devres_release(dev, devm_devfreq_opp_release,
1860 devm_devfreq_dev_match, devfreq));
1861}
1862EXPORT_SYMBOL(devm_devfreq_unregister_opp_notifier);
1863
0fe3a664
CC
1864/**
1865 * devfreq_register_notifier() - Register a driver with devfreq
1866 * @devfreq: The devfreq object.
1867 * @nb: The notifier block to register.
1868 * @list: DEVFREQ_TRANSITION_NOTIFIER.
1869 */
1870int devfreq_register_notifier(struct devfreq *devfreq,
6d690f77
MH
1871 struct notifier_block *nb,
1872 unsigned int list)
0fe3a664
CC
1873{
1874 int ret = 0;
1875
1876 if (!devfreq)
1877 return -EINVAL;
1878
1879 switch (list) {
1880 case DEVFREQ_TRANSITION_NOTIFIER:
1881 ret = srcu_notifier_chain_register(
1882 &devfreq->transition_notifier_list, nb);
1883 break;
1884 default:
1885 ret = -EINVAL;
1886 }
1887
1888 return ret;
1889}
1890EXPORT_SYMBOL(devfreq_register_notifier);
1891
1892/*
1893 * devfreq_unregister_notifier() - Unregister a driver with devfreq
1894 * @devfreq: The devfreq object.
1895 * @nb: The notifier block to be unregistered.
1896 * @list: DEVFREQ_TRANSITION_NOTIFIER.
1897 */
1898int devfreq_unregister_notifier(struct devfreq *devfreq,
1899 struct notifier_block *nb,
1900 unsigned int list)
1901{
1902 int ret = 0;
1903
1904 if (!devfreq)
1905 return -EINVAL;
1906
1907 switch (list) {
1908 case DEVFREQ_TRANSITION_NOTIFIER:
1909 ret = srcu_notifier_chain_unregister(
1910 &devfreq->transition_notifier_list, nb);
1911 break;
1912 default:
1913 ret = -EINVAL;
1914 }
1915
1916 return ret;
1917}
1918EXPORT_SYMBOL(devfreq_unregister_notifier);
1919
1920struct devfreq_notifier_devres {
1921 struct devfreq *devfreq;
1922 struct notifier_block *nb;
1923 unsigned int list;
1924};
1925
1926static void devm_devfreq_notifier_release(struct device *dev, void *res)
1927{
1928 struct devfreq_notifier_devres *this = res;
1929
1930 devfreq_unregister_notifier(this->devfreq, this->nb, this->list);
1931}
1932
1933/**
1934 * devm_devfreq_register_notifier()
54cb5740 1935 * - Resource-managed devfreq_register_notifier()
0fe3a664
CC
1936 * @dev: The devfreq user device. (parent of devfreq)
1937 * @devfreq: The devfreq object.
1938 * @nb: The notifier block to be unregistered.
1939 * @list: DEVFREQ_TRANSITION_NOTIFIER.
1940 */
1941int devm_devfreq_register_notifier(struct device *dev,
1942 struct devfreq *devfreq,
1943 struct notifier_block *nb,
1944 unsigned int list)
1945{
1946 struct devfreq_notifier_devres *ptr;
1947 int ret;
1948
1949 ptr = devres_alloc(devm_devfreq_notifier_release, sizeof(*ptr),
1950 GFP_KERNEL);
1951 if (!ptr)
1952 return -ENOMEM;
1953
1954 ret = devfreq_register_notifier(devfreq, nb, list);
1955 if (ret) {
1956 devres_free(ptr);
1957 return ret;
1958 }
1959
1960 ptr->devfreq = devfreq;
1961 ptr->nb = nb;
1962 ptr->list = list;
1963 devres_add(dev, ptr);
1964
1965 return 0;
1966}
1967EXPORT_SYMBOL(devm_devfreq_register_notifier);
1968
1969/**
1970 * devm_devfreq_unregister_notifier()
54cb5740 1971 * - Resource-managed devfreq_unregister_notifier()
0fe3a664
CC
1972 * @dev: The devfreq user device. (parent of devfreq)
1973 * @devfreq: The devfreq object.
1974 * @nb: The notifier block to be unregistered.
1975 * @list: DEVFREQ_TRANSITION_NOTIFIER.
1976 */
1977void devm_devfreq_unregister_notifier(struct device *dev,
6d690f77
MH
1978 struct devfreq *devfreq,
1979 struct notifier_block *nb,
1980 unsigned int list)
0fe3a664
CC
1981{
1982 WARN_ON(devres_release(dev, devm_devfreq_notifier_release,
1983 devm_devfreq_dev_match, devfreq));
1984}
1985EXPORT_SYMBOL(devm_devfreq_unregister_notifier);