Skip to content

Commit

Permalink
[media] tm6000: rework init code
Browse files Browse the repository at this point in the history
Rework device init part. Move common code part to a function.
Usefull for register multiple devices like video, radio, vbi etc.

Signed-off-by: Beholder Intl. Ltd. Dmitry Belimov <d.belimov@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Dmitri Belimov authored and Mauro Carvalho Chehab committed Jan 19, 2011
1 parent 2400982 commit 3c61be4
Showing 1 changed file with 36 additions and 10 deletions.
46 changes: 36 additions & 10 deletions drivers/staging/tm6000/tm6000-video.c
Original file line number Diff line number Diff line change
Expand Up @@ -1450,29 +1450,55 @@ static struct video_device tm6000_template = {
* ------------------------------------------------------------------
*/

int tm6000_v4l2_register(struct tm6000_core *dev)
static struct video_device *vdev_init(struct tm6000_core *dev,
const struct video_device
*template, const char *type_name)
{
int ret = -1;
struct video_device *vfd;

vfd = video_device_alloc();
if(!vfd) {
if (NULL == vfd)
return NULL;

*vfd = *template;
vfd->v4l2_dev = &dev->v4l2_dev;
vfd->release = video_device_release;
vfd->debug = tm6000_debug;
vfd->lock = &dev->lock;

snprintf(vfd->name, sizeof(vfd->name), "%s %s", dev->name, type_name);

video_set_drvdata(vfd, dev);
return vfd;
}

int tm6000_v4l2_register(struct tm6000_core *dev)
{
int ret = -1;

dev->vfd = vdev_init(dev, &tm6000_template, "video");

if (!dev->vfd) {
printk(KERN_INFO "%s: can't register video device\n",
dev->name);
return -ENOMEM;
}
dev->vfd = vfd;

/* init video dma queues */
INIT_LIST_HEAD(&dev->vidq.active);
INIT_LIST_HEAD(&dev->vidq.queued);

memcpy(dev->vfd, &tm6000_template, sizeof(*(dev->vfd)));
dev->vfd->debug = tm6000_debug;
dev->vfd->lock = &dev->lock;
ret = video_register_device(dev->vfd, VFL_TYPE_GRABBER, video_nr);

vfd->v4l2_dev = &dev->v4l2_dev;
video_set_drvdata(vfd, dev);
if (ret < 0) {
printk(KERN_INFO "%s: can't register video device\n",
dev->name);
return ret;
}

printk(KERN_INFO "%s: registered device %s\n",
dev->name, video_device_node_name(dev->vfd));

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);
return ret;
}
Expand Down

0 comments on commit 3c61be4

Please sign in to comment.