| Len Brown | 4f86d3a | 2007-10-03 18:58:00 -0400 | [diff] [blame] | 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 |  | 
|  | 11 | #include <linux/mutex.h> | 
|  | 12 | #include <linux/module.h> | 
|  | 13 | #include <linux/cpuidle.h> | 
|  | 14 |  | 
|  | 15 | #include "cpuidle.h" | 
|  | 16 |  | 
|  | 17 | struct cpuidle_driver *cpuidle_curr_driver; | 
|  | 18 | DEFINE_SPINLOCK(cpuidle_driver_lock); | 
|  | 19 |  | 
|  | 20 | /** | 
|  | 21 | * cpuidle_register_driver - registers a driver | 
|  | 22 | * @drv: the driver | 
|  | 23 | */ | 
|  | 24 | int cpuidle_register_driver(struct cpuidle_driver *drv) | 
|  | 25 | { | 
|  | 26 | if (!drv) | 
|  | 27 | return -EINVAL; | 
|  | 28 |  | 
|  | 29 | spin_lock(&cpuidle_driver_lock); | 
|  | 30 | if (cpuidle_curr_driver) { | 
|  | 31 | spin_unlock(&cpuidle_driver_lock); | 
|  | 32 | return -EBUSY; | 
|  | 33 | } | 
|  | 34 | cpuidle_curr_driver = drv; | 
|  | 35 | spin_unlock(&cpuidle_driver_lock); | 
|  | 36 |  | 
|  | 37 | return 0; | 
|  | 38 | } | 
|  | 39 |  | 
|  | 40 | EXPORT_SYMBOL_GPL(cpuidle_register_driver); | 
|  | 41 |  | 
|  | 42 | /** | 
|  | 43 | * cpuidle_unregister_driver - unregisters a driver | 
|  | 44 | * @drv: the driver | 
|  | 45 | */ | 
|  | 46 | void cpuidle_unregister_driver(struct cpuidle_driver *drv) | 
|  | 47 | { | 
|  | 48 | if (!drv) | 
|  | 49 | return; | 
|  | 50 |  | 
|  | 51 | spin_lock(&cpuidle_driver_lock); | 
|  | 52 | cpuidle_curr_driver = NULL; | 
|  | 53 | spin_unlock(&cpuidle_driver_lock); | 
|  | 54 | } | 
|  | 55 |  | 
|  | 56 | EXPORT_SYMBOL_GPL(cpuidle_unregister_driver); |