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 <laurent.pinchart@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
@@ -791,7 +791,6 @@ static int tm6000_usb_probe(struct usb_interface *interface,
|
|||||||
if ((card[nr] >= 0) && (card[nr] < ARRAY_SIZE(tm6000_boards)))
|
if ((card[nr] >= 0) && (card[nr] < ARRAY_SIZE(tm6000_boards)))
|
||||||
dev->model = card[nr];
|
dev->model = card[nr];
|
||||||
|
|
||||||
INIT_LIST_HEAD(&dev->tm6000_corelist);
|
|
||||||
dev->udev = usbdev;
|
dev->udev = usbdev;
|
||||||
dev->devno = nr;
|
dev->devno = nr;
|
||||||
|
|
||||||
|
@@ -116,8 +116,6 @@ static struct tm6000_fmt format[] = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static LIST_HEAD(tm6000_corelist);
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------------
|
/* ------------------------------------------------------------------
|
||||||
DMA and thread functions
|
DMA and thread functions
|
||||||
------------------------------------------------------------------*/
|
------------------------------------------------------------------*/
|
||||||
@@ -1321,8 +1319,7 @@ static int tm6000_open(struct file *file)
|
|||||||
struct video_device *vdev = video_devdata(file);
|
struct video_device *vdev = video_devdata(file);
|
||||||
struct tm6000_core *dev = video_drvdata(file);
|
struct tm6000_core *dev = video_drvdata(file);
|
||||||
struct tm6000_fh *fh;
|
struct tm6000_fh *fh;
|
||||||
struct list_head *list;
|
enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||||
enum v4l2_buf_type type = 0;
|
|
||||||
int i,rc;
|
int i,rc;
|
||||||
|
|
||||||
printk(KERN_INFO "tm6000: open called (dev=%s)\n",
|
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",
|
dprintk(dev, V4L2_DEBUG_OPEN, "tm6000: open called (dev=%s)\n",
|
||||||
video_device_node_name(vdev));
|
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 */
|
/* If more than one user, mutex should be added */
|
||||||
dev->users++;
|
dev->users++;
|
||||||
@@ -1533,8 +1520,6 @@ int tm6000_v4l2_register(struct tm6000_core *dev)
|
|||||||
}
|
}
|
||||||
dev->vfd = vfd;
|
dev->vfd = vfd;
|
||||||
|
|
||||||
list_add_tail(&dev->tm6000_corelist,&tm6000_corelist);
|
|
||||||
|
|
||||||
/* init video dma queues */
|
/* init video dma queues */
|
||||||
INIT_LIST_HEAD(&dev->vidq.active);
|
INIT_LIST_HEAD(&dev->vidq.active);
|
||||||
INIT_LIST_HEAD(&dev->vidq.queued);
|
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)));
|
memcpy (dev->vfd, &tm6000_template, sizeof(*(dev->vfd)));
|
||||||
dev->vfd->debug=tm6000_debug;
|
dev->vfd->debug=tm6000_debug;
|
||||||
vfd->v4l2_dev = &dev->v4l2_dev;
|
vfd->v4l2_dev = &dev->v4l2_dev;
|
||||||
|
video_set_drvdata(vfd, dev);
|
||||||
|
|
||||||
ret = video_register_device(dev->vfd, VFL_TYPE_GRABBER, video_nr);
|
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);
|
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)
|
int tm6000_v4l2_unregister(struct tm6000_core *dev)
|
||||||
{
|
{
|
||||||
struct tm6000_core *h;
|
|
||||||
struct list_head *pos, *tmp;
|
|
||||||
|
|
||||||
video_unregister_device(dev->vfd);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -169,7 +169,6 @@ struct tm6000_core {
|
|||||||
struct i2c_client i2c_client;
|
struct i2c_client i2c_client;
|
||||||
|
|
||||||
/* video for linux */
|
/* video for linux */
|
||||||
struct list_head tm6000_corelist;
|
|
||||||
int users;
|
int users;
|
||||||
|
|
||||||
/* various device info */
|
/* various device info */
|
||||||
|
Reference in New Issue
Block a user