V4L/DVB (12772): tm6000: fix module load/unload
Signed-off-by: Michel Ludwig <michel.ludwig@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
9701dc94a1
commit
22927e8e00
|
@ -230,6 +230,7 @@ static int tm6000_usb_probe(struct usb_interface *interface,
|
||||||
/* Increment usage count */
|
/* Increment usage count */
|
||||||
tm6000_devused|=1<<nr;
|
tm6000_devused|=1<<nr;
|
||||||
|
|
||||||
|
INIT_LIST_HEAD(&dev->tm6000_corelist);
|
||||||
dev->udev= usbdev;
|
dev->udev= usbdev;
|
||||||
dev->model=id->driver_info;
|
dev->model=id->driver_info;
|
||||||
snprintf(dev->name, 29, "tm6000 #%d", nr);
|
snprintf(dev->name, 29, "tm6000 #%d", nr);
|
||||||
|
@ -354,8 +355,6 @@ static void tm6000_usb_disconnect(struct usb_interface *interface)
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
tm6000_i2c_unregister(dev);
|
|
||||||
|
|
||||||
printk("tm6000: disconnecting %s\n", dev->name);
|
printk("tm6000: disconnecting %s\n", dev->name);
|
||||||
|
|
||||||
mutex_lock(&dev->lock);
|
mutex_lock(&dev->lock);
|
||||||
|
@ -369,6 +368,7 @@ static void tm6000_usb_disconnect(struct usb_interface *interface)
|
||||||
dev->state |= DEV_DISCONNECTED;
|
dev->state |= DEV_DISCONNECTED;
|
||||||
|
|
||||||
mutex_unlock(&dev->lock);
|
mutex_unlock(&dev->lock);
|
||||||
|
kfree(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct usb_driver tm6000_usb_driver = {
|
static struct usb_driver tm6000_usb_driver = {
|
||||||
|
|
|
@ -1528,15 +1528,14 @@ int tm6000_v4l2_register(struct tm6000_core *dev)
|
||||||
int tm6000_v4l2_unregister(struct tm6000_core *dev)
|
int tm6000_v4l2_unregister(struct tm6000_core *dev)
|
||||||
{
|
{
|
||||||
struct tm6000_core *h;
|
struct tm6000_core *h;
|
||||||
struct list_head *list;
|
struct list_head *pos, *tmp;
|
||||||
|
|
||||||
while (!list_empty(&tm6000_corelist)) {
|
video_unregister_device(&dev->vfd);
|
||||||
list = tm6000_corelist.next;
|
|
||||||
h = list_entry(list, struct tm6000_core, tm6000_corelist);
|
list_for_each_safe(pos, tmp, &tm6000_corelist) {
|
||||||
|
h = list_entry(pos, struct tm6000_core, tm6000_corelist);
|
||||||
if (h == dev) {
|
if (h == dev) {
|
||||||
video_unregister_device(&dev->vfd);
|
|
||||||
list_del(list);
|
list_del(list);
|
||||||
kfree (h);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue