[media] tm6000: Properly count device usage
authorThierry Reding <thierry.reding@avionic-design.de>
Thu, 4 Aug 2011 07:14:11 +0000 (04:14 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 31 Aug 2011 20:20:23 +0000 (17:20 -0300)
When the USB device is disconnected, the device usage bit is not cleared
properly. This leads to errors when a device is unplugged and replugged
several times until all TM6000_MAXBOARDS bits are used and keeps the
driver from binding to the device.

Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/staging/tm6000/tm6000-cards.c

index f247e7e685f92c13d2bd873b38d9774678ca2d03..d2ee18ffd49fa17f818c0313a462bc7df88868b0 100644 (file)
@@ -1171,7 +1171,7 @@ static int tm6000_usb_probe(struct usb_interface *interface,
        mutex_init(&dev->usb_lock);
 
        /* Increment usage count */
-       tm6000_devused |= 1<<nr;
+       set_bit(nr, &tm6000_devused);
        snprintf(dev->name, 29, "tm6000 #%d", nr);
 
        dev->model = id->driver_info;
@@ -1287,7 +1287,7 @@ static int tm6000_usb_probe(struct usb_interface *interface,
 err:
        printk(KERN_ERR "tm6000: Error %d while registering\n", rc);
 
-       tm6000_devused &= ~(1<<nr);
+       clear_bit(nr, &tm6000_devused);
        usb_put_dev(usbdev);
 
        kfree(dev);
@@ -1345,6 +1345,7 @@ static void tm6000_usb_disconnect(struct usb_interface *interface)
        tm6000_close_extension(dev);
        tm6000_remove_from_devlist(dev);
 
+       clear_bit(dev->devno, &tm6000_devused);
        kfree(dev);
 }