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