• Home
  • Raw
  • Download

Lines Matching +full:auto +full:- +full:switching

1 .. SPDX-License-Identifier: GPL-2.0
7 ------------
31 sub-device drivers.
35 ------------------------
48 Basic usage for V4L2 and sub-device drivers
49 -------------------------------------------
53 .. code-block:: c
55 #include <media/v4l2-ctrls.h>
57 1.1) Add the handler to your driver's top-level struct:
61 .. code-block:: c
71 For sub-device drivers:
73 .. code-block:: c
85 .. code-block:: c
87 v4l2_ctrl_handler_init(&foo->ctrl_handler, nr_of_controls);
97 .. code-block:: c
99 foo->v4l2_dev.ctrl_handler = &foo->ctrl_handler;
101 For sub-device drivers:
103 .. code-block:: c
105 foo->sd.ctrl_handler = &foo->ctrl_handler;
109 .. code-block:: c
111 v4l2_ctrl_handler_free(&foo->ctrl_handler);
116 You add non-menu controls by calling :c:func:`v4l2_ctrl_new_std`:
118 .. code-block:: c
127 .. code-block:: c
136 .. code-block:: c
146 .. code-block:: c
155 .. code-block:: c
164 .. code-block:: c
167 -2, -1, 0, 1, 2
176 v4l2_ctrl_handler_init(&foo->ctrl_handler, nr_of_controls);
177 v4l2_ctrl_new_std(&foo->ctrl_handler, &foo_ctrl_ops,
179 v4l2_ctrl_new_std(&foo->ctrl_handler, &foo_ctrl_ops,
181 v4l2_ctrl_new_std_menu(&foo->ctrl_handler, &foo_ctrl_ops,
185 v4l2_ctrl_new_int_menu(&foo->ctrl_handler, &foo_ctrl_ops,
187 ARRAY_SIZE(exp_bias_qmenu) - 1,
188 ARRAY_SIZE(exp_bias_qmenu) / 2 - 1,
190 v4l2_ctrl_new_std_menu_items(&foo->ctrl_handler, &foo_ctrl_ops,
191 V4L2_CID_TEST_PATTERN, ARRAY_SIZE(test_pattern) - 1, 0,
194 if (foo->ctrl_handler.error) {
195 int err = foo->ctrl_handler.error;
197 v4l2_ctrl_handler_free(&foo->ctrl_handler);
217 integer menu control with driver-specific items in the menu. It differs
219 takes as the last argument an array of signed 64-bit integers that form an
231 set ctrl_handler->error to the error code. If ctrl_handler->error was already
243 .. code-block:: c
245 v4l2_ctrl_handler_setup(&foo->ctrl_handler);
254 .. code-block:: c
262 .. code-block:: c
266 struct foo *state = container_of(ctrl->handler, struct foo, ctrl_handler);
268 switch (ctrl->id) {
270 write_reg(0x123, ctrl->val);
273 write_reg(0x456, ctrl->val);
294 Inheriting Sub-device Controls
295 ------------------------------
297 When a sub-device is registered with a V4L2 driver by calling
310 ------------------------
315 .. code-block:: c
327 .. code-block:: c
340 .. code-block:: c
342 &ctrl->val == ctrl->p_new.p_s32
343 &ctrl->cur.val == ctrl->p_cur.p_s32
345 For all other types use ctrl->p_cur.p<something>. Basically the val
350 ctrl->maximum + 1, and are always 0-terminated.
361 strength read-out that changes continuously. In that case you will need to
364 .. code-block:: c
368 switch (ctrl->id) {
370 ctrl->val = read_reg(0x123);
376 controls that need to implement g_volatile_ctrl are read-only controls. If they
382 .. code-block:: c
384 ctrl = v4l2_ctrl_new_std(&sd->ctrl_handler, ...);
386 ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE;
403 .. code-block:: c
414 .. code-block:: c
416 mutex_lock(&state->ctrl_handler.lock);
417 pr_info("String value is '%s'\n", ctrl1->p_cur.p_char);
418 pr_info("Integer value is '%s'\n", ctrl2->cur.val);
419 mutex_unlock(&state->ctrl_handler.lock);
423 -------------
427 .. code-block:: c
436 implementation where you can return -EINVAL if a certain menu item is not
451 ---------------
455 .. code-block:: c
467 ctrl = v4l2_ctrl_new_custom(&foo->ctrl_handler, &ctrl_filter, NULL);
469 The last argument is the priv pointer which can be set to driver-specific
479 ---------------------------
497 will return -EBUSY if an attempt is made to set this control. The
503 ----------------
509 .. code-block:: c
519 state->audio_cluster[AUDIO_CL_VOLUME] =
520 v4l2_ctrl_new_std(&state->ctrl_handler, ...);
521 state->audio_cluster[AUDIO_CL_MUTE] =
522 v4l2_ctrl_new_std(&state->ctrl_handler, ...);
523 v4l2_ctrl_cluster(ARRAY_SIZE(state->audio_cluster), state->audio_cluster);
533 .. code-block:: c
537 struct foo *state = container_of(ctrl->handler, struct foo, ctrl_handler);
539 switch (ctrl->id) {
541 struct v4l2_ctrl *mute = ctrl->cluster[AUDIO_CL_MUTE];
543 write_reg(0x123, mute->val ? 0 : ctrl->val);
547 write_reg(0x456, ctrl->val);
555 .. code-block:: c
557 ctrl == ctrl->cluster[AUDIO_CL_VOLUME] == state->audio_cluster[AUDIO_CL_VOLUME]
558 ctrl->cluster[AUDIO_CL_MUTE] == state->audio_cluster[AUDIO_CL_MUTE]
563 .. code-block:: c
575 .. code-block:: c
577 state->volume = v4l2_ctrl_new_std(&state->ctrl_handler, ...);
578 state->mute = v4l2_ctrl_new_std(&state->ctrl_handler, ...);
579 v4l2_ctrl_cluster(2, &state->volume);
581 And in foo_s_ctrl you can use these pointers directly: state->mute->val.
605 Handling autogain/gain-type Controls with Auto Clusters
606 -------------------------------------------------------
608 A common type of control cluster is one that handles 'auto-foo/foo'-type
621 called while in manual mode). In addition just before switching to manual mode
622 the current values as determined by the auto mode are copied as the new manual
625 Finally the V4L2_CTRL_FLAG_UPDATE should be set for the auto control since
631 .. code-block:: c
638 last argument will optionally set V4L2_CTRL_FLAG_VOLATILE for the non-auto controls.
641 determined by the auto mode (e.g. if autogain is on, the hardware doesn't allow
644 The first control of the cluster is assumed to be the 'auto' control.
651 -------------------------
661 --------------------------------------------
675 manually to add the subdev's control handler (sd->ctrl_handler) to the desired
686 .. code-block:: c
700 .. code-block:: c
709 .. code-block:: c
720 ----------------
730 .. code-block:: c
734 volume = v4l2_ctrl_find(sd->ctrl_handler, V4L2_CID_AUDIO_VOLUME);
739 .. code-block:: c
748 .. code-block:: c
761 -------------------------------
765 have low-level controls that make sense for some advanced embedded system, but
766 not when it is used in consumer-level hardware. In that case you want to keep
767 those low-level controls local to the subdev. You can do this by simply
770 .. code-block:: c
782 ctrl = v4l2_ctrl_new_custom(&foo->ctrl_handler, &ctrl_private, NULL);
788 ----------------------------------
801 -----------------------
804 from a sub-device driver changes. You can set a notify callback by calling
807 .. code-block:: c
821 ---------------------------------------
823 .. kernel-doc:: include/media/v4l2-ctrls.h