1 // SPDX-License-Identifier: GPL-2.0-only
3 * vivid-core.c - A Virtual Video Test Driver, core initialization
5 * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
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>
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"
41 #define VIVID_MODULE_NAME "vivid"
43 /* The maximum number of vivid devices */
44 #define VIVID_MAX_DEVS CONFIG_VIDEO_VIVID_MAX_DEVS
46 MODULE_DESCRIPTION("Virtual Video Test Driver");
47 MODULE_AUTHOR("Hans Verkuil");
48 MODULE_LICENSE("GPL");
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");
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");
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");
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");
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");
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");
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");
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");
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)");
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)");
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.");
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");
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");
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");
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");
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");
135 unsigned vivid_debug
;
136 module_param(vivid_debug
, uint
, 0644);
137 MODULE_PARM_DESC(vivid_debug
, " activates debug info");
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");
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");
149 static struct vivid_dev
*vivid_devs
[VIVID_MAX_DEVS
];
151 const struct v4l2_rect vivid_min_rect
= {
152 0, 0, MIN_WIDTH
, MIN_HEIGHT
155 const struct v4l2_rect vivid_max_rect
= {
156 0, 0, MAX_WIDTH
* MAX_ZOOM
, MAX_HEIGHT
* MAX_ZOOM
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,
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,
195 static int vidioc_querycap(struct file
*file
, void *priv
,
196 struct v4l2_capability
*cap
)
198 struct vivid_dev
*dev
= video_drvdata(file
);
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
);
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
;
212 static int vidioc_s_hw_freq_seek(struct file
*file
, void *fh
, const struct v4l2_hw_freq_seek
*a
)
214 struct video_device
*vdev
= video_devdata(file
);
216 if (vdev
->vfl_type
== VFL_TYPE_RADIO
)
217 return vivid_radio_rx_s_hw_freq_seek(file
, fh
, a
);
221 static int vidioc_enum_freq_bands(struct file
*file
, void *fh
, struct v4l2_frequency_band
*band
)
223 struct video_device
*vdev
= video_devdata(file
);
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
);
232 static int vidioc_g_tuner(struct file
*file
, void *fh
, struct v4l2_tuner
*vt
)
234 struct video_device
*vdev
= video_devdata(file
);
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
);
243 static int vidioc_s_tuner(struct file
*file
, void *fh
, const struct v4l2_tuner
*vt
)
245 struct video_device
*vdev
= video_devdata(file
);
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
);
254 static int vidioc_g_frequency(struct file
*file
, void *fh
, struct v4l2_frequency
*vf
)
256 struct vivid_dev
*dev
= video_drvdata(file
);
257 struct video_device
*vdev
= video_devdata(file
);
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
);
268 static int vidioc_s_frequency(struct file
*file
, void *fh
, const struct v4l2_frequency
*vf
)
270 struct vivid_dev
*dev
= video_drvdata(file
);
271 struct video_device
*vdev
= video_devdata(file
);
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
);
282 static int vidioc_overlay(struct file
*file
, void *fh
, unsigned i
)
284 struct video_device
*vdev
= video_devdata(file
);
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
);
291 static int vidioc_g_fbuf(struct file
*file
, void *fh
, struct v4l2_framebuffer
*a
)
293 struct video_device
*vdev
= video_devdata(file
);
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
);
300 static int vidioc_s_fbuf(struct file
*file
, void *fh
, const struct v4l2_framebuffer
*a
)
302 struct video_device
*vdev
= video_devdata(file
);
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
);
309 static int vidioc_s_std(struct file
*file
, void *fh
, v4l2_std_id id
)
311 struct video_device
*vdev
= video_devdata(file
);
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
);
318 static int vidioc_s_dv_timings(struct file
*file
, void *fh
, struct v4l2_dv_timings
*timings
)
320 struct video_device
*vdev
= video_devdata(file
);
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
);
327 static int vidioc_cropcap(struct file
*file
, void *fh
, struct v4l2_cropcap
*cc
)
329 struct video_device
*vdev
= video_devdata(file
);
331 if (vdev
->vfl_dir
== VFL_DIR_RX
)
332 return vivid_vid_cap_cropcap(file
, fh
, cc
);
333 return vivid_vid_out_cropcap(file
, fh
, cc
);
336 static int vidioc_g_selection(struct file
*file
, void *fh
,
337 struct v4l2_selection
*sel
)
339 struct video_device
*vdev
= video_devdata(file
);
341 if (vdev
->vfl_dir
== VFL_DIR_RX
)
342 return vivid_vid_cap_g_selection(file
, fh
, sel
);
343 return vivid_vid_out_g_selection(file
, fh
, sel
);
346 static int vidioc_s_selection(struct file
*file
, void *fh
,
347 struct v4l2_selection
*sel
)
349 struct video_device
*vdev
= video_devdata(file
);
351 if (vdev
->vfl_dir
== VFL_DIR_RX
)
352 return vivid_vid_cap_s_selection(file
, fh
, sel
);
353 return vivid_vid_out_s_selection(file
, fh
, sel
);
356 static int vidioc_g_parm(struct file
*file
, void *fh
,
357 struct v4l2_streamparm
*parm
)
359 struct video_device
*vdev
= video_devdata(file
);
361 if (vdev
->vfl_dir
== VFL_DIR_RX
)
362 return vivid_vid_cap_g_parm(file
, fh
, parm
);
363 return vivid_vid_out_g_parm(file
, fh
, parm
);
366 static int vidioc_s_parm(struct file
*file
, void *fh
,
367 struct v4l2_streamparm
*parm
)
369 struct video_device
*vdev
= video_devdata(file
);
371 if (vdev
->vfl_dir
== VFL_DIR_RX
)
372 return vivid_vid_cap_s_parm(file
, fh
, parm
);
373 return vivid_vid_out_g_parm(file
, fh
, parm
);
376 static int vidioc_log_status(struct file
*file
, void *fh
)
378 struct vivid_dev
*dev
= video_drvdata(file
);
379 struct video_device
*vdev
= video_devdata(file
);
381 v4l2_ctrl_log_status(file
, fh
);
382 if (vdev
->vfl_dir
== VFL_DIR_RX
&& vdev
->vfl_type
== VFL_TYPE_GRABBER
)
383 tpg_log_status(&dev
->tpg
);
387 static ssize_t
vivid_radio_read(struct file
*file
, char __user
*buf
,
388 size_t size
, loff_t
*offset
)
390 struct video_device
*vdev
= video_devdata(file
);
392 if (vdev
->vfl_dir
== VFL_DIR_TX
)
394 return vivid_radio_rx_read(file
, buf
, size
, offset
);
397 static ssize_t
vivid_radio_write(struct file
*file
, const char __user
*buf
,
398 size_t size
, loff_t
*offset
)
400 struct video_device
*vdev
= video_devdata(file
);
402 if (vdev
->vfl_dir
== VFL_DIR_RX
)
404 return vivid_radio_tx_write(file
, buf
, size
, offset
);
407 static __poll_t
vivid_radio_poll(struct file
*file
, struct poll_table_struct
*wait
)
409 struct video_device
*vdev
= video_devdata(file
);
411 if (vdev
->vfl_dir
== VFL_DIR_RX
)
412 return vivid_radio_rx_poll(file
, wait
);
413 return vivid_radio_tx_poll(file
, wait
);
416 static bool vivid_is_in_use(struct video_device
*vdev
)
421 spin_lock_irqsave(&vdev
->fh_lock
, flags
);
422 res
= !list_empty(&vdev
->fh_list
);
423 spin_unlock_irqrestore(&vdev
->fh_lock
, flags
);
427 static bool vivid_is_last_user(struct vivid_dev
*dev
)
429 unsigned uses
= vivid_is_in_use(&dev
->vid_cap_dev
) +
430 vivid_is_in_use(&dev
->vid_out_dev
) +
431 vivid_is_in_use(&dev
->vbi_cap_dev
) +
432 vivid_is_in_use(&dev
->vbi_out_dev
) +
433 vivid_is_in_use(&dev
->sdr_cap_dev
) +
434 vivid_is_in_use(&dev
->radio_rx_dev
) +
435 vivid_is_in_use(&dev
->radio_tx_dev
);
440 static int vivid_fop_release(struct file
*file
)
442 struct vivid_dev
*dev
= video_drvdata(file
);
443 struct video_device
*vdev
= video_devdata(file
);
445 mutex_lock(&dev
->mutex
);
446 if (!no_error_inj
&& v4l2_fh_is_singular_file(file
) &&
447 !video_is_registered(vdev
) && vivid_is_last_user(dev
)) {
449 * I am the last user of this driver, and a disconnect
450 * was forced (since this video_device is unregistered),
451 * so re-register all video_device's again.
453 v4l2_info(&dev
->v4l2_dev
, "reconnect\n");
454 set_bit(V4L2_FL_REGISTERED
, &dev
->vid_cap_dev
.flags
);
455 set_bit(V4L2_FL_REGISTERED
, &dev
->vid_out_dev
.flags
);
456 set_bit(V4L2_FL_REGISTERED
, &dev
->vbi_cap_dev
.flags
);
457 set_bit(V4L2_FL_REGISTERED
, &dev
->vbi_out_dev
.flags
);
458 set_bit(V4L2_FL_REGISTERED
, &dev
->sdr_cap_dev
.flags
);
459 set_bit(V4L2_FL_REGISTERED
, &dev
->radio_rx_dev
.flags
);
460 set_bit(V4L2_FL_REGISTERED
, &dev
->radio_tx_dev
.flags
);
462 mutex_unlock(&dev
->mutex
);
463 if (file
->private_data
== dev
->overlay_cap_owner
)
464 dev
->overlay_cap_owner
= NULL
;
465 if (file
->private_data
== dev
->radio_rx_rds_owner
) {
466 dev
->radio_rx_rds_last_block
= 0;
467 dev
->radio_rx_rds_owner
= NULL
;
469 if (file
->private_data
== dev
->radio_tx_rds_owner
) {
470 dev
->radio_tx_rds_last_block
= 0;
471 dev
->radio_tx_rds_owner
= NULL
;
474 return vb2_fop_release(file
);
475 return v4l2_fh_release(file
);
478 static const struct v4l2_file_operations vivid_fops
= {
479 .owner
= THIS_MODULE
,
480 .open
= v4l2_fh_open
,
481 .release
= vivid_fop_release
,
482 .read
= vb2_fop_read
,
483 .write
= vb2_fop_write
,
484 .poll
= vb2_fop_poll
,
485 .unlocked_ioctl
= video_ioctl2
,
486 .mmap
= vb2_fop_mmap
,
489 static const struct v4l2_file_operations vivid_radio_fops
= {
490 .owner
= THIS_MODULE
,
491 .open
= v4l2_fh_open
,
492 .release
= vivid_fop_release
,
493 .read
= vivid_radio_read
,
494 .write
= vivid_radio_write
,
495 .poll
= vivid_radio_poll
,
496 .unlocked_ioctl
= video_ioctl2
,
499 static const struct v4l2_ioctl_ops vivid_ioctl_ops
= {
500 .vidioc_querycap
= vidioc_querycap
,
502 .vidioc_enum_fmt_vid_cap
= vidioc_enum_fmt_vid
,
503 .vidioc_g_fmt_vid_cap
= vidioc_g_fmt_vid_cap
,
504 .vidioc_try_fmt_vid_cap
= vidioc_try_fmt_vid_cap
,
505 .vidioc_s_fmt_vid_cap
= vidioc_s_fmt_vid_cap
,
506 .vidioc_enum_fmt_vid_cap_mplane
= vidioc_enum_fmt_vid_mplane
,
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
,
511 .vidioc_enum_fmt_vid_out
= vidioc_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_enum_fmt_vid_out_mplane
= vidioc_enum_fmt_vid_mplane
,
516 .vidioc_g_fmt_vid_out_mplane
= vidioc_g_fmt_vid_out_mplane
,
517 .vidioc_try_fmt_vid_out_mplane
= vidioc_try_fmt_vid_out_mplane
,
518 .vidioc_s_fmt_vid_out_mplane
= vidioc_s_fmt_vid_out_mplane
,
520 .vidioc_g_selection
= vidioc_g_selection
,
521 .vidioc_s_selection
= vidioc_s_selection
,
522 .vidioc_cropcap
= vidioc_cropcap
,
524 .vidioc_g_fmt_vbi_cap
= vidioc_g_fmt_vbi_cap
,
525 .vidioc_try_fmt_vbi_cap
= vidioc_g_fmt_vbi_cap
,
526 .vidioc_s_fmt_vbi_cap
= vidioc_s_fmt_vbi_cap
,
528 .vidioc_g_fmt_sliced_vbi_cap
= vidioc_g_fmt_sliced_vbi_cap
,
529 .vidioc_try_fmt_sliced_vbi_cap
= vidioc_try_fmt_sliced_vbi_cap
,
530 .vidioc_s_fmt_sliced_vbi_cap
= vidioc_s_fmt_sliced_vbi_cap
,
531 .vidioc_g_sliced_vbi_cap
= vidioc_g_sliced_vbi_cap
,
533 .vidioc_g_fmt_vbi_out
= vidioc_g_fmt_vbi_out
,
534 .vidioc_try_fmt_vbi_out
= vidioc_g_fmt_vbi_out
,
535 .vidioc_s_fmt_vbi_out
= vidioc_s_fmt_vbi_out
,
537 .vidioc_g_fmt_sliced_vbi_out
= vidioc_g_fmt_sliced_vbi_out
,
538 .vidioc_try_fmt_sliced_vbi_out
= vidioc_try_fmt_sliced_vbi_out
,
539 .vidioc_s_fmt_sliced_vbi_out
= vidioc_s_fmt_sliced_vbi_out
,
541 .vidioc_enum_fmt_sdr_cap
= vidioc_enum_fmt_sdr_cap
,
542 .vidioc_g_fmt_sdr_cap
= vidioc_g_fmt_sdr_cap
,
543 .vidioc_try_fmt_sdr_cap
= vidioc_try_fmt_sdr_cap
,
544 .vidioc_s_fmt_sdr_cap
= vidioc_s_fmt_sdr_cap
,
546 .vidioc_overlay
= vidioc_overlay
,
547 .vidioc_enum_framesizes
= vidioc_enum_framesizes
,
548 .vidioc_enum_frameintervals
= vidioc_enum_frameintervals
,
549 .vidioc_g_parm
= vidioc_g_parm
,
550 .vidioc_s_parm
= vidioc_s_parm
,
552 .vidioc_enum_fmt_vid_overlay
= vidioc_enum_fmt_vid_overlay
,
553 .vidioc_g_fmt_vid_overlay
= vidioc_g_fmt_vid_overlay
,
554 .vidioc_try_fmt_vid_overlay
= vidioc_try_fmt_vid_overlay
,
555 .vidioc_s_fmt_vid_overlay
= vidioc_s_fmt_vid_overlay
,
556 .vidioc_g_fmt_vid_out_overlay
= vidioc_g_fmt_vid_out_overlay
,
557 .vidioc_try_fmt_vid_out_overlay
= vidioc_try_fmt_vid_out_overlay
,
558 .vidioc_s_fmt_vid_out_overlay
= vidioc_s_fmt_vid_out_overlay
,
559 .vidioc_g_fbuf
= vidioc_g_fbuf
,
560 .vidioc_s_fbuf
= vidioc_s_fbuf
,
562 .vidioc_reqbufs
= vb2_ioctl_reqbufs
,
563 .vidioc_create_bufs
= vb2_ioctl_create_bufs
,
564 .vidioc_prepare_buf
= vb2_ioctl_prepare_buf
,
565 .vidioc_querybuf
= vb2_ioctl_querybuf
,
566 .vidioc_qbuf
= vb2_ioctl_qbuf
,
567 .vidioc_dqbuf
= vb2_ioctl_dqbuf
,
568 .vidioc_expbuf
= vb2_ioctl_expbuf
,
569 .vidioc_streamon
= vb2_ioctl_streamon
,
570 .vidioc_streamoff
= vb2_ioctl_streamoff
,
572 .vidioc_enum_input
= vidioc_enum_input
,
573 .vidioc_g_input
= vidioc_g_input
,
574 .vidioc_s_input
= vidioc_s_input
,
575 .vidioc_s_audio
= vidioc_s_audio
,
576 .vidioc_g_audio
= vidioc_g_audio
,
577 .vidioc_enumaudio
= vidioc_enumaudio
,
578 .vidioc_s_frequency
= vidioc_s_frequency
,
579 .vidioc_g_frequency
= vidioc_g_frequency
,
580 .vidioc_s_tuner
= vidioc_s_tuner
,
581 .vidioc_g_tuner
= vidioc_g_tuner
,
582 .vidioc_s_modulator
= vidioc_s_modulator
,
583 .vidioc_g_modulator
= vidioc_g_modulator
,
584 .vidioc_s_hw_freq_seek
= vidioc_s_hw_freq_seek
,
585 .vidioc_enum_freq_bands
= vidioc_enum_freq_bands
,
587 .vidioc_enum_output
= vidioc_enum_output
,
588 .vidioc_g_output
= vidioc_g_output
,
589 .vidioc_s_output
= vidioc_s_output
,
590 .vidioc_s_audout
= vidioc_s_audout
,
591 .vidioc_g_audout
= vidioc_g_audout
,
592 .vidioc_enumaudout
= vidioc_enumaudout
,
594 .vidioc_querystd
= vidioc_querystd
,
595 .vidioc_g_std
= vidioc_g_std
,
596 .vidioc_s_std
= vidioc_s_std
,
597 .vidioc_s_dv_timings
= vidioc_s_dv_timings
,
598 .vidioc_g_dv_timings
= vidioc_g_dv_timings
,
599 .vidioc_query_dv_timings
= vidioc_query_dv_timings
,
600 .vidioc_enum_dv_timings
= vidioc_enum_dv_timings
,
601 .vidioc_dv_timings_cap
= vidioc_dv_timings_cap
,
602 .vidioc_g_edid
= vidioc_g_edid
,
603 .vidioc_s_edid
= vidioc_s_edid
,
605 .vidioc_log_status
= vidioc_log_status
,
606 .vidioc_subscribe_event
= vidioc_subscribe_event
,
607 .vidioc_unsubscribe_event
= v4l2_event_unsubscribe
,
610 /* -----------------------------------------------------------------
611 Initialization and module stuff
612 ------------------------------------------------------------------*/
614 static void vivid_dev_release(struct v4l2_device
*v4l2_dev
)
616 struct vivid_dev
*dev
= container_of(v4l2_dev
, struct vivid_dev
, v4l2_dev
);
618 vivid_free_controls(dev
);
619 v4l2_device_unregister(&dev
->v4l2_dev
);
620 vfree(dev
->scaled_line
);
621 vfree(dev
->blended_line
);
623 vfree(dev
->bitmap_cap
);
624 vfree(dev
->bitmap_out
);
626 kfree(dev
->query_dv_timings_qmenu
);
630 #ifdef CONFIG_MEDIA_CONTROLLER
631 static const struct media_device_ops vivid_media_ops
= {
632 .req_validate
= vb2_request_validate
,
633 .req_queue
= vb2_request_queue
,
637 static int vivid_create_instance(struct platform_device
*pdev
, int inst
)
639 static const struct v4l2_dv_timings def_dv_timings
=
640 V4L2_DV_BT_CEA_1280X720P60
;
641 static const struct vb2_mem_ops
* const vivid_mem_ops
[2] = {
643 &vb2_dma_contig_memops
,
645 unsigned in_type_counter
[4] = { 0, 0, 0, 0 };
646 unsigned out_type_counter
[4] = { 0, 0, 0, 0 };
647 int ccs_cap
= ccs_cap_mode
[inst
];
648 int ccs_out
= ccs_out_mode
[inst
];
651 struct vivid_dev
*dev
;
652 struct video_device
*vfd
;
654 unsigned node_type
= node_types
[inst
];
655 unsigned int allocator
= allocators
[inst
];
656 v4l2_std_id tvnorms_cap
= 0, tvnorms_out
= 0;
660 /* allocate main vivid state structure */
661 dev
= kzalloc(sizeof(*dev
), GFP_KERNEL
);
667 #ifdef CONFIG_MEDIA_CONTROLLER
668 dev
->v4l2_dev
.mdev
= &dev
->mdev
;
670 /* Initialize media device */
671 strlcpy(dev
->mdev
.model
, VIVID_MODULE_NAME
, sizeof(dev
->mdev
.model
));
672 dev
->mdev
.dev
= &pdev
->dev
;
673 media_device_init(&dev
->mdev
);
674 dev
->mdev
.ops
= &vivid_media_ops
;
677 /* register v4l2_device */
678 snprintf(dev
->v4l2_dev
.name
, sizeof(dev
->v4l2_dev
.name
),
679 "%s-%03d", VIVID_MODULE_NAME
, inst
);
680 ret
= v4l2_device_register(&pdev
->dev
, &dev
->v4l2_dev
);
685 dev
->v4l2_dev
.release
= vivid_dev_release
;
687 /* start detecting feature set */
689 /* do we use single- or multi-planar? */
690 dev
->multiplanar
= multiplanar
[inst
] > 1;
691 v4l2_info(&dev
->v4l2_dev
, "using %splanar format API\n",
692 dev
->multiplanar
? "multi" : "single ");
694 /* how many inputs do we have and of what type? */
695 dev
->num_inputs
= num_inputs
[inst
];
696 if (dev
->num_inputs
< 1)
698 if (dev
->num_inputs
>= MAX_INPUTS
)
699 dev
->num_inputs
= MAX_INPUTS
;
700 for (i
= 0; i
< dev
->num_inputs
; i
++) {
701 dev
->input_type
[i
] = (input_types
[inst
] >> (i
* 2)) & 0x3;
702 dev
->input_name_counter
[i
] = in_type_counter
[dev
->input_type
[i
]]++;
704 dev
->has_audio_inputs
= in_type_counter
[TV
] && in_type_counter
[SVID
];
705 if (in_type_counter
[HDMI
] == 16) {
706 /* The CEC physical address only allows for max 15 inputs */
707 in_type_counter
[HDMI
]--;
711 /* how many outputs do we have and of what type? */
712 dev
->num_outputs
= num_outputs
[inst
];
713 if (dev
->num_outputs
< 1)
714 dev
->num_outputs
= 1;
715 if (dev
->num_outputs
>= MAX_OUTPUTS
)
716 dev
->num_outputs
= MAX_OUTPUTS
;
717 for (i
= 0; i
< dev
->num_outputs
; i
++) {
718 dev
->output_type
[i
] = ((output_types
[inst
] >> i
) & 1) ? HDMI
: SVID
;
719 dev
->output_name_counter
[i
] = out_type_counter
[dev
->output_type
[i
]]++;
721 dev
->has_audio_outputs
= out_type_counter
[SVID
];
722 if (out_type_counter
[HDMI
] == 16) {
724 * The CEC physical address only allows for max 15 inputs,
725 * so outputs are also limited to 15 to allow for easy
726 * CEC output to input mapping.
728 out_type_counter
[HDMI
]--;
732 /* do we create a video capture device? */
733 dev
->has_vid_cap
= node_type
& 0x0001;
735 /* do we create a vbi capture device? */
736 if (in_type_counter
[TV
] || in_type_counter
[SVID
]) {
737 dev
->has_raw_vbi_cap
= node_type
& 0x0004;
738 dev
->has_sliced_vbi_cap
= node_type
& 0x0008;
739 dev
->has_vbi_cap
= dev
->has_raw_vbi_cap
| dev
->has_sliced_vbi_cap
;
742 /* do we create a video output device? */
743 dev
->has_vid_out
= node_type
& 0x0100;
745 /* do we create a vbi output device? */
746 if (out_type_counter
[SVID
]) {
747 dev
->has_raw_vbi_out
= node_type
& 0x0400;
748 dev
->has_sliced_vbi_out
= node_type
& 0x0800;
749 dev
->has_vbi_out
= dev
->has_raw_vbi_out
| dev
->has_sliced_vbi_out
;
752 /* do we create a radio receiver device? */
753 dev
->has_radio_rx
= node_type
& 0x0010;
755 /* do we create a radio transmitter device? */
756 dev
->has_radio_tx
= node_type
& 0x1000;
758 /* do we create a software defined radio capture device? */
759 dev
->has_sdr_cap
= node_type
& 0x0020;
761 /* do we have a tuner? */
762 has_tuner
= ((dev
->has_vid_cap
|| dev
->has_vbi_cap
) && in_type_counter
[TV
]) ||
763 dev
->has_radio_rx
|| dev
->has_sdr_cap
;
765 /* do we have a modulator? */
766 has_modulator
= dev
->has_radio_tx
;
768 if (dev
->has_vid_cap
)
769 /* do we have a framebuffer for overlay testing? */
770 dev
->has_fb
= node_type
& 0x10000;
772 /* can we do crop/compose/scaling while capturing? */
773 if (no_error_inj
&& ccs_cap
== -1)
776 /* if ccs_cap == -1, then the use can select it using controls */
778 dev
->has_crop_cap
= ccs_cap
& 1;
779 dev
->has_compose_cap
= ccs_cap
& 2;
780 dev
->has_scaler_cap
= ccs_cap
& 4;
781 v4l2_info(&dev
->v4l2_dev
, "Capture Crop: %c Compose: %c Scaler: %c\n",
782 dev
->has_crop_cap
? 'Y' : 'N',
783 dev
->has_compose_cap
? 'Y' : 'N',
784 dev
->has_scaler_cap
? 'Y' : 'N');
787 /* can we do crop/compose/scaling with video output? */
788 if (no_error_inj
&& ccs_out
== -1)
791 /* if ccs_out == -1, then the use can select it using controls */
793 dev
->has_crop_out
= ccs_out
& 1;
794 dev
->has_compose_out
= ccs_out
& 2;
795 dev
->has_scaler_out
= ccs_out
& 4;
796 v4l2_info(&dev
->v4l2_dev
, "Output Crop: %c Compose: %c Scaler: %c\n",
797 dev
->has_crop_out
? 'Y' : 'N',
798 dev
->has_compose_out
? 'Y' : 'N',
799 dev
->has_scaler_out
? 'Y' : 'N');
802 /* end detecting feature set */
804 if (dev
->has_vid_cap
) {
805 /* set up the capabilities of the video capture device */
806 dev
->vid_cap_caps
= dev
->multiplanar
?
807 V4L2_CAP_VIDEO_CAPTURE_MPLANE
:
808 V4L2_CAP_VIDEO_CAPTURE
| V4L2_CAP_VIDEO_OVERLAY
;
809 dev
->vid_cap_caps
|= V4L2_CAP_STREAMING
| V4L2_CAP_READWRITE
;
810 if (dev
->has_audio_inputs
)
811 dev
->vid_cap_caps
|= V4L2_CAP_AUDIO
;
812 if (in_type_counter
[TV
])
813 dev
->vid_cap_caps
|= V4L2_CAP_TUNER
;
815 if (dev
->has_vid_out
) {
816 /* set up the capabilities of the video output device */
817 dev
->vid_out_caps
= dev
->multiplanar
?
818 V4L2_CAP_VIDEO_OUTPUT_MPLANE
:
819 V4L2_CAP_VIDEO_OUTPUT
;
821 dev
->vid_out_caps
|= V4L2_CAP_VIDEO_OUTPUT_OVERLAY
;
822 dev
->vid_out_caps
|= V4L2_CAP_STREAMING
| V4L2_CAP_READWRITE
;
823 if (dev
->has_audio_outputs
)
824 dev
->vid_out_caps
|= V4L2_CAP_AUDIO
;
826 if (dev
->has_vbi_cap
) {
827 /* set up the capabilities of the vbi capture device */
828 dev
->vbi_cap_caps
= (dev
->has_raw_vbi_cap
? V4L2_CAP_VBI_CAPTURE
: 0) |
829 (dev
->has_sliced_vbi_cap
? V4L2_CAP_SLICED_VBI_CAPTURE
: 0);
830 dev
->vbi_cap_caps
|= V4L2_CAP_STREAMING
| V4L2_CAP_READWRITE
;
831 if (dev
->has_audio_inputs
)
832 dev
->vbi_cap_caps
|= V4L2_CAP_AUDIO
;
833 if (in_type_counter
[TV
])
834 dev
->vbi_cap_caps
|= V4L2_CAP_TUNER
;
836 if (dev
->has_vbi_out
) {
837 /* set up the capabilities of the vbi output device */
838 dev
->vbi_out_caps
= (dev
->has_raw_vbi_out
? V4L2_CAP_VBI_OUTPUT
: 0) |
839 (dev
->has_sliced_vbi_out
? V4L2_CAP_SLICED_VBI_OUTPUT
: 0);
840 dev
->vbi_out_caps
|= V4L2_CAP_STREAMING
| V4L2_CAP_READWRITE
;
841 if (dev
->has_audio_outputs
)
842 dev
->vbi_out_caps
|= V4L2_CAP_AUDIO
;
844 if (dev
->has_sdr_cap
) {
845 /* set up the capabilities of the sdr capture device */
846 dev
->sdr_cap_caps
= V4L2_CAP_SDR_CAPTURE
| V4L2_CAP_TUNER
;
847 dev
->sdr_cap_caps
|= V4L2_CAP_STREAMING
| V4L2_CAP_READWRITE
;
849 /* set up the capabilities of the radio receiver device */
850 if (dev
->has_radio_rx
)
851 dev
->radio_rx_caps
= V4L2_CAP_RADIO
| V4L2_CAP_RDS_CAPTURE
|
852 V4L2_CAP_HW_FREQ_SEEK
| V4L2_CAP_TUNER
|
854 /* set up the capabilities of the radio transmitter device */
855 if (dev
->has_radio_tx
)
856 dev
->radio_tx_caps
= V4L2_CAP_RDS_OUTPUT
| V4L2_CAP_MODULATOR
|
860 /* initialize the test pattern generator */
861 tpg_init(&dev
->tpg
, 640, 360);
862 if (tpg_alloc(&dev
->tpg
, MAX_ZOOM
* MAX_WIDTH
))
864 dev
->scaled_line
= vzalloc(array_size(MAX_WIDTH
, MAX_ZOOM
));
865 if (!dev
->scaled_line
)
867 dev
->blended_line
= vzalloc(array_size(MAX_WIDTH
, MAX_ZOOM
));
868 if (!dev
->blended_line
)
872 dev
->edid
= vmalloc(256 * 128);
876 /* create a string array containing the names of all the preset timings */
877 while (v4l2_dv_timings_presets
[dev
->query_dv_timings_size
].bt
.width
)
878 dev
->query_dv_timings_size
++;
879 dev
->query_dv_timings_qmenu
= kmalloc_array(dev
->query_dv_timings_size
,
880 (sizeof(void *) + 32),
882 if (dev
->query_dv_timings_qmenu
== NULL
)
884 for (i
= 0; i
< dev
->query_dv_timings_size
; i
++) {
885 const struct v4l2_bt_timings
*bt
= &v4l2_dv_timings_presets
[i
].bt
;
886 char *p
= (char *)&dev
->query_dv_timings_qmenu
[dev
->query_dv_timings_size
];
890 dev
->query_dv_timings_qmenu
[i
] = p
;
892 htot
= V4L2_DV_BT_FRAME_WIDTH(bt
);
893 vtot
= V4L2_DV_BT_FRAME_HEIGHT(bt
);
894 snprintf(p
, 32, "%ux%u%s%u",
895 bt
->width
, bt
->height
, bt
->interlaced
? "i" : "p",
896 (u32
)bt
->pixelclock
/ (htot
* vtot
));
899 /* disable invalid ioctls based on the feature set */
900 if (!dev
->has_audio_inputs
) {
901 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_S_AUDIO
);
902 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_G_AUDIO
);
903 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_ENUMAUDIO
);
904 v4l2_disable_ioctl(&dev
->vbi_cap_dev
, VIDIOC_S_AUDIO
);
905 v4l2_disable_ioctl(&dev
->vbi_cap_dev
, VIDIOC_G_AUDIO
);
906 v4l2_disable_ioctl(&dev
->vbi_cap_dev
, VIDIOC_ENUMAUDIO
);
908 if (!dev
->has_audio_outputs
) {
909 v4l2_disable_ioctl(&dev
->vid_out_dev
, VIDIOC_S_AUDOUT
);
910 v4l2_disable_ioctl(&dev
->vid_out_dev
, VIDIOC_G_AUDOUT
);
911 v4l2_disable_ioctl(&dev
->vid_out_dev
, VIDIOC_ENUMAUDOUT
);
912 v4l2_disable_ioctl(&dev
->vbi_out_dev
, VIDIOC_S_AUDOUT
);
913 v4l2_disable_ioctl(&dev
->vbi_out_dev
, VIDIOC_G_AUDOUT
);
914 v4l2_disable_ioctl(&dev
->vbi_out_dev
, VIDIOC_ENUMAUDOUT
);
916 if (!in_type_counter
[TV
] && !in_type_counter
[SVID
]) {
917 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_S_STD
);
918 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_G_STD
);
919 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_ENUMSTD
);
920 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_QUERYSTD
);
922 if (!out_type_counter
[SVID
]) {
923 v4l2_disable_ioctl(&dev
->vid_out_dev
, VIDIOC_S_STD
);
924 v4l2_disable_ioctl(&dev
->vid_out_dev
, VIDIOC_G_STD
);
925 v4l2_disable_ioctl(&dev
->vid_out_dev
, VIDIOC_ENUMSTD
);
927 if (!has_tuner
&& !has_modulator
) {
928 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_S_FREQUENCY
);
929 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_G_FREQUENCY
);
930 v4l2_disable_ioctl(&dev
->vbi_cap_dev
, VIDIOC_S_FREQUENCY
);
931 v4l2_disable_ioctl(&dev
->vbi_cap_dev
, VIDIOC_G_FREQUENCY
);
934 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_S_TUNER
);
935 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_G_TUNER
);
936 v4l2_disable_ioctl(&dev
->vbi_cap_dev
, VIDIOC_S_TUNER
);
937 v4l2_disable_ioctl(&dev
->vbi_cap_dev
, VIDIOC_G_TUNER
);
939 if (in_type_counter
[HDMI
] == 0) {
940 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_S_EDID
);
941 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_G_EDID
);
942 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_DV_TIMINGS_CAP
);
943 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_G_DV_TIMINGS
);
944 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_S_DV_TIMINGS
);
945 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_ENUM_DV_TIMINGS
);
946 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_QUERY_DV_TIMINGS
);
948 if (out_type_counter
[HDMI
] == 0) {
949 v4l2_disable_ioctl(&dev
->vid_out_dev
, VIDIOC_G_EDID
);
950 v4l2_disable_ioctl(&dev
->vid_out_dev
, VIDIOC_DV_TIMINGS_CAP
);
951 v4l2_disable_ioctl(&dev
->vid_out_dev
, VIDIOC_G_DV_TIMINGS
);
952 v4l2_disable_ioctl(&dev
->vid_out_dev
, VIDIOC_S_DV_TIMINGS
);
953 v4l2_disable_ioctl(&dev
->vid_out_dev
, VIDIOC_ENUM_DV_TIMINGS
);
956 v4l2_disable_ioctl(&dev
->vid_out_dev
, VIDIOC_G_FBUF
);
957 v4l2_disable_ioctl(&dev
->vid_out_dev
, VIDIOC_S_FBUF
);
958 v4l2_disable_ioctl(&dev
->vid_out_dev
, VIDIOC_OVERLAY
);
960 v4l2_disable_ioctl(&dev
->vid_cap_dev
, VIDIOC_S_HW_FREQ_SEEK
);
961 v4l2_disable_ioctl(&dev
->vbi_cap_dev
, VIDIOC_S_HW_FREQ_SEEK
);
962 v4l2_disable_ioctl(&dev
->sdr_cap_dev
, VIDIOC_S_HW_FREQ_SEEK
);
963 v4l2_disable_ioctl(&dev
->vid_out_dev
, VIDIOC_S_FREQUENCY
);
964 v4l2_disable_ioctl(&dev
->vid_out_dev
, VIDIOC_G_FREQUENCY
);
965 v4l2_disable_ioctl(&dev
->vid_out_dev
, VIDIOC_ENUM_FRAMESIZES
);
966 v4l2_disable_ioctl(&dev
->vid_out_dev
, VIDIOC_ENUM_FRAMEINTERVALS
);
967 v4l2_disable_ioctl(&dev
->vbi_out_dev
, VIDIOC_S_FREQUENCY
);
968 v4l2_disable_ioctl(&dev
->vbi_out_dev
, VIDIOC_G_FREQUENCY
);
970 /* configure internal data */
971 dev
->fmt_cap
= &vivid_formats
[0];
972 dev
->fmt_out
= &vivid_formats
[0];
973 if (!dev
->multiplanar
)
974 vivid_formats
[0].data_offset
[0] = 0;
975 dev
->webcam_size_idx
= 1;
976 dev
->webcam_ival_idx
= 3;
977 tpg_s_fourcc(&dev
->tpg
, dev
->fmt_cap
->fourcc
);
978 dev
->std_cap
= V4L2_STD_PAL
;
979 dev
->std_out
= V4L2_STD_PAL
;
980 if (dev
->input_type
[0] == TV
|| dev
->input_type
[0] == SVID
)
981 tvnorms_cap
= V4L2_STD_ALL
;
982 if (dev
->output_type
[0] == SVID
)
983 tvnorms_out
= V4L2_STD_ALL
;
984 dev
->dv_timings_cap
= def_dv_timings
;
985 dev
->dv_timings_out
= def_dv_timings
;
986 dev
->tv_freq
= 2804 /* 175.25 * 16 */;
987 dev
->tv_audmode
= V4L2_TUNER_MODE_STEREO
;
988 dev
->tv_field_cap
= V4L2_FIELD_INTERLACED
;
989 dev
->tv_field_out
= V4L2_FIELD_INTERLACED
;
990 dev
->radio_rx_freq
= 95000 * 16;
991 dev
->radio_rx_audmode
= V4L2_TUNER_MODE_STEREO
;
992 if (dev
->has_radio_tx
) {
993 dev
->radio_tx_freq
= 95500 * 16;
994 dev
->radio_rds_loop
= false;
996 dev
->radio_tx_subchans
= V4L2_TUNER_SUB_STEREO
| V4L2_TUNER_SUB_RDS
;
997 dev
->sdr_adc_freq
= 300000;
998 dev
->sdr_fm_freq
= 50000000;
999 dev
->sdr_pixelformat
= V4L2_SDR_FMT_CU8
;
1000 dev
->sdr_buffersize
= SDR_CAP_SAMPLES_PER_BUF
* 2;
1002 dev
->edid_max_blocks
= dev
->edid_blocks
= 2;
1003 memcpy(dev
->edid
, vivid_hdmi_edid
, sizeof(vivid_hdmi_edid
));
1004 dev
->radio_rds_init_time
= ktime_get();
1006 /* create all controls */
1007 ret
= vivid_create_controls(dev
, ccs_cap
== -1, ccs_out
== -1, no_error_inj
,
1008 in_type_counter
[TV
] || in_type_counter
[SVID
] ||
1009 out_type_counter
[SVID
],
1010 in_type_counter
[HDMI
] || out_type_counter
[HDMI
]);
1015 * update the capture and output formats to do a proper initial
1018 vivid_update_format_cap(dev
, false);
1019 vivid_update_format_out(dev
);
1021 v4l2_ctrl_handler_setup(&dev
->ctrl_hdl_vid_cap
);
1022 v4l2_ctrl_handler_setup(&dev
->ctrl_hdl_vid_out
);
1023 v4l2_ctrl_handler_setup(&dev
->ctrl_hdl_vbi_cap
);
1024 v4l2_ctrl_handler_setup(&dev
->ctrl_hdl_vbi_out
);
1025 v4l2_ctrl_handler_setup(&dev
->ctrl_hdl_radio_rx
);
1026 v4l2_ctrl_handler_setup(&dev
->ctrl_hdl_radio_tx
);
1027 v4l2_ctrl_handler_setup(&dev
->ctrl_hdl_sdr_cap
);
1029 /* initialize overlay */
1030 dev
->fb_cap
.fmt
.width
= dev
->src_rect
.width
;
1031 dev
->fb_cap
.fmt
.height
= dev
->src_rect
.height
;
1032 dev
->fb_cap
.fmt
.pixelformat
= dev
->fmt_cap
->fourcc
;
1033 dev
->fb_cap
.fmt
.bytesperline
= dev
->src_rect
.width
* tpg_g_twopixelsize(&dev
->tpg
, 0) / 2;
1034 dev
->fb_cap
.fmt
.sizeimage
= dev
->src_rect
.height
* dev
->fb_cap
.fmt
.bytesperline
;
1036 /* initialize locks */
1037 spin_lock_init(&dev
->slock
);
1038 mutex_init(&dev
->mutex
);
1040 /* init dma queues */
1041 INIT_LIST_HEAD(&dev
->vid_cap_active
);
1042 INIT_LIST_HEAD(&dev
->vid_out_active
);
1043 INIT_LIST_HEAD(&dev
->vbi_cap_active
);
1044 INIT_LIST_HEAD(&dev
->vbi_out_active
);
1045 INIT_LIST_HEAD(&dev
->sdr_cap_active
);
1047 INIT_LIST_HEAD(&dev
->cec_work_list
);
1048 spin_lock_init(&dev
->cec_slock
);
1050 * Same as create_singlethread_workqueue, but now I can use the
1051 * string formatting of alloc_ordered_workqueue.
1053 dev
->cec_workqueue
=
1054 alloc_ordered_workqueue("vivid-%03d-cec", WQ_MEM_RECLAIM
, inst
);
1055 if (!dev
->cec_workqueue
) {
1061 dma_coerce_mask_and_coherent(&pdev
->dev
, DMA_BIT_MASK(32));
1062 else if (allocator
>= ARRAY_SIZE(vivid_mem_ops
))
1065 /* start creating the vb2 queues */
1066 if (dev
->has_vid_cap
) {
1067 /* initialize vid_cap queue */
1068 q
= &dev
->vb_vid_cap_q
;
1069 q
->type
= dev
->multiplanar
? V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE
:
1070 V4L2_BUF_TYPE_VIDEO_CAPTURE
;
1071 q
->io_modes
= VB2_MMAP
| VB2_USERPTR
| VB2_DMABUF
| VB2_READ
;
1073 q
->buf_struct_size
= sizeof(struct vivid_buffer
);
1074 q
->ops
= &vivid_vid_cap_qops
;
1075 q
->mem_ops
= vivid_mem_ops
[allocator
];
1076 q
->timestamp_flags
= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC
;
1077 q
->min_buffers_needed
= 2;
1078 q
->lock
= &dev
->mutex
;
1079 q
->dev
= dev
->v4l2_dev
.dev
;
1080 q
->supports_requests
= true;
1082 ret
= vb2_queue_init(q
);
1087 if (dev
->has_vid_out
) {
1088 /* initialize vid_out queue */
1089 q
= &dev
->vb_vid_out_q
;
1090 q
->type
= dev
->multiplanar
? V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE
:
1091 V4L2_BUF_TYPE_VIDEO_OUTPUT
;
1092 q
->io_modes
= VB2_MMAP
| VB2_USERPTR
| VB2_DMABUF
| VB2_WRITE
;
1094 q
->buf_struct_size
= sizeof(struct vivid_buffer
);
1095 q
->ops
= &vivid_vid_out_qops
;
1096 q
->mem_ops
= vivid_mem_ops
[allocator
];
1097 q
->timestamp_flags
= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC
;
1098 q
->min_buffers_needed
= 2;
1099 q
->lock
= &dev
->mutex
;
1100 q
->dev
= dev
->v4l2_dev
.dev
;
1101 q
->supports_requests
= true;
1103 ret
= vb2_queue_init(q
);
1108 if (dev
->has_vbi_cap
) {
1109 /* initialize vbi_cap queue */
1110 q
= &dev
->vb_vbi_cap_q
;
1111 q
->type
= dev
->has_raw_vbi_cap
? V4L2_BUF_TYPE_VBI_CAPTURE
:
1112 V4L2_BUF_TYPE_SLICED_VBI_CAPTURE
;
1113 q
->io_modes
= VB2_MMAP
| VB2_USERPTR
| VB2_DMABUF
| VB2_READ
;
1115 q
->buf_struct_size
= sizeof(struct vivid_buffer
);
1116 q
->ops
= &vivid_vbi_cap_qops
;
1117 q
->mem_ops
= vivid_mem_ops
[allocator
];
1118 q
->timestamp_flags
= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC
;
1119 q
->min_buffers_needed
= 2;
1120 q
->lock
= &dev
->mutex
;
1121 q
->dev
= dev
->v4l2_dev
.dev
;
1122 q
->supports_requests
= true;
1124 ret
= vb2_queue_init(q
);
1129 if (dev
->has_vbi_out
) {
1130 /* initialize vbi_out queue */
1131 q
= &dev
->vb_vbi_out_q
;
1132 q
->type
= dev
->has_raw_vbi_out
? V4L2_BUF_TYPE_VBI_OUTPUT
:
1133 V4L2_BUF_TYPE_SLICED_VBI_OUTPUT
;
1134 q
->io_modes
= VB2_MMAP
| VB2_USERPTR
| VB2_DMABUF
| VB2_WRITE
;
1136 q
->buf_struct_size
= sizeof(struct vivid_buffer
);
1137 q
->ops
= &vivid_vbi_out_qops
;
1138 q
->mem_ops
= vivid_mem_ops
[allocator
];
1139 q
->timestamp_flags
= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC
;
1140 q
->min_buffers_needed
= 2;
1141 q
->lock
= &dev
->mutex
;
1142 q
->dev
= dev
->v4l2_dev
.dev
;
1143 q
->supports_requests
= true;
1145 ret
= vb2_queue_init(q
);
1150 if (dev
->has_sdr_cap
) {
1151 /* initialize sdr_cap queue */
1152 q
= &dev
->vb_sdr_cap_q
;
1153 q
->type
= V4L2_BUF_TYPE_SDR_CAPTURE
;
1154 q
->io_modes
= VB2_MMAP
| VB2_USERPTR
| VB2_DMABUF
| VB2_READ
;
1156 q
->buf_struct_size
= sizeof(struct vivid_buffer
);
1157 q
->ops
= &vivid_sdr_cap_qops
;
1158 q
->mem_ops
= vivid_mem_ops
[allocator
];
1159 q
->timestamp_flags
= V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC
;
1160 q
->min_buffers_needed
= 8;
1161 q
->lock
= &dev
->mutex
;
1162 q
->dev
= dev
->v4l2_dev
.dev
;
1163 q
->supports_requests
= true;
1165 ret
= vb2_queue_init(q
);
1171 /* Create framebuffer for testing capture/output overlay */
1172 ret
= vivid_fb_init(dev
);
1175 v4l2_info(&dev
->v4l2_dev
, "Framebuffer device registered as fb%d\n",
1179 /* finally start creating the device nodes */
1180 if (dev
->has_vid_cap
) {
1181 vfd
= &dev
->vid_cap_dev
;
1182 snprintf(vfd
->name
, sizeof(vfd
->name
),
1183 "vivid-%03d-vid-cap", inst
);
1184 vfd
->fops
= &vivid_fops
;
1185 vfd
->ioctl_ops
= &vivid_ioctl_ops
;
1186 vfd
->device_caps
= dev
->vid_cap_caps
;
1187 vfd
->release
= video_device_release_empty
;
1188 vfd
->v4l2_dev
= &dev
->v4l2_dev
;
1189 vfd
->queue
= &dev
->vb_vid_cap_q
;
1190 vfd
->tvnorms
= tvnorms_cap
;
1193 * Provide a mutex to v4l2 core. It will be used to protect
1194 * all fops and v4l2 ioctls.
1196 vfd
->lock
= &dev
->mutex
;
1197 video_set_drvdata(vfd
, dev
);
1199 #ifdef CONFIG_MEDIA_CONTROLLER
1200 dev
->vid_cap_pad
.flags
= MEDIA_PAD_FL_SINK
;
1201 ret
= media_entity_pads_init(&vfd
->entity
, 1, &dev
->vid_cap_pad
);
1206 #ifdef CONFIG_VIDEO_VIVID_CEC
1207 if (in_type_counter
[HDMI
]) {
1208 struct cec_adapter
*adap
;
1210 adap
= vivid_cec_alloc_adap(dev
, 0, false);
1211 ret
= PTR_ERR_OR_ZERO(adap
);
1214 dev
->cec_rx_adap
= adap
;
1215 ret
= cec_register_adapter(adap
, &pdev
->dev
);
1217 cec_delete_adapter(adap
);
1218 dev
->cec_rx_adap
= NULL
;
1221 cec_s_phys_addr(adap
, 0, false);
1222 v4l2_info(&dev
->v4l2_dev
, "CEC adapter %s registered for HDMI input 0\n",
1223 dev_name(&adap
->devnode
.dev
));
1227 ret
= video_register_device(vfd
, VFL_TYPE_GRABBER
, vid_cap_nr
[inst
]);
1230 v4l2_info(&dev
->v4l2_dev
, "V4L2 capture device registered as %s\n",
1231 video_device_node_name(vfd
));
1234 if (dev
->has_vid_out
) {
1235 #ifdef CONFIG_VIDEO_VIVID_CEC
1236 unsigned int bus_cnt
= 0;
1239 vfd
= &dev
->vid_out_dev
;
1240 snprintf(vfd
->name
, sizeof(vfd
->name
),
1241 "vivid-%03d-vid-out", inst
);
1242 vfd
->vfl_dir
= VFL_DIR_TX
;
1243 vfd
->fops
= &vivid_fops
;
1244 vfd
->ioctl_ops
= &vivid_ioctl_ops
;
1245 vfd
->device_caps
= dev
->vid_out_caps
;
1246 vfd
->release
= video_device_release_empty
;
1247 vfd
->v4l2_dev
= &dev
->v4l2_dev
;
1248 vfd
->queue
= &dev
->vb_vid_out_q
;
1249 vfd
->tvnorms
= tvnorms_out
;
1252 * Provide a mutex to v4l2 core. It will be used to protect
1253 * all fops and v4l2 ioctls.
1255 vfd
->lock
= &dev
->mutex
;
1256 video_set_drvdata(vfd
, dev
);
1258 #ifdef CONFIG_MEDIA_CONTROLLER
1259 dev
->vid_out_pad
.flags
= MEDIA_PAD_FL_SOURCE
;
1260 ret
= media_entity_pads_init(&vfd
->entity
, 1, &dev
->vid_out_pad
);
1265 #ifdef CONFIG_VIDEO_VIVID_CEC
1266 for (i
= 0; i
< dev
->num_outputs
; i
++) {
1267 struct cec_adapter
*adap
;
1269 if (dev
->output_type
[i
] != HDMI
)
1271 dev
->cec_output2bus_map
[i
] = bus_cnt
;
1272 adap
= vivid_cec_alloc_adap(dev
, bus_cnt
, true);
1273 ret
= PTR_ERR_OR_ZERO(adap
);
1276 dev
->cec_tx_adap
[bus_cnt
] = adap
;
1277 ret
= cec_register_adapter(adap
, &pdev
->dev
);
1279 cec_delete_adapter(adap
);
1280 dev
->cec_tx_adap
[bus_cnt
] = NULL
;
1283 v4l2_info(&dev
->v4l2_dev
, "CEC adapter %s registered for HDMI output %d\n",
1284 dev_name(&adap
->devnode
.dev
), bus_cnt
);
1286 if (bus_cnt
<= out_type_counter
[HDMI
])
1287 cec_s_phys_addr(adap
, bus_cnt
<< 12, false);
1289 cec_s_phys_addr(adap
, 0x1000, false);
1293 ret
= video_register_device(vfd
, VFL_TYPE_GRABBER
, vid_out_nr
[inst
]);
1296 v4l2_info(&dev
->v4l2_dev
, "V4L2 output device registered as %s\n",
1297 video_device_node_name(vfd
));
1300 if (dev
->has_vbi_cap
) {
1301 vfd
= &dev
->vbi_cap_dev
;
1302 snprintf(vfd
->name
, sizeof(vfd
->name
),
1303 "vivid-%03d-vbi-cap", inst
);
1304 vfd
->fops
= &vivid_fops
;
1305 vfd
->ioctl_ops
= &vivid_ioctl_ops
;
1306 vfd
->device_caps
= dev
->vbi_cap_caps
;
1307 vfd
->release
= video_device_release_empty
;
1308 vfd
->v4l2_dev
= &dev
->v4l2_dev
;
1309 vfd
->queue
= &dev
->vb_vbi_cap_q
;
1310 vfd
->lock
= &dev
->mutex
;
1311 vfd
->tvnorms
= tvnorms_cap
;
1312 video_set_drvdata(vfd
, dev
);
1314 #ifdef CONFIG_MEDIA_CONTROLLER
1315 dev
->vbi_cap_pad
.flags
= MEDIA_PAD_FL_SINK
;
1316 ret
= media_entity_pads_init(&vfd
->entity
, 1, &dev
->vbi_cap_pad
);
1321 ret
= video_register_device(vfd
, VFL_TYPE_VBI
, vbi_cap_nr
[inst
]);
1324 v4l2_info(&dev
->v4l2_dev
, "V4L2 capture device registered as %s, supports %s VBI\n",
1325 video_device_node_name(vfd
),
1326 (dev
->has_raw_vbi_cap
&& dev
->has_sliced_vbi_cap
) ?
1328 (dev
->has_raw_vbi_cap
? "raw" : "sliced"));
1331 if (dev
->has_vbi_out
) {
1332 vfd
= &dev
->vbi_out_dev
;
1333 snprintf(vfd
->name
, sizeof(vfd
->name
),
1334 "vivid-%03d-vbi-out", inst
);
1335 vfd
->vfl_dir
= VFL_DIR_TX
;
1336 vfd
->fops
= &vivid_fops
;
1337 vfd
->ioctl_ops
= &vivid_ioctl_ops
;
1338 vfd
->device_caps
= dev
->vbi_out_caps
;
1339 vfd
->release
= video_device_release_empty
;
1340 vfd
->v4l2_dev
= &dev
->v4l2_dev
;
1341 vfd
->queue
= &dev
->vb_vbi_out_q
;
1342 vfd
->lock
= &dev
->mutex
;
1343 vfd
->tvnorms
= tvnorms_out
;
1344 video_set_drvdata(vfd
, dev
);
1346 #ifdef CONFIG_MEDIA_CONTROLLER
1347 dev
->vbi_out_pad
.flags
= MEDIA_PAD_FL_SOURCE
;
1348 ret
= media_entity_pads_init(&vfd
->entity
, 1, &dev
->vbi_out_pad
);
1353 ret
= video_register_device(vfd
, VFL_TYPE_VBI
, vbi_out_nr
[inst
]);
1356 v4l2_info(&dev
->v4l2_dev
, "V4L2 output device registered as %s, supports %s VBI\n",
1357 video_device_node_name(vfd
),
1358 (dev
->has_raw_vbi_out
&& dev
->has_sliced_vbi_out
) ?
1360 (dev
->has_raw_vbi_out
? "raw" : "sliced"));
1363 if (dev
->has_sdr_cap
) {
1364 vfd
= &dev
->sdr_cap_dev
;
1365 snprintf(vfd
->name
, sizeof(vfd
->name
),
1366 "vivid-%03d-sdr-cap", inst
);
1367 vfd
->fops
= &vivid_fops
;
1368 vfd
->ioctl_ops
= &vivid_ioctl_ops
;
1369 vfd
->device_caps
= dev
->sdr_cap_caps
;
1370 vfd
->release
= video_device_release_empty
;
1371 vfd
->v4l2_dev
= &dev
->v4l2_dev
;
1372 vfd
->queue
= &dev
->vb_sdr_cap_q
;
1373 vfd
->lock
= &dev
->mutex
;
1374 video_set_drvdata(vfd
, dev
);
1376 #ifdef CONFIG_MEDIA_CONTROLLER
1377 dev
->sdr_cap_pad
.flags
= MEDIA_PAD_FL_SINK
;
1378 ret
= media_entity_pads_init(&vfd
->entity
, 1, &dev
->sdr_cap_pad
);
1383 ret
= video_register_device(vfd
, VFL_TYPE_SDR
, sdr_cap_nr
[inst
]);
1386 v4l2_info(&dev
->v4l2_dev
, "V4L2 capture device registered as %s\n",
1387 video_device_node_name(vfd
));
1390 if (dev
->has_radio_rx
) {
1391 vfd
= &dev
->radio_rx_dev
;
1392 snprintf(vfd
->name
, sizeof(vfd
->name
),
1393 "vivid-%03d-rad-rx", inst
);
1394 vfd
->fops
= &vivid_radio_fops
;
1395 vfd
->ioctl_ops
= &vivid_ioctl_ops
;
1396 vfd
->device_caps
= dev
->radio_rx_caps
;
1397 vfd
->release
= video_device_release_empty
;
1398 vfd
->v4l2_dev
= &dev
->v4l2_dev
;
1399 vfd
->lock
= &dev
->mutex
;
1400 video_set_drvdata(vfd
, dev
);
1402 ret
= video_register_device(vfd
, VFL_TYPE_RADIO
, radio_rx_nr
[inst
]);
1405 v4l2_info(&dev
->v4l2_dev
, "V4L2 receiver device registered as %s\n",
1406 video_device_node_name(vfd
));
1409 if (dev
->has_radio_tx
) {
1410 vfd
= &dev
->radio_tx_dev
;
1411 snprintf(vfd
->name
, sizeof(vfd
->name
),
1412 "vivid-%03d-rad-tx", inst
);
1413 vfd
->vfl_dir
= VFL_DIR_TX
;
1414 vfd
->fops
= &vivid_radio_fops
;
1415 vfd
->ioctl_ops
= &vivid_ioctl_ops
;
1416 vfd
->device_caps
= dev
->radio_tx_caps
;
1417 vfd
->release
= video_device_release_empty
;
1418 vfd
->v4l2_dev
= &dev
->v4l2_dev
;
1419 vfd
->lock
= &dev
->mutex
;
1420 video_set_drvdata(vfd
, dev
);
1422 ret
= video_register_device(vfd
, VFL_TYPE_RADIO
, radio_tx_nr
[inst
]);
1425 v4l2_info(&dev
->v4l2_dev
, "V4L2 transmitter device registered as %s\n",
1426 video_device_node_name(vfd
));
1429 #ifdef CONFIG_MEDIA_CONTROLLER
1430 /* Register the media device */
1431 ret
= media_device_register(&dev
->mdev
);
1433 dev_err(dev
->mdev
.dev
,
1434 "media device register failed (err=%d)\n", ret
);
1439 /* Now that everything is fine, let's add it to device list */
1440 vivid_devs
[inst
] = dev
;
1445 #ifdef CONFIG_MEDIA_CONTROLLER
1446 media_device_unregister(&dev
->mdev
);
1448 video_unregister_device(&dev
->radio_tx_dev
);
1449 video_unregister_device(&dev
->radio_rx_dev
);
1450 video_unregister_device(&dev
->sdr_cap_dev
);
1451 video_unregister_device(&dev
->vbi_out_dev
);
1452 video_unregister_device(&dev
->vbi_cap_dev
);
1453 video_unregister_device(&dev
->vid_out_dev
);
1454 video_unregister_device(&dev
->vid_cap_dev
);
1455 cec_unregister_adapter(dev
->cec_rx_adap
);
1456 for (i
= 0; i
< MAX_OUTPUTS
; i
++)
1457 cec_unregister_adapter(dev
->cec_tx_adap
[i
]);
1458 if (dev
->cec_workqueue
) {
1459 vivid_cec_bus_free_work(dev
);
1460 destroy_workqueue(dev
->cec_workqueue
);
1463 v4l2_device_put(&dev
->v4l2_dev
);
1467 /* This routine allocates from 1 to n_devs virtual drivers.
1469 The real maximum number of virtual drivers will depend on how many drivers
1470 will succeed. This is limited to the maximum number of devices that
1471 videodev supports, which is equal to VIDEO_NUM_DEVICES.
1473 static int vivid_probe(struct platform_device
*pdev
)
1475 const struct font_desc
*font
= find_font("VGA8x16");
1479 pr_err("vivid: could not find font\n");
1483 tpg_set_font(font
->data
);
1485 n_devs
= clamp_t(unsigned, n_devs
, 1, VIVID_MAX_DEVS
);
1487 for (i
= 0; i
< n_devs
; i
++) {
1488 ret
= vivid_create_instance(pdev
, i
);
1490 /* If some instantiations succeeded, keep driver */
1498 pr_err("vivid: error %d while loading driver\n", ret
);
1502 /* n_devs will reflect the actual number of allocated devices */
1508 static int vivid_remove(struct platform_device
*pdev
)
1510 struct vivid_dev
*dev
;
1513 for (i
= 0; i
< n_devs
; i
++) {
1514 dev
= vivid_devs
[i
];
1518 #ifdef CONFIG_MEDIA_CONTROLLER
1519 media_device_unregister(&dev
->mdev
);
1522 if (dev
->has_vid_cap
) {
1523 v4l2_info(&dev
->v4l2_dev
, "unregistering %s\n",
1524 video_device_node_name(&dev
->vid_cap_dev
));
1525 video_unregister_device(&dev
->vid_cap_dev
);
1527 if (dev
->has_vid_out
) {
1528 v4l2_info(&dev
->v4l2_dev
, "unregistering %s\n",
1529 video_device_node_name(&dev
->vid_out_dev
));
1530 video_unregister_device(&dev
->vid_out_dev
);
1532 if (dev
->has_vbi_cap
) {
1533 v4l2_info(&dev
->v4l2_dev
, "unregistering %s\n",
1534 video_device_node_name(&dev
->vbi_cap_dev
));
1535 video_unregister_device(&dev
->vbi_cap_dev
);
1537 if (dev
->has_vbi_out
) {
1538 v4l2_info(&dev
->v4l2_dev
, "unregistering %s\n",
1539 video_device_node_name(&dev
->vbi_out_dev
));
1540 video_unregister_device(&dev
->vbi_out_dev
);
1542 if (dev
->has_sdr_cap
) {
1543 v4l2_info(&dev
->v4l2_dev
, "unregistering %s\n",
1544 video_device_node_name(&dev
->sdr_cap_dev
));
1545 video_unregister_device(&dev
->sdr_cap_dev
);
1547 if (dev
->has_radio_rx
) {
1548 v4l2_info(&dev
->v4l2_dev
, "unregistering %s\n",
1549 video_device_node_name(&dev
->radio_rx_dev
));
1550 video_unregister_device(&dev
->radio_rx_dev
);
1552 if (dev
->has_radio_tx
) {
1553 v4l2_info(&dev
->v4l2_dev
, "unregistering %s\n",
1554 video_device_node_name(&dev
->radio_tx_dev
));
1555 video_unregister_device(&dev
->radio_tx_dev
);
1558 v4l2_info(&dev
->v4l2_dev
, "unregistering fb%d\n",
1560 unregister_framebuffer(&dev
->fb_info
);
1561 vivid_fb_release_buffers(dev
);
1563 cec_unregister_adapter(dev
->cec_rx_adap
);
1564 for (j
= 0; j
< MAX_OUTPUTS
; j
++)
1565 cec_unregister_adapter(dev
->cec_tx_adap
[j
]);
1566 if (dev
->cec_workqueue
) {
1567 vivid_cec_bus_free_work(dev
);
1568 destroy_workqueue(dev
->cec_workqueue
);
1570 v4l2_device_put(&dev
->v4l2_dev
);
1571 vivid_devs
[i
] = NULL
;
1576 static void vivid_pdev_release(struct device
*dev
)
1580 static struct platform_device vivid_pdev
= {
1582 .dev
.release
= vivid_pdev_release
,
1585 static struct platform_driver vivid_pdrv
= {
1586 .probe
= vivid_probe
,
1587 .remove
= vivid_remove
,
1593 static int __init
vivid_init(void)
1597 ret
= platform_device_register(&vivid_pdev
);
1601 ret
= platform_driver_register(&vivid_pdrv
);
1603 platform_device_unregister(&vivid_pdev
);
1608 static void __exit
vivid_exit(void)
1610 platform_driver_unregister(&vivid_pdrv
);
1611 platform_device_unregister(&vivid_pdev
);
1614 module_init(vivid_init
);
1615 module_exit(vivid_exit
);