linux/drivers/cpuidle/driver.c
<<
>>
Prefs
   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