hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/media/usb/em28xx/em28xx-video.c
....@@ -102,37 +102,30 @@
102102 /* supported video standards */
103103 static struct em28xx_fmt format[] = {
104104 {
105
- .name = "16 bpp YUY2, 4:2:2, packed",
106105 .fourcc = V4L2_PIX_FMT_YUYV,
107106 .depth = 16,
108107 .reg = EM28XX_OUTFMT_YUV422_Y0UY1V,
109108 }, {
110
- .name = "16 bpp RGB 565, LE",
111109 .fourcc = V4L2_PIX_FMT_RGB565,
112110 .depth = 16,
113111 .reg = EM28XX_OUTFMT_RGB_16_656,
114112 }, {
115
- .name = "8 bpp Bayer RGRG..GBGB",
116113 .fourcc = V4L2_PIX_FMT_SRGGB8,
117114 .depth = 8,
118115 .reg = EM28XX_OUTFMT_RGB_8_RGRG,
119116 }, {
120
- .name = "8 bpp Bayer BGBG..GRGR",
121117 .fourcc = V4L2_PIX_FMT_SBGGR8,
122118 .depth = 8,
123119 .reg = EM28XX_OUTFMT_RGB_8_BGBG,
124120 }, {
125
- .name = "8 bpp Bayer GRGR..BGBG",
126121 .fourcc = V4L2_PIX_FMT_SGRBG8,
127122 .depth = 8,
128123 .reg = EM28XX_OUTFMT_RGB_8_GRGR,
129124 }, {
130
- .name = "8 bpp Bayer GBGB..RGRG",
131125 .fourcc = V4L2_PIX_FMT_SGBRG8,
132126 .depth = 8,
133127 .reg = EM28XX_OUTFMT_RGB_8_GBGB,
134128 }, {
135
- .name = "12 bpp YUV411",
136129 .fourcc = V4L2_PIX_FMT_YUV411P,
137130 .depth = 12,
138131 .reg = EM28XX_OUTFMT_YUV411,
....@@ -1517,7 +1510,6 @@
15171510 else
15181511 f->fmt.pix.field = v4l2->interlaced_fieldmode ?
15191512 V4L2_FIELD_INTERLACED : V4L2_FIELD_TOP;
1520
- f->fmt.pix.priv = 0;
15211513
15221514 return 0;
15231515 }
....@@ -1678,7 +1670,7 @@
16781670
16791671 i->type = V4L2_INPUT_TYPE_CAMERA;
16801672
1681
- strcpy(i->name, iname[INPUT(n)->type]);
1673
+ strscpy(i->name, iname[INPUT(n)->type], sizeof(i->name));
16821674
16831675 if (INPUT(n)->type == EM28XX_VMUX_TELEVISION)
16841676 i->type = V4L2_INPUT_TYPE_TUNER;
....@@ -1738,28 +1730,28 @@
17381730
17391731 switch (idx) {
17401732 case EM28XX_AMUX_VIDEO:
1741
- strcpy(a->name, "Television");
1733
+ strscpy(a->name, "Television", sizeof(a->name));
17421734 break;
17431735 case EM28XX_AMUX_LINE_IN:
1744
- strcpy(a->name, "Line In");
1736
+ strscpy(a->name, "Line In", sizeof(a->name));
17451737 break;
17461738 case EM28XX_AMUX_VIDEO2:
1747
- strcpy(a->name, "Television alt");
1739
+ strscpy(a->name, "Television alt", sizeof(a->name));
17481740 break;
17491741 case EM28XX_AMUX_PHONE:
1750
- strcpy(a->name, "Phone");
1742
+ strscpy(a->name, "Phone", sizeof(a->name));
17511743 break;
17521744 case EM28XX_AMUX_MIC:
1753
- strcpy(a->name, "Mic");
1745
+ strscpy(a->name, "Mic", sizeof(a->name));
17541746 break;
17551747 case EM28XX_AMUX_CD:
1756
- strcpy(a->name, "CD");
1748
+ strscpy(a->name, "CD", sizeof(a->name));
17571749 break;
17581750 case EM28XX_AMUX_AUX:
1759
- strcpy(a->name, "Aux");
1751
+ strscpy(a->name, "Aux", sizeof(a->name));
17601752 break;
17611753 case EM28XX_AMUX_PCM_OUT:
1762
- strcpy(a->name, "PCM");
1754
+ strscpy(a->name, "PCM", sizeof(a->name));
17631755 break;
17641756 case EM28XX_AMUX_UNUSED:
17651757 default:
....@@ -1845,7 +1837,7 @@
18451837 if (t->index != 0)
18461838 return -EINVAL;
18471839
1848
- strcpy(t->name, "Tuner");
1840
+ strscpy(t->name, "Tuner", sizeof(t->name));
18491841
18501842 v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t);
18511843 return 0;
....@@ -1902,9 +1894,9 @@
19021894 if (chip->match.addr > 1)
19031895 return -EINVAL;
19041896 if (chip->match.addr == 1)
1905
- strlcpy(chip->name, "ac97", sizeof(chip->name));
1897
+ strscpy(chip->name, "ac97", sizeof(chip->name));
19061898 else
1907
- strlcpy(chip->name,
1899
+ strscpy(chip->name,
19081900 dev->v4l2->v4l2_dev.name, sizeof(chip->name));
19091901 return 0;
19101902 }
....@@ -1984,32 +1976,20 @@
19841976 static int vidioc_querycap(struct file *file, void *priv,
19851977 struct v4l2_capability *cap)
19861978 {
1987
- struct video_device *vdev = video_devdata(file);
19881979 struct em28xx *dev = video_drvdata(file);
19891980 struct em28xx_v4l2 *v4l2 = dev->v4l2;
19901981 struct usb_device *udev = interface_to_usbdev(dev->intf);
19911982
1992
- strlcpy(cap->driver, "em28xx", sizeof(cap->driver));
1993
- strlcpy(cap->card, em28xx_boards[dev->model].name, sizeof(cap->card));
1983
+ strscpy(cap->driver, "em28xx", sizeof(cap->driver));
1984
+ strscpy(cap->card, em28xx_boards[dev->model].name, sizeof(cap->card));
19941985 usb_make_path(udev, cap->bus_info, sizeof(cap->bus_info));
19951986
1996
- if (vdev->vfl_type == VFL_TYPE_GRABBER)
1997
- cap->device_caps = V4L2_CAP_READWRITE |
1998
- V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
1999
- else if (vdev->vfl_type == VFL_TYPE_RADIO)
2000
- cap->device_caps = V4L2_CAP_RADIO;
2001
- else
2002
- cap->device_caps = V4L2_CAP_READWRITE | V4L2_CAP_VBI_CAPTURE;
2003
-
2004
- if (dev->int_audio_type != EM28XX_INT_AUDIO_NONE)
2005
- cap->device_caps |= V4L2_CAP_AUDIO;
2006
-
2007
- if (dev->tuner_type != TUNER_ABSENT)
2008
- cap->device_caps |= V4L2_CAP_TUNER;
2009
-
2010
- cap->capabilities = cap->device_caps |
2011
- V4L2_CAP_DEVICE_CAPS | V4L2_CAP_READWRITE |
1987
+ cap->capabilities = V4L2_CAP_DEVICE_CAPS | V4L2_CAP_READWRITE |
20121988 V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
1989
+ if (dev->int_audio_type != EM28XX_INT_AUDIO_NONE)
1990
+ cap->capabilities |= V4L2_CAP_AUDIO;
1991
+ if (dev->tuner_type != TUNER_ABSENT)
1992
+ cap->capabilities |= V4L2_CAP_TUNER;
20131993 if (video_is_registered(&v4l2->vbi_dev))
20141994 cap->capabilities |= V4L2_CAP_VBI_CAPTURE;
20151995 if (video_is_registered(&v4l2->radio_dev))
....@@ -2023,7 +2003,6 @@
20232003 if (unlikely(f->index >= ARRAY_SIZE(format)))
20242004 return -EINVAL;
20252005
2026
- strlcpy(f->description, format[f->index].name, sizeof(f->description));
20272006 f->pixelformat = format[f->index].fourcc;
20282007
20292008 return 0;
....@@ -2114,7 +2093,7 @@
21142093 if (unlikely(t->index > 0))
21152094 return -EINVAL;
21162095
2117
- strcpy(t->name, "Radio");
2096
+ strscpy(t->name, "Radio", sizeof(t->name));
21182097
21192098 v4l2_device_call_all(&dev->v4l2->v4l2_dev, 0, tuner, g_tuner, t);
21202099
....@@ -2162,7 +2141,7 @@
21622141 int ret;
21632142
21642143 switch (vdev->vfl_type) {
2165
- case VFL_TYPE_GRABBER:
2144
+ case VFL_TYPE_VIDEO:
21662145 fh_type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
21672146 break;
21682147 case VFL_TYPE_VBI:
....@@ -2220,7 +2199,7 @@
22202199 /*
22212200 * em28xx_v4l2_fini()
22222201 * unregisters the v4l2,i2c and usb devices
2223
- * called when the device gets disconected or at module unload
2202
+ * called when the device gets disconnected or at module unload
22242203 */
22252204 static int em28xx_v4l2_fini(struct em28xx *dev)
22262205 {
....@@ -2782,6 +2761,13 @@
27822761 mutex_init(&v4l2->vb_vbi_queue_lock);
27832762 v4l2->vdev.queue = &v4l2->vb_vidq;
27842763 v4l2->vdev.queue->lock = &v4l2->vb_queue_lock;
2764
+ v4l2->vdev.device_caps = V4L2_CAP_READWRITE | V4L2_CAP_VIDEO_CAPTURE |
2765
+ V4L2_CAP_STREAMING;
2766
+ if (dev->int_audio_type != EM28XX_INT_AUDIO_NONE)
2767
+ v4l2->vdev.device_caps |= V4L2_CAP_AUDIO;
2768
+ if (dev->tuner_type != TUNER_ABSENT)
2769
+ v4l2->vdev.device_caps |= V4L2_CAP_TUNER;
2770
+
27852771
27862772 /* disable inapplicable ioctls */
27872773 if (dev->is_webcam) {
....@@ -2803,7 +2789,7 @@
28032789 }
28042790
28052791 /* register v4l2 video video_device */
2806
- ret = video_register_device(&v4l2->vdev, VFL_TYPE_GRABBER,
2792
+ ret = video_register_device(&v4l2->vdev, VFL_TYPE_VIDEO,
28072793 video_nr[dev->devno]);
28082794 if (ret) {
28092795 dev_err(&dev->intf->dev,
....@@ -2818,6 +2804,10 @@
28182804
28192805 v4l2->vbi_dev.queue = &v4l2->vb_vbiq;
28202806 v4l2->vbi_dev.queue->lock = &v4l2->vb_vbi_queue_lock;
2807
+ v4l2->vbi_dev.device_caps = V4L2_CAP_STREAMING |
2808
+ V4L2_CAP_READWRITE | V4L2_CAP_VBI_CAPTURE;
2809
+ if (dev->tuner_type != TUNER_ABSENT)
2810
+ v4l2->vbi_dev.device_caps |= V4L2_CAP_TUNER;
28212811
28222812 /* disable inapplicable ioctls */
28232813 v4l2_disable_ioctl(&v4l2->vbi_dev, VIDIOC_S_PARM);
....@@ -2845,6 +2835,7 @@
28452835 if (em28xx_boards[dev->model].radio.type == EM28XX_RADIO) {
28462836 em28xx_vdev_init(dev, &v4l2->radio_dev, &em28xx_radio_template,
28472837 "radio");
2838
+ v4l2->radio_dev.device_caps = V4L2_CAP_RADIO | V4L2_CAP_TUNER;
28482839 ret = video_register_device(&v4l2->radio_dev, VFL_TYPE_RADIO,
28492840 radio_nr[dev->devno]);
28502841 if (ret < 0) {