media: common/saa7146: fix VFL direction for vbi output
authorHans Verkuil <hverkuil-cisco@xs4all.nl>
Wed, 22 Mar 2023 12:51:36 +0000 (12:51 +0000)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Sat, 15 Apr 2023 07:49:28 +0000 (08:49 +0100)
The VBI output device didn't have VFL_DIR_TX set, so this didn't work
anymore since the V4L2 core thought that it was a capture device instead.

Fix this. Also drop invalid capabilities for the VBI output device.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/common/saa7146/saa7146_fops.c

index 08c8e73..90de443 100644 (file)
@@ -589,12 +589,16 @@ int saa7146_register_device(struct video_device *vfd, struct saa7146_dev *dev,
        vfd->device_caps = V4L2_CAP_VIDEO_CAPTURE |
                           V4L2_CAP_READWRITE | V4L2_CAP_STREAMING;
        vfd->device_caps |= dev->ext_vv_data->capabilities;
-       if (type == VFL_TYPE_VIDEO)
+       if (type == VFL_TYPE_VIDEO) {
                vfd->device_caps &=
                        ~(V4L2_CAP_VBI_CAPTURE | V4L2_CAP_SLICED_VBI_OUTPUT);
-       else
-               vfd->device_caps &=
-                       ~(V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_AUDIO);
+       } else if (vfd->device_caps & V4L2_CAP_SLICED_VBI_OUTPUT) {
+               vfd->vfl_dir = VFL_DIR_TX;
+               vfd->device_caps &= ~(V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING |
+                                     V4L2_CAP_AUDIO | V4L2_CAP_TUNER);
+       } else {
+               vfd->device_caps &= ~V4L2_CAP_VIDEO_CAPTURE;
+       }
        video_set_drvdata(vfd, dev);
 
        err = video_register_device(vfd, type, -1);