forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/media/common/saa7146/saa7146_fops.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
23
34 #include <media/drv-intf/saa7146_vv.h>
....@@ -96,8 +97,6 @@
9697 DEB_EE("dev:%p, dmaq:%p, state:%d\n", dev, q, state);
9798 DEB_EE("q->curr:%p\n", q->curr);
9899
99
- BUG_ON(!q->curr);
100
-
101100 /* finish current buffer */
102101 if (NULL == q->curr) {
103102 DEB_D("aiii. no current buffer\n");
....@@ -105,7 +104,7 @@
105104 }
106105
107106 q->curr->vb.state = state;
108
- v4l2_get_timestamp(&q->curr->vb.ts);
107
+ q->curr->vb.ts = ktime_get_ns();
109108 wake_up(&q->curr->vb.done);
110109
111110 q->curr = NULL;
....@@ -295,7 +294,7 @@
295294 int res;
296295
297296 switch (vdev->vfl_type) {
298
- case VFL_TYPE_GRABBER: {
297
+ case VFL_TYPE_VIDEO: {
299298 DEB_EE("V4L2_BUF_TYPE_VIDEO_CAPTURE: file:%p, vma:%p\n",
300299 file, vma);
301300 q = &fh->video_q;
....@@ -377,7 +376,7 @@
377376 int ret;
378377
379378 switch (vdev->vfl_type) {
380
- case VFL_TYPE_GRABBER:
379
+ case VFL_TYPE_VIDEO:
381380 /*
382381 DEB_EE("V4L2_BUF_TYPE_VIDEO_CAPTURE: file:%p, data:%p, count:%lun",
383382 file, data, (unsigned long)count);
....@@ -408,7 +407,7 @@
408407 int ret;
409408
410409 switch (vdev->vfl_type) {
411
- case VFL_TYPE_GRABBER:
410
+ case VFL_TYPE_VIDEO:
412411 return -EINVAL;
413412 case VFL_TYPE_VBI:
414413 if (fh->dev->ext_vv_data->vbi_fops.write) {
....@@ -596,7 +595,7 @@
596595 DEB_EE("dev:%p, name:'%s', type:%d\n", dev, name, type);
597596
598597 vfd->fops = &video_fops;
599
- if (type == VFL_TYPE_GRABBER)
598
+ if (type == VFL_TYPE_VIDEO)
600599 vfd->ioctl_ops = &dev->ext_vv_data->vid_ops;
601600 else
602601 vfd->ioctl_ops = &dev->ext_vv_data->vbi_ops;
....@@ -606,7 +605,16 @@
606605 vfd->tvnorms = 0;
607606 for (i = 0; i < dev->ext_vv_data->num_stds; i++)
608607 vfd->tvnorms |= dev->ext_vv_data->stds[i].id;
609
- strlcpy(vfd->name, name, sizeof(vfd->name));
608
+ strscpy(vfd->name, name, sizeof(vfd->name));
609
+ vfd->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_OVERLAY |
610
+ V4L2_CAP_READWRITE | V4L2_CAP_STREAMING;
611
+ vfd->device_caps |= dev->ext_vv_data->capabilities;
612
+ if (type == VFL_TYPE_VIDEO)
613
+ vfd->device_caps &=
614
+ ~(V4L2_CAP_VBI_CAPTURE | V4L2_CAP_SLICED_VBI_OUTPUT);
615
+ else
616
+ vfd->device_caps &=
617
+ ~(V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_OVERLAY | V4L2_CAP_AUDIO);
610618 video_set_drvdata(vfd, dev);
611619
612620 err = video_register_device(vfd, type, -1);