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