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