Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c61be44 authored by Dmitri Belimov's avatar Dmitri Belimov Committed by Mauro Carvalho Chehab
Browse files

[media] tm6000: rework init code



Rework device init part. Move common code part to a function.
Usefull for register multiple devices like video, radio, vbi etc.

Signed-off-by: default avatarBeholder Intl. Ltd. Dmitry Belimov <d.belimov@gmail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 2400982a
Loading
Loading
Loading
Loading
+36 −10
Original line number Diff line number Diff line
@@ -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;
}