]> asedeno.scripts.mit.edu Git - linux.git/blob - drivers/devfreq/devfreq.c
Merge branch 'stable/for-linus-4.20' of git://git.kernel.org/pub/scm/linux/kernel...
[linux.git] / drivers / devfreq / devfreq.c
1 /*
2  * devfreq: Generic Dynamic Voltage and Frequency Scaling (DVFS) Framework
3  *          for Non-CPU Devices.
4  *
5  * Copyright (C) 2011 Samsung Electronics
6  *      MyungJoo Ham <myungjoo.ham@samsung.com>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  */
12
13 #include <linux/kernel.h>
14 #include <linux/kmod.h>
15 #include <linux/sched.h>
16 #include <linux/errno.h>
17 #include <linux/err.h>
18 #include <linux/init.h>
19 #include <linux/export.h>
20 #include <linux/slab.h>
21 #include <linux/stat.h>
22 #include <linux/pm_opp.h>
23 #include <linux/devfreq.h>
24 #include <linux/workqueue.h>
25 #include <linux/platform_device.h>
26 #include <linux/list.h>
27 #include <linux/printk.h>
28 #include <linux/hrtimer.h>
29 #include <linux/of.h>
30 #include "governor.h"
31
32 static struct class *devfreq_class;
33
34 /*
35  * devfreq core provides delayed work based load monitoring helper
36  * functions. Governors can use these or can implement their own
37  * monitoring mechanism.
38  */
39 static struct workqueue_struct *devfreq_wq;
40
41 /* The list of all device-devfreq governors */
42 static LIST_HEAD(devfreq_governor_list);
43 /* The list of all device-devfreq */
44 static LIST_HEAD(devfreq_list);
45 static DEFINE_MUTEX(devfreq_list_lock);
46
47 /**
48  * find_device_devfreq() - find devfreq struct using device pointer
49  * @dev:        device pointer used to lookup device devfreq.
50  *
51  * Search the list of device devfreqs and return the matched device's
52  * devfreq info. devfreq_list_lock should be held by the caller.
53  */
54 static struct devfreq *find_device_devfreq(struct device *dev)
55 {
56         struct devfreq *tmp_devfreq;
57
58         if (IS_ERR_OR_NULL(dev)) {
59                 pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
60                 return ERR_PTR(-EINVAL);
61         }
62         WARN(!mutex_is_locked(&devfreq_list_lock),
63              "devfreq_list_lock must be locked.");
64
65         list_for_each_entry(tmp_devfreq, &devfreq_list, node) {
66                 if (tmp_devfreq->dev.parent == dev)
67                         return tmp_devfreq;
68         }
69
70         return ERR_PTR(-ENODEV);
71 }
72
73 static unsigned long find_available_min_freq(struct devfreq *devfreq)
74 {
75         struct dev_pm_opp *opp;
76         unsigned long min_freq = 0;
77
78         opp = dev_pm_opp_find_freq_ceil(devfreq->dev.parent, &min_freq);
79         if (IS_ERR(opp))
80                 min_freq = 0;
81         else
82                 dev_pm_opp_put(opp);
83
84         return min_freq;
85 }
86
87 static unsigned long find_available_max_freq(struct devfreq *devfreq)
88 {
89         struct dev_pm_opp *opp;
90         unsigned long max_freq = ULONG_MAX;
91
92         opp = dev_pm_opp_find_freq_floor(devfreq->dev.parent, &max_freq);
93         if (IS_ERR(opp))
94                 max_freq = 0;
95         else
96                 dev_pm_opp_put(opp);
97
98         return max_freq;
99 }
100
101 /**
102  * devfreq_get_freq_level() - Lookup freq_table for the frequency
103  * @devfreq:    the devfreq instance
104  * @freq:       the target frequency
105  */
106 static int devfreq_get_freq_level(struct devfreq *devfreq, unsigned long freq)
107 {
108         int lev;
109
110         for (lev = 0; lev < devfreq->profile->max_state; lev++)
111                 if (freq == devfreq->profile->freq_table[lev])
112                         return lev;
113
114         return -EINVAL;
115 }
116
117 static int set_freq_table(struct devfreq *devfreq)
118 {
119         struct devfreq_dev_profile *profile = devfreq->profile;
120         struct dev_pm_opp *opp;
121         unsigned long freq;
122         int i, count;
123
124         /* Initialize the freq_table from OPP table */
125         count = dev_pm_opp_get_opp_count(devfreq->dev.parent);
126         if (count <= 0)
127                 return -EINVAL;
128
129         profile->max_state = count;
130         profile->freq_table = devm_kcalloc(devfreq->dev.parent,
131                                         profile->max_state,
132                                         sizeof(*profile->freq_table),
133                                         GFP_KERNEL);
134         if (!profile->freq_table) {
135                 profile->max_state = 0;
136                 return -ENOMEM;
137         }
138
139         for (i = 0, freq = 0; i < profile->max_state; i++, freq++) {
140                 opp = dev_pm_opp_find_freq_ceil(devfreq->dev.parent, &freq);
141                 if (IS_ERR(opp)) {
142                         devm_kfree(devfreq->dev.parent, profile->freq_table);
143                         profile->max_state = 0;
144                         return PTR_ERR(opp);
145                 }
146                 dev_pm_opp_put(opp);
147                 profile->freq_table[i] = freq;
148         }
149
150         return 0;
151 }
152
153 /**
154  * devfreq_update_status() - Update statistics of devfreq behavior
155  * @devfreq:    the devfreq instance
156  * @freq:       the update target frequency
157  */
158 int devfreq_update_status(struct devfreq *devfreq, unsigned long freq)
159 {
160         int lev, prev_lev, ret = 0;
161         unsigned long cur_time;
162
163         cur_time = jiffies;
164
165         /* Immediately exit if previous_freq is not initialized yet. */
166         if (!devfreq->previous_freq)
167                 goto out;
168
169         prev_lev = devfreq_get_freq_level(devfreq, devfreq->previous_freq);
170         if (prev_lev < 0) {
171                 ret = prev_lev;
172                 goto out;
173         }
174
175         devfreq->time_in_state[prev_lev] +=
176                          cur_time - devfreq->last_stat_updated;
177
178         lev = devfreq_get_freq_level(devfreq, freq);
179         if (lev < 0) {
180                 ret = lev;
181                 goto out;
182         }
183
184         if (lev != prev_lev) {
185                 devfreq->trans_table[(prev_lev *
186                                 devfreq->profile->max_state) + lev]++;
187                 devfreq->total_trans++;
188         }
189
190 out:
191         devfreq->last_stat_updated = cur_time;
192         return ret;
193 }
194 EXPORT_SYMBOL(devfreq_update_status);
195
196 /**
197  * find_devfreq_governor() - find devfreq governor from name
198  * @name:       name of the governor
199  *
200  * Search the list of devfreq governors and return the matched
201  * governor's pointer. devfreq_list_lock should be held by the caller.
202  */
203 static struct devfreq_governor *find_devfreq_governor(const char *name)
204 {
205         struct devfreq_governor *tmp_governor;
206
207         if (IS_ERR_OR_NULL(name)) {
208                 pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
209                 return ERR_PTR(-EINVAL);
210         }
211         WARN(!mutex_is_locked(&devfreq_list_lock),
212              "devfreq_list_lock must be locked.");
213
214         list_for_each_entry(tmp_governor, &devfreq_governor_list, node) {
215                 if (!strncmp(tmp_governor->name, name, DEVFREQ_NAME_LEN))
216                         return tmp_governor;
217         }
218
219         return ERR_PTR(-ENODEV);
220 }
221
222 /**
223  * try_then_request_governor() - Try to find the governor and request the
224  *                               module if is not found.
225  * @name:       name of the governor
226  *
227  * Search the list of devfreq governors and request the module and try again
228  * if is not found. This can happen when both drivers (the governor driver
229  * and the driver that call devfreq_add_device) are built as modules.
230  * devfreq_list_lock should be held by the caller. Returns the matched
231  * governor's pointer.
232  */
233 static struct devfreq_governor *try_then_request_governor(const char *name)
234 {
235         struct devfreq_governor *governor;
236         int err = 0;
237
238         if (IS_ERR_OR_NULL(name)) {
239                 pr_err("DEVFREQ: %s: Invalid parameters\n", __func__);
240                 return ERR_PTR(-EINVAL);
241         }
242         WARN(!mutex_is_locked(&devfreq_list_lock),
243              "devfreq_list_lock must be locked.");
244
245         governor = find_devfreq_governor(name);
246         if (IS_ERR(governor)) {
247                 mutex_unlock(&devfreq_list_lock);
248
249                 if (!strncmp(name, DEVFREQ_GOV_SIMPLE_ONDEMAND,
250                              DEVFREQ_NAME_LEN))
251                         err = request_module("governor_%s", "simpleondemand");
252                 else
253                         err = request_module("governor_%s", name);
254                 /* Restore previous state before return */
255                 mutex_lock(&devfreq_list_lock);
256                 if (err)
257                         return NULL;
258
259                 governor = find_devfreq_governor(name);
260         }
261
262         return governor;
263 }
264
265 static int devfreq_notify_transition(struct devfreq *devfreq,
266                 struct devfreq_freqs *freqs, unsigned int state)
267 {
268         if (!devfreq)
269                 return -EINVAL;
270
271         switch (state) {
272         case DEVFREQ_PRECHANGE:
273                 srcu_notifier_call_chain(&devfreq->transition_notifier_list,
274                                 DEVFREQ_PRECHANGE, freqs);
275                 break;
276
277         case DEVFREQ_POSTCHANGE:
278                 srcu_notifier_call_chain(&devfreq->transition_notifier_list,
279                                 DEVFREQ_POSTCHANGE, freqs);
280                 break;
281         default:
282                 return -EINVAL;
283         }
284
285         return 0;
286 }
287
288 /* Load monitoring helper functions for governors use */
289
290 /**
291  * update_devfreq() - Reevaluate the device and configure frequency.
292  * @devfreq:    the devfreq instance.
293  *
294  * Note: Lock devfreq->lock before calling update_devfreq
295  *       This function is exported for governors.
296  */
297 int update_devfreq(struct devfreq *devfreq)
298 {
299         struct devfreq_freqs freqs;
300         unsigned long freq, cur_freq, min_freq, max_freq;
301         int err = 0;
302         u32 flags = 0;
303
304         if (!mutex_is_locked(&devfreq->lock)) {
305                 WARN(true, "devfreq->lock must be locked by the caller.\n");
306                 return -EINVAL;
307         }
308
309         if (!devfreq->governor)
310                 return -EINVAL;
311
312         /* Reevaluate the proper frequency */
313         err = devfreq->governor->get_target_freq(devfreq, &freq);
314         if (err)
315                 return err;
316
317         /*
318          * Adjust the frequency with user freq, QoS and available freq.
319          *
320          * List from the highest priority
321          * max_freq
322          * min_freq
323          */
324         max_freq = min(devfreq->scaling_max_freq, devfreq->max_freq);
325         min_freq = max(devfreq->scaling_min_freq, devfreq->min_freq);
326
327         if (freq < min_freq) {
328                 freq = min_freq;
329                 flags &= ~DEVFREQ_FLAG_LEAST_UPPER_BOUND; /* Use GLB */
330         }
331         if (freq > max_freq) {
332                 freq = max_freq;
333                 flags |= DEVFREQ_FLAG_LEAST_UPPER_BOUND; /* Use LUB */
334         }
335
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);
344
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;
361 }
362 EXPORT_SYMBOL(update_devfreq);
363
364 /**
365  * devfreq_monitor() - Periodically poll devfreq objects.
366  * @work:       the work struct used to run devfreq_monitor periodically.
367  *
368  */
369 static void devfreq_monitor(struct work_struct *work)
370 {
371         int err;
372         struct devfreq *devfreq = container_of(work,
373                                         struct devfreq, work.work);
374
375         mutex_lock(&devfreq->lock);
376         err = update_devfreq(devfreq);
377         if (err)
378                 dev_err(&devfreq->dev, "dvfs failed with (%d) error\n", err);
379
380         queue_delayed_work(devfreq_wq, &devfreq->work,
381                                 msecs_to_jiffies(devfreq->profile->polling_ms));
382         mutex_unlock(&devfreq->lock);
383 }
384
385 /**
386  * devfreq_monitor_start() - Start load monitoring of devfreq instance
387  * @devfreq:    the devfreq instance.
388  *
389  * Helper function for starting devfreq device load monitoing. By
390  * default delayed work based monitoring is supported. Function
391  * to be called from governor in response to DEVFREQ_GOV_START
392  * event when device is added to devfreq framework.
393  */
394 void devfreq_monitor_start(struct devfreq *devfreq)
395 {
396         INIT_DEFERRABLE_WORK(&devfreq->work, devfreq_monitor);
397         if (devfreq->profile->polling_ms)
398                 queue_delayed_work(devfreq_wq, &devfreq->work,
399                         msecs_to_jiffies(devfreq->profile->polling_ms));
400 }
401 EXPORT_SYMBOL(devfreq_monitor_start);
402
403 /**
404  * devfreq_monitor_stop() - Stop load monitoring of a devfreq instance
405  * @devfreq:    the devfreq instance.
406  *
407  * Helper function to stop devfreq device load monitoing. Function
408  * to be called from governor in response to DEVFREQ_GOV_STOP
409  * event when device is removed from devfreq framework.
410  */
411 void devfreq_monitor_stop(struct devfreq *devfreq)
412 {
413         cancel_delayed_work_sync(&devfreq->work);
414 }
415 EXPORT_SYMBOL(devfreq_monitor_stop);
416
417 /**
418  * devfreq_monitor_suspend() - Suspend load monitoring of a devfreq instance
419  * @devfreq:    the devfreq instance.
420  *
421  * Helper function to suspend devfreq device load monitoing. Function
422  * to be called from governor in response to DEVFREQ_GOV_SUSPEND
423  * event or when polling interval is set to zero.
424  *
425  * Note: Though this function is same as devfreq_monitor_stop(),
426  * intentionally kept separate to provide hooks for collecting
427  * transition statistics.
428  */
429 void devfreq_monitor_suspend(struct devfreq *devfreq)
430 {
431         mutex_lock(&devfreq->lock);
432         if (devfreq->stop_polling) {
433                 mutex_unlock(&devfreq->lock);
434                 return;
435         }
436
437         devfreq_update_status(devfreq, devfreq->previous_freq);
438         devfreq->stop_polling = true;
439         mutex_unlock(&devfreq->lock);
440         cancel_delayed_work_sync(&devfreq->work);
441 }
442 EXPORT_SYMBOL(devfreq_monitor_suspend);
443
444 /**
445  * devfreq_monitor_resume() - Resume load monitoring of a devfreq instance
446  * @devfreq:    the devfreq instance.
447  *
448  * Helper function to resume devfreq device load monitoing. Function
449  * to be called from governor in response to DEVFREQ_GOV_RESUME
450  * event or when polling interval is set to non-zero.
451  */
452 void devfreq_monitor_resume(struct devfreq *devfreq)
453 {
454         unsigned long freq;
455
456         mutex_lock(&devfreq->lock);
457         if (!devfreq->stop_polling)
458                 goto out;
459
460         if (!delayed_work_pending(&devfreq->work) &&
461                         devfreq->profile->polling_ms)
462                 queue_delayed_work(devfreq_wq, &devfreq->work,
463                         msecs_to_jiffies(devfreq->profile->polling_ms));
464
465         devfreq->last_stat_updated = jiffies;
466         devfreq->stop_polling = false;
467
468         if (devfreq->profile->get_cur_freq &&
469                 !devfreq->profile->get_cur_freq(devfreq->dev.parent, &freq))
470                 devfreq->previous_freq = freq;
471
472 out:
473         mutex_unlock(&devfreq->lock);
474 }
475 EXPORT_SYMBOL(devfreq_monitor_resume);
476
477 /**
478  * devfreq_interval_update() - Update device devfreq monitoring interval
479  * @devfreq:    the devfreq instance.
480  * @delay:      new polling interval to be set.
481  *
482  * Helper function to set new load monitoring polling interval. Function
483  * to be called from governor in response to DEVFREQ_GOV_INTERVAL event.
484  */
485 void devfreq_interval_update(struct devfreq *devfreq, unsigned int *delay)
486 {
487         unsigned int cur_delay = devfreq->profile->polling_ms;
488         unsigned int new_delay = *delay;
489
490         mutex_lock(&devfreq->lock);
491         devfreq->profile->polling_ms = new_delay;
492
493         if (devfreq->stop_polling)
494                 goto out;
495
496         /* if new delay is zero, stop polling */
497         if (!new_delay) {
498                 mutex_unlock(&devfreq->lock);
499                 cancel_delayed_work_sync(&devfreq->work);
500                 return;
501         }
502
503         /* if current delay is zero, start polling with new delay */
504         if (!cur_delay) {
505                 queue_delayed_work(devfreq_wq, &devfreq->work,
506                         msecs_to_jiffies(devfreq->profile->polling_ms));
507                 goto out;
508         }
509
510         /* if current delay is greater than new delay, restart polling */
511         if (cur_delay > new_delay) {
512                 mutex_unlock(&devfreq->lock);
513                 cancel_delayed_work_sync(&devfreq->work);
514                 mutex_lock(&devfreq->lock);
515                 if (!devfreq->stop_polling)
516                         queue_delayed_work(devfreq_wq, &devfreq->work,
517                               msecs_to_jiffies(devfreq->profile->polling_ms));
518         }
519 out:
520         mutex_unlock(&devfreq->lock);
521 }
522 EXPORT_SYMBOL(devfreq_interval_update);
523
524 /**
525  * devfreq_notifier_call() - Notify that the device frequency requirements
526  *                         has been changed out of devfreq framework.
527  * @nb:         the notifier_block (supposed to be devfreq->nb)
528  * @type:       not used
529  * @devp:       not used
530  *
531  * Called by a notifier that uses devfreq->nb.
532  */
533 static int devfreq_notifier_call(struct notifier_block *nb, unsigned long type,
534                                  void *devp)
535 {
536         struct devfreq *devfreq = container_of(nb, struct devfreq, nb);
537         int ret;
538
539         mutex_lock(&devfreq->lock);
540
541         devfreq->scaling_min_freq = find_available_min_freq(devfreq);
542         if (!devfreq->scaling_min_freq) {
543                 mutex_unlock(&devfreq->lock);
544                 return -EINVAL;
545         }
546
547         devfreq->scaling_max_freq = find_available_max_freq(devfreq);
548         if (!devfreq->scaling_max_freq) {
549                 mutex_unlock(&devfreq->lock);
550                 return -EINVAL;
551         }
552
553         ret = update_devfreq(devfreq);
554         mutex_unlock(&devfreq->lock);
555
556         return ret;
557 }
558
559 /**
560  * devfreq_dev_release() - Callback for struct device to release the device.
561  * @dev:        the devfreq device
562  *
563  * Remove devfreq from the list and release its resources.
564  */
565 static void devfreq_dev_release(struct device *dev)
566 {
567         struct devfreq *devfreq = to_devfreq(dev);
568
569         mutex_lock(&devfreq_list_lock);
570         if (IS_ERR(find_device_devfreq(devfreq->dev.parent))) {
571                 mutex_unlock(&devfreq_list_lock);
572                 dev_warn(&devfreq->dev, "releasing devfreq which doesn't exist\n");
573                 return;
574         }
575         list_del(&devfreq->node);
576         mutex_unlock(&devfreq_list_lock);
577
578         if (devfreq->profile->exit)
579                 devfreq->profile->exit(devfreq->dev.parent);
580
581         mutex_destroy(&devfreq->lock);
582         kfree(devfreq);
583 }
584
585 /**
586  * devfreq_add_device() - Add devfreq feature to the device
587  * @dev:        the device to add devfreq feature.
588  * @profile:    device-specific profile to run devfreq.
589  * @governor_name:      name of the policy to choose frequency.
590  * @data:       private data for the governor. The devfreq framework does not
591  *              touch this value.
592  */
593 struct devfreq *devfreq_add_device(struct device *dev,
594                                    struct devfreq_dev_profile *profile,
595                                    const char *governor_name,
596                                    void *data)
597 {
598         struct devfreq *devfreq;
599         struct devfreq_governor *governor;
600         static atomic_t devfreq_no = ATOMIC_INIT(-1);
601         int err = 0;
602
603         if (!dev || !profile || !governor_name) {
604                 dev_err(dev, "%s: Invalid parameters.\n", __func__);
605                 return ERR_PTR(-EINVAL);
606         }
607
608         mutex_lock(&devfreq_list_lock);
609         devfreq = find_device_devfreq(dev);
610         mutex_unlock(&devfreq_list_lock);
611         if (!IS_ERR(devfreq)) {
612                 dev_err(dev, "%s: Unable to create devfreq for the device.\n",
613                         __func__);
614                 err = -EINVAL;
615                 goto err_out;
616         }
617
618         devfreq = kzalloc(sizeof(struct devfreq), GFP_KERNEL);
619         if (!devfreq) {
620                 err = -ENOMEM;
621                 goto err_out;
622         }
623
624         mutex_init(&devfreq->lock);
625         mutex_lock(&devfreq->lock);
626         devfreq->dev.parent = dev;
627         devfreq->dev.class = devfreq_class;
628         devfreq->dev.release = devfreq_dev_release;
629         devfreq->profile = profile;
630         strncpy(devfreq->governor_name, governor_name, DEVFREQ_NAME_LEN);
631         devfreq->previous_freq = profile->initial_freq;
632         devfreq->last_status.current_frequency = profile->initial_freq;
633         devfreq->data = data;
634         devfreq->nb.notifier_call = devfreq_notifier_call;
635
636         if (!devfreq->profile->max_state && !devfreq->profile->freq_table) {
637                 mutex_unlock(&devfreq->lock);
638                 err = set_freq_table(devfreq);
639                 if (err < 0)
640                         goto err_out;
641                 mutex_lock(&devfreq->lock);
642         }
643
644         devfreq->scaling_min_freq = find_available_min_freq(devfreq);
645         if (!devfreq->scaling_min_freq) {
646                 mutex_unlock(&devfreq->lock);
647                 err = -EINVAL;
648                 goto err_dev;
649         }
650         devfreq->min_freq = devfreq->scaling_min_freq;
651
652         devfreq->scaling_max_freq = find_available_max_freq(devfreq);
653         if (!devfreq->scaling_max_freq) {
654                 mutex_unlock(&devfreq->lock);
655                 err = -EINVAL;
656                 goto err_dev;
657         }
658         devfreq->max_freq = devfreq->scaling_max_freq;
659
660         dev_set_name(&devfreq->dev, "devfreq%d",
661                                 atomic_inc_return(&devfreq_no));
662         err = device_register(&devfreq->dev);
663         if (err) {
664                 mutex_unlock(&devfreq->lock);
665                 put_device(&devfreq->dev);
666                 goto err_out;
667         }
668
669         devfreq->trans_table =
670                 devm_kzalloc(&devfreq->dev,
671                              array3_size(sizeof(unsigned int),
672                                          devfreq->profile->max_state,
673                                          devfreq->profile->max_state),
674                              GFP_KERNEL);
675         devfreq->time_in_state = devm_kcalloc(&devfreq->dev,
676                                                 devfreq->profile->max_state,
677                                                 sizeof(unsigned long),
678                                                 GFP_KERNEL);
679         devfreq->last_stat_updated = jiffies;
680
681         srcu_init_notifier_head(&devfreq->transition_notifier_list);
682
683         mutex_unlock(&devfreq->lock);
684
685         mutex_lock(&devfreq_list_lock);
686
687         governor = try_then_request_governor(devfreq->governor_name);
688         if (IS_ERR(governor)) {
689                 dev_err(dev, "%s: Unable to find governor for the device\n",
690                         __func__);
691                 err = PTR_ERR(governor);
692                 goto err_init;
693         }
694
695         devfreq->governor = governor;
696         err = devfreq->governor->event_handler(devfreq, DEVFREQ_GOV_START,
697                                                 NULL);
698         if (err) {
699                 dev_err(dev, "%s: Unable to start governor for the device\n",
700                         __func__);
701                 goto err_init;
702         }
703
704         list_add(&devfreq->node, &devfreq_list);
705
706         mutex_unlock(&devfreq_list_lock);
707
708         return devfreq;
709
710 err_init:
711         mutex_unlock(&devfreq_list_lock);
712
713         devfreq_remove_device(devfreq);
714         devfreq = NULL;
715 err_dev:
716         kfree(devfreq);
717 err_out:
718         return ERR_PTR(err);
719 }
720 EXPORT_SYMBOL(devfreq_add_device);
721
722 /**
723  * devfreq_remove_device() - Remove devfreq feature from a device.
724  * @devfreq:    the devfreq instance to be removed
725  *
726  * The opposite of devfreq_add_device().
727  */
728 int devfreq_remove_device(struct devfreq *devfreq)
729 {
730         if (!devfreq)
731                 return -EINVAL;
732
733         if (devfreq->governor)
734                 devfreq->governor->event_handler(devfreq,
735                                                  DEVFREQ_GOV_STOP, NULL);
736         device_unregister(&devfreq->dev);
737
738         return 0;
739 }
740 EXPORT_SYMBOL(devfreq_remove_device);
741
742 static int devm_devfreq_dev_match(struct device *dev, void *res, void *data)
743 {
744         struct devfreq **r = res;
745
746         if (WARN_ON(!r || !*r))
747                 return 0;
748
749         return *r == data;
750 }
751
752 static void devm_devfreq_dev_release(struct device *dev, void *res)
753 {
754         devfreq_remove_device(*(struct devfreq **)res);
755 }
756
757 /**
758  * devm_devfreq_add_device() - Resource-managed devfreq_add_device()
759  * @dev:        the device to add devfreq feature.
760  * @profile:    device-specific profile to run devfreq.
761  * @governor_name:      name of the policy to choose frequency.
762  * @data:       private data for the governor. The devfreq framework does not
763  *              touch this value.
764  *
765  * This function manages automatically the memory of devfreq device using device
766  * resource management and simplify the free operation for memory of devfreq
767  * device.
768  */
769 struct devfreq *devm_devfreq_add_device(struct device *dev,
770                                         struct devfreq_dev_profile *profile,
771                                         const char *governor_name,
772                                         void *data)
773 {
774         struct devfreq **ptr, *devfreq;
775
776         ptr = devres_alloc(devm_devfreq_dev_release, sizeof(*ptr), GFP_KERNEL);
777         if (!ptr)
778                 return ERR_PTR(-ENOMEM);
779
780         devfreq = devfreq_add_device(dev, profile, governor_name, data);
781         if (IS_ERR(devfreq)) {
782                 devres_free(ptr);
783                 return devfreq;
784         }
785
786         *ptr = devfreq;
787         devres_add(dev, ptr);
788
789         return devfreq;
790 }
791 EXPORT_SYMBOL(devm_devfreq_add_device);
792
793 #ifdef CONFIG_OF
794 /*
795  * devfreq_get_devfreq_by_phandle - Get the devfreq device from devicetree
796  * @dev - instance to the given device
797  * @index - index into list of devfreq
798  *
799  * return the instance of devfreq device
800  */
801 struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, int index)
802 {
803         struct device_node *node;
804         struct devfreq *devfreq;
805
806         if (!dev)
807                 return ERR_PTR(-EINVAL);
808
809         if (!dev->of_node)
810                 return ERR_PTR(-EINVAL);
811
812         node = of_parse_phandle(dev->of_node, "devfreq", index);
813         if (!node)
814                 return ERR_PTR(-ENODEV);
815
816         mutex_lock(&devfreq_list_lock);
817         list_for_each_entry(devfreq, &devfreq_list, node) {
818                 if (devfreq->dev.parent
819                         && devfreq->dev.parent->of_node == node) {
820                         mutex_unlock(&devfreq_list_lock);
821                         of_node_put(node);
822                         return devfreq;
823                 }
824         }
825         mutex_unlock(&devfreq_list_lock);
826         of_node_put(node);
827
828         return ERR_PTR(-EPROBE_DEFER);
829 }
830 #else
831 struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, int index)
832 {
833         return ERR_PTR(-ENODEV);
834 }
835 #endif /* CONFIG_OF */
836 EXPORT_SYMBOL_GPL(devfreq_get_devfreq_by_phandle);
837
838 /**
839  * devm_devfreq_remove_device() - Resource-managed devfreq_remove_device()
840  * @dev:        the device to add devfreq feature.
841  * @devfreq:    the devfreq instance to be removed
842  */
843 void devm_devfreq_remove_device(struct device *dev, struct devfreq *devfreq)
844 {
845         WARN_ON(devres_release(dev, devm_devfreq_dev_release,
846                                devm_devfreq_dev_match, devfreq));
847 }
848 EXPORT_SYMBOL(devm_devfreq_remove_device);
849
850 /**
851  * devfreq_suspend_device() - Suspend devfreq of a device.
852  * @devfreq: the devfreq instance to be suspended
853  *
854  * This function is intended to be called by the pm callbacks
855  * (e.g., runtime_suspend, suspend) of the device driver that
856  * holds the devfreq.
857  */
858 int devfreq_suspend_device(struct devfreq *devfreq)
859 {
860         if (!devfreq)
861                 return -EINVAL;
862
863         if (!devfreq->governor)
864                 return 0;
865
866         return devfreq->governor->event_handler(devfreq,
867                                 DEVFREQ_GOV_SUSPEND, NULL);
868 }
869 EXPORT_SYMBOL(devfreq_suspend_device);
870
871 /**
872  * devfreq_resume_device() - Resume devfreq of a device.
873  * @devfreq: the devfreq instance to be resumed
874  *
875  * This function is intended to be called by the pm callbacks
876  * (e.g., runtime_resume, resume) of the device driver that
877  * holds the devfreq.
878  */
879 int devfreq_resume_device(struct devfreq *devfreq)
880 {
881         if (!devfreq)
882                 return -EINVAL;
883
884         if (!devfreq->governor)
885                 return 0;
886
887         return devfreq->governor->event_handler(devfreq,
888                                 DEVFREQ_GOV_RESUME, NULL);
889 }
890 EXPORT_SYMBOL(devfreq_resume_device);
891
892 /**
893  * devfreq_add_governor() - Add devfreq governor
894  * @governor:   the devfreq governor to be added
895  */
896 int devfreq_add_governor(struct devfreq_governor *governor)
897 {
898         struct devfreq_governor *g;
899         struct devfreq *devfreq;
900         int err = 0;
901
902         if (!governor) {
903                 pr_err("%s: Invalid parameters.\n", __func__);
904                 return -EINVAL;
905         }
906
907         mutex_lock(&devfreq_list_lock);
908         g = find_devfreq_governor(governor->name);
909         if (!IS_ERR(g)) {
910                 pr_err("%s: governor %s already registered\n", __func__,
911                        g->name);
912                 err = -EINVAL;
913                 goto err_out;
914         }
915
916         list_add(&governor->node, &devfreq_governor_list);
917
918         list_for_each_entry(devfreq, &devfreq_list, node) {
919                 int ret = 0;
920                 struct device *dev = devfreq->dev.parent;
921
922                 if (!strncmp(devfreq->governor_name, governor->name,
923                              DEVFREQ_NAME_LEN)) {
924                         /* The following should never occur */
925                         if (devfreq->governor) {
926                                 dev_warn(dev,
927                                          "%s: Governor %s already present\n",
928                                          __func__, devfreq->governor->name);
929                                 ret = devfreq->governor->event_handler(devfreq,
930                                                         DEVFREQ_GOV_STOP, NULL);
931                                 if (ret) {
932                                         dev_warn(dev,
933                                                  "%s: Governor %s stop = %d\n",
934                                                  __func__,
935                                                  devfreq->governor->name, ret);
936                                 }
937                                 /* Fall through */
938                         }
939                         devfreq->governor = governor;
940                         ret = devfreq->governor->event_handler(devfreq,
941                                                 DEVFREQ_GOV_START, NULL);
942                         if (ret) {
943                                 dev_warn(dev, "%s: Governor %s start=%d\n",
944                                          __func__, devfreq->governor->name,
945                                          ret);
946                         }
947                 }
948         }
949
950 err_out:
951         mutex_unlock(&devfreq_list_lock);
952
953         return err;
954 }
955 EXPORT_SYMBOL(devfreq_add_governor);
956
957 /**
958  * devfreq_remove_governor() - Remove devfreq feature from a device.
959  * @governor:   the devfreq governor to be removed
960  */
961 int devfreq_remove_governor(struct devfreq_governor *governor)
962 {
963         struct devfreq_governor *g;
964         struct devfreq *devfreq;
965         int err = 0;
966
967         if (!governor) {
968                 pr_err("%s: Invalid parameters.\n", __func__);
969                 return -EINVAL;
970         }
971
972         mutex_lock(&devfreq_list_lock);
973         g = find_devfreq_governor(governor->name);
974         if (IS_ERR(g)) {
975                 pr_err("%s: governor %s not registered\n", __func__,
976                        governor->name);
977                 err = PTR_ERR(g);
978                 goto err_out;
979         }
980         list_for_each_entry(devfreq, &devfreq_list, node) {
981                 int ret;
982                 struct device *dev = devfreq->dev.parent;
983
984                 if (!strncmp(devfreq->governor_name, governor->name,
985                              DEVFREQ_NAME_LEN)) {
986                         /* we should have a devfreq governor! */
987                         if (!devfreq->governor) {
988                                 dev_warn(dev, "%s: Governor %s NOT present\n",
989                                          __func__, governor->name);
990                                 continue;
991                                 /* Fall through */
992                         }
993                         ret = devfreq->governor->event_handler(devfreq,
994                                                 DEVFREQ_GOV_STOP, NULL);
995                         if (ret) {
996                                 dev_warn(dev, "%s: Governor %s stop=%d\n",
997                                          __func__, devfreq->governor->name,
998                                          ret);
999                         }
1000                         devfreq->governor = NULL;
1001                 }
1002         }
1003
1004         list_del(&governor->node);
1005 err_out:
1006         mutex_unlock(&devfreq_list_lock);
1007
1008         return err;
1009 }
1010 EXPORT_SYMBOL(devfreq_remove_governor);
1011
1012 static ssize_t governor_show(struct device *dev,
1013                              struct device_attribute *attr, char *buf)
1014 {
1015         if (!to_devfreq(dev)->governor)
1016                 return -EINVAL;
1017
1018         return sprintf(buf, "%s\n", to_devfreq(dev)->governor->name);
1019 }
1020
1021 static ssize_t governor_store(struct device *dev, struct device_attribute *attr,
1022                               const char *buf, size_t count)
1023 {
1024         struct devfreq *df = to_devfreq(dev);
1025         int ret;
1026         char str_governor[DEVFREQ_NAME_LEN + 1];
1027         struct devfreq_governor *governor;
1028
1029         ret = sscanf(buf, "%" __stringify(DEVFREQ_NAME_LEN) "s", str_governor);
1030         if (ret != 1)
1031                 return -EINVAL;
1032
1033         mutex_lock(&devfreq_list_lock);
1034         governor = try_then_request_governor(str_governor);
1035         if (IS_ERR(governor)) {
1036                 ret = PTR_ERR(governor);
1037                 goto out;
1038         }
1039         if (df->governor == governor) {
1040                 ret = 0;
1041                 goto out;
1042         } else if ((df->governor && df->governor->immutable) ||
1043                                         governor->immutable) {
1044                 ret = -EINVAL;
1045                 goto out;
1046         }
1047
1048         if (df->governor) {
1049                 ret = df->governor->event_handler(df, DEVFREQ_GOV_STOP, NULL);
1050                 if (ret) {
1051                         dev_warn(dev, "%s: Governor %s not stopped(%d)\n",
1052                                  __func__, df->governor->name, ret);
1053                         goto out;
1054                 }
1055         }
1056         df->governor = governor;
1057         strncpy(df->governor_name, governor->name, DEVFREQ_NAME_LEN);
1058         ret = df->governor->event_handler(df, DEVFREQ_GOV_START, NULL);
1059         if (ret)
1060                 dev_warn(dev, "%s: Governor %s not started(%d)\n",
1061                          __func__, df->governor->name, ret);
1062 out:
1063         mutex_unlock(&devfreq_list_lock);
1064
1065         if (!ret)
1066                 ret = count;
1067         return ret;
1068 }
1069 static DEVICE_ATTR_RW(governor);
1070
1071 static ssize_t available_governors_show(struct device *d,
1072                                         struct device_attribute *attr,
1073                                         char *buf)
1074 {
1075         struct devfreq *df = to_devfreq(d);
1076         ssize_t count = 0;
1077
1078         mutex_lock(&devfreq_list_lock);
1079
1080         /*
1081          * The devfreq with immutable governor (e.g., passive) shows
1082          * only own governor.
1083          */
1084         if (df->governor->immutable) {
1085                 count = scnprintf(&buf[count], DEVFREQ_NAME_LEN,
1086                                    "%s ", df->governor_name);
1087         /*
1088          * The devfreq device shows the registered governor except for
1089          * immutable governors such as passive governor .
1090          */
1091         } else {
1092                 struct devfreq_governor *governor;
1093
1094                 list_for_each_entry(governor, &devfreq_governor_list, node) {
1095                         if (governor->immutable)
1096                                 continue;
1097                         count += scnprintf(&buf[count], (PAGE_SIZE - count - 2),
1098                                            "%s ", governor->name);
1099                 }
1100         }
1101
1102         mutex_unlock(&devfreq_list_lock);
1103
1104         /* Truncate the trailing space */
1105         if (count)
1106                 count--;
1107
1108         count += sprintf(&buf[count], "\n");
1109
1110         return count;
1111 }
1112 static DEVICE_ATTR_RO(available_governors);
1113
1114 static ssize_t cur_freq_show(struct device *dev, struct device_attribute *attr,
1115                              char *buf)
1116 {
1117         unsigned long freq;
1118         struct devfreq *devfreq = to_devfreq(dev);
1119
1120         if (devfreq->profile->get_cur_freq &&
1121                 !devfreq->profile->get_cur_freq(devfreq->dev.parent, &freq))
1122                 return sprintf(buf, "%lu\n", freq);
1123
1124         return sprintf(buf, "%lu\n", devfreq->previous_freq);
1125 }
1126 static DEVICE_ATTR_RO(cur_freq);
1127
1128 static ssize_t target_freq_show(struct device *dev,
1129                                 struct device_attribute *attr, char *buf)
1130 {
1131         return sprintf(buf, "%lu\n", to_devfreq(dev)->previous_freq);
1132 }
1133 static DEVICE_ATTR_RO(target_freq);
1134
1135 static ssize_t polling_interval_show(struct device *dev,
1136                                      struct device_attribute *attr, char *buf)
1137 {
1138         return sprintf(buf, "%d\n", to_devfreq(dev)->profile->polling_ms);
1139 }
1140
1141 static ssize_t polling_interval_store(struct device *dev,
1142                                       struct device_attribute *attr,
1143                                       const char *buf, size_t count)
1144 {
1145         struct devfreq *df = to_devfreq(dev);
1146         unsigned int value;
1147         int ret;
1148
1149         if (!df->governor)
1150                 return -EINVAL;
1151
1152         ret = sscanf(buf, "%u", &value);
1153         if (ret != 1)
1154                 return -EINVAL;
1155
1156         df->governor->event_handler(df, DEVFREQ_GOV_INTERVAL, &value);
1157         ret = count;
1158
1159         return ret;
1160 }
1161 static DEVICE_ATTR_RW(polling_interval);
1162
1163 static ssize_t min_freq_store(struct device *dev, struct device_attribute *attr,
1164                               const char *buf, size_t count)
1165 {
1166         struct devfreq *df = to_devfreq(dev);
1167         unsigned long value;
1168         int ret;
1169
1170         ret = sscanf(buf, "%lu", &value);
1171         if (ret != 1)
1172                 return -EINVAL;
1173
1174         mutex_lock(&df->lock);
1175
1176         if (value) {
1177                 if (value > df->max_freq) {
1178                         ret = -EINVAL;
1179                         goto unlock;
1180                 }
1181         } else {
1182                 unsigned long *freq_table = df->profile->freq_table;
1183
1184                 /* Get minimum frequency according to sorting order */
1185                 if (freq_table[0] < freq_table[df->profile->max_state - 1])
1186                         value = freq_table[0];
1187                 else
1188                         value = freq_table[df->profile->max_state - 1];
1189         }
1190
1191         df->min_freq = value;
1192         update_devfreq(df);
1193         ret = count;
1194 unlock:
1195         mutex_unlock(&df->lock);
1196         return ret;
1197 }
1198
1199 static ssize_t min_freq_show(struct device *dev, struct device_attribute *attr,
1200                              char *buf)
1201 {
1202         struct devfreq *df = to_devfreq(dev);
1203
1204         return sprintf(buf, "%lu\n", max(df->scaling_min_freq, df->min_freq));
1205 }
1206
1207 static ssize_t max_freq_store(struct device *dev, struct device_attribute *attr,
1208                               const char *buf, size_t count)
1209 {
1210         struct devfreq *df = to_devfreq(dev);
1211         unsigned long value;
1212         int ret;
1213
1214         ret = sscanf(buf, "%lu", &value);
1215         if (ret != 1)
1216                 return -EINVAL;
1217
1218         mutex_lock(&df->lock);
1219
1220         if (value) {
1221                 if (value < df->min_freq) {
1222                         ret = -EINVAL;
1223                         goto unlock;
1224                 }
1225         } else {
1226                 unsigned long *freq_table = df->profile->freq_table;
1227
1228                 /* Get maximum frequency according to sorting order */
1229                 if (freq_table[0] < freq_table[df->profile->max_state - 1])
1230                         value = freq_table[df->profile->max_state - 1];
1231                 else
1232                         value = freq_table[0];
1233         }
1234
1235         df->max_freq = value;
1236         update_devfreq(df);
1237         ret = count;
1238 unlock:
1239         mutex_unlock(&df->lock);
1240         return ret;
1241 }
1242 static DEVICE_ATTR_RW(min_freq);
1243
1244 static ssize_t max_freq_show(struct device *dev, struct device_attribute *attr,
1245                              char *buf)
1246 {
1247         struct devfreq *df = to_devfreq(dev);
1248
1249         return sprintf(buf, "%lu\n", min(df->scaling_max_freq, df->max_freq));
1250 }
1251 static DEVICE_ATTR_RW(max_freq);
1252
1253 static ssize_t available_frequencies_show(struct device *d,
1254                                           struct device_attribute *attr,
1255                                           char *buf)
1256 {
1257         struct devfreq *df = to_devfreq(d);
1258         ssize_t count = 0;
1259         int i;
1260
1261         mutex_lock(&df->lock);
1262
1263         for (i = 0; i < df->profile->max_state; i++)
1264                 count += scnprintf(&buf[count], (PAGE_SIZE - count - 2),
1265                                 "%lu ", df->profile->freq_table[i]);
1266
1267         mutex_unlock(&df->lock);
1268         /* Truncate the trailing space */
1269         if (count)
1270                 count--;
1271
1272         count += sprintf(&buf[count], "\n");
1273
1274         return count;
1275 }
1276 static DEVICE_ATTR_RO(available_frequencies);
1277
1278 static ssize_t trans_stat_show(struct device *dev,
1279                                struct device_attribute *attr, char *buf)
1280 {
1281         struct devfreq *devfreq = to_devfreq(dev);
1282         ssize_t len;
1283         int i, j;
1284         unsigned int max_state = devfreq->profile->max_state;
1285
1286         if (!devfreq->stop_polling &&
1287                         devfreq_update_status(devfreq, devfreq->previous_freq))
1288                 return 0;
1289         if (max_state == 0)
1290                 return sprintf(buf, "Not Supported.\n");
1291
1292         len = sprintf(buf, "     From  :   To\n");
1293         len += sprintf(buf + len, "           :");
1294         for (i = 0; i < max_state; i++)
1295                 len += sprintf(buf + len, "%10lu",
1296                                 devfreq->profile->freq_table[i]);
1297
1298         len += sprintf(buf + len, "   time(ms)\n");
1299
1300         for (i = 0; i < max_state; i++) {
1301                 if (devfreq->profile->freq_table[i]
1302                                         == devfreq->previous_freq) {
1303                         len += sprintf(buf + len, "*");
1304                 } else {
1305                         len += sprintf(buf + len, " ");
1306                 }
1307                 len += sprintf(buf + len, "%10lu:",
1308                                 devfreq->profile->freq_table[i]);
1309                 for (j = 0; j < max_state; j++)
1310                         len += sprintf(buf + len, "%10u",
1311                                 devfreq->trans_table[(i * max_state) + j]);
1312                 len += sprintf(buf + len, "%10u\n",
1313                         jiffies_to_msecs(devfreq->time_in_state[i]));
1314         }
1315
1316         len += sprintf(buf + len, "Total transition : %u\n",
1317                                         devfreq->total_trans);
1318         return len;
1319 }
1320 static DEVICE_ATTR_RO(trans_stat);
1321
1322 static struct attribute *devfreq_attrs[] = {
1323         &dev_attr_governor.attr,
1324         &dev_attr_available_governors.attr,
1325         &dev_attr_cur_freq.attr,
1326         &dev_attr_available_frequencies.attr,
1327         &dev_attr_target_freq.attr,
1328         &dev_attr_polling_interval.attr,
1329         &dev_attr_min_freq.attr,
1330         &dev_attr_max_freq.attr,
1331         &dev_attr_trans_stat.attr,
1332         NULL,
1333 };
1334 ATTRIBUTE_GROUPS(devfreq);
1335
1336 static int __init devfreq_init(void)
1337 {
1338         devfreq_class = class_create(THIS_MODULE, "devfreq");
1339         if (IS_ERR(devfreq_class)) {
1340                 pr_err("%s: couldn't create class\n", __FILE__);
1341                 return PTR_ERR(devfreq_class);
1342         }
1343
1344         devfreq_wq = create_freezable_workqueue("devfreq_wq");
1345         if (!devfreq_wq) {
1346                 class_destroy(devfreq_class);
1347                 pr_err("%s: couldn't create workqueue\n", __FILE__);
1348                 return -ENOMEM;
1349         }
1350         devfreq_class->dev_groups = devfreq_groups;
1351
1352         return 0;
1353 }
1354 subsys_initcall(devfreq_init);
1355
1356 /*
1357  * The following are helper functions for devfreq user device drivers with
1358  * OPP framework.
1359  */
1360
1361 /**
1362  * devfreq_recommended_opp() - Helper function to get proper OPP for the
1363  *                           freq value given to target callback.
1364  * @dev:        The devfreq user device. (parent of devfreq)
1365  * @freq:       The frequency given to target function
1366  * @flags:      Flags handed from devfreq framework.
1367  *
1368  * The callers are required to call dev_pm_opp_put() for the returned OPP after
1369  * use.
1370  */
1371 struct dev_pm_opp *devfreq_recommended_opp(struct device *dev,
1372                                            unsigned long *freq,
1373                                            u32 flags)
1374 {
1375         struct dev_pm_opp *opp;
1376
1377         if (flags & DEVFREQ_FLAG_LEAST_UPPER_BOUND) {
1378                 /* The freq is an upper bound. opp should be lower */
1379                 opp = dev_pm_opp_find_freq_floor(dev, freq);
1380
1381                 /* If not available, use the closest opp */
1382                 if (opp == ERR_PTR(-ERANGE))
1383                         opp = dev_pm_opp_find_freq_ceil(dev, freq);
1384         } else {
1385                 /* The freq is an lower bound. opp should be higher */
1386                 opp = dev_pm_opp_find_freq_ceil(dev, freq);
1387
1388                 /* If not available, use the closest opp */
1389                 if (opp == ERR_PTR(-ERANGE))
1390                         opp = dev_pm_opp_find_freq_floor(dev, freq);
1391         }
1392
1393         return opp;
1394 }
1395 EXPORT_SYMBOL(devfreq_recommended_opp);
1396
1397 /**
1398  * devfreq_register_opp_notifier() - Helper function to get devfreq notified
1399  *                                 for any changes in the OPP availability
1400  *                                 changes
1401  * @dev:        The devfreq user device. (parent of devfreq)
1402  * @devfreq:    The devfreq object.
1403  */
1404 int devfreq_register_opp_notifier(struct device *dev, struct devfreq *devfreq)
1405 {
1406         return dev_pm_opp_register_notifier(dev, &devfreq->nb);
1407 }
1408 EXPORT_SYMBOL(devfreq_register_opp_notifier);
1409
1410 /**
1411  * devfreq_unregister_opp_notifier() - Helper function to stop getting devfreq
1412  *                                   notified for any changes in the OPP
1413  *                                   availability changes anymore.
1414  * @dev:        The devfreq user device. (parent of devfreq)
1415  * @devfreq:    The devfreq object.
1416  *
1417  * At exit() callback of devfreq_dev_profile, this must be included if
1418  * devfreq_recommended_opp is used.
1419  */
1420 int devfreq_unregister_opp_notifier(struct device *dev, struct devfreq *devfreq)
1421 {
1422         return dev_pm_opp_unregister_notifier(dev, &devfreq->nb);
1423 }
1424 EXPORT_SYMBOL(devfreq_unregister_opp_notifier);
1425
1426 static void devm_devfreq_opp_release(struct device *dev, void *res)
1427 {
1428         devfreq_unregister_opp_notifier(dev, *(struct devfreq **)res);
1429 }
1430
1431 /**
1432  * devm_ devfreq_register_opp_notifier()
1433  *              - Resource-managed devfreq_register_opp_notifier()
1434  * @dev:        The devfreq user device. (parent of devfreq)
1435  * @devfreq:    The devfreq object.
1436  */
1437 int devm_devfreq_register_opp_notifier(struct device *dev,
1438                                        struct devfreq *devfreq)
1439 {
1440         struct devfreq **ptr;
1441         int ret;
1442
1443         ptr = devres_alloc(devm_devfreq_opp_release, sizeof(*ptr), GFP_KERNEL);
1444         if (!ptr)
1445                 return -ENOMEM;
1446
1447         ret = devfreq_register_opp_notifier(dev, devfreq);
1448         if (ret) {
1449                 devres_free(ptr);
1450                 return ret;
1451         }
1452
1453         *ptr = devfreq;
1454         devres_add(dev, ptr);
1455
1456         return 0;
1457 }
1458 EXPORT_SYMBOL(devm_devfreq_register_opp_notifier);
1459
1460 /**
1461  * devm_devfreq_unregister_opp_notifier()
1462  *              - Resource-managed devfreq_unregister_opp_notifier()
1463  * @dev:        The devfreq user device. (parent of devfreq)
1464  * @devfreq:    The devfreq object.
1465  */
1466 void devm_devfreq_unregister_opp_notifier(struct device *dev,
1467                                          struct devfreq *devfreq)
1468 {
1469         WARN_ON(devres_release(dev, devm_devfreq_opp_release,
1470                                devm_devfreq_dev_match, devfreq));
1471 }
1472 EXPORT_SYMBOL(devm_devfreq_unregister_opp_notifier);
1473
1474 /**
1475  * devfreq_register_notifier() - Register a driver with devfreq
1476  * @devfreq:    The devfreq object.
1477  * @nb:         The notifier block to register.
1478  * @list:       DEVFREQ_TRANSITION_NOTIFIER.
1479  */
1480 int devfreq_register_notifier(struct devfreq *devfreq,
1481                                 struct notifier_block *nb,
1482                                 unsigned int list)
1483 {
1484         int ret = 0;
1485
1486         if (!devfreq)
1487                 return -EINVAL;
1488
1489         switch (list) {
1490         case DEVFREQ_TRANSITION_NOTIFIER:
1491                 ret = srcu_notifier_chain_register(
1492                                 &devfreq->transition_notifier_list, nb);
1493                 break;
1494         default:
1495                 ret = -EINVAL;
1496         }
1497
1498         return ret;
1499 }
1500 EXPORT_SYMBOL(devfreq_register_notifier);
1501
1502 /*
1503  * devfreq_unregister_notifier() - Unregister a driver with devfreq
1504  * @devfreq:    The devfreq object.
1505  * @nb:         The notifier block to be unregistered.
1506  * @list:       DEVFREQ_TRANSITION_NOTIFIER.
1507  */
1508 int devfreq_unregister_notifier(struct devfreq *devfreq,
1509                                 struct notifier_block *nb,
1510                                 unsigned int list)
1511 {
1512         int ret = 0;
1513
1514         if (!devfreq)
1515                 return -EINVAL;
1516
1517         switch (list) {
1518         case DEVFREQ_TRANSITION_NOTIFIER:
1519                 ret = srcu_notifier_chain_unregister(
1520                                 &devfreq->transition_notifier_list, nb);
1521                 break;
1522         default:
1523                 ret = -EINVAL;
1524         }
1525
1526         return ret;
1527 }
1528 EXPORT_SYMBOL(devfreq_unregister_notifier);
1529
1530 struct devfreq_notifier_devres {
1531         struct devfreq *devfreq;
1532         struct notifier_block *nb;
1533         unsigned int list;
1534 };
1535
1536 static void devm_devfreq_notifier_release(struct device *dev, void *res)
1537 {
1538         struct devfreq_notifier_devres *this = res;
1539
1540         devfreq_unregister_notifier(this->devfreq, this->nb, this->list);
1541 }
1542
1543 /**
1544  * devm_devfreq_register_notifier()
1545         - Resource-managed devfreq_register_notifier()
1546  * @dev:        The devfreq user device. (parent of devfreq)
1547  * @devfreq:    The devfreq object.
1548  * @nb:         The notifier block to be unregistered.
1549  * @list:       DEVFREQ_TRANSITION_NOTIFIER.
1550  */
1551 int devm_devfreq_register_notifier(struct device *dev,
1552                                 struct devfreq *devfreq,
1553                                 struct notifier_block *nb,
1554                                 unsigned int list)
1555 {
1556         struct devfreq_notifier_devres *ptr;
1557         int ret;
1558
1559         ptr = devres_alloc(devm_devfreq_notifier_release, sizeof(*ptr),
1560                                 GFP_KERNEL);
1561         if (!ptr)
1562                 return -ENOMEM;
1563
1564         ret = devfreq_register_notifier(devfreq, nb, list);
1565         if (ret) {
1566                 devres_free(ptr);
1567                 return ret;
1568         }
1569
1570         ptr->devfreq = devfreq;
1571         ptr->nb = nb;
1572         ptr->list = list;
1573         devres_add(dev, ptr);
1574
1575         return 0;
1576 }
1577 EXPORT_SYMBOL(devm_devfreq_register_notifier);
1578
1579 /**
1580  * devm_devfreq_unregister_notifier()
1581         - Resource-managed devfreq_unregister_notifier()
1582  * @dev:        The devfreq user device. (parent of devfreq)
1583  * @devfreq:    The devfreq object.
1584  * @nb:         The notifier block to be unregistered.
1585  * @list:       DEVFREQ_TRANSITION_NOTIFIER.
1586  */
1587 void devm_devfreq_unregister_notifier(struct device *dev,
1588                                 struct devfreq *devfreq,
1589                                 struct notifier_block *nb,
1590                                 unsigned int list)
1591 {
1592         WARN_ON(devres_release(dev, devm_devfreq_notifier_release,
1593                                devm_devfreq_dev_match, devfreq));
1594 }
1595 EXPORT_SYMBOL(devm_devfreq_unregister_notifier);