driver.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /*
  2. * driver.c - driver support
  3. *
  4. * (C) 2006-2007 Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
  5. * Shaohua Li <shaohua.li@intel.com>
  6. * Adam Belay <abelay@novell.com>
  7. *
  8. * This code is licenced under the GPL.
  9. */
  10. #include <linux/mutex.h>
  11. #include <linux/module.h>
  12. #include <linux/cpuidle.h>
  13. #include "cpuidle.h"
  14. struct cpuidle_driver *cpuidle_curr_driver;
  15. DEFINE_SPINLOCK(cpuidle_driver_lock);
  16. /**
  17. * cpuidle_register_driver - registers a driver
  18. * @drv: the driver
  19. */
  20. int cpuidle_register_driver(struct cpuidle_driver *drv)
  21. {
  22. if (!drv)
  23. return -EINVAL;
  24. spin_lock(&cpuidle_driver_lock);
  25. if (cpuidle_curr_driver) {
  26. spin_unlock(&cpuidle_driver_lock);
  27. return -EBUSY;
  28. }
  29. cpuidle_curr_driver = drv;
  30. spin_unlock(&cpuidle_driver_lock);
  31. return 0;
  32. }
  33. EXPORT_SYMBOL_GPL(cpuidle_register_driver);
  34. /**
  35. * cpuidle_unregister_driver - unregisters a driver
  36. * @drv: the driver
  37. */
  38. void cpuidle_unregister_driver(struct cpuidle_driver *drv)
  39. {
  40. if (!drv)
  41. return;
  42. spin_lock(&cpuidle_driver_lock);
  43. cpuidle_curr_driver = NULL;
  44. spin_unlock(&cpuidle_driver_lock);
  45. }
  46. EXPORT_SYMBOL_GPL(cpuidle_unregister_driver);