[PATCH] USB: convert a bunch of USB semaphores to mutexes
[linux-2.6-block.git] / drivers / usb / misc / idmouse.c
index 1dc3e0f73014eeb5efad58cb58193972738ed98e..d0b167256699dd07c56cbd6539da65075c9d47ff 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/module.h>
 #include <linux/smp_lock.h>
 #include <linux/completion.h>
+#include <linux/mutex.h>
 #include <asm/uaccess.h>
 #include <linux/usb.h>
 
@@ -114,7 +115,6 @@ static struct usb_class_driver idmouse_class = {
 
 /* usb specific object needed to register this driver with the usb subsystem */
 static struct usb_driver idmouse_driver = {
-       .owner = THIS_MODULE,
        .name = DRIVER_SHORT,
        .probe = idmouse_probe,
        .disconnect = idmouse_disconnect,
@@ -122,7 +122,7 @@ static struct usb_driver idmouse_driver = {
 };
 
 /* prevent races between open() and disconnect() */
-static DECLARE_MUTEX(disconnect_sem);
+static DEFINE_MUTEX(disconnect_mutex);
 
 static int idmouse_create_image(struct usb_idmouse *dev)
 {
@@ -214,18 +214,18 @@ static int idmouse_open(struct inode *inode, struct file *file)
        int result = 0;
 
        /* prevent disconnects */
-       down(&disconnect_sem);
+       mutex_lock(&disconnect_mutex);
 
        /* get the interface from minor number and driver information */
        interface = usb_find_interface (&idmouse_driver, iminor (inode));
        if (!interface) {
-               up(&disconnect_sem);
+               mutex_unlock(&disconnect_mutex);
                return -ENODEV;
        }
        /* get the device information block from the interface */
        dev = usb_get_intfdata(interface);
        if (!dev) {
-               up(&disconnect_sem);
+               mutex_unlock(&disconnect_mutex);
                return -ENODEV;
        }
 
@@ -259,7 +259,7 @@ error:
        up(&dev->sem);
 
        /* unlock the disconnect semaphore */
-       up(&disconnect_sem);
+       mutex_unlock(&disconnect_mutex);
        return result;
 }
 
@@ -268,12 +268,12 @@ static int idmouse_release(struct inode *inode, struct file *file)
        struct usb_idmouse *dev;
 
        /* prevent a race condition with open() */
-       down(&disconnect_sem);
+       mutex_lock(&disconnect_mutex);
 
        dev = (struct usb_idmouse *) file->private_data;
 
        if (dev == NULL) {
-               up(&disconnect_sem);
+               mutex_unlock(&disconnect_mutex);
                return -ENODEV;
        }
 
@@ -283,7 +283,7 @@ static int idmouse_release(struct inode *inode, struct file *file)
        /* are we really open? */
        if (dev->open <= 0) {
                up(&dev->sem);
-               up(&disconnect_sem);
+               mutex_unlock(&disconnect_mutex);
                return -ENODEV;
        }
 
@@ -293,12 +293,12 @@ static int idmouse_release(struct inode *inode, struct file *file)
                /* the device was unplugged before the file was released */
                up(&dev->sem);
                idmouse_delete(dev);
-               up(&disconnect_sem);
+               mutex_unlock(&disconnect_mutex);
                return 0;
        }
 
        up(&dev->sem);
-       up(&disconnect_sem);
+       mutex_unlock(&disconnect_mutex);
        return 0;
 }
 
@@ -341,10 +341,9 @@ static int idmouse_probe(struct usb_interface *interface,
                return -ENODEV;
 
        /* allocate memory for our device state and initialize it */
-       dev = kmalloc(sizeof(*dev), GFP_KERNEL);
+       dev = kzalloc(sizeof(*dev), GFP_KERNEL);
        if (dev == NULL)
                return -ENOMEM;
-       memset(dev, 0x00, sizeof(*dev));
 
        init_MUTEX(&dev->sem);
        dev->udev = udev;
@@ -401,7 +400,7 @@ static void idmouse_disconnect(struct usb_interface *interface)
        struct usb_idmouse *dev;
 
        /* prevent races with open() */
-       down(&disconnect_sem);
+       mutex_lock(&disconnect_mutex);
 
        /* get device structure */
        dev = usb_get_intfdata(interface);
@@ -423,7 +422,7 @@ static void idmouse_disconnect(struct usb_interface *interface)
        if (!dev->open)
                idmouse_delete(dev);
 
-       up(&disconnect_sem);
+       mutex_unlock(&disconnect_mutex);
 
        info("%s disconnected", DRIVER_DESC);
 }