• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * vivid-core.c - A Virtual Video Test Driver, core initialization
3  *
4  * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
5  *
6  * This program is free software; you may redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; version 2 of the License.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
11  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
12  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
13  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
14  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
15  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
16  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
17  * SOFTWARE.
18  */
19 
20 #include <linux/module.h>
21 #include <linux/errno.h>
22 #include <linux/kernel.h>
23 #include <linux/init.h>
24 #include <linux/sched.h>
25 #include <linux/slab.h>
26 #include <linux/vmalloc.h>
27 #include <linux/font.h>
28 #include <linux/mutex.h>
29 #include <linux/platform_device.h>
30 #include <linux/videodev2.h>
31 #include <linux/v4l2-dv-timings.h>
32 #include <media/videobuf2-vmalloc.h>
33 #include <media/videobuf2-dma-contig.h>
34 #include <media/v4l2-dv-timings.h>
35 #include <media/v4l2-ioctl.h>
36 #include <media/v4l2-fh.h>
37 #include <media/v4l2-event.h>
38 
39 #include "vivid-core.h"
40 #include "vivid-vid-common.h"
41 #include "vivid-vid-cap.h"
42 #include "vivid-vid-out.h"
43 #include "vivid-radio-common.h"
44 #include "vivid-radio-rx.h"
45 #include "vivid-radio-tx.h"
46 #include "vivid-sdr-cap.h"
47 #include "vivid-vbi-cap.h"
48 #include "vivid-vbi-out.h"
49 #include "vivid-osd.h"
50 #include "vivid-cec.h"
51 #include "vivid-ctrls.h"
52 
53 #define VIVID_MODULE_NAME "vivid"
54 
55 /* The maximum number of vivid devices */
56 #define VIVID_MAX_DEVS CONFIG_VIDEO_VIVID_MAX_DEVS
57 
58 MODULE_DESCRIPTION("Virtual Video Test Driver");
59 MODULE_AUTHOR("Hans Verkuil");
60 MODULE_LICENSE("GPL");
61 
62 static unsigned n_devs = 1;
63 module_param(n_devs, uint, 0444);
64 MODULE_PARM_DESC(n_devs, " number of driver instances to create");
65 
66 static int vid_cap_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
67 module_param_array(vid_cap_nr, int, NULL, 0444);
68 MODULE_PARM_DESC(vid_cap_nr, " videoX start number, -1 is autodetect");
69 
70 static int vid_out_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
71 module_param_array(vid_out_nr, int, NULL, 0444);
72 MODULE_PARM_DESC(vid_out_nr, " videoX start number, -1 is autodetect");
73 
74 static int vbi_cap_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
75 module_param_array(vbi_cap_nr, int, NULL, 0444);
76 MODULE_PARM_DESC(vbi_cap_nr, " vbiX start number, -1 is autodetect");
77 
78 static int vbi_out_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
79 module_param_array(vbi_out_nr, int, NULL, 0444);
80 MODULE_PARM_DESC(vbi_out_nr, " vbiX start number, -1 is autodetect");
81 
82 static int sdr_cap_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
83 module_param_array(sdr_cap_nr, int, NULL, 0444);
84 MODULE_PARM_DESC(sdr_cap_nr, " swradioX start number, -1 is autodetect");
85 
86 static int radio_rx_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
87 module_param_array(radio_rx_nr, int, NULL, 0444);
88 MODULE_PARM_DESC(radio_rx_nr, " radioX start number, -1 is autodetect");
89 
90 static int radio_tx_nr[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
91 module_param_array(radio_tx_nr, int, NULL, 0444);
92 MODULE_PARM_DESC(radio_tx_nr, " radioX start number, -1 is autodetect");
93 
94 static int ccs_cap_mode[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
95 module_param_array(ccs_cap_mode, int, NULL, 0444);
96 MODULE_PARM_DESC(ccs_cap_mode, " capture crop/compose/scale mode:\n"
97 			   "\t\t    bit 0=crop, 1=compose, 2=scale,\n"
98 			   "\t\t    -1=user-controlled (default)");
99 
100 static int ccs_out_mode[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = -1 };
101 module_param_array(ccs_out_mode, int, NULL, 0444);
102 MODULE_PARM_DESC(ccs_out_mode, " output crop/compose/scale mode:\n"
103 			   "\t\t    bit 0=crop, 1=compose, 2=scale,\n"
104 			   "\t\t    -1=user-controlled (default)");
105 
106 static unsigned multiplanar[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 1 };
107 module_param_array(multiplanar, uint, NULL, 0444);
108 MODULE_PARM_DESC(multiplanar, " 1 (default) creates a single planar device, 2 creates a multiplanar device.");
109 
110 /* Default: video + vbi-cap (raw and sliced) + radio rx + radio tx + sdr + vbi-out + vid-out */
111 static unsigned node_types[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 0x1d3d };
112 module_param_array(node_types, uint, NULL, 0444);
113 MODULE_PARM_DESC(node_types, " node types, default is 0x1d3d. Bitmask with the following meaning:\n"
114 			     "\t\t    bit 0: Video Capture node\n"
115 			     "\t\t    bit 2-3: VBI Capture node: 0 = none, 1 = raw vbi, 2 = sliced vbi, 3 = both\n"
116 			     "\t\t    bit 4: Radio Receiver node\n"
117 			     "\t\t    bit 5: Software Defined Radio Receiver node\n"
118 			     "\t\t    bit 8: Video Output node\n"
119 			     "\t\t    bit 10-11: VBI Output node: 0 = none, 1 = raw vbi, 2 = sliced vbi, 3 = both\n"
120 			     "\t\t    bit 12: Radio Transmitter node\n"
121 			     "\t\t    bit 16: Framebuffer for testing overlays");
122 
123 /* Default: 4 inputs */
124 static unsigned num_inputs[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 4 };
125 module_param_array(num_inputs, uint, NULL, 0444);
126 MODULE_PARM_DESC(num_inputs, " number of inputs, default is 4");
127 
128 /* Default: input 0 = WEBCAM, 1 = TV, 2 = SVID, 3 = HDMI */
129 static unsigned input_types[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 0xe4 };
130 module_param_array(input_types, uint, NULL, 0444);
131 MODULE_PARM_DESC(input_types, " input types, default is 0xe4. Two bits per input,\n"
132 			      "\t\t    bits 0-1 == input 0, bits 31-30 == input 15.\n"
133 			      "\t\t    Type 0 == webcam, 1 == TV, 2 == S-Video, 3 == HDMI");
134 
135 /* Default: 2 outputs */
136 static unsigned num_outputs[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 2 };
137 module_param_array(num_outputs, uint, NULL, 0444);
138 MODULE_PARM_DESC(num_outputs, " number of outputs, default is 2");
139 
140 /* Default: output 0 = SVID, 1 = HDMI */
141 static unsigned output_types[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 2 };
142 module_param_array(output_types, uint, NULL, 0444);
143 MODULE_PARM_DESC(output_types, " output types, default is 0x02. One bit per output,\n"
144 			      "\t\t    bit 0 == output 0, bit 15 == output 15.\n"
145 			      "\t\t    Type 0 == S-Video, 1 == HDMI");
146 
147 unsigned vivid_debug;
148 module_param(vivid_debug, uint, 0644);
149 MODULE_PARM_DESC(vivid_debug, " activates debug info");
150 
151 static bool no_error_inj;
152 module_param(no_error_inj, bool, 0444);
153 MODULE_PARM_DESC(no_error_inj, " if set disable the error injecting controls");
154 
155 static unsigned int allocators[VIVID_MAX_DEVS] = { [0 ... (VIVID_MAX_DEVS - 1)] = 0 };
156 module_param_array(allocators, uint, NULL, 0444);
157 MODULE_PARM_DESC(allocators, " memory allocator selection, default is 0.\n"
158 			     "\t\t    0 == vmalloc\n"
159 			     "\t\t    1 == dma-contig");
160 
161 static struct vivid_dev *vivid_devs[VIVID_MAX_DEVS];
162 
163 const struct v4l2_rect vivid_min_rect = {
164 	0, 0, MIN_WIDTH, MIN_HEIGHT
165 };
166 
167 const struct v4l2_rect vivid_max_rect = {
168 	0, 0, MAX_WIDTH * MAX_ZOOM, MAX_HEIGHT * MAX_ZOOM
169 };
170 
171 static const u8 vivid_hdmi_edid[256] = {
172 	0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
173 	0x31, 0xd8, 0x34, 0x12, 0x00, 0x00, 0x00, 0x00,
174 	0x22, 0x1a, 0x01, 0x03, 0x80, 0x60, 0x36, 0x78,
175 	0x0f, 0xee, 0x91, 0xa3, 0x54, 0x4c, 0x99, 0x26,
176 	0x0f, 0x50, 0x54, 0x2f, 0xcf, 0x00, 0x31, 0x59,
177 	0x45, 0x59, 0x81, 0x80, 0x81, 0x40, 0x90, 0x40,
178 	0x95, 0x00, 0xa9, 0x40, 0xb3, 0x00, 0x08, 0xe8,
179 	0x00, 0x30, 0xf2, 0x70, 0x5a, 0x80, 0xb0, 0x58,
180 	0x8a, 0x00, 0xc0, 0x1c, 0x32, 0x00, 0x00, 0x1e,
181 	0x00, 0x00, 0x00, 0xfd, 0x00, 0x18, 0x55, 0x18,
182 	0x87, 0x3c, 0x00, 0x0a, 0x20, 0x20, 0x20, 0x20,
183 	0x20, 0x20, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x76,
184 	0x69, 0x76, 0x69, 0x64, 0x0a, 0x20, 0x20, 0x20,
185 	0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x10,
186 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
187 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7b,
188 
189 	0x02, 0x03, 0x3f, 0xf0, 0x51, 0x61, 0x60, 0x5f,
190 	0x5e, 0x5d, 0x10, 0x1f, 0x04, 0x13, 0x22, 0x21,
191 	0x20, 0x05, 0x14, 0x02, 0x11, 0x01, 0x23, 0x09,
192 	0x07, 0x07, 0x83, 0x01, 0x00, 0x00, 0x6d, 0x03,
193 	0x0c, 0x00, 0x10, 0x00, 0x00, 0x3c, 0x21, 0x00,
194 	0x60, 0x01, 0x02, 0x03, 0x67, 0xd8, 0x5d, 0xc4,
195 	0x01, 0x78, 0x00, 0x00, 0xe2, 0x00, 0xea, 0xe3,
196 	0x05, 0x00, 0x00, 0xe3, 0x06, 0x01, 0x00, 0x4d,
197 	0xd0, 0x00, 0xa0, 0xf0, 0x70, 0x3e, 0x80, 0x30,
198 	0x20, 0x35, 0x00, 0xc0, 0x1c, 0x32, 0x00, 0x00,
199 	0x1e, 0x1a, 0x36, 0x80, 0xa0, 0x70, 0x38, 0x1f,
200 	0x40, 0x30, 0x20, 0x35, 0x00, 0xc0, 0x1c, 0x32,
201 	0x00, 0x00, 0x1a, 0x1a, 0x1d, 0x00, 0x80, 0x51,
202 	0xd0, 0x1c, 0x20, 0x40, 0x80, 0x35, 0x00, 0xc0,
203 	0x1c, 0x32, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
204 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63,
205 };
206 
vidioc_querycap(struct file * file,void * priv,struct v4l2_capability * cap)207 static int vidioc_querycap(struct file *file, void  *priv,
208 					struct v4l2_capability *cap)
209 {
210 	struct vivid_dev *dev = video_drvdata(file);
211 
212 	strcpy(cap->driver, "vivid");
213 	strcpy(cap->card, "vivid");
214 	snprintf(cap->bus_info, sizeof(cap->bus_info),
215 			"platform:%s", dev->v4l2_dev.name);
216 
217 	cap->capabilities = dev->vid_cap_caps | dev->vid_out_caps |
218 		dev->vbi_cap_caps | dev->vbi_out_caps |
219 		dev->radio_rx_caps | dev->radio_tx_caps |
220 		dev->sdr_cap_caps | V4L2_CAP_DEVICE_CAPS;
221 	return 0;
222 }
223 
vidioc_s_hw_freq_seek(struct file * file,void * fh,const struct v4l2_hw_freq_seek * a)224 static int vidioc_s_hw_freq_seek(struct file *file, void *fh, const struct v4l2_hw_freq_seek *a)
225 {
226 	struct video_device *vdev = video_devdata(file);
227 
228 	if (vdev->vfl_type == VFL_TYPE_RADIO)
229 		return vivid_radio_rx_s_hw_freq_seek(file, fh, a);
230 	return -ENOTTY;
231 }
232 
vidioc_enum_freq_bands(struct file * file,void * fh,struct v4l2_frequency_band * band)233 static int vidioc_enum_freq_bands(struct file *file, void *fh, struct v4l2_frequency_band *band)
234 {
235 	struct video_device *vdev = video_devdata(file);
236 
237 	if (vdev->vfl_type == VFL_TYPE_RADIO)
238 		return vivid_radio_rx_enum_freq_bands(file, fh, band);
239 	if (vdev->vfl_type == VFL_TYPE_SDR)
240 		return vivid_sdr_enum_freq_bands(file, fh, band);
241 	return -ENOTTY;
242 }
243 
vidioc_g_tuner(struct file * file,void * fh,struct v4l2_tuner * vt)244 static int vidioc_g_tuner(struct file *file, void *fh, struct v4l2_tuner *vt)
245 {
246 	struct video_device *vdev = video_devdata(file);
247 
248 	if (vdev->vfl_type == VFL_TYPE_RADIO)
249 		return vivid_radio_rx_g_tuner(file, fh, vt);
250 	if (vdev->vfl_type == VFL_TYPE_SDR)
251 		return vivid_sdr_g_tuner(file, fh, vt);
252 	return vivid_video_g_tuner(file, fh, vt);
253 }
254 
vidioc_s_tuner(struct file * file,void * fh,const struct v4l2_tuner * vt)255 static int vidioc_s_tuner(struct file *file, void *fh, const struct v4l2_tuner *vt)
256 {
257 	struct video_device *vdev = video_devdata(file);
258 
259 	if (vdev->vfl_type == VFL_TYPE_RADIO)
260 		return vivid_radio_rx_s_tuner(file, fh, vt);
261 	if (vdev->vfl_type == VFL_TYPE_SDR)
262 		return vivid_sdr_s_tuner(file, fh, vt);
263 	return vivid_video_s_tuner(file, fh, vt);
264 }
265 
vidioc_g_frequency(struct file * file,void * fh,struct v4l2_frequency * vf)266 static int vidioc_g_frequency(struct file *file, void *fh, struct v4l2_frequency *vf)
267 {
268 	struct vivid_dev *dev = video_drvdata(file);
269 	struct video_device *vdev = video_devdata(file);
270 
271 	if (vdev->vfl_type == VFL_TYPE_RADIO)
272 		return vivid_radio_g_frequency(file,
273 			vdev->vfl_dir == VFL_DIR_RX ?
274 			&dev->radio_rx_freq : &dev->radio_tx_freq, vf);
275 	if (vdev->vfl_type == VFL_TYPE_SDR)
276 		return vivid_sdr_g_frequency(file, fh, vf);
277 	return vivid_video_g_frequency(file, fh, vf);
278 }
279 
vidioc_s_frequency(struct file * file,void * fh,const struct v4l2_frequency * vf)280 static int vidioc_s_frequency(struct file *file, void *fh, const struct v4l2_frequency *vf)
281 {
282 	struct vivid_dev *dev = video_drvdata(file);
283 	struct video_device *vdev = video_devdata(file);
284 
285 	if (vdev->vfl_type == VFL_TYPE_RADIO)
286 		return vivid_radio_s_frequency(file,
287 			vdev->vfl_dir == VFL_DIR_RX ?
288 			&dev->radio_rx_freq : &dev->radio_tx_freq, vf);
289 	if (vdev->vfl_type == VFL_TYPE_SDR)
290 		return vivid_sdr_s_frequency(file, fh, vf);
291 	return vivid_video_s_frequency(file, fh, vf);
292 }
293 
vidioc_overlay(struct file * file,void * fh,unsigned i)294 static int vidioc_overlay(struct file *file, void *fh, unsigned i)
295 {
296 	struct video_device *vdev = video_devdata(file);
297 
298 	if (vdev->vfl_dir == VFL_DIR_RX)
299 		return vivid_vid_cap_overlay(file, fh, i);
300 	return vivid_vid_out_overlay(file, fh, i);
301 }
302 
vidioc_g_fbuf(struct file * file,void * fh,struct v4l2_framebuffer * a)303 static int vidioc_g_fbuf(struct file *file, void *fh, struct v4l2_framebuffer *a)
304 {
305 	struct video_device *vdev = video_devdata(file);
306 
307 	if (vdev->vfl_dir == VFL_DIR_RX)
308 		return vivid_vid_cap_g_fbuf(file, fh, a);
309 	return vivid_vid_out_g_fbuf(file, fh, a);
310 }
311 
vidioc_s_fbuf(struct file * file,void * fh,const struct v4l2_framebuffer * a)312 static int vidioc_s_fbuf(struct file *file, void *fh, const struct v4l2_framebuffer *a)
313 {
314 	struct video_device *vdev = video_devdata(file);
315 
316 	if (vdev->vfl_dir == VFL_DIR_RX)
317 		return vivid_vid_cap_s_fbuf(file, fh, a);
318 	return vivid_vid_out_s_fbuf(file, fh, a);
319 }
320 
vidioc_s_std(struct file * file,void * fh,v4l2_std_id id)321 static int vidioc_s_std(struct file *file, void *fh, v4l2_std_id id)
322 {
323 	struct video_device *vdev = video_devdata(file);
324 
325 	if (vdev->vfl_dir == VFL_DIR_RX)
326 		return vivid_vid_cap_s_std(file, fh, id);
327 	return vivid_vid_out_s_std(file, fh, id);
328 }
329 
vidioc_s_dv_timings(struct file * file,void * fh,struct v4l2_dv_timings * timings)330 static int vidioc_s_dv_timings(struct file *file, void *fh, struct v4l2_dv_timings *timings)
331 {
332 	struct video_device *vdev = video_devdata(file);
333 
334 	if (vdev->vfl_dir == VFL_DIR_RX)
335 		return vivid_vid_cap_s_dv_timings(file, fh, timings);
336 	return vivid_vid_out_s_dv_timings(file, fh, timings);
337 }
338 
vidioc_cropcap(struct file * file,void * fh,struct v4l2_cropcap * cc)339 static int vidioc_cropcap(struct file *file, void *fh, struct v4l2_cropcap *cc)
340 {
341 	struct video_device *vdev = video_devdata(file);
342 
343 	if (vdev->vfl_dir == VFL_DIR_RX)
344 		return vivid_vid_cap_cropcap(file, fh, cc);
345 	return vivid_vid_out_cropcap(file, fh, cc);
346 }
347 
vidioc_g_selection(struct file * file,void * fh,struct v4l2_selection * sel)348 static int vidioc_g_selection(struct file *file, void *fh,
349 			      struct v4l2_selection *sel)
350 {
351 	struct video_device *vdev = video_devdata(file);
352 
353 	if (vdev->vfl_dir == VFL_DIR_RX)
354 		return vivid_vid_cap_g_selection(file, fh, sel);
355 	return vivid_vid_out_g_selection(file, fh, sel);
356 }
357 
vidioc_s_selection(struct file * file,void * fh,struct v4l2_selection * sel)358 static int vidioc_s_selection(struct file *file, void *fh,
359 			      struct v4l2_selection *sel)
360 {
361 	struct video_device *vdev = video_devdata(file);
362 
363 	if (vdev->vfl_dir == VFL_DIR_RX)
364 		return vivid_vid_cap_s_selection(file, fh, sel);
365 	return vivid_vid_out_s_selection(file, fh, sel);
366 }
367 
vidioc_g_parm(struct file * file,void * fh,struct v4l2_streamparm * parm)368 static int vidioc_g_parm(struct file *file, void *fh,
369 			  struct v4l2_streamparm *parm)
370 {
371 	struct video_device *vdev = video_devdata(file);
372 
373 	if (vdev->vfl_dir == VFL_DIR_RX)
374 		return vivid_vid_cap_g_parm(file, fh, parm);
375 	return vivid_vid_out_g_parm(file, fh, parm);
376 }
377 
vidioc_s_parm(struct file * file,void * fh,struct v4l2_streamparm * parm)378 static int vidioc_s_parm(struct file *file, void *fh,
379 			  struct v4l2_streamparm *parm)
380 {
381 	struct video_device *vdev = video_devdata(file);
382 
383 	if (vdev->vfl_dir == VFL_DIR_RX)
384 		return vivid_vid_cap_s_parm(file, fh, parm);
385 	return vivid_vid_out_g_parm(file, fh, parm);
386 }
387 
vidioc_log_status(struct file * file,void * fh)388 static int vidioc_log_status(struct file *file, void *fh)
389 {
390 	struct vivid_dev *dev = video_drvdata(file);
391 	struct video_device *vdev = video_devdata(file);
392 
393 	v4l2_ctrl_log_status(file, fh);
394 	if (vdev->vfl_dir == VFL_DIR_RX && vdev->vfl_type == VFL_TYPE_GRABBER)
395 		tpg_log_status(&dev->tpg);
396 	return 0;
397 }
398 
vivid_radio_read(struct file * file,char __user * buf,size_t size,loff_t * offset)399 static ssize_t vivid_radio_read(struct file *file, char __user *buf,
400 			 size_t size, loff_t *offset)
401 {
402 	struct video_device *vdev = video_devdata(file);
403 
404 	if (vdev->vfl_dir == VFL_DIR_TX)
405 		return -EINVAL;
406 	return vivid_radio_rx_read(file, buf, size, offset);
407 }
408 
vivid_radio_write(struct file * file,const char __user * buf,size_t size,loff_t * offset)409 static ssize_t vivid_radio_write(struct file *file, const char __user *buf,
410 			  size_t size, loff_t *offset)
411 {
412 	struct video_device *vdev = video_devdata(file);
413 
414 	if (vdev->vfl_dir == VFL_DIR_RX)
415 		return -EINVAL;
416 	return vivid_radio_tx_write(file, buf, size, offset);
417 }
418 
vivid_radio_poll(struct file * file,struct poll_table_struct * wait)419 static unsigned int vivid_radio_poll(struct file *file, struct poll_table_struct *wait)
420 {
421 	struct video_device *vdev = video_devdata(file);
422 
423 	if (vdev->vfl_dir == VFL_DIR_RX)
424 		return vivid_radio_rx_poll(file, wait);
425 	return vivid_radio_tx_poll(file, wait);
426 }
427 
vivid_is_in_use(struct video_device * vdev)428 static bool vivid_is_in_use(struct video_device *vdev)
429 {
430 	unsigned long flags;
431 	bool res;
432 
433 	spin_lock_irqsave(&vdev->fh_lock, flags);
434 	res = !list_empty(&vdev->fh_list);
435 	spin_unlock_irqrestore(&vdev->fh_lock, flags);
436 	return res;
437 }
438 
vivid_is_last_user(struct vivid_dev * dev)439 static bool vivid_is_last_user(struct vivid_dev *dev)
440 {
441 	unsigned uses = vivid_is_in_use(&dev->vid_cap_dev) +
442 			vivid_is_in_use(&dev->vid_out_dev) +
443 			vivid_is_in_use(&dev->vbi_cap_dev) +
444 			vivid_is_in_use(&dev->vbi_out_dev) +
445 			vivid_is_in_use(&dev->sdr_cap_dev) +
446 			vivid_is_in_use(&dev->radio_rx_dev) +
447 			vivid_is_in_use(&dev->radio_tx_dev);
448 
449 	return uses == 1;
450 }
451 
vivid_fop_release(struct file * file)452 static int vivid_fop_release(struct file *file)
453 {
454 	struct vivid_dev *dev = video_drvdata(file);
455 	struct video_device *vdev = video_devdata(file);
456 
457 	mutex_lock(&dev->mutex);
458 	if (!no_error_inj && v4l2_fh_is_singular_file(file) &&
459 	    !video_is_registered(vdev) && vivid_is_last_user(dev)) {
460 		/*
461 		 * I am the last user of this driver, and a disconnect
462 		 * was forced (since this video_device is unregistered),
463 		 * so re-register all video_device's again.
464 		 */
465 		v4l2_info(&dev->v4l2_dev, "reconnect\n");
466 		set_bit(V4L2_FL_REGISTERED, &dev->vid_cap_dev.flags);
467 		set_bit(V4L2_FL_REGISTERED, &dev->vid_out_dev.flags);
468 		set_bit(V4L2_FL_REGISTERED, &dev->vbi_cap_dev.flags);
469 		set_bit(V4L2_FL_REGISTERED, &dev->vbi_out_dev.flags);
470 		set_bit(V4L2_FL_REGISTERED, &dev->sdr_cap_dev.flags);
471 		set_bit(V4L2_FL_REGISTERED, &dev->radio_rx_dev.flags);
472 		set_bit(V4L2_FL_REGISTERED, &dev->radio_tx_dev.flags);
473 	}
474 	mutex_unlock(&dev->mutex);
475 	if (file->private_data == dev->overlay_cap_owner)
476 		dev->overlay_cap_owner = NULL;
477 	if (file->private_data == dev->radio_rx_rds_owner) {
478 		dev->radio_rx_rds_last_block = 0;
479 		dev->radio_rx_rds_owner = NULL;
480 	}
481 	if (file->private_data == dev->radio_tx_rds_owner) {
482 		dev->radio_tx_rds_last_block = 0;
483 		dev->radio_tx_rds_owner = NULL;
484 	}
485 	if (vdev->queue)
486 		return vb2_fop_release(file);
487 	return v4l2_fh_release(file);
488 }
489 
490 static const struct v4l2_file_operations vivid_fops = {
491 	.owner		= THIS_MODULE,
492 	.open           = v4l2_fh_open,
493 	.release        = vivid_fop_release,
494 	.read           = vb2_fop_read,
495 	.write          = vb2_fop_write,
496 	.poll		= vb2_fop_poll,
497 	.unlocked_ioctl = video_ioctl2,
498 	.mmap           = vb2_fop_mmap,
499 };
500 
501 static const struct v4l2_file_operations vivid_radio_fops = {
502 	.owner		= THIS_MODULE,
503 	.open           = v4l2_fh_open,
504 	.release        = vivid_fop_release,
505 	.read           = vivid_radio_read,
506 	.write          = vivid_radio_write,
507 	.poll		= vivid_radio_poll,
508 	.unlocked_ioctl = video_ioctl2,
509 };
510 
511 static const struct v4l2_ioctl_ops vivid_ioctl_ops = {
512 	.vidioc_querycap		= vidioc_querycap,
513 
514 	.vidioc_enum_fmt_vid_cap	= vidioc_enum_fmt_vid,
515 	.vidioc_g_fmt_vid_cap		= vidioc_g_fmt_vid_cap,
516 	.vidioc_try_fmt_vid_cap		= vidioc_try_fmt_vid_cap,
517 	.vidioc_s_fmt_vid_cap		= vidioc_s_fmt_vid_cap,
518 	.vidioc_enum_fmt_vid_cap_mplane = vidioc_enum_fmt_vid_mplane,
519 	.vidioc_g_fmt_vid_cap_mplane	= vidioc_g_fmt_vid_cap_mplane,
520 	.vidioc_try_fmt_vid_cap_mplane	= vidioc_try_fmt_vid_cap_mplane,
521 	.vidioc_s_fmt_vid_cap_mplane	= vidioc_s_fmt_vid_cap_mplane,
522 
523 	.vidioc_enum_fmt_vid_out	= vidioc_enum_fmt_vid,
524 	.vidioc_g_fmt_vid_out		= vidioc_g_fmt_vid_out,
525 	.vidioc_try_fmt_vid_out		= vidioc_try_fmt_vid_out,
526 	.vidioc_s_fmt_vid_out		= vidioc_s_fmt_vid_out,
527 	.vidioc_enum_fmt_vid_out_mplane = vidioc_enum_fmt_vid_mplane,
528 	.vidioc_g_fmt_vid_out_mplane	= vidioc_g_fmt_vid_out_mplane,
529 	.vidioc_try_fmt_vid_out_mplane	= vidioc_try_fmt_vid_out_mplane,
530 	.vidioc_s_fmt_vid_out_mplane	= vidioc_s_fmt_vid_out_mplane,
531 
532 	.vidioc_g_selection		= vidioc_g_selection,
533 	.vidioc_s_selection		= vidioc_s_selection,
534 	.vidioc_cropcap			= vidioc_cropcap,
535 
536 	.vidioc_g_fmt_vbi_cap		= vidioc_g_fmt_vbi_cap,
537 	.vidioc_try_fmt_vbi_cap		= vidioc_g_fmt_vbi_cap,
538 	.vidioc_s_fmt_vbi_cap		= vidioc_s_fmt_vbi_cap,
539 
540 	.vidioc_g_fmt_sliced_vbi_cap    = vidioc_g_fmt_sliced_vbi_cap,
541 	.vidioc_try_fmt_sliced_vbi_cap  = vidioc_try_fmt_sliced_vbi_cap,
542 	.vidioc_s_fmt_sliced_vbi_cap    = vidioc_s_fmt_sliced_vbi_cap,
543 	.vidioc_g_sliced_vbi_cap	= vidioc_g_sliced_vbi_cap,
544 
545 	.vidioc_g_fmt_vbi_out		= vidioc_g_fmt_vbi_out,
546 	.vidioc_try_fmt_vbi_out		= vidioc_g_fmt_vbi_out,
547 	.vidioc_s_fmt_vbi_out		= vidioc_s_fmt_vbi_out,
548 
549 	.vidioc_g_fmt_sliced_vbi_out    = vidioc_g_fmt_sliced_vbi_out,
550 	.vidioc_try_fmt_sliced_vbi_out  = vidioc_try_fmt_sliced_vbi_out,
551 	.vidioc_s_fmt_sliced_vbi_out    = vidioc_s_fmt_sliced_vbi_out,
552 
553 	.vidioc_enum_fmt_sdr_cap	= vidioc_enum_fmt_sdr_cap,
554 	.vidioc_g_fmt_sdr_cap		= vidioc_g_fmt_sdr_cap,
555 	.vidioc_try_fmt_sdr_cap		= vidioc_try_fmt_sdr_cap,
556 	.vidioc_s_fmt_sdr_cap		= vidioc_s_fmt_sdr_cap,
557 
558 	.vidioc_overlay			= vidioc_overlay,
559 	.vidioc_enum_framesizes		= vidioc_enum_framesizes,
560 	.vidioc_enum_frameintervals	= vidioc_enum_frameintervals,
561 	.vidioc_g_parm			= vidioc_g_parm,
562 	.vidioc_s_parm			= vidioc_s_parm,
563 
564 	.vidioc_enum_fmt_vid_overlay	= vidioc_enum_fmt_vid_overlay,
565 	.vidioc_g_fmt_vid_overlay	= vidioc_g_fmt_vid_overlay,
566 	.vidioc_try_fmt_vid_overlay	= vidioc_try_fmt_vid_overlay,
567 	.vidioc_s_fmt_vid_overlay	= vidioc_s_fmt_vid_overlay,
568 	.vidioc_g_fmt_vid_out_overlay	= vidioc_g_fmt_vid_out_overlay,
569 	.vidioc_try_fmt_vid_out_overlay	= vidioc_try_fmt_vid_out_overlay,
570 	.vidioc_s_fmt_vid_out_overlay	= vidioc_s_fmt_vid_out_overlay,
571 	.vidioc_g_fbuf			= vidioc_g_fbuf,
572 	.vidioc_s_fbuf			= vidioc_s_fbuf,
573 
574 	.vidioc_reqbufs			= vb2_ioctl_reqbufs,
575 	.vidioc_create_bufs		= vb2_ioctl_create_bufs,
576 	.vidioc_prepare_buf		= vb2_ioctl_prepare_buf,
577 	.vidioc_querybuf		= vb2_ioctl_querybuf,
578 	.vidioc_qbuf			= vb2_ioctl_qbuf,
579 	.vidioc_dqbuf			= vb2_ioctl_dqbuf,
580 	.vidioc_expbuf			= vb2_ioctl_expbuf,
581 	.vidioc_streamon		= vb2_ioctl_streamon,
582 	.vidioc_streamoff		= vb2_ioctl_streamoff,
583 
584 	.vidioc_enum_input		= vidioc_enum_input,
585 	.vidioc_g_input			= vidioc_g_input,
586 	.vidioc_s_input			= vidioc_s_input,
587 	.vidioc_s_audio			= vidioc_s_audio,
588 	.vidioc_g_audio			= vidioc_g_audio,
589 	.vidioc_enumaudio		= vidioc_enumaudio,
590 	.vidioc_s_frequency		= vidioc_s_frequency,
591 	.vidioc_g_frequency		= vidioc_g_frequency,
592 	.vidioc_s_tuner			= vidioc_s_tuner,
593 	.vidioc_g_tuner			= vidioc_g_tuner,
594 	.vidioc_s_modulator		= vidioc_s_modulator,
595 	.vidioc_g_modulator		= vidioc_g_modulator,
596 	.vidioc_s_hw_freq_seek		= vidioc_s_hw_freq_seek,
597 	.vidioc_enum_freq_bands		= vidioc_enum_freq_bands,
598 
599 	.vidioc_enum_output		= vidioc_enum_output,
600 	.vidioc_g_output		= vidioc_g_output,
601 	.vidioc_s_output		= vidioc_s_output,
602 	.vidioc_s_audout		= vidioc_s_audout,
603 	.vidioc_g_audout		= vidioc_g_audout,
604 	.vidioc_enumaudout		= vidioc_enumaudout,
605 
606 	.vidioc_querystd		= vidioc_querystd,
607 	.vidioc_g_std			= vidioc_g_std,
608 	.vidioc_s_std			= vidioc_s_std,
609 	.vidioc_s_dv_timings		= vidioc_s_dv_timings,
610 	.vidioc_g_dv_timings		= vidioc_g_dv_timings,
611 	.vidioc_query_dv_timings	= vidioc_query_dv_timings,
612 	.vidioc_enum_dv_timings		= vidioc_enum_dv_timings,
613 	.vidioc_dv_timings_cap		= vidioc_dv_timings_cap,
614 	.vidioc_g_edid			= vidioc_g_edid,
615 	.vidioc_s_edid			= vidioc_s_edid,
616 
617 	.vidioc_log_status		= vidioc_log_status,
618 	.vidioc_subscribe_event		= vidioc_subscribe_event,
619 	.vidioc_unsubscribe_event	= v4l2_event_unsubscribe,
620 };
621 
622 /* -----------------------------------------------------------------
623 	Initialization and module stuff
624    ------------------------------------------------------------------*/
625 
vivid_dev_release(struct v4l2_device * v4l2_dev)626 static void vivid_dev_release(struct v4l2_device *v4l2_dev)
627 {
628 	struct vivid_dev *dev = container_of(v4l2_dev, struct vivid_dev, v4l2_dev);
629 
630 	vivid_free_controls(dev);
631 	v4l2_device_unregister(&dev->v4l2_dev);
632 	vfree(dev->scaled_line);
633 	vfree(dev->blended_line);
634 	vfree(dev->edid);
635 	vfree(dev->bitmap_cap);
636 	vfree(dev->bitmap_out);
637 	tpg_free(&dev->tpg);
638 	kfree(dev->query_dv_timings_qmenu);
639 	kfree(dev);
640 }
641 
vivid_create_instance(struct platform_device * pdev,int inst)642 static int vivid_create_instance(struct platform_device *pdev, int inst)
643 {
644 	static const struct v4l2_dv_timings def_dv_timings =
645 					V4L2_DV_BT_CEA_1280X720P60;
646 	static const struct vb2_mem_ops * const vivid_mem_ops[2] = {
647 		&vb2_vmalloc_memops,
648 		&vb2_dma_contig_memops,
649 	};
650 	unsigned in_type_counter[4] = { 0, 0, 0, 0 };
651 	unsigned out_type_counter[4] = { 0, 0, 0, 0 };
652 	int ccs_cap = ccs_cap_mode[inst];
653 	int ccs_out = ccs_out_mode[inst];
654 	bool has_tuner;
655 	bool has_modulator;
656 	struct vivid_dev *dev;
657 	struct video_device *vfd;
658 	struct vb2_queue *q;
659 	unsigned node_type = node_types[inst];
660 	unsigned int allocator = allocators[inst];
661 	v4l2_std_id tvnorms_cap = 0, tvnorms_out = 0;
662 	int ret;
663 	int i;
664 
665 	/* allocate main vivid state structure */
666 	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
667 	if (!dev)
668 		return -ENOMEM;
669 
670 	dev->inst = inst;
671 
672 	/* register v4l2_device */
673 	snprintf(dev->v4l2_dev.name, sizeof(dev->v4l2_dev.name),
674 			"%s-%03d", VIVID_MODULE_NAME, inst);
675 	ret = v4l2_device_register(&pdev->dev, &dev->v4l2_dev);
676 	if (ret) {
677 		kfree(dev);
678 		return ret;
679 	}
680 	dev->v4l2_dev.release = vivid_dev_release;
681 
682 	/* start detecting feature set */
683 
684 	/* do we use single- or multi-planar? */
685 	dev->multiplanar = multiplanar[inst] > 1;
686 	v4l2_info(&dev->v4l2_dev, "using %splanar format API\n",
687 			dev->multiplanar ? "multi" : "single ");
688 
689 	/* how many inputs do we have and of what type? */
690 	dev->num_inputs = num_inputs[inst];
691 	if (dev->num_inputs < 1)
692 		dev->num_inputs = 1;
693 	if (dev->num_inputs >= MAX_INPUTS)
694 		dev->num_inputs = MAX_INPUTS;
695 	for (i = 0; i < dev->num_inputs; i++) {
696 		dev->input_type[i] = (input_types[inst] >> (i * 2)) & 0x3;
697 		dev->input_name_counter[i] = in_type_counter[dev->input_type[i]]++;
698 	}
699 	dev->has_audio_inputs = in_type_counter[TV] && in_type_counter[SVID];
700 	if (in_type_counter[HDMI] == 16) {
701 		/* The CEC physical address only allows for max 15 inputs */
702 		in_type_counter[HDMI]--;
703 		dev->num_inputs--;
704 	}
705 
706 	/* how many outputs do we have and of what type? */
707 	dev->num_outputs = num_outputs[inst];
708 	if (dev->num_outputs < 1)
709 		dev->num_outputs = 1;
710 	if (dev->num_outputs >= MAX_OUTPUTS)
711 		dev->num_outputs = MAX_OUTPUTS;
712 	for (i = 0; i < dev->num_outputs; i++) {
713 		dev->output_type[i] = ((output_types[inst] >> i) & 1) ? HDMI : SVID;
714 		dev->output_name_counter[i] = out_type_counter[dev->output_type[i]]++;
715 	}
716 	dev->has_audio_outputs = out_type_counter[SVID];
717 	if (out_type_counter[HDMI] == 16) {
718 		/*
719 		 * The CEC physical address only allows for max 15 inputs,
720 		 * so outputs are also limited to 15 to allow for easy
721 		 * CEC output to input mapping.
722 		 */
723 		out_type_counter[HDMI]--;
724 		dev->num_outputs--;
725 	}
726 
727 	/* do we create a video capture device? */
728 	dev->has_vid_cap = node_type & 0x0001;
729 
730 	/* do we create a vbi capture device? */
731 	if (in_type_counter[TV] || in_type_counter[SVID]) {
732 		dev->has_raw_vbi_cap = node_type & 0x0004;
733 		dev->has_sliced_vbi_cap = node_type & 0x0008;
734 		dev->has_vbi_cap = dev->has_raw_vbi_cap | dev->has_sliced_vbi_cap;
735 	}
736 
737 	/* do we create a video output device? */
738 	dev->has_vid_out = node_type & 0x0100;
739 
740 	/* do we create a vbi output device? */
741 	if (out_type_counter[SVID]) {
742 		dev->has_raw_vbi_out = node_type & 0x0400;
743 		dev->has_sliced_vbi_out = node_type & 0x0800;
744 		dev->has_vbi_out = dev->has_raw_vbi_out | dev->has_sliced_vbi_out;
745 	}
746 
747 	/* do we create a radio receiver device? */
748 	dev->has_radio_rx = node_type & 0x0010;
749 
750 	/* do we create a radio transmitter device? */
751 	dev->has_radio_tx = node_type & 0x1000;
752 
753 	/* do we create a software defined radio capture device? */
754 	dev->has_sdr_cap = node_type & 0x0020;
755 
756 	/* do we have a tuner? */
757 	has_tuner = ((dev->has_vid_cap || dev->has_vbi_cap) && in_type_counter[TV]) ||
758 		    dev->has_radio_rx || dev->has_sdr_cap;
759 
760 	/* do we have a modulator? */
761 	has_modulator = dev->has_radio_tx;
762 
763 	if (dev->has_vid_cap)
764 		/* do we have a framebuffer for overlay testing? */
765 		dev->has_fb = node_type & 0x10000;
766 
767 	/* can we do crop/compose/scaling while capturing? */
768 	if (no_error_inj && ccs_cap == -1)
769 		ccs_cap = 7;
770 
771 	/* if ccs_cap == -1, then the use can select it using controls */
772 	if (ccs_cap != -1) {
773 		dev->has_crop_cap = ccs_cap & 1;
774 		dev->has_compose_cap = ccs_cap & 2;
775 		dev->has_scaler_cap = ccs_cap & 4;
776 		v4l2_info(&dev->v4l2_dev, "Capture Crop: %c Compose: %c Scaler: %c\n",
777 			dev->has_crop_cap ? 'Y' : 'N',
778 			dev->has_compose_cap ? 'Y' : 'N',
779 			dev->has_scaler_cap ? 'Y' : 'N');
780 	}
781 
782 	/* can we do crop/compose/scaling with video output? */
783 	if (no_error_inj && ccs_out == -1)
784 		ccs_out = 7;
785 
786 	/* if ccs_out == -1, then the use can select it using controls */
787 	if (ccs_out != -1) {
788 		dev->has_crop_out = ccs_out & 1;
789 		dev->has_compose_out = ccs_out & 2;
790 		dev->has_scaler_out = ccs_out & 4;
791 		v4l2_info(&dev->v4l2_dev, "Output Crop: %c Compose: %c Scaler: %c\n",
792 			dev->has_crop_out ? 'Y' : 'N',
793 			dev->has_compose_out ? 'Y' : 'N',
794 			dev->has_scaler_out ? 'Y' : 'N');
795 	}
796 
797 	/* end detecting feature set */
798 
799 	if (dev->has_vid_cap) {
800 		/* set up the capabilities of the video capture device */
801 		dev->vid_cap_caps = dev->multiplanar ?
802 			V4L2_CAP_VIDEO_CAPTURE_MPLANE :
803 			V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_OVERLAY;
804 		dev->vid_cap_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
805 		if (dev->has_audio_inputs)
806 			dev->vid_cap_caps |= V4L2_CAP_AUDIO;
807 		if (in_type_counter[TV])
808 			dev->vid_cap_caps |= V4L2_CAP_TUNER;
809 	}
810 	if (dev->has_vid_out) {
811 		/* set up the capabilities of the video output device */
812 		dev->vid_out_caps = dev->multiplanar ?
813 			V4L2_CAP_VIDEO_OUTPUT_MPLANE :
814 			V4L2_CAP_VIDEO_OUTPUT;
815 		if (dev->has_fb)
816 			dev->vid_out_caps |= V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
817 		dev->vid_out_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
818 		if (dev->has_audio_outputs)
819 			dev->vid_out_caps |= V4L2_CAP_AUDIO;
820 	}
821 	if (dev->has_vbi_cap) {
822 		/* set up the capabilities of the vbi capture device */
823 		dev->vbi_cap_caps = (dev->has_raw_vbi_cap ? V4L2_CAP_VBI_CAPTURE : 0) |
824 				    (dev->has_sliced_vbi_cap ? V4L2_CAP_SLICED_VBI_CAPTURE : 0);
825 		dev->vbi_cap_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
826 		if (dev->has_audio_inputs)
827 			dev->vbi_cap_caps |= V4L2_CAP_AUDIO;
828 		if (in_type_counter[TV])
829 			dev->vbi_cap_caps |= V4L2_CAP_TUNER;
830 	}
831 	if (dev->has_vbi_out) {
832 		/* set up the capabilities of the vbi output device */
833 		dev->vbi_out_caps = (dev->has_raw_vbi_out ? V4L2_CAP_VBI_OUTPUT : 0) |
834 				    (dev->has_sliced_vbi_out ? V4L2_CAP_SLICED_VBI_OUTPUT : 0);
835 		dev->vbi_out_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
836 		if (dev->has_audio_outputs)
837 			dev->vbi_out_caps |= V4L2_CAP_AUDIO;
838 	}
839 	if (dev->has_sdr_cap) {
840 		/* set up the capabilities of the sdr capture device */
841 		dev->sdr_cap_caps = V4L2_CAP_SDR_CAPTURE | V4L2_CAP_TUNER;
842 		dev->sdr_cap_caps |= V4L2_CAP_STREAMING | V4L2_CAP_READWRITE;
843 	}
844 	/* set up the capabilities of the radio receiver device */
845 	if (dev->has_radio_rx)
846 		dev->radio_rx_caps = V4L2_CAP_RADIO | V4L2_CAP_RDS_CAPTURE |
847 				     V4L2_CAP_HW_FREQ_SEEK | V4L2_CAP_TUNER |
848 				     V4L2_CAP_READWRITE;
849 	/* set up the capabilities of the radio transmitter device */
850 	if (dev->has_radio_tx)
851 		dev->radio_tx_caps = V4L2_CAP_RDS_OUTPUT | V4L2_CAP_MODULATOR |
852 				     V4L2_CAP_READWRITE;
853 
854 	ret = -ENOMEM;
855 	/* initialize the test pattern generator */
856 	tpg_init(&dev->tpg, 640, 360);
857 	if (tpg_alloc(&dev->tpg, MAX_ZOOM * MAX_WIDTH))
858 		goto free_dev;
859 	dev->scaled_line = vzalloc(MAX_ZOOM * MAX_WIDTH);
860 	if (!dev->scaled_line)
861 		goto free_dev;
862 	dev->blended_line = vzalloc(MAX_ZOOM * MAX_WIDTH);
863 	if (!dev->blended_line)
864 		goto free_dev;
865 
866 	/* load the edid */
867 	dev->edid = vmalloc(256 * 128);
868 	if (!dev->edid)
869 		goto free_dev;
870 
871 	/* create a string array containing the names of all the preset timings */
872 	while (v4l2_dv_timings_presets[dev->query_dv_timings_size].bt.width)
873 		dev->query_dv_timings_size++;
874 	dev->query_dv_timings_qmenu = kmalloc(dev->query_dv_timings_size *
875 					   (sizeof(void *) + 32), GFP_KERNEL);
876 	if (dev->query_dv_timings_qmenu == NULL)
877 		goto free_dev;
878 	for (i = 0; i < dev->query_dv_timings_size; i++) {
879 		const struct v4l2_bt_timings *bt = &v4l2_dv_timings_presets[i].bt;
880 		char *p = (char *)&dev->query_dv_timings_qmenu[dev->query_dv_timings_size];
881 		u32 htot, vtot;
882 
883 		p += i * 32;
884 		dev->query_dv_timings_qmenu[i] = p;
885 
886 		htot = V4L2_DV_BT_FRAME_WIDTH(bt);
887 		vtot = V4L2_DV_BT_FRAME_HEIGHT(bt);
888 		snprintf(p, 32, "%ux%u%s%u",
889 			bt->width, bt->height, bt->interlaced ? "i" : "p",
890 			(u32)bt->pixelclock / (htot * vtot));
891 	}
892 
893 	/* disable invalid ioctls based on the feature set */
894 	if (!dev->has_audio_inputs) {
895 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_AUDIO);
896 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_AUDIO);
897 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_ENUMAUDIO);
898 		v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_AUDIO);
899 		v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_G_AUDIO);
900 		v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_ENUMAUDIO);
901 	}
902 	if (!dev->has_audio_outputs) {
903 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_AUDOUT);
904 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_AUDOUT);
905 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUMAUDOUT);
906 		v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_S_AUDOUT);
907 		v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_G_AUDOUT);
908 		v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_ENUMAUDOUT);
909 	}
910 	if (!in_type_counter[TV] && !in_type_counter[SVID]) {
911 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_STD);
912 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_STD);
913 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_ENUMSTD);
914 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_QUERYSTD);
915 	}
916 	if (!out_type_counter[SVID]) {
917 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_STD);
918 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_STD);
919 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUMSTD);
920 	}
921 	if (!has_tuner && !has_modulator) {
922 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_FREQUENCY);
923 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_FREQUENCY);
924 		v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_FREQUENCY);
925 		v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_G_FREQUENCY);
926 	}
927 	if (!has_tuner) {
928 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_TUNER);
929 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_TUNER);
930 		v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_TUNER);
931 		v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_G_TUNER);
932 	}
933 	if (in_type_counter[HDMI] == 0) {
934 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_EDID);
935 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_EDID);
936 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_DV_TIMINGS_CAP);
937 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_G_DV_TIMINGS);
938 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_DV_TIMINGS);
939 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_ENUM_DV_TIMINGS);
940 		v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_QUERY_DV_TIMINGS);
941 	}
942 	if (out_type_counter[HDMI] == 0) {
943 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_EDID);
944 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_DV_TIMINGS_CAP);
945 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_DV_TIMINGS);
946 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_DV_TIMINGS);
947 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUM_DV_TIMINGS);
948 	}
949 	if (!dev->has_fb) {
950 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_FBUF);
951 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_FBUF);
952 		v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_OVERLAY);
953 	}
954 	v4l2_disable_ioctl(&dev->vid_cap_dev, VIDIOC_S_HW_FREQ_SEEK);
955 	v4l2_disable_ioctl(&dev->vbi_cap_dev, VIDIOC_S_HW_FREQ_SEEK);
956 	v4l2_disable_ioctl(&dev->sdr_cap_dev, VIDIOC_S_HW_FREQ_SEEK);
957 	v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_S_FREQUENCY);
958 	v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_G_FREQUENCY);
959 	v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUM_FRAMESIZES);
960 	v4l2_disable_ioctl(&dev->vid_out_dev, VIDIOC_ENUM_FRAMEINTERVALS);
961 	v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_S_FREQUENCY);
962 	v4l2_disable_ioctl(&dev->vbi_out_dev, VIDIOC_G_FREQUENCY);
963 
964 	/* configure internal data */
965 	dev->fmt_cap = &vivid_formats[0];
966 	dev->fmt_out = &vivid_formats[0];
967 	if (!dev->multiplanar)
968 		vivid_formats[0].data_offset[0] = 0;
969 	dev->webcam_size_idx = 1;
970 	dev->webcam_ival_idx = 3;
971 	tpg_s_fourcc(&dev->tpg, dev->fmt_cap->fourcc);
972 	dev->std_cap = V4L2_STD_PAL;
973 	dev->std_out = V4L2_STD_PAL;
974 	if (dev->input_type[0] == TV || dev->input_type[0] == SVID)
975 		tvnorms_cap = V4L2_STD_ALL;
976 	if (dev->output_type[0] == SVID)
977 		tvnorms_out = V4L2_STD_ALL;
978 	dev->dv_timings_cap = def_dv_timings;
979 	dev->dv_timings_out = def_dv_timings;
980 	dev->tv_freq = 2804 /* 175.25 * 16 */;
981 	dev->tv_audmode = V4L2_TUNER_MODE_STEREO;
982 	dev->tv_field_cap = V4L2_FIELD_INTERLACED;
983 	dev->tv_field_out = V4L2_FIELD_INTERLACED;
984 	dev->radio_rx_freq = 95000 * 16;
985 	dev->radio_rx_audmode = V4L2_TUNER_MODE_STEREO;
986 	if (dev->has_radio_tx) {
987 		dev->radio_tx_freq = 95500 * 16;
988 		dev->radio_rds_loop = false;
989 	}
990 	dev->radio_tx_subchans = V4L2_TUNER_SUB_STEREO | V4L2_TUNER_SUB_RDS;
991 	dev->sdr_adc_freq = 300000;
992 	dev->sdr_fm_freq = 50000000;
993 	dev->sdr_pixelformat = V4L2_SDR_FMT_CU8;
994 	dev->sdr_buffersize = SDR_CAP_SAMPLES_PER_BUF * 2;
995 
996 	dev->edid_max_blocks = dev->edid_blocks = 2;
997 	memcpy(dev->edid, vivid_hdmi_edid, sizeof(vivid_hdmi_edid));
998 	ktime_get_ts(&dev->radio_rds_init_ts);
999 
1000 	/* create all controls */
1001 	ret = vivid_create_controls(dev, ccs_cap == -1, ccs_out == -1, no_error_inj,
1002 			in_type_counter[TV] || in_type_counter[SVID] ||
1003 			out_type_counter[SVID],
1004 			in_type_counter[HDMI] || out_type_counter[HDMI]);
1005 	if (ret)
1006 		goto unreg_dev;
1007 
1008 	/*
1009 	 * update the capture and output formats to do a proper initial
1010 	 * configuration.
1011 	 */
1012 	vivid_update_format_cap(dev, false);
1013 	vivid_update_format_out(dev);
1014 
1015 	v4l2_ctrl_handler_setup(&dev->ctrl_hdl_vid_cap);
1016 	v4l2_ctrl_handler_setup(&dev->ctrl_hdl_vid_out);
1017 	v4l2_ctrl_handler_setup(&dev->ctrl_hdl_vbi_cap);
1018 	v4l2_ctrl_handler_setup(&dev->ctrl_hdl_vbi_out);
1019 	v4l2_ctrl_handler_setup(&dev->ctrl_hdl_radio_rx);
1020 	v4l2_ctrl_handler_setup(&dev->ctrl_hdl_radio_tx);
1021 	v4l2_ctrl_handler_setup(&dev->ctrl_hdl_sdr_cap);
1022 
1023 	/* initialize overlay */
1024 	dev->fb_cap.fmt.width = dev->src_rect.width;
1025 	dev->fb_cap.fmt.height = dev->src_rect.height;
1026 	dev->fb_cap.fmt.pixelformat = dev->fmt_cap->fourcc;
1027 	dev->fb_cap.fmt.bytesperline = dev->src_rect.width * tpg_g_twopixelsize(&dev->tpg, 0) / 2;
1028 	dev->fb_cap.fmt.sizeimage = dev->src_rect.height * dev->fb_cap.fmt.bytesperline;
1029 
1030 	/* initialize locks */
1031 	spin_lock_init(&dev->slock);
1032 	mutex_init(&dev->mutex);
1033 
1034 	/* init dma queues */
1035 	INIT_LIST_HEAD(&dev->vid_cap_active);
1036 	INIT_LIST_HEAD(&dev->vid_out_active);
1037 	INIT_LIST_HEAD(&dev->vbi_cap_active);
1038 	INIT_LIST_HEAD(&dev->vbi_out_active);
1039 	INIT_LIST_HEAD(&dev->sdr_cap_active);
1040 
1041 	INIT_LIST_HEAD(&dev->cec_work_list);
1042 	spin_lock_init(&dev->cec_slock);
1043 	/*
1044 	 * Same as create_singlethread_workqueue, but now I can use the
1045 	 * string formatting of alloc_ordered_workqueue.
1046 	 */
1047 	dev->cec_workqueue =
1048 		alloc_ordered_workqueue("vivid-%03d-cec", WQ_MEM_RECLAIM, inst);
1049 	if (!dev->cec_workqueue) {
1050 		ret = -ENOMEM;
1051 		goto unreg_dev;
1052 	}
1053 
1054 	if (allocator == 1)
1055 		dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
1056 	else if (allocator >= ARRAY_SIZE(vivid_mem_ops))
1057 		allocator = 0;
1058 
1059 	/* start creating the vb2 queues */
1060 	if (dev->has_vid_cap) {
1061 		/* initialize vid_cap queue */
1062 		q = &dev->vb_vid_cap_q;
1063 		q->type = dev->multiplanar ? V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE :
1064 			V4L2_BUF_TYPE_VIDEO_CAPTURE;
1065 		q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_READ;
1066 		q->drv_priv = dev;
1067 		q->buf_struct_size = sizeof(struct vivid_buffer);
1068 		q->ops = &vivid_vid_cap_qops;
1069 		q->mem_ops = vivid_mem_ops[allocator];
1070 		q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1071 		q->min_buffers_needed = 2;
1072 		q->lock = &dev->mutex;
1073 		q->dev = dev->v4l2_dev.dev;
1074 
1075 		ret = vb2_queue_init(q);
1076 		if (ret)
1077 			goto unreg_dev;
1078 	}
1079 
1080 	if (dev->has_vid_out) {
1081 		/* initialize vid_out queue */
1082 		q = &dev->vb_vid_out_q;
1083 		q->type = dev->multiplanar ? V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE :
1084 			V4L2_BUF_TYPE_VIDEO_OUTPUT;
1085 		q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_WRITE;
1086 		q->drv_priv = dev;
1087 		q->buf_struct_size = sizeof(struct vivid_buffer);
1088 		q->ops = &vivid_vid_out_qops;
1089 		q->mem_ops = vivid_mem_ops[allocator];
1090 		q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1091 		q->min_buffers_needed = 2;
1092 		q->lock = &dev->mutex;
1093 		q->dev = dev->v4l2_dev.dev;
1094 
1095 		ret = vb2_queue_init(q);
1096 		if (ret)
1097 			goto unreg_dev;
1098 	}
1099 
1100 	if (dev->has_vbi_cap) {
1101 		/* initialize vbi_cap queue */
1102 		q = &dev->vb_vbi_cap_q;
1103 		q->type = dev->has_raw_vbi_cap ? V4L2_BUF_TYPE_VBI_CAPTURE :
1104 					      V4L2_BUF_TYPE_SLICED_VBI_CAPTURE;
1105 		q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_READ;
1106 		q->drv_priv = dev;
1107 		q->buf_struct_size = sizeof(struct vivid_buffer);
1108 		q->ops = &vivid_vbi_cap_qops;
1109 		q->mem_ops = vivid_mem_ops[allocator];
1110 		q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1111 		q->min_buffers_needed = 2;
1112 		q->lock = &dev->mutex;
1113 		q->dev = dev->v4l2_dev.dev;
1114 
1115 		ret = vb2_queue_init(q);
1116 		if (ret)
1117 			goto unreg_dev;
1118 	}
1119 
1120 	if (dev->has_vbi_out) {
1121 		/* initialize vbi_out queue */
1122 		q = &dev->vb_vbi_out_q;
1123 		q->type = dev->has_raw_vbi_out ? V4L2_BUF_TYPE_VBI_OUTPUT :
1124 					      V4L2_BUF_TYPE_SLICED_VBI_OUTPUT;
1125 		q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_WRITE;
1126 		q->drv_priv = dev;
1127 		q->buf_struct_size = sizeof(struct vivid_buffer);
1128 		q->ops = &vivid_vbi_out_qops;
1129 		q->mem_ops = vivid_mem_ops[allocator];
1130 		q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1131 		q->min_buffers_needed = 2;
1132 		q->lock = &dev->mutex;
1133 		q->dev = dev->v4l2_dev.dev;
1134 
1135 		ret = vb2_queue_init(q);
1136 		if (ret)
1137 			goto unreg_dev;
1138 	}
1139 
1140 	if (dev->has_sdr_cap) {
1141 		/* initialize sdr_cap queue */
1142 		q = &dev->vb_sdr_cap_q;
1143 		q->type = V4L2_BUF_TYPE_SDR_CAPTURE;
1144 		q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_READ;
1145 		q->drv_priv = dev;
1146 		q->buf_struct_size = sizeof(struct vivid_buffer);
1147 		q->ops = &vivid_sdr_cap_qops;
1148 		q->mem_ops = vivid_mem_ops[allocator];
1149 		q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
1150 		q->min_buffers_needed = 8;
1151 		q->lock = &dev->mutex;
1152 		q->dev = dev->v4l2_dev.dev;
1153 
1154 		ret = vb2_queue_init(q);
1155 		if (ret)
1156 			goto unreg_dev;
1157 	}
1158 
1159 	if (dev->has_fb) {
1160 		/* Create framebuffer for testing capture/output overlay */
1161 		ret = vivid_fb_init(dev);
1162 		if (ret)
1163 			goto unreg_dev;
1164 		v4l2_info(&dev->v4l2_dev, "Framebuffer device registered as fb%d\n",
1165 				dev->fb_info.node);
1166 	}
1167 
1168 	/* finally start creating the device nodes */
1169 	if (dev->has_vid_cap) {
1170 		vfd = &dev->vid_cap_dev;
1171 		snprintf(vfd->name, sizeof(vfd->name),
1172 			 "vivid-%03d-vid-cap", inst);
1173 		vfd->fops = &vivid_fops;
1174 		vfd->ioctl_ops = &vivid_ioctl_ops;
1175 		vfd->device_caps = dev->vid_cap_caps;
1176 		vfd->release = video_device_release_empty;
1177 		vfd->v4l2_dev = &dev->v4l2_dev;
1178 		vfd->queue = &dev->vb_vid_cap_q;
1179 		vfd->tvnorms = tvnorms_cap;
1180 
1181 		/*
1182 		 * Provide a mutex to v4l2 core. It will be used to protect
1183 		 * all fops and v4l2 ioctls.
1184 		 */
1185 		vfd->lock = &dev->mutex;
1186 		video_set_drvdata(vfd, dev);
1187 
1188 #ifdef CONFIG_VIDEO_VIVID_CEC
1189 		if (in_type_counter[HDMI]) {
1190 			struct cec_adapter *adap;
1191 
1192 			adap = vivid_cec_alloc_adap(dev, 0, false);
1193 			ret = PTR_ERR_OR_ZERO(adap);
1194 			if (ret < 0)
1195 				goto unreg_dev;
1196 			dev->cec_rx_adap = adap;
1197 			ret = cec_register_adapter(adap, &pdev->dev);
1198 			if (ret < 0) {
1199 				cec_delete_adapter(adap);
1200 				dev->cec_rx_adap = NULL;
1201 				goto unreg_dev;
1202 			}
1203 			cec_s_phys_addr(adap, 0, false);
1204 			v4l2_info(&dev->v4l2_dev, "CEC adapter %s registered for HDMI input 0\n",
1205 				  dev_name(&adap->devnode.dev));
1206 		}
1207 #endif
1208 
1209 		ret = video_register_device(vfd, VFL_TYPE_GRABBER, vid_cap_nr[inst]);
1210 		if (ret < 0)
1211 			goto unreg_dev;
1212 		v4l2_info(&dev->v4l2_dev, "V4L2 capture device registered as %s\n",
1213 					  video_device_node_name(vfd));
1214 	}
1215 
1216 	if (dev->has_vid_out) {
1217 #ifdef CONFIG_VIDEO_VIVID_CEC
1218 		unsigned int bus_cnt = 0;
1219 #endif
1220 
1221 		vfd = &dev->vid_out_dev;
1222 		snprintf(vfd->name, sizeof(vfd->name),
1223 			 "vivid-%03d-vid-out", inst);
1224 		vfd->vfl_dir = VFL_DIR_TX;
1225 		vfd->fops = &vivid_fops;
1226 		vfd->ioctl_ops = &vivid_ioctl_ops;
1227 		vfd->device_caps = dev->vid_out_caps;
1228 		vfd->release = video_device_release_empty;
1229 		vfd->v4l2_dev = &dev->v4l2_dev;
1230 		vfd->queue = &dev->vb_vid_out_q;
1231 		vfd->tvnorms = tvnorms_out;
1232 
1233 		/*
1234 		 * Provide a mutex to v4l2 core. It will be used to protect
1235 		 * all fops and v4l2 ioctls.
1236 		 */
1237 		vfd->lock = &dev->mutex;
1238 		video_set_drvdata(vfd, dev);
1239 
1240 #ifdef CONFIG_VIDEO_VIVID_CEC
1241 		for (i = 0; i < dev->num_outputs; i++) {
1242 			struct cec_adapter *adap;
1243 
1244 			if (dev->output_type[i] != HDMI)
1245 				continue;
1246 			dev->cec_output2bus_map[i] = bus_cnt;
1247 			adap = vivid_cec_alloc_adap(dev, bus_cnt, true);
1248 			ret = PTR_ERR_OR_ZERO(adap);
1249 			if (ret < 0)
1250 				goto unreg_dev;
1251 			dev->cec_tx_adap[bus_cnt] = adap;
1252 			ret = cec_register_adapter(adap, &pdev->dev);
1253 			if (ret < 0) {
1254 				cec_delete_adapter(adap);
1255 				dev->cec_tx_adap[bus_cnt] = NULL;
1256 				goto unreg_dev;
1257 			}
1258 			v4l2_info(&dev->v4l2_dev, "CEC adapter %s registered for HDMI output %d\n",
1259 				  dev_name(&adap->devnode.dev), bus_cnt);
1260 			bus_cnt++;
1261 			if (bus_cnt <= out_type_counter[HDMI])
1262 				cec_s_phys_addr(adap, bus_cnt << 12, false);
1263 			else
1264 				cec_s_phys_addr(adap, 0x1000, false);
1265 		}
1266 #endif
1267 
1268 		ret = video_register_device(vfd, VFL_TYPE_GRABBER, vid_out_nr[inst]);
1269 		if (ret < 0)
1270 			goto unreg_dev;
1271 		v4l2_info(&dev->v4l2_dev, "V4L2 output device registered as %s\n",
1272 					  video_device_node_name(vfd));
1273 	}
1274 
1275 	if (dev->has_vbi_cap) {
1276 		vfd = &dev->vbi_cap_dev;
1277 		snprintf(vfd->name, sizeof(vfd->name),
1278 			 "vivid-%03d-vbi-cap", inst);
1279 		vfd->fops = &vivid_fops;
1280 		vfd->ioctl_ops = &vivid_ioctl_ops;
1281 		vfd->device_caps = dev->vbi_cap_caps;
1282 		vfd->release = video_device_release_empty;
1283 		vfd->v4l2_dev = &dev->v4l2_dev;
1284 		vfd->queue = &dev->vb_vbi_cap_q;
1285 		vfd->lock = &dev->mutex;
1286 		vfd->tvnorms = tvnorms_cap;
1287 		video_set_drvdata(vfd, dev);
1288 
1289 		ret = video_register_device(vfd, VFL_TYPE_VBI, vbi_cap_nr[inst]);
1290 		if (ret < 0)
1291 			goto unreg_dev;
1292 		v4l2_info(&dev->v4l2_dev, "V4L2 capture device registered as %s, supports %s VBI\n",
1293 					  video_device_node_name(vfd),
1294 					  (dev->has_raw_vbi_cap && dev->has_sliced_vbi_cap) ?
1295 					  "raw and sliced" :
1296 					  (dev->has_raw_vbi_cap ? "raw" : "sliced"));
1297 	}
1298 
1299 	if (dev->has_vbi_out) {
1300 		vfd = &dev->vbi_out_dev;
1301 		snprintf(vfd->name, sizeof(vfd->name),
1302 			 "vivid-%03d-vbi-out", inst);
1303 		vfd->vfl_dir = VFL_DIR_TX;
1304 		vfd->fops = &vivid_fops;
1305 		vfd->ioctl_ops = &vivid_ioctl_ops;
1306 		vfd->device_caps = dev->vbi_out_caps;
1307 		vfd->release = video_device_release_empty;
1308 		vfd->v4l2_dev = &dev->v4l2_dev;
1309 		vfd->queue = &dev->vb_vbi_out_q;
1310 		vfd->lock = &dev->mutex;
1311 		vfd->tvnorms = tvnorms_out;
1312 		video_set_drvdata(vfd, dev);
1313 
1314 		ret = video_register_device(vfd, VFL_TYPE_VBI, vbi_out_nr[inst]);
1315 		if (ret < 0)
1316 			goto unreg_dev;
1317 		v4l2_info(&dev->v4l2_dev, "V4L2 output device registered as %s, supports %s VBI\n",
1318 					  video_device_node_name(vfd),
1319 					  (dev->has_raw_vbi_out && dev->has_sliced_vbi_out) ?
1320 					  "raw and sliced" :
1321 					  (dev->has_raw_vbi_out ? "raw" : "sliced"));
1322 	}
1323 
1324 	if (dev->has_sdr_cap) {
1325 		vfd = &dev->sdr_cap_dev;
1326 		snprintf(vfd->name, sizeof(vfd->name),
1327 			 "vivid-%03d-sdr-cap", inst);
1328 		vfd->fops = &vivid_fops;
1329 		vfd->ioctl_ops = &vivid_ioctl_ops;
1330 		vfd->device_caps = dev->sdr_cap_caps;
1331 		vfd->release = video_device_release_empty;
1332 		vfd->v4l2_dev = &dev->v4l2_dev;
1333 		vfd->queue = &dev->vb_sdr_cap_q;
1334 		vfd->lock = &dev->mutex;
1335 		video_set_drvdata(vfd, dev);
1336 
1337 		ret = video_register_device(vfd, VFL_TYPE_SDR, sdr_cap_nr[inst]);
1338 		if (ret < 0)
1339 			goto unreg_dev;
1340 		v4l2_info(&dev->v4l2_dev, "V4L2 capture device registered as %s\n",
1341 					  video_device_node_name(vfd));
1342 	}
1343 
1344 	if (dev->has_radio_rx) {
1345 		vfd = &dev->radio_rx_dev;
1346 		snprintf(vfd->name, sizeof(vfd->name),
1347 			 "vivid-%03d-rad-rx", inst);
1348 		vfd->fops = &vivid_radio_fops;
1349 		vfd->ioctl_ops = &vivid_ioctl_ops;
1350 		vfd->device_caps = dev->radio_rx_caps;
1351 		vfd->release = video_device_release_empty;
1352 		vfd->v4l2_dev = &dev->v4l2_dev;
1353 		vfd->lock = &dev->mutex;
1354 		video_set_drvdata(vfd, dev);
1355 
1356 		ret = video_register_device(vfd, VFL_TYPE_RADIO, radio_rx_nr[inst]);
1357 		if (ret < 0)
1358 			goto unreg_dev;
1359 		v4l2_info(&dev->v4l2_dev, "V4L2 receiver device registered as %s\n",
1360 					  video_device_node_name(vfd));
1361 	}
1362 
1363 	if (dev->has_radio_tx) {
1364 		vfd = &dev->radio_tx_dev;
1365 		snprintf(vfd->name, sizeof(vfd->name),
1366 			 "vivid-%03d-rad-tx", inst);
1367 		vfd->vfl_dir = VFL_DIR_TX;
1368 		vfd->fops = &vivid_radio_fops;
1369 		vfd->ioctl_ops = &vivid_ioctl_ops;
1370 		vfd->device_caps = dev->radio_tx_caps;
1371 		vfd->release = video_device_release_empty;
1372 		vfd->v4l2_dev = &dev->v4l2_dev;
1373 		vfd->lock = &dev->mutex;
1374 		video_set_drvdata(vfd, dev);
1375 
1376 		ret = video_register_device(vfd, VFL_TYPE_RADIO, radio_tx_nr[inst]);
1377 		if (ret < 0)
1378 			goto unreg_dev;
1379 		v4l2_info(&dev->v4l2_dev, "V4L2 transmitter device registered as %s\n",
1380 					  video_device_node_name(vfd));
1381 	}
1382 
1383 	/* Now that everything is fine, let's add it to device list */
1384 	vivid_devs[inst] = dev;
1385 
1386 	return 0;
1387 
1388 unreg_dev:
1389 	video_unregister_device(&dev->radio_tx_dev);
1390 	video_unregister_device(&dev->radio_rx_dev);
1391 	video_unregister_device(&dev->sdr_cap_dev);
1392 	video_unregister_device(&dev->vbi_out_dev);
1393 	video_unregister_device(&dev->vbi_cap_dev);
1394 	video_unregister_device(&dev->vid_out_dev);
1395 	video_unregister_device(&dev->vid_cap_dev);
1396 	cec_unregister_adapter(dev->cec_rx_adap);
1397 	for (i = 0; i < MAX_OUTPUTS; i++)
1398 		cec_unregister_adapter(dev->cec_tx_adap[i]);
1399 	if (dev->cec_workqueue) {
1400 		vivid_cec_bus_free_work(dev);
1401 		destroy_workqueue(dev->cec_workqueue);
1402 	}
1403 free_dev:
1404 	v4l2_device_put(&dev->v4l2_dev);
1405 	return ret;
1406 }
1407 
1408 /* This routine allocates from 1 to n_devs virtual drivers.
1409 
1410    The real maximum number of virtual drivers will depend on how many drivers
1411    will succeed. This is limited to the maximum number of devices that
1412    videodev supports, which is equal to VIDEO_NUM_DEVICES.
1413  */
vivid_probe(struct platform_device * pdev)1414 static int vivid_probe(struct platform_device *pdev)
1415 {
1416 	const struct font_desc *font = find_font("VGA8x16");
1417 	int ret = 0, i;
1418 
1419 	if (font == NULL) {
1420 		pr_err("vivid: could not find font\n");
1421 		return -ENODEV;
1422 	}
1423 
1424 	tpg_set_font(font->data);
1425 
1426 	n_devs = clamp_t(unsigned, n_devs, 1, VIVID_MAX_DEVS);
1427 
1428 	for (i = 0; i < n_devs; i++) {
1429 		ret = vivid_create_instance(pdev, i);
1430 		if (ret) {
1431 			/* If some instantiations succeeded, keep driver */
1432 			if (i)
1433 				ret = 0;
1434 			break;
1435 		}
1436 	}
1437 
1438 	if (ret < 0) {
1439 		pr_err("vivid: error %d while loading driver\n", ret);
1440 		return ret;
1441 	}
1442 
1443 	/* n_devs will reflect the actual number of allocated devices */
1444 	n_devs = i;
1445 
1446 	return ret;
1447 }
1448 
vivid_remove(struct platform_device * pdev)1449 static int vivid_remove(struct platform_device *pdev)
1450 {
1451 	struct vivid_dev *dev;
1452 	unsigned int i, j;
1453 
1454 	for (i = 0; i < n_devs; i++) {
1455 		dev = vivid_devs[i];
1456 		if (!dev)
1457 			continue;
1458 
1459 		if (dev->has_vid_cap) {
1460 			v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
1461 				video_device_node_name(&dev->vid_cap_dev));
1462 			video_unregister_device(&dev->vid_cap_dev);
1463 		}
1464 		if (dev->has_vid_out) {
1465 			v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
1466 				video_device_node_name(&dev->vid_out_dev));
1467 			video_unregister_device(&dev->vid_out_dev);
1468 		}
1469 		if (dev->has_vbi_cap) {
1470 			v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
1471 				video_device_node_name(&dev->vbi_cap_dev));
1472 			video_unregister_device(&dev->vbi_cap_dev);
1473 		}
1474 		if (dev->has_vbi_out) {
1475 			v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
1476 				video_device_node_name(&dev->vbi_out_dev));
1477 			video_unregister_device(&dev->vbi_out_dev);
1478 		}
1479 		if (dev->has_sdr_cap) {
1480 			v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
1481 				video_device_node_name(&dev->sdr_cap_dev));
1482 			video_unregister_device(&dev->sdr_cap_dev);
1483 		}
1484 		if (dev->has_radio_rx) {
1485 			v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
1486 				video_device_node_name(&dev->radio_rx_dev));
1487 			video_unregister_device(&dev->radio_rx_dev);
1488 		}
1489 		if (dev->has_radio_tx) {
1490 			v4l2_info(&dev->v4l2_dev, "unregistering %s\n",
1491 				video_device_node_name(&dev->radio_tx_dev));
1492 			video_unregister_device(&dev->radio_tx_dev);
1493 		}
1494 		if (dev->has_fb) {
1495 			v4l2_info(&dev->v4l2_dev, "unregistering fb%d\n",
1496 				dev->fb_info.node);
1497 			unregister_framebuffer(&dev->fb_info);
1498 			vivid_fb_release_buffers(dev);
1499 		}
1500 		cec_unregister_adapter(dev->cec_rx_adap);
1501 		for (j = 0; j < MAX_OUTPUTS; j++)
1502 			cec_unregister_adapter(dev->cec_tx_adap[j]);
1503 		if (dev->cec_workqueue) {
1504 			vivid_cec_bus_free_work(dev);
1505 			destroy_workqueue(dev->cec_workqueue);
1506 		}
1507 		v4l2_device_put(&dev->v4l2_dev);
1508 		vivid_devs[i] = NULL;
1509 	}
1510 	return 0;
1511 }
1512 
vivid_pdev_release(struct device * dev)1513 static void vivid_pdev_release(struct device *dev)
1514 {
1515 }
1516 
1517 static struct platform_device vivid_pdev = {
1518 	.name		= "vivid",
1519 	.dev.release	= vivid_pdev_release,
1520 };
1521 
1522 static struct platform_driver vivid_pdrv = {
1523 	.probe		= vivid_probe,
1524 	.remove		= vivid_remove,
1525 	.driver		= {
1526 		.name	= "vivid",
1527 	},
1528 };
1529 
vivid_init(void)1530 static int __init vivid_init(void)
1531 {
1532 	int ret;
1533 
1534 	ret = platform_device_register(&vivid_pdev);
1535 	if (ret)
1536 		return ret;
1537 
1538 	ret = platform_driver_register(&vivid_pdrv);
1539 	if (ret)
1540 		platform_device_unregister(&vivid_pdev);
1541 
1542 	return ret;
1543 }
1544 
vivid_exit(void)1545 static void __exit vivid_exit(void)
1546 {
1547 	platform_driver_unregister(&vivid_pdrv);
1548 	platform_device_unregister(&vivid_pdev);
1549 }
1550 
1551 module_init(vivid_init);
1552 module_exit(vivid_exit);
1553