Commit 3663def0 authored by Michel Ludwig's avatar Michel Ludwig Committed by Mauro Carvalho Chehab

V4L/DVB (12772): tm6000: fix module load/unload

Signed-off-by: default avatarMichel Ludwig <michel.ludwig@gmail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 71f32267
...@@ -230,6 +230,7 @@ static int tm6000_usb_probe(struct usb_interface *interface, ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment