Commit | Line | Data |
---|---|---|
4f86d3a8 LB |
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); |