governor_performance.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*
  2. * linux/drivers/devfreq/governor_performance.c
  3. *
  4. * Copyright (C) 2011 Samsung Electronics
  5. * MyungJoo Ham <myungjoo.ham@samsung.com>
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License version 2 as
  9. * published by the Free Software Foundation.
  10. */
  11. #include <linux/devfreq.h>
  12. #include "governor.h"
  13. static int devfreq_performance_func(struct devfreq *df,
  14. unsigned long *freq)
  15. {
  16. /*
  17. * target callback should be able to get floor value as
  18. * said in devfreq.h
  19. */
  20. if (!df->max_freq)
  21. *freq = UINT_MAX;
  22. else
  23. *freq = df->max_freq;
  24. return 0;
  25. }
  26. static int devfreq_performance_handler(struct devfreq *devfreq,
  27. unsigned int event, void *data)
  28. {
  29. int ret = 0;
  30. if (event == DEVFREQ_GOV_START) {
  31. mutex_lock(&devfreq->lock);
  32. ret = update_devfreq(devfreq);
  33. mutex_unlock(&devfreq->lock);
  34. }
  35. return ret;
  36. }
  37. static struct devfreq_governor devfreq_performance = {
  38. .name = "performance",
  39. .get_target_freq = devfreq_performance_func,
  40. .event_handler = devfreq_performance_handler,
  41. };
  42. static int __init devfreq_performance_init(void)
  43. {
  44. return devfreq_add_governor(&devfreq_performance);
  45. }
  46. subsys_initcall(devfreq_performance_init);
  47. static void __exit devfreq_performance_exit(void)
  48. {
  49. int ret;
  50. ret = devfreq_remove_governor(&devfreq_performance);
  51. if (ret)
  52. pr_err("%s: failed remove governor %d\n", __func__, ret);
  53. return;
  54. }
  55. module_exit(devfreq_performance_exit);