V4L/DVB (12746): em28xx: do not create /dev/vbiX device if VBI not supported
authorDevin Heitmueller <dheitmueller@kernellabs.com>
Fri, 11 Sep 2009 03:01:06 +0000 (00:01 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 19 Sep 2009 02:47:43 +0000 (23:47 -0300)
Do not create the VBI device in cases where VBI is not supported on the target
em28xx chip.

This work was sponsored by EyeMagnet Limited.

Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/em28xx/em28xx-core.c
drivers/media/video/em28xx/em28xx-video.c

index 3128b7fce07d60ad699340a004321ee5ced8367f..a88257a7d94ffeaee476669a8ddd154d4ddcc12b 100644 (file)
@@ -1131,7 +1131,7 @@ struct em28xx *em28xx_get_device(int minor,
        list_for_each_entry(h, &em28xx_devlist, devlist) {
                if (h->vdev->minor == minor)
                        dev = h;
-               if (h->vbi_dev->minor == minor) {
+               if (h->vbi_dev && h->vbi_dev->minor == minor) {
                        dev = h;
                        *fh_type = V4L2_BUF_TYPE_VBI_CAPTURE;
                }
index dda4a76dcabaa79912f385fdbc8936c8e17f2f6c..a5632c7e6438226d4a0bfdf2a3ddd6b43184fda4 100644 (file)
@@ -2504,14 +2504,17 @@ int em28xx_register_analog_devices(struct em28xx *dev)
        }
 
        /* Allocate and fill vbi video_device struct */
-       dev->vbi_dev = em28xx_vdev_init(dev, &em28xx_video_template, "vbi");
+       if (em28xx_vbi_supported(dev) == 1) {
+               dev->vbi_dev = em28xx_vdev_init(dev, &em28xx_video_template,
+                                               "vbi");
 
-       /* register v4l2 vbi video_device */
-       ret = video_register_device(dev->vbi_dev, VFL_TYPE_VBI,
-                                       vbi_nr[dev->devno]);
-       if (ret < 0) {
-               em28xx_errdev("unable to register vbi device\n");
-               return ret;
+               /* register v4l2 vbi video_device */
+               ret = video_register_device(dev->vbi_dev, VFL_TYPE_VBI,
+                                           vbi_nr[dev->devno]);
+               if (ret < 0) {
+                       em28xx_errdev("unable to register vbi device\n");
+                       return ret;
+               }
        }
 
        if (em28xx_boards[dev->model].radio.type == EM28XX_RADIO) {
@@ -2531,8 +2534,12 @@ int em28xx_register_analog_devices(struct em28xx *dev)
                            dev->radio_dev->num);
        }
 
-       em28xx_info("V4L2 device registered as /dev/video%d and /dev/vbi%d\n",
-                               dev->vdev->num, dev->vbi_dev->num);
+       em28xx_info("V4L2 video device registered as /dev/video%d\n",
+                               dev->vdev->num);
+
+       if (dev->vbi_dev)
+               em28xx_info("V4L2 VBI device registered as /dev/vbi%d\n",
+                           dev->vbi_dev->num);
 
        return 0;
 }