diff options
author | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-07-21 14:30:20 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-07-23 07:04:21 -0400 |
commit | d9d3d1761abecf72a8044762724fb04b5974a513 (patch) | |
tree | ec7e1b6133663ac60d51bec18f980d2fbb7a3959 | |
parent | 041d8211a0cc414650c2ac4b2396e0fcda27e17e (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.rst | 5 | ||||
-rw-r--r-- | drivers/media/v4l2-core/v4l2-dev.c | 34 | ||||
-rw-r--r-- | include/media/v4l2-dev.h | 364 |
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 | ||
700 | It is expected that once the CCF becomes available on all relevant | 700 | It is expected that once the CCF becomes available on all relevant |
701 | architectures this API will be removed. | 701 | architectures this API will be removed. |
702 | |||
703 | video_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 | */ | ||
849 | int __video_register_device(struct video_device *vdev, int type, int nr, | 815 | int __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 | */ | ||
50 | struct v4l2_prio_state { | 60 | struct 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 | */ | ||
54 | void v4l2_prio_init(struct v4l2_prio_state *global); | 69 | void 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 | */ | ||
55 | int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local, | 81 | int 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 | */ | ||
57 | void v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local); | 93 | void 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 | */ | ||
58 | void v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority local); | 104 | void 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 | */ | ||
59 | enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global); | 114 | enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global); |
60 | int 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 | */ | ||
125 | int 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 | */ | ||
63 | struct v4l2_file_operations { | 149 | struct 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 | |||
85 | struct video_device | 212 | struct 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 | */ | ||
154 | int __must_check __video_register_device(struct video_device *vdev, int type, | 304 | int __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 | */ | ||
161 | static inline int __must_check video_register_device(struct video_device *vdev, | 324 | static 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 | */ | ||
169 | static inline int __must_check video_register_device_no_warn( | 350 | static 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 | */ | ||
177 | void video_unregister_device(struct video_device *vdev); | 363 | void 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 | */ | ||
181 | struct video_device * __must_check video_device_alloc(void); | 370 | struct 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 | */ | ||
184 | void video_device_release(struct video_device *vdev); | 379 | void 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 | */ | ||
189 | void video_device_release_empty(struct video_device *vdev); | 394 | void 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 | */ | ||
192 | bool v4l2_is_known_ioctl(unsigned int cmd); | 403 | bool 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 |
195 | static 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 | */ | ||
411 | static 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 | * |
205 | static 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 | */ | ||
433 | static 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 | */ | ||
212 | static inline void *video_get_drvdata(struct video_device *vdev) | 447 | static 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 | */ | ||
217 | static inline void video_set_drvdata(struct video_device *vdev, void *data) | 458 | static 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 | */ | ||
222 | struct video_device *video_devdata(struct file *file); | 468 | struct 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 | */ | ||
226 | static inline void *video_drvdata(struct file *file) | 479 | static 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 | */ | ||
231 | static inline const char *video_device_node_name(struct video_device *vdev) | 491 | static 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 | */ | ||
236 | static inline int video_is_registered(struct video_device *vdev) | 502 | static 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); |