Blame view

include/media/v4l2-dev.h 15.1 KB
b24413180   Greg Kroah-Hartman   License cleanup: ...
1
  /* SPDX-License-Identifier: GPL-2.0 */
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
2
3
4
5
6
7
8
9
10
11
  /*
   *
   *	V 4 L 2   D R I V E R   H E L P E R   A P I
   *
   * Moved from videodev2.h
   *
   *	Some commonly needed functions for drivers (v4l2-common.o module)
   */
  #ifndef _V4L2_DEV_H
  #define _V4L2_DEV_H
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
12
13
14
  #include <linux/poll.h>
  #include <linux/fs.h>
  #include <linux/device.h>
7f8ecfab7   Hans Verkuil   V4L/DVB (8852): v...
15
  #include <linux/cdev.h>
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
16
  #include <linux/mutex.h>
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
17
  #include <linux/videodev2.h>
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
18

2c0ab67be   Laurent Pinchart   [media] v4l: Make...
19
  #include <media/media-entity.h>
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
20
  #define VIDEO_MAJOR	81
bfa8a273b   Hans Verkuil   V4L/DVB (8787): v...
21

401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
22
23
24
  #define VFL_TYPE_GRABBER	0
  #define VFL_TYPE_VBI		1
  #define VFL_TYPE_RADIO		2
2096a5dcf   Laurent Pinchart   [media] v4l: subd...
25
  #define VFL_TYPE_SUBDEV		3
d42626bda   Antti Palosaari   [media] v4l: add ...
26
  #define VFL_TYPE_SDR		4
b2fe22d0c   Nick Dyer   [media] v4l2-core...
27
28
  #define VFL_TYPE_TOUCH		5
  #define VFL_TYPE_MAX		6
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
29

5c77879ff   Hans Verkuil   [media] v4l2-dev:...
30
31
32
33
34
  /* Is this a receiver, transmitter or mem-to-mem? */
  /* Ignored for VFL_TYPE_SUBDEV. */
  #define VFL_DIR_RX		0
  #define VFL_DIR_TX		1
  #define VFL_DIR_M2M		2
a399810ca   Hans Verkuil   V4L/DVB (8482): v...
35
  struct v4l2_ioctl_callbacks;
bec43661b   Hans Verkuil   V4L/DVB (10135): ...
36
  struct video_device;
9bea3514d   Hans Verkuil   V4L/DVB (9974): v...
37
  struct v4l2_device;
0996517cf   Hans Verkuil   V4L/DVB: v4l2: Ad...
38
  struct v4l2_ctrl_handler;
a399810ca   Hans Verkuil   V4L/DVB (8482): v...
39

957b4aa9f   Laurent Pinchart   V4L/DVB (13552): ...
40
41
42
43
  /* Flag to mark the video_device struct as registered.
     Drivers can clear this flag if they want to block all future
     device access. It is cleared by video_unregister_device. */
  #define V4L2_FL_REGISTERED	(0)
b1a873a37   Hans Verkuil   [media] v4l2: use...
44
  /* file->private_data points to struct v4l2_fh */
1babcb460   Sakari Ailus   V4L/DVB: V4L: Fil...
45
  #define V4L2_FL_USES_V4L2_FH	(1)
dc93a70cc   Hans Verkuil   V4L/DVB (9973): v...
46

022654930   Hans Verkuil   [media] v4l2_prio...
47
  /* Priority helper functions */
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
48
49
50
51
52
53
54
55
  /**
   * struct v4l2_prio_state - stores the priority states
   *
   * @prios: array with elements to store the array priorities
   *
   *
   * .. note::
   *    The size of @prios array matches the number of priority types defined
ffa0441ed   Mauro Carvalho Chehab   [media] docs-rst:...
56
   *    by enum &v4l2_priority.
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
57
   */
022654930   Hans Verkuil   [media] v4l2_prio...
58
59
60
  struct v4l2_prio_state {
  	atomic_t prios[4];
  };
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
61
62
63
64
65
  /**
   * v4l2_prio_init - initializes a struct v4l2_prio_state
   *
   * @global: pointer to &struct v4l2_prio_state
   */
022654930   Hans Verkuil   [media] v4l2_prio...
66
  void v4l2_prio_init(struct v4l2_prio_state *global);
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
67
68
69
70
71
  
  /**
   * v4l2_prio_change - changes the v4l2 file handler priority
   *
   * @global: pointer to the &struct v4l2_prio_state of the device node.
ffa0441ed   Mauro Carvalho Chehab   [media] docs-rst:...
72
73
   * @local: pointer to the desired priority, as defined by enum &v4l2_priority
   * @new: Priority type requested, as defined by enum &v4l2_priority.
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
74
75
76
77
   *
   * .. note::
   *	This function should be used only by the V4L2 core.
   */
022654930   Hans Verkuil   [media] v4l2_prio...
78
79
  int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local,
  		     enum v4l2_priority new);
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
80
81
82
83
84
  
  /**
   * v4l2_prio_open - Implements the priority logic for a file handler open
   *
   * @global: pointer to the &struct v4l2_prio_state of the device node.
ffa0441ed   Mauro Carvalho Chehab   [media] docs-rst:...
85
   * @local: pointer to the desired priority, as defined by enum &v4l2_priority
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
86
87
88
89
   *
   * .. note::
   *	This function should be used only by the V4L2 core.
   */
022654930   Hans Verkuil   [media] v4l2_prio...
90
  void v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local);
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
91
92
93
94
95
  
  /**
   * v4l2_prio_close - Implements the priority logic for a file handler close
   *
   * @global: pointer to the &struct v4l2_prio_state of the device node.
ffa0441ed   Mauro Carvalho Chehab   [media] docs-rst:...
96
   * @local: priority to be released, as defined by enum &v4l2_priority
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
97
98
99
100
   *
   * .. note::
   *	This function should be used only by the V4L2 core.
   */
022654930   Hans Verkuil   [media] v4l2_prio...
101
  void v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority local);
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
102
103
104
105
106
107
108
109
110
  
  /**
   * v4l2_prio_max - Return the maximum priority, as stored at the @global array.
   *
   * @global: pointer to the &struct v4l2_prio_state of the device node.
   *
   * .. note::
   *	This function should be used only by the V4L2 core.
   */
022654930   Hans Verkuil   [media] v4l2_prio...
111
  enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global);
022654930   Hans Verkuil   [media] v4l2_prio...
112

d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
113
  /**
e383ce073   Mauro Carvalho Chehab   [media] get rid o...
114
   * v4l2_prio_check - Implements the priority logic for a file handler close
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
115
116
   *
   * @global: pointer to the &struct v4l2_prio_state of the device node.
ffa0441ed   Mauro Carvalho Chehab   [media] docs-rst:...
117
   * @local: desired priority, as defined by enum &v4l2_priority local
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
118
119
120
121
122
   *
   * .. note::
   *	This function should be used only by the V4L2 core.
   */
  int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority local);
022654930   Hans Verkuil   [media] v4l2_prio...
123

d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
  /**
   * struct v4l2_file_operations - fs operations used by a V4L2 device
   *
   * @owner: pointer to struct module
   * @read: operations needed to implement the read() syscall
   * @write: operations needed to implement the write() syscall
   * @poll: operations needed to implement the poll() syscall
   * @unlocked_ioctl: operations needed to implement the ioctl() syscall
   * @compat_ioctl32: operations needed to implement the ioctl() syscall for
   *	the special case where the Kernel uses 64 bits instructions, but
   *	the userspace uses 32 bits.
   * @get_unmapped_area: called by the mmap() syscall, used when %!CONFIG_MMU
   * @mmap: operations needed to implement the mmap() syscall
   * @open: operations needed to implement the open() syscall
   * @release: operations needed to implement the release() syscall
   *
   * .. note::
   *
   *	Those operations are used to implemente the fs struct file_operations
   *	at the V4L2 drivers. The V4L2 core overrides the fs ops with some
   *	extra logic needed by the subsystem.
   */
bec43661b   Hans Verkuil   V4L/DVB (10135): ...
146
147
148
149
150
  struct v4l2_file_operations {
  	struct module *owner;
  	ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
  	ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
  	unsigned int (*poll) (struct file *, struct poll_table_struct *);
71b85346a   Sandor Yu   MLK-11508-1: Reve...
151
  	long (*ioctl) (struct file *, unsigned int, unsigned long);
bec43661b   Hans Verkuil   V4L/DVB (10135): ...
152
  	long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
b9d0aa6e2   Laurent Pinchart   [media] v4l: Add ...
153
154
155
  #ifdef CONFIG_COMPAT
  	long (*compat_ioctl32) (struct file *, unsigned int, unsigned long);
  #endif
ecc6517d9   Bob Liu   [media] Revert "V...
156
157
  	unsigned long (*get_unmapped_area) (struct file *, unsigned long,
  				unsigned long, unsigned long, unsigned long);
bec43661b   Hans Verkuil   V4L/DVB (10135): ...
158
159
160
161
  	int (*mmap) (struct file *, struct vm_area_struct *);
  	int (*open) (struct file *);
  	int (*release) (struct file *);
  };
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
162
163
164
165
166
  /*
   * Newer version of video_device, handled by videodev2.c
   * 	This version moves redundant code from video device code to
   *	the common handler
   */
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
167

d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
  /**
   * struct video_device - Structure used to create and manage the V4L2 device
   *	nodes.
   *
   * @entity: &struct media_entity
   * @intf_devnode: pointer to &struct media_intf_devnode
   * @pipe: &struct media_pipeline
   * @fops: pointer to &struct v4l2_file_operations for the video device
   * @device_caps: device capabilities as used in v4l2_capabilities
   * @dev: &struct device for the video device
   * @cdev: character device
   * @v4l2_dev: pointer to &struct v4l2_device parent
   * @dev_parent: pointer to &struct device parent
   * @ctrl_handler: Control handler associated with this device node.
   *	 May be NULL.
   * @queue: &struct vb2_queue associated with this device node. May be NULL.
   * @prio: pointer to &struct v4l2_prio_state with device's Priority state.
   *	 If NULL, then v4l2_dev->prio will be used.
   * @name: video device name
   * @vfl_type: V4L device type
   * @vfl_dir: V4L receiver, transmitter or m2m
   * @minor: device node 'minor'. It is set to -1 if the registration failed
   * @num: number of the video device node
   * @flags: video device flags. Use bitops to set/clear/test flags
   * @index: attribute to differentiate multiple indices on one physical device
   * @fh_lock: Lock for all v4l2_fhs
   * @fh_list: List of &struct v4l2_fh
   * @dev_debug: Internal device debug flags, not for use by drivers
   * @tvnorms: Supported tv norms
   *
   * @release: video device release() callback
   * @ioctl_ops: pointer to &struct v4l2_ioctl_ops with ioctl callbacks
   *
   * @valid_ioctls: bitmap with the valid ioctls for this device
   * @disable_locking: bitmap with the ioctls that don't require locking
   * @lock: pointer to &struct mutex serialization lock
   *
   * .. note::
   *	Only set @dev_parent if that can't be deduced from @v4l2_dev.
   */
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
208
209
  struct video_device
  {
2c0ab67be   Laurent Pinchart   [media] v4l: Make...
210
211
  #if defined(CONFIG_MEDIA_CONTROLLER)
  	struct media_entity entity;
d9c21e3e4   Mauro Carvalho Chehab   [media] v4l2-core...
212
  	struct media_intf_devnode *intf_devnode;
d0a164f59   Shuah Khan   [media] media: v4...
213
  	struct media_pipeline pipe;
2c0ab67be   Laurent Pinchart   [media] v4l: Make...
214
  #endif
bec43661b   Hans Verkuil   V4L/DVB (10135): ...
215
  	const struct v4l2_file_operations *fops;
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
216

7bbe78132   Hans Verkuil   [media] v4l2: add...
217
  	u32 device_caps;
54bd5b66c   Kay Sievers   V4L/DVB (6293): V...
218
  	/* sysfs */
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
219
220
  	struct device dev;
  	struct cdev *cdev;
9bea3514d   Hans Verkuil   V4L/DVB (9974): v...
221

d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
222
223
  	struct v4l2_device *v4l2_dev;
  	struct device *dev_parent;
54bd5b66c   Kay Sievers   V4L/DVB (6293): V...
224

0996517cf   Hans Verkuil   V4L/DVB: v4l2: Ad...
225
  	struct v4l2_ctrl_handler *ctrl_handler;
5a5adf6b6   Hans Verkuil   [media] v4l2-dev/...
226
  	struct vb2_queue *queue;
0f62fd6a2   Hans Verkuil   [media] v4l2: add...
227
  	struct v4l2_prio_state *prio;
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
228
  	/* device info */
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
229
  	char name[32];
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
230
231
  	int vfl_type;
  	int vfl_dir;
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
232
  	int minor;
dd89601d4   Hans Verkuil   V4L/DVB (9133): v...
233
  	u16 num;
dc93a70cc   Hans Verkuil   V4L/DVB (9973): v...
234
  	unsigned long flags;
539a7555b   brandon@ifup.org   V4L/DVB (8078): I...
235
  	int index;
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
236

1babcb460   Sakari Ailus   V4L/DVB: V4L: Fil...
237
  	/* V4L2 file handles */
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
238
239
  	spinlock_t		fh_lock;
  	struct list_head	fh_list;
1babcb460   Sakari Ailus   V4L/DVB: V4L: Fil...
240

17028cdb7   Hans Verkuil   [media] v4l2 core...
241
  	int dev_debug;
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
242

d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
243
  	v4l2_std_id tvnorms;
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
244
245
  
  	/* callbacks */
dc93a70cc   Hans Verkuil   V4L/DVB (9973): v...
246
  	void (*release)(struct video_device *vdev);
a399810ca   Hans Verkuil   V4L/DVB (8482): v...
247
  	const struct v4l2_ioctl_ops *ioctl_ops;
48ea0be06   Hans Verkuil   [media] v4l2-dev/...
248
  	DECLARE_BITMAP(valid_ioctls, BASE_VIDIOC_PRIVATE);
ee6869afc   Hans Verkuil   V4L/DVB: v4l2: ad...
249

152a3a732   Hans Verkuil   [media] v4l2-dev:...
250
  	DECLARE_BITMAP(disable_locking, BASE_VIDIOC_PRIVATE);
ee6869afc   Hans Verkuil   V4L/DVB: v4l2: ad...
251
  	struct mutex *lock;
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
252
  };
6e3ea0e71   Laurent Pinchart   [media] v4l: Fix ...
253
254
  #define media_entity_to_video_device(__e) \
  	container_of(__e, struct video_device, entity)
bfa8a273b   Hans Verkuil   V4L/DVB (8787): v...
255
  /* dev to video-device */
22a04f106   Hans Verkuil   V4L/DVB (8429): v...
256
  #define to_video_device(cd) container_of(cd, struct video_device, dev)
e90ff9239   Linus Torvalds   V4L/DVB (6220a): ...
257

d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
  /**
   * __video_register_device - register video4linux devices
   *
   * @vdev: struct video_device to register
   * @type: type of device to register
   * @nr:   which device node number is desired:
   * 	(0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free)
   * @warn_if_nr_in_use: warn if the desired device node number
   *        was already in use and another number was chosen instead.
   * @owner: module that owns the video device node
   *
   * The registration code assigns minor numbers and device node numbers
   * based on the requested type and registers the new device node with
   * the kernel.
   *
   * This function assumes that struct video_device was zeroed when it
   * was allocated and does not contain any stale date.
   *
   * An error is returned if no free minor or device node number could be
   * found, or if the registration of the device node failed.
   *
   * Returns 0 on success.
   *
   * Valid values for @type are:
   *
   *	- %VFL_TYPE_GRABBER - A frame grabber
   *	- %VFL_TYPE_VBI - Vertical blank data (undecoded)
   *	- %VFL_TYPE_RADIO - A radio card
   *	- %VFL_TYPE_SUBDEV - A subdevice
   *	- %VFL_TYPE_SDR - Software Defined Radio
b2fe22d0c   Nick Dyer   [media] v4l2-core...
288
   *	- %VFL_TYPE_TOUCH - A touch sensor
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
289
290
291
292
293
294
295
   *
   * .. note::
   *
   *	This function is meant to be used only inside the V4L2 core.
   *	Drivers should use video_register_device() or
   *	video_register_device_no_warn().
   */
2096a5dcf   Laurent Pinchart   [media] v4l: subd...
296
297
  int __must_check __video_register_device(struct video_device *vdev, int type,
  		int nr, int warn_if_nr_in_use, struct module *owner);
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
  /**
   *  video_register_device - register video4linux devices
   *
   * @vdev: struct video_device to register
   * @type: type of device to register
   * @nr:   which device node number is desired:
   * 	(0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free)
   *
   * Internally, it calls __video_register_device(). Please see its
   * documentation for more details.
   *
   * .. note::
   * 	if video_register_device fails, the release() callback of
   *	&struct video_device structure is *not* called, so the caller
   *	is responsible for freeing any data. Usually that means that
   *	you video_device_release() should be called on failure.
   */
2096a5dcf   Laurent Pinchart   [media] v4l: subd...
315
316
317
318
319
  static inline int __must_check video_register_device(struct video_device *vdev,
  		int type, int nr)
  {
  	return __video_register_device(vdev, type, nr, 1, vdev->fops->owner);
  }
dc93a70cc   Hans Verkuil   V4L/DVB (9973): v...
320

d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
  /**
   *  video_register_device_no_warn - register video4linux devices
   *
   * @vdev: struct video_device to register
   * @type: type of device to register
   * @nr:   which device node number is desired:
   * 	(0 == /dev/video0, 1 == /dev/video1, ..., -1 == first free)
   *
   * This function is identical to video_register_device() except that no
   * warning is issued if the desired device node number was already in use.
   *
   * Internally, it calls __video_register_device(). Please see its
   * documentation for more details.
   *
   * .. note::
   * 	if video_register_device fails, the release() callback of
   *	&struct video_device structure is *not* called, so the caller
   *	is responsible for freeing any data. Usually that means that
   *	you video_device_release() should be called on failure.
   */
2096a5dcf   Laurent Pinchart   [media] v4l: subd...
341
342
343
344
345
  static inline int __must_check video_register_device_no_warn(
  		struct video_device *vdev, int type, int nr)
  {
  	return __video_register_device(vdev, type, nr, 0, vdev->fops->owner);
  }
6b5270d21   Hans Verkuil   V4L/DVB (12725): ...
346

d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
347
348
349
350
351
352
353
  /**
   * video_unregister_device - Unregister video devices.
   *
   * @vdev: &struct video_device to register
   *
   * Does nothing if vdev == NULL or if video_is_registered() returns false.
   */
dc93a70cc   Hans Verkuil   V4L/DVB (9973): v...
354
  void video_unregister_device(struct video_device *vdev);
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
355

d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
356
357
358
359
360
  /**
   * video_device_alloc - helper function to alloc &struct video_device
   *
   * Returns NULL if %-ENOMEM or a &struct video_device on success.
   */
e138c592b   Hans Verkuil   V4L/DVB (8785): v...
361
  struct video_device * __must_check video_device_alloc(void);
bfa8a273b   Hans Verkuil   V4L/DVB (8787): v...
362

d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
363
364
365
366
367
  /**
   * video_device_release - helper function to release &struct video_device
   *
   * @vdev: pointer to &struct video_device
   *
564aaf692   Mauro Carvalho Chehab   [media] doc-rst: ...
368
   * Can also be used for video_device->release\(\).
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
369
   */
dc93a70cc   Hans Verkuil   V4L/DVB (9973): v...
370
  void video_device_release(struct video_device *vdev);
bfa8a273b   Hans Verkuil   V4L/DVB (8787): v...
371

d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
372
373
  /**
   * video_device_release_empty - helper function to implement the
564aaf692   Mauro Carvalho Chehab   [media] doc-rst: ...
374
   * 	video_device->release\(\) callback.
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
375
376
377
378
379
380
381
382
383
384
   *
   * @vdev: pointer to &struct video_device
   *
   * This release function does nothing.
   *
   * It should be used when the video_device is a static global struct.
   *
   * .. note::
   *	Having a static video_device is a dubious construction at best.
   */
dc93a70cc   Hans Verkuil   V4L/DVB (9973): v...
385
  void video_device_release_empty(struct video_device *vdev);
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
386

d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
387
388
389
390
391
392
393
  /**
   * v4l2_is_known_ioctl - Checks if a given cmd is a known V4L ioctl
   *
   * @cmd: ioctl command
   *
   * returns true if cmd is a known V4L2 ioctl
   */
8ab75e3ec   Hans Verkuil   [media] v4l2-dev:...
394
  bool v4l2_is_known_ioctl(unsigned int cmd);
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
395
396
397
398
399
400
401
402
  /** v4l2_disable_ioctl_locking - mark that a given command
   *	shouldn't use core locking
   *
   * @vdev: pointer to &struct video_device
   * @cmd: ioctl command
   */
  static inline void v4l2_disable_ioctl_locking(struct video_device *vdev,
  					      unsigned int cmd)
8ab75e3ec   Hans Verkuil   [media] v4l2-dev:...
403
404
  {
  	if (_IOC_NR(cmd) < BASE_VIDIOC_PRIVATE)
152a3a732   Hans Verkuil   [media] v4l2-dev:...
405
  		set_bit(_IOC_NR(cmd), vdev->disable_locking);
8ab75e3ec   Hans Verkuil   [media] v4l2-dev:...
406
  }
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
  /**
   * v4l2_disable_ioctl- mark that a given command isn't implemented.
   *	shouldn't use core locking
   *
   * @vdev: pointer to &struct video_device
   * @cmd: ioctl command
   *
   * This function allows drivers to provide just one v4l2_ioctl_ops struct, but
   * disable ioctls based on the specific card that is actually found.
   *
   * .. note::
   *
   *    This must be called before video_register_device.
   *    See also the comments for determine_valid_ioctls().
   */
  static inline void v4l2_disable_ioctl(struct video_device *vdev,
  				      unsigned int cmd)
48ea0be06   Hans Verkuil   [media] v4l2-dev/...
424
425
426
427
  {
  	if (_IOC_NR(cmd) < BASE_VIDIOC_PRIVATE)
  		set_bit(_IOC_NR(cmd), vdev->valid_ioctls);
  }
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
428
429
430
431
432
433
434
  /**
   * video_get_drvdata - gets private data from &struct video_device.
   *
   * @vdev: pointer to &struct video_device
   *
   * returns a pointer to the private data
   */
dc93a70cc   Hans Verkuil   V4L/DVB (9973): v...
435
  static inline void *video_get_drvdata(struct video_device *vdev)
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
436
  {
dc93a70cc   Hans Verkuil   V4L/DVB (9973): v...
437
  	return dev_get_drvdata(&vdev->dev);
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
438
  }
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
439
440
441
442
443
444
  /**
   * video_set_drvdata - sets private data from &struct video_device.
   *
   * @vdev: pointer to &struct video_device
   * @data: private data pointer
   */
dc93a70cc   Hans Verkuil   V4L/DVB (9973): v...
445
  static inline void video_set_drvdata(struct video_device *vdev, void *data)
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
446
  {
dc93a70cc   Hans Verkuil   V4L/DVB (9973): v...
447
  	dev_set_drvdata(&vdev->dev, data);
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
448
  }
38ee04f04   Mauro Carvalho Chehab   V4L/DVB (4348): F...
449

d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
450
451
452
453
454
  /**
   * video_devdata - gets &struct video_device from struct file.
   *
   * @file: pointer to struct file
   */
bfa8a273b   Hans Verkuil   V4L/DVB (8787): v...
455
  struct video_device *video_devdata(struct file *file);
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
456
457
458
459
460
461
462
463
464
  /**
   * video_drvdata - gets private data from &struct video_device using the
   *	struct file.
   *
   * @file: pointer to struct file
   *
   * This is function combines both video_get_drvdata() and video_devdata()
   * as this is used very often.
   */
bfa8a273b   Hans Verkuil   V4L/DVB (8787): v...
465
466
467
468
  static inline void *video_drvdata(struct file *file)
  {
  	return video_get_drvdata(video_devdata(file));
  }
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
469

d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
470
471
472
473
474
475
476
  /**
   * video_device_node_name - returns the video device name
   *
   * @vdev: pointer to &struct video_device
   *
   * Returns the device name string
   */
eac8ea536   Laurent Pinchart   V4L/DVB (13549): ...
477
478
479
480
  static inline const char *video_device_node_name(struct video_device *vdev)
  {
  	return dev_name(&vdev->dev);
  }
d9d3d1761   Mauro Carvalho Chehab   [media] doc-rst: ...
481
482
483
484
485
486
  /**
   * video_is_registered - returns true if the &struct video_device is registered.
   *
   *
   * @vdev: pointer to &struct video_device
   */
957b4aa9f   Laurent Pinchart   V4L/DVB (13552): ...
487
  static inline int video_is_registered(struct video_device *vdev)
dc93a70cc   Hans Verkuil   V4L/DVB (9973): v...
488
  {
957b4aa9f   Laurent Pinchart   V4L/DVB (13552): ...
489
  	return test_bit(V4L2_FL_REGISTERED, &vdev->flags);
dc93a70cc   Hans Verkuil   V4L/DVB (9973): v...
490
  }
401998fa9   Mauro Carvalho Chehab   V4L/DVB (4065): S...
491
  #endif /* _V4L2_DEV_H */