xref: /linux/drivers/media/v4l2-core/v4l2-dev.c (revision 6fd600d742744dc7ef7fc65ca26daa2b1163158a)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Video capture interface for Linux version 2
4  *
5  *	A generic video device interface for the LINUX operating system
6  *	using a set of device structures/vectors for low level operations.
7  *
8  * Authors:	Alan Cox, <alan@lxorguk.ukuu.org.uk> (version 1)
9  *              Mauro Carvalho Chehab <mchehab@kernel.org> (version 2)
10  *
11  * Fixes:	20000516  Claudio Matsuoka <claudio@conectiva.com>
12  *		- Added procfs support
13  */
14 
15 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
16 
17 #include <linux/debugfs.h>
18 #include <linux/module.h>
19 #include <linux/types.h>
20 #include <linux/kernel.h>
21 #include <linux/mm.h>
22 #include <linux/string.h>
23 #include <linux/errno.h>
24 #include <linux/init.h>
25 #include <linux/kmod.h>
26 #include <linux/slab.h>
27 #include <linux/uaccess.h>
28 
29 #include <media/v4l2-common.h>
30 #include <media/v4l2-device.h>
31 #include <media/v4l2-ioctl.h>
32 #include <media/v4l2-event.h>
33 
34 #define VIDEO_NUM_DEVICES	256
35 #define VIDEO_NAME              "video4linux"
36 
37 #define dprintk(fmt, arg...) do {					\
38 		printk(KERN_DEBUG pr_fmt("%s: " fmt),			\
39 		       __func__, ##arg);				\
40 } while (0)
41 
42 /*
43  *	sysfs stuff
44  */
45 
index_show(struct device * cd,struct device_attribute * attr,char * buf)46 static ssize_t index_show(struct device *cd,
47 			  struct device_attribute *attr, char *buf)
48 {
49 	struct video_device *vdev = to_video_device(cd);
50 
51 	return sprintf(buf, "%i\n", vdev->index);
52 }
53 static DEVICE_ATTR_RO(index);
54 
dev_debug_show(struct device * cd,struct device_attribute * attr,char * buf)55 static ssize_t dev_debug_show(struct device *cd,
56 			  struct device_attribute *attr, char *buf)
57 {
58 	struct video_device *vdev = to_video_device(cd);
59 
60 	return sprintf(buf, "%i\n", vdev->dev_debug);
61 }
62 
dev_debug_store(struct device * cd,struct device_attribute * attr,const char * buf,size_t len)63 static ssize_t dev_debug_store(struct device *cd, struct device_attribute *attr,
64 			  const char *buf, size_t len)
65 {
66 	struct video_device *vdev = to_video_device(cd);
67 	int res = 0;
68 	u16 value;
69 
70 	res = kstrtou16(buf, 0, &value);
71 	if (res)
72 		return res;
73 
74 	vdev->dev_debug = value;
75 	return len;
76 }
77 static DEVICE_ATTR_RW(dev_debug);
78 
name_show(struct device * cd,struct device_attribute * attr,char * buf)79 static ssize_t name_show(struct device *cd,
80 			 struct device_attribute *attr, char *buf)
81 {
82 	struct video_device *vdev = to_video_device(cd);
83 
84 	return sprintf(buf, "%.*s\n", (int)sizeof(vdev->name), vdev->name);
85 }
86 static DEVICE_ATTR_RO(name);
87 
88 static struct attribute *video_device_attrs[] = {
89 	&dev_attr_name.attr,
90 	&dev_attr_dev_debug.attr,
91 	&dev_attr_index.attr,
92 	NULL,
93 };
94 ATTRIBUTE_GROUPS(video_device);
95 
96 /*
97  *	Active devices
98  */
99 static struct video_device *video_devices[VIDEO_NUM_DEVICES];
100 static DEFINE_MUTEX(videodev_lock);
101 static DECLARE_BITMAP(devnode_nums[VFL_TYPE_MAX], VIDEO_NUM_DEVICES);
102 
103 /* Device node utility functions */
104 
105 /* Note: these utility functions all assume that vfl_type is in the range
106    [0, VFL_TYPE_MAX-1]. */
107 
108 #ifdef CONFIG_VIDEO_FIXED_MINOR_RANGES
109 /* Return the bitmap corresponding to vfl_type. */
devnode_bits(enum vfl_devnode_type vfl_type)110 static inline unsigned long *devnode_bits(enum vfl_devnode_type vfl_type)
111 {
112 	/* Any types not assigned to fixed minor ranges must be mapped to
113 	   one single bitmap for the purposes of finding a free node number
114 	   since all those unassigned types use the same minor range. */
115 	int idx = (vfl_type > VFL_TYPE_RADIO) ? VFL_TYPE_MAX - 1 : vfl_type;
116 
117 	return devnode_nums[idx];
118 }
119 #else
120 /* Return the bitmap corresponding to vfl_type. */
devnode_bits(enum vfl_devnode_type vfl_type)121 static inline unsigned long *devnode_bits(enum vfl_devnode_type vfl_type)
122 {
123 	return devnode_nums[vfl_type];
124 }
125 #endif
126 
127 /* Mark device node number vdev->num as used */
devnode_set(struct video_device * vdev)128 static inline void devnode_set(struct video_device *vdev)
129 {
130 	set_bit(vdev->num, devnode_bits(vdev->vfl_type));
131 }
132 
133 /* Mark device node number vdev->num as unused */
devnode_clear(struct video_device * vdev)134 static inline void devnode_clear(struct video_device *vdev)
135 {
136 	clear_bit(vdev->num, devnode_bits(vdev->vfl_type));
137 }
138 
139 /* Try to find a free device node number in the range [from, to> */
devnode_find(struct video_device * vdev,int from,int to)140 static inline int devnode_find(struct video_device *vdev, int from, int to)
141 {
142 	return find_next_zero_bit(devnode_bits(vdev->vfl_type), to, from);
143 }
144 
video_device_alloc(void)145 struct video_device *video_device_alloc(void)
146 {
147 	return kzalloc(sizeof(struct video_device), GFP_KERNEL);
148 }
149 EXPORT_SYMBOL(video_device_alloc);
150 
video_device_release(struct video_device * vdev)151 void video_device_release(struct video_device *vdev)
152 {
153 	kfree(vdev);
154 }
155 EXPORT_SYMBOL(video_device_release);
156 
video_device_release_empty(struct video_device * vdev)157 void video_device_release_empty(struct video_device *vdev)
158 {
159 	/* Do nothing */
160 	/* Only valid when the video_device struct is a static. */
161 }
162 EXPORT_SYMBOL(video_device_release_empty);
163 
video_get(struct video_device * vdev)164 static inline void video_get(struct video_device *vdev)
165 {
166 	get_device(&vdev->dev);
167 }
168 
video_put(struct video_device * vdev)169 static inline void video_put(struct video_device *vdev)
170 {
171 	put_device(&vdev->dev);
172 }
173 
174 /* Called when the last user of the video device exits. */
v4l2_device_release(struct device * cd)175 static void v4l2_device_release(struct device *cd)
176 {
177 	struct video_device *vdev = to_video_device(cd);
178 	struct v4l2_device *v4l2_dev = vdev->v4l2_dev;
179 
180 	mutex_lock(&videodev_lock);
181 	if (WARN_ON(video_devices[vdev->minor] != vdev)) {
182 		/* should not happen */
183 		mutex_unlock(&videodev_lock);
184 		return;
185 	}
186 
187 	/* Free up this device for reuse */
188 	video_devices[vdev->minor] = NULL;
189 
190 	/* Delete the cdev on this minor as well */
191 	cdev_del(vdev->cdev);
192 	/* Just in case some driver tries to access this from
193 	   the release() callback. */
194 	vdev->cdev = NULL;
195 
196 	/* Mark device node number as free */
197 	devnode_clear(vdev);
198 
199 	mutex_unlock(&videodev_lock);
200 
201 #if defined(CONFIG_MEDIA_CONTROLLER)
202 	if (v4l2_dev->mdev && vdev->vfl_dir != VFL_DIR_M2M) {
203 		/* Remove interfaces and interface links */
204 		media_devnode_remove(vdev->intf_devnode);
205 		if (vdev->entity.function != MEDIA_ENT_F_UNKNOWN)
206 			media_device_unregister_entity(&vdev->entity);
207 	}
208 #endif
209 
210 	/* Do not call v4l2_device_put if there is no release callback set.
211 	 * Drivers that have no v4l2_device release callback might free the
212 	 * v4l2_dev instance in the video_device release callback below, so we
213 	 * must perform this check here.
214 	 *
215 	 * TODO: In the long run all drivers that use v4l2_device should use the
216 	 * v4l2_device release callback. This check will then be unnecessary.
217 	 */
218 	if (v4l2_dev->release == NULL)
219 		v4l2_dev = NULL;
220 
221 	/* Release video_device and perform other
222 	   cleanups as needed. */
223 	vdev->release(vdev);
224 
225 	/* Decrease v4l2_device refcount */
226 	if (v4l2_dev)
227 		v4l2_device_put(v4l2_dev);
228 }
229 
230 static struct class video_class = {
231 	.name = VIDEO_NAME,
232 	.dev_groups = video_device_groups,
233 };
234 
video_devdata(struct file * file)235 struct video_device *video_devdata(struct file *file)
236 {
237 	return video_devices[iminor(file_inode(file))];
238 }
239 EXPORT_SYMBOL(video_devdata);
240 
241 
242 /* Priority handling */
243 
prio_is_valid(enum v4l2_priority prio)244 static inline bool prio_is_valid(enum v4l2_priority prio)
245 {
246 	return prio == V4L2_PRIORITY_BACKGROUND ||
247 	       prio == V4L2_PRIORITY_INTERACTIVE ||
248 	       prio == V4L2_PRIORITY_RECORD;
249 }
250 
v4l2_prio_init(struct v4l2_prio_state * global)251 void v4l2_prio_init(struct v4l2_prio_state *global)
252 {
253 	memset(global, 0, sizeof(*global));
254 }
255 EXPORT_SYMBOL(v4l2_prio_init);
256 
v4l2_prio_change(struct v4l2_prio_state * global,enum v4l2_priority * local,enum v4l2_priority new)257 int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local,
258 		     enum v4l2_priority new)
259 {
260 	if (!prio_is_valid(new))
261 		return -EINVAL;
262 	if (*local == new)
263 		return 0;
264 
265 	atomic_inc(&global->prios[new]);
266 	if (prio_is_valid(*local))
267 		atomic_dec(&global->prios[*local]);
268 	*local = new;
269 	return 0;
270 }
271 EXPORT_SYMBOL(v4l2_prio_change);
272 
v4l2_prio_open(struct v4l2_prio_state * global,enum v4l2_priority * local)273 void v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local)
274 {
275 	v4l2_prio_change(global, local, V4L2_PRIORITY_DEFAULT);
276 }
277 EXPORT_SYMBOL(v4l2_prio_open);
278 
v4l2_prio_close(struct v4l2_prio_state * global,enum v4l2_priority local)279 void v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority local)
280 {
281 	if (prio_is_valid(local))
282 		atomic_dec(&global->prios[local]);
283 }
284 EXPORT_SYMBOL(v4l2_prio_close);
285 
v4l2_prio_max(struct v4l2_prio_state * global)286 enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global)
287 {
288 	if (atomic_read(&global->prios[V4L2_PRIORITY_RECORD]) > 0)
289 		return V4L2_PRIORITY_RECORD;
290 	if (atomic_read(&global->prios[V4L2_PRIORITY_INTERACTIVE]) > 0)
291 		return V4L2_PRIORITY_INTERACTIVE;
292 	if (atomic_read(&global->prios[V4L2_PRIORITY_BACKGROUND]) > 0)
293 		return V4L2_PRIORITY_BACKGROUND;
294 	return V4L2_PRIORITY_UNSET;
295 }
296 EXPORT_SYMBOL(v4l2_prio_max);
297 
v4l2_prio_check(struct v4l2_prio_state * global,enum v4l2_priority local)298 int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority local)
299 {
300 	return (local < v4l2_prio_max(global)) ? -EBUSY : 0;
301 }
302 EXPORT_SYMBOL(v4l2_prio_check);
303 
304 
v4l2_read(struct file * filp,char __user * buf,size_t sz,loff_t * off)305 static ssize_t v4l2_read(struct file *filp, char __user *buf,
306 		size_t sz, loff_t *off)
307 {
308 	struct video_device *vdev = video_devdata(filp);
309 	int ret = -ENODEV;
310 
311 	if (!vdev->fops->read)
312 		return -EINVAL;
313 	if (video_is_registered(vdev))
314 		ret = vdev->fops->read(filp, buf, sz, off);
315 	if ((vdev->dev_debug & V4L2_DEV_DEBUG_FOP) &&
316 	    (vdev->dev_debug & V4L2_DEV_DEBUG_STREAMING))
317 		dprintk("%s: read: %zd (%d)\n",
318 			video_device_node_name(vdev), sz, ret);
319 	return ret;
320 }
321 
v4l2_write(struct file * filp,const char __user * buf,size_t sz,loff_t * off)322 static ssize_t v4l2_write(struct file *filp, const char __user *buf,
323 		size_t sz, loff_t *off)
324 {
325 	struct video_device *vdev = video_devdata(filp);
326 	int ret = -ENODEV;
327 
328 	if (!vdev->fops->write)
329 		return -EINVAL;
330 	if (video_is_registered(vdev))
331 		ret = vdev->fops->write(filp, buf, sz, off);
332 	if ((vdev->dev_debug & V4L2_DEV_DEBUG_FOP) &&
333 	    (vdev->dev_debug & V4L2_DEV_DEBUG_STREAMING))
334 		dprintk("%s: write: %zd (%d)\n",
335 			video_device_node_name(vdev), sz, ret);
336 	return ret;
337 }
338 
v4l2_poll(struct file * filp,struct poll_table_struct * poll)339 static __poll_t v4l2_poll(struct file *filp, struct poll_table_struct *poll)
340 {
341 	struct video_device *vdev = video_devdata(filp);
342 	__poll_t res = EPOLLERR | EPOLLHUP | EPOLLPRI;
343 
344 	if (video_is_registered(vdev)) {
345 		if (!vdev->fops->poll)
346 			res = DEFAULT_POLLMASK;
347 		else
348 			res = vdev->fops->poll(filp, poll);
349 	}
350 	if (vdev->dev_debug & V4L2_DEV_DEBUG_POLL)
351 		dprintk("%s: poll: %08x %08x\n",
352 			video_device_node_name(vdev), res,
353 			poll_requested_events(poll));
354 	return res;
355 }
356 
v4l2_ioctl(struct file * filp,unsigned int cmd,unsigned long arg)357 static long v4l2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
358 {
359 	struct video_device *vdev = video_devdata(filp);
360 	int ret = -ENODEV;
361 
362 	if (vdev->fops->unlocked_ioctl) {
363 		if (video_is_registered(vdev))
364 			ret = vdev->fops->unlocked_ioctl(filp, cmd, arg);
365 	} else
366 		ret = -ENOTTY;
367 
368 	return ret;
369 }
370 
371 #ifdef CONFIG_MMU
372 #define v4l2_get_unmapped_area NULL
373 #else
v4l2_get_unmapped_area(struct file * filp,unsigned long addr,unsigned long len,unsigned long pgoff,unsigned long flags)374 static unsigned long v4l2_get_unmapped_area(struct file *filp,
375 		unsigned long addr, unsigned long len, unsigned long pgoff,
376 		unsigned long flags)
377 {
378 	struct video_device *vdev = video_devdata(filp);
379 	int ret;
380 
381 	if (!vdev->fops->get_unmapped_area)
382 		return -ENOSYS;
383 	if (!video_is_registered(vdev))
384 		return -ENODEV;
385 	ret = vdev->fops->get_unmapped_area(filp, addr, len, pgoff, flags);
386 	if (vdev->dev_debug & V4L2_DEV_DEBUG_FOP)
387 		dprintk("%s: get_unmapped_area (%d)\n",
388 			video_device_node_name(vdev), ret);
389 	return ret;
390 }
391 #endif
392 
v4l2_mmap(struct file * filp,struct vm_area_struct * vm)393 static int v4l2_mmap(struct file *filp, struct vm_area_struct *vm)
394 {
395 	struct video_device *vdev = video_devdata(filp);
396 	int ret = -ENODEV;
397 
398 	if (!vdev->fops->mmap)
399 		return -ENODEV;
400 	if (video_is_registered(vdev))
401 		ret = vdev->fops->mmap(filp, vm);
402 	if (vdev->dev_debug & V4L2_DEV_DEBUG_FOP)
403 		dprintk("%s: mmap (%d)\n",
404 			video_device_node_name(vdev), ret);
405 	return ret;
406 }
407 
408 /* Override for the open function */
v4l2_open(struct inode * inode,struct file * filp)409 static int v4l2_open(struct inode *inode, struct file *filp)
410 {
411 	struct video_device *vdev;
412 	int ret = 0;
413 
414 	/* Check if the video device is available */
415 	mutex_lock(&videodev_lock);
416 	vdev = video_devdata(filp);
417 	/* return ENODEV if the video device has already been removed. */
418 	if (vdev == NULL || !video_is_registered(vdev)) {
419 		mutex_unlock(&videodev_lock);
420 		return -ENODEV;
421 	}
422 	/* and increase the device refcount */
423 	video_get(vdev);
424 	mutex_unlock(&videodev_lock);
425 	if (vdev->fops->open) {
426 		if (video_is_registered(vdev))
427 			ret = vdev->fops->open(filp);
428 		else
429 			ret = -ENODEV;
430 	}
431 
432 	if (vdev->dev_debug & V4L2_DEV_DEBUG_FOP)
433 		dprintk("%s: open (%d)\n",
434 			video_device_node_name(vdev), ret);
435 	/* decrease the refcount in case of an error */
436 	if (ret)
437 		video_put(vdev);
438 	return ret;
439 }
440 
441 /* Override for the release function */
v4l2_release(struct inode * inode,struct file * filp)442 static int v4l2_release(struct inode *inode, struct file *filp)
443 {
444 	struct video_device *vdev = video_devdata(filp);
445 	int ret = 0;
446 
447 	/*
448 	 * We need to serialize the release() with queueing new requests.
449 	 * The release() may trigger the cancellation of a streaming
450 	 * operation, and that should not be mixed with queueing a new
451 	 * request at the same time.
452 	 */
453 	if (vdev->fops->release) {
454 		if (v4l2_device_supports_requests(vdev->v4l2_dev)) {
455 			mutex_lock(&vdev->v4l2_dev->mdev->req_queue_mutex);
456 			ret = vdev->fops->release(filp);
457 			mutex_unlock(&vdev->v4l2_dev->mdev->req_queue_mutex);
458 		} else {
459 			ret = vdev->fops->release(filp);
460 		}
461 	}
462 
463 	if (vdev->dev_debug & V4L2_DEV_DEBUG_FOP)
464 		dprintk("%s: release\n",
465 			video_device_node_name(vdev));
466 
467 	/* decrease the refcount unconditionally since the release()
468 	   return value is ignored. */
469 	video_put(vdev);
470 	return ret;
471 }
472 
473 static const struct file_operations v4l2_fops = {
474 	.owner = THIS_MODULE,
475 	.read = v4l2_read,
476 	.write = v4l2_write,
477 	.open = v4l2_open,
478 	.get_unmapped_area = v4l2_get_unmapped_area,
479 	.mmap = v4l2_mmap,
480 	.unlocked_ioctl = v4l2_ioctl,
481 #ifdef CONFIG_COMPAT
482 	.compat_ioctl = v4l2_compat_ioctl32,
483 #endif
484 	.release = v4l2_release,
485 	.poll = v4l2_poll,
486 	.llseek = no_llseek,
487 };
488 
489 /**
490  * get_index - assign stream index number based on v4l2_dev
491  * @vdev: video_device to assign index number to, vdev->v4l2_dev should be assigned
492  *
493  * Note that when this is called the new device has not yet been registered
494  * in the video_device array, but it was able to obtain a minor number.
495  *
496  * This means that we can always obtain a free stream index number since
497  * the worst case scenario is that there are VIDEO_NUM_DEVICES - 1 slots in
498  * use of the video_device array.
499  *
500  * Returns a free index number.
501  */
get_index(struct video_device * vdev)502 static int get_index(struct video_device *vdev)
503 {
504 	/* This can be static since this function is called with the global
505 	   videodev_lock held. */
506 	static DECLARE_BITMAP(used, VIDEO_NUM_DEVICES);
507 	int i;
508 
509 	bitmap_zero(used, VIDEO_NUM_DEVICES);
510 
511 	for (i = 0; i < VIDEO_NUM_DEVICES; i++) {
512 		if (video_devices[i] != NULL &&
513 		    video_devices[i]->v4l2_dev == vdev->v4l2_dev) {
514 			__set_bit(video_devices[i]->index, used);
515 		}
516 	}
517 
518 	return find_first_zero_bit(used, VIDEO_NUM_DEVICES);
519 }
520 
521 #define SET_VALID_IOCTL(ops, cmd, op) \
522 	do { if ((ops)->op) __set_bit(_IOC_NR(cmd), valid_ioctls); } while (0)
523 
524 /* This determines which ioctls are actually implemented in the driver.
525    It's a one-time thing which simplifies video_ioctl2 as it can just do
526    a bit test.
527 
528    Note that drivers can override this by setting bits to 1 in
529    vdev->valid_ioctls. If an ioctl is marked as 1 when this function is
530    called, then that ioctl will actually be marked as unimplemented.
531 
532    It does that by first setting up the local valid_ioctls bitmap, and
533    at the end do a:
534 
535    vdev->valid_ioctls = valid_ioctls & ~(vdev->valid_ioctls)
536  */
determine_valid_ioctls(struct video_device * vdev)537 static void determine_valid_ioctls(struct video_device *vdev)
538 {
539 	const u32 vid_caps = V4L2_CAP_VIDEO_CAPTURE |
540 			     V4L2_CAP_VIDEO_CAPTURE_MPLANE |
541 			     V4L2_CAP_VIDEO_OUTPUT |
542 			     V4L2_CAP_VIDEO_OUTPUT_MPLANE |
543 			     V4L2_CAP_VIDEO_M2M | V4L2_CAP_VIDEO_M2M_MPLANE;
544 	const u32 meta_caps = V4L2_CAP_META_CAPTURE |
545 			      V4L2_CAP_META_OUTPUT;
546 	DECLARE_BITMAP(valid_ioctls, BASE_VIDIOC_PRIVATE);
547 	const struct v4l2_ioctl_ops *ops = vdev->ioctl_ops;
548 	bool is_vid = vdev->vfl_type == VFL_TYPE_VIDEO &&
549 		      (vdev->device_caps & vid_caps);
550 	bool is_vbi = vdev->vfl_type == VFL_TYPE_VBI;
551 	bool is_radio = vdev->vfl_type == VFL_TYPE_RADIO;
552 	bool is_sdr = vdev->vfl_type == VFL_TYPE_SDR;
553 	bool is_tch = vdev->vfl_type == VFL_TYPE_TOUCH;
554 	bool is_meta = vdev->vfl_type == VFL_TYPE_VIDEO &&
555 		       (vdev->device_caps & meta_caps);
556 	bool is_rx = vdev->vfl_dir != VFL_DIR_TX;
557 	bool is_tx = vdev->vfl_dir != VFL_DIR_RX;
558 	bool is_io_mc = vdev->device_caps & V4L2_CAP_IO_MC;
559 	bool has_streaming = vdev->device_caps & V4L2_CAP_STREAMING;
560 
561 	bitmap_zero(valid_ioctls, BASE_VIDIOC_PRIVATE);
562 
563 	/* vfl_type and vfl_dir independent ioctls */
564 
565 	SET_VALID_IOCTL(ops, VIDIOC_QUERYCAP, vidioc_querycap);
566 	__set_bit(_IOC_NR(VIDIOC_G_PRIORITY), valid_ioctls);
567 	__set_bit(_IOC_NR(VIDIOC_S_PRIORITY), valid_ioctls);
568 
569 	/* Note: the control handler can also be passed through the filehandle,
570 	   and that can't be tested here. If the bit for these control ioctls
571 	   is set, then the ioctl is valid. But if it is 0, then it can still
572 	   be valid if the filehandle passed the control handler. */
573 	if (vdev->ctrl_handler || ops->vidioc_queryctrl)
574 		__set_bit(_IOC_NR(VIDIOC_QUERYCTRL), valid_ioctls);
575 	if (vdev->ctrl_handler || ops->vidioc_query_ext_ctrl)
576 		__set_bit(_IOC_NR(VIDIOC_QUERY_EXT_CTRL), valid_ioctls);
577 	if (vdev->ctrl_handler || ops->vidioc_g_ctrl || ops->vidioc_g_ext_ctrls)
578 		__set_bit(_IOC_NR(VIDIOC_G_CTRL), valid_ioctls);
579 	if (vdev->ctrl_handler || ops->vidioc_s_ctrl || ops->vidioc_s_ext_ctrls)
580 		__set_bit(_IOC_NR(VIDIOC_S_CTRL), valid_ioctls);
581 	if (vdev->ctrl_handler || ops->vidioc_g_ext_ctrls)
582 		__set_bit(_IOC_NR(VIDIOC_G_EXT_CTRLS), valid_ioctls);
583 	if (vdev->ctrl_handler || ops->vidioc_s_ext_ctrls)
584 		__set_bit(_IOC_NR(VIDIOC_S_EXT_CTRLS), valid_ioctls);
585 	if (vdev->ctrl_handler || ops->vidioc_try_ext_ctrls)
586 		__set_bit(_IOC_NR(VIDIOC_TRY_EXT_CTRLS), valid_ioctls);
587 	if (vdev->ctrl_handler || ops->vidioc_querymenu)
588 		__set_bit(_IOC_NR(VIDIOC_QUERYMENU), valid_ioctls);
589 	if (!is_tch) {
590 		SET_VALID_IOCTL(ops, VIDIOC_G_FREQUENCY, vidioc_g_frequency);
591 		SET_VALID_IOCTL(ops, VIDIOC_S_FREQUENCY, vidioc_s_frequency);
592 	}
593 	SET_VALID_IOCTL(ops, VIDIOC_LOG_STATUS, vidioc_log_status);
594 #ifdef CONFIG_VIDEO_ADV_DEBUG
595 	__set_bit(_IOC_NR(VIDIOC_DBG_G_CHIP_INFO), valid_ioctls);
596 	__set_bit(_IOC_NR(VIDIOC_DBG_G_REGISTER), valid_ioctls);
597 	__set_bit(_IOC_NR(VIDIOC_DBG_S_REGISTER), valid_ioctls);
598 #endif
599 	/* yes, really vidioc_subscribe_event */
600 	SET_VALID_IOCTL(ops, VIDIOC_DQEVENT, vidioc_subscribe_event);
601 	SET_VALID_IOCTL(ops, VIDIOC_SUBSCRIBE_EVENT, vidioc_subscribe_event);
602 	SET_VALID_IOCTL(ops, VIDIOC_UNSUBSCRIBE_EVENT, vidioc_unsubscribe_event);
603 	if (ops->vidioc_enum_freq_bands || ops->vidioc_g_tuner || ops->vidioc_g_modulator)
604 		__set_bit(_IOC_NR(VIDIOC_ENUM_FREQ_BANDS), valid_ioctls);
605 
606 	if (is_vid) {
607 		/* video specific ioctls */
608 		if ((is_rx && (ops->vidioc_enum_fmt_vid_cap ||
609 			       ops->vidioc_enum_fmt_vid_overlay)) ||
610 		    (is_tx && ops->vidioc_enum_fmt_vid_out))
611 			__set_bit(_IOC_NR(VIDIOC_ENUM_FMT), valid_ioctls);
612 		if ((is_rx && (ops->vidioc_g_fmt_vid_cap ||
613 			       ops->vidioc_g_fmt_vid_cap_mplane ||
614 			       ops->vidioc_g_fmt_vid_overlay)) ||
615 		    (is_tx && (ops->vidioc_g_fmt_vid_out ||
616 			       ops->vidioc_g_fmt_vid_out_mplane ||
617 			       ops->vidioc_g_fmt_vid_out_overlay)))
618 			__set_bit(_IOC_NR(VIDIOC_G_FMT), valid_ioctls);
619 		if ((is_rx && (ops->vidioc_s_fmt_vid_cap ||
620 			       ops->vidioc_s_fmt_vid_cap_mplane ||
621 			       ops->vidioc_s_fmt_vid_overlay)) ||
622 		    (is_tx && (ops->vidioc_s_fmt_vid_out ||
623 			       ops->vidioc_s_fmt_vid_out_mplane ||
624 			       ops->vidioc_s_fmt_vid_out_overlay)))
625 			__set_bit(_IOC_NR(VIDIOC_S_FMT), valid_ioctls);
626 		if ((is_rx && (ops->vidioc_try_fmt_vid_cap ||
627 			       ops->vidioc_try_fmt_vid_cap_mplane ||
628 			       ops->vidioc_try_fmt_vid_overlay)) ||
629 		    (is_tx && (ops->vidioc_try_fmt_vid_out ||
630 			       ops->vidioc_try_fmt_vid_out_mplane ||
631 			       ops->vidioc_try_fmt_vid_out_overlay)))
632 			__set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
633 		SET_VALID_IOCTL(ops, VIDIOC_OVERLAY, vidioc_overlay);
634 		SET_VALID_IOCTL(ops, VIDIOC_G_FBUF, vidioc_g_fbuf);
635 		SET_VALID_IOCTL(ops, VIDIOC_S_FBUF, vidioc_s_fbuf);
636 		SET_VALID_IOCTL(ops, VIDIOC_G_JPEGCOMP, vidioc_g_jpegcomp);
637 		SET_VALID_IOCTL(ops, VIDIOC_S_JPEGCOMP, vidioc_s_jpegcomp);
638 		SET_VALID_IOCTL(ops, VIDIOC_G_ENC_INDEX, vidioc_g_enc_index);
639 		SET_VALID_IOCTL(ops, VIDIOC_ENCODER_CMD, vidioc_encoder_cmd);
640 		SET_VALID_IOCTL(ops, VIDIOC_TRY_ENCODER_CMD, vidioc_try_encoder_cmd);
641 		SET_VALID_IOCTL(ops, VIDIOC_DECODER_CMD, vidioc_decoder_cmd);
642 		SET_VALID_IOCTL(ops, VIDIOC_TRY_DECODER_CMD, vidioc_try_decoder_cmd);
643 		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FRAMESIZES, vidioc_enum_framesizes);
644 		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FRAMEINTERVALS, vidioc_enum_frameintervals);
645 		if (ops->vidioc_g_selection &&
646 		    !test_bit(_IOC_NR(VIDIOC_G_SELECTION), vdev->valid_ioctls)) {
647 			__set_bit(_IOC_NR(VIDIOC_G_CROP), valid_ioctls);
648 			__set_bit(_IOC_NR(VIDIOC_CROPCAP), valid_ioctls);
649 		}
650 		if (ops->vidioc_s_selection &&
651 		    !test_bit(_IOC_NR(VIDIOC_S_SELECTION), vdev->valid_ioctls))
652 			__set_bit(_IOC_NR(VIDIOC_S_CROP), valid_ioctls);
653 		SET_VALID_IOCTL(ops, VIDIOC_G_SELECTION, vidioc_g_selection);
654 		SET_VALID_IOCTL(ops, VIDIOC_S_SELECTION, vidioc_s_selection);
655 	}
656 	if (is_meta && is_rx) {
657 		/* metadata capture specific ioctls */
658 		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FMT, vidioc_enum_fmt_meta_cap);
659 		SET_VALID_IOCTL(ops, VIDIOC_G_FMT, vidioc_g_fmt_meta_cap);
660 		SET_VALID_IOCTL(ops, VIDIOC_S_FMT, vidioc_s_fmt_meta_cap);
661 		SET_VALID_IOCTL(ops, VIDIOC_TRY_FMT, vidioc_try_fmt_meta_cap);
662 	} else if (is_meta && is_tx) {
663 		/* metadata output specific ioctls */
664 		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FMT, vidioc_enum_fmt_meta_out);
665 		SET_VALID_IOCTL(ops, VIDIOC_G_FMT, vidioc_g_fmt_meta_out);
666 		SET_VALID_IOCTL(ops, VIDIOC_S_FMT, vidioc_s_fmt_meta_out);
667 		SET_VALID_IOCTL(ops, VIDIOC_TRY_FMT, vidioc_try_fmt_meta_out);
668 	}
669 	if (is_vbi) {
670 		/* vbi specific ioctls */
671 		if ((is_rx && (ops->vidioc_g_fmt_vbi_cap ||
672 			       ops->vidioc_g_fmt_sliced_vbi_cap)) ||
673 		    (is_tx && (ops->vidioc_g_fmt_vbi_out ||
674 			       ops->vidioc_g_fmt_sliced_vbi_out)))
675 			__set_bit(_IOC_NR(VIDIOC_G_FMT), valid_ioctls);
676 		if ((is_rx && (ops->vidioc_s_fmt_vbi_cap ||
677 			       ops->vidioc_s_fmt_sliced_vbi_cap)) ||
678 		    (is_tx && (ops->vidioc_s_fmt_vbi_out ||
679 			       ops->vidioc_s_fmt_sliced_vbi_out)))
680 			__set_bit(_IOC_NR(VIDIOC_S_FMT), valid_ioctls);
681 		if ((is_rx && (ops->vidioc_try_fmt_vbi_cap ||
682 			       ops->vidioc_try_fmt_sliced_vbi_cap)) ||
683 		    (is_tx && (ops->vidioc_try_fmt_vbi_out ||
684 			       ops->vidioc_try_fmt_sliced_vbi_out)))
685 			__set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
686 		SET_VALID_IOCTL(ops, VIDIOC_G_SLICED_VBI_CAP, vidioc_g_sliced_vbi_cap);
687 	} else if (is_tch) {
688 		/* touch specific ioctls */
689 		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FMT, vidioc_enum_fmt_vid_cap);
690 		SET_VALID_IOCTL(ops, VIDIOC_G_FMT, vidioc_g_fmt_vid_cap);
691 		SET_VALID_IOCTL(ops, VIDIOC_S_FMT, vidioc_s_fmt_vid_cap);
692 		SET_VALID_IOCTL(ops, VIDIOC_TRY_FMT, vidioc_try_fmt_vid_cap);
693 		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FRAMESIZES, vidioc_enum_framesizes);
694 		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FRAMEINTERVALS, vidioc_enum_frameintervals);
695 		SET_VALID_IOCTL(ops, VIDIOC_ENUMINPUT, vidioc_enum_input);
696 		SET_VALID_IOCTL(ops, VIDIOC_G_INPUT, vidioc_g_input);
697 		SET_VALID_IOCTL(ops, VIDIOC_S_INPUT, vidioc_s_input);
698 		SET_VALID_IOCTL(ops, VIDIOC_G_PARM, vidioc_g_parm);
699 		SET_VALID_IOCTL(ops, VIDIOC_S_PARM, vidioc_s_parm);
700 	} else if (is_sdr && is_rx) {
701 		/* SDR receiver specific ioctls */
702 		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FMT, vidioc_enum_fmt_sdr_cap);
703 		SET_VALID_IOCTL(ops, VIDIOC_G_FMT, vidioc_g_fmt_sdr_cap);
704 		SET_VALID_IOCTL(ops, VIDIOC_S_FMT, vidioc_s_fmt_sdr_cap);
705 		SET_VALID_IOCTL(ops, VIDIOC_TRY_FMT, vidioc_try_fmt_sdr_cap);
706 	} else if (is_sdr && is_tx) {
707 		/* SDR transmitter specific ioctls */
708 		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FMT, vidioc_enum_fmt_sdr_out);
709 		SET_VALID_IOCTL(ops, VIDIOC_G_FMT, vidioc_g_fmt_sdr_out);
710 		SET_VALID_IOCTL(ops, VIDIOC_S_FMT, vidioc_s_fmt_sdr_out);
711 		SET_VALID_IOCTL(ops, VIDIOC_TRY_FMT, vidioc_try_fmt_sdr_out);
712 	}
713 
714 	if (has_streaming) {
715 		/* ioctls valid for streaming I/O */
716 		SET_VALID_IOCTL(ops, VIDIOC_REQBUFS, vidioc_reqbufs);
717 		SET_VALID_IOCTL(ops, VIDIOC_QUERYBUF, vidioc_querybuf);
718 		SET_VALID_IOCTL(ops, VIDIOC_QBUF, vidioc_qbuf);
719 		SET_VALID_IOCTL(ops, VIDIOC_EXPBUF, vidioc_expbuf);
720 		SET_VALID_IOCTL(ops, VIDIOC_DQBUF, vidioc_dqbuf);
721 		SET_VALID_IOCTL(ops, VIDIOC_CREATE_BUFS, vidioc_create_bufs);
722 		SET_VALID_IOCTL(ops, VIDIOC_PREPARE_BUF, vidioc_prepare_buf);
723 		SET_VALID_IOCTL(ops, VIDIOC_STREAMON, vidioc_streamon);
724 		SET_VALID_IOCTL(ops, VIDIOC_STREAMOFF, vidioc_streamoff);
725 		/* VIDIOC_CREATE_BUFS support is mandatory to enable VIDIOC_REMOVE_BUFS */
726 		if (ops->vidioc_create_bufs)
727 			SET_VALID_IOCTL(ops, VIDIOC_REMOVE_BUFS, vidioc_remove_bufs);
728 	}
729 
730 	if (is_vid || is_vbi || is_meta) {
731 		/* ioctls valid for video, vbi and metadata */
732 		if (ops->vidioc_s_std)
733 			__set_bit(_IOC_NR(VIDIOC_ENUMSTD), valid_ioctls);
734 		SET_VALID_IOCTL(ops, VIDIOC_S_STD, vidioc_s_std);
735 		SET_VALID_IOCTL(ops, VIDIOC_G_STD, vidioc_g_std);
736 		if (is_rx) {
737 			SET_VALID_IOCTL(ops, VIDIOC_QUERYSTD, vidioc_querystd);
738 			if (is_io_mc) {
739 				__set_bit(_IOC_NR(VIDIOC_ENUMINPUT), valid_ioctls);
740 				__set_bit(_IOC_NR(VIDIOC_G_INPUT), valid_ioctls);
741 				__set_bit(_IOC_NR(VIDIOC_S_INPUT), valid_ioctls);
742 			} else {
743 				SET_VALID_IOCTL(ops, VIDIOC_ENUMINPUT, vidioc_enum_input);
744 				SET_VALID_IOCTL(ops, VIDIOC_G_INPUT, vidioc_g_input);
745 				SET_VALID_IOCTL(ops, VIDIOC_S_INPUT, vidioc_s_input);
746 			}
747 			SET_VALID_IOCTL(ops, VIDIOC_ENUMAUDIO, vidioc_enumaudio);
748 			SET_VALID_IOCTL(ops, VIDIOC_G_AUDIO, vidioc_g_audio);
749 			SET_VALID_IOCTL(ops, VIDIOC_S_AUDIO, vidioc_s_audio);
750 			SET_VALID_IOCTL(ops, VIDIOC_QUERY_DV_TIMINGS, vidioc_query_dv_timings);
751 			SET_VALID_IOCTL(ops, VIDIOC_S_EDID, vidioc_s_edid);
752 		}
753 		if (is_tx) {
754 			if (is_io_mc) {
755 				__set_bit(_IOC_NR(VIDIOC_ENUMOUTPUT), valid_ioctls);
756 				__set_bit(_IOC_NR(VIDIOC_G_OUTPUT), valid_ioctls);
757 				__set_bit(_IOC_NR(VIDIOC_S_OUTPUT), valid_ioctls);
758 			} else {
759 				SET_VALID_IOCTL(ops, VIDIOC_ENUMOUTPUT, vidioc_enum_output);
760 				SET_VALID_IOCTL(ops, VIDIOC_G_OUTPUT, vidioc_g_output);
761 				SET_VALID_IOCTL(ops, VIDIOC_S_OUTPUT, vidioc_s_output);
762 			}
763 			SET_VALID_IOCTL(ops, VIDIOC_ENUMAUDOUT, vidioc_enumaudout);
764 			SET_VALID_IOCTL(ops, VIDIOC_G_AUDOUT, vidioc_g_audout);
765 			SET_VALID_IOCTL(ops, VIDIOC_S_AUDOUT, vidioc_s_audout);
766 		}
767 		if (ops->vidioc_g_parm || ops->vidioc_g_std)
768 			__set_bit(_IOC_NR(VIDIOC_G_PARM), valid_ioctls);
769 		SET_VALID_IOCTL(ops, VIDIOC_S_PARM, vidioc_s_parm);
770 		SET_VALID_IOCTL(ops, VIDIOC_S_DV_TIMINGS, vidioc_s_dv_timings);
771 		SET_VALID_IOCTL(ops, VIDIOC_G_DV_TIMINGS, vidioc_g_dv_timings);
772 		SET_VALID_IOCTL(ops, VIDIOC_ENUM_DV_TIMINGS, vidioc_enum_dv_timings);
773 		SET_VALID_IOCTL(ops, VIDIOC_DV_TIMINGS_CAP, vidioc_dv_timings_cap);
774 		SET_VALID_IOCTL(ops, VIDIOC_G_EDID, vidioc_g_edid);
775 	}
776 	if (is_tx && (is_radio || is_sdr)) {
777 		/* radio transmitter only ioctls */
778 		SET_VALID_IOCTL(ops, VIDIOC_G_MODULATOR, vidioc_g_modulator);
779 		SET_VALID_IOCTL(ops, VIDIOC_S_MODULATOR, vidioc_s_modulator);
780 	}
781 	if (is_rx && !is_tch) {
782 		/* receiver only ioctls */
783 		SET_VALID_IOCTL(ops, VIDIOC_G_TUNER, vidioc_g_tuner);
784 		SET_VALID_IOCTL(ops, VIDIOC_S_TUNER, vidioc_s_tuner);
785 		SET_VALID_IOCTL(ops, VIDIOC_S_HW_FREQ_SEEK, vidioc_s_hw_freq_seek);
786 	}
787 
788 	bitmap_andnot(vdev->valid_ioctls, valid_ioctls, vdev->valid_ioctls,
789 			BASE_VIDIOC_PRIVATE);
790 }
791 
video_register_media_controller(struct video_device * vdev)792 static int video_register_media_controller(struct video_device *vdev)
793 {
794 #if defined(CONFIG_MEDIA_CONTROLLER)
795 	u32 intf_type;
796 	int ret;
797 
798 	/* Memory-to-memory devices are more complex and use
799 	 * their own function to register its mc entities.
800 	 */
801 	if (!vdev->v4l2_dev->mdev || vdev->vfl_dir == VFL_DIR_M2M)
802 		return 0;
803 
804 	vdev->entity.obj_type = MEDIA_ENTITY_TYPE_VIDEO_DEVICE;
805 	vdev->entity.function = MEDIA_ENT_F_UNKNOWN;
806 
807 	switch (vdev->vfl_type) {
808 	case VFL_TYPE_VIDEO:
809 		intf_type = MEDIA_INTF_T_V4L_VIDEO;
810 		vdev->entity.function = MEDIA_ENT_F_IO_V4L;
811 		break;
812 	case VFL_TYPE_VBI:
813 		intf_type = MEDIA_INTF_T_V4L_VBI;
814 		vdev->entity.function = MEDIA_ENT_F_IO_VBI;
815 		break;
816 	case VFL_TYPE_SDR:
817 		intf_type = MEDIA_INTF_T_V4L_SWRADIO;
818 		vdev->entity.function = MEDIA_ENT_F_IO_SWRADIO;
819 		break;
820 	case VFL_TYPE_TOUCH:
821 		intf_type = MEDIA_INTF_T_V4L_TOUCH;
822 		vdev->entity.function = MEDIA_ENT_F_IO_V4L;
823 		break;
824 	case VFL_TYPE_RADIO:
825 		intf_type = MEDIA_INTF_T_V4L_RADIO;
826 		/*
827 		 * Radio doesn't have an entity at the V4L2 side to represent
828 		 * radio input or output. Instead, the audio input/output goes
829 		 * via either physical wires or ALSA.
830 		 */
831 		break;
832 	case VFL_TYPE_SUBDEV:
833 		intf_type = MEDIA_INTF_T_V4L_SUBDEV;
834 		/* Entity will be created via v4l2_device_register_subdev() */
835 		break;
836 	default:
837 		return 0;
838 	}
839 
840 	if (vdev->entity.function != MEDIA_ENT_F_UNKNOWN) {
841 		vdev->entity.name = vdev->name;
842 
843 		/* Needed just for backward compatibility with legacy MC API */
844 		vdev->entity.info.dev.major = VIDEO_MAJOR;
845 		vdev->entity.info.dev.minor = vdev->minor;
846 
847 		ret = media_device_register_entity(vdev->v4l2_dev->mdev,
848 						   &vdev->entity);
849 		if (ret < 0) {
850 			pr_warn("%s: media_device_register_entity failed\n",
851 				__func__);
852 			return ret;
853 		}
854 	}
855 
856 	vdev->intf_devnode = media_devnode_create(vdev->v4l2_dev->mdev,
857 						  intf_type,
858 						  0, VIDEO_MAJOR,
859 						  vdev->minor);
860 	if (!vdev->intf_devnode) {
861 		media_device_unregister_entity(&vdev->entity);
862 		return -ENOMEM;
863 	}
864 
865 	if (vdev->entity.function != MEDIA_ENT_F_UNKNOWN) {
866 		struct media_link *link;
867 
868 		link = media_create_intf_link(&vdev->entity,
869 					      &vdev->intf_devnode->intf,
870 					      MEDIA_LNK_FL_ENABLED |
871 					      MEDIA_LNK_FL_IMMUTABLE);
872 		if (!link) {
873 			media_devnode_remove(vdev->intf_devnode);
874 			media_device_unregister_entity(&vdev->entity);
875 			return -ENOMEM;
876 		}
877 	}
878 
879 	/* FIXME: how to create the other interface links? */
880 
881 #endif
882 	return 0;
883 }
884 
__video_register_device(struct video_device * vdev,enum vfl_devnode_type type,int nr,int warn_if_nr_in_use,struct module * owner)885 int __video_register_device(struct video_device *vdev,
886 			    enum vfl_devnode_type type,
887 			    int nr, int warn_if_nr_in_use,
888 			    struct module *owner)
889 {
890 	int i = 0;
891 	int ret;
892 	int minor_offset = 0;
893 	int minor_cnt = VIDEO_NUM_DEVICES;
894 	const char *name_base;
895 
896 	/* A minor value of -1 marks this video device as never
897 	   having been registered */
898 	vdev->minor = -1;
899 
900 	/* the release callback MUST be present */
901 	if (WARN_ON(!vdev->release))
902 		return -EINVAL;
903 	/* the v4l2_dev pointer MUST be present */
904 	if (WARN_ON(!vdev->v4l2_dev))
905 		return -EINVAL;
906 	/* the device_caps field MUST be set for all but subdevs */
907 	if (WARN_ON(type != VFL_TYPE_SUBDEV && !vdev->device_caps))
908 		return -EINVAL;
909 
910 	/* v4l2_fh support */
911 	spin_lock_init(&vdev->fh_lock);
912 	INIT_LIST_HEAD(&vdev->fh_list);
913 
914 	/* Part 1: check device type */
915 	switch (type) {
916 	case VFL_TYPE_VIDEO:
917 		name_base = "video";
918 		break;
919 	case VFL_TYPE_VBI:
920 		name_base = "vbi";
921 		break;
922 	case VFL_TYPE_RADIO:
923 		name_base = "radio";
924 		break;
925 	case VFL_TYPE_SUBDEV:
926 		name_base = "v4l-subdev";
927 		break;
928 	case VFL_TYPE_SDR:
929 		/* Use device name 'swradio' because 'sdr' was already taken. */
930 		name_base = "swradio";
931 		break;
932 	case VFL_TYPE_TOUCH:
933 		name_base = "v4l-touch";
934 		break;
935 	default:
936 		pr_err("%s called with unknown type: %d\n",
937 		       __func__, type);
938 		return -EINVAL;
939 	}
940 
941 	vdev->vfl_type = type;
942 	vdev->cdev = NULL;
943 	if (vdev->dev_parent == NULL)
944 		vdev->dev_parent = vdev->v4l2_dev->dev;
945 	if (vdev->ctrl_handler == NULL)
946 		vdev->ctrl_handler = vdev->v4l2_dev->ctrl_handler;
947 	/* If the prio state pointer is NULL, then use the v4l2_device
948 	   prio state. */
949 	if (vdev->prio == NULL)
950 		vdev->prio = &vdev->v4l2_dev->prio;
951 
952 	/* Part 2: find a free minor, device node number and device index. */
953 #ifdef CONFIG_VIDEO_FIXED_MINOR_RANGES
954 	/* Keep the ranges for the first four types for historical
955 	 * reasons.
956 	 * Newer devices (not yet in place) should use the range
957 	 * of 128-191 and just pick the first free minor there
958 	 * (new style). */
959 	switch (type) {
960 	case VFL_TYPE_VIDEO:
961 		minor_offset = 0;
962 		minor_cnt = 64;
963 		break;
964 	case VFL_TYPE_RADIO:
965 		minor_offset = 64;
966 		minor_cnt = 64;
967 		break;
968 	case VFL_TYPE_VBI:
969 		minor_offset = 224;
970 		minor_cnt = 32;
971 		break;
972 	default:
973 		minor_offset = 128;
974 		minor_cnt = 64;
975 		break;
976 	}
977 #endif
978 
979 	/* Pick a device node number */
980 	mutex_lock(&videodev_lock);
981 	nr = devnode_find(vdev, nr == -1 ? 0 : nr, minor_cnt);
982 	if (nr == minor_cnt)
983 		nr = devnode_find(vdev, 0, minor_cnt);
984 	if (nr == minor_cnt) {
985 		pr_err("could not get a free device node number\n");
986 		mutex_unlock(&videodev_lock);
987 		return -ENFILE;
988 	}
989 #ifdef CONFIG_VIDEO_FIXED_MINOR_RANGES
990 	/* 1-on-1 mapping of device node number to minor number */
991 	i = nr;
992 #else
993 	/* The device node number and minor numbers are independent, so
994 	   we just find the first free minor number. */
995 	for (i = 0; i < VIDEO_NUM_DEVICES; i++)
996 		if (video_devices[i] == NULL)
997 			break;
998 	if (i == VIDEO_NUM_DEVICES) {
999 		mutex_unlock(&videodev_lock);
1000 		pr_err("could not get a free minor\n");
1001 		return -ENFILE;
1002 	}
1003 #endif
1004 	vdev->minor = i + minor_offset;
1005 	vdev->num = nr;
1006 
1007 	/* Should not happen since we thought this minor was free */
1008 	if (WARN_ON(video_devices[vdev->minor])) {
1009 		mutex_unlock(&videodev_lock);
1010 		pr_err("video_device not empty!\n");
1011 		return -ENFILE;
1012 	}
1013 	devnode_set(vdev);
1014 	vdev->index = get_index(vdev);
1015 	video_devices[vdev->minor] = vdev;
1016 	mutex_unlock(&videodev_lock);
1017 
1018 	if (vdev->ioctl_ops)
1019 		determine_valid_ioctls(vdev);
1020 
1021 	/* Part 3: Initialize the character device */
1022 	vdev->cdev = cdev_alloc();
1023 	if (vdev->cdev == NULL) {
1024 		ret = -ENOMEM;
1025 		goto cleanup;
1026 	}
1027 	vdev->cdev->ops = &v4l2_fops;
1028 	vdev->cdev->owner = owner;
1029 	ret = cdev_add(vdev->cdev, MKDEV(VIDEO_MAJOR, vdev->minor), 1);
1030 	if (ret < 0) {
1031 		pr_err("%s: cdev_add failed\n", __func__);
1032 		kfree(vdev->cdev);
1033 		vdev->cdev = NULL;
1034 		goto cleanup;
1035 	}
1036 
1037 	/* Part 4: register the device with sysfs */
1038 	vdev->dev.class = &video_class;
1039 	vdev->dev.devt = MKDEV(VIDEO_MAJOR, vdev->minor);
1040 	vdev->dev.parent = vdev->dev_parent;
1041 	dev_set_name(&vdev->dev, "%s%d", name_base, vdev->num);
1042 	mutex_lock(&videodev_lock);
1043 	ret = device_register(&vdev->dev);
1044 	if (ret < 0) {
1045 		mutex_unlock(&videodev_lock);
1046 		pr_err("%s: device_register failed\n", __func__);
1047 		goto cleanup;
1048 	}
1049 	/* Register the release callback that will be called when the last
1050 	   reference to the device goes away. */
1051 	vdev->dev.release = v4l2_device_release;
1052 
1053 	if (nr != -1 && nr != vdev->num && warn_if_nr_in_use)
1054 		pr_warn("%s: requested %s%d, got %s\n", __func__,
1055 			name_base, nr, video_device_node_name(vdev));
1056 
1057 	/* Increase v4l2_device refcount */
1058 	v4l2_device_get(vdev->v4l2_dev);
1059 
1060 	/* Part 5: Register the entity. */
1061 	ret = video_register_media_controller(vdev);
1062 
1063 	/* Part 6: Activate this minor. The char device can now be used. */
1064 	set_bit(V4L2_FL_REGISTERED, &vdev->flags);
1065 	mutex_unlock(&videodev_lock);
1066 
1067 	return 0;
1068 
1069 cleanup:
1070 	mutex_lock(&videodev_lock);
1071 	if (vdev->cdev)
1072 		cdev_del(vdev->cdev);
1073 	video_devices[vdev->minor] = NULL;
1074 	devnode_clear(vdev);
1075 	mutex_unlock(&videodev_lock);
1076 	/* Mark this video device as never having been registered. */
1077 	vdev->minor = -1;
1078 	return ret;
1079 }
1080 EXPORT_SYMBOL(__video_register_device);
1081 
1082 /**
1083  *	video_unregister_device - unregister a video4linux device
1084  *	@vdev: the device to unregister
1085  *
1086  *	This unregisters the passed device. Future open calls will
1087  *	be met with errors.
1088  */
video_unregister_device(struct video_device * vdev)1089 void video_unregister_device(struct video_device *vdev)
1090 {
1091 	/* Check if vdev was ever registered at all */
1092 	if (!vdev || !video_is_registered(vdev))
1093 		return;
1094 
1095 	mutex_lock(&videodev_lock);
1096 	/* This must be in a critical section to prevent a race with v4l2_open.
1097 	 * Once this bit has been cleared video_get may never be called again.
1098 	 */
1099 	clear_bit(V4L2_FL_REGISTERED, &vdev->flags);
1100 	mutex_unlock(&videodev_lock);
1101 	if (test_bit(V4L2_FL_USES_V4L2_FH, &vdev->flags))
1102 		v4l2_event_wake_all(vdev);
1103 	device_unregister(&vdev->dev);
1104 }
1105 EXPORT_SYMBOL(video_unregister_device);
1106 
1107 #if defined(CONFIG_MEDIA_CONTROLLER)
1108 
video_device_pipeline_start(struct video_device * vdev,struct media_pipeline * pipe)1109 __must_check int video_device_pipeline_start(struct video_device *vdev,
1110 					     struct media_pipeline *pipe)
1111 {
1112 	struct media_entity *entity = &vdev->entity;
1113 
1114 	if (entity->num_pads != 1)
1115 		return -ENODEV;
1116 
1117 	return media_pipeline_start(&entity->pads[0], pipe);
1118 }
1119 EXPORT_SYMBOL_GPL(video_device_pipeline_start);
1120 
__video_device_pipeline_start(struct video_device * vdev,struct media_pipeline * pipe)1121 __must_check int __video_device_pipeline_start(struct video_device *vdev,
1122 					       struct media_pipeline *pipe)
1123 {
1124 	struct media_entity *entity = &vdev->entity;
1125 
1126 	if (entity->num_pads != 1)
1127 		return -ENODEV;
1128 
1129 	return __media_pipeline_start(&entity->pads[0], pipe);
1130 }
1131 EXPORT_SYMBOL_GPL(__video_device_pipeline_start);
1132 
video_device_pipeline_stop(struct video_device * vdev)1133 void video_device_pipeline_stop(struct video_device *vdev)
1134 {
1135 	struct media_entity *entity = &vdev->entity;
1136 
1137 	if (WARN_ON(entity->num_pads != 1))
1138 		return;
1139 
1140 	return media_pipeline_stop(&entity->pads[0]);
1141 }
1142 EXPORT_SYMBOL_GPL(video_device_pipeline_stop);
1143 
__video_device_pipeline_stop(struct video_device * vdev)1144 void __video_device_pipeline_stop(struct video_device *vdev)
1145 {
1146 	struct media_entity *entity = &vdev->entity;
1147 
1148 	if (WARN_ON(entity->num_pads != 1))
1149 		return;
1150 
1151 	return __media_pipeline_stop(&entity->pads[0]);
1152 }
1153 EXPORT_SYMBOL_GPL(__video_device_pipeline_stop);
1154 
video_device_pipeline_alloc_start(struct video_device * vdev)1155 __must_check int video_device_pipeline_alloc_start(struct video_device *vdev)
1156 {
1157 	struct media_entity *entity = &vdev->entity;
1158 
1159 	if (entity->num_pads != 1)
1160 		return -ENODEV;
1161 
1162 	return media_pipeline_alloc_start(&entity->pads[0]);
1163 }
1164 EXPORT_SYMBOL_GPL(video_device_pipeline_alloc_start);
1165 
video_device_pipeline(struct video_device * vdev)1166 struct media_pipeline *video_device_pipeline(struct video_device *vdev)
1167 {
1168 	struct media_entity *entity = &vdev->entity;
1169 
1170 	if (WARN_ON(entity->num_pads != 1))
1171 		return NULL;
1172 
1173 	return media_pad_pipeline(&entity->pads[0]);
1174 }
1175 EXPORT_SYMBOL_GPL(video_device_pipeline);
1176 
1177 #endif /* CONFIG_MEDIA_CONTROLLER */
1178 
1179 /*
1180  *	Initialise video for linux
1181  */
videodev_init(void)1182 static int __init videodev_init(void)
1183 {
1184 	dev_t dev = MKDEV(VIDEO_MAJOR, 0);
1185 	int ret;
1186 
1187 	pr_info("Linux video capture interface: v2.00\n");
1188 	ret = register_chrdev_region(dev, VIDEO_NUM_DEVICES, VIDEO_NAME);
1189 	if (ret < 0) {
1190 		pr_warn("videodev: unable to get major %d\n",
1191 				VIDEO_MAJOR);
1192 		return ret;
1193 	}
1194 
1195 	ret = class_register(&video_class);
1196 	if (ret < 0) {
1197 		unregister_chrdev_region(dev, VIDEO_NUM_DEVICES);
1198 		pr_warn("video_dev: class_register failed\n");
1199 		return -EIO;
1200 	}
1201 
1202 	return 0;
1203 }
1204 
videodev_exit(void)1205 static void __exit videodev_exit(void)
1206 {
1207 	dev_t dev = MKDEV(VIDEO_MAJOR, 0);
1208 
1209 	class_unregister(&video_class);
1210 	unregister_chrdev_region(dev, VIDEO_NUM_DEVICES);
1211 }
1212 
1213 subsys_initcall(videodev_init);
1214 module_exit(videodev_exit)
1215 
1216 MODULE_AUTHOR("Alan Cox, Mauro Carvalho Chehab <mchehab@kernel.org>, Bill Dirks, Justin Schoeman, Gerd Knorr");
1217 MODULE_DESCRIPTION("Video4Linux2 core driver");
1218 MODULE_LICENSE("GPL");
1219 MODULE_ALIAS_CHARDEV_MAJOR(VIDEO_MAJOR);
1220