diff options
author | Dmitri Belimov <d.belimov@gmail.com> | 2011-01-12 22:46:07 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-01-19 08:45:58 -0500 |
commit | 3c61be446ae5c26e2829d37c6b5d02d3af536024 (patch) | |
tree | f8526535c2c85c76a6b8253640100944c6863f86 /drivers | |
parent | 2400982a2e8a8e4e95f0a0e1517bbe63cc88038f (diff) |
[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: Beholder Intl. Ltd. Dmitry Belimov <d.belimov@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/staging/tm6000/tm6000-video.c | 46 |
1 files changed, 36 insertions, 10 deletions
diff --git a/drivers/staging/tm6000/tm6000-video.c b/drivers/staging/tm6000/tm6000-video.c index 8fe017c3721f..eb9b9f1bc138 100644 --- a/drivers/staging/tm6000/tm6000-video.c +++ b/drivers/staging/tm6000/tm6000-video.c | |||
@@ -1450,29 +1450,55 @@ static struct video_device tm6000_template = { | |||
1450 | * ------------------------------------------------------------------ | 1450 | * ------------------------------------------------------------------ |
1451 | */ | 1451 | */ |
1452 | 1452 | ||
1453 | int tm6000_v4l2_register(struct tm6000_core *dev) | 1453 | static struct video_device *vdev_init(struct tm6000_core *dev, |
1454 | const struct video_device | ||
1455 | *template, const char *type_name) | ||
1454 | { | 1456 | { |
1455 | int ret = -1; | ||
1456 | struct video_device *vfd; | 1457 | struct video_device *vfd; |
1457 | 1458 | ||
1458 | vfd = video_device_alloc(); | 1459 | vfd = video_device_alloc(); |
1459 | if(!vfd) { | 1460 | if (NULL == vfd) |
1461 | return NULL; | ||
1462 | |||
1463 | *vfd = *template; | ||
1464 | vfd->v4l2_dev = &dev->v4l2_dev; | ||
1465 | vfd->release = video_device_release; | ||
1466 | vfd->debug = tm6000_debug; | ||
1467 | vfd->lock = &dev->lock; | ||
1468 | |||
1469 | snprintf(vfd->name, sizeof(vfd->name), "%s %s", dev->name, type_name); | ||
1470 | |||
1471 | video_set_drvdata(vfd, dev); | ||
1472 | return vfd; | ||
1473 | } | ||
1474 | |||
1475 | int tm6000_v4l2_register(struct tm6000_core *dev) | ||
1476 | { | ||
1477 | int ret = -1; | ||
1478 | |||
1479 | dev->vfd = vdev_init(dev, &tm6000_template, "video"); | ||
1480 | |||
1481 | if (!dev->vfd) { | ||
1482 | printk(KERN_INFO "%s: can't register video device\n", | ||
1483 | dev->name); | ||
1460 | return -ENOMEM; | 1484 | return -ENOMEM; |
1461 | } | 1485 | } |
1462 | dev->vfd = vfd; | ||
1463 | 1486 | ||
1464 | /* init video dma queues */ | 1487 | /* init video dma queues */ |
1465 | INIT_LIST_HEAD(&dev->vidq.active); | 1488 | INIT_LIST_HEAD(&dev->vidq.active); |
1466 | INIT_LIST_HEAD(&dev->vidq.queued); | 1489 | INIT_LIST_HEAD(&dev->vidq.queued); |
1467 | 1490 | ||
1468 | memcpy(dev->vfd, &tm6000_template, sizeof(*(dev->vfd))); | 1491 | ret = video_register_device(dev->vfd, VFL_TYPE_GRABBER, video_nr); |
1469 | dev->vfd->debug = tm6000_debug; | ||
1470 | dev->vfd->lock = &dev->lock; | ||
1471 | 1492 | ||
1472 | vfd->v4l2_dev = &dev->v4l2_dev; | 1493 | if (ret < 0) { |
1473 | video_set_drvdata(vfd, dev); | 1494 | printk(KERN_INFO "%s: can't register video device\n", |
1495 | dev->name); | ||
1496 | return ret; | ||
1497 | } | ||
1498 | |||
1499 | printk(KERN_INFO "%s: registered device %s\n", | ||
1500 | dev->name, video_device_node_name(dev->vfd)); | ||
1474 | 1501 | ||
1475 | ret = video_register_device(dev->vfd, VFL_TYPE_GRABBER, video_nr); | ||
1476 | printk(KERN_INFO "Trident TVMaster TM5600/TM6000/TM6010 USB2 board (Load status: %d)\n", ret); | 1502 | printk(KERN_INFO "Trident TVMaster TM5600/TM6000/TM6010 USB2 board (Load status: %d)\n", ret); |
1477 | return ret; | 1503 | return ret; |
1478 | } | 1504 | } |