mutex_unlock(&clockevents_mutex);
        return ret;
  }
- EXPORT_SYMBOL_GPL(clockevents_unbind);
+ EXPORT_SYMBOL_GPL(clockevents_unbind_device);
  
 +/* Sanity check of state transition callbacks */
 +static int clockevents_sanity_check(struct clock_event_device *dev)
 +{
 +      /* Legacy set_mode() callback */
 +      if (dev->set_mode) {
 +              /* We shouldn't be supporting new modes now */
 +              WARN_ON(dev->set_state_periodic || dev->set_state_oneshot ||
 +                      dev->set_state_shutdown || dev->tick_resume);
 +
 +              BUG_ON(dev->mode != CLOCK_EVT_MODE_UNUSED);
 +              return 0;
 +      }
 +
 +      if (dev->features & CLOCK_EVT_FEAT_DUMMY)
 +              return 0;
 +
 +      /* New state-specific callbacks */
 +      if (!dev->set_state_shutdown)
 +              return -EINVAL;
 +
 +      if ((dev->features & CLOCK_EVT_FEAT_PERIODIC) &&
 +          !dev->set_state_periodic)
 +              return -EINVAL;
 +
 +      if ((dev->features & CLOCK_EVT_FEAT_ONESHOT) &&
 +          !dev->set_state_oneshot)
 +              return -EINVAL;
 +
 +      return 0;
 +}
 +
  /**
   * clockevents_register_device - register a clock event device
   * @dev:      device to register