aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@s-opensource.com>2016-07-21 14:30:20 -0400
committerMauro Carvalho Chehab <mchehab@s-opensource.com>2016-07-23 07:04:21 -0400
commitd9d3d1761abecf72a8044762724fb04b5974a513 (patch)
treeec7e1b6133663ac60d51bec18f980d2fbb7a3959
parent041d8211a0cc414650c2ac4b2396e0fcda27e17e (diff)
[media] doc-rst: document v4l2-dev.h
Add documentation for v4l2-dev.h, and put it at v4l2-framework.rst, where struct video_device is currently documented. Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
-rw-r--r--Documentation/media/kapi/v4l2-framework.rst5
-rw-r--r--drivers/media/v4l2-core/v4l2-dev.c34
-rw-r--r--include/media/v4l2-dev.h364
3 files changed, 320 insertions, 83 deletions
diff --git a/Documentation/media/kapi/v4l2-framework.rst b/Documentation/media/kapi/v4l2-framework.rst
index de341fc5b235..315388ef6593 100644
--- a/Documentation/media/kapi/v4l2-framework.rst
+++ b/Documentation/media/kapi/v4l2-framework.rst
@@ -699,3 +699,8 @@ methods.
699 699
700It is expected that once the CCF becomes available on all relevant 700It is expected that once the CCF becomes available on all relevant
701architectures this API will be removed. 701architectures this API will be removed.
702
703video_device kAPI
704^^^^^^^^^^^^^^^^^
705
706.. kernel-doc:: include/media/v4l2-dev.h
diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c
index 70b559d7ca80..e6da353b39bc 100644
--- a/drivers/media/v4l2-core/v4l2-dev.c
+++ b/drivers/media/v4l2-core/v4l2-dev.c
@@ -812,40 +812,6 @@ static int video_register_media_controller(struct video_device *vdev, int type)
812 return 0; 812 return 0;
813} 813}
814 814
815/**
816 * __video_register_device - register video4linux devices
817 * @vdev: video device structure we want to register
818 * @type: type of device to register
819 * @nr: which device node number (0 == /dev/video0, 1 == /dev/video1, ...
820 * -1 == first free)
821 * @warn_if_nr_in_use: warn if the desired device node number
822 * was already in use and another number was chosen instead.
823 * @owner: module that owns the video device node
824 *
825 * The registration code assigns minor numbers and device node numbers
826 * based on the requested type and registers the new device node with
827 * the kernel.
828 *
829 * This function assumes that struct video_device was zeroed when it
830 * was allocated and does not contain any stale date.
831 *
832 * An error is returned if no free minor or device node number could be
833 * found, or if the registration of the device node failed.
834 *
835 * Zero is returned on success.
836 *
837 * Valid types are
838 *
839 * %VFL_TYPE_GRABBER - A frame grabber
840 *
841 * %VFL_TYPE_VBI - Vertical blank data (undecoded)
842 *
843 * %VFL_TYPE_RADIO - A radio card
844 *
845 * %VFL_TYPE_SUBDEV - A subdevice
846 *
847 * %VFL_TYPE_SDR - Software Defined Radio
848 */
849int __video_register_device(struct video_device *vdev, int type, int nr, 815int __video_register_device(struct video_device *vdev, int type, int nr,
850 int warn_if_nr_in_use, struct module *owner) 816 int warn_if_nr_in_use, struct module *owner)
851{ 817{
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h
index 25a3190308fb..5921c24565cf 100644
--- a/include/media/v4l2-dev.h
+++ b/include/media/v4l2-dev.h
@@ -47,19 +47,105 @@ struct v4l2_ctrl_handler;
47 47
48/* Priority helper functions */ 48/* Priority helper functions */
49 49
50/**
51 * struct v4l2_prio_state - stores the priority states
52 *
53 * @prios: array with elements to store the array priorities
54 *
55 *
56 * .. note::
57 * The size of @prios array matches the number of priority types defined
58 * by :ref:`enum v4l2_priority <v4l2-priority>`.
59 */
50struct v4l2_prio_state { 60struct v4l2_prio_state {
51 atomic_t prios[4]; 61 atomic_t prios[4];
52}; 62};
53 63
64/**
65 * v4l2_prio_init - initializes a struct v4l2_prio_state
66 *
67 * @global: pointer to &struct v4l2_prio_state
68 */
54void v4l2_prio_init(struct v4l2_prio_state *global); 69void v4l2_prio_init(struct v4l2_prio_state *global);
70
71/**
72 * v4l2_prio_change - changes the v4l2 file handler priority
73 *
74 * @global: pointer to the &struct v4l2_prio_state of the device node.
75 * @local: pointer to the desired priority, as defined by :ref:`enum v4l2_priority <v4l2-priority>`
76 * @new: Priority type requested, as defined by :ref:`enum v4l2_priority <v4l2-priority>`.
77 *
78 * .. note::
79 * This function should be used only by the V4L2 core.
80 */
55int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local, 81int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local,
56 enum v4l2_priority new); 82 enum v4l2_priority new);
83
84/**
85 * v4l2_prio_open - Implements the priority logic for a file handler open
86 *
87 * @global: pointer to the &struct v4l2_prio_state of the device node.
88 * @local: pointer to the desired priority, as defined by :ref:`enum v4l2_priority <v4l2-priority>`
89 *
90 * .. note::
91 * This function should be used only by the V4L2 core.
92 */
57void v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local); 93void v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local);
94
95/**
96 * v4l2_prio_close - Implements the priority logic for a file handler close
97 *
98 * @global: pointer to the &struct v4l2_prio_state of the device node.
99 * @local: priority to be released, as defined by :ref:`enum v4l2_priority <v4l2-priority>`
100 *
101 * .. note::
102 * This function should be used only by the V4L2 core.
103 */
58void v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority local); 104void v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority local);
105
106/**
107 * v4l2_prio_max - Return the maximum priority, as stored at the @global array.
108 *
109 * @global: pointer to the &struct v4l2_prio_state of the device node.
110 *
111 * .. note::
112 * This function should be used only by the V4L2 core.
113 */
59enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global); 114enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global);
60int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority local);
61 115
116/**
117 * v4l2_prio_close - Implements the priority logic for a file handler close
118 *
119 * @global: pointer to the &struct v4l2_prio_state of the device node.
120 * @local: desired priority, as defined by :ref:`enum v4l2_priority <v4l2-priority>` local
121 *
122 * .. note::
123 * This function should be used only by the V4L2 core.
124 */
125int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority local);
62 126
127/**
128 * struct v4l2_file_operations - fs operations used by a V4L2 device
129 *
130 * @owner: pointer to struct module
131 * @read: operations needed to implement the read() syscall
132 * @write: operations needed to implement the write() syscall
133 * @poll: operations needed to implement the poll() syscall
134 * @unlocked_ioctl: operations needed to implement the ioctl() syscall
135 * @compat_ioctl32: operations needed to implement the ioctl() syscall for
136 * the special case where the Kernel uses 64 bits instructions, but
137 * the userspace uses 32 bits.
138 * @get_unmapped_area: called by the mmap() syscall, used when %!CONFIG_MMU
139 * @mmap: operations needed to implement the mmap() syscall
140 * @open: operations needed to implement the open() syscall
141 * @release: operations needed to implement the release() syscall
142 *
143 * .. note::
144 *
145 * Those operations are used to implemente the fs struct file_operations
146 * at the V4L2 drivers. The V4L2 core overrides the fs ops with some
147 * extra logic needed by the subsystem.
148 */
63struct v4l2_file_operations { 149struct v4l2_file_operations {
64 struct module *owner; 150 struct module *owner;
65 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); 151 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
@@ -82,6 +168,47 @@ struct v4l2_file_operations {
82 * the common handler 168 * the common handler
83 */ 169 */
84 170
171/**
172 * struct video_device - Structure used to create and manage the V4L2 device
173 * nodes.
174 *
175 * @entity: &struct media_entity
176 * @intf_devnode: pointer to &struct media_intf_devnode
177 * @pipe: &struct media_pipeline
178 * @fops: pointer to &struct v4l2_file_operations for the video device
179 * @device_caps: device capabilities as used in v4l2_capabilities
180 * @dev: &struct device for the video device
181 * @cdev: character device
182 * @v4l2_dev: pointer to &struct v4l2_device parent
183 * @dev_parent: pointer to &struct device parent
184 * @ctrl_handler: Control handler associated with this device node.
185 * May be NULL.
186 * @queue: &struct vb2_queue associated with this device node. May be NULL.
187 * @prio: pointer to &struct v4l2_prio_state with device's Priority state.
188 * If NULL, then v4l2_dev->prio will be used.
189 * @name: video device name
190 * @vfl_type: V4L device type
191 * @vfl_dir: V4L receiver, transmitter or m2m
192 * @minor: device node 'minor'. It is set to -1 if the registration failed
193 * @num: number of the video device node
194 * @flags: video device flags. Use bitops to set/clear/test flags
195 * @index: attribute to differentiate multiple indices on one physical device
196 * @fh_lock: Lock for all v4l2_fhs
197 * @fh_list: List of &struct v4l2_fh
198 * @dev_debug: Internal device debug flags, not for use by drivers
199 * @tvnorms: Supported tv norms
200 *
201 * @release: video device release() callback
202 * @ioctl_ops: pointer to &struct v4l2_ioctl_ops with ioctl callbacks
203 *
204 * @valid_ioctls: bitmap with the valid ioctls for this device
205 * @disable_locking: bitmap with the ioctls that don't require locking
206 * @lock: pointer to &struct mutex serialization lock
207 *
208 * .. note::
209 * Only set @dev_parent if that can't be deduced from @v4l2_dev.
210 */
211
85struct video_device 212struct video_device
86{ 213{
87#if defined(CONFIG_MEDIA_CONTROLLER) 214#if defined(CONFIG_MEDIA_CONTROLLER)
@@ -89,59 +216,45 @@ struct video_device
89 struct media_intf_devnode *intf_devnode; 216 struct media_intf_devnode *intf_devnode;
90 struct media_pipeline pipe; 217 struct media_pipeline pipe;
91#endif 218#endif
92 /* device ops */
93 const struct v4l2_file_operations *fops; 219 const struct v4l2_file_operations *fops;
94 220
95 /* device capabilities as used in v4l2_capabilities */
96 u32 device_caps; 221 u32 device_caps;
97 222
98 /* sysfs */ 223 /* sysfs */
99 struct device dev; /* v4l device */ 224 struct device dev;
100 struct cdev *cdev; /* character device */ 225 struct cdev *cdev;
101 226
102 struct v4l2_device *v4l2_dev; /* v4l2_device parent */ 227 struct v4l2_device *v4l2_dev;
103 /* Only set parent if that can't be deduced from v4l2_dev */ 228 struct device *dev_parent;
104 struct device *dev_parent; /* device parent */
105 229
106 /* Control handler associated with this device node. May be NULL. */
107 struct v4l2_ctrl_handler *ctrl_handler; 230 struct v4l2_ctrl_handler *ctrl_handler;
108 231
109 /* vb2_queue associated with this device node. May be NULL. */
110 struct vb2_queue *queue; 232 struct vb2_queue *queue;
111 233
112 /* Priority state. If NULL, then v4l2_dev->prio will be used. */
113 struct v4l2_prio_state *prio; 234 struct v4l2_prio_state *prio;
114 235
115 /* device info */ 236 /* device info */
116 char name[32]; 237 char name[32];
117 int vfl_type; /* device type */ 238 int vfl_type;
118 int vfl_dir; /* receiver, transmitter or m2m */ 239 int vfl_dir;
119 /* 'minor' is set to -1 if the registration failed */
120 int minor; 240 int minor;
121 u16 num; 241 u16 num;
122 /* use bitops to set/clear/test flags */
123 unsigned long flags; 242 unsigned long flags;
124 /* attribute to differentiate multiple indices on one physical device */
125 int index; 243 int index;
126 244
127 /* V4L2 file handles */ 245 /* V4L2 file handles */
128 spinlock_t fh_lock; /* Lock for all v4l2_fhs */ 246 spinlock_t fh_lock;
129 struct list_head fh_list; /* List of struct v4l2_fh */ 247 struct list_head fh_list;
130 248
131 /* Internal device debug flags, not for use by drivers */
132 int dev_debug; 249 int dev_debug;
133 250
134 /* Video standard vars */ 251 v4l2_std_id tvnorms;
135 v4l2_std_id tvnorms; /* Supported tv norms */
136 252
137 /* callbacks */ 253 /* callbacks */
138 void (*release)(struct video_device *vdev); 254 void (*release)(struct video_device *vdev);
139
140 /* ioctl callbacks */
141 const struct v4l2_ioctl_ops *ioctl_ops; 255 const struct v4l2_ioctl_ops *ioctl_ops;
142 DECLARE_BITMAP(valid_ioctls, BASE_VIDIOC_PRIVATE); 256 DECLARE_BITMAP(valid_ioctls, BASE_VIDIOC_PRIVATE);
143 257
144 /* serialization lock */
145 DECLARE_BITMAP(disable_locking, BASE_VIDIOC_PRIVATE); 258 DECLARE_BITMAP(disable_locking, BASE_VIDIOC_PRIVATE);
146 struct mutex *lock; 259 struct mutex *lock;
147}; 260};
@@ -151,88 +264,241 @@ struct video_device
151/* dev to video-device */ 264/* dev to video-device */
152#define to_video_device(cd) container_of(cd, struct video_device, dev) 265#define to_video_device(cd) container_of(cd, struct video_device, dev)
153 266
267/**
268 * __video_register_device - register video4linux devices
269 *
270 * @vdev: struct video_device to register
271 * @type: type of device to register
272 * @nr: which device node number is desired:
273 * (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free)
274 * @warn_if_nr_in_use: warn if the desired device node number
275 * was already in use and another number was chosen instead.
276 * @owner: module that owns the video device node
277 *
278 * The registration code assigns minor numbers and device node numbers
279 * based on the requested type and registers the new device node with
280 * the kernel.
281 *
282 * This function assumes that struct video_device was zeroed when it
283 * was allocated and does not contain any stale date.
284 *
285 * An error is returned if no free minor or device node number could be
286 * found, or if the registration of the device node failed.
287 *
288 * Returns 0 on success.
289 *
290 * Valid values for @type are:
291 *
292 * - %VFL_TYPE_GRABBER - A frame grabber
293 * - %VFL_TYPE_VBI - Vertical blank data (undecoded)
294 * - %VFL_TYPE_RADIO - A radio card
295 * - %VFL_TYPE_SUBDEV - A subdevice
296 * - %VFL_TYPE_SDR - Software Defined Radio
297 *
298 * .. note::
299 *
300 * This function is meant to be used only inside the V4L2 core.
301 * Drivers should use video_register_device() or
302 * video_register_device_no_warn().
303 */
154int __must_check __video_register_device(struct video_device *vdev, int type, 304int __must_check __video_register_device(struct video_device *vdev, int type,
155 int nr, int warn_if_nr_in_use, struct module *owner); 305 int nr, int warn_if_nr_in_use, struct module *owner);
156 306
157/* Register video devices. Note that if video_register_device fails, 307/**
158 the release() callback of the video_device structure is *not* called, so 308 * video_register_device - register video4linux devices
159 the caller is responsible for freeing any data. Usually that means that 309 *
160 you call video_device_release() on failure. */ 310 * @vdev: struct video_device to register
311 * @type: type of device to register
312 * @nr: which device node number is desired:
313 * (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free)
314 *
315 * Internally, it calls __video_register_device(). Please see its
316 * documentation for more details.
317 *
318 * .. note::
319 * if video_register_device fails, the release() callback of
320 * &struct video_device structure is *not* called, so the caller
321 * is responsible for freeing any data. Usually that means that
322 * you video_device_release() should be called on failure.
323 */
161static inline int __must_check video_register_device(struct video_device *vdev, 324static inline int __must_check video_register_device(struct video_device *vdev,
162 int type, int nr) 325 int type, int nr)
163{ 326{
164 return __video_register_device(vdev, type, nr, 1, vdev->fops->owner); 327 return __video_register_device(vdev, type, nr, 1, vdev->fops->owner);
165} 328}
166 329
167/* Same as video_register_device, but no warning is issued if the desired 330/**
168 device node number was already in use. */ 331 * video_register_device_no_warn - register video4linux devices
332 *
333 * @vdev: struct video_device to register
334 * @type: type of device to register
335 * @nr: which device node number is desired:
336 * (0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free)
337 *
338 * This function is identical to video_register_device() except that no
339 * warning is issued if the desired device node number was already in use.
340 *
341 * Internally, it calls __video_register_device(). Please see its
342 * documentation for more details.
343 *
344 * .. note::
345 * if video_register_device fails, the release() callback of
346 * &struct video_device structure is *not* called, so the caller
347 * is responsible for freeing any data. Usually that means that
348 * you video_device_release() should be called on failure.
349 */
169static inline int __must_check video_register_device_no_warn( 350static inline int __must_check video_register_device_no_warn(
170 struct video_device *vdev, int type, int nr) 351 struct video_device *vdev, int type, int nr)
171{ 352{
172 return __video_register_device(vdev, type, nr, 0, vdev->fops->owner); 353 return __video_register_device(vdev, type, nr, 0, vdev->fops->owner);
173} 354}
174 355
175/* Unregister video devices. Will do nothing if vdev == NULL or 356/**
176 video_is_registered() returns false. */ 357 * video_unregister_device - Unregister video devices.
358 *
359 * @vdev: &struct video_device to register
360 *
361 * Does nothing if vdev == NULL or if video_is_registered() returns false.
362 */
177void video_unregister_device(struct video_device *vdev); 363void video_unregister_device(struct video_device *vdev);
178 364
179/* helper functions to alloc/release struct video_device, the 365/**
180 latter can also be used for video_device->release(). */ 366 * video_device_alloc - helper function to alloc &struct video_device
367 *
368 * Returns NULL if %-ENOMEM or a &struct video_device on success.
369 */
181struct video_device * __must_check video_device_alloc(void); 370struct video_device * __must_check video_device_alloc(void);
182 371
183/* this release function frees the vdev pointer */ 372/**
373 * video_device_release - helper function to release &struct video_device
374 *
375 * @vdev: pointer to &struct video_device
376 *
377 * Can also be used for video_device->release().
378 */
184void video_device_release(struct video_device *vdev); 379void video_device_release(struct video_device *vdev);
185 380
186/* this release function does nothing, use when the video_device is a 381/**
187 static global struct. Note that having a static video_device is 382 * video_device_release_empty - helper function to implement the
188 a dubious construction at best. */ 383 * video_device->release() callback.
384 *
385 * @vdev: pointer to &struct video_device
386 *
387 * This release function does nothing.
388 *
389 * It should be used when the video_device is a static global struct.
390 *
391 * .. note::
392 * Having a static video_device is a dubious construction at best.
393 */
189void video_device_release_empty(struct video_device *vdev); 394void video_device_release_empty(struct video_device *vdev);
190 395
191/* returns true if cmd is a known V4L2 ioctl */ 396/**
397 * v4l2_is_known_ioctl - Checks if a given cmd is a known V4L ioctl
398 *
399 * @cmd: ioctl command
400 *
401 * returns true if cmd is a known V4L2 ioctl
402 */
192bool v4l2_is_known_ioctl(unsigned int cmd); 403bool v4l2_is_known_ioctl(unsigned int cmd);
193 404
194/* mark that this command shouldn't use core locking */ 405/** v4l2_disable_ioctl_locking - mark that a given command
195static inline void v4l2_disable_ioctl_locking(struct video_device *vdev, unsigned int cmd) 406 * shouldn't use core locking
407 *
408 * @vdev: pointer to &struct video_device
409 * @cmd: ioctl command
410 */
411static inline void v4l2_disable_ioctl_locking(struct video_device *vdev,
412 unsigned int cmd)
196{ 413{
197 if (_IOC_NR(cmd) < BASE_VIDIOC_PRIVATE) 414 if (_IOC_NR(cmd) < BASE_VIDIOC_PRIVATE)
198 set_bit(_IOC_NR(cmd), vdev->disable_locking); 415 set_bit(_IOC_NR(cmd), vdev->disable_locking);
199} 416}
200 417
201/* Mark that this command isn't implemented. This must be called before 418/**
202 video_device_register. See also the comments in determine_valid_ioctls(). 419 * v4l2_disable_ioctl- mark that a given command isn't implemented.
203 This function allows drivers to provide just one v4l2_ioctl_ops struct, but 420 * shouldn't use core locking
204 disable ioctls based on the specific card that is actually found. */ 421 *
205static inline void v4l2_disable_ioctl(struct video_device *vdev, unsigned int cmd) 422 * @vdev: pointer to &struct video_device
423 * @cmd: ioctl command
424 *
425 * This function allows drivers to provide just one v4l2_ioctl_ops struct, but
426 * disable ioctls based on the specific card that is actually found.
427 *
428 * .. note::
429 *
430 * This must be called before video_register_device.
431 * See also the comments for determine_valid_ioctls().
432 */
433static inline void v4l2_disable_ioctl(struct video_device *vdev,
434 unsigned int cmd)
206{ 435{
207 if (_IOC_NR(cmd) < BASE_VIDIOC_PRIVATE) 436 if (_IOC_NR(cmd) < BASE_VIDIOC_PRIVATE)
208 set_bit(_IOC_NR(cmd), vdev->valid_ioctls); 437 set_bit(_IOC_NR(cmd), vdev->valid_ioctls);
209} 438}
210 439
211/* helper functions to access driver private data. */ 440/**
441 * video_get_drvdata - gets private data from &struct video_device.
442 *
443 * @vdev: pointer to &struct video_device
444 *
445 * returns a pointer to the private data
446 */
212static inline void *video_get_drvdata(struct video_device *vdev) 447static inline void *video_get_drvdata(struct video_device *vdev)
213{ 448{
214 return dev_get_drvdata(&vdev->dev); 449 return dev_get_drvdata(&vdev->dev);
215} 450}
216 451
452/**
453 * video_set_drvdata - sets private data from &struct video_device.
454 *
455 * @vdev: pointer to &struct video_device
456 * @data: private data pointer
457 */
217static inline void video_set_drvdata(struct video_device *vdev, void *data) 458static inline void video_set_drvdata(struct video_device *vdev, void *data)
218{ 459{
219 dev_set_drvdata(&vdev->dev, data); 460 dev_set_drvdata(&vdev->dev, data);
220} 461}
221 462
463/**
464 * video_devdata - gets &struct video_device from struct file.
465 *
466 * @file: pointer to struct file
467 */
222struct video_device *video_devdata(struct file *file); 468struct video_device *video_devdata(struct file *file);
223 469
224/* Combine video_get_drvdata and video_devdata as this is 470/**
225 used very often. */ 471 * video_drvdata - gets private data from &struct video_device using the
472 * struct file.
473 *
474 * @file: pointer to struct file
475 *
476 * This is function combines both video_get_drvdata() and video_devdata()
477 * as this is used very often.
478 */
226static inline void *video_drvdata(struct file *file) 479static inline void *video_drvdata(struct file *file)
227{ 480{
228 return video_get_drvdata(video_devdata(file)); 481 return video_get_drvdata(video_devdata(file));
229} 482}
230 483
484/**
485 * video_device_node_name - returns the video device name
486 *
487 * @vdev: pointer to &struct video_device
488 *
489 * Returns the device name string
490 */
231static inline const char *video_device_node_name(struct video_device *vdev) 491static inline const char *video_device_node_name(struct video_device *vdev)
232{ 492{
233 return dev_name(&vdev->dev); 493 return dev_name(&vdev->dev);
234} 494}
235 495
496/**
497 * video_is_registered - returns true if the &struct video_device is registered.
498 *
499 *
500 * @vdev: pointer to &struct video_device
501 */
236static inline int video_is_registered(struct video_device *vdev) 502static inline int video_is_registered(struct video_device *vdev)
237{ 503{
238 return test_bit(V4L2_FL_REGISTERED, &vdev->flags); 504 return test_bit(V4L2_FL_REGISTERED, &vdev->flags);