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 17struct cpuidle_driver *cpuidle_curr_driver; 18DEFINE_SPINLOCK(cpuidle_driver_lock); 19 20/** 21 * cpuidle_register_driver - registers a driver 22 * @drv: the driver 23 */ 24int 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 40EXPORT_SYMBOL_GPL(cpuidle_register_driver); 41 42/** 43 * cpuidle_unregister_driver - unregisters a driver 44 * @drv: the driver 45 */ 46void 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 56EXPORT_SYMBOL_GPL(cpuidle_unregister_driver); 57