[media] tm6000: Properly count device usage

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>
This commit is contained in:
Thierry Reding 2011-08-04 04:14:11 -03:00 коммит произвёл Mauro Carvalho Chehab
Родитель fc4eab2cba
Коммит 6f2e77bb95
1 изменённых файлов: 3 добавлений и 2 удалений

Просмотреть файл

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