~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to include/media/v4l2-ctrls.h

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
    V4L2 controls support header.
 
3
 
 
4
    Copyright (C) 2010  Hans Verkuil <hverkuil@xs4all.nl>
 
5
 
 
6
    This program is free software; you can redistribute it and/or modify
 
7
    it under the terms of the GNU General Public License as published by
 
8
    the Free Software Foundation; either version 2 of the License, or
 
9
    (at your option) any later version.
 
10
 
 
11
    This program is distributed in the hope that it will be useful,
 
12
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
    GNU General Public License for more details.
 
15
 
 
16
    You should have received a copy of the GNU General Public License
 
17
    along with this program; if not, write to the Free Software
 
18
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
19
 */
 
20
 
 
21
#ifndef _V4L2_CTRLS_H
 
22
#define _V4L2_CTRLS_H
 
23
 
 
24
#include <linux/list.h>
 
25
#include <linux/device.h>
 
26
#include <linux/videodev2.h>
 
27
 
 
28
/* forward references */
 
29
struct v4l2_ctrl_handler;
 
30
struct v4l2_ctrl_helper;
 
31
struct v4l2_ctrl;
 
32
struct video_device;
 
33
struct v4l2_subdev;
 
34
struct v4l2_subscribed_event;
 
35
struct v4l2_fh;
 
36
 
 
37
/** struct v4l2_ctrl_ops - The control operations that the driver has to provide.
 
38
  * @g_volatile_ctrl: Get a new value for this control. Generally only relevant
 
39
  *             for volatile (and usually read-only) controls such as a control
 
40
  *             that returns the current signal strength which changes
 
41
  *             continuously.
 
42
  *             If not set, then the currently cached value will be returned.
 
43
  * @try_ctrl:  Test whether the control's value is valid. Only relevant when
 
44
  *             the usual min/max/step checks are not sufficient.
 
45
  * @s_ctrl:    Actually set the new control value. s_ctrl is compulsory. The
 
46
  *             ctrl->handler->lock is held when these ops are called, so no
 
47
  *             one else can access controls owned by that handler.
 
48
  */
 
49
struct v4l2_ctrl_ops {
 
50
        int (*g_volatile_ctrl)(struct v4l2_ctrl *ctrl);
 
51
        int (*try_ctrl)(struct v4l2_ctrl *ctrl);
 
52
        int (*s_ctrl)(struct v4l2_ctrl *ctrl);
 
53
};
 
54
 
 
55
/** struct v4l2_ctrl - The control structure.
 
56
  * @node:      The list node.
 
57
  * @ev_subs:   The list of control event subscriptions.
 
58
  * @handler:   The handler that owns the control.
 
59
  * @cluster:   Point to start of cluster array.
 
60
  * @ncontrols: Number of controls in cluster array.
 
61
  * @done:      Internal flag: set for each processed control.
 
62
  * @is_new:    Set when the user specified a new value for this control. It
 
63
  *             is also set when called from v4l2_ctrl_handler_setup. Drivers
 
64
  *             should never set this flag.
 
65
  * @is_private: If set, then this control is private to its handler and it
 
66
  *             will not be added to any other handlers. Drivers can set
 
67
  *             this flag.
 
68
  * @is_auto:   If set, then this control selects whether the other cluster
 
69
  *             members are in 'automatic' mode or 'manual' mode. This is
 
70
  *             used for autogain/gain type clusters. Drivers should never
 
71
  *             set this flag directly.
 
72
  * @has_volatiles: If set, then one or more members of the cluster are volatile.
 
73
  *             Drivers should never touch this flag.
 
74
  * @manual_mode_value: If the is_auto flag is set, then this is the value
 
75
  *             of the auto control that determines if that control is in
 
76
  *             manual mode. So if the value of the auto control equals this
 
77
  *             value, then the whole cluster is in manual mode. Drivers should
 
78
  *             never set this flag directly.
 
79
  * @ops:       The control ops.
 
80
  * @id:        The control ID.
 
81
  * @name:      The control name.
 
82
  * @type:      The control type.
 
83
  * @minimum:   The control's minimum value.
 
84
  * @maximum:   The control's maximum value.
 
85
  * @default_value: The control's default value.
 
86
  * @step:      The control's step value for non-menu controls.
 
87
  * @menu_skip_mask: The control's skip mask for menu controls. This makes it
 
88
  *             easy to skip menu items that are not valid. If bit X is set,
 
89
  *             then menu item X is skipped. Of course, this only works for
 
90
  *             menus with <= 32 menu items. There are no menus that come
 
91
  *             close to that number, so this is OK. Should we ever need more,
 
92
  *             then this will have to be extended to a u64 or a bit array.
 
93
  * @qmenu:     A const char * array for all menu items. Array entries that are
 
94
  *             empty strings ("") correspond to non-existing menu items (this
 
95
  *             is in addition to the menu_skip_mask above). The last entry
 
96
  *             must be NULL.
 
97
  * @flags:     The control's flags.
 
98
  * @cur:       The control's current value.
 
99
  * @val:       The control's new s32 value.
 
100
  * @val64:     The control's new s64 value.
 
101
  * @string:    The control's new string value.
 
102
  * @priv:      The control's private pointer. For use by the driver. It is
 
103
  *             untouched by the control framework. Note that this pointer is
 
104
  *             not freed when the control is deleted. Should this be needed
 
105
  *             then a new internal bitfield can be added to tell the framework
 
106
  *             to free this pointer.
 
107
  */
 
108
struct v4l2_ctrl {
 
109
        /* Administrative fields */
 
110
        struct list_head node;
 
111
        struct list_head ev_subs;
 
112
        struct v4l2_ctrl_handler *handler;
 
113
        struct v4l2_ctrl **cluster;
 
114
        unsigned ncontrols;
 
115
        unsigned int done:1;
 
116
 
 
117
        unsigned int is_new:1;
 
118
        unsigned int is_private:1;
 
119
        unsigned int is_auto:1;
 
120
        unsigned int has_volatiles:1;
 
121
        unsigned int manual_mode_value:8;
 
122
 
 
123
        const struct v4l2_ctrl_ops *ops;
 
124
        u32 id;
 
125
        const char *name;
 
126
        enum v4l2_ctrl_type type;
 
127
        s32 minimum, maximum, default_value;
 
128
        union {
 
129
                u32 step;
 
130
                u32 menu_skip_mask;
 
131
        };
 
132
        const char * const *qmenu;
 
133
        unsigned long flags;
 
134
        union {
 
135
                s32 val;
 
136
                s64 val64;
 
137
                char *string;
 
138
        } cur;
 
139
        union {
 
140
                s32 val;
 
141
                s64 val64;
 
142
                char *string;
 
143
        };
 
144
        void *priv;
 
145
};
 
146
 
 
147
/** struct v4l2_ctrl_ref - The control reference.
 
148
  * @node:      List node for the sorted list.
 
149
  * @next:      Single-link list node for the hash.
 
150
  * @ctrl:      The actual control information.
 
151
  * @helper:    Pointer to helper struct. Used internally in prepare_ext_ctrls().
 
152
  *
 
153
  * Each control handler has a list of these refs. The list_head is used to
 
154
  * keep a sorted-by-control-ID list of all controls, while the next pointer
 
155
  * is used to link the control in the hash's bucket.
 
156
  */
 
157
struct v4l2_ctrl_ref {
 
158
        struct list_head node;
 
159
        struct v4l2_ctrl_ref *next;
 
160
        struct v4l2_ctrl *ctrl;
 
161
        struct v4l2_ctrl_helper *helper;
 
162
};
 
163
 
 
164
/** struct v4l2_ctrl_handler - The control handler keeps track of all the
 
165
  * controls: both the controls owned by the handler and those inherited
 
166
  * from other handlers.
 
167
  * @lock:      Lock to control access to this handler and its controls.
 
168
  * @ctrls:     The list of controls owned by this handler.
 
169
  * @ctrl_refs: The list of control references.
 
170
  * @cached:    The last found control reference. It is common that the same
 
171
  *             control is needed multiple times, so this is a simple
 
172
  *             optimization.
 
173
  * @buckets:   Buckets for the hashing. Allows for quick control lookup.
 
174
  * @nr_of_buckets: Total number of buckets in the array.
 
175
  * @error:     The error code of the first failed control addition.
 
176
  */
 
177
struct v4l2_ctrl_handler {
 
178
        struct mutex lock;
 
179
        struct list_head ctrls;
 
180
        struct list_head ctrl_refs;
 
181
        struct v4l2_ctrl_ref *cached;
 
182
        struct v4l2_ctrl_ref **buckets;
 
183
        u16 nr_of_buckets;
 
184
        int error;
 
185
};
 
186
 
 
187
/** struct v4l2_ctrl_config - Control configuration structure.
 
188
  * @ops:       The control ops.
 
189
  * @id:        The control ID.
 
190
  * @name:      The control name.
 
191
  * @type:      The control type.
 
192
  * @min:       The control's minimum value.
 
193
  * @max:       The control's maximum value.
 
194
  * @step:      The control's step value for non-menu controls.
 
195
  * @def:       The control's default value.
 
196
  * @flags:     The control's flags.
 
197
  * @menu_skip_mask: The control's skip mask for menu controls. This makes it
 
198
  *             easy to skip menu items that are not valid. If bit X is set,
 
199
  *             then menu item X is skipped. Of course, this only works for
 
200
  *             menus with <= 32 menu items. There are no menus that come
 
201
  *             close to that number, so this is OK. Should we ever need more,
 
202
  *             then this will have to be extended to a u64 or a bit array.
 
203
  * @qmenu:     A const char * array for all menu items. Array entries that are
 
204
  *             empty strings ("") correspond to non-existing menu items (this
 
205
  *             is in addition to the menu_skip_mask above). The last entry
 
206
  *             must be NULL.
 
207
  * @is_private: If set, then this control is private to its handler and it
 
208
  *             will not be added to any other handlers.
 
209
  */
 
210
struct v4l2_ctrl_config {
 
211
        const struct v4l2_ctrl_ops *ops;
 
212
        u32 id;
 
213
        const char *name;
 
214
        enum v4l2_ctrl_type type;
 
215
        s32 min;
 
216
        s32 max;
 
217
        u32 step;
 
218
        s32 def;
 
219
        u32 flags;
 
220
        u32 menu_skip_mask;
 
221
        const char * const *qmenu;
 
222
        unsigned int is_private:1;
 
223
};
 
224
 
 
225
/** v4l2_ctrl_fill() - Fill in the control fields based on the control ID.
 
226
  *
 
227
  * This works for all standard V4L2 controls.
 
228
  * For non-standard controls it will only fill in the given arguments
 
229
  * and @name will be NULL.
 
230
  *
 
231
  * This function will overwrite the contents of @name, @type and @flags.
 
232
  * The contents of @min, @max, @step and @def may be modified depending on
 
233
  * the type.
 
234
  *
 
235
  * Do not use in drivers! It is used internally for backwards compatibility
 
236
  * control handling only. Once all drivers are converted to use the new
 
237
  * control framework this function will no longer be exported.
 
238
  */
 
239
void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
 
240
                    s32 *min, s32 *max, s32 *step, s32 *def, u32 *flags);
 
241
 
 
242
 
 
243
/** v4l2_ctrl_handler_init() - Initialize the control handler.
 
244
  * @hdl:       The control handler.
 
245
  * @nr_of_controls_hint: A hint of how many controls this handler is
 
246
  *             expected to refer to. This is the total number, so including
 
247
  *             any inherited controls. It doesn't have to be precise, but if
 
248
  *             it is way off, then you either waste memory (too many buckets
 
249
  *             are allocated) or the control lookup becomes slower (not enough
 
250
  *             buckets are allocated, so there are more slow list lookups).
 
251
  *             It will always work, though.
 
252
  *
 
253
  * Returns an error if the buckets could not be allocated. This error will
 
254
  * also be stored in @hdl->error.
 
255
  */
 
256
int v4l2_ctrl_handler_init(struct v4l2_ctrl_handler *hdl,
 
257
                           unsigned nr_of_controls_hint);
 
258
 
 
259
/** v4l2_ctrl_handler_free() - Free all controls owned by the handler and free
 
260
  * the control list.
 
261
  * @hdl:       The control handler.
 
262
  *
 
263
  * Does nothing if @hdl == NULL.
 
264
  */
 
265
void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl);
 
266
 
 
267
/** v4l2_ctrl_handler_setup() - Call the s_ctrl op for all controls belonging
 
268
  * to the handler to initialize the hardware to the current control values.
 
269
  * @hdl:       The control handler.
 
270
  *
 
271
  * Button controls will be skipped, as are read-only controls.
 
272
  *
 
273
  * If @hdl == NULL, then this just returns 0.
 
274
  */
 
275
int v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler *hdl);
 
276
 
 
277
/** v4l2_ctrl_handler_log_status() - Log all controls owned by the handler.
 
278
  * @hdl:       The control handler.
 
279
  * @prefix:    The prefix to use when logging the control values. If the
 
280
  *             prefix does not end with a space, then ": " will be added
 
281
  *             after the prefix. If @prefix == NULL, then no prefix will be
 
282
  *             used.
 
283
  *
 
284
  * For use with VIDIOC_LOG_STATUS.
 
285
  *
 
286
  * Does nothing if @hdl == NULL.
 
287
  */
 
288
void v4l2_ctrl_handler_log_status(struct v4l2_ctrl_handler *hdl,
 
289
                                  const char *prefix);
 
290
 
 
291
/** v4l2_ctrl_new_custom() - Allocate and initialize a new custom V4L2
 
292
  * control.
 
293
  * @hdl:       The control handler.
 
294
  * @cfg:       The control's configuration data.
 
295
  * @priv:      The control's driver-specific private data.
 
296
  *
 
297
  * If the &v4l2_ctrl struct could not be allocated then NULL is returned
 
298
  * and @hdl->error is set to the error code (if it wasn't set already).
 
299
  */
 
300
struct v4l2_ctrl *v4l2_ctrl_new_custom(struct v4l2_ctrl_handler *hdl,
 
301
                        const struct v4l2_ctrl_config *cfg, void *priv);
 
302
 
 
303
/** v4l2_ctrl_new_std() - Allocate and initialize a new standard V4L2 non-menu control.
 
304
  * @hdl:       The control handler.
 
305
  * @ops:       The control ops.
 
306
  * @id:        The control ID.
 
307
  * @min:       The control's minimum value.
 
308
  * @max:       The control's maximum value.
 
309
  * @step:      The control's step value
 
310
  * @def:       The control's default value.
 
311
  *
 
312
  * If the &v4l2_ctrl struct could not be allocated, or the control
 
313
  * ID is not known, then NULL is returned and @hdl->error is set to the
 
314
  * appropriate error code (if it wasn't set already).
 
315
  *
 
316
  * If @id refers to a menu control, then this function will return NULL.
 
317
  *
 
318
  * Use v4l2_ctrl_new_std_menu() when adding menu controls.
 
319
  */
 
320
struct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl,
 
321
                        const struct v4l2_ctrl_ops *ops,
 
322
                        u32 id, s32 min, s32 max, u32 step, s32 def);
 
323
 
 
324
/** v4l2_ctrl_new_std_menu() - Allocate and initialize a new standard V4L2 menu control.
 
325
  * @hdl:       The control handler.
 
326
  * @ops:       The control ops.
 
327
  * @id:        The control ID.
 
328
  * @max:       The control's maximum value.
 
329
  * @mask:      The control's skip mask for menu controls. This makes it
 
330
  *             easy to skip menu items that are not valid. If bit X is set,
 
331
  *             then menu item X is skipped. Of course, this only works for
 
332
  *             menus with <= 32 menu items. There are no menus that come
 
333
  *             close to that number, so this is OK. Should we ever need more,
 
334
  *             then this will have to be extended to a u64 or a bit array.
 
335
  * @def:       The control's default value.
 
336
  *
 
337
  * Same as v4l2_ctrl_new_std(), but @min is set to 0 and the @mask value
 
338
  * determines which menu items are to be skipped.
 
339
  *
 
340
  * If @id refers to a non-menu control, then this function will return NULL.
 
341
  */
 
342
struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl,
 
343
                        const struct v4l2_ctrl_ops *ops,
 
344
                        u32 id, s32 max, s32 mask, s32 def);
 
345
 
 
346
/** v4l2_ctrl_add_ctrl() - Add a control from another handler to this handler.
 
347
  * @hdl:       The control handler.
 
348
  * @ctrl:      The control to add.
 
349
  *
 
350
  * It will return NULL if it was unable to add the control reference.
 
351
  * If the control already belonged to the handler, then it will do
 
352
  * nothing and just return @ctrl.
 
353
  */
 
354
struct v4l2_ctrl *v4l2_ctrl_add_ctrl(struct v4l2_ctrl_handler *hdl,
 
355
                                          struct v4l2_ctrl *ctrl);
 
356
 
 
357
/** v4l2_ctrl_add_handler() - Add all controls from handler @add to
 
358
  * handler @hdl.
 
359
  * @hdl:       The control handler.
 
360
  * @add:       The control handler whose controls you want to add to
 
361
  *             the @hdl control handler.
 
362
  *
 
363
  * Does nothing if either of the two is a NULL pointer.
 
364
  * In case of an error @hdl->error will be set to the error code (if it
 
365
  * wasn't set already).
 
366
  */
 
367
int v4l2_ctrl_add_handler(struct v4l2_ctrl_handler *hdl,
 
368
                          struct v4l2_ctrl_handler *add);
 
369
 
 
370
 
 
371
/** v4l2_ctrl_cluster() - Mark all controls in the cluster as belonging to that cluster.
 
372
  * @ncontrols: The number of controls in this cluster.
 
373
  * @controls:  The cluster control array of size @ncontrols.
 
374
  */
 
375
void v4l2_ctrl_cluster(unsigned ncontrols, struct v4l2_ctrl **controls);
 
376
 
 
377
 
 
378
/** v4l2_ctrl_auto_cluster() - Mark all controls in the cluster as belonging to
 
379
  * that cluster and set it up for autofoo/foo-type handling.
 
380
  * @ncontrols: The number of controls in this cluster.
 
381
  * @controls:  The cluster control array of size @ncontrols. The first control
 
382
  *             must be the 'auto' control (e.g. autogain, autoexposure, etc.)
 
383
  * @manual_val: The value for the first control in the cluster that equals the
 
384
  *             manual setting.
 
385
  * @set_volatile: If true, then all controls except the first auto control will
 
386
  *             be volatile.
 
387
  *
 
388
  * Use for control groups where one control selects some automatic feature and
 
389
  * the other controls are only active whenever the automatic feature is turned
 
390
  * off (manual mode). Typical examples: autogain vs gain, auto-whitebalance vs
 
391
  * red and blue balance, etc.
 
392
  *
 
393
  * The behavior of such controls is as follows:
 
394
  *
 
395
  * When the autofoo control is set to automatic, then any manual controls
 
396
  * are set to inactive and any reads will call g_volatile_ctrl (if the control
 
397
  * was marked volatile).
 
398
  *
 
399
  * When the autofoo control is set to manual, then any manual controls will
 
400
  * be marked active, and any reads will just return the current value without
 
401
  * going through g_volatile_ctrl.
 
402
  *
 
403
  * In addition, this function will set the V4L2_CTRL_FLAG_UPDATE flag
 
404
  * on the autofoo control and V4L2_CTRL_FLAG_INACTIVE on the foo control(s)
 
405
  * if autofoo is in auto mode.
 
406
  */
 
407
void v4l2_ctrl_auto_cluster(unsigned ncontrols, struct v4l2_ctrl **controls,
 
408
                        u8 manual_val, bool set_volatile);
 
409
 
 
410
 
 
411
/** v4l2_ctrl_find() - Find a control with the given ID.
 
412
  * @hdl:       The control handler.
 
413
  * @id:        The control ID to find.
 
414
  *
 
415
  * If @hdl == NULL this will return NULL as well. Will lock the handler so
 
416
  * do not use from inside &v4l2_ctrl_ops.
 
417
  */
 
418
struct v4l2_ctrl *v4l2_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id);
 
419
 
 
420
/** v4l2_ctrl_activate() - Make the control active or inactive.
 
421
  * @ctrl:      The control to (de)activate.
 
422
  * @active:    True if the control should become active.
 
423
  *
 
424
  * This sets or clears the V4L2_CTRL_FLAG_INACTIVE flag atomically.
 
425
  * Does nothing if @ctrl == NULL.
 
426
  * This will usually be called from within the s_ctrl op.
 
427
  * The V4L2_EVENT_CTRL event will be generated afterwards.
 
428
  *
 
429
  * This function assumes that the control handler is locked.
 
430
  */
 
431
void v4l2_ctrl_activate(struct v4l2_ctrl *ctrl, bool active);
 
432
 
 
433
/** v4l2_ctrl_grab() - Mark the control as grabbed or not grabbed.
 
434
  * @ctrl:      The control to (de)activate.
 
435
  * @grabbed:   True if the control should become grabbed.
 
436
  *
 
437
  * This sets or clears the V4L2_CTRL_FLAG_GRABBED flag atomically.
 
438
  * Does nothing if @ctrl == NULL.
 
439
  * The V4L2_EVENT_CTRL event will be generated afterwards.
 
440
  * This will usually be called when starting or stopping streaming in the
 
441
  * driver.
 
442
  *
 
443
  * This function assumes that the control handler is not locked and will
 
444
  * take the lock itself.
 
445
  */
 
446
void v4l2_ctrl_grab(struct v4l2_ctrl *ctrl, bool grabbed);
 
447
 
 
448
/** v4l2_ctrl_lock() - Helper function to lock the handler
 
449
  * associated with the control.
 
450
  * @ctrl:      The control to lock.
 
451
  */
 
452
static inline void v4l2_ctrl_lock(struct v4l2_ctrl *ctrl)
 
453
{
 
454
        mutex_lock(&ctrl->handler->lock);
 
455
}
 
456
 
 
457
/** v4l2_ctrl_lock() - Helper function to unlock the handler
 
458
  * associated with the control.
 
459
  * @ctrl:      The control to unlock.
 
460
  */
 
461
static inline void v4l2_ctrl_unlock(struct v4l2_ctrl *ctrl)
 
462
{
 
463
        mutex_unlock(&ctrl->handler->lock);
 
464
}
 
465
 
 
466
/** v4l2_ctrl_g_ctrl() - Helper function to get the control's value from within a driver.
 
467
  * @ctrl:      The control.
 
468
  *
 
469
  * This returns the control's value safely by going through the control
 
470
  * framework. This function will lock the control's handler, so it cannot be
 
471
  * used from within the &v4l2_ctrl_ops functions.
 
472
  *
 
473
  * This function is for integer type controls only.
 
474
  */
 
475
s32 v4l2_ctrl_g_ctrl(struct v4l2_ctrl *ctrl);
 
476
 
 
477
/** v4l2_ctrl_s_ctrl() - Helper function to set the control's value from within a driver.
 
478
  * @ctrl:      The control.
 
479
  * @val:       The new value.
 
480
  *
 
481
  * This set the control's new value safely by going through the control
 
482
  * framework. This function will lock the control's handler, so it cannot be
 
483
  * used from within the &v4l2_ctrl_ops functions.
 
484
  *
 
485
  * This function is for integer type controls only.
 
486
  */
 
487
int v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val);
 
488
 
 
489
/* Internal helper functions that deal with control events. */
 
490
void v4l2_ctrl_add_event(struct v4l2_ctrl *ctrl,
 
491
                struct v4l2_subscribed_event *sev);
 
492
void v4l2_ctrl_del_event(struct v4l2_ctrl *ctrl,
 
493
                struct v4l2_subscribed_event *sev);
 
494
 
 
495
/* Helpers for ioctl_ops. If hdl == NULL then they will all return -EINVAL. */
 
496
int v4l2_queryctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc);
 
497
int v4l2_querymenu(struct v4l2_ctrl_handler *hdl, struct v4l2_querymenu *qm);
 
498
int v4l2_g_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_control *ctrl);
 
499
int v4l2_s_ctrl(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl,
 
500
                                                struct v4l2_control *ctrl);
 
501
int v4l2_g_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct v4l2_ext_controls *c);
 
502
int v4l2_try_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct v4l2_ext_controls *c);
 
503
int v4l2_s_ext_ctrls(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl,
 
504
                                                struct v4l2_ext_controls *c);
 
505
 
 
506
/* Helpers for subdevices. If the associated ctrl_handler == NULL then they
 
507
   will all return -EINVAL. */
 
508
int v4l2_subdev_queryctrl(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc);
 
509
int v4l2_subdev_querymenu(struct v4l2_subdev *sd, struct v4l2_querymenu *qm);
 
510
int v4l2_subdev_g_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *cs);
 
511
int v4l2_subdev_try_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *cs);
 
512
int v4l2_subdev_s_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *cs);
 
513
int v4l2_subdev_g_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl);
 
514
int v4l2_subdev_s_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl);
 
515
 
 
516
#endif