• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * vivid-core.c - A Virtual Video Test Driver, core initialization
4  *
5  * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
6  */
7 
8 #include <linux/module.h>
9 #include <linux/errno.h>
10 #include <linux/kernel.h>
11 #include <linux/init.h>
12 #include <linux/sched.h>
13 #include <linux/slab.h>
14 #include <linux/vmalloc.h>
15 #include <linux/font.h>
16 #include <linux/mutex.h>
17 #include <linux/platform_device.h>
18 #include <linux/videodev2.h>
19 #include <linux/v4l2-dv-timings.h>
20 #include <media/videobuf2-vmalloc.h>
21 #include <media/videobuf2-dma-contig.h>
22 #include <media/v4l2-dv-timings.h>
23 #include <media/v4l2-ioctl.h>
24 #include <media/v4l2-fh.h>
25 #include <media/v4l2-event.h>
26 
27 #include "vivid-core.h"
28 #include "vivid-vid-common.h"
29 #include "vivid-vid-cap.h"
30 #include "vivid-vid-out.h"
31 #include "vivid-radio-common.h"
32 #include "vivid-radio-rx.h"
33 #include "vivid-radio-tx.h"
34 #include "vivid-sdr-cap.h"
35 #include "vivid-vbi-cap.h"
36 #include "vivid-vbi-out.h"
37 #include "vivid-osd.h"
38 #include "vivid-cec.h"
39 #include "vivid-ctrls.h"
40 #include "vivid-meta-cap.h"
41 #include "vivid-meta-out.h"
42 #include "vivid-touch-cap.h"
43 
44 #define VIVID_MODULE_NAME "vivid"
45 
46 /* The maximum number of vivid devices */
47 #define VIVID_MAX_DEVS CONFIG_VIDEO_VIVID_MAX_DEVS
48 
49 MODULE_DESCRIPTION("Virtual Video Test Driver");
50 MODULE_AUTHOR("Hans Verkuil");
51 MODULE_LICENSE("GPL");
52 
53 static unsigned n_devs = 1;
54 module_param(n_devs, uint, 0444);
55 MODULE_PARM_DESC(n_devs, " number of driver instances to create");
56 
57 static int vid_cap_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
58 module_param_array(vid_cap_nr, int, NULL, 0444);
59 MODULE_PARM_DESC(vid_cap_nr, " videoX start number, -1 is autodetect");
60 
61 static int vid_out_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
62 module_param_array(vid_out_nr, int, NULL, 0444);
63 MODULE_PARM_DESC(vid_out_nr, " videoX start number, -1 is autodetect");
64 
65 static int vbi_cap_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
66 module_param_array(vbi_cap_nr, int, NULL, 0444);
67 MODULE_PARM_DESC(vbi_cap_nr, " vbiX start number, -1 is autodetect");
68 
69 static int vbi_out_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
70 module_param_array(vbi_out_nr, int, NULL, 0444);
71 MODULE_PARM_DESC(vbi_out_nr, " vbiX start number, -1 is autodetect");
72 
73 static int sdr_cap_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
74 module_param_array(sdr_cap_nr, int, NULL, 0444);
75 MODULE_PARM_DESC(sdr_cap_nr, " swradioX start number, -1 is autodetect");
76 
77 static int radio_rx_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
78 module_param_array(radio_rx_nr, int, NULL, 0444);
79 MODULE_PARM_DESC(radio_rx_nr, " radioX start number, -1 is autodetect");
80 
81 static int radio_tx_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
82 module_param_array(radio_tx_nr, int, NULL, 0444);
83 MODULE_PARM_DESC(radio_tx_nr, " radioX start number, -1 is autodetect");
84 
85 static int meta_cap_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
86 module_param_array(meta_cap_nr, int, NULL, 0444);
87 MODULE_PARM_DESC(meta_cap_nr, " videoX start number, -1 is autodetect");
88 
89 static int meta_out_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
90 module_param_array(meta_out_nr, int, NULL, 0444);
91 MODULE_PARM_DESC(meta_out_nr, " videoX start number, -1 is autodetect");
92 
93 static int touch_cap_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
94 module_param_array(touch_cap_nr, int, NULL, 0444);
95 MODULE_PARM_DESC(touch_cap_nr, " v4l-touchX start number, -1 is autodetect");
96 
97 static int ccs_cap_mode[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
98 module_param_array(ccs_cap_mode, int, NULL, 0444);
99 MODULE_PARM_DESC(ccs_cap_mode, " capture crop/compose/scale mode:\n"
100 			   "\t\t    bit 0=crop, 1=compose, 2=scale,\n"
101 			   "\t\t    -1=user-controlled (default)");
102 
103 static int ccs_out_mode[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
104 module_param_array(ccs_out_mode, int, NULL, 0444);
105 MODULE_PARM_DESC(ccs_out_mode, " output crop/compose/scale mode:\n"
106 			   "\t\t    bit 0=crop, 1=compose, 2=scale,\n"
107 			   "\t\t    -1=user-controlled (default)");
108 
109 static unsigned multiplanar[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 1 };
110 module_param_array(multiplanar, uint, NULL, 0444);
111 MODULE_PARM_DESC(multiplanar, " 1 (default) creates a single planar device, 2 creates a multiplanar device.");
112 
113 /*
114  * Default: video + vbi-cap (raw and sliced) + radio rx + radio tx + sdr +
115  * vbi-out + vid-out + meta-cap
116  */
117 static unsigned int node_types[VIVID_MAX_DEVS] = {
118 	[0 ... (VIVID_MAX_DEVS - 1)] = 0xe1d3d
119 };
120 module_param_array(node_types, uint, NULL, 0444);
121 MODULE_PARM_DESC(node_types, " node types, default is 0xe1d3d. Bitmask with the following meaning:\n"
122 			     "\t\t    bit 0: Video Capture node\n"
123 			     "\t\t    bit 2-3: VBI Capture node: 0 = none, 1 = raw vbi, 2 = sliced vbi, 3 = both\n"
124 			     "\t\t    bit 4: Radio Receiver node\n"
125 			     "\t\t    bit 5: Software Defined Radio Receiver node\n"
126 			     "\t\t    bit 8: Video Output node\n"
127 			     "\t\t    bit 10-11: VBI Output node: 0 = none, 1 = raw vbi, 2 = sliced vbi, 3 = both\n"
128 			     "\t\t    bit 12: Radio Transmitter node\n"
129 			     "\t\t    bit 16: Framebuffer for testing overlays\n"
130 			     "\t\t    bit 17: Metadata Capture node\n"
131 			     "\t\t    bit 18: Metadata Output node\n"
132 			     "\t\t    bit 19: Touch Capture node\n");
133 
134 /* Default: 4 inputs */
135 static unsigned num_inputs[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 4 };
136 module_param_array(num_inputs, uint, NULL, 0444);
137 MODULE_PARM_DESC(num_inputs, " number of inputs, default is 4");
138 
139 /* Default: input 0 = WEBCAM, 1 = TV, 2 = SVID, 3 = HDMI */
140 static unsigned input_types[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 0xe4 };
141 module_param_array(input_types, uint, NULL, 0444);
142 MODULE_PARM_DESC(input_types, " input types, default is 0xe4. Two bits per input,\n"
143 			      "\t\t    bits 0-1 == input 0, bits 31-30 == input 15.\n"
144 			      "\t\t    Type 0 == webcam, 1 == TV, 2 == S-Video, 3 == HDMI");
145 
146 /* Default: 2 outputs */
147 static unsigned num_outputs[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 2 };
148 module_param_array(num_outputs, uint, NULL, 0444);
149 MODULE_PARM_DESC(num_outputs, " number of outputs, default is 2");
150 
151 /* Default: output 0 = SVID, 1 = HDMI */
152 static unsigned output_types[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 2 };
153 module_param_array(output_types, uint, NULL, 0444);
154 MODULE_PARM_DESC(output_types, " output types, default is 0x02. One bit per output,\n"
155 			      "\t\t    bit 0 == output 0, bit 15 == output 15.\n"
156 			      "\t\t    Type 0 == S-Video, 1 == HDMI");
157 
158 unsigned vivid_debug;
159 module_param(vivid_debug, uint, 0644);
160 MODULE_PARM_DESC(vivid_debug, " activates debug info");
161 
162 static bool no_error_inj;
163 module_param(no_error_inj, bool, 0444);
164 MODULE_PARM_DESC(no_error_inj, " if set disable the error injecting controls");
165 
166 static unsigned int allocators[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 0 };
167 module_param_array(allocators, uint, NULL, 0444);
168 MODULE_PARM_DESC(allocators, " memory allocator selection, default is 0.\n"
169 			     "\t\t    0 == vmalloc\n"
170 			     "\t\t    1 == dma-contig");
171 
172 static unsigned int cache_hints[VIVID_MAX_DEVS] = {
173 	[0 ... (VIVID_MAX_DEVS - 1)] = 0
174 };
175 module_param_array(cache_hints, uint, NULL, 0444);
176 MODULE_PARM_DESC(cache_hints, " user-space cache hints, default is 0.\n"
177 			     "\t\t    0 == forbid\n"
178 			     "\t\t    1 == allow");
179 
180 static struct vivid_dev *vivid_devs[VIVID_MAX_DEVS];
181 
182 const struct v4l2_rect vivid_min_rect = {
183 	0, 0, MIN_WIDTH, MIN_HEIGHT
184 };
185 
186 const struct v4l2_rect vivid_max_rect = {
187 	0, 0, MAX_WIDTH * MAX_ZOOM, MAX_HEIGHT * MAX_ZOOM
188 };
189 
190 static const u8 vivid_hdmi_edid[256] = {
191 	0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
192 	0x31, 0xd8, 0x34, 0x12, 0x00, 0x00, 0x00, 0x00,
193 	0x22, 0x1a, 0x01, 0x03, 0x80, 0x60, 0x36, 0x78,
194 	0x0f, 0xee, 0x91, 0xa3, 0x54, 0x4c, 0x99, 0x26,
195 	0x0f, 0x50, 0x54, 0x2f, 0xcf, 0x00, 0x31, 0x59,
196 	0x45, 0x59, 0x81, 0x80, 0x81, 0x40, 0x90, 0x40,
197 	0x95, 0x00, 0xa9, 0x40, 0xb3, 0x00, 0x08, 0xe8,
198 	0x00, 0x30, 0xf2, 0x70, 0x5a, 0x80, 0xb0, 0x58,
199 	0x8a, 0x00, 0xc0, 0x1c, 0x32, 0x00, 0x00, 0x1e,
200 	0x00, 0x00, 0x00, 0xfd, 0x00, 0x18, 0x55, 0x18,
201 	0x87, 0x3c, 0x00, 0x0a, 0x20, 0x20, 0x20, 0x20,
202 	0x20, 0x20, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x76,
203 	0x69, 0x76, 0x69, 0x64, 0x0a, 0x20, 0x20, 0x20,
204 	0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x10,
205 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
206 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7b,
207 
208 	0x02, 0x03, 0x3f, 0xf1, 0x51, 0x61, 0x60, 0x5f,
209 	0x5e, 0x5d, 0x10, 0x1f, 0x04, 0x13, 0x22, 0x21,
210 	0x20, 0x05, 0x14, 0x02, 0x11, 0x01, 0x23, 0x09,
211 	0x07, 0x07, 0x83, 0x01, 0x00, 0x00, 0x6d, 0x03,
212 	0x0c, 0x00, 0x10, 0x00, 0x00, 0x3c, 0x21, 0x00,
213 	0x60, 0x01, 0x02, 0x03, 0x67, 0xd8, 0x5d, 0xc4,
214 	0x01, 0x78, 0x00, 0x00, 0xe2, 0x00, 0xca, 0xe3,
215 	0x05, 0x00, 0x00, 0xe3, 0x06, 0x01, 0x00, 0x4d,
216 	0xd0, 0x00, 0xa0, 0xf0, 0x70, 0x3e, 0x80, 0x30,
217 	0x20, 0x35, 0x00, 0xc0, 0x1c, 0x32, 0x00, 0x00,
218 	0x1e, 0x1a, 0x36, 0x80, 0xa0, 0x70, 0x38, 0x1f,
219 	0x40, 0x30, 0x20, 0x35, 0x00, 0xc0, 0x1c, 0x32,
220 	0x00, 0x00, 0x1a, 0x1a, 0x1d, 0x00, 0x80, 0x51,
221 	0xd0, 0x1c, 0x20, 0x40, 0x80, 0x35, 0x00, 0xc0,
222 	0x1c, 0x32, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
223 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82,
224 };
225 
vidioc_querycap(struct file * file,void * priv,struct v4l2_capability * cap)226 static int vidioc_querycap(struct file *file, void  *priv,
227 					struct v4l2_capability *cap)
228 {
229 	struct vivid_dev *dev = video_drvdata(file);
230 
231 	strscpy(cap->driver, "vivid", sizeof(cap->driver));
232 	strscpy(cap->card, "vivid", sizeof(cap->card));
233 	snprintf(cap->bus_info, sizeof(cap->bus_info),
234 			"platform:%s", dev->v4l2_dev.name);
235 
236 	cap->capabilities = dev->vid_cap_caps | dev->vid_out_caps |
237 		dev->vbi_cap_caps | dev->vbi_out_caps |
238 		dev->radio_rx_caps | dev->radio_tx_caps |
239 		dev->sdr_cap_caps | dev->meta_cap_caps |
240 		dev->meta_out_caps | dev->touch_cap_caps |
241 		V4L2_CAP_DEVICE_CAPS;
242 	return 0;
243 }
244 
vidioc_s_hw_freq_seek(struct file * file,void * fh,const struct v4l2_hw_freq_seek * a)245 static int vidioc_s_hw_freq_seek(struct file *file, void *fh, const struct v4l2_hw_freq_seek *a)
246 {
247 	struct video_device *vdev = video_devdata(file);
248 
249 	if (vdev->vfl_type == VFL_TYPE_RADIO)
250 		return vivid_radio_rx_s_hw_freq_seek(file, fh, a);
251 	return -ENOTTY;
252 }
253 
vidioc_enum_freq_bands(struct file * file,void * fh,struct v4l2_frequency_band * band)254 static int vidioc_enum_freq_bands(struct file *file, void *fh, struct v4l2_frequency_band *band)
255 {
256 	struct video_device *vdev = video_devdata(file);
257 
258 	if (vdev->vfl_type == VFL_TYPE_RADIO)
259 		return vivid_radio_rx_enum_freq_bands(file, fh, band);
260 	if (vdev->vfl_type == VFL_TYPE_SDR)
261 		return vivid_sdr_enum_freq_bands(file, fh, band);
262 	return -ENOTTY;
263 }
264 
vidioc_g_tuner(struct file * file,void * fh,struct v4l2_tuner * vt)265 static int vidioc_g_tuner(struct file *file, void *fh, struct v4l2_tuner *vt)
266 {
267 	struct video_device *vdev = video_devdata(file);
268 
269 	if (vdev->vfl_type == VFL_TYPE_RADIO)
270 		return vivid_radio_rx_g_tuner(file, fh, vt);
271 	if (vdev->vfl_type == VFL_TYPE_SDR)
272 		return vivid_sdr_g_tuner(file, fh, vt);
273 	return vivid_video_g_tuner(file, fh, vt);
274 }
275 
vidioc_s_tuner(struct file * file,void * fh,const struct v4l2_tuner * vt)276 static int vidioc_s_tuner(struct file *file, void *fh, const struct v4l2_tuner *vt)
277 {
278 	struct video_device *vdev = video_devdata(file);
279 
280 	if (vdev->vfl_type == VFL_TYPE_RADIO)
281 		return vivid_radio_rx_s_tuner(file, fh, vt);
282 	if (vdev->vfl_type == VFL_TYPE_SDR)
283 		return vivid_sdr_s_tuner(file, fh, vt);
284 	return vivid_video_s_tuner(file, fh, vt);
285 }
286 
vidioc_g_frequency(struct file * file,void * fh,struct v4l2_frequency * vf)287 static int vidioc_g_frequency(struct file *file, void *fh, struct v4l2_frequency *vf)
288 {
289 	struct vivid_dev *dev = video_drvdata(file);
290 	struct video_device *vdev = video_devdata(file);
291 
292 	if (vdev->vfl_type == VFL_TYPE_RADIO)
293 		return vivid_radio_g_frequency(file,
294 			vdev->vfl_dir == VFL_DIR_RX ?
295 			&dev->radio_rx_freq : &dev->radio_tx_freq, vf);
296 	if (vdev->vfl_type == VFL_TYPE_SDR)
297 		return vivid_sdr_g_frequency(file, fh, vf);
298 	return vivid_video_g_frequency(file, fh, vf);
299 }
300 
vidioc_s_frequency(struct file * file,void * fh,const struct v4l2_frequency * vf)301 static int vidioc_s_frequency(struct file *file, void *fh, const struct v4l2_frequency *vf)
302 {
303 	struct vivid_dev *dev = video_drvdata(file);
304 	struct video_device *vdev = video_devdata(file);
305 
306 	if (vdev->vfl_type == VFL_TYPE_RADIO)
307 		return vivid_radio_s_frequency(file,
308 			vdev->vfl_dir == VFL_DIR_RX ?
309 			&dev->radio_rx_freq : &dev->radio_tx_freq, vf);
310 	if (vdev->vfl_type == VFL_TYPE_SDR)
311 		return vivid_sdr_s_frequency(file, fh, vf);
312 	return vivid_video_s_frequency(file, fh, vf);
313 }
314 
vidioc_overlay(struct file * file,void * fh,unsigned i)315 static int vidioc_overlay(struct file *file, void *fh, unsigned i)
316 {
317 	struct video_device *vdev = video_devdata(file);
318 
319 	if (vdev->vfl_dir == VFL_DIR_RX)
320 		return vivid_vid_cap_overlay(file, fh, i);
321 	return vivid_vid_out_overlay(file, fh, i);
322 }
323 
vidioc_g_fbuf(struct file * file,void * fh,struct v4l2_framebuffer * a)324 static int vidioc_g_fbuf(struct file *file, void *fh, struct v4l2_framebuffer *a)
325 {
326 	struct video_device *vdev = video_devdata(file);
327 
328 	if (vdev->vfl_dir == VFL_DIR_RX)
329 		return vivid_vid_cap_g_fbuf(file, fh, a);
330 	return vivid_vid_out_g_fbuf(file, fh, a);
331 }
332 
333 /*
334  * Only support the framebuffer of one of the vivid instances.
335  * Anything else is rejected.
336  */
vivid_validate_fb(const struct v4l2_framebuffer * a)337 bool vivid_validate_fb(const struct v4l2_framebuffer *a)
338 {
339 	struct vivid_dev *dev;
340 	int i;
341 
342 	for (i = 0; i < n_devs; i++) {
343 		dev = vivid_devs[i];
344 		if (!dev || !dev->video_pbase)
345 			continue;
346 		if ((unsigned long)a->base == dev->video_pbase &&
347 		    a->fmt.width <= dev->display_width &&
348 		    a->fmt.height <= dev->display_height &&
349 		    a->fmt.bytesperline <= dev->display_byte_stride)
350 			return true;
351 	}
352 	return false;
353 }
354 
vidioc_s_fbuf(struct file * file,void * fh,const struct v4l2_framebuffer * a)355 static int vidioc_s_fbuf(struct file *file, void *fh, const struct v4l2_framebuffer *a)
356 {
357 	struct video_device *vdev = video_devdata(file);
358 
359 	if (vdev->vfl_dir == VFL_DIR_RX)
360 		return vivid_vid_cap_s_fbuf(file, fh, a);
361 	return vivid_vid_out_s_fbuf(file, fh, a);
362 }
363 
vidioc_s_std(struct file * file,void * fh,v4l2_std_id id)364 static int vidioc_s_std(struct file *file, void *fh, v4l2_std_id id)
365 {
366 	struct video_device *vdev = video_devdata(file);
367 
368 	if (vdev->vfl_dir == VFL_DIR_RX)
369 		return vivid_vid_cap_s_std(file, fh, id);
370 	return vivid_vid_out_s_std(file, fh, id);
371 }
372 
vidioc_s_dv_timings(struct file * file,void * fh,struct v4l2_dv_timings * timings)373 static int vidioc_s_dv_timings(struct file *file, void *fh, struct v4l2_dv_timings *timings)
374 {
375 	struct video_device *vdev = video_devdata(file);
376 
377 	if (vdev->vfl_dir == VFL_DIR_RX)
378 		return vivid_vid_cap_s_dv_timings(file, fh, timings);
379 	return vivid_vid_out_s_dv_timings(file, fh, timings);
380 }
381 
vidioc_g_pixelaspect(struct file * file,void * fh,int type,struct v4l2_fract * f)382 static int vidioc_g_pixelaspect(struct file *file, void *fh,
383 				int type, struct v4l2_fract *f)
384 {
385 	struct video_device *vdev = video_devdata(file);
386 
387 	if (vdev->vfl_dir == VFL_DIR_RX)
388 		return vivid_vid_cap_g_pixelaspect(file, fh, type, f);
389 	return vivid_vid_out_g_pixelaspect(file, fh, type, f);
390 }
391 
vidioc_g_selection(struct file * file,void * fh,struct v4l2_selection * sel)392 static int vidioc_g_selection(struct file *file, void *fh,
393 			      struct v4l2_selection *sel)
394 {
395 	struct video_device *vdev = video_devdata(file);
396 
397 	if (vdev->vfl_dir == VFL_DIR_RX)
398 		return vivid_vid_cap_g_selection(file, fh, sel);
399 	return vivid_vid_out_g_selection(file, fh, sel);
400 }
401 
vidioc_s_selection(struct file * file,void * fh,struct v4l2_selection * sel)402 static int vidioc_s_selection(struct file *file, void *fh,
403 			      struct v4l2_selection *sel)
404 {
405 	struct video_device *vdev = video_devdata(file);
406 
407 	if (vdev->vfl_dir == VFL_DIR_RX)
408 		return vivid_vid_cap_s_selection(file, fh, sel);
409 	return vivid_vid_out_s_selection(file, fh, sel);
410 }
411 
vidioc_g_parm(struct file * file,void * fh,struct v4l2_streamparm * parm)412 static int vidioc_g_parm(struct file *file, void *fh,
413 			  struct v4l2_streamparm *parm)
414 {
415 	struct video_device *vdev = video_devdata(file);
416 
417 	if (vdev->vfl_type == VFL_TYPE_TOUCH)
418 		return vivid_g_parm_tch(file, fh, parm);
419 	if (vdev->vfl_dir == VFL_DIR_RX)
420 		return vivid_vid_cap_g_parm(file, fh, parm);
421 	return vivid_vid_out_g_parm(file, fh, parm);
422 }
423 
vidioc_s_parm(struct file * file,void * fh,struct v4l2_streamparm * parm)424 static int vidioc_s_parm(struct file *file, void *fh,
425 			  struct v4l2_streamparm *parm)
426 {
427 	struct video_device *vdev = video_devdata(file);
428 
429 	if (vdev->vfl_dir == VFL_DIR_RX)
430 		return vivid_vid_cap_s_parm(file, fh, parm);
431 	return -ENOTTY;
432 }
433 
vidioc_log_status(struct file * file,void * fh)434 static int vidioc_log_status(struct file *file, void *fh)
435 {
436 	struct vivid_dev *dev = video_drvdata(file);
437 	struct video_device *vdev = video_devdata(file);
438 
439 	v4l2_ctrl_log_status(file, fh);
440 	if (vdev->vfl_dir == VFL_DIR_RX && vdev->vfl_type == VFL_TYPE_VIDEO)
441 		tpg_log_status(&dev->tpg);
442 	return 0;
443 }
444 
vivid_radio_read(struct file * file,char __user * buf,size_t size,loff_t * offset)445 static ssize_t vivid_radio_read(struct file *file, char __user *buf,
446 			 size_t size, loff_t *offset)
447 {
448 	struct video_device *vdev = video_devdata(file);
449 
450 	if (vdev->vfl_dir == VFL_DIR_TX)
451 		return -EINVAL;
452 	return vivid_radio_rx_read(file, buf, size, offset);
453 }
454 
vivid_radio_write(struct file * file,const char __user * buf,size_t size,loff_t * offset)455 static ssize_t vivid_radio_write(struct file *file, const char __user *buf,
456 			  size_t size, loff_t *offset)
457 {
458 	struct video_device *vdev = video_devdata(file);
459 
460 	if (vdev->vfl_dir == VFL_DIR_RX)
461 		return -EINVAL;
462 	return vivid_radio_tx_write(file, buf, size, offset);
463 }
464 
vivid_radio_poll(struct file * file,struct poll_table_struct * wait)465 static __poll_t vivid_radio_poll(struct file *file, struct poll_table_struct *wait)
466 {
467 	struct video_device *vdev = video_devdata(file);
468 
469 	if (vdev->vfl_dir == VFL_DIR_RX)
470 		return vivid_radio_rx_poll(file, wait);
471 	return vivid_radio_tx_poll(file, wait);
472 }
473 
vivid_enum_input(struct file * file,void * priv,struct v4l2_input * inp)474 static int vivid_enum_input(struct file *file, void *priv,
475 			    struct v4l2_input *inp)
476 {
477 	struct video_device *vdev = video_devdata(file);
478 
479 	if (vdev->vfl_type == VFL_TYPE_TOUCH)
480 		return vivid_enum_input_tch(file, priv, inp);
481 	return vidioc_enum_input(file, priv, inp);
482 }
483 
vivid_g_input(struct file * file,void * priv,unsigned int * i)484 static int vivid_g_input(struct file *file, void *priv, unsigned int *i)
485 {
486 	struct video_device *vdev = video_devdata(file);
487 
488 	if (vdev->vfl_type == VFL_TYPE_TOUCH)
489 		return vivid_g_input_tch(file, priv, i);
490 	return vidioc_g_input(file, priv, i);
491 }
492 
vivid_s_input(struct file * file,void * priv,unsigned int i)493 static int vivid_s_input(struct file *file, void *priv, unsigned int i)
494 {
495 	struct video_device *vdev = video_devdata(file);
496 
497 	if (vdev->vfl_type == VFL_TYPE_TOUCH)
498 		return vivid_s_input_tch(file, priv, i);
499 	return vidioc_s_input(file, priv, i);
500 }
501 
vivid_enum_fmt_cap(struct file * file,void * priv,struct v4l2_fmtdesc * f)502 static int vivid_enum_fmt_cap(struct file *file, void  *priv,
503 			      struct v4l2_fmtdesc *f)
504 {
505 	struct video_device *vdev = video_devdata(file);
506 
507 	if (vdev->vfl_type == VFL_TYPE_TOUCH)
508 		return vivid_enum_fmt_tch(file, priv, f);
509 	return vivid_enum_fmt_vid(file, priv, f);
510 }
511 
vivid_g_fmt_cap(struct file * file,void * priv,struct v4l2_format * f)512 static int vivid_g_fmt_cap(struct file *file, void *priv,
513 			   struct v4l2_format *f)
514 {
515 	struct video_device *vdev = video_devdata(file);
516 
517 	if (vdev->vfl_type == VFL_TYPE_TOUCH)
518 		return vivid_g_fmt_tch(file, priv, f);
519 	return vidioc_g_fmt_vid_cap(file, priv, f);
520 }
521 
vivid_try_fmt_cap(struct file * file,void * priv,struct v4l2_format * f)522 static int vivid_try_fmt_cap(struct file *file, void *priv,
523 			     struct v4l2_format *f)
524 {
525 	struct video_device *vdev = video_devdata(file);
526 
527 	if (vdev->vfl_type == VFL_TYPE_TOUCH)
528 		return vivid_g_fmt_tch(file, priv, f);
529 	return vidioc_try_fmt_vid_cap(file, priv, f);
530 }
531 
vivid_s_fmt_cap(struct file * file,void * priv,struct v4l2_format * f)532 static int vivid_s_fmt_cap(struct file *file, void *priv,
533 			   struct v4l2_format *f)
534 {
535 	struct video_device *vdev = video_devdata(file);
536 
537 	if (vdev->vfl_type == VFL_TYPE_TOUCH)
538 		return vivid_g_fmt_tch(file, priv, f);
539 	return vidioc_s_fmt_vid_cap(file, priv, f);
540 }
541 
vivid_g_fmt_cap_mplane(struct file * file,void * priv,struct v4l2_format * f)542 static int vivid_g_fmt_cap_mplane(struct file *file, void *priv,
543 				  struct v4l2_format *f)
544 {
545 	struct video_device *vdev = video_devdata(file);
546 
547 	if (vdev->vfl_type == VFL_TYPE_TOUCH)
548 		return vivid_g_fmt_tch_mplane(file, priv, f);
549 	return vidioc_g_fmt_vid_cap_mplane(file, priv, f);
550 }
551 
vivid_try_fmt_cap_mplane(struct file * file,void * priv,struct v4l2_format * f)552 static int vivid_try_fmt_cap_mplane(struct file *file, void *priv,
553 				    struct v4l2_format *f)
554 {
555 	struct video_device *vdev = video_devdata(file);
556 
557 	if (vdev->vfl_type == VFL_TYPE_TOUCH)
558 		return vivid_g_fmt_tch_mplane(file, priv, f);
559 	return vidioc_try_fmt_vid_cap_mplane(file, priv, f);
560 }
561 
vivid_s_fmt_cap_mplane(struct file * file,void * priv,struct v4l2_format * f)562 static int vivid_s_fmt_cap_mplane(struct file *file, void *priv,
563 				  struct v4l2_format *f)
564 {
565 	struct video_device *vdev = video_devdata(file);
566 
567 	if (vdev->vfl_type == VFL_TYPE_TOUCH)
568 		return vivid_g_fmt_tch_mplane(file, priv, f);
569 	return vidioc_s_fmt_vid_cap_mplane(file, priv, f);
570 }
571 
vivid_is_in_use(struct video_device * vdev)572 static bool vivid_is_in_use(struct video_device *vdev)
573 {
574 	unsigned long flags;
575 	bool res;
576 
577 	spin_lock_irqsave(&vdev->fh_lock, flags);
578 	res = !list_empty(&vdev->fh_list);
579 	spin_unlock_irqrestore(&vdev->fh_lock, flags);
580 	return res;
581 }
582 
vivid_is_last_user(struct vivid_dev * dev)583 static bool vivid_is_last_user(struct vivid_dev *dev)
584 {
585 	unsigned uses = vivid_is_in_use(&dev->vid_cap_dev) +
586 			vivid_is_in_use(&dev->vid_out_dev) +
587 			vivid_is_in_use(&dev->vbi_cap_dev) +
588 			vivid_is_in_use(&dev->vbi_out_dev) +
589 			vivid_is_in_use(&dev->sdr_cap_dev) +
590 			vivid_is_in_use(&dev->radio_rx_dev) +
591 			vivid_is_in_use(&dev->radio_tx_dev) +
592 			vivid_is_in_use(&dev->meta_cap_dev) +
593 			vivid_is_in_use(&dev->meta_out_dev) +
594 			vivid_is_in_use(&dev->touch_cap_dev);
595 
596 	return uses == 1;
597 }
598 
vivid_fop_release(struct file * file)599 static int vivid_fop_release(struct file *file)
600 {
601 	struct vivid_dev *dev = video_drvdata(file);
602 	struct video_device *vdev = video_devdata(file);
603 
604 	mutex_lock(&dev->mutex);
605 	if (!no_error_inj && v4l2_fh_is_singular_file(file) &&
606 	    !video_is_registered(vdev) && vivid_is_last_user(dev)) {
607 		/*
608 		 * I am the last user of this driver, and a disconnect
609 		 * was forced (since this video_device is unregistered),
610 		 * so re-register all video_device's again.
611 		 */
612 		v4l2_info(&dev->v4l2_dev, "reconnect\n");
613 		set_bit(V4L2_FL_REGISTERED, &dev->vid_cap_dev.flags);
614 		set_bit(V4L2_FL_REGISTERED, &dev->vid_out_dev.flags);
615 		set_bit(V4L2_FL_REGISTERED, &dev->vbi_cap_dev.flags);
616 		set_bit(V4L2_FL_REGISTERED, &dev->vbi_out_dev.flags);
617 		set_bit(V4L2_FL_REGISTERED, &dev->sdr_cap_dev.flags);
618 		set_bit(V4L2_FL_REGISTERED, &dev->radio_rx_dev.flags);
619 		set_bit(V4L2_FL_REGISTERED, &dev->radio_tx_dev.flags);
620 		set_bit(V4L2_FL_REGISTERED, &dev->meta_cap_dev.flags);
621 		set_bit(V4L2_FL_REGISTERED, &dev->meta_out_dev.flags);
622 		set_bit(V4L2_FL_REGISTERED, &dev->touch_cap_dev.flags);
623 	}
624 	mutex_unlock(&dev->mutex);
625 	if (file->private_data == dev->overlay_cap_owner)
626 		dev->overlay_cap_owner = NULL;
627 	if (file->private_data == dev->radio_rx_rds_owner) {
628 		dev->radio_rx_rds_last_block = 0;
629 		dev->radio_rx_rds_owner = NULL;
630 	}
631 	if (file->private_data == dev->radio_tx_rds_owner) {
632 		dev->radio_tx_rds_last_block = 0;
633 		dev->radio_tx_rds_owner = NULL;
634 	}
635 	if (vdev->queue)
636 		return vb2_fop_release(file);
637 	return v4l2_fh_release(file);
638 }
639 
640 static const struct v4l2_file_operations vivid_fops = {
641 	.owner		= THIS_MODULE,
642 	.open           = v4l2_fh_open,
643 	.release        = vivid_fop_release,
644 	.read           = vb2_fop_read,
645 	.write          = vb2_fop_write,
646 	.poll		= vb2_fop_poll,
647 	.unlocked_ioctl = video_ioctl2,
648 	.mmap           = vb2_fop_mmap,
649 };
650 
651 static const struct v4l2_file_operations vivid_radio_fops = {
652 	.owner		= THIS_MODULE,
653 	.open           = v4l2_fh_open,
654 	.release        = vivid_fop_release,
655 	.read           = vivid_radio_read,
656 	.write          = vivid_radio_write,
657 	.poll		= vivid_radio_poll,
658 	.unlocked_ioctl = video_ioctl2,
659 };
660 
661 static const struct v4l2_ioctl_ops vivid_ioctl_ops = {
662 	.vidioc_querycap		= vidioc_querycap,
663 
664 	.vidioc_enum_fmt_vid_cap	= vivid_enum_fmt_cap,
665 	.vidioc_g_fmt_vid_cap		= vivid_g_fmt_cap,
666 	.vidioc_try_fmt_vid_cap		= vivid_try_fmt_cap,
667 	.vidioc_s_fmt_vid_cap		= vivid_s_fmt_cap,
668 	.vidioc_g_fmt_vid_cap_mplane	= vivid_g_fmt_cap_mplane,
669 	.vidioc_try_fmt_vid_cap_mplane	= vivid_try_fmt_cap_mplane,
670 	.vidioc_s_fmt_vid_cap_mplane	= vivid_s_fmt_cap_mplane,
671 
672 	.vidioc_enum_fmt_vid_out	= vivid_enum_fmt_vid,
673 	.vidioc_g_fmt_vid_out		= vidioc_g_fmt_vid_out,
674 	.vidioc_try_fmt_vid_out		= vidioc_try_fmt_vid_out,
675 	.vidioc_s_fmt_vid_out		= vidioc_s_fmt_vid_out,
676 	.vidioc_g_fmt_vid_out_mplane	= vidioc_g_fmt_vid_out_mplane,
677 	.vidioc_try_fmt_vid_out_mplane	= vidioc_try_fmt_vid_out_mplane,
678 	.vidioc_s_fmt_vid_out_mplane	= vidioc_s_fmt_vid_out_mplane,
679 
680 	.vidioc_g_selection		= vidioc_g_selection,
681 	.vidioc_s_selection		= vidioc_s_selection,
682 	.vidioc_g_pixelaspect		= vidioc_g_pixelaspect,
683 
684 	.vidioc_g_fmt_vbi_cap		= vidioc_g_fmt_vbi_cap,
685 	.vidioc_try_fmt_vbi_cap		= vidioc_g_fmt_vbi_cap,
686 	.vidioc_s_fmt_vbi_cap		= vidioc_s_fmt_vbi_cap,
687 
688 	.vidioc_g_fmt_sliced_vbi_cap    = vidioc_g_fmt_sliced_vbi_cap,
689 	.vidioc_try_fmt_sliced_vbi_cap  = vidioc_try_fmt_sliced_vbi_cap,
690 	.vidioc_s_fmt_sliced_vbi_cap    = vidioc_s_fmt_sliced_vbi_cap,
691 	.vidioc_g_sliced_vbi_cap	= vidioc_g_sliced_vbi_cap,
692 
693 	.vidioc_g_fmt_vbi_out		= vidioc_g_fmt_vbi_out,
694 	.vidioc_try_fmt_vbi_out		= vidioc_g_fmt_vbi_out,
695 	.vidioc_s_fmt_vbi_out		= vidioc_s_fmt_vbi_out,
696 
697 	.vidioc_g_fmt_sliced_vbi_out    = vidioc_g_fmt_sliced_vbi_out,
698 	.vidioc_try_fmt_sliced_vbi_out  = vidioc_try_fmt_sliced_vbi_out,
699 	.vidioc_s_fmt_sliced_vbi_out    = vidioc_s_fmt_sliced_vbi_out,
700 
701 	.vidioc_enum_fmt_sdr_cap	= vidioc_enum_fmt_sdr_cap,
702 	.vidioc_g_fmt_sdr_cap		= vidioc_g_fmt_sdr_cap,
703 	.vidioc_try_fmt_sdr_cap		= vidioc_try_fmt_sdr_cap,
704 	.vidioc_s_fmt_sdr_cap		= vidioc_s_fmt_sdr_cap,
705 
706 	.vidioc_overlay			= vidioc_overlay,
707 	.vidioc_enum_framesizes		= vidioc_enum_framesizes,
708 	.vidioc_enum_frameintervals	= vidioc_enum_frameintervals,
709 	.vidioc_g_parm			= vidioc_g_parm,
710 	.vidioc_s_parm			= vidioc_s_parm,
711 
712 	.vidioc_enum_fmt_vid_overlay	= vidioc_enum_fmt_vid_overlay,
713 	.vidioc_g_fmt_vid_overlay	= vidioc_g_fmt_vid_overlay,
714 	.vidioc_try_fmt_vid_overlay	= vidioc_try_fmt_vid_overlay,
715 	.vidioc_s_fmt_vid_overlay	= vidioc_s_fmt_vid_overlay,
716 	.vidioc_g_fmt_vid_out_overlay	= vidioc_g_fmt_vid_out_overlay,
717 	.vidioc_try_fmt_vid_out_overlay	= vidioc_try_fmt_vid_out_overlay,
718 	.vidioc_s_fmt_vid_out_overlay	= vidioc_s_fmt_vid_out_overlay,
719 	.vidioc_g_fbuf			= vidioc_g_fbuf,
720 	.vidioc_s_fbuf			= vidioc_s_fbuf,
721 
722 	.vidioc_reqbufs			= vb2_ioctl_reqbufs,
723 	.vidioc_create_bufs		= vb2_ioctl_create_bufs,
724 	.vidioc_prepare_buf		= vb2_ioctl_prepare_buf,
725 	.vidioc_querybuf		= vb2_ioctl_querybuf,
726 	.vidioc_qbuf			= vb2_ioctl_qbuf,
727 	.vidioc_dqbuf			= vb2_ioctl_dqbuf,
728 	.vidioc_expbuf			= vb2_ioctl_expbuf,
729 	.vidioc_streamon		= vb2_ioctl_streamon,
730 	.vidioc_streamoff		= vb2_ioctl_streamoff,
731 
732 	.vidioc_enum_input		= vivid_enum_input,
733 	.vidioc_g_input			= vivid_g_input,
734 	.vidioc_s_input			= vivid_s_input,
735 	.vidioc_s_audio			= vidioc_s_audio,
736 	.vidioc_g_audio			= vidioc_g_audio,
737 	.vidioc_enumaudio		= vidioc_enumaudio,
738 	.vidioc_s_frequency		= vidioc_s_frequency,
739 	.vidioc_g_frequency		= vidioc_g_frequency,
740 	.vidioc_s_tuner			= vidioc_s_tuner,
741 	.vidioc_g_tuner			= vidioc_g_tuner,
742 	.vidioc_s_modulator		= vidioc_s_modulator,
743 	.vidioc_g_modulator		= vidioc_g_modulator,
744 	.vidioc_s_hw_freq_seek		= vidioc_s_hw_freq_seek,
745 	.vidioc_enum_freq_bands		= vidioc_enum_freq_bands,
746 
747 	.vidioc_enum_output		= vidioc_enum_output,
748 	.vidioc_g_output		= vidioc_g_output,
749 	.vidioc_s_output		= vidioc_s_output,
750 	.vidioc_s_audout		= vidioc_s_audout,
751 	.vidioc_g_audout		= vidioc_g_audout,
752 	.vidioc_enumaudout		= vidioc_enumaudout,
753 
754 	.vidioc_querystd		= vidioc_querystd,
755 	.vidioc_g_std			= vidioc_g_std,
756 	.vidioc_s_std			= vidioc_s_std,
757 	.vidioc_s_dv_timings		= vidioc_s_dv_timings,
758 	.vidioc_g_dv_timings		= vidioc_g_dv_timings,
759 	.vidioc_query_dv_timings	= vidioc_query_dv_timings,
760 	.vidioc_enum_dv_timings		= vidioc_enum_dv_timings,
761 	.vidioc_dv_timings_cap		= vidioc_dv_timings_cap,
762 	.vidioc_g_edid			= vidioc_g_edid,
763 	.vidioc_s_edid			= vidioc_s_edid,
764 
765 	.vidioc_log_status		= vidioc_log_status,
766 	.vidioc_subscribe_event		= vidioc_subscribe_event,
767 	.vidioc_unsubscribe_event	= v4l2_event_unsubscribe,
768 
769 	.vidioc_enum_fmt_meta_cap	= vidioc_enum_fmt_meta_cap,
770 	.vidioc_g_fmt_meta_cap		= vidioc_g_fmt_meta_cap,
771 	.vidioc_s_fmt_meta_cap		= vidioc_g_fmt_meta_cap,
772 	.vidioc_try_fmt_meta_cap	= vidioc_g_fmt_meta_cap,
773 
774 	.vidioc_enum_fmt_meta_out       = vidioc_enum_fmt_meta_out,
775 	.vidioc_g_fmt_meta_out          = vidioc_g_fmt_meta_out,
776 	.vidioc_s_fmt_meta_out          = vidioc_g_fmt_meta_out,
777 	.vidioc_try_fmt_meta_out        = vidioc_g_fmt_meta_out,
778 };
779 
780 /* -----------------------------------------------------------------
781 	Initialization and module stuff
782    ------------------------------------------------------------------*/
783 
vivid_dev_release(struct v4l2_device * v4l2_dev)784 static void vivid_dev_release(struct v4l2_device *v4l2_dev)
785 {
786 	struct vivid_dev *dev = container_of(v4l2_dev, struct vivid_dev, v4l2_dev);
787 
788 	vivid_free_controls(dev);
789 	v4l2_device_unregister(&dev->v4l2_dev);
790 #ifdef CONFIG_MEDIA_CONTROLLER
791 	media_device_cleanup(&dev->mdev);
792 #endif
793 	vfree(dev->scaled_line);
794 	vfree(dev->blended_line);
795 	vfree(dev->edid);
796 	vfree(dev->bitmap_cap);
797 	vfree(dev->bitmap_out);
798 	tpg_free(&dev->tpg);
799 	kfree(dev->query_dv_timings_qmenu);
800 	kfree(dev->query_dv_timings_qmenu_strings);
801 	kfree(dev);
802 }
803 
804 #ifdef CONFIG_MEDIA_CONTROLLER
vivid_req_validate(struct media_request * req)805 static int vivid_req_validate(struct media_request *req)
806 {
807 	struct vivid_dev *dev = container_of(req->mdev, struct vivid_dev, mdev);
808 
809 	if (dev->req_validate_error) {
810 		dev->req_validate_error = false;
811 		return -EINVAL;
812 	}
813 	return vb2_request_validate(req);
814 }
815 
816 static const struct media_device_ops vivid_media_ops = {
817 	.req_validate = vivid_req_validate,
818 	.req_queue = vb2_request_queue,
819 };
820 #endif
821 
vivid_create_queue(struct vivid_dev * dev,struct vb2_queue * q,u32 buf_type,unsigned int min_buffers_needed,const struct vb2_ops * ops)822 static int vivid_create_queue(struct vivid_dev *dev,
823 			      struct vb2_queue *q,
824 			      u32 buf_type,
825 			      unsigned int min_buffers_needed,
826 			      const struct vb2_ops *ops)
827 {
828 	if (buf_type == V4L2_BUF_TYPE_VIDEO_CAPTURE && dev->multiplanar)
829 		buf_type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
830 	else if (buf_type == V4L2_BUF_TYPE_VIDEO_OUTPUT && dev->multiplanar)
831 		buf_type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
832 	else if (buf_type == V4L2_BUF_TYPE_VBI_CAPTURE && !dev->has_raw_vbi_cap)
833 		buf_type = V4L2_BUF_TYPE_SLICED_VBI_CAPTURE;
834 	else if (buf_type == V4L2_BUF_TYPE_VBI_OUTPUT && !dev->has_raw_vbi_out)
835 		buf_type = V4L2_BUF_TYPE_SLICED_VBI_OUTPUT;
836 
837 	q->type = buf_type;
838 	q->io_modes = VB2_MMAP | VB2_DMABUF;
839 	q->io_modes |= V4L2_TYPE_IS_OUTPUT(buf_type) ?  VB2_WRITE : VB2_READ;
840 	if (allocators[dev->inst] != 1)
841 		q->io_modes |= VB2_USERPTR;
842 	q->drv_priv = dev;
843 	q->buf_struct_size = sizeof(struct vivid_buffer);
844 	q->ops = ops;
845 	q->mem_ops = allocators[dev->inst] == 1 ? &vb2_dma_contig_memops :
846 						  &vb2_vmalloc_memops;
847 	q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
848 	q->min_buffers_needed = min_buffers_needed;
849 	q->lock = &dev->mutex;
850 	q->dev = dev->v4l2_dev.dev;
851 	q->supports_requests = true;
852 	q->allow_cache_hints = (cache_hints[dev->inst] == 1);
853 
854 	return vb2_queue_init(q);
855 }
856 
vivid_detect_feature_set(struct vivid_dev * dev,int inst,unsigned node_type,bool * has_tuner,bool * has_modulator,int * ccs_cap,int * ccs_out,unsigned in_type_counter[4],unsigned out_type_counter[4])857 static int vivid_detect_feature_set(struct vivid_dev *dev, int inst,
858 				    unsigned node_type,
859 				    bool *has_tuner,
860 				    bool *has_modulator,
861 				    int *ccs_cap,
862 				    int *ccs_out,
863 				    unsigned in_type_counter[4],
864 				    unsigned out_type_counter[4])
865 {
866 	int i;
867 
868 	/* do we use single- or multi-planar? */
869 	dev->multiplanar = multiplanar[inst] > 1;
870 	v4l2_info(&dev->v4l2_dev, "using %splanar format API\n",
871 			dev->multiplanar ? "multi" : "single ");
872 
873 	/* how many inputs do we have and of what type? */
874 	dev->num_inputs = num_inputs[inst];
875 	if (node_type & 0x20007) {
876 		if (dev->num_inputs < 1)
877 			dev->num_inputs = 1;
878 	} else {
879 		dev->num_inputs = 0;
880 	}
881 	if (dev->num_inputs >= MAX_INPUTS)
882 		dev->num_inputs = MAX_INPUTS;
883 	for (i = 0; i < dev->num_inputs; i++) {
884 		dev->input_type[i] = (input_types[inst] >> (i * 2)) & 0x3;
885 		dev->input_name_counter[i] = in_type_counter[dev->input_type[i]]++;
886 	}
887 	dev->has_audio_inputs = in_type_counter[TV] && in_type_counter[SVID];
888 	if (in_type_counter[HDMI] == 16) {
889 		/* The CEC physical address only allows for max 15 inputs */
890 		in_type_counter[HDMI]--;
891 		dev->num_inputs--;
892 	}
893 	dev->num_hdmi_inputs = in_type_counter[HDMI];
894 
895 	/* how many outputs do we have and of what type? */
896 	dev->num_outputs = num_outputs[inst];
897 	if (node_type & 0x40300) {
898 		if (dev->num_outputs < 1)
899 			dev->num_outputs = 1;
900 	} else {
901 		dev->num_outputs = 0;
902 	}
903 	if (dev->num_outputs >= MAX_OUTPUTS)
904 		dev->num_outputs = MAX_OUTPUTS;
905 	for (i = 0; i < dev->num_outputs; i++) {
906 		dev->output_type[i] = ((output_types[inst] >> i) & 1) ? HDMI : SVID;
907 		dev->output_name_counter[i] = out_type_counter[dev->output_type[i]]++;
908 		dev->display_present[i] = true;
909 	}
910 	dev->has_audio_outputs = out_type_counter[SVID];
911 	if (out_type_counter[HDMI] == 16) {
912 		/*
913 		 * The CEC physical address only allows for max 15 inputs,
914 		 * so outputs are also limited to 15 to allow for easy
915 		 * CEC output to input mapping.
916 		 */
917 		out_type_counter[HDMI]--;
918 		dev->num_outputs--;
919 	}
920 	dev->num_hdmi_outputs = out_type_counter[HDMI];
921 
922 	/* do we create a video capture device? */
923 	dev->has_vid_cap = node_type & 0x0001;
924 
925 	/* do we create a vbi capture device? */
926 	if (in_type_counter[TV] || in_type_counter[SVID]) {
927 		dev->has_raw_vbi_cap = node_type & 0x0004;
928 		dev->has_sliced_vbi_cap = node_type & 0x0008;
929 		dev->has_vbi_cap = dev->has_raw_vbi_cap | dev->has_sliced_vbi_cap;
930 	}
931 
932 	/* do we create a meta capture device */
933 	dev->has_meta_cap = node_type & 0x20000;
934 
935 	/* sanity checks */
936 	if ((in_type_counter[WEBCAM] || in_type_counter[HDMI]) &&
937 	    !dev->has_vid_cap && !dev->has_meta_cap) {
938 		v4l2_warn(&dev->v4l2_dev,
939 			  "Webcam or HDMI input without video or metadata nodes\n");
940 		return -EINVAL;
941 	}
942 	if ((in_type_counter[TV] || in_type_counter[SVID]) &&
943 	    !dev->has_vid_cap && !dev->has_vbi_cap && !dev->has_meta_cap) {
944 		v4l2_warn(&dev->v4l2_dev,
945 			  "TV or S-Video input without video, VBI or metadata nodes\n");
946 		return -EINVAL;
947 	}
948 
949 	/* do we create a video output device? */
950 	dev->has_vid_out = node_type & 0x0100;
951 
952 	/* do we create a vbi output device? */
953 	if (out_type_counter[SVID]) {
954 		dev->has_raw_vbi_out = node_type & 0x0400;
955 		dev->has_sliced_vbi_out = node_type & 0x0800;
956 		dev->has_vbi_out = dev->has_raw_vbi_out | dev->has_sliced_vbi_out;
957 	}
958 
959 	/* do we create a metadata output device */
960 	dev->has_meta_out = node_type & 0x40000;
961 
962 	/* sanity checks */
963 	if (out_type_counter[SVID] &&
964 	    !dev->has_vid_out && !dev->has_vbi_out && !dev->has_meta_out) {
965 		v4l2_warn(&dev->v4l2_dev,
966 			  "S-Video output without video, VBI or metadata nodes\n");
967 		return -EINVAL;
968 	}
969 	if (out_type_counter[HDMI] && !dev->has_vid_out && !dev->has_meta_out) {
970 		v4l2_warn(&dev->v4l2_dev,
971 			  "HDMI output without video or metadata nodes\n");
972 		return -EINVAL;
973 	}
974 
975 	/* do we create a radio receiver device? */
976 	dev->has_radio_rx = node_type & 0x0010;
977 
978 	/* do we create a radio transmitter device? */
979 	dev->has_radio_tx = node_type & 0x1000;
980 
981 	/* do we create a software defined radio capture device? */
982 	dev->has_sdr_cap = node_type & 0x0020;
983 
984 	/* do we have a TV tuner? */
985 	dev->has_tv_tuner = in_type_counter[TV];
986 
987 	/* do we have a tuner? */
988 	*has_tuner = ((dev->has_vid_cap || dev->has_vbi_cap) && in_type_counter[TV]) ||
989 		      dev->has_radio_rx || dev->has_sdr_cap;
990 
991 	/* do we have a modulator? */
992 	*has_modulator = dev->has_radio_tx;
993 
994 	if (dev->has_vid_cap)
995 		/* do we have a framebuffer for overlay testing? */
996 		dev->has_fb = node_type & 0x10000;
997 
998 	/* can we do crop/compose/scaling while capturing? */
999 	if (no_error_inj && *ccs_cap == -1)
1000 		*ccs_cap = 7;
1001 
1002 	/* if ccs_cap == -1, then the user can select it using controls */
1003 	if (*ccs_cap != -1) {
1004 		dev->has_crop_cap = *ccs_cap & 1;
1005 		dev->has_compose_cap = *ccs_cap & 2;
1006 		dev->has_scaler_cap = *ccs_cap & 4;
1007 		v4l2_info(&dev->v4l2_dev, "Capture Crop: %c Compose: %c Scaler: %c\n",
1008 			dev->has_crop_cap ? 'Y' : 'N',
1009 			dev->has_compose_cap ? 'Y' : 'N',
1010 			dev->has_scaler_cap ? 'Y' : 'N');
1011 	}
1012 
1013 	/* can we do crop/compose/scaling with video output? */
1014 	if (no_error_inj && *ccs_out == -1)
1015 		*ccs_out = 7;
1016 
1017 	/* if ccs_out == -1, then the user can select it using controls */
1018 	if (*ccs_out != -1) {
1019 		dev->has_crop_out = *ccs_out & 1;
1020 		dev->has_compose_out = *ccs_out & 2;
1021 		dev->has_scaler_out = *ccs_out & 4;
1022 		v4l2_info(&dev->v4l2_dev, "Output Crop: %c Compose: %c Scaler: %c\n",
1023 			dev->has_crop_out ? 'Y' : 'N',
1024 			dev->has_compose_out ? 'Y' : 'N',
1025 			dev->has_scaler_out ? 'Y' : 'N');
1026 	}
1027 
1028 	/* do we create a touch capture device */
1029 	dev->has_touch_cap = node_type & 0x80000;
1030 
1031 	return 0;
1032 }
1033 
vivid_set_capabilities(struct vivid_dev * dev)1034 static void vivid_set_capabilities(struct vivid_dev *dev)
1035 {
1036 	if (dev->has_vid_cap) {
1037 		/* set up the capabilities of the video capture device */
1038 		dev->vid_cap_caps = dev->multiplanar ?
1039 			V4L2_CAP_VIDEO_CAPTURE_MPLANE :
1040 			V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_OVERLAY;
1041 		dev->vid_cap_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
1042 		if (dev->has_audio_inputs)
1043 			dev->vid_cap_caps |= V4L2_CAP_AUDIO;
1044 		if (dev->has_tv_tuner)
1045 			dev->vid_cap_caps |= V4L2_CAP_TUNER;
1046 	}
1047 	if (dev->has_vid_out) {
1048 		/* set up the capabilities of the video output device */
1049 		dev->vid_out_caps = dev->multiplanar ?
1050 			V4L2_CAP_VIDEO_OUTPUT_MPLANE :
1051 			V4L2_CAP_VIDEO_OUTPUT;
1052 		if (dev->has_fb)
1053 			dev->vid_out_caps |= V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
1054 		dev->vid_out_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
1055 		if (dev->has_audio_outputs)
1056 			dev->vid_out_caps |= V4L2_CAP_AUDIO;
1057 	}
1058 	if (dev->has_vbi_cap) {
1059 		/* set up the capabilities of the vbi capture device */
1060 		dev->vbi_cap_caps = (dev->has_raw_vbi_cap ? V4L2_CAP_VBI_CAPTURE : 0) |
1061 				    (dev->has_sliced_vbi_cap ? V4L2_CAP_SLICED_VBI_CAPTURE : 0);
1062 		dev->vbi_cap_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
1063 		if (dev->has_audio_inputs)
1064 			dev->vbi_cap_caps |= V4L2_CAP_AUDIO;
1065 		if (dev->has_tv_tuner)
1066 			dev->vbi_cap_caps |= V4L2_CAP_TUNER;
1067 	}
1068 	if (dev->has_vbi_out) {
1069 		/* set up the capabilities of the vbi output device */
1070 		dev->vbi_out_caps = (dev->has_raw_vbi_out ? V4L2_CAP_VBI_OUTPUT : 0) |
1071 				    (dev->has_sliced_vbi_out ? V4L2_CAP_SLICED_VBI_OUTPUT : 0);
1072 		dev->vbi_out_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
1073 		if (dev->has_audio_outputs)
1074 			dev->vbi_out_caps |= V4L2_CAP_AUDIO;
1075 	}
1076 	if (dev->has_sdr_cap) {
1077 		/* set up the capabilities of the sdr capture device */
1078 		dev->sdr_cap_caps = V4L2_CAP_SDR_CAPTURE | V4L2_CAP_TUNER;
1079 		dev->sdr_cap_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
1080 	}
1081 	/* set up the capabilities of the radio receiver device */
1082 	if (dev->has_radio_rx)
1083 		dev->radio_rx_caps = V4L2_CAP_RADIO | V4L2_CAP_RDS_CAPTURE |
1084 				     V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_TUNER |
1085 				     V4L2_CAP_READWRITE;
1086 	/* set up the capabilities of the radio transmitter device */
1087 	if (dev->has_radio_tx)
1088 		dev->radio_tx_caps = V4L2_CAP_RDS_OUTPUT | V4L2_CAP_MODULATOR |
1089 				     V4L2_CAP_READWRITE;
1090 
1091 	/* set up the capabilities of meta capture device */
1092 	if (dev->has_meta_cap) {
1093 		dev->meta_cap_caps = V4L2_CAP_META_CAPTURE |
1094 				     V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
1095 		if (dev->has_audio_inputs)
1096 			dev->meta_cap_caps |= V4L2_CAP_AUDIO;
1097 		if (dev->has_tv_tuner)
1098 			dev->meta_cap_caps |= V4L2_CAP_TUNER;
1099 	}
1100 	/* set up the capabilities of meta output device */
1101 	if (dev->has_meta_out) {
1102 		dev->meta_out_caps = V4L2_CAP_META_OUTPUT |
1103 				     V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
1104 		if (dev->has_audio_outputs)
1105 			dev->meta_out_caps |= V4L2_CAP_AUDIO;
1106 	}
1107 	/* set up the capabilities of the touch capture device */
1108 	if (dev->has_touch_cap) {
1109 		dev->touch_cap_caps = V4L2_CAP_TOUCH | V4L2_CAP_STREAMING |
1110 				      V4L2_CAP_READWRITE;
1111 		dev->touch_cap_caps |= dev->multiplanar ?
1112 			V4L2_CAP_VIDEO_CAPTURE_MPLANE : V4L2_CAP_VIDEO_CAPTURE;
1113 	}
1114 }
1115 
vivid_disable_unused_ioctls(struct vivid_dev * dev,bool has_tuner,bool has_modulator,unsigned in_type_counter[4],unsigned out_type_counter[4])1116 static void vivid_disable_unused_ioctls(struct vivid_dev *dev,
1117 					bool has_tuner,
1118 					bool has_modulator,
1119 					unsigned in_type_counter[4],
1120 					unsigned out_type_counter[4])
1121 {
1122 	/* disable invalid ioctls based on the feature set */
1123 	if (!dev->has_audio_inputs) {
1124 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_AUDIO);
1125 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_AUDIO);
1126 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_ENUMAUDIO);
1127 		v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_AUDIO);
1128 		v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_G_AUDIO);
1129 		v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_ENUMAUDIO);
1130 		v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_S_AUDIO);
1131 		v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_G_AUDIO);
1132 		v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_ENUMAUDIO);
1133 	}
1134 	if (!dev->has_audio_outputs) {
1135 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_AUDOUT);
1136 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_AUDOUT);
1137 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUMAUDOUT);
1138 		v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_S_AUDOUT);
1139 		v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_G_AUDOUT);
1140 		v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_ENUMAUDOUT);
1141 		v4l2_disable_ioctl(&dev->meta_out_dev, VIDIOC_S_AUDOUT);
1142 		v4l2_disable_ioctl(&dev->meta_out_dev, VIDIOC_G_AUDOUT);
1143 		v4l2_disable_ioctl(&dev->meta_out_dev, VIDIOC_ENUMAUDOUT);
1144 	}
1145 	if (!in_type_counter[TV] && !in_type_counter[SVID]) {
1146 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_STD);
1147 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_STD);
1148 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_ENUMSTD);
1149 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_QUERYSTD);
1150 	}
1151 	if (!out_type_counter[SVID]) {
1152 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_STD);
1153 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_STD);
1154 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUMSTD);
1155 	}
1156 	if (!has_tuner && !has_modulator) {
1157 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_FREQUENCY);
1158 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_FREQUENCY);
1159 		v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_FREQUENCY);
1160 		v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_G_FREQUENCY);
1161 		v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_S_FREQUENCY);
1162 		v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_G_FREQUENCY);
1163 	}
1164 	if (!has_tuner) {
1165 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_TUNER);
1166 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_TUNER);
1167 		v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_TUNER);
1168 		v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_G_TUNER);
1169 		v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_S_TUNER);
1170 		v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_G_TUNER);
1171 	}
1172 	if (in_type_counter[HDMI] == 0) {
1173 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_EDID);
1174 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_EDID);
1175 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_DV_TIMINGS_CAP);
1176 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_DV_TIMINGS);
1177 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_DV_TIMINGS);
1178 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_ENUM_DV_TIMINGS);
1179 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_QUERY_DV_TIMINGS);
1180 	}
1181 	if (out_type_counter[HDMI] == 0) {
1182 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_EDID);
1183 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_DV_TIMINGS_CAP);
1184 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_DV_TIMINGS);
1185 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_DV_TIMINGS);
1186 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUM_DV_TIMINGS);
1187 	}
1188 	if (!dev->has_fb) {
1189 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_FBUF);
1190 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_FBUF);
1191 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_OVERLAY);
1192 	}
1193 	v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_HW_FREQ_SEEK);
1194 	v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_HW_FREQ_SEEK);
1195 	v4l2_disable_ioctl(&dev->sdr_cap_dev, VIDIOC_S_HW_FREQ_SEEK);
1196 	v4l2_disable_ioctl(&dev->meta_cap_dev, VIDIOC_S_HW_FREQ_SEEK);
1197 	v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_FREQUENCY);
1198 	v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_FREQUENCY);
1199 	v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUM_FRAMESIZES);
1200 	v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUM_FRAMEINTERVALS);
1201 	v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_S_FREQUENCY);
1202 	v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_G_FREQUENCY);
1203 	v4l2_disable_ioctl(&dev->meta_out_dev, VIDIOC_S_FREQUENCY);
1204 	v4l2_disable_ioctl(&dev->meta_out_dev, VIDIOC_G_FREQUENCY);
1205 	v4l2_disable_ioctl(&dev->touch_cap_dev, VIDIOC_S_PARM);
1206 	v4l2_disable_ioctl(&dev->touch_cap_dev, VIDIOC_ENUM_FRAMESIZES);
1207 	v4l2_disable_ioctl(&dev->touch_cap_dev, VIDIOC_ENUM_FRAMEINTERVALS);
1208 }
1209 
vivid_init_dv_timings(struct vivid_dev * dev)1210 static int vivid_init_dv_timings(struct vivid_dev *dev)
1211 {
1212 	int i;
1213 
1214 	while (v4l2_dv_timings_presets[dev->query_dv_timings_size].bt.width)
1215 		dev->query_dv_timings_size++;
1216 
1217 	/*
1218 	 * Create a char pointer array that points to the names of all the
1219 	 * preset timings
1220 	 */
1221 	dev->query_dv_timings_qmenu = kmalloc_array(dev->query_dv_timings_size,
1222 						    sizeof(char *), GFP_KERNEL);
1223 	/*
1224 	 * Create a string array containing the names of all the preset
1225 	 * timings. Each name is max 31 chars long (+ terminating 0).
1226 	 */
1227 	dev->query_dv_timings_qmenu_strings =
1228 		kmalloc_array(dev->query_dv_timings_size, 32, GFP_KERNEL);
1229 
1230 	if (!dev->query_dv_timings_qmenu ||
1231 	    !dev->query_dv_timings_qmenu_strings)
1232 		return -ENOMEM;
1233 
1234 	for (i = 0; i < dev->query_dv_timings_size; i++) {
1235 		const struct v4l2_bt_timings *bt = &v4l2_dv_timings_presets[i].bt;
1236 		char *p = dev->query_dv_timings_qmenu_strings + i * 32;
1237 		u32 htot, vtot;
1238 
1239 		dev->query_dv_timings_qmenu[i] = p;
1240 
1241 		htot = V4L2_DV_BT_FRAME_WIDTH(bt);
1242 		vtot = V4L2_DV_BT_FRAME_HEIGHT(bt);
1243 		snprintf(p, 32, "%ux%u%s%u",
1244 			bt->width, bt->height, bt->interlaced ? "i" : "p",
1245 			(u32)bt->pixelclock / (htot * vtot));
1246 	}
1247 
1248 	return 0;
1249 }
1250 
vivid_create_queues(struct vivid_dev * dev)1251 static int vivid_create_queues(struct vivid_dev *dev)
1252 {
1253 	int ret;
1254 
1255 	/* start creating the vb2 queues */
1256 	if (dev->has_vid_cap) {
1257 		/* initialize vid_cap queue */
1258 		ret = vivid_create_queue(dev, &dev->vb_vid_cap_q,
1259 					 V4L2_BUF_TYPE_VIDEO_CAPTURE, 2,
1260 					 &vivid_vid_cap_qops);
1261 		if (ret)
1262 			return ret;
1263 	}
1264 
1265 	if (dev->has_vid_out) {
1266 		/* initialize vid_out queue */
1267 		ret = vivid_create_queue(dev, &dev->vb_vid_out_q,
1268 					 V4L2_BUF_TYPE_VIDEO_OUTPUT, 2,
1269 					 &vivid_vid_out_qops);
1270 		if (ret)
1271 			return ret;
1272 	}
1273 
1274 	if (dev->has_vbi_cap) {
1275 		/* initialize vbi_cap queue */
1276 		ret = vivid_create_queue(dev, &dev->vb_vbi_cap_q,
1277 					 V4L2_BUF_TYPE_VBI_CAPTURE, 2,
1278 					 &vivid_vbi_cap_qops);
1279 		if (ret)
1280 			return ret;
1281 	}
1282 
1283 	if (dev->has_vbi_out) {
1284 		/* initialize vbi_out queue */
1285 		ret = vivid_create_queue(dev, &dev->vb_vbi_out_q,
1286 					 V4L2_BUF_TYPE_VBI_OUTPUT, 2,
1287 					 &vivid_vbi_out_qops);
1288 		if (ret)
1289 			return ret;
1290 	}
1291 
1292 	if (dev->has_sdr_cap) {
1293 		/* initialize sdr_cap queue */
1294 		ret = vivid_create_queue(dev, &dev->vb_sdr_cap_q,
1295 					 V4L2_BUF_TYPE_SDR_CAPTURE, 8,
1296 					 &vivid_sdr_cap_qops);
1297 		if (ret)
1298 			return ret;
1299 	}
1300 
1301 	if (dev->has_meta_cap) {
1302 		/* initialize meta_cap queue */
1303 		ret = vivid_create_queue(dev, &dev->vb_meta_cap_q,
1304 					 V4L2_BUF_TYPE_META_CAPTURE, 2,
1305 					 &vivid_meta_cap_qops);
1306 		if (ret)
1307 			return ret;
1308 	}
1309 
1310 	if (dev->has_meta_out) {
1311 		/* initialize meta_out queue */
1312 		ret = vivid_create_queue(dev, &dev->vb_meta_out_q,
1313 					 V4L2_BUF_TYPE_META_OUTPUT, 1,
1314 					 &vivid_meta_out_qops);
1315 		if (ret)
1316 			return ret;
1317 	}
1318 
1319 	if (dev->has_touch_cap) {
1320 		/* initialize touch_cap queue */
1321 		ret = vivid_create_queue(dev, &dev->vb_touch_cap_q,
1322 					 V4L2_BUF_TYPE_VIDEO_CAPTURE, 1,
1323 					 &vivid_touch_cap_qops);
1324 		if (ret)
1325 			return ret;
1326 	}
1327 
1328 	if (dev->has_fb) {
1329 		/* Create framebuffer for testing capture/output overlay */
1330 		ret = vivid_fb_init(dev);
1331 		if (ret)
1332 			return ret;
1333 		v4l2_info(&dev->v4l2_dev, "Framebuffer device registered as fb%d\n",
1334 			  dev->fb_info.node);
1335 	}
1336 	return 0;
1337 }
1338 
vivid_create_devnodes(struct platform_device * pdev,struct vivid_dev * dev,int inst,unsigned int cec_tx_bus_cnt,v4l2_std_id tvnorms_cap,v4l2_std_id tvnorms_out,unsigned in_type_counter[4],unsigned out_type_counter[4])1339 static int vivid_create_devnodes(struct platform_device *pdev,
1340 				 struct vivid_dev *dev, int inst,
1341 				 unsigned int cec_tx_bus_cnt,
1342 				 v4l2_std_id tvnorms_cap,
1343 				 v4l2_std_id tvnorms_out,
1344 				 unsigned in_type_counter[4],
1345 				 unsigned out_type_counter[4])
1346 {
1347 	struct video_device *vfd;
1348 	int ret;
1349 
1350 	if (dev->has_vid_cap) {
1351 		vfd = &dev->vid_cap_dev;
1352 		snprintf(vfd->name, sizeof(vfd->name),
1353 			 "vivid-%03d-vid-cap", inst);
1354 		vfd->fops = &vivid_fops;
1355 		vfd->ioctl_ops = &vivid_ioctl_ops;
1356 		vfd->device_caps = dev->vid_cap_caps;
1357 		vfd->release = video_device_release_empty;
1358 		vfd->v4l2_dev = &dev->v4l2_dev;
1359 		vfd->queue = &dev->vb_vid_cap_q;
1360 		vfd->tvnorms = tvnorms_cap;
1361 
1362 		/*
1363 		 * Provide a mutex to v4l2 core. It will be used to protect
1364 		 * all fops and v4l2 ioctls.
1365 		 */
1366 		vfd->lock = &dev->mutex;
1367 		video_set_drvdata(vfd, dev);
1368 
1369 #ifdef CONFIG_MEDIA_CONTROLLER
1370 		dev->vid_cap_pad.flags = MEDIA_PAD_FL_SINK;
1371 		ret = media_entity_pads_init(&vfd->entity, 1, &dev->vid_cap_pad);
1372 		if (ret)
1373 			return ret;
1374 #endif
1375 
1376 #ifdef CONFIG_VIDEO_VIVID_CEC
1377 		if (in_type_counter[HDMI]) {
1378 			ret = cec_register_adapter(dev->cec_rx_adap, &pdev->dev);
1379 			if (ret < 0) {
1380 				cec_delete_adapter(dev->cec_rx_adap);
1381 				dev->cec_rx_adap = NULL;
1382 				return ret;
1383 			}
1384 			cec_s_phys_addr(dev->cec_rx_adap, 0, false);
1385 			v4l2_info(&dev->v4l2_dev, "CEC adapter %s registered for HDMI input 0\n",
1386 				  dev_name(&dev->cec_rx_adap->devnode.dev));
1387 		}
1388 #endif
1389 
1390 		ret = video_register_device(vfd, VFL_TYPE_VIDEO, vid_cap_nr[inst]);
1391 		if (ret < 0)
1392 			return ret;
1393 		v4l2_info(&dev->v4l2_dev, "V4L2 capture device registered as %s\n",
1394 					  video_device_node_name(vfd));
1395 	}
1396 
1397 	if (dev->has_vid_out) {
1398 #ifdef CONFIG_VIDEO_VIVID_CEC
1399 		int i;
1400 #endif
1401 		vfd = &dev->vid_out_dev;
1402 		snprintf(vfd->name, sizeof(vfd->name),
1403 			 "vivid-%03d-vid-out", inst);
1404 		vfd->vfl_dir = VFL_DIR_TX;
1405 		vfd->fops = &vivid_fops;
1406 		vfd->ioctl_ops = &vivid_ioctl_ops;
1407 		vfd->device_caps = dev->vid_out_caps;
1408 		vfd->release = video_device_release_empty;
1409 		vfd->v4l2_dev = &dev->v4l2_dev;
1410 		vfd->queue = &dev->vb_vid_out_q;
1411 		vfd->tvnorms = tvnorms_out;
1412 
1413 		/*
1414 		 * Provide a mutex to v4l2 core. It will be used to protect
1415 		 * all fops and v4l2 ioctls.
1416 		 */
1417 		vfd->lock = &dev->mutex;
1418 		video_set_drvdata(vfd, dev);
1419 
1420 #ifdef CONFIG_MEDIA_CONTROLLER
1421 		dev->vid_out_pad.flags = MEDIA_PAD_FL_SOURCE;
1422 		ret = media_entity_pads_init(&vfd->entity, 1, &dev->vid_out_pad);
1423 		if (ret)
1424 			return ret;
1425 #endif
1426 
1427 #ifdef CONFIG_VIDEO_VIVID_CEC
1428 		for (i = 0; i < cec_tx_bus_cnt; i++) {
1429 			ret = cec_register_adapter(dev->cec_tx_adap[i], &pdev->dev);
1430 			if (ret < 0) {
1431 				for (; i < cec_tx_bus_cnt; i++) {
1432 					cec_delete_adapter(dev->cec_tx_adap[i]);
1433 					dev->cec_tx_adap[i] = NULL;
1434 				}
1435 				return ret;
1436 			}
1437 			v4l2_info(&dev->v4l2_dev, "CEC adapter %s registered for HDMI output %d\n",
1438 				  dev_name(&dev->cec_tx_adap[i]->devnode.dev), i);
1439 			if (i < out_type_counter[HDMI])
1440 				cec_s_phys_addr(dev->cec_tx_adap[i], (i + 1) << 12, false);
1441 			else
1442 				cec_s_phys_addr(dev->cec_tx_adap[i], 0x1000, false);
1443 		}
1444 #endif
1445 
1446 		ret = video_register_device(vfd, VFL_TYPE_VIDEO, vid_out_nr[inst]);
1447 		if (ret < 0)
1448 			return ret;
1449 		v4l2_info(&dev->v4l2_dev, "V4L2 output device registered as %s\n",
1450 					  video_device_node_name(vfd));
1451 	}
1452 
1453 	if (dev->has_vbi_cap) {
1454 		vfd = &dev->vbi_cap_dev;
1455 		snprintf(vfd->name, sizeof(vfd->name),
1456 			 "vivid-%03d-vbi-cap", inst);
1457 		vfd->fops = &vivid_fops;
1458 		vfd->ioctl_ops = &vivid_ioctl_ops;
1459 		vfd->device_caps = dev->vbi_cap_caps;
1460 		vfd->release = video_device_release_empty;
1461 		vfd->v4l2_dev = &dev->v4l2_dev;
1462 		vfd->queue = &dev->vb_vbi_cap_q;
1463 		vfd->lock = &dev->mutex;
1464 		vfd->tvnorms = tvnorms_cap;
1465 		video_set_drvdata(vfd, dev);
1466 
1467 #ifdef CONFIG_MEDIA_CONTROLLER
1468 		dev->vbi_cap_pad.flags = MEDIA_PAD_FL_SINK;
1469 		ret = media_entity_pads_init(&vfd->entity, 1, &dev->vbi_cap_pad);
1470 		if (ret)
1471 			return ret;
1472 #endif
1473 
1474 		ret = video_register_device(vfd, VFL_TYPE_VBI, vbi_cap_nr[inst]);
1475 		if (ret < 0)
1476 			return ret;
1477 		v4l2_info(&dev->v4l2_dev, "V4L2 capture device registered as %s, supports %s VBI\n",
1478 					  video_device_node_name(vfd),
1479 					  (dev->has_raw_vbi_cap && dev->has_sliced_vbi_cap) ?
1480 					  "raw and sliced" :
1481 					  (dev->has_raw_vbi_cap ? "raw" : "sliced"));
1482 	}
1483 
1484 	if (dev->has_vbi_out) {
1485 		vfd = &dev->vbi_out_dev;
1486 		snprintf(vfd->name, sizeof(vfd->name),
1487 			 "vivid-%03d-vbi-out", inst);
1488 		vfd->vfl_dir = VFL_DIR_TX;
1489 		vfd->fops = &vivid_fops;
1490 		vfd->ioctl_ops = &vivid_ioctl_ops;
1491 		vfd->device_caps = dev->vbi_out_caps;
1492 		vfd->release = video_device_release_empty;
1493 		vfd->v4l2_dev = &dev->v4l2_dev;
1494 		vfd->queue = &dev->vb_vbi_out_q;
1495 		vfd->lock = &dev->mutex;
1496 		vfd->tvnorms = tvnorms_out;
1497 		video_set_drvdata(vfd, dev);
1498 
1499 #ifdef CONFIG_MEDIA_CONTROLLER
1500 		dev->vbi_out_pad.flags = MEDIA_PAD_FL_SOURCE;
1501 		ret = media_entity_pads_init(&vfd->entity, 1, &dev->vbi_out_pad);
1502 		if (ret)
1503 			return ret;
1504 #endif
1505 
1506 		ret = video_register_device(vfd, VFL_TYPE_VBI, vbi_out_nr[inst]);
1507 		if (ret < 0)
1508 			return ret;
1509 		v4l2_info(&dev->v4l2_dev, "V4L2 output device registered as %s, supports %s VBI\n",
1510 					  video_device_node_name(vfd),
1511 					  (dev->has_raw_vbi_out && dev->has_sliced_vbi_out) ?
1512 					  "raw and sliced" :
1513 					  (dev->has_raw_vbi_out ? "raw" : "sliced"));
1514 	}
1515 
1516 	if (dev->has_sdr_cap) {
1517 		vfd = &dev->sdr_cap_dev;
1518 		snprintf(vfd->name, sizeof(vfd->name),
1519 			 "vivid-%03d-sdr-cap", inst);
1520 		vfd->fops = &vivid_fops;
1521 		vfd->ioctl_ops = &vivid_ioctl_ops;
1522 		vfd->device_caps = dev->sdr_cap_caps;
1523 		vfd->release = video_device_release_empty;
1524 		vfd->v4l2_dev = &dev->v4l2_dev;
1525 		vfd->queue = &dev->vb_sdr_cap_q;
1526 		vfd->lock = &dev->mutex;
1527 		video_set_drvdata(vfd, dev);
1528 
1529 #ifdef CONFIG_MEDIA_CONTROLLER
1530 		dev->sdr_cap_pad.flags = MEDIA_PAD_FL_SINK;
1531 		ret = media_entity_pads_init(&vfd->entity, 1, &dev->sdr_cap_pad);
1532 		if (ret)
1533 			return ret;
1534 #endif
1535 
1536 		ret = video_register_device(vfd, VFL_TYPE_SDR, sdr_cap_nr[inst]);
1537 		if (ret < 0)
1538 			return ret;
1539 		v4l2_info(&dev->v4l2_dev, "V4L2 capture device registered as %s\n",
1540 					  video_device_node_name(vfd));
1541 	}
1542 
1543 	if (dev->has_radio_rx) {
1544 		vfd = &dev->radio_rx_dev;
1545 		snprintf(vfd->name, sizeof(vfd->name),
1546 			 "vivid-%03d-rad-rx", inst);
1547 		vfd->fops = &vivid_radio_fops;
1548 		vfd->ioctl_ops = &vivid_ioctl_ops;
1549 		vfd->device_caps = dev->radio_rx_caps;
1550 		vfd->release = video_device_release_empty;
1551 		vfd->v4l2_dev = &dev->v4l2_dev;
1552 		vfd->lock = &dev->mutex;
1553 		video_set_drvdata(vfd, dev);
1554 
1555 		ret = video_register_device(vfd, VFL_TYPE_RADIO, radio_rx_nr[inst]);
1556 		if (ret < 0)
1557 			return ret;
1558 		v4l2_info(&dev->v4l2_dev, "V4L2 receiver device registered as %s\n",
1559 					  video_device_node_name(vfd));
1560 	}
1561 
1562 	if (dev->has_radio_tx) {
1563 		vfd = &dev->radio_tx_dev;
1564 		snprintf(vfd->name, sizeof(vfd->name),
1565 			 "vivid-%03d-rad-tx", inst);
1566 		vfd->vfl_dir = VFL_DIR_TX;
1567 		vfd->fops = &vivid_radio_fops;
1568 		vfd->ioctl_ops = &vivid_ioctl_ops;
1569 		vfd->device_caps = dev->radio_tx_caps;
1570 		vfd->release = video_device_release_empty;
1571 		vfd->v4l2_dev = &dev->v4l2_dev;
1572 		vfd->lock = &dev->mutex;
1573 		video_set_drvdata(vfd, dev);
1574 
1575 		ret = video_register_device(vfd, VFL_TYPE_RADIO, radio_tx_nr[inst]);
1576 		if (ret < 0)
1577 			return ret;
1578 		v4l2_info(&dev->v4l2_dev, "V4L2 transmitter device registered as %s\n",
1579 					  video_device_node_name(vfd));
1580 	}
1581 
1582 	if (dev->has_meta_cap) {
1583 		vfd = &dev->meta_cap_dev;
1584 		snprintf(vfd->name, sizeof(vfd->name),
1585 			 "vivid-%03d-meta-cap", inst);
1586 		vfd->fops = &vivid_fops;
1587 		vfd->ioctl_ops = &vivid_ioctl_ops;
1588 		vfd->device_caps = dev->meta_cap_caps;
1589 		vfd->release = video_device_release_empty;
1590 		vfd->v4l2_dev = &dev->v4l2_dev;
1591 		vfd->queue = &dev->vb_meta_cap_q;
1592 		vfd->lock = &dev->mutex;
1593 		vfd->tvnorms = tvnorms_cap;
1594 		video_set_drvdata(vfd, dev);
1595 #ifdef CONFIG_MEDIA_CONTROLLER
1596 		dev->meta_cap_pad.flags = MEDIA_PAD_FL_SINK;
1597 		ret = media_entity_pads_init(&vfd->entity, 1,
1598 					     &dev->meta_cap_pad);
1599 		if (ret)
1600 			return ret;
1601 #endif
1602 		ret = video_register_device(vfd, VFL_TYPE_VIDEO,
1603 					    meta_cap_nr[inst]);
1604 		if (ret < 0)
1605 			return ret;
1606 		v4l2_info(&dev->v4l2_dev,
1607 			  "V4L2 metadata capture device registered as %s\n",
1608 			  video_device_node_name(vfd));
1609 	}
1610 
1611 	if (dev->has_meta_out) {
1612 		vfd = &dev->meta_out_dev;
1613 		snprintf(vfd->name, sizeof(vfd->name),
1614 			 "vivid-%03d-meta-out", inst);
1615 		vfd->vfl_dir = VFL_DIR_TX;
1616 		vfd->fops = &vivid_fops;
1617 		vfd->ioctl_ops = &vivid_ioctl_ops;
1618 		vfd->device_caps = dev->meta_out_caps;
1619 		vfd->release = video_device_release_empty;
1620 		vfd->v4l2_dev = &dev->v4l2_dev;
1621 		vfd->queue = &dev->vb_meta_out_q;
1622 		vfd->lock = &dev->mutex;
1623 		vfd->tvnorms = tvnorms_out;
1624 		video_set_drvdata(vfd, dev);
1625 #ifdef CONFIG_MEDIA_CONTROLLER
1626 		dev->meta_out_pad.flags = MEDIA_PAD_FL_SOURCE;
1627 		ret = media_entity_pads_init(&vfd->entity, 1,
1628 					     &dev->meta_out_pad);
1629 		if (ret)
1630 			return ret;
1631 #endif
1632 		ret = video_register_device(vfd, VFL_TYPE_VIDEO,
1633 					    meta_out_nr[inst]);
1634 		if (ret < 0)
1635 			return ret;
1636 		v4l2_info(&dev->v4l2_dev,
1637 			  "V4L2 metadata output device registered as %s\n",
1638 			  video_device_node_name(vfd));
1639 	}
1640 
1641 	if (dev->has_touch_cap) {
1642 		vfd = &dev->touch_cap_dev;
1643 		snprintf(vfd->name, sizeof(vfd->name),
1644 			 "vivid-%03d-touch-cap", inst);
1645 		vfd->fops = &vivid_fops;
1646 		vfd->ioctl_ops = &vivid_ioctl_ops;
1647 		vfd->device_caps = dev->touch_cap_caps;
1648 		vfd->release = video_device_release_empty;
1649 		vfd->v4l2_dev = &dev->v4l2_dev;
1650 		vfd->queue = &dev->vb_touch_cap_q;
1651 		vfd->tvnorms = tvnorms_cap;
1652 		vfd->lock = &dev->mutex;
1653 		video_set_drvdata(vfd, dev);
1654 #ifdef CONFIG_MEDIA_CONTROLLER
1655 		dev->touch_cap_pad.flags = MEDIA_PAD_FL_SINK;
1656 		ret = media_entity_pads_init(&vfd->entity, 1,
1657 					     &dev->touch_cap_pad);
1658 		if (ret)
1659 			return ret;
1660 #endif
1661 		ret = video_register_device(vfd, VFL_TYPE_TOUCH,
1662 					    touch_cap_nr[inst]);
1663 		if (ret < 0)
1664 			return ret;
1665 		v4l2_info(&dev->v4l2_dev,
1666 			  "V4L2 touch capture device registered as %s\n",
1667 			  video_device_node_name(vfd));
1668 	}
1669 
1670 #ifdef CONFIG_MEDIA_CONTROLLER
1671 	/* Register the media device */
1672 	ret = media_device_register(&dev->mdev);
1673 	if (ret) {
1674 		dev_err(dev->mdev.dev,
1675 			"media device register failed (err=%d)\n", ret);
1676 		return ret;
1677 	}
1678 #endif
1679 	return 0;
1680 }
1681 
vivid_create_instance(struct platform_device * pdev,int inst)1682 static int vivid_create_instance(struct platform_device *pdev, int inst)
1683 {
1684 	static const struct v4l2_dv_timings def_dv_timings =
1685 					V4L2_DV_BT_CEA_1280X720P60;
1686 	unsigned in_type_counter[4] = { 0, 0, 0, 0 };
1687 	unsigned out_type_counter[4] = { 0, 0, 0, 0 };
1688 	int ccs_cap = ccs_cap_mode[inst];
1689 	int ccs_out = ccs_out_mode[inst];
1690 	bool has_tuner;
1691 	bool has_modulator;
1692 	struct vivid_dev *dev;
1693 	unsigned node_type = node_types[inst];
1694 	v4l2_std_id tvnorms_cap = 0, tvnorms_out = 0;
1695 	unsigned int cec_tx_bus_cnt = 0;
1696 	int ret;
1697 	int i;
1698 
1699 	/* allocate main vivid state structure */
1700 	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1701 	if (!dev)
1702 		return -ENOMEM;
1703 
1704 	dev->inst = inst;
1705 
1706 #ifdef CONFIG_MEDIA_CONTROLLER
1707 	dev->v4l2_dev.mdev = &dev->mdev;
1708 
1709 	/* Initialize media device */
1710 	strscpy(dev->mdev.model, VIVID_MODULE_NAME, sizeof(dev->mdev.model));
1711 	snprintf(dev->mdev.bus_info, sizeof(dev->mdev.bus_info),
1712 		 "platform:%s-%03d", VIVID_MODULE_NAME, inst);
1713 	dev->mdev.dev = &pdev->dev;
1714 	media_device_init(&dev->mdev);
1715 	dev->mdev.ops = &vivid_media_ops;
1716 #endif
1717 
1718 	/* register v4l2_device */
1719 	snprintf(dev->v4l2_dev.name, sizeof(dev->v4l2_dev.name),
1720 			"%s-%03d", VIVID_MODULE_NAME, inst);
1721 	ret = v4l2_device_register(&pdev->dev, &dev->v4l2_dev);
1722 	if (ret) {
1723 		kfree(dev);
1724 		return ret;
1725 	}
1726 	dev->v4l2_dev.release = vivid_dev_release;
1727 
1728 	ret = vivid_detect_feature_set(dev, inst, node_type,
1729 				       &has_tuner, &has_modulator,
1730 				       &ccs_cap, &ccs_out,
1731 				       in_type_counter, out_type_counter);
1732 	if (ret)
1733 		goto free_dev;
1734 
1735 	vivid_set_capabilities(dev);
1736 
1737 	ret = -ENOMEM;
1738 	/* initialize the test pattern generator */
1739 	tpg_init(&dev->tpg, 640, 360);
1740 	if (tpg_alloc(&dev->tpg, array_size(MAX_WIDTH, MAX_ZOOM)))
1741 		goto free_dev;
1742 	dev->scaled_line = vzalloc(array_size(MAX_WIDTH, MAX_ZOOM));
1743 	if (!dev->scaled_line)
1744 		goto free_dev;
1745 	dev->blended_line = vzalloc(array_size(MAX_WIDTH, MAX_ZOOM));
1746 	if (!dev->blended_line)
1747 		goto free_dev;
1748 
1749 	/* load the edid */
1750 	dev->edid = vmalloc(array_size(256, 128));
1751 	if (!dev->edid)
1752 		goto free_dev;
1753 
1754 	ret = vivid_init_dv_timings(dev);
1755 	if (ret < 0)
1756 		goto free_dev;
1757 
1758 	vivid_disable_unused_ioctls(dev, has_tuner, has_modulator,
1759 				    in_type_counter, out_type_counter);
1760 
1761 	/* configure internal data */
1762 	dev->fmt_cap = &vivid_formats[0];
1763 	dev->fmt_out = &vivid_formats[0];
1764 	if (!dev->multiplanar)
1765 		vivid_formats[0].data_offset[0] = 0;
1766 	dev->webcam_size_idx = 1;
1767 	dev->webcam_ival_idx = 3;
1768 	tpg_s_fourcc(&dev->tpg, dev->fmt_cap->fourcc);
1769 	dev->std_out = V4L2_STD_PAL;
1770 	if (dev->input_type[0] == TV || dev->input_type[0] == SVID)
1771 		tvnorms_cap = V4L2_STD_ALL;
1772 	if (dev->output_type[0] == SVID)
1773 		tvnorms_out = V4L2_STD_ALL;
1774 	for (i = 0; i < MAX_INPUTS; i++) {
1775 		dev->dv_timings_cap[i] = def_dv_timings;
1776 		dev->std_cap[i] = V4L2_STD_PAL;
1777 	}
1778 	dev->dv_timings_out = def_dv_timings;
1779 	dev->tv_freq = 2804 /* 175.25 * 16 */;
1780 	dev->tv_audmode = V4L2_TUNER_MODE_STEREO;
1781 	dev->tv_field_cap = V4L2_FIELD_INTERLACED;
1782 	dev->tv_field_out = V4L2_FIELD_INTERLACED;
1783 	dev->radio_rx_freq = 95000 * 16;
1784 	dev->radio_rx_audmode = V4L2_TUNER_MODE_STEREO;
1785 	if (dev->has_radio_tx) {
1786 		dev->radio_tx_freq = 95500 * 16;
1787 		dev->radio_rds_loop = false;
1788 	}
1789 	dev->radio_tx_subchans = V4L2_TUNER_SUB_STEREO | V4L2_TUNER_SUB_RDS;
1790 	dev->sdr_adc_freq = 300000;
1791 	dev->sdr_fm_freq = 50000000;
1792 	dev->sdr_pixelformat = V4L2_SDR_FMT_CU8;
1793 	dev->sdr_buffersize = SDR_CAP_SAMPLES_PER_BUF * 2;
1794 
1795 	dev->edid_max_blocks = dev->edid_blocks = 2;
1796 	memcpy(dev->edid, vivid_hdmi_edid, sizeof(vivid_hdmi_edid));
1797 	dev->radio_rds_init_time = ktime_get();
1798 
1799 	/* create all controls */
1800 	ret = vivid_create_controls(dev, ccs_cap == -1, ccs_out == -1, no_error_inj,
1801 			in_type_counter[TV] || in_type_counter[SVID] ||
1802 			out_type_counter[SVID],
1803 			in_type_counter[HDMI] || out_type_counter[HDMI]);
1804 	if (ret)
1805 		goto unreg_dev;
1806 
1807 	/* enable/disable interface specific controls */
1808 	if (dev->num_outputs && dev->output_type[0] != HDMI)
1809 		v4l2_ctrl_activate(dev->ctrl_display_present, false);
1810 	if (dev->num_inputs && dev->input_type[0] != HDMI) {
1811 		v4l2_ctrl_activate(dev->ctrl_dv_timings_signal_mode, false);
1812 		v4l2_ctrl_activate(dev->ctrl_dv_timings, false);
1813 	} else if (dev->num_inputs && dev->input_type[0] == HDMI) {
1814 		v4l2_ctrl_activate(dev->ctrl_std_signal_mode, false);
1815 		v4l2_ctrl_activate(dev->ctrl_standard, false);
1816 	}
1817 
1818 	/*
1819 	 * update the capture and output formats to do a proper initial
1820 	 * configuration.
1821 	 */
1822 	vivid_update_format_cap(dev, false);
1823 	vivid_update_format_out(dev);
1824 
1825 	/* initialize overlay */
1826 	dev->fb_cap.fmt.width = dev->src_rect.width;
1827 	dev->fb_cap.fmt.height = dev->src_rect.height;
1828 	dev->fb_cap.fmt.pixelformat = dev->fmt_cap->fourcc;
1829 	dev->fb_cap.fmt.bytesperline = dev->src_rect.width * tpg_g_twopixelsize(&dev->tpg, 0) / 2;
1830 	dev->fb_cap.fmt.sizeimage = dev->src_rect.height * dev->fb_cap.fmt.bytesperline;
1831 
1832 	/* update touch configuration */
1833 	dev->timeperframe_tch_cap.numerator = 1;
1834 	dev->timeperframe_tch_cap.denominator = 10;
1835 	vivid_set_touch(dev, 0);
1836 
1837 	/* initialize locks */
1838 	spin_lock_init(&dev->slock);
1839 	mutex_init(&dev->mutex);
1840 
1841 	/* init dma queues */
1842 	INIT_LIST_HEAD(&dev->vid_cap_active);
1843 	INIT_LIST_HEAD(&dev->vid_out_active);
1844 	INIT_LIST_HEAD(&dev->vbi_cap_active);
1845 	INIT_LIST_HEAD(&dev->vbi_out_active);
1846 	INIT_LIST_HEAD(&dev->sdr_cap_active);
1847 	INIT_LIST_HEAD(&dev->meta_cap_active);
1848 	INIT_LIST_HEAD(&dev->meta_out_active);
1849 	INIT_LIST_HEAD(&dev->touch_cap_active);
1850 
1851 	INIT_LIST_HEAD(&dev->cec_work_list);
1852 	spin_lock_init(&dev->cec_slock);
1853 	/*
1854 	 * Same as create_singlethread_workqueue, but now I can use the
1855 	 * string formatting of alloc_ordered_workqueue.
1856 	 */
1857 	dev->cec_workqueue = alloc_ordered_workqueue("vivid-%03d-cec",
1858 						     WQ_MEM_RECLAIM, inst);
1859 	if (!dev->cec_workqueue) {
1860 		ret = -ENOMEM;
1861 		goto unreg_dev;
1862 	}
1863 
1864 	if (allocators[inst] == 1)
1865 		dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
1866 
1867 	ret = vivid_create_queues(dev);
1868 	if (ret)
1869 		goto unreg_dev;
1870 
1871 #ifdef CONFIG_VIDEO_VIVID_CEC
1872 	if (dev->has_vid_cap && in_type_counter[HDMI]) {
1873 		struct cec_adapter *adap;
1874 
1875 		adap = vivid_cec_alloc_adap(dev, 0, false);
1876 		ret = PTR_ERR_OR_ZERO(adap);
1877 		if (ret < 0)
1878 			goto unreg_dev;
1879 		dev->cec_rx_adap = adap;
1880 	}
1881 
1882 	if (dev->has_vid_out) {
1883 		for (i = 0; i < dev->num_outputs; i++) {
1884 			struct cec_adapter *adap;
1885 
1886 			if (dev->output_type[i] != HDMI)
1887 				continue;
1888 
1889 			dev->cec_output2bus_map[i] = cec_tx_bus_cnt;
1890 			adap = vivid_cec_alloc_adap(dev, cec_tx_bus_cnt, true);
1891 			ret = PTR_ERR_OR_ZERO(adap);
1892 			if (ret < 0) {
1893 				for (i = 0; i < dev->num_outputs; i++)
1894 					cec_delete_adapter(dev->cec_tx_adap[i]);
1895 				goto unreg_dev;
1896 			}
1897 
1898 			dev->cec_tx_adap[cec_tx_bus_cnt] = adap;
1899 			cec_tx_bus_cnt++;
1900 		}
1901 	}
1902 #endif
1903 
1904 	v4l2_ctrl_handler_setup(&dev->ctrl_hdl_vid_cap);
1905 	v4l2_ctrl_handler_setup(&dev->ctrl_hdl_vid_out);
1906 	v4l2_ctrl_handler_setup(&dev->ctrl_hdl_vbi_cap);
1907 	v4l2_ctrl_handler_setup(&dev->ctrl_hdl_vbi_out);
1908 	v4l2_ctrl_handler_setup(&dev->ctrl_hdl_radio_rx);
1909 	v4l2_ctrl_handler_setup(&dev->ctrl_hdl_radio_tx);
1910 	v4l2_ctrl_handler_setup(&dev->ctrl_hdl_sdr_cap);
1911 	v4l2_ctrl_handler_setup(&dev->ctrl_hdl_meta_cap);
1912 	v4l2_ctrl_handler_setup(&dev->ctrl_hdl_meta_out);
1913 	v4l2_ctrl_handler_setup(&dev->ctrl_hdl_touch_cap);
1914 
1915 	/* finally start creating the device nodes */
1916 	ret = vivid_create_devnodes(pdev, dev, inst, cec_tx_bus_cnt,
1917 				    tvnorms_cap, tvnorms_out,
1918 				    in_type_counter, out_type_counter);
1919 	if (ret)
1920 		goto unreg_dev;
1921 
1922 	/* Now that everything is fine, let's add it to device list */
1923 	vivid_devs[inst] = dev;
1924 
1925 	return 0;
1926 
1927 unreg_dev:
1928 	vb2_video_unregister_device(&dev->touch_cap_dev);
1929 	vb2_video_unregister_device(&dev->meta_out_dev);
1930 	vb2_video_unregister_device(&dev->meta_cap_dev);
1931 	video_unregister_device(&dev->radio_tx_dev);
1932 	video_unregister_device(&dev->radio_rx_dev);
1933 	vb2_video_unregister_device(&dev->sdr_cap_dev);
1934 	vb2_video_unregister_device(&dev->vbi_out_dev);
1935 	vb2_video_unregister_device(&dev->vbi_cap_dev);
1936 	vb2_video_unregister_device(&dev->vid_out_dev);
1937 	vb2_video_unregister_device(&dev->vid_cap_dev);
1938 	cec_unregister_adapter(dev->cec_rx_adap);
1939 	for (i = 0; i < MAX_OUTPUTS; i++)
1940 		cec_unregister_adapter(dev->cec_tx_adap[i]);
1941 	if (dev->cec_workqueue) {
1942 		vivid_cec_bus_free_work(dev);
1943 		destroy_workqueue(dev->cec_workqueue);
1944 	}
1945 free_dev:
1946 	v4l2_device_put(&dev->v4l2_dev);
1947 	return ret;
1948 }
1949 
1950 /* This routine allocates from 1 to n_devs virtual drivers.
1951 
1952    The real maximum number of virtual drivers will depend on how many drivers
1953    will succeed. This is limited to the maximum number of devices that
1954    videodev supports, which is equal to VIDEO_NUM_DEVICES.
1955  */
vivid_probe(struct platform_device * pdev)1956 static int vivid_probe(struct platform_device *pdev)
1957 {
1958 	const struct font_desc *font = find_font("VGA8x16");
1959 	int ret = 0, i;
1960 
1961 	if (font == NULL) {
1962 		pr_err("vivid: could not find font\n");
1963 		return -ENODEV;
1964 	}
1965 
1966 	tpg_set_font(font->data);
1967 
1968 	n_devs = clamp_t(unsigned, n_devs, 1, VIVID_MAX_DEVS);
1969 
1970 	for (i = 0; i < n_devs; i++) {
1971 		ret = vivid_create_instance(pdev, i);
1972 		if (ret) {
1973 			/* If some instantiations succeeded, keep driver */
1974 			if (i)
1975 				ret = 0;
1976 			break;
1977 		}
1978 	}
1979 
1980 	if (ret < 0) {
1981 		pr_err("vivid: error %d while loading driver\n", ret);
1982 		return ret;
1983 	}
1984 
1985 	/* n_devs will reflect the actual number of allocated devices */
1986 	n_devs = i;
1987 
1988 	return ret;
1989 }
1990 
vivid_remove(struct platform_device * pdev)1991 static int vivid_remove(struct platform_device *pdev)
1992 {
1993 	struct vivid_dev *dev;
1994 	unsigned int i, j;
1995 
1996 	for (i = 0; i < n_devs; i++) {
1997 		dev = vivid_devs[i];
1998 		if (!dev)
1999 			continue;
2000 
2001 #ifdef CONFIG_MEDIA_CONTROLLER
2002 		media_device_unregister(&dev->mdev);
2003 #endif
2004 
2005 		if (dev->has_vid_cap) {
2006 			v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
2007 				video_device_node_name(&dev->vid_cap_dev));
2008 			vb2_video_unregister_device(&dev->vid_cap_dev);
2009 		}
2010 		if (dev->has_vid_out) {
2011 			v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
2012 				video_device_node_name(&dev->vid_out_dev));
2013 			vb2_video_unregister_device(&dev->vid_out_dev);
2014 		}
2015 		if (dev->has_vbi_cap) {
2016 			v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
2017 				video_device_node_name(&dev->vbi_cap_dev));
2018 			vb2_video_unregister_device(&dev->vbi_cap_dev);
2019 		}
2020 		if (dev->has_vbi_out) {
2021 			v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
2022 				video_device_node_name(&dev->vbi_out_dev));
2023 			vb2_video_unregister_device(&dev->vbi_out_dev);
2024 		}
2025 		if (dev->has_sdr_cap) {
2026 			v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
2027 				video_device_node_name(&dev->sdr_cap_dev));
2028 			vb2_video_unregister_device(&dev->sdr_cap_dev);
2029 		}
2030 		if (dev->has_radio_rx) {
2031 			v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
2032 				video_device_node_name(&dev->radio_rx_dev));
2033 			video_unregister_device(&dev->radio_rx_dev);
2034 		}
2035 		if (dev->has_radio_tx) {
2036 			v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
2037 				video_device_node_name(&dev->radio_tx_dev));
2038 			video_unregister_device(&dev->radio_tx_dev);
2039 		}
2040 		if (dev->has_fb) {
2041 			v4l2_info(&dev->v4l2_dev, "unregistering fb%d\n",
2042 				dev->fb_info.node);
2043 			unregister_framebuffer(&dev->fb_info);
2044 			vivid_fb_release_buffers(dev);
2045 		}
2046 		if (dev->has_meta_cap) {
2047 			v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
2048 				  video_device_node_name(&dev->meta_cap_dev));
2049 			vb2_video_unregister_device(&dev->meta_cap_dev);
2050 		}
2051 		if (dev->has_meta_out) {
2052 			v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
2053 				  video_device_node_name(&dev->meta_out_dev));
2054 			vb2_video_unregister_device(&dev->meta_out_dev);
2055 		}
2056 		if (dev->has_touch_cap) {
2057 			v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
2058 				  video_device_node_name(&dev->touch_cap_dev));
2059 			vb2_video_unregister_device(&dev->touch_cap_dev);
2060 		}
2061 		cec_unregister_adapter(dev->cec_rx_adap);
2062 		for (j = 0; j < MAX_OUTPUTS; j++)
2063 			cec_unregister_adapter(dev->cec_tx_adap[j]);
2064 		if (dev->cec_workqueue) {
2065 			vivid_cec_bus_free_work(dev);
2066 			destroy_workqueue(dev->cec_workqueue);
2067 		}
2068 		v4l2_device_put(&dev->v4l2_dev);
2069 		vivid_devs[i] = NULL;
2070 	}
2071 	return 0;
2072 }
2073 
vivid_pdev_release(struct device * dev)2074 static void vivid_pdev_release(struct device *dev)
2075 {
2076 }
2077 
2078 static struct platform_device vivid_pdev = {
2079 	.name		= "vivid",
2080 	.dev.release	= vivid_pdev_release,
2081 };
2082 
2083 static struct platform_driver vivid_pdrv = {
2084 	.probe		= vivid_probe,
2085 	.remove		= vivid_remove,
2086 	.driver		= {
2087 		.name	= "vivid",
2088 	},
2089 };
2090 
vivid_init(void)2091 static int __init vivid_init(void)
2092 {
2093 	int ret;
2094 
2095 	ret = platform_device_register(&vivid_pdev);
2096 	if (ret)
2097 		return ret;
2098 
2099 	ret = platform_driver_register(&vivid_pdrv);
2100 	if (ret)
2101 		platform_device_unregister(&vivid_pdev);
2102 
2103 	return ret;
2104 }
2105 
vivid_exit(void)2106 static void __exit vivid_exit(void)
2107 {
2108 	platform_driver_unregister(&vivid_pdrv);
2109 	platform_device_unregister(&vivid_pdev);
2110 }
2111 
2112 module_init(vivid_init);
2113 module_exit(vivid_exit);
2114