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 static int devfreq_set_target(struct devfreq *devfreq, unsigned long new_freq, 289 u32 flags) 290 { 291 struct devfreq_freqs freqs; 292 unsigned long cur_freq; 293 int err = 0; 294 295 if (devfreq->profile->get_cur_freq) 296 devfreq->profile->get_cur_freq(devfreq->dev.parent, &cur_freq); 297 else 298 cur_freq = devfreq->previous_freq; 299 300 freqs.old = cur_freq; 301 freqs.new = new_freq; 302 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_PRECHANGE); 303 304 err = devfreq->profile->target(devfreq->dev.parent, &new_freq, flags); 305 if (err) { 306 freqs.new = cur_freq; 307 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE); 308 return err; 309 } 310 311 freqs.new = new_freq; 312 devfreq_notify_transition(devfreq, &freqs, DEVFREQ_POSTCHANGE); 313 314 if (devfreq_update_status(devfreq, new_freq)) 315 dev_err(&devfreq->dev, 316 "Couldn't update frequency transition information.\n"); 317 318 devfreq->previous_freq = new_freq; 319 320 if (devfreq->suspend_freq) 321 devfreq->resume_freq = cur_freq; 322 323 return err; 324 } 325 326 /* Load monitoring helper functions for governors use */ 327 328 /** 329 * update_devfreq() - Reevaluate the device and configure frequency. 330 * @devfreq: the devfreq instance. 331 * 332 * Note: Lock devfreq->lock before calling update_devfreq 333 * This function is exported for governors. 334 */ 335 int update_devfreq(struct devfreq *devfreq) 336 { 337 unsigned long freq, min_freq, max_freq; 338 int err = 0; 339 u32 flags = 0; 340 341 if (!mutex_is_locked(&devfreq->lock)) { 342 WARN(true, "devfreq->lock must be locked by the caller.\n"); 343 return -EINVAL; 344 } 345 346 if (!devfreq->governor) 347 return -EINVAL; 348 349 /* Reevaluate the proper frequency */ 350 err = devfreq->governor->get_target_freq(devfreq, &freq); 351 if (err) 352 return err; 353 354 /* 355 * Adjust the frequency with user freq, QoS and available freq. 356 * 357 * List from the highest priority 358 * max_freq 359 * min_freq 360 */ 361 max_freq = min(devfreq->scaling_max_freq, devfreq->max_freq); 362 min_freq = max(devfreq->scaling_min_freq, devfreq->min_freq); 363 364 if (freq < min_freq) { 365 freq = min_freq; 366 flags &= ~DEVFREQ_FLAG_LEAST_UPPER_BOUND; /* Use GLB */ 367 } 368 if (freq > max_freq) { 369 freq = max_freq; 370 flags |= DEVFREQ_FLAG_LEAST_UPPER_BOUND; /* Use LUB */ 371 } 372 373 return devfreq_set_target(devfreq, freq, flags); 374 375 } 376 EXPORT_SYMBOL(update_devfreq); 377 378 /** 379 * devfreq_monitor() - Periodically poll devfreq objects. 380 * @work: the work struct used to run devfreq_monitor periodically. 381 * 382 */ 383 static void devfreq_monitor(struct work_struct *work) 384 { 385 int err; 386 struct devfreq *devfreq = container_of(work, 387 struct devfreq, work.work); 388 389 mutex_lock(&devfreq->lock); 390 err = update_devfreq(devfreq); 391 if (err) 392 dev_err(&devfreq->dev, "dvfs failed with (%d) error\n", err); 393 394 queue_delayed_work(devfreq_wq, &devfreq->work, 395 msecs_to_jiffies(devfreq->profile->polling_ms)); 396 mutex_unlock(&devfreq->lock); 397 } 398 399 /** 400 * devfreq_monitor_start() - Start load monitoring of devfreq instance 401 * @devfreq: the devfreq instance. 402 * 403 * Helper function for starting devfreq device load monitoing. By 404 * default delayed work based monitoring is supported. Function 405 * to be called from governor in response to DEVFREQ_GOV_START 406 * event when device is added to devfreq framework. 407 */ 408 void devfreq_monitor_start(struct devfreq *devfreq) 409 { 410 INIT_DEFERRABLE_WORK(&devfreq->work, devfreq_monitor); 411 if (devfreq->profile->polling_ms) 412 queue_delayed_work(devfreq_wq, &devfreq->work, 413 msecs_to_jiffies(devfreq->profile->polling_ms)); 414 } 415 EXPORT_SYMBOL(devfreq_monitor_start); 416 417 /** 418 * devfreq_monitor_stop() - Stop load monitoring of a devfreq instance 419 * @devfreq: the devfreq instance. 420 * 421 * Helper function to stop devfreq device load monitoing. Function 422 * to be called from governor in response to DEVFREQ_GOV_STOP 423 * event when device is removed from devfreq framework. 424 */ 425 void devfreq_monitor_stop(struct devfreq *devfreq) 426 { 427 cancel_delayed_work_sync(&devfreq->work); 428 } 429 EXPORT_SYMBOL(devfreq_monitor_stop); 430 431 /** 432 * devfreq_monitor_suspend() - Suspend load monitoring of a devfreq instance 433 * @devfreq: the devfreq instance. 434 * 435 * Helper function to suspend devfreq device load monitoing. Function 436 * to be called from governor in response to DEVFREQ_GOV_SUSPEND 437 * event or when polling interval is set to zero. 438 * 439 * Note: Though this function is same as devfreq_monitor_stop(), 440 * intentionally kept separate to provide hooks for collecting 441 * transition statistics. 442 */ 443 void devfreq_monitor_suspend(struct devfreq *devfreq) 444 { 445 mutex_lock(&devfreq->lock); 446 if (devfreq->stop_polling) { 447 mutex_unlock(&devfreq->lock); 448 return; 449 } 450 451 devfreq_update_status(devfreq, devfreq->previous_freq); 452 devfreq->stop_polling = true; 453 mutex_unlock(&devfreq->lock); 454 cancel_delayed_work_sync(&devfreq->work); 455 } 456 EXPORT_SYMBOL(devfreq_monitor_suspend); 457 458 /** 459 * devfreq_monitor_resume() - Resume load monitoring of a devfreq instance 460 * @devfreq: the devfreq instance. 461 * 462 * Helper function to resume devfreq device load monitoing. Function 463 * to be called from governor in response to DEVFREQ_GOV_RESUME 464 * event or when polling interval is set to non-zero. 465 */ 466 void devfreq_monitor_resume(struct devfreq *devfreq) 467 { 468 unsigned long freq; 469 470 mutex_lock(&devfreq->lock); 471 if (!devfreq->stop_polling) 472 goto out; 473 474 if (!delayed_work_pending(&devfreq->work) && 475 devfreq->profile->polling_ms) 476 queue_delayed_work(devfreq_wq, &devfreq->work, 477 msecs_to_jiffies(devfreq->profile->polling_ms)); 478 479 devfreq->last_stat_updated = jiffies; 480 devfreq->stop_polling = false; 481 482 if (devfreq->profile->get_cur_freq && 483 !devfreq->profile->get_cur_freq(devfreq->dev.parent, &freq)) 484 devfreq->previous_freq = freq; 485 486 out: 487 mutex_unlock(&devfreq->lock); 488 } 489 EXPORT_SYMBOL(devfreq_monitor_resume); 490 491 /** 492 * devfreq_interval_update() - Update device devfreq monitoring interval 493 * @devfreq: the devfreq instance. 494 * @delay: new polling interval to be set. 495 * 496 * Helper function to set new load monitoring polling interval. Function 497 * to be called from governor in response to DEVFREQ_GOV_INTERVAL event. 498 */ 499 void devfreq_interval_update(struct devfreq *devfreq, unsigned int *delay) 500 { 501 unsigned int cur_delay = devfreq->profile->polling_ms; 502 unsigned int new_delay = *delay; 503 504 mutex_lock(&devfreq->lock); 505 devfreq->profile->polling_ms = new_delay; 506 507 if (devfreq->stop_polling) 508 goto out; 509 510 /* if new delay is zero, stop polling */ 511 if (!new_delay) { 512 mutex_unlock(&devfreq->lock); 513 cancel_delayed_work_sync(&devfreq->work); 514 return; 515 } 516 517 /* if current delay is zero, start polling with new delay */ 518 if (!cur_delay) { 519 queue_delayed_work(devfreq_wq, &devfreq->work, 520 msecs_to_jiffies(devfreq->profile->polling_ms)); 521 goto out; 522 } 523 524 /* if current delay is greater than new delay, restart polling */ 525 if (cur_delay > new_delay) { 526 mutex_unlock(&devfreq->lock); 527 cancel_delayed_work_sync(&devfreq->work); 528 mutex_lock(&devfreq->lock); 529 if (!devfreq->stop_polling) 530 queue_delayed_work(devfreq_wq, &devfreq->work, 531 msecs_to_jiffies(devfreq->profile->polling_ms)); 532 } 533 out: 534 mutex_unlock(&devfreq->lock); 535 } 536 EXPORT_SYMBOL(devfreq_interval_update); 537 538 /** 539 * devfreq_notifier_call() - Notify that the device frequency requirements 540 * has been changed out of devfreq framework. 541 * @nb: the notifier_block (supposed to be devfreq->nb) 542 * @type: not used 543 * @devp: not used 544 * 545 * Called by a notifier that uses devfreq->nb. 546 */ 547 static int devfreq_notifier_call(struct notifier_block *nb, unsigned long type, 548 void *devp) 549 { 550 struct devfreq *devfreq = container_of(nb, struct devfreq, nb); 551 int ret; 552 553 mutex_lock(&devfreq->lock); 554 555 devfreq->scaling_min_freq = find_available_min_freq(devfreq); 556 if (!devfreq->scaling_min_freq) { 557 mutex_unlock(&devfreq->lock); 558 return -EINVAL; 559 } 560 561 devfreq->scaling_max_freq = find_available_max_freq(devfreq); 562 if (!devfreq->scaling_max_freq) { 563 mutex_unlock(&devfreq->lock); 564 return -EINVAL; 565 } 566 567 ret = update_devfreq(devfreq); 568 mutex_unlock(&devfreq->lock); 569 570 return ret; 571 } 572 573 /** 574 * devfreq_dev_release() - Callback for struct device to release the device. 575 * @dev: the devfreq device 576 * 577 * Remove devfreq from the list and release its resources. 578 */ 579 static void devfreq_dev_release(struct device *dev) 580 { 581 struct devfreq *devfreq = to_devfreq(dev); 582 583 mutex_lock(&devfreq_list_lock); 584 if (IS_ERR(find_device_devfreq(devfreq->dev.parent))) { 585 mutex_unlock(&devfreq_list_lock); 586 dev_warn(&devfreq->dev, "releasing devfreq which doesn't exist\n"); 587 return; 588 } 589 list_del(&devfreq->node); 590 mutex_unlock(&devfreq_list_lock); 591 592 if (devfreq->profile->exit) 593 devfreq->profile->exit(devfreq->dev.parent); 594 595 mutex_destroy(&devfreq->lock); 596 kfree(devfreq); 597 } 598 599 /** 600 * devfreq_add_device() - Add devfreq feature to the device 601 * @dev: the device to add devfreq feature. 602 * @profile: device-specific profile to run devfreq. 603 * @governor_name: name of the policy to choose frequency. 604 * @data: private data for the governor. The devfreq framework does not 605 * touch this value. 606 */ 607 struct devfreq *devfreq_add_device(struct device *dev, 608 struct devfreq_dev_profile *profile, 609 const char *governor_name, 610 void *data) 611 { 612 struct devfreq *devfreq; 613 struct devfreq_governor *governor; 614 static atomic_t devfreq_no = ATOMIC_INIT(-1); 615 int err = 0; 616 617 if (!dev || !profile || !governor_name) { 618 dev_err(dev, "%s: Invalid parameters.\n", __func__); 619 return ERR_PTR(-EINVAL); 620 } 621 622 mutex_lock(&devfreq_list_lock); 623 devfreq = find_device_devfreq(dev); 624 mutex_unlock(&devfreq_list_lock); 625 if (!IS_ERR(devfreq)) { 626 dev_err(dev, "%s: Unable to create devfreq for the device.\n", 627 __func__); 628 err = -EINVAL; 629 goto err_out; 630 } 631 632 devfreq = kzalloc(sizeof(struct devfreq), GFP_KERNEL); 633 if (!devfreq) { 634 err = -ENOMEM; 635 goto err_out; 636 } 637 638 mutex_init(&devfreq->lock); 639 mutex_lock(&devfreq->lock); 640 devfreq->dev.parent = dev; 641 devfreq->dev.class = devfreq_class; 642 devfreq->dev.release = devfreq_dev_release; 643 devfreq->profile = profile; 644 strncpy(devfreq->governor_name, governor_name, DEVFREQ_NAME_LEN); 645 devfreq->previous_freq = profile->initial_freq; 646 devfreq->last_status.current_frequency = profile->initial_freq; 647 devfreq->data = data; 648 devfreq->nb.notifier_call = devfreq_notifier_call; 649 650 if (!devfreq->profile->max_state && !devfreq->profile->freq_table) { 651 mutex_unlock(&devfreq->lock); 652 err = set_freq_table(devfreq); 653 if (err < 0) 654 goto err_out; 655 mutex_lock(&devfreq->lock); 656 } 657 658 devfreq->scaling_min_freq = find_available_min_freq(devfreq); 659 if (!devfreq->scaling_min_freq) { 660 mutex_unlock(&devfreq->lock); 661 err = -EINVAL; 662 goto err_dev; 663 } 664 devfreq->min_freq = devfreq->scaling_min_freq; 665 666 devfreq->scaling_max_freq = find_available_max_freq(devfreq); 667 if (!devfreq->scaling_max_freq) { 668 mutex_unlock(&devfreq->lock); 669 err = -EINVAL; 670 goto err_dev; 671 } 672 devfreq->max_freq = devfreq->scaling_max_freq; 673 674 devfreq->suspend_freq = dev_pm_opp_get_suspend_opp_freq(dev); 675 atomic_set(&devfreq->suspend_count, 0); 676 677 dev_set_name(&devfreq->dev, "devfreq%d", 678 atomic_inc_return(&devfreq_no)); 679 err = device_register(&devfreq->dev); 680 if (err) { 681 mutex_unlock(&devfreq->lock); 682 put_device(&devfreq->dev); 683 goto err_out; 684 } 685 686 devfreq->trans_table = 687 devm_kzalloc(&devfreq->dev, 688 array3_size(sizeof(unsigned int), 689 devfreq->profile->max_state, 690 devfreq->profile->max_state), 691 GFP_KERNEL); 692 devfreq->time_in_state = devm_kcalloc(&devfreq->dev, 693 devfreq->profile->max_state, 694 sizeof(unsigned long), 695 GFP_KERNEL); 696 devfreq->last_stat_updated = jiffies; 697 698 srcu_init_notifier_head(&devfreq->transition_notifier_list); 699 700 mutex_unlock(&devfreq->lock); 701 702 mutex_lock(&devfreq_list_lock); 703 704 governor = try_then_request_governor(devfreq->governor_name); 705 if (IS_ERR(governor)) { 706 dev_err(dev, "%s: Unable to find governor for the device\n", 707 __func__); 708 err = PTR_ERR(governor); 709 goto err_init; 710 } 711 712 devfreq->governor = governor; 713 err = devfreq->governor->event_handler(devfreq, DEVFREQ_GOV_START, 714 NULL); 715 if (err) { 716 dev_err(dev, "%s: Unable to start governor for the device\n", 717 __func__); 718 goto err_init; 719 } 720 721 list_add(&devfreq->node, &devfreq_list); 722 723 mutex_unlock(&devfreq_list_lock); 724 725 return devfreq; 726 727 err_init: 728 mutex_unlock(&devfreq_list_lock); 729 730 devfreq_remove_device(devfreq); 731 devfreq = NULL; 732 err_dev: 733 kfree(devfreq); 734 err_out: 735 return ERR_PTR(err); 736 } 737 EXPORT_SYMBOL(devfreq_add_device); 738 739 /** 740 * devfreq_remove_device() - Remove devfreq feature from a device. 741 * @devfreq: the devfreq instance to be removed 742 * 743 * The opposite of devfreq_add_device(). 744 */ 745 int devfreq_remove_device(struct devfreq *devfreq) 746 { 747 if (!devfreq) 748 return -EINVAL; 749 750 if (devfreq->governor) 751 devfreq->governor->event_handler(devfreq, 752 DEVFREQ_GOV_STOP, NULL); 753 device_unregister(&devfreq->dev); 754 755 return 0; 756 } 757 EXPORT_SYMBOL(devfreq_remove_device); 758 759 static int devm_devfreq_dev_match(struct device *dev, void *res, void *data) 760 { 761 struct devfreq **r = res; 762 763 if (WARN_ON(!r || !*r)) 764 return 0; 765 766 return *r == data; 767 } 768 769 static void devm_devfreq_dev_release(struct device *dev, void *res) 770 { 771 devfreq_remove_device(*(struct devfreq **)res); 772 } 773 774 /** 775 * devm_devfreq_add_device() - Resource-managed devfreq_add_device() 776 * @dev: the device to add devfreq feature. 777 * @profile: device-specific profile to run devfreq. 778 * @governor_name: name of the policy to choose frequency. 779 * @data: private data for the governor. The devfreq framework does not 780 * touch this value. 781 * 782 * This function manages automatically the memory of devfreq device using device 783 * resource management and simplify the free operation for memory of devfreq 784 * device. 785 */ 786 struct devfreq *devm_devfreq_add_device(struct device *dev, 787 struct devfreq_dev_profile *profile, 788 const char *governor_name, 789 void *data) 790 { 791 struct devfreq **ptr, *devfreq; 792 793 ptr = devres_alloc(devm_devfreq_dev_release, sizeof(*ptr), GFP_KERNEL); 794 if (!ptr) 795 return ERR_PTR(-ENOMEM); 796 797 devfreq = devfreq_add_device(dev, profile, governor_name, data); 798 if (IS_ERR(devfreq)) { 799 devres_free(ptr); 800 return devfreq; 801 } 802 803 *ptr = devfreq; 804 devres_add(dev, ptr); 805 806 return devfreq; 807 } 808 EXPORT_SYMBOL(devm_devfreq_add_device); 809 810 #ifdef CONFIG_OF 811 /* 812 * devfreq_get_devfreq_by_phandle - Get the devfreq device from devicetree 813 * @dev - instance to the given device 814 * @index - index into list of devfreq 815 * 816 * return the instance of devfreq device 817 */ 818 struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, int index) 819 { 820 struct device_node *node; 821 struct devfreq *devfreq; 822 823 if (!dev) 824 return ERR_PTR(-EINVAL); 825 826 if (!dev->of_node) 827 return ERR_PTR(-EINVAL); 828 829 node = of_parse_phandle(dev->of_node, "devfreq", index); 830 if (!node) 831 return ERR_PTR(-ENODEV); 832 833 mutex_lock(&devfreq_list_lock); 834 list_for_each_entry(devfreq, &devfreq_list, node) { 835 if (devfreq->dev.parent 836 && devfreq->dev.parent->of_node == node) { 837 mutex_unlock(&devfreq_list_lock); 838 of_node_put(node); 839 return devfreq; 840 } 841 } 842 mutex_unlock(&devfreq_list_lock); 843 of_node_put(node); 844 845 return ERR_PTR(-EPROBE_DEFER); 846 } 847 #else 848 struct devfreq *devfreq_get_devfreq_by_phandle(struct device *dev, int index) 849 { 850 return ERR_PTR(-ENODEV); 851 } 852 #endif /* CONFIG_OF */ 853 EXPORT_SYMBOL_GPL(devfreq_get_devfreq_by_phandle); 854 855 /** 856 * devm_devfreq_remove_device() - Resource-managed devfreq_remove_device() 857 * @dev: the device to add devfreq feature. 858 * @devfreq: the devfreq instance to be removed 859 */ 860 void devm_devfreq_remove_device(struct device *dev, struct devfreq *devfreq) 861 { 862 WARN_ON(devres_release(dev, devm_devfreq_dev_release, 863 devm_devfreq_dev_match, devfreq)); 864 } 865 EXPORT_SYMBOL(devm_devfreq_remove_device); 866 867 /** 868 * devfreq_suspend_device() - Suspend devfreq of a device. 869 * @devfreq: the devfreq instance to be suspended 870 * 871 * This function is intended to be called by the pm callbacks 872 * (e.g., runtime_suspend, suspend) of the device driver that 873 * holds the devfreq. 874 */ 875 int devfreq_suspend_device(struct devfreq *devfreq) 876 { 877 int ret; 878 879 if (!devfreq) 880 return -EINVAL; 881 882 if (atomic_inc_return(&devfreq->suspend_count) > 1) 883 return 0; 884 885 if (devfreq->governor) { 886 ret = devfreq->governor->event_handler(devfreq, 887 DEVFREQ_GOV_SUSPEND, NULL); 888 if (ret) 889 return ret; 890 } 891 892 if (devfreq->suspend_freq) { 893 ret = devfreq_set_target(devfreq, devfreq->suspend_freq, 0); 894 if (ret) 895 return ret; 896 } 897 898 return 0; 899 } 900 EXPORT_SYMBOL(devfreq_suspend_device); 901 902 /** 903 * devfreq_resume_device() - Resume devfreq of a device. 904 * @devfreq: the devfreq instance to be resumed 905 * 906 * This function is intended to be called by the pm callbacks 907 * (e.g., runtime_resume, resume) of the device driver that 908 * holds the devfreq. 909 */ 910 int devfreq_resume_device(struct devfreq *devfreq) 911 { 912 int ret; 913 914 if (!devfreq) 915 return -EINVAL; 916 917 if (atomic_dec_return(&devfreq->suspend_count) >= 1) 918 return 0; 919 920 if (devfreq->resume_freq) { 921 ret = devfreq_set_target(devfreq, devfreq->resume_freq, 0); 922 if (ret) 923 return ret; 924 } 925 926 if (devfreq->governor) { 927 ret = devfreq->governor->event_handler(devfreq, 928 DEVFREQ_GOV_RESUME, NULL); 929 if (ret) 930 return ret; 931 } 932 933 return 0; 934 } 935 EXPORT_SYMBOL(devfreq_resume_device); 936 937 /** 938 * devfreq_suspend() - Suspend devfreq governors and devices 939 * 940 * Called during system wide Suspend/Hibernate cycles for suspending governors 941 * and devices preserving the state for resume. On some platforms the devfreq 942 * device must have precise state (frequency) after resume in order to provide 943 * fully operating setup. 944 */ 945 void devfreq_suspend(void) 946 { 947 struct devfreq *devfreq; 948 int ret; 949 950 mutex_lock(&devfreq_list_lock); 951 list_for_each_entry(devfreq, &devfreq_list, node) { 952 ret = devfreq_suspend_device(devfreq); 953 if (ret) 954 dev_err(&devfreq->dev, 955 "failed to suspend devfreq device\n"); 956 } 957 mutex_unlock(&devfreq_list_lock); 958 } 959 960 /** 961 * devfreq_resume() - Resume devfreq governors and devices 962 * 963 * Called during system wide Suspend/Hibernate cycle for resuming governors and 964 * devices that are suspended with devfreq_suspend(). 965 */ 966 void devfreq_resume(void) 967 { 968 struct devfreq *devfreq; 969 int ret; 970 971 mutex_lock(&devfreq_list_lock); 972 list_for_each_entry(devfreq, &devfreq_list, node) { 973 ret = devfreq_resume_device(devfreq); 974 if (ret) 975 dev_warn(&devfreq->dev, 976 "failed to resume devfreq device\n"); 977 } 978 mutex_unlock(&devfreq_list_lock); 979 } 980 981 /** 982 * devfreq_add_governor() - Add devfreq governor 983 * @governor: the devfreq governor to be added 984 */ 985 int devfreq_add_governor(struct devfreq_governor *governor) 986 { 987 struct devfreq_governor *g; 988 struct devfreq *devfreq; 989 int err = 0; 990 991 if (!governor) { 992 pr_err("%s: Invalid parameters.\n", __func__); 993 return -EINVAL; 994 } 995 996 mutex_lock(&devfreq_list_lock); 997 g = find_devfreq_governor(governor->name); 998 if (!IS_ERR(g)) { 999 pr_err("%s: governor %s already registered\n", __func__, 1000 g->name); 1001 err = -EINVAL; 1002 goto err_out; 1003 } 1004 1005 list_add(&governor->node, &devfreq_governor_list); 1006 1007 list_for_each_entry(devfreq, &devfreq_list, node) { 1008 int ret = 0; 1009 struct device *dev = devfreq->dev.parent; 1010 1011 if (!strncmp(devfreq->governor_name, governor->name, 1012 DEVFREQ_NAME_LEN)) { 1013 /* The following should never occur */ 1014 if (devfreq->governor) { 1015 dev_warn(dev, 1016 "%s: Governor %s already present\n", 1017 __func__, devfreq->governor->name); 1018 ret = devfreq->governor->event_handler(devfreq, 1019 DEVFREQ_GOV_STOP, NULL); 1020 if (ret) { 1021 dev_warn(dev, 1022 "%s: Governor %s stop = %d\n", 1023 __func__, 1024 devfreq->governor->name, ret); 1025 } 1026 /* Fall through */ 1027 } 1028 devfreq->governor = governor; 1029 ret = devfreq->governor->event_handler(devfreq, 1030 DEVFREQ_GOV_START, NULL); 1031 if (ret) { 1032 dev_warn(dev, "%s: Governor %s start=%d\n", 1033 __func__, devfreq->governor->name, 1034 ret); 1035 } 1036 } 1037 } 1038 1039 err_out: 1040 mutex_unlock(&devfreq_list_lock); 1041 1042 return err; 1043 } 1044 EXPORT_SYMBOL(devfreq_add_governor); 1045 1046 /** 1047 * devfreq_remove_governor() - Remove devfreq feature from a device. 1048 * @governor: the devfreq governor to be removed 1049 */ 1050 int devfreq_remove_governor(struct devfreq_governor *governor) 1051 { 1052 struct devfreq_governor *g; 1053 struct devfreq *devfreq; 1054 int err = 0; 1055 1056 if (!governor) { 1057 pr_err("%s: Invalid parameters.\n", __func__); 1058 return -EINVAL; 1059 } 1060 1061 mutex_lock(&devfreq_list_lock); 1062 g = find_devfreq_governor(governor->name); 1063 if (IS_ERR(g)) { 1064 pr_err("%s: governor %s not registered\n", __func__, 1065 governor->name); 1066 err = PTR_ERR(g); 1067 goto err_out; 1068 } 1069 list_for_each_entry(devfreq, &devfreq_list, node) { 1070 int ret; 1071 struct device *dev = devfreq->dev.parent; 1072 1073 if (!strncmp(devfreq->governor_name, governor->name, 1074 DEVFREQ_NAME_LEN)) { 1075 /* we should have a devfreq governor! */ 1076 if (!devfreq->governor) { 1077 dev_warn(dev, "%s: Governor %s NOT present\n", 1078 __func__, governor->name); 1079 continue; 1080 /* Fall through */ 1081 } 1082 ret = devfreq->governor->event_handler(devfreq, 1083 DEVFREQ_GOV_STOP, NULL); 1084 if (ret) { 1085 dev_warn(dev, "%s: Governor %s stop=%d\n", 1086 __func__, devfreq->governor->name, 1087 ret); 1088 } 1089 devfreq->governor = NULL; 1090 } 1091 } 1092 1093 list_del(&governor->node); 1094 err_out: 1095 mutex_unlock(&devfreq_list_lock); 1096 1097 return err; 1098 } 1099 EXPORT_SYMBOL(devfreq_remove_governor); 1100 1101 static ssize_t governor_show(struct device *dev, 1102 struct device_attribute *attr, char *buf) 1103 { 1104 if (!to_devfreq(dev)->governor) 1105 return -EINVAL; 1106 1107 return sprintf(buf, "%s\n", to_devfreq(dev)->governor->name); 1108 } 1109 1110 static ssize_t governor_store(struct device *dev, struct device_attribute *attr, 1111 const char *buf, size_t count) 1112 { 1113 struct devfreq *df = to_devfreq(dev); 1114 int ret; 1115 char str_governor[DEVFREQ_NAME_LEN + 1]; 1116 struct devfreq_governor *governor; 1117 1118 ret = sscanf(buf, "%" __stringify(DEVFREQ_NAME_LEN) "s", str_governor); 1119 if (ret != 1) 1120 return -EINVAL; 1121 1122 mutex_lock(&devfreq_list_lock); 1123 governor = try_then_request_governor(str_governor); 1124 if (IS_ERR(governor)) { 1125 ret = PTR_ERR(governor); 1126 goto out; 1127 } 1128 if (df->governor == governor) { 1129 ret = 0; 1130 goto out; 1131 } else if ((df->governor && df->governor->immutable) || 1132 governor->immutable) { 1133 ret = -EINVAL; 1134 goto out; 1135 } 1136 1137 if (df->governor) { 1138 ret = df->governor->event_handler(df, DEVFREQ_GOV_STOP, NULL); 1139 if (ret) { 1140 dev_warn(dev, "%s: Governor %s not stopped(%d)\n", 1141 __func__, df->governor->name, ret); 1142 goto out; 1143 } 1144 } 1145 df->governor = governor; 1146 strncpy(df->governor_name, governor->name, DEVFREQ_NAME_LEN); 1147 ret = df->governor->event_handler(df, DEVFREQ_GOV_START, NULL); 1148 if (ret) 1149 dev_warn(dev, "%s: Governor %s not started(%d)\n", 1150 __func__, df->governor->name, ret); 1151 out: 1152 mutex_unlock(&devfreq_list_lock); 1153 1154 if (!ret) 1155 ret = count; 1156 return ret; 1157 } 1158 static DEVICE_ATTR_RW(governor); 1159 1160 static ssize_t available_governors_show(struct device *d, 1161 struct device_attribute *attr, 1162 char *buf) 1163 { 1164 struct devfreq *df = to_devfreq(d); 1165 ssize_t count = 0; 1166 1167 mutex_lock(&devfreq_list_lock); 1168 1169 /* 1170 * The devfreq with immutable governor (e.g., passive) shows 1171 * only own governor. 1172 */ 1173 if (df->governor->immutable) { 1174 count = scnprintf(&buf[count], DEVFREQ_NAME_LEN, 1175 "%s ", df->governor_name); 1176 /* 1177 * The devfreq device shows the registered governor except for 1178 * immutable governors such as passive governor . 1179 */ 1180 } else { 1181 struct devfreq_governor *governor; 1182 1183 list_for_each_entry(governor, &devfreq_governor_list, node) { 1184 if (governor->immutable) 1185 continue; 1186 count += scnprintf(&buf[count], (PAGE_SIZE - count - 2), 1187 "%s ", governor->name); 1188 } 1189 } 1190 1191 mutex_unlock(&devfreq_list_lock); 1192 1193 /* Truncate the trailing space */ 1194 if (count) 1195 count--; 1196 1197 count += sprintf(&buf[count], "\n"); 1198 1199 return count; 1200 } 1201 static DEVICE_ATTR_RO(available_governors); 1202 1203 static ssize_t cur_freq_show(struct device *dev, struct device_attribute *attr, 1204 char *buf) 1205 { 1206 unsigned long freq; 1207 struct devfreq *devfreq = to_devfreq(dev); 1208 1209 if (devfreq->profile->get_cur_freq && 1210 !devfreq->profile->get_cur_freq(devfreq->dev.parent, &freq)) 1211 return sprintf(buf, "%lu\n", freq); 1212 1213 return sprintf(buf, "%lu\n", devfreq->previous_freq); 1214 } 1215 static DEVICE_ATTR_RO(cur_freq); 1216 1217 static ssize_t target_freq_show(struct device *dev, 1218 struct device_attribute *attr, char *buf) 1219 { 1220 return sprintf(buf, "%lu\n", to_devfreq(dev)->previous_freq); 1221 } 1222 static DEVICE_ATTR_RO(target_freq); 1223 1224 static ssize_t polling_interval_show(struct device *dev, 1225 struct device_attribute *attr, char *buf) 1226 { 1227 return sprintf(buf, "%d\n", to_devfreq(dev)->profile->polling_ms); 1228 } 1229 1230 static ssize_t polling_interval_store(struct device *dev, 1231 struct device_attribute *attr, 1232 const char *buf, size_t count) 1233 { 1234 struct devfreq *df = to_devfreq(dev); 1235 unsigned int value; 1236 int ret; 1237 1238 if (!df->governor) 1239 return -EINVAL; 1240 1241 ret = sscanf(buf, "%u", &value); 1242 if (ret != 1) 1243 return -EINVAL; 1244 1245 df->governor->event_handler(df, DEVFREQ_GOV_INTERVAL, &value); 1246 ret = count; 1247 1248 return ret; 1249 } 1250 static DEVICE_ATTR_RW(polling_interval); 1251 1252 static ssize_t min_freq_store(struct device *dev, struct device_attribute *attr, 1253 const char *buf, size_t count) 1254 { 1255 struct devfreq *df = to_devfreq(dev); 1256 unsigned long value; 1257 int ret; 1258 1259 ret = sscanf(buf, "%lu", &value); 1260 if (ret != 1) 1261 return -EINVAL; 1262 1263 mutex_lock(&df->lock); 1264 1265 if (value) { 1266 if (value > df->max_freq) { 1267 ret = -EINVAL; 1268 goto unlock; 1269 } 1270 } else { 1271 unsigned long *freq_table = df->profile->freq_table; 1272 1273 /* Get minimum frequency according to sorting order */ 1274 if (freq_table[0] < freq_table[df->profile->max_state - 1]) 1275 value = freq_table[0]; 1276 else 1277 value = freq_table[df->profile->max_state - 1]; 1278 } 1279 1280 df->min_freq = value; 1281 update_devfreq(df); 1282 ret = count; 1283 unlock: 1284 mutex_unlock(&df->lock); 1285 return ret; 1286 } 1287 1288 static ssize_t min_freq_show(struct device *dev, struct device_attribute *attr, 1289 char *buf) 1290 { 1291 struct devfreq *df = to_devfreq(dev); 1292 1293 return sprintf(buf, "%lu\n", max(df->scaling_min_freq, df->min_freq)); 1294 } 1295 1296 static ssize_t max_freq_store(struct device *dev, struct device_attribute *attr, 1297 const char *buf, size_t count) 1298 { 1299 struct devfreq *df = to_devfreq(dev); 1300 unsigned long value; 1301 int ret; 1302 1303 ret = sscanf(buf, "%lu", &value); 1304 if (ret != 1) 1305 return -EINVAL; 1306 1307 mutex_lock(&df->lock); 1308 1309 if (value) { 1310 if (value < df->min_freq) { 1311 ret = -EINVAL; 1312 goto unlock; 1313 } 1314 } else { 1315 unsigned long *freq_table = df->profile->freq_table; 1316 1317 /* Get maximum frequency according to sorting order */ 1318 if (freq_table[0] < freq_table[df->profile->max_state - 1]) 1319 value = freq_table[df->profile->max_state - 1]; 1320 else 1321 value = freq_table[0]; 1322 } 1323 1324 df->max_freq = value; 1325 update_devfreq(df); 1326 ret = count; 1327 unlock: 1328 mutex_unlock(&df->lock); 1329 return ret; 1330 } 1331 static DEVICE_ATTR_RW(min_freq); 1332 1333 static ssize_t max_freq_show(struct device *dev, struct device_attribute *attr, 1334 char *buf) 1335 { 1336 struct devfreq *df = to_devfreq(dev); 1337 1338 return sprintf(buf, "%lu\n", min(df->scaling_max_freq, df->max_freq)); 1339 } 1340 static DEVICE_ATTR_RW(max_freq); 1341 1342 static ssize_t available_frequencies_show(struct device *d, 1343 struct device_attribute *attr, 1344 char *buf) 1345 { 1346 struct devfreq *df = to_devfreq(d); 1347 ssize_t count = 0; 1348 int i; 1349 1350 mutex_lock(&df->lock); 1351 1352 for (i = 0; i < df->profile->max_state; i++) 1353 count += scnprintf(&buf[count], (PAGE_SIZE - count - 2), 1354 "%lu ", df->profile->freq_table[i]); 1355 1356 mutex_unlock(&df->lock); 1357 /* Truncate the trailing space */ 1358 if (count) 1359 count--; 1360 1361 count += sprintf(&buf[count], "\n"); 1362 1363 return count; 1364 } 1365 static DEVICE_ATTR_RO(available_frequencies); 1366 1367 static ssize_t trans_stat_show(struct device *dev, 1368 struct device_attribute *attr, char *buf) 1369 { 1370 struct devfreq *devfreq = to_devfreq(dev); 1371 ssize_t len; 1372 int i, j; 1373 unsigned int max_state = devfreq->profile->max_state; 1374 1375 if (!devfreq->stop_polling && 1376 devfreq_update_status(devfreq, devfreq->previous_freq)) 1377 return 0; 1378 if (max_state == 0) 1379 return sprintf(buf, "Not Supported.\n"); 1380 1381 len = sprintf(buf, " From : To\n"); 1382 len += sprintf(buf + len, " :"); 1383 for (i = 0; i < max_state; i++) 1384 len += sprintf(buf + len, "%10lu", 1385 devfreq->profile->freq_table[i]); 1386 1387 len += sprintf(buf + len, " time(ms)\n"); 1388 1389 for (i = 0; i < max_state; i++) { 1390 if (devfreq->profile->freq_table[i] 1391 == devfreq->previous_freq) { 1392 len += sprintf(buf + len, "*"); 1393 } else { 1394 len += sprintf(buf + len, " "); 1395 } 1396 len += sprintf(buf + len, "%10lu:", 1397 devfreq->profile->freq_table[i]); 1398 for (j = 0; j < max_state; j++) 1399 len += sprintf(buf + len, "%10u", 1400 devfreq->trans_table[(i * max_state) + j]); 1401 len += sprintf(buf + len, "%10u\n", 1402 jiffies_to_msecs(devfreq->time_in_state[i])); 1403 } 1404 1405 len += sprintf(buf + len, "Total transition : %u\n", 1406 devfreq->total_trans); 1407 return len; 1408 } 1409 static DEVICE_ATTR_RO(trans_stat); 1410 1411 static struct attribute *devfreq_attrs[] = { 1412 &dev_attr_governor.attr, 1413 &dev_attr_available_governors.attr, 1414 &dev_attr_cur_freq.attr, 1415 &dev_attr_available_frequencies.attr, 1416 &dev_attr_target_freq.attr, 1417 &dev_attr_polling_interval.attr, 1418 &dev_attr_min_freq.attr, 1419 &dev_attr_max_freq.attr, 1420 &dev_attr_trans_stat.attr, 1421 NULL, 1422 }; 1423 ATTRIBUTE_GROUPS(devfreq); 1424 1425 static int __init devfreq_init(void) 1426 { 1427 devfreq_class = class_create(THIS_MODULE, "devfreq"); 1428 if (IS_ERR(devfreq_class)) { 1429 pr_err("%s: couldn't create class\n", __FILE__); 1430 return PTR_ERR(devfreq_class); 1431 } 1432 1433 devfreq_wq = create_freezable_workqueue("devfreq_wq"); 1434 if (!devfreq_wq) { 1435 class_destroy(devfreq_class); 1436 pr_err("%s: couldn't create workqueue\n", __FILE__); 1437 return -ENOMEM; 1438 } 1439 devfreq_class->dev_groups = devfreq_groups; 1440 1441 return 0; 1442 } 1443 subsys_initcall(devfreq_init); 1444 1445 /* 1446 * The following are helper functions for devfreq user device drivers with 1447 * OPP framework. 1448 */ 1449 1450 /** 1451 * devfreq_recommended_opp() - Helper function to get proper OPP for the 1452 * freq value given to target callback. 1453 * @dev: The devfreq user device. (parent of devfreq) 1454 * @freq: The frequency given to target function 1455 * @flags: Flags handed from devfreq framework. 1456 * 1457 * The callers are required to call dev_pm_opp_put() for the returned OPP after 1458 * use. 1459 */ 1460 struct dev_pm_opp *devfreq_recommended_opp(struct device *dev, 1461 unsigned long *freq, 1462 u32 flags) 1463 { 1464 struct dev_pm_opp *opp; 1465 1466 if (flags & DEVFREQ_FLAG_LEAST_UPPER_BOUND) { 1467 /* The freq is an upper bound. opp should be lower */ 1468 opp = dev_pm_opp_find_freq_floor(dev, freq); 1469 1470 /* If not available, use the closest opp */ 1471 if (opp == ERR_PTR(-ERANGE)) 1472 opp = dev_pm_opp_find_freq_ceil(dev, freq); 1473 } else { 1474 /* The freq is an lower bound. opp should be higher */ 1475 opp = dev_pm_opp_find_freq_ceil(dev, freq); 1476 1477 /* If not available, use the closest opp */ 1478 if (opp == ERR_PTR(-ERANGE)) 1479 opp = dev_pm_opp_find_freq_floor(dev, freq); 1480 } 1481 1482 return opp; 1483 } 1484 EXPORT_SYMBOL(devfreq_recommended_opp); 1485 1486 /** 1487 * devfreq_register_opp_notifier() - Helper function to get devfreq notified 1488 * for any changes in the OPP availability 1489 * changes 1490 * @dev: The devfreq user device. (parent of devfreq) 1491 * @devfreq: The devfreq object. 1492 */ 1493 int devfreq_register_opp_notifier(struct device *dev, struct devfreq *devfreq) 1494 { 1495 return dev_pm_opp_register_notifier(dev, &devfreq->nb); 1496 } 1497 EXPORT_SYMBOL(devfreq_register_opp_notifier); 1498 1499 /** 1500 * devfreq_unregister_opp_notifier() - Helper function to stop getting devfreq 1501 * notified for any changes in the OPP 1502 * availability changes anymore. 1503 * @dev: The devfreq user device. (parent of devfreq) 1504 * @devfreq: The devfreq object. 1505 * 1506 * At exit() callback of devfreq_dev_profile, this must be included if 1507 * devfreq_recommended_opp is used. 1508 */ 1509 int devfreq_unregister_opp_notifier(struct device *dev, struct devfreq *devfreq) 1510 { 1511 return dev_pm_opp_unregister_notifier(dev, &devfreq->nb); 1512 } 1513 EXPORT_SYMBOL(devfreq_unregister_opp_notifier); 1514 1515 static void devm_devfreq_opp_release(struct device *dev, void *res) 1516 { 1517 devfreq_unregister_opp_notifier(dev, *(struct devfreq **)res); 1518 } 1519 1520 /** 1521 * devm_ devfreq_register_opp_notifier() 1522 * - Resource-managed devfreq_register_opp_notifier() 1523 * @dev: The devfreq user device. (parent of devfreq) 1524 * @devfreq: The devfreq object. 1525 */ 1526 int devm_devfreq_register_opp_notifier(struct device *dev, 1527 struct devfreq *devfreq) 1528 { 1529 struct devfreq **ptr; 1530 int ret; 1531 1532 ptr = devres_alloc(devm_devfreq_opp_release, sizeof(*ptr), GFP_KERNEL); 1533 if (!ptr) 1534 return -ENOMEM; 1535 1536 ret = devfreq_register_opp_notifier(dev, devfreq); 1537 if (ret) { 1538 devres_free(ptr); 1539 return ret; 1540 } 1541 1542 *ptr = devfreq; 1543 devres_add(dev, ptr); 1544 1545 return 0; 1546 } 1547 EXPORT_SYMBOL(devm_devfreq_register_opp_notifier); 1548 1549 /** 1550 * devm_devfreq_unregister_opp_notifier() 1551 * - Resource-managed devfreq_unregister_opp_notifier() 1552 * @dev: The devfreq user device. (parent of devfreq) 1553 * @devfreq: The devfreq object. 1554 */ 1555 void devm_devfreq_unregister_opp_notifier(struct device *dev, 1556 struct devfreq *devfreq) 1557 { 1558 WARN_ON(devres_release(dev, devm_devfreq_opp_release, 1559 devm_devfreq_dev_match, devfreq)); 1560 } 1561 EXPORT_SYMBOL(devm_devfreq_unregister_opp_notifier); 1562 1563 /** 1564 * devfreq_register_notifier() - Register a driver with devfreq 1565 * @devfreq: The devfreq object. 1566 * @nb: The notifier block to register. 1567 * @list: DEVFREQ_TRANSITION_NOTIFIER. 1568 */ 1569 int devfreq_register_notifier(struct devfreq *devfreq, 1570 struct notifier_block *nb, 1571 unsigned int list) 1572 { 1573 int ret = 0; 1574 1575 if (!devfreq) 1576 return -EINVAL; 1577 1578 switch (list) { 1579 case DEVFREQ_TRANSITION_NOTIFIER: 1580 ret = srcu_notifier_chain_register( 1581 &devfreq->transition_notifier_list, nb); 1582 break; 1583 default: 1584 ret = -EINVAL; 1585 } 1586 1587 return ret; 1588 } 1589 EXPORT_SYMBOL(devfreq_register_notifier); 1590 1591 /* 1592 * devfreq_unregister_notifier() - Unregister a driver with devfreq 1593 * @devfreq: The devfreq object. 1594 * @nb: The notifier block to be unregistered. 1595 * @list: DEVFREQ_TRANSITION_NOTIFIER. 1596 */ 1597 int devfreq_unregister_notifier(struct devfreq *devfreq, 1598 struct notifier_block *nb, 1599 unsigned int list) 1600 { 1601 int ret = 0; 1602 1603 if (!devfreq) 1604 return -EINVAL; 1605 1606 switch (list) { 1607 case DEVFREQ_TRANSITION_NOTIFIER: 1608 ret = srcu_notifier_chain_unregister( 1609 &devfreq->transition_notifier_list, nb); 1610 break; 1611 default: 1612 ret = -EINVAL; 1613 } 1614 1615 return ret; 1616 } 1617 EXPORT_SYMBOL(devfreq_unregister_notifier); 1618 1619 struct devfreq_notifier_devres { 1620 struct devfreq *devfreq; 1621 struct notifier_block *nb; 1622 unsigned int list; 1623 }; 1624 1625 static void devm_devfreq_notifier_release(struct device *dev, void *res) 1626 { 1627 struct devfreq_notifier_devres *this = res; 1628 1629 devfreq_unregister_notifier(this->devfreq, this->nb, this->list); 1630 } 1631 1632 /** 1633 * devm_devfreq_register_notifier() 1634 - Resource-managed devfreq_register_notifier() 1635 * @dev: The devfreq user device. (parent of devfreq) 1636 * @devfreq: The devfreq object. 1637 * @nb: The notifier block to be unregistered. 1638 * @list: DEVFREQ_TRANSITION_NOTIFIER. 1639 */ 1640 int devm_devfreq_register_notifier(struct device *dev, 1641 struct devfreq *devfreq, 1642 struct notifier_block *nb, 1643 unsigned int list) 1644 { 1645 struct devfreq_notifier_devres *ptr; 1646 int ret; 1647 1648 ptr = devres_alloc(devm_devfreq_notifier_release, sizeof(*ptr), 1649 GFP_KERNEL); 1650 if (!ptr) 1651 return -ENOMEM; 1652 1653 ret = devfreq_register_notifier(devfreq, nb, list); 1654 if (ret) { 1655 devres_free(ptr); 1656 return ret; 1657 } 1658 1659 ptr->devfreq = devfreq; 1660 ptr->nb = nb; 1661 ptr->list = list; 1662 devres_add(dev, ptr); 1663 1664 return 0; 1665 } 1666 EXPORT_SYMBOL(devm_devfreq_register_notifier); 1667 1668 /** 1669 * devm_devfreq_unregister_notifier() 1670 - Resource-managed devfreq_unregister_notifier() 1671 * @dev: The devfreq user device. (parent of devfreq) 1672 * @devfreq: The devfreq object. 1673 * @nb: The notifier block to be unregistered. 1674 * @list: DEVFREQ_TRANSITION_NOTIFIER. 1675 */ 1676 void devm_devfreq_unregister_notifier(struct device *dev, 1677 struct devfreq *devfreq, 1678 struct notifier_block *nb, 1679 unsigned int list) 1680 { 1681 WARN_ON(devres_release(dev, devm_devfreq_notifier_release, 1682 devm_devfreq_dev_match, devfreq)); 1683 } 1684 EXPORT_SYMBOL(devm_devfreq_unregister_notifier); 1685