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