]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/char/tpm/tpm.c
[PATCH] remove many unneeded #includes of sched.h
[net-next-2.6.git] / drivers / char / tpm / tpm.c
index 6e1329d404d201ce50f5ff981fede21cbf317d95..e5a254a434f8345696c806b35a8d4b2539ed44fe 100644 (file)
@@ -23,7 +23,6 @@
  *
  */
 
-#include <linux/sched.h>
 #include <linux/poll.h>
 #include <linux/spinlock.h>
 #include "tpm.h"
@@ -325,9 +324,9 @@ static void user_reader_timeout(unsigned long ptr)
        schedule_work(&chip->work);
 }
 
-static void timeout_work(void *ptr)
+static void timeout_work(struct work_struct *work)
 {
-       struct tpm_chip *chip = ptr;
+       struct tpm_chip *chip = container_of(work, struct tpm_chip, work);
 
        down(&chip->buffer_mutex);
        atomic_set(&chip->data_pending, 0);
@@ -1105,11 +1104,10 @@ struct tpm_chip *tpm_register_hardware(struct device *dev, const struct tpm_vend
        init_MUTEX(&chip->tpm_mutex);
        INIT_LIST_HEAD(&chip->list);
 
-       INIT_WORK(&chip->work, timeout_work, chip);
+       INIT_WORK(&chip->work, timeout_work);
 
-       init_timer(&chip->user_read_timer);
-       chip->user_read_timer.function = user_reader_timeout;
-       chip->user_read_timer.data = (unsigned long) chip;
+       setup_timer(&chip->user_read_timer, user_reader_timeout,
+                       (unsigned long)chip);
 
        memcpy(&chip->vendor, entry, sizeof(struct tpm_vendor_specific));
 
@@ -1155,6 +1153,7 @@ struct tpm_chip *tpm_register_hardware(struct device *dev, const struct tpm_vend
 
        if (sysfs_create_group(&dev->kobj, chip->vendor.attr_group)) {
                list_del(&chip->list);
+               misc_deregister(&chip->vendor.miscdev);
                put_device(dev);
                clear_bit(chip->dev_num, dev_mask);
                kfree(chip);