| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
|---|
| 2 | 3 | |
|---|
| 3 | 4 | #include <media/drv-intf/saa7146_vv.h> |
|---|
| .. | .. |
|---|
| 96 | 97 | DEB_EE("dev:%p, dmaq:%p, state:%d\n", dev, q, state); |
|---|
| 97 | 98 | DEB_EE("q->curr:%p\n", q->curr); |
|---|
| 98 | 99 | |
|---|
| 99 | | - BUG_ON(!q->curr); |
|---|
| 100 | | - |
|---|
| 101 | 100 | /* finish current buffer */ |
|---|
| 102 | 101 | if (NULL == q->curr) { |
|---|
| 103 | 102 | DEB_D("aiii. no current buffer\n"); |
|---|
| .. | .. |
|---|
| 105 | 104 | } |
|---|
| 106 | 105 | |
|---|
| 107 | 106 | q->curr->vb.state = state; |
|---|
| 108 | | - v4l2_get_timestamp(&q->curr->vb.ts); |
|---|
| 107 | + q->curr->vb.ts = ktime_get_ns(); |
|---|
| 109 | 108 | wake_up(&q->curr->vb.done); |
|---|
| 110 | 109 | |
|---|
| 111 | 110 | q->curr = NULL; |
|---|
| .. | .. |
|---|
| 295 | 294 | int res; |
|---|
| 296 | 295 | |
|---|
| 297 | 296 | switch (vdev->vfl_type) { |
|---|
| 298 | | - case VFL_TYPE_GRABBER: { |
|---|
| 297 | + case VFL_TYPE_VIDEO: { |
|---|
| 299 | 298 | DEB_EE("V4L2_BUF_TYPE_VIDEO_CAPTURE: file:%p, vma:%p\n", |
|---|
| 300 | 299 | file, vma); |
|---|
| 301 | 300 | q = &fh->video_q; |
|---|
| .. | .. |
|---|
| 377 | 376 | int ret; |
|---|
| 378 | 377 | |
|---|
| 379 | 378 | switch (vdev->vfl_type) { |
|---|
| 380 | | - case VFL_TYPE_GRABBER: |
|---|
| 379 | + case VFL_TYPE_VIDEO: |
|---|
| 381 | 380 | /* |
|---|
| 382 | 381 | DEB_EE("V4L2_BUF_TYPE_VIDEO_CAPTURE: file:%p, data:%p, count:%lun", |
|---|
| 383 | 382 | file, data, (unsigned long)count); |
|---|
| .. | .. |
|---|
| 408 | 407 | int ret; |
|---|
| 409 | 408 | |
|---|
| 410 | 409 | switch (vdev->vfl_type) { |
|---|
| 411 | | - case VFL_TYPE_GRABBER: |
|---|
| 410 | + case VFL_TYPE_VIDEO: |
|---|
| 412 | 411 | return -EINVAL; |
|---|
| 413 | 412 | case VFL_TYPE_VBI: |
|---|
| 414 | 413 | if (fh->dev->ext_vv_data->vbi_fops.write) { |
|---|
| .. | .. |
|---|
| 596 | 595 | DEB_EE("dev:%p, name:'%s', type:%d\n", dev, name, type); |
|---|
| 597 | 596 | |
|---|
| 598 | 597 | vfd->fops = &video_fops; |
|---|
| 599 | | - if (type == VFL_TYPE_GRABBER) |
|---|
| 598 | + if (type == VFL_TYPE_VIDEO) |
|---|
| 600 | 599 | vfd->ioctl_ops = &dev->ext_vv_data->vid_ops; |
|---|
| 601 | 600 | else |
|---|
| 602 | 601 | vfd->ioctl_ops = &dev->ext_vv_data->vbi_ops; |
|---|
| .. | .. |
|---|
| 606 | 605 | vfd->tvnorms = 0; |
|---|
| 607 | 606 | for (i = 0; i < dev->ext_vv_data->num_stds; i++) |
|---|
| 608 | 607 | 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); |
|---|
| 610 | 618 | video_set_drvdata(vfd, dev); |
|---|
| 611 | 619 | |
|---|
| 612 | 620 | err = video_register_device(vfd, type, -1); |
|---|