1.. SPDX-License-Identifier: GPL-2.0
2
3V4L2 Controls
4=============
5
6Introduction
7------------
8
9The V4L2 control API seems simple enough, but quickly becomes very hard to
10implement correctly in drivers. But much of the code needed to handle controls
11is actually not driver specific and can be moved to the V4L core framework.
12
13After all, the only part that a driver developer is interested in is:
14
151) How do I add a control?
162) How do I set the control's value? (i.e. s_ctrl)
17
18And occasionally:
19
203) How do I get the control's value? (i.e. g_volatile_ctrl)
214) How do I validate the user's proposed control value? (i.e. try_ctrl)
22
23All the rest is something that can be done centrally.
24
25The control framework was created in order to implement all the rules of the
26V4L2 specification with respect to controls in a central place. And to make
27life as easy as possible for the driver developer.
28
29Note that the control framework relies on the presence of a struct
30:c:type:`v4l2_device` for V4L2 drivers and struct v4l2_subdev for
31sub-device drivers.
32
33
34Objects in the framework
35------------------------
36
37There are two main objects:
38
39The :c:type:`v4l2_ctrl` object describes the control properties and keeps
40track of the control's value (both the current value and the proposed new
41value).
42
43:c:type:`v4l2_ctrl_handler` is the object that keeps track of controls. It
44maintains a list of v4l2_ctrl objects that it owns and another list of
45references to controls, possibly to controls owned by other handlers.
46
47
48Basic usage for V4L2 and sub-device drivers
49-------------------------------------------
50
511) Prepare the driver:
52
53.. code-block:: c
54
55	#include <media/v4l2-ctrls.h>
56
571.1) Add the handler to your driver's top-level struct:
58
59For V4L2 drivers:
60
61.. code-block:: c
62
63	struct foo_dev {
64		...
65		struct v4l2_device v4l2_dev;
66		...
67		struct v4l2_ctrl_handler ctrl_handler;
68		...
69	};
70
71For sub-device drivers:
72
73.. code-block:: c
74
75	struct foo_dev {
76		...
77		struct v4l2_subdev sd;
78		...
79		struct v4l2_ctrl_handler ctrl_handler;
80		...
81	};
82
831.2) Initialize the handler:
84
85.. code-block:: c
86
87	v4l2_ctrl_handler_init(&foo->ctrl_handler, nr_of_controls);
88
89The second argument is a hint telling the function how many controls this
90handler is expected to handle. It will allocate a hashtable based on this
91information. It is a hint only.
92
931.3) Hook the control handler into the driver:
94
95For V4L2 drivers:
96
97.. code-block:: c
98
99	foo->v4l2_dev.ctrl_handler = &foo->ctrl_handler;
100
101For sub-device drivers:
102
103.. code-block:: c
104
105	foo->sd.ctrl_handler = &foo->ctrl_handler;
106
1071.4) Clean up the handler at the end:
108
109.. code-block:: c
110
111	v4l2_ctrl_handler_free(&foo->ctrl_handler);
112
113:c:func:`v4l2_ctrl_handler_free` does not touch the handler's ``error`` field.
114
1152) Add controls:
116
117You add non-menu controls by calling :c:func:`v4l2_ctrl_new_std`:
118
119.. code-block:: c
120
121	struct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl,
122			const struct v4l2_ctrl_ops *ops,
123			u32 id, s32 min, s32 max, u32 step, s32 def);
124
125Menu and integer menu controls are added by calling
126:c:func:`v4l2_ctrl_new_std_menu`:
127
128.. code-block:: c
129
130	struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl,
131			const struct v4l2_ctrl_ops *ops,
132			u32 id, s32 max, s32 skip_mask, s32 def);
133
134Menu controls with a driver specific menu are added by calling
135:c:func:`v4l2_ctrl_new_std_menu_items`:
136
137.. code-block:: c
138
139       struct v4l2_ctrl *v4l2_ctrl_new_std_menu_items(
140                       struct v4l2_ctrl_handler *hdl,
141                       const struct v4l2_ctrl_ops *ops, u32 id, s32 max,
142                       s32 skip_mask, s32 def, const char * const *qmenu);
143
144Standard compound controls can be added by calling
145:c:func:`v4l2_ctrl_new_std_compound`:
146
147.. code-block:: c
148
149       struct v4l2_ctrl *v4l2_ctrl_new_std_compound(struct v4l2_ctrl_handler *hdl,
150                       const struct v4l2_ctrl_ops *ops, u32 id,
151                       const union v4l2_ctrl_ptr p_def);
152
153Integer menu controls with a driver specific menu can be added by calling
154:c:func:`v4l2_ctrl_new_int_menu`:
155
156.. code-block:: c
157
158	struct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl,
159			const struct v4l2_ctrl_ops *ops,
160			u32 id, s32 max, s32 def, const s64 *qmenu_int);
161
162These functions are typically called right after the
163:c:func:`v4l2_ctrl_handler_init`:
164
165.. code-block:: c
166
167	static const s64 exp_bias_qmenu[] = {
168	       -2, -1, 0, 1, 2
169	};
170	static const char * const test_pattern[] = {
171		"Disabled",
172		"Vertical Bars",
173		"Solid Black",
174		"Solid White",
175	};
176
177	v4l2_ctrl_handler_init(&foo->ctrl_handler, nr_of_controls);
178	v4l2_ctrl_new_std(&foo->ctrl_handler, &foo_ctrl_ops,
179			V4L2_CID_BRIGHTNESS, 0, 255, 1, 128);
180	v4l2_ctrl_new_std(&foo->ctrl_handler, &foo_ctrl_ops,
181			V4L2_CID_CONTRAST, 0, 255, 1, 128);
182	v4l2_ctrl_new_std_menu(&foo->ctrl_handler, &foo_ctrl_ops,
183			V4L2_CID_POWER_LINE_FREQUENCY,
184			V4L2_CID_POWER_LINE_FREQUENCY_60HZ, 0,
185			V4L2_CID_POWER_LINE_FREQUENCY_DISABLED);
186	v4l2_ctrl_new_int_menu(&foo->ctrl_handler, &foo_ctrl_ops,
187			V4L2_CID_EXPOSURE_BIAS,
188			ARRAY_SIZE(exp_bias_qmenu) - 1,
189			ARRAY_SIZE(exp_bias_qmenu) / 2 - 1,
190			exp_bias_qmenu);
191	v4l2_ctrl_new_std_menu_items(&foo->ctrl_handler, &foo_ctrl_ops,
192			V4L2_CID_TEST_PATTERN, ARRAY_SIZE(test_pattern) - 1, 0,
193			0, test_pattern);
194	...
195	if (foo->ctrl_handler.error)
196		return v4l2_ctrl_handler_free(&foo->ctrl_handler);
197
198The :c:func:`v4l2_ctrl_new_std` function returns the v4l2_ctrl pointer to
199the new control, but if you do not need to access the pointer outside the
200control ops, then there is no need to store it.
201
202The :c:func:`v4l2_ctrl_new_std` function will fill in most fields based on
203the control ID except for the min, max, step and default values. These are
204passed in the last four arguments. These values are driver specific while
205control attributes like type, name, flags are all global. The control's
206current value will be set to the default value.
207
208The :c:func:`v4l2_ctrl_new_std_menu` function is very similar but it is
209used for menu controls. There is no min argument since that is always 0 for
210menu controls, and instead of a step there is a skip_mask argument: if bit
211X is 1, then menu item X is skipped.
212
213The :c:func:`v4l2_ctrl_new_int_menu` function creates a new standard
214integer menu control with driver-specific items in the menu. It differs
215from v4l2_ctrl_new_std_menu in that it doesn't have the mask argument and
216takes as the last argument an array of signed 64-bit integers that form an
217exact menu item list.
218
219The :c:func:`v4l2_ctrl_new_std_menu_items` function is very similar to
220v4l2_ctrl_new_std_menu but takes an extra parameter qmenu, which is the
221driver specific menu for an otherwise standard menu control. A good example
222for this control is the test pattern control for capture/display/sensors
223devices that have the capability to generate test patterns. These test
224patterns are hardware specific, so the contents of the menu will vary from
225device to device.
226
227Note that if something fails, the function will return NULL or an error and
228set ctrl_handler->error to the error code. If ctrl_handler->error was already
229set, then it will just return and do nothing. This is also true for
230v4l2_ctrl_handler_init if it cannot allocate the internal data structure.
231
232This makes it easy to init the handler and just add all controls and only check
233the error code at the end. Saves a lot of repetitive error checking.
234
235It is recommended to add controls in ascending control ID order: it will be
236a bit faster that way.
237
2383) Optionally force initial control setup:
239
240.. code-block:: c
241
242	v4l2_ctrl_handler_setup(&foo->ctrl_handler);
243
244This will call s_ctrl for all controls unconditionally. Effectively this
245initializes the hardware to the default control values. It is recommended
246that you do this as this ensures that both the internal data structures and
247the hardware are in sync.
248
2494) Finally: implement the :c:type:`v4l2_ctrl_ops`
250
251.. code-block:: c
252
253	static const struct v4l2_ctrl_ops foo_ctrl_ops = {
254		.s_ctrl = foo_s_ctrl,
255	};
256
257Usually all you need is s_ctrl:
258
259.. code-block:: c
260
261	static int foo_s_ctrl(struct v4l2_ctrl *ctrl)
262	{
263		struct foo *state = container_of(ctrl->handler, struct foo, ctrl_handler);
264
265		switch (ctrl->id) {
266		case V4L2_CID_BRIGHTNESS:
267			write_reg(0x123, ctrl->val);
268			break;
269		case V4L2_CID_CONTRAST:
270			write_reg(0x456, ctrl->val);
271			break;
272		}
273		return 0;
274	}
275
276The control ops are called with the v4l2_ctrl pointer as argument.
277The new control value has already been validated, so all you need to do is
278to actually update the hardware registers.
279
280You're done! And this is sufficient for most of the drivers we have. No need
281to do any validation of control values, or implement QUERYCTRL, QUERY_EXT_CTRL
282and QUERYMENU. And G/S_CTRL as well as G/TRY/S_EXT_CTRLS are automatically supported.
283
284
285.. note::
286
287   The remainder sections deal with more advanced controls topics and scenarios.
288   In practice the basic usage as described above is sufficient for most drivers.
289
290
291Inheriting Sub-device Controls
292------------------------------
293
294When a sub-device is registered with a V4L2 driver by calling
295v4l2_device_register_subdev() and the ctrl_handler fields of both v4l2_subdev
296and v4l2_device are set, then the controls of the subdev will become
297automatically available in the V4L2 driver as well. If the subdev driver
298contains controls that already exist in the V4L2 driver, then those will be
299skipped (so a V4L2 driver can always override a subdev control).
300
301What happens here is that v4l2_device_register_subdev() calls
302v4l2_ctrl_add_handler() adding the controls of the subdev to the controls
303of v4l2_device.
304
305
306Accessing Control Values
307------------------------
308
309The following union is used inside the control framework to access control
310values:
311
312.. code-block:: c
313
314	union v4l2_ctrl_ptr {
315		s32 *p_s32;
316		s64 *p_s64;
317		char *p_char;
318		void *p;
319	};
320
321The v4l2_ctrl struct contains these fields that can be used to access both
322current and new values:
323
324.. code-block:: c
325
326	s32 val;
327	struct {
328		s32 val;
329	} cur;
330
331
332	union v4l2_ctrl_ptr p_new;
333	union v4l2_ctrl_ptr p_cur;
334
335If the control has a simple s32 type, then:
336
337.. code-block:: c
338
339	&ctrl->val == ctrl->p_new.p_s32
340	&ctrl->cur.val == ctrl->p_cur.p_s32
341
342For all other types use ctrl->p_cur.p<something>. Basically the val
343and cur.val fields can be considered an alias since these are used so often.
344
345Within the control ops you can freely use these. The val and cur.val speak for
346themselves. The p_char pointers point to character buffers of length
347ctrl->maximum + 1, and are always 0-terminated.
348
349Unless the control is marked volatile the p_cur field points to the
350current cached control value. When you create a new control this value is made
351identical to the default value. After calling v4l2_ctrl_handler_setup() this
352value is passed to the hardware. It is generally a good idea to call this
353function.
354
355Whenever a new value is set that new value is automatically cached. This means
356that most drivers do not need to implement the g_volatile_ctrl() op. The
357exception is for controls that return a volatile register such as a signal
358strength read-out that changes continuously. In that case you will need to
359implement g_volatile_ctrl like this:
360
361.. code-block:: c
362
363	static int foo_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
364	{
365		switch (ctrl->id) {
366		case V4L2_CID_BRIGHTNESS:
367			ctrl->val = read_reg(0x123);
368			break;
369		}
370	}
371
372Note that you use the 'new value' union as well in g_volatile_ctrl. In general
373controls that need to implement g_volatile_ctrl are read-only controls. If they
374are not, a V4L2_EVENT_CTRL_CH_VALUE will not be generated when the control
375changes.
376
377To mark a control as volatile you have to set V4L2_CTRL_FLAG_VOLATILE:
378
379.. code-block:: c
380
381	ctrl = v4l2_ctrl_new_std(&sd->ctrl_handler, ...);
382	if (ctrl)
383		ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE;
384
385For try/s_ctrl the new values (i.e. as passed by the user) are filled in and
386you can modify them in try_ctrl or set them in s_ctrl. The 'cur' union
387contains the current value, which you can use (but not change!) as well.
388
389If s_ctrl returns 0 (OK), then the control framework will copy the new final
390values to the 'cur' union.
391
392While in g_volatile/s/try_ctrl you can access the value of all controls owned
393by the same handler since the handler's lock is held. If you need to access
394the value of controls owned by other handlers, then you have to be very careful
395not to introduce deadlocks.
396
397Outside of the control ops you have to go through to helper functions to get
398or set a single control value safely in your driver:
399
400.. code-block:: c
401
402	s32 v4l2_ctrl_g_ctrl(struct v4l2_ctrl *ctrl);
403	int v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val);
404
405These functions go through the control framework just as VIDIOC_G/S_CTRL ioctls
406do. Don't use these inside the control ops g_volatile/s/try_ctrl, though, that
407will result in a deadlock since these helpers lock the handler as well.
408
409You can also take the handler lock yourself:
410
411.. code-block:: c
412
413	mutex_lock(&state->ctrl_handler.lock);
414	pr_info("String value is '%s'\n", ctrl1->p_cur.p_char);
415	pr_info("Integer value is '%s'\n", ctrl2->cur.val);
416	mutex_unlock(&state->ctrl_handler.lock);
417
418
419Menu Controls
420-------------
421
422The v4l2_ctrl struct contains this union:
423
424.. code-block:: c
425
426	union {
427		u32 step;
428		u32 menu_skip_mask;
429	};
430
431For menu controls menu_skip_mask is used. What it does is that it allows you
432to easily exclude certain menu items. This is used in the VIDIOC_QUERYMENU
433implementation where you can return -EINVAL if a certain menu item is not
434present. Note that VIDIOC_QUERYCTRL always returns a step value of 1 for
435menu controls.
436
437A good example is the MPEG Audio Layer II Bitrate menu control where the
438menu is a list of standardized possible bitrates. But in practice hardware
439implementations will only support a subset of those. By setting the skip
440mask you can tell the framework which menu items should be skipped. Setting
441it to 0 means that all menu items are supported.
442
443You set this mask either through the v4l2_ctrl_config struct for a custom
444control, or by calling v4l2_ctrl_new_std_menu().
445
446
447Custom Controls
448---------------
449
450Driver specific controls can be created using v4l2_ctrl_new_custom():
451
452.. code-block:: c
453
454	static const struct v4l2_ctrl_config ctrl_filter = {
455		.ops = &ctrl_custom_ops,
456		.id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER,
457		.name = "Spatial Filter",
458		.type = V4L2_CTRL_TYPE_INTEGER,
459		.flags = V4L2_CTRL_FLAG_SLIDER,
460		.max = 15,
461		.step = 1,
462	};
463
464	ctrl = v4l2_ctrl_new_custom(&foo->ctrl_handler, &ctrl_filter, NULL);
465
466The last argument is the priv pointer which can be set to driver-specific
467private data.
468
469The v4l2_ctrl_config struct also has a field to set the is_private flag.
470
471If the name field is not set, then the framework will assume this is a standard
472control and will fill in the name, type and flags fields accordingly.
473
474
475Active and Grabbed Controls
476---------------------------
477
478If you get more complex relationships between controls, then you may have to
479activate and deactivate controls. For example, if the Chroma AGC control is
480on, then the Chroma Gain control is inactive. That is, you may set it, but
481the value will not be used by the hardware as long as the automatic gain
482control is on. Typically user interfaces can disable such input fields.
483
484You can set the 'active' status using v4l2_ctrl_activate(). By default all
485controls are active. Note that the framework does not check for this flag.
486It is meant purely for GUIs. The function is typically called from within
487s_ctrl.
488
489The other flag is the 'grabbed' flag. A grabbed control means that you cannot
490change it because it is in use by some resource. Typical examples are MPEG
491bitrate controls that cannot be changed while capturing is in progress.
492
493If a control is set to 'grabbed' using v4l2_ctrl_grab(), then the framework
494will return -EBUSY if an attempt is made to set this control. The
495v4l2_ctrl_grab() function is typically called from the driver when it
496starts or stops streaming.
497
498
499Control Clusters
500----------------
501
502By default all controls are independent from the others. But in more
503complex scenarios you can get dependencies from one control to another.
504In that case you need to 'cluster' them:
505
506.. code-block:: c
507
508	struct foo {
509		struct v4l2_ctrl_handler ctrl_handler;
510	#define AUDIO_CL_VOLUME (0)
511	#define AUDIO_CL_MUTE   (1)
512		struct v4l2_ctrl *audio_cluster[2];
513		...
514	};
515
516	state->audio_cluster[AUDIO_CL_VOLUME] =
517		v4l2_ctrl_new_std(&state->ctrl_handler, ...);
518	state->audio_cluster[AUDIO_CL_MUTE] =
519		v4l2_ctrl_new_std(&state->ctrl_handler, ...);
520	v4l2_ctrl_cluster(ARRAY_SIZE(state->audio_cluster), state->audio_cluster);
521
522From now on whenever one or more of the controls belonging to the same
523cluster is set (or 'gotten', or 'tried'), only the control ops of the first
524control ('volume' in this example) is called. You effectively create a new
525composite control. Similar to how a 'struct' works in C.
526
527So when s_ctrl is called with V4L2_CID_AUDIO_VOLUME as argument, you should set
528all two controls belonging to the audio_cluster:
529
530.. code-block:: c
531
532	static int foo_s_ctrl(struct v4l2_ctrl *ctrl)
533	{
534		struct foo *state = container_of(ctrl->handler, struct foo, ctrl_handler);
535
536		switch (ctrl->id) {
537		case V4L2_CID_AUDIO_VOLUME: {
538			struct v4l2_ctrl *mute = ctrl->cluster[AUDIO_CL_MUTE];
539
540			write_reg(0x123, mute->val ? 0 : ctrl->val);
541			break;
542		}
543		case V4L2_CID_CONTRAST:
544			write_reg(0x456, ctrl->val);
545			break;
546		}
547		return 0;
548	}
549
550In the example above the following are equivalent for the VOLUME case:
551
552.. code-block:: c
553
554	ctrl == ctrl->cluster[AUDIO_CL_VOLUME] == state->audio_cluster[AUDIO_CL_VOLUME]
555	ctrl->cluster[AUDIO_CL_MUTE] == state->audio_cluster[AUDIO_CL_MUTE]
556
557In practice using cluster arrays like this becomes very tiresome. So instead
558the following equivalent method is used:
559
560.. code-block:: c
561
562	struct {
563		/* audio cluster */
564		struct v4l2_ctrl *volume;
565		struct v4l2_ctrl *mute;
566	};
567
568The anonymous struct is used to clearly 'cluster' these two control pointers,
569but it serves no other purpose. The effect is the same as creating an
570array with two control pointers. So you can just do:
571
572.. code-block:: c
573
574	state->volume = v4l2_ctrl_new_std(&state->ctrl_handler, ...);
575	state->mute = v4l2_ctrl_new_std(&state->ctrl_handler, ...);
576	v4l2_ctrl_cluster(2, &state->volume);
577
578And in foo_s_ctrl you can use these pointers directly: state->mute->val.
579
580Note that controls in a cluster may be NULL. For example, if for some
581reason mute was never added (because the hardware doesn't support that
582particular feature), then mute will be NULL. So in that case we have a
583cluster of 2 controls, of which only 1 is actually instantiated. The
584only restriction is that the first control of the cluster must always be
585present, since that is the 'master' control of the cluster. The master
586control is the one that identifies the cluster and that provides the
587pointer to the v4l2_ctrl_ops struct that is used for that cluster.
588
589Obviously, all controls in the cluster array must be initialized to either
590a valid control or to NULL.
591
592In rare cases you might want to know which controls of a cluster actually
593were set explicitly by the user. For this you can check the 'is_new' flag of
594each control. For example, in the case of a volume/mute cluster the 'is_new'
595flag of the mute control would be set if the user called VIDIOC_S_CTRL for
596mute only. If the user would call VIDIOC_S_EXT_CTRLS for both mute and volume
597controls, then the 'is_new' flag would be 1 for both controls.
598
599The 'is_new' flag is always 1 when called from v4l2_ctrl_handler_setup().
600
601
602Handling autogain/gain-type Controls with Auto Clusters
603-------------------------------------------------------
604
605A common type of control cluster is one that handles 'auto-foo/foo'-type
606controls. Typical examples are autogain/gain, autoexposure/exposure,
607autowhitebalance/red balance/blue balance. In all cases you have one control
608that determines whether another control is handled automatically by the hardware,
609or whether it is under manual control from the user.
610
611If the cluster is in automatic mode, then the manual controls should be
612marked inactive and volatile. When the volatile controls are read the
613g_volatile_ctrl operation should return the value that the hardware's automatic
614mode set up automatically.
615
616If the cluster is put in manual mode, then the manual controls should become
617active again and the volatile flag is cleared (so g_volatile_ctrl is no longer
618called while in manual mode). In addition just before switching to manual mode
619the current values as determined by the auto mode are copied as the new manual
620values.
621
622Finally the V4L2_CTRL_FLAG_UPDATE should be set for the auto control since
623changing that control affects the control flags of the manual controls.
624
625In order to simplify this a special variation of v4l2_ctrl_cluster was
626introduced:
627
628.. code-block:: c
629
630	void v4l2_ctrl_auto_cluster(unsigned ncontrols, struct v4l2_ctrl **controls,
631				    u8 manual_val, bool set_volatile);
632
633The first two arguments are identical to v4l2_ctrl_cluster. The third argument
634tells the framework which value switches the cluster into manual mode. The
635last argument will optionally set V4L2_CTRL_FLAG_VOLATILE for the non-auto controls.
636If it is false, then the manual controls are never volatile. You would typically
637use that if the hardware does not give you the option to read back to values as
638determined by the auto mode (e.g. if autogain is on, the hardware doesn't allow
639you to obtain the current gain value).
640
641The first control of the cluster is assumed to be the 'auto' control.
642
643Using this function will ensure that you don't need to handle all the complex
644flag and volatile handling.
645
646
647VIDIOC_LOG_STATUS Support
648-------------------------
649
650This ioctl allow you to dump the current status of a driver to the kernel log.
651The v4l2_ctrl_handler_log_status(ctrl_handler, prefix) can be used to dump the
652value of the controls owned by the given handler to the log. You can supply a
653prefix as well. If the prefix didn't end with a space, then ': ' will be added
654for you.
655
656
657Different Handlers for Different Video Nodes
658--------------------------------------------
659
660Usually the V4L2 driver has just one control handler that is global for
661all video nodes. But you can also specify different control handlers for
662different video nodes. You can do that by manually setting the ctrl_handler
663field of struct video_device.
664
665That is no problem if there are no subdevs involved but if there are, then
666you need to block the automatic merging of subdev controls to the global
667control handler. You do that by simply setting the ctrl_handler field in
668struct v4l2_device to NULL. Now v4l2_device_register_subdev() will no longer
669merge subdev controls.
670
671After each subdev was added, you will then have to call v4l2_ctrl_add_handler
672manually to add the subdev's control handler (sd->ctrl_handler) to the desired
673control handler. This control handler may be specific to the video_device or
674for a subset of video_device's. For example: the radio device nodes only have
675audio controls, while the video and vbi device nodes share the same control
676handler for the audio and video controls.
677
678If you want to have one handler (e.g. for a radio device node) have a subset
679of another handler (e.g. for a video device node), then you should first add
680the controls to the first handler, add the other controls to the second
681handler and finally add the first handler to the second. For example:
682
683.. code-block:: c
684
685	v4l2_ctrl_new_std(&radio_ctrl_handler, &radio_ops, V4L2_CID_AUDIO_VOLUME, ...);
686	v4l2_ctrl_new_std(&radio_ctrl_handler, &radio_ops, V4L2_CID_AUDIO_MUTE, ...);
687	v4l2_ctrl_new_std(&video_ctrl_handler, &video_ops, V4L2_CID_BRIGHTNESS, ...);
688	v4l2_ctrl_new_std(&video_ctrl_handler, &video_ops, V4L2_CID_CONTRAST, ...);
689	v4l2_ctrl_add_handler(&video_ctrl_handler, &radio_ctrl_handler, NULL);
690
691The last argument to v4l2_ctrl_add_handler() is a filter function that allows
692you to filter which controls will be added. Set it to NULL if you want to add
693all controls.
694
695Or you can add specific controls to a handler:
696
697.. code-block:: c
698
699	volume = v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_AUDIO_VOLUME, ...);
700	v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_BRIGHTNESS, ...);
701	v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_CONTRAST, ...);
702
703What you should not do is make two identical controls for two handlers.
704For example:
705
706.. code-block:: c
707
708	v4l2_ctrl_new_std(&radio_ctrl_handler, &radio_ops, V4L2_CID_AUDIO_MUTE, ...);
709	v4l2_ctrl_new_std(&video_ctrl_handler, &video_ops, V4L2_CID_AUDIO_MUTE, ...);
710
711This would be bad since muting the radio would not change the video mute
712control. The rule is to have one control for each hardware 'knob' that you
713can twiddle.
714
715
716Finding Controls
717----------------
718
719Normally you have created the controls yourself and you can store the struct
720v4l2_ctrl pointer into your own struct.
721
722But sometimes you need to find a control from another handler that you do
723not own. For example, if you have to find a volume control from a subdev.
724
725You can do that by calling v4l2_ctrl_find:
726
727.. code-block:: c
728
729	struct v4l2_ctrl *volume;
730
731	volume = v4l2_ctrl_find(sd->ctrl_handler, V4L2_CID_AUDIO_VOLUME);
732
733Since v4l2_ctrl_find will lock the handler you have to be careful where you
734use it. For example, this is not a good idea:
735
736.. code-block:: c
737
738	struct v4l2_ctrl_handler ctrl_handler;
739
740	v4l2_ctrl_new_std(&ctrl_handler, &video_ops, V4L2_CID_BRIGHTNESS, ...);
741	v4l2_ctrl_new_std(&ctrl_handler, &video_ops, V4L2_CID_CONTRAST, ...);
742
743...and in video_ops.s_ctrl:
744
745.. code-block:: c
746
747	case V4L2_CID_BRIGHTNESS:
748		contrast = v4l2_find_ctrl(&ctrl_handler, V4L2_CID_CONTRAST);
749		...
750
751When s_ctrl is called by the framework the ctrl_handler.lock is already taken, so
752attempting to find another control from the same handler will deadlock.
753
754It is recommended not to use this function from inside the control ops.
755
756
757Preventing Controls inheritance
758-------------------------------
759
760When one control handler is added to another using v4l2_ctrl_add_handler, then
761by default all controls from one are merged to the other. But a subdev might
762have low-level controls that make sense for some advanced embedded system, but
763not when it is used in consumer-level hardware. In that case you want to keep
764those low-level controls local to the subdev. You can do this by simply
765setting the 'is_private' flag of the control to 1:
766
767.. code-block:: c
768
769	static const struct v4l2_ctrl_config ctrl_private = {
770		.ops = &ctrl_custom_ops,
771		.id = V4L2_CID_...,
772		.name = "Some Private Control",
773		.type = V4L2_CTRL_TYPE_INTEGER,
774		.max = 15,
775		.step = 1,
776		.is_private = 1,
777	};
778
779	ctrl = v4l2_ctrl_new_custom(&foo->ctrl_handler, &ctrl_private, NULL);
780
781These controls will now be skipped when v4l2_ctrl_add_handler is called.
782
783
784V4L2_CTRL_TYPE_CTRL_CLASS Controls
785----------------------------------
786
787Controls of this type can be used by GUIs to get the name of the control class.
788A fully featured GUI can make a dialog with multiple tabs with each tab
789containing the controls belonging to a particular control class. The name of
790each tab can be found by querying a special control with ID <control class | 1>.
791
792Drivers do not have to care about this. The framework will automatically add
793a control of this type whenever the first control belonging to a new control
794class is added.
795
796
797Adding Notify Callbacks
798-----------------------
799
800Sometimes the platform or bridge driver needs to be notified when a control
801from a sub-device driver changes. You can set a notify callback by calling
802this function:
803
804.. code-block:: c
805
806	void v4l2_ctrl_notify(struct v4l2_ctrl *ctrl,
807		void (*notify)(struct v4l2_ctrl *ctrl, void *priv), void *priv);
808
809Whenever the give control changes value the notify callback will be called
810with a pointer to the control and the priv pointer that was passed with
811v4l2_ctrl_notify. Note that the control's handler lock is held when the
812notify function is called.
813
814There can be only one notify function per control handler. Any attempt
815to set another notify function will cause a WARN_ON.
816
817v4l2_ctrl functions and data structures
818---------------------------------------
819
820.. kernel-doc:: include/media/v4l2-ctrls.h
821