forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/media/usb/tm6000/tm6000-video.c
....@@ -52,15 +52,12 @@
5252
5353 static struct tm6000_fmt format[] = {
5454 {
55
- .name = "4:2:2, packed, YVY2",
5655 .fourcc = V4L2_PIX_FMT_YUYV,
5756 .depth = 16,
5857 }, {
59
- .name = "4:2:2, packed, UYVY",
6058 .fourcc = V4L2_PIX_FMT_UYVY,
6159 .depth = 16,
6260 }, {
63
- .name = "A/V + VBI mux packet",
6461 .fourcc = V4L2_PIX_FMT_TM6000,
6562 .depth = 16,
6663 }
....@@ -106,7 +103,7 @@
106103 dprintk(dev, V4L2_DEBUG_ISOC, "[%p/%d] wakeup\n", buf, buf->vb.i);
107104 buf->vb.state = VIDEOBUF_DONE;
108105 buf->vb.field_count++;
109
- v4l2_get_timestamp(&buf->vb.ts);
106
+ buf->vb.ts = ktime_get_ns();
110107
111108 list_del(&buf->vb.queue);
112109 wake_up(&buf->vb.done);
....@@ -180,7 +177,7 @@
180177 field = (header >> 11) & 0x1;
181178 line = (header >> 12) & 0x1ff;
182179 cmd = (header >> 21) & 0x7;
183
- /* Validates haeder fields */
180
+ /* Validates header fields */
184181 if (size > TM6000_URB_MSG_LEN)
185182 size = TM6000_URB_MSG_LEN;
186183 pktsize = TM6000_URB_MSG_LEN;
....@@ -419,6 +416,7 @@
419416 {
420417 struct tm6000_dmaqueue *dma_q = urb->context;
421418 struct tm6000_core *dev = container_of(dma_q, struct tm6000_core, vidq);
419
+ unsigned long flags;
422420 int i;
423421
424422 switch (urb->status) {
....@@ -436,9 +434,9 @@
436434 break;
437435 }
438436
439
- spin_lock(&dev->slock);
437
+ spin_lock_irqsave(&dev->slock, flags);
440438 tm6000_isoc_copy(urb);
441
- spin_unlock(&dev->slock);
439
+ spin_unlock_irqrestore(&dev->slock, flags);
442440
443441 /* Reset urb buffers */
444442 for (i = 0; i < urb->number_of_packets; i++) {
....@@ -854,21 +852,16 @@
854852 struct v4l2_capability *cap)
855853 {
856854 struct tm6000_core *dev = ((struct tm6000_fh *)priv)->dev;
857
- struct video_device *vdev = video_devdata(file);
858855
859
- strlcpy(cap->driver, "tm6000", sizeof(cap->driver));
860
- strlcpy(cap->card, "Trident TVMaster TM5600/6000/6010", sizeof(cap->card));
856
+ strscpy(cap->driver, "tm6000", sizeof(cap->driver));
857
+ strscpy(cap->card, "Trident TM5600/6000/6010", sizeof(cap->card));
861858 usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info));
859
+ cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_READWRITE |
860
+ V4L2_CAP_DEVICE_CAPS;
862861 if (dev->tuner_type != TUNER_ABSENT)
863
- cap->device_caps |= V4L2_CAP_TUNER;
864
- if (vdev->vfl_type == VFL_TYPE_GRABBER)
865
- cap->device_caps |= V4L2_CAP_VIDEO_CAPTURE |
866
- V4L2_CAP_STREAMING |
867
- V4L2_CAP_READWRITE;
868
- else
869
- cap->device_caps |= V4L2_CAP_RADIO;
870
- cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS |
871
- V4L2_CAP_RADIO | V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_READWRITE;
862
+ cap->capabilities |= V4L2_CAP_TUNER;
863
+ if (dev->caps.has_radio)
864
+ cap->capabilities |= V4L2_CAP_RADIO;
872865
873866 return 0;
874867 }
....@@ -879,7 +872,6 @@
879872 if (f->index >= ARRAY_SIZE(format))
880873 return -EINVAL;
881874
882
- strlcpy(f->description, format[f->index].name, sizeof(f->description));
883875 f->pixelformat = format[f->index].fourcc;
884876 return 0;
885877 }
....@@ -1091,7 +1083,7 @@
10911083 else
10921084 i->type = V4L2_INPUT_TYPE_CAMERA;
10931085
1094
- strcpy(i->name, iname[dev->vinput[n].type]);
1086
+ strscpy(i->name, iname[dev->vinput[n].type], sizeof(i->name));
10951087
10961088 i->std = TM6000_STD;
10971089
....@@ -1188,7 +1180,7 @@
11881180 if (0 != t->index)
11891181 return -EINVAL;
11901182
1191
- strcpy(t->name, "Television");
1183
+ strscpy(t->name, "Television", sizeof(t->name));
11921184 t->type = V4L2_TUNER_ANALOG_TV;
11931185 t->capability = V4L2_TUNER_CAP_NORM | V4L2_TUNER_CAP_STEREO;
11941186 t->rangehigh = 0xffffffffUL;
....@@ -1268,7 +1260,7 @@
12681260 return -EINVAL;
12691261
12701262 memset(t, 0, sizeof(*t));
1271
- strcpy(t->name, "Radio");
1263
+ strscpy(t->name, "Radio", sizeof(t->name));
12721264 t->type = V4L2_TUNER_RADIO;
12731265 t->capability = V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO;
12741266 t->rxsubchans = V4L2_TUNER_SUB_STEREO;
....@@ -1308,7 +1300,7 @@
13081300 video_device_node_name(vdev));
13091301
13101302 switch (vdev->vfl_type) {
1311
- case VFL_TYPE_GRABBER:
1303
+ case VFL_TYPE_VIDEO:
13121304 type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
13131305 break;
13141306 case VFL_TYPE_VBI:
....@@ -1626,7 +1618,7 @@
16261618 v4l2_ctrl_new_std(&dev->ctrl_handler, &tm6000_ctrl_ops,
16271619 V4L2_CID_HUE, -128, 127, 1, 0);
16281620 v4l2_ctrl_add_handler(&dev->ctrl_handler,
1629
- &dev->radio_ctrl_handler, NULL);
1621
+ &dev->radio_ctrl_handler, NULL, false);
16301622
16311623 if (dev->radio_ctrl_handler.error)
16321624 ret = dev->radio_ctrl_handler.error;
....@@ -1638,12 +1630,16 @@
16381630 vdev_init(dev, &dev->vfd, &tm6000_template, "video");
16391631
16401632 dev->vfd.ctrl_handler = &dev->ctrl_handler;
1633
+ dev->vfd.device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING |
1634
+ V4L2_CAP_READWRITE;
1635
+ if (dev->tuner_type != TUNER_ABSENT)
1636
+ dev->vfd.device_caps |= V4L2_CAP_TUNER;
16411637
16421638 /* init video dma queues */
16431639 INIT_LIST_HEAD(&dev->vidq.active);
16441640 INIT_LIST_HEAD(&dev->vidq.queued);
16451641
1646
- ret = video_register_device(&dev->vfd, VFL_TYPE_GRABBER, video_nr);
1642
+ ret = video_register_device(&dev->vfd, VFL_TYPE_VIDEO, video_nr);
16471643
16481644 if (ret < 0) {
16491645 printk(KERN_INFO "%s: can't register video device\n",
....@@ -1658,6 +1654,7 @@
16581654 vdev_init(dev, &dev->radio_dev, &tm6000_radio_template,
16591655 "radio");
16601656 dev->radio_dev.ctrl_handler = &dev->radio_ctrl_handler;
1657
+ dev->radio_dev.device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER;
16611658 ret = video_register_device(&dev->radio_dev, VFL_TYPE_RADIO,
16621659 radio_nr);
16631660 if (ret < 0) {