From e8d0416796d43a950ec7b65629e53419b2e22453 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Tue, 18 May 2010 04:27:27 -0300 Subject: [PATCH] V4L/DVB (13554a): v4l: Use the video_drvdata function in drivers Fix all device drivers to use the video_drvdata function instead of maintaining a local list of minor to private data mappings. Call video_set_drvdata to register the driver private pointer when not already done. Where applicable, the local list of mappings is completely removed when it becomes unused. [mchehab.redhat.com: patch broke into two. This one changes just tm6000] Signed-off-by: Laurent Pinchart Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-cards.c | 1 - drivers/staging/tm6000/tm6000-video.c | 28 ++------------------------- drivers/staging/tm6000/tm6000.h | 1 - 3 files changed, 2 insertions(+), 28 deletions(-) diff --git a/drivers/staging/tm6000/tm6000-cards.c b/drivers/staging/tm6000/tm6000-cards.c index 160b4d714898..6143e20d139d 100644 --- a/drivers/staging/tm6000/tm6000-cards.c +++ b/drivers/staging/tm6000/tm6000-cards.c @@ -791,7 +791,6 @@ static int tm6000_usb_probe(struct usb_interface *interface, if ((card[nr] >= 0) && (card[nr] < ARRAY_SIZE(tm6000_boards))) dev->model = card[nr]; - INIT_LIST_HEAD(&dev->tm6000_corelist); dev->udev = usbdev; dev->devno = nr; diff --git a/drivers/staging/tm6000/tm6000-video.c b/drivers/staging/tm6000/tm6000-video.c index 7828030c4f33..f2b7fe4a3581 100644 --- a/drivers/staging/tm6000/tm6000-video.c +++ b/drivers/staging/tm6000/tm6000-video.c @@ -116,8 +116,6 @@ static struct tm6000_fmt format[] = { } }; -static LIST_HEAD(tm6000_corelist); - /* ------------------------------------------------------------------ DMA and thread functions ------------------------------------------------------------------*/ @@ -1321,8 +1319,7 @@ static int tm6000_open(struct file *file) struct video_device *vdev = video_devdata(file); struct tm6000_core *dev = video_drvdata(file); struct tm6000_fh *fh; - struct list_head *list; - enum v4l2_buf_type type = 0; + enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE; int i,rc; printk(KERN_INFO "tm6000: open called (dev=%s)\n", @@ -1331,16 +1328,6 @@ static int tm6000_open(struct file *file) dprintk(dev, V4L2_DEBUG_OPEN, "tm6000: open called (dev=%s)\n", video_device_node_name(vdev)); - list_for_each(list,&tm6000_corelist) { - h = list_entry(list, struct tm6000_core, tm6000_corelist); - if (h->vfd->minor == minor) { - dev = h; - type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - } - } - if (NULL == dev) - return -ENODEV; - /* If more than one user, mutex should be added */ dev->users++; @@ -1533,8 +1520,6 @@ int tm6000_v4l2_register(struct tm6000_core *dev) } dev->vfd = vfd; - list_add_tail(&dev->tm6000_corelist,&tm6000_corelist); - /* init video dma queues */ INIT_LIST_HEAD(&dev->vidq.active); INIT_LIST_HEAD(&dev->vidq.queued); @@ -1542,6 +1527,7 @@ int tm6000_v4l2_register(struct tm6000_core *dev) memcpy (dev->vfd, &tm6000_template, sizeof(*(dev->vfd))); dev->vfd->debug=tm6000_debug; vfd->v4l2_dev = &dev->v4l2_dev; + video_set_drvdata(vfd, dev); ret = video_register_device(dev->vfd, VFL_TYPE_GRABBER, video_nr); printk(KERN_INFO "Trident TVMaster TM5600/TM6000/TM6010 USB2 board (Load status: %d)\n", ret); @@ -1550,18 +1536,8 @@ int tm6000_v4l2_register(struct tm6000_core *dev) int tm6000_v4l2_unregister(struct tm6000_core *dev) { - struct tm6000_core *h; - struct list_head *pos, *tmp; - video_unregister_device(dev->vfd); - list_for_each_safe(pos, tmp, &tm6000_corelist) { - h = list_entry(pos, struct tm6000_core, tm6000_corelist); - if (h == dev) { - list_del(pos); - } - } - return 0; } diff --git a/drivers/staging/tm6000/tm6000.h b/drivers/staging/tm6000/tm6000.h index b49c139c6b55..6812d6867d57 100644 --- a/drivers/staging/tm6000/tm6000.h +++ b/drivers/staging/tm6000/tm6000.h @@ -169,7 +169,6 @@ struct tm6000_core { struct i2c_client i2c_client; /* video for linux */ - struct list_head tm6000_corelist; int users; /* various device info */