linux/drivers/media/v4l2-core/v4l2-ctrls.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3    V4L2 controls framework implementation.
   4
   5    Copyright (C) 2010  Hans Verkuil <hverkuil@xs4all.nl>
   6
   7 */
   8
   9#define pr_fmt(fmt) "v4l2-ctrls: " fmt
  10
  11#include <linux/ctype.h>
  12#include <linux/export.h>
  13#include <linux/mm.h>
  14#include <linux/slab.h>
  15#include <media/v4l2-ctrls.h>
  16#include <media/v4l2-dev.h>
  17#include <media/v4l2-device.h>
  18#include <media/v4l2-event.h>
  19#include <media/v4l2-fwnode.h>
  20#include <media/v4l2-ioctl.h>
  21
  22#define dprintk(vdev, fmt, arg...) do {                                 \
  23        if (!WARN_ON(!(vdev)) && ((vdev)->dev_debug & V4L2_DEV_DEBUG_CTRL)) \
  24                printk(KERN_DEBUG pr_fmt("%s: %s: " fmt),               \
  25                       __func__, video_device_node_name(vdev), ##arg);  \
  26} while (0)
  27
  28#define has_op(master, op) \
  29        (master->ops && master->ops->op)
  30#define call_op(master, op) \
  31        (has_op(master, op) ? master->ops->op(master) : 0)
  32
  33static const union v4l2_ctrl_ptr ptr_null;
  34
  35/* Internal temporary helper struct, one for each v4l2_ext_control */
  36struct v4l2_ctrl_helper {
  37        /* Pointer to the control reference of the master control */
  38        struct v4l2_ctrl_ref *mref;
  39        /* The control ref corresponding to the v4l2_ext_control ID field. */
  40        struct v4l2_ctrl_ref *ref;
  41        /* v4l2_ext_control index of the next control belonging to the
  42           same cluster, or 0 if there isn't any. */
  43        u32 next;
  44};
  45
  46/* Small helper function to determine if the autocluster is set to manual
  47   mode. */
  48static bool is_cur_manual(const struct v4l2_ctrl *master)
  49{
  50        return master->is_auto && master->cur.val == master->manual_mode_value;
  51}
  52
  53/* Same as above, but this checks the against the new value instead of the
  54   current value. */
  55static bool is_new_manual(const struct v4l2_ctrl *master)
  56{
  57        return master->is_auto && master->val == master->manual_mode_value;
  58}
  59
  60/* Returns NULL or a character pointer array containing the menu for
  61   the given control ID. The pointer array ends with a NULL pointer.
  62   An empty string signifies a menu entry that is invalid. This allows
  63   drivers to disable certain options if it is not supported. */
  64const char * const *v4l2_ctrl_get_menu(u32 id)
  65{
  66        static const char * const mpeg_audio_sampling_freq[] = {
  67                "44.1 kHz",
  68                "48 kHz",
  69                "32 kHz",
  70                NULL
  71        };
  72        static const char * const mpeg_audio_encoding[] = {
  73                "MPEG-1/2 Layer I",
  74                "MPEG-1/2 Layer II",
  75                "MPEG-1/2 Layer III",
  76                "MPEG-2/4 AAC",
  77                "AC-3",
  78                NULL
  79        };
  80        static const char * const mpeg_audio_l1_bitrate[] = {
  81                "32 kbps",
  82                "64 kbps",
  83                "96 kbps",
  84                "128 kbps",
  85                "160 kbps",
  86                "192 kbps",
  87                "224 kbps",
  88                "256 kbps",
  89                "288 kbps",
  90                "320 kbps",
  91                "352 kbps",
  92                "384 kbps",
  93                "416 kbps",
  94                "448 kbps",
  95                NULL
  96        };
  97        static const char * const mpeg_audio_l2_bitrate[] = {
  98                "32 kbps",
  99                "48 kbps",
 100                "56 kbps",
 101                "64 kbps",
 102                "80 kbps",
 103                "96 kbps",
 104                "112 kbps",
 105                "128 kbps",
 106                "160 kbps",
 107                "192 kbps",
 108                "224 kbps",
 109                "256 kbps",
 110                "320 kbps",
 111                "384 kbps",
 112                NULL
 113        };
 114        static const char * const mpeg_audio_l3_bitrate[] = {
 115                "32 kbps",
 116                "40 kbps",
 117                "48 kbps",
 118                "56 kbps",
 119                "64 kbps",
 120                "80 kbps",
 121                "96 kbps",
 122                "112 kbps",
 123                "128 kbps",
 124                "160 kbps",
 125                "192 kbps",
 126                "224 kbps",
 127                "256 kbps",
 128                "320 kbps",
 129                NULL
 130        };
 131        static const char * const mpeg_audio_ac3_bitrate[] = {
 132                "32 kbps",
 133                "40 kbps",
 134                "48 kbps",
 135                "56 kbps",
 136                "64 kbps",
 137                "80 kbps",
 138                "96 kbps",
 139                "112 kbps",
 140                "128 kbps",
 141                "160 kbps",
 142                "192 kbps",
 143                "224 kbps",
 144                "256 kbps",
 145                "320 kbps",
 146                "384 kbps",
 147                "448 kbps",
 148                "512 kbps",
 149                "576 kbps",
 150                "640 kbps",
 151                NULL
 152        };
 153        static const char * const mpeg_audio_mode[] = {
 154                "Stereo",
 155                "Joint Stereo",
 156                "Dual",
 157                "Mono",
 158                NULL
 159        };
 160        static const char * const mpeg_audio_mode_extension[] = {
 161                "Bound 4",
 162                "Bound 8",
 163                "Bound 12",
 164                "Bound 16",
 165                NULL
 166        };
 167        static const char * const mpeg_audio_emphasis[] = {
 168                "No Emphasis",
 169                "50/15 us",
 170                "CCITT J17",
 171                NULL
 172        };
 173        static const char * const mpeg_audio_crc[] = {
 174                "No CRC",
 175                "16-bit CRC",
 176                NULL
 177        };
 178        static const char * const mpeg_audio_dec_playback[] = {
 179                "Auto",
 180                "Stereo",
 181                "Left",
 182                "Right",
 183                "Mono",
 184                "Swapped Stereo",
 185                NULL
 186        };
 187        static const char * const mpeg_video_encoding[] = {
 188                "MPEG-1",
 189                "MPEG-2",
 190                "MPEG-4 AVC",
 191                NULL
 192        };
 193        static const char * const mpeg_video_aspect[] = {
 194                "1x1",
 195                "4x3",
 196                "16x9",
 197                "2.21x1",
 198                NULL
 199        };
 200        static const char * const mpeg_video_bitrate_mode[] = {
 201                "Variable Bitrate",
 202                "Constant Bitrate",
 203                NULL
 204        };
 205        static const char * const mpeg_stream_type[] = {
 206                "MPEG-2 Program Stream",
 207                "MPEG-2 Transport Stream",
 208                "MPEG-1 System Stream",
 209                "MPEG-2 DVD-compatible Stream",
 210                "MPEG-1 VCD-compatible Stream",
 211                "MPEG-2 SVCD-compatible Stream",
 212                NULL
 213        };
 214        static const char * const mpeg_stream_vbi_fmt[] = {
 215                "No VBI",
 216                "Private Packet, IVTV Format",
 217                NULL
 218        };
 219        static const char * const camera_power_line_frequency[] = {
 220                "Disabled",
 221                "50 Hz",
 222                "60 Hz",
 223                "Auto",
 224                NULL
 225        };
 226        static const char * const camera_exposure_auto[] = {
 227                "Auto Mode",
 228                "Manual Mode",
 229                "Shutter Priority Mode",
 230                "Aperture Priority Mode",
 231                NULL
 232        };
 233        static const char * const camera_exposure_metering[] = {
 234                "Average",
 235                "Center Weighted",
 236                "Spot",
 237                "Matrix",
 238                NULL
 239        };
 240        static const char * const camera_auto_focus_range[] = {
 241                "Auto",
 242                "Normal",
 243                "Macro",
 244                "Infinity",
 245                NULL
 246        };
 247        static const char * const colorfx[] = {
 248                "None",
 249                "Black & White",
 250                "Sepia",
 251                "Negative",
 252                "Emboss",
 253                "Sketch",
 254                "Sky Blue",
 255                "Grass Green",
 256                "Skin Whiten",
 257                "Vivid",
 258                "Aqua",
 259                "Art Freeze",
 260                "Silhouette",
 261                "Solarization",
 262                "Antique",
 263                "Set Cb/Cr",
 264                NULL
 265        };
 266        static const char * const auto_n_preset_white_balance[] = {
 267                "Manual",
 268                "Auto",
 269                "Incandescent",
 270                "Fluorescent",
 271                "Fluorescent H",
 272                "Horizon",
 273                "Daylight",
 274                "Flash",
 275                "Cloudy",
 276                "Shade",
 277                NULL,
 278        };
 279        static const char * const camera_iso_sensitivity_auto[] = {
 280                "Manual",
 281                "Auto",
 282                NULL
 283        };
 284        static const char * const scene_mode[] = {
 285                "None",
 286                "Backlight",
 287                "Beach/Snow",
 288                "Candle Light",
 289                "Dusk/Dawn",
 290                "Fall Colors",
 291                "Fireworks",
 292                "Landscape",
 293                "Night",
 294                "Party/Indoor",
 295                "Portrait",
 296                "Sports",
 297                "Sunset",
 298                "Text",
 299                NULL
 300        };
 301        static const char * const tune_emphasis[] = {
 302                "None",
 303                "50 Microseconds",
 304                "75 Microseconds",
 305                NULL,
 306        };
 307        static const char * const header_mode[] = {
 308                "Separate Buffer",
 309                "Joined With 1st Frame",
 310                NULL,
 311        };
 312        static const char * const multi_slice[] = {
 313                "Single",
 314                "Max Macroblocks",
 315                "Max Bytes",
 316                NULL,
 317        };
 318        static const char * const entropy_mode[] = {
 319                "CAVLC",
 320                "CABAC",
 321                NULL,
 322        };
 323        static const char * const mpeg_h264_level[] = {
 324                "1",
 325                "1b",
 326                "1.1",
 327                "1.2",
 328                "1.3",
 329                "2",
 330                "2.1",
 331                "2.2",
 332                "3",
 333                "3.1",
 334                "3.2",
 335                "4",
 336                "4.1",
 337                "4.2",
 338                "5",
 339                "5.1",
 340                "5.2",
 341                "6.0",
 342                "6.1",
 343                "6.2",
 344                NULL,
 345        };
 346        static const char * const h264_loop_filter[] = {
 347                "Enabled",
 348                "Disabled",
 349                "Disabled at Slice Boundary",
 350                NULL,
 351        };
 352        static const char * const h264_profile[] = {
 353                "Baseline",
 354                "Constrained Baseline",
 355                "Main",
 356                "Extended",
 357                "High",
 358                "High 10",
 359                "High 422",
 360                "High 444 Predictive",
 361                "High 10 Intra",
 362                "High 422 Intra",
 363                "High 444 Intra",
 364                "CAVLC 444 Intra",
 365                "Scalable Baseline",
 366                "Scalable High",
 367                "Scalable High Intra",
 368                "Stereo High",
 369                "Multiview High",
 370                "Constrained High",
 371                NULL,
 372        };
 373        static const char * const vui_sar_idc[] = {
 374                "Unspecified",
 375                "1:1",
 376                "12:11",
 377                "10:11",
 378                "16:11",
 379                "40:33",
 380                "24:11",
 381                "20:11",
 382                "32:11",
 383                "80:33",
 384                "18:11",
 385                "15:11",
 386                "64:33",
 387                "160:99",
 388                "4:3",
 389                "3:2",
 390                "2:1",
 391                "Extended SAR",
 392                NULL,
 393        };
 394        static const char * const h264_fp_arrangement_type[] = {
 395                "Checkerboard",
 396                "Column",
 397                "Row",
 398                "Side by Side",
 399                "Top Bottom",
 400                "Temporal",
 401                NULL,
 402        };
 403        static const char * const h264_fmo_map_type[] = {
 404                "Interleaved Slices",
 405                "Scattered Slices",
 406                "Foreground with Leftover",
 407                "Box Out",
 408                "Raster Scan",
 409                "Wipe Scan",
 410                "Explicit",
 411                NULL,
 412        };
 413        static const char * const h264_decode_mode[] = {
 414                "Slice-Based",
 415                "Frame-Based",
 416                NULL,
 417        };
 418        static const char * const h264_start_code[] = {
 419                "No Start Code",
 420                "Annex B Start Code",
 421                NULL,
 422        };
 423        static const char * const mpeg_mpeg2_level[] = {
 424                "Low",
 425                "Main",
 426                "High 1440",
 427                "High",
 428                NULL,
 429        };
 430        static const char * const mpeg2_profile[] = {
 431                "Simple",
 432                "Main",
 433                "SNR Scalable",
 434                "Spatially Scalable",
 435                "High",
 436                NULL,
 437        };
 438        static const char * const mpeg_mpeg4_level[] = {
 439                "0",
 440                "0b",
 441                "1",
 442                "2",
 443                "3",
 444                "3b",
 445                "4",
 446                "5",
 447                NULL,
 448        };
 449        static const char * const mpeg4_profile[] = {
 450                "Simple",
 451                "Advanced Simple",
 452                "Core",
 453                "Simple Scalable",
 454                "Advanced Coding Efficiency",
 455                NULL,
 456        };
 457
 458        static const char * const vpx_golden_frame_sel[] = {
 459                "Use Previous Frame",
 460                "Use Previous Specific Frame",
 461                NULL,
 462        };
 463        static const char * const vp8_profile[] = {
 464                "0",
 465                "1",
 466                "2",
 467                "3",
 468                NULL,
 469        };
 470        static const char * const vp9_profile[] = {
 471                "0",
 472                "1",
 473                "2",
 474                "3",
 475                NULL,
 476        };
 477
 478        static const char * const flash_led_mode[] = {
 479                "Off",
 480                "Flash",
 481                "Torch",
 482                NULL,
 483        };
 484        static const char * const flash_strobe_source[] = {
 485                "Software",
 486                "External",
 487                NULL,
 488        };
 489
 490        static const char * const jpeg_chroma_subsampling[] = {
 491                "4:4:4",
 492                "4:2:2",
 493                "4:2:0",
 494                "4:1:1",
 495                "4:1:0",
 496                "Gray",
 497                NULL,
 498        };
 499        static const char * const dv_tx_mode[] = {
 500                "DVI-D",
 501                "HDMI",
 502                NULL,
 503        };
 504        static const char * const dv_rgb_range[] = {
 505                "Automatic",
 506                "RGB Limited Range (16-235)",
 507                "RGB Full Range (0-255)",
 508                NULL,
 509        };
 510        static const char * const dv_it_content_type[] = {
 511                "Graphics",
 512                "Photo",
 513                "Cinema",
 514                "Game",
 515                "No IT Content",
 516                NULL,
 517        };
 518        static const char * const detect_md_mode[] = {
 519                "Disabled",
 520                "Global",
 521                "Threshold Grid",
 522                "Region Grid",
 523                NULL,
 524        };
 525
 526        static const char * const hevc_profile[] = {
 527                "Main",
 528                "Main Still Picture",
 529                "Main 10",
 530                NULL,
 531        };
 532        static const char * const hevc_level[] = {
 533                "1",
 534                "2",
 535                "2.1",
 536                "3",
 537                "3.1",
 538                "4",
 539                "4.1",
 540                "5",
 541                "5.1",
 542                "5.2",
 543                "6",
 544                "6.1",
 545                "6.2",
 546                NULL,
 547        };
 548        static const char * const hevc_hierarchial_coding_type[] = {
 549                "B",
 550                "P",
 551                NULL,
 552        };
 553        static const char * const hevc_refresh_type[] = {
 554                "None",
 555                "CRA",
 556                "IDR",
 557                NULL,
 558        };
 559        static const char * const hevc_size_of_length_field[] = {
 560                "0",
 561                "1",
 562                "2",
 563                "4",
 564                NULL,
 565        };
 566        static const char * const hevc_tier[] = {
 567                "Main",
 568                "High",
 569                NULL,
 570        };
 571        static const char * const hevc_loop_filter_mode[] = {
 572                "Disabled",
 573                "Enabled",
 574                "Disabled at slice boundary",
 575                "NULL",
 576        };
 577        static const char * const hevc_decode_mode[] = {
 578                "Slice-Based",
 579                "Frame-Based",
 580                NULL,
 581        };
 582        static const char * const hevc_start_code[] = {
 583                "No Start Code",
 584                "Annex B Start Code",
 585                NULL,
 586        };
 587        static const char * const camera_orientation[] = {
 588                "Front",
 589                "Back",
 590                "External",
 591                NULL,
 592        };
 593
 594        switch (id) {
 595        case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
 596                return mpeg_audio_sampling_freq;
 597        case V4L2_CID_MPEG_AUDIO_ENCODING:
 598                return mpeg_audio_encoding;
 599        case V4L2_CID_MPEG_AUDIO_L1_BITRATE:
 600                return mpeg_audio_l1_bitrate;
 601        case V4L2_CID_MPEG_AUDIO_L2_BITRATE:
 602                return mpeg_audio_l2_bitrate;
 603        case V4L2_CID_MPEG_AUDIO_L3_BITRATE:
 604                return mpeg_audio_l3_bitrate;
 605        case V4L2_CID_MPEG_AUDIO_AC3_BITRATE:
 606                return mpeg_audio_ac3_bitrate;
 607        case V4L2_CID_MPEG_AUDIO_MODE:
 608                return mpeg_audio_mode;
 609        case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION:
 610                return mpeg_audio_mode_extension;
 611        case V4L2_CID_MPEG_AUDIO_EMPHASIS:
 612                return mpeg_audio_emphasis;
 613        case V4L2_CID_MPEG_AUDIO_CRC:
 614                return mpeg_audio_crc;
 615        case V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK:
 616        case V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK:
 617                return mpeg_audio_dec_playback;
 618        case V4L2_CID_MPEG_VIDEO_ENCODING:
 619                return mpeg_video_encoding;
 620        case V4L2_CID_MPEG_VIDEO_ASPECT:
 621                return mpeg_video_aspect;
 622        case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
 623                return mpeg_video_bitrate_mode;
 624        case V4L2_CID_MPEG_STREAM_TYPE:
 625                return mpeg_stream_type;
 626        case V4L2_CID_MPEG_STREAM_VBI_FMT:
 627                return mpeg_stream_vbi_fmt;
 628        case V4L2_CID_POWER_LINE_FREQUENCY:
 629                return camera_power_line_frequency;
 630        case V4L2_CID_EXPOSURE_AUTO:
 631                return camera_exposure_auto;
 632        case V4L2_CID_EXPOSURE_METERING:
 633                return camera_exposure_metering;
 634        case V4L2_CID_AUTO_FOCUS_RANGE:
 635                return camera_auto_focus_range;
 636        case V4L2_CID_COLORFX:
 637                return colorfx;
 638        case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE:
 639                return auto_n_preset_white_balance;
 640        case V4L2_CID_ISO_SENSITIVITY_AUTO:
 641                return camera_iso_sensitivity_auto;
 642        case V4L2_CID_SCENE_MODE:
 643                return scene_mode;
 644        case V4L2_CID_TUNE_PREEMPHASIS:
 645                return tune_emphasis;
 646        case V4L2_CID_TUNE_DEEMPHASIS:
 647                return tune_emphasis;
 648        case V4L2_CID_FLASH_LED_MODE:
 649                return flash_led_mode;
 650        case V4L2_CID_FLASH_STROBE_SOURCE:
 651                return flash_strobe_source;
 652        case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
 653                return header_mode;
 654        case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:
 655                return multi_slice;
 656        case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
 657                return entropy_mode;
 658        case V4L2_CID_MPEG_VIDEO_H264_LEVEL:
 659                return mpeg_h264_level;
 660        case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE:
 661                return h264_loop_filter;
 662        case V4L2_CID_MPEG_VIDEO_H264_PROFILE:
 663                return h264_profile;
 664        case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC:
 665                return vui_sar_idc;
 666        case V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE:
 667                return h264_fp_arrangement_type;
 668        case V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE:
 669                return h264_fmo_map_type;
 670        case V4L2_CID_MPEG_VIDEO_H264_DECODE_MODE:
 671                return h264_decode_mode;
 672        case V4L2_CID_MPEG_VIDEO_H264_START_CODE:
 673                return h264_start_code;
 674        case V4L2_CID_MPEG_VIDEO_MPEG2_LEVEL:
 675                return mpeg_mpeg2_level;
 676        case V4L2_CID_MPEG_VIDEO_MPEG2_PROFILE:
 677                return mpeg2_profile;
 678        case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL:
 679                return mpeg_mpeg4_level;
 680        case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE:
 681                return mpeg4_profile;
 682        case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL:
 683                return vpx_golden_frame_sel;
 684        case V4L2_CID_MPEG_VIDEO_VP8_PROFILE:
 685                return vp8_profile;
 686        case V4L2_CID_MPEG_VIDEO_VP9_PROFILE:
 687                return vp9_profile;
 688        case V4L2_CID_JPEG_CHROMA_SUBSAMPLING:
 689                return jpeg_chroma_subsampling;
 690        case V4L2_CID_DV_TX_MODE:
 691                return dv_tx_mode;
 692        case V4L2_CID_DV_TX_RGB_RANGE:
 693        case V4L2_CID_DV_RX_RGB_RANGE:
 694                return dv_rgb_range;
 695        case V4L2_CID_DV_TX_IT_CONTENT_TYPE:
 696        case V4L2_CID_DV_RX_IT_CONTENT_TYPE:
 697                return dv_it_content_type;
 698        case V4L2_CID_DETECT_MD_MODE:
 699                return detect_md_mode;
 700        case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE:
 701                return hevc_profile;
 702        case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL:
 703                return hevc_level;
 704        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE:
 705                return hevc_hierarchial_coding_type;
 706        case V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE:
 707                return hevc_refresh_type;
 708        case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:
 709                return hevc_size_of_length_field;
 710        case V4L2_CID_MPEG_VIDEO_HEVC_TIER:
 711                return hevc_tier;
 712        case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
 713                return hevc_loop_filter_mode;
 714        case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:
 715                return hevc_decode_mode;
 716        case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:
 717                return hevc_start_code;
 718        case V4L2_CID_CAMERA_ORIENTATION:
 719                return camera_orientation;
 720        default:
 721                return NULL;
 722        }
 723}
 724EXPORT_SYMBOL(v4l2_ctrl_get_menu);
 725
 726#define __v4l2_qmenu_int_len(arr, len) ({ *(len) = ARRAY_SIZE(arr); arr; })
 727/*
 728 * Returns NULL or an s64 type array containing the menu for given
 729 * control ID. The total number of the menu items is returned in @len.
 730 */
 731const s64 *v4l2_ctrl_get_int_menu(u32 id, u32 *len)
 732{
 733        static const s64 qmenu_int_vpx_num_partitions[] = {
 734                1, 2, 4, 8,
 735        };
 736
 737        static const s64 qmenu_int_vpx_num_ref_frames[] = {
 738                1, 2, 3,
 739        };
 740
 741        switch (id) {
 742        case V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS:
 743                return __v4l2_qmenu_int_len(qmenu_int_vpx_num_partitions, len);
 744        case V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES:
 745                return __v4l2_qmenu_int_len(qmenu_int_vpx_num_ref_frames, len);
 746        default:
 747                *len = 0;
 748                return NULL;
 749        }
 750}
 751EXPORT_SYMBOL(v4l2_ctrl_get_int_menu);
 752
 753/* Return the control name. */
 754const char *v4l2_ctrl_get_name(u32 id)
 755{
 756        switch (id) {
 757        /* USER controls */
 758        /* Keep the order of the 'case's the same as in v4l2-controls.h! */
 759        case V4L2_CID_USER_CLASS:               return "User Controls";
 760        case V4L2_CID_BRIGHTNESS:               return "Brightness";
 761        case V4L2_CID_CONTRAST:                 return "Contrast";
 762        case V4L2_CID_SATURATION:               return "Saturation";
 763        case V4L2_CID_HUE:                      return "Hue";
 764        case V4L2_CID_AUDIO_VOLUME:             return "Volume";
 765        case V4L2_CID_AUDIO_BALANCE:            return "Balance";
 766        case V4L2_CID_AUDIO_BASS:               return "Bass";
 767        case V4L2_CID_AUDIO_TREBLE:             return "Treble";
 768        case V4L2_CID_AUDIO_MUTE:               return "Mute";
 769        case V4L2_CID_AUDIO_LOUDNESS:           return "Loudness";
 770        case V4L2_CID_BLACK_LEVEL:              return "Black Level";
 771        case V4L2_CID_AUTO_WHITE_BALANCE:       return "White Balance, Automatic";
 772        case V4L2_CID_DO_WHITE_BALANCE:         return "Do White Balance";
 773        case V4L2_CID_RED_BALANCE:              return "Red Balance";
 774        case V4L2_CID_BLUE_BALANCE:             return "Blue Balance";
 775        case V4L2_CID_GAMMA:                    return "Gamma";
 776        case V4L2_CID_EXPOSURE:                 return "Exposure";
 777        case V4L2_CID_AUTOGAIN:                 return "Gain, Automatic";
 778        case V4L2_CID_GAIN:                     return "Gain";
 779        case V4L2_CID_HFLIP:                    return "Horizontal Flip";
 780        case V4L2_CID_VFLIP:                    return "Vertical Flip";
 781        case V4L2_CID_POWER_LINE_FREQUENCY:     return "Power Line Frequency";
 782        case V4L2_CID_HUE_AUTO:                 return "Hue, Automatic";
 783        case V4L2_CID_WHITE_BALANCE_TEMPERATURE: return "White Balance Temperature";
 784        case V4L2_CID_SHARPNESS:                return "Sharpness";
 785        case V4L2_CID_BACKLIGHT_COMPENSATION:   return "Backlight Compensation";
 786        case V4L2_CID_CHROMA_AGC:               return "Chroma AGC";
 787        case V4L2_CID_COLOR_KILLER:             return "Color Killer";
 788        case V4L2_CID_COLORFX:                  return "Color Effects";
 789        case V4L2_CID_AUTOBRIGHTNESS:           return "Brightness, Automatic";
 790        case V4L2_CID_BAND_STOP_FILTER:         return "Band-Stop Filter";
 791        case V4L2_CID_ROTATE:                   return "Rotate";
 792        case V4L2_CID_BG_COLOR:                 return "Background Color";
 793        case V4L2_CID_CHROMA_GAIN:              return "Chroma Gain";
 794        case V4L2_CID_ILLUMINATORS_1:           return "Illuminator 1";
 795        case V4L2_CID_ILLUMINATORS_2:           return "Illuminator 2";
 796        case V4L2_CID_MIN_BUFFERS_FOR_CAPTURE:  return "Min Number of Capture Buffers";
 797        case V4L2_CID_MIN_BUFFERS_FOR_OUTPUT:   return "Min Number of Output Buffers";
 798        case V4L2_CID_ALPHA_COMPONENT:          return "Alpha Component";
 799        case V4L2_CID_COLORFX_CBCR:             return "Color Effects, CbCr";
 800
 801        /* Codec controls */
 802        /* The MPEG controls are applicable to all codec controls
 803         * and the 'MPEG' part of the define is historical */
 804        /* Keep the order of the 'case's the same as in videodev2.h! */
 805        case V4L2_CID_MPEG_CLASS:               return "Codec Controls";
 806        case V4L2_CID_MPEG_STREAM_TYPE:         return "Stream Type";
 807        case V4L2_CID_MPEG_STREAM_PID_PMT:      return "Stream PMT Program ID";
 808        case V4L2_CID_MPEG_STREAM_PID_AUDIO:    return "Stream Audio Program ID";
 809        case V4L2_CID_MPEG_STREAM_PID_VIDEO:    return "Stream Video Program ID";
 810        case V4L2_CID_MPEG_STREAM_PID_PCR:      return "Stream PCR Program ID";
 811        case V4L2_CID_MPEG_STREAM_PES_ID_AUDIO: return "Stream PES Audio ID";
 812        case V4L2_CID_MPEG_STREAM_PES_ID_VIDEO: return "Stream PES Video ID";
 813        case V4L2_CID_MPEG_STREAM_VBI_FMT:      return "Stream VBI Format";
 814        case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ: return "Audio Sampling Frequency";
 815        case V4L2_CID_MPEG_AUDIO_ENCODING:      return "Audio Encoding";
 816        case V4L2_CID_MPEG_AUDIO_L1_BITRATE:    return "Audio Layer I Bitrate";
 817        case V4L2_CID_MPEG_AUDIO_L2_BITRATE:    return "Audio Layer II Bitrate";
 818        case V4L2_CID_MPEG_AUDIO_L3_BITRATE:    return "Audio Layer III Bitrate";
 819        case V4L2_CID_MPEG_AUDIO_MODE:          return "Audio Stereo Mode";
 820        case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION: return "Audio Stereo Mode Extension";
 821        case V4L2_CID_MPEG_AUDIO_EMPHASIS:      return "Audio Emphasis";
 822        case V4L2_CID_MPEG_AUDIO_CRC:           return "Audio CRC";
 823        case V4L2_CID_MPEG_AUDIO_MUTE:          return "Audio Mute";
 824        case V4L2_CID_MPEG_AUDIO_AAC_BITRATE:   return "Audio AAC Bitrate";
 825        case V4L2_CID_MPEG_AUDIO_AC3_BITRATE:   return "Audio AC-3 Bitrate";
 826        case V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK:  return "Audio Playback";
 827        case V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK: return "Audio Multilingual Playback";
 828        case V4L2_CID_MPEG_VIDEO_ENCODING:      return "Video Encoding";
 829        case V4L2_CID_MPEG_VIDEO_ASPECT:        return "Video Aspect";
 830        case V4L2_CID_MPEG_VIDEO_B_FRAMES:      return "Video B Frames";
 831        case V4L2_CID_MPEG_VIDEO_GOP_SIZE:      return "Video GOP Size";
 832        case V4L2_CID_MPEG_VIDEO_GOP_CLOSURE:   return "Video GOP Closure";
 833        case V4L2_CID_MPEG_VIDEO_PULLDOWN:      return "Video Pulldown";
 834        case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:  return "Video Bitrate Mode";
 835        case V4L2_CID_MPEG_VIDEO_BITRATE:       return "Video Bitrate";
 836        case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK:  return "Video Peak Bitrate";
 837        case V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION: return "Video Temporal Decimation";
 838        case V4L2_CID_MPEG_VIDEO_MUTE:          return "Video Mute";
 839        case V4L2_CID_MPEG_VIDEO_MUTE_YUV:      return "Video Mute YUV";
 840        case V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE:       return "Decoder Slice Interface";
 841        case V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER:  return "MPEG4 Loop Filter Enable";
 842        case V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB:       return "Number of Intra Refresh MBs";
 843        case V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE:               return "Frame Level Rate Control Enable";
 844        case V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE:                  return "H264 MB Level Rate Control";
 845        case V4L2_CID_MPEG_VIDEO_HEADER_MODE:                   return "Sequence Header Mode";
 846        case V4L2_CID_MPEG_VIDEO_MAX_REF_PIC:                   return "Max Number of Reference Pics";
 847        case V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP:               return "H263 I-Frame QP Value";
 848        case V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP:               return "H263 P-Frame QP Value";
 849        case V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP:               return "H263 B-Frame QP Value";
 850        case V4L2_CID_MPEG_VIDEO_H263_MIN_QP:                   return "H263 Minimum QP Value";
 851        case V4L2_CID_MPEG_VIDEO_H263_MAX_QP:                   return "H263 Maximum QP Value";
 852        case V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP:               return "H264 I-Frame QP Value";
 853        case V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP:               return "H264 P-Frame QP Value";
 854        case V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP:               return "H264 B-Frame QP Value";
 855        case V4L2_CID_MPEG_VIDEO_H264_MAX_QP:                   return "H264 Maximum QP Value";
 856        case V4L2_CID_MPEG_VIDEO_H264_MIN_QP:                   return "H264 Minimum QP Value";
 857        case V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM:            return "H264 8x8 Transform Enable";
 858        case V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE:                 return "H264 CPB Buffer Size";
 859        case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:             return "H264 Entropy Mode";
 860        case V4L2_CID_MPEG_VIDEO_H264_I_PERIOD:                 return "H264 I-Frame Period";
 861        case V4L2_CID_MPEG_VIDEO_H264_LEVEL:                    return "H264 Level";
 862        case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA:        return "H264 Loop Filter Alpha Offset";
 863        case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA:         return "H264 Loop Filter Beta Offset";
 864        case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE:         return "H264 Loop Filter Mode";
 865        case V4L2_CID_MPEG_VIDEO_H264_PROFILE:                  return "H264 Profile";
 866        case V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT:       return "Vertical Size of SAR";
 867        case V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH:        return "Horizontal Size of SAR";
 868        case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE:           return "Aspect Ratio VUI Enable";
 869        case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC:              return "VUI Aspect Ratio IDC";
 870        case V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING:        return "H264 Enable Frame Packing SEI";
 871        case V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0:   return "H264 Set Curr. Frame as Frame0";
 872        case V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE:  return "H264 FP Arrangement Type";
 873        case V4L2_CID_MPEG_VIDEO_H264_FMO:                      return "H264 Flexible MB Ordering";
 874        case V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE:             return "H264 Map Type for FMO";
 875        case V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP:          return "H264 FMO Number of Slice Groups";
 876        case V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION:     return "H264 FMO Direction of Change";
 877        case V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE:          return "H264 FMO Size of 1st Slice Grp";
 878        case V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH:           return "H264 FMO No. of Consecutive MBs";
 879        case V4L2_CID_MPEG_VIDEO_H264_ASO:                      return "H264 Arbitrary Slice Ordering";
 880        case V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER:          return "H264 ASO Slice Order";
 881        case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING:      return "Enable H264 Hierarchical Coding";
 882        case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE: return "H264 Hierarchical Coding Type";
 883        case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER:return "H264 Number of HC Layers";
 884        case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP:
 885                                                                return "H264 Set QP Value for HC Layers";
 886        case V4L2_CID_MPEG_VIDEO_H264_CONSTRAINED_INTRA_PREDICTION:
 887                                                                return "H264 Constrained Intra Pred";
 888        case V4L2_CID_MPEG_VIDEO_H264_CHROMA_QP_INDEX_OFFSET:   return "H264 Chroma QP Index Offset";
 889        case V4L2_CID_MPEG_VIDEO_H264_I_FRAME_MIN_QP:           return "H264 I-Frame Minimum QP Value";
 890        case V4L2_CID_MPEG_VIDEO_H264_I_FRAME_MAX_QP:           return "H264 I-Frame Maximum QP Value";
 891        case V4L2_CID_MPEG_VIDEO_H264_P_FRAME_MIN_QP:           return "H264 P-Frame Minimum QP Value";
 892        case V4L2_CID_MPEG_VIDEO_H264_P_FRAME_MAX_QP:           return "H264 P-Frame Maximum QP Value";
 893        case V4L2_CID_MPEG_VIDEO_H264_SPS:                      return "H264 Sequence Parameter Set";
 894        case V4L2_CID_MPEG_VIDEO_H264_PPS:                      return "H264 Picture Parameter Set";
 895        case V4L2_CID_MPEG_VIDEO_H264_SCALING_MATRIX:           return "H264 Scaling Matrix";
 896        case V4L2_CID_MPEG_VIDEO_H264_SLICE_PARAMS:             return "H264 Slice Parameters";
 897        case V4L2_CID_MPEG_VIDEO_H264_DECODE_PARAMS:            return "H264 Decode Parameters";
 898        case V4L2_CID_MPEG_VIDEO_H264_DECODE_MODE:              return "H264 Decode Mode";
 899        case V4L2_CID_MPEG_VIDEO_H264_START_CODE:               return "H264 Start Code";
 900        case V4L2_CID_MPEG_VIDEO_MPEG2_LEVEL:                   return "MPEG2 Level";
 901        case V4L2_CID_MPEG_VIDEO_MPEG2_PROFILE:                 return "MPEG2 Profile";
 902        case V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP:              return "MPEG4 I-Frame QP Value";
 903        case V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP:              return "MPEG4 P-Frame QP Value";
 904        case V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP:              return "MPEG4 B-Frame QP Value";
 905        case V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP:                  return "MPEG4 Minimum QP Value";
 906        case V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP:                  return "MPEG4 Maximum QP Value";
 907        case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL:                   return "MPEG4 Level";
 908        case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE:                 return "MPEG4 Profile";
 909        case V4L2_CID_MPEG_VIDEO_MPEG4_QPEL:                    return "Quarter Pixel Search Enable";
 910        case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES:         return "Maximum Bytes in a Slice";
 911        case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB:            return "Number of MBs in a Slice";
 912        case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:              return "Slice Partitioning Method";
 913        case V4L2_CID_MPEG_VIDEO_VBV_SIZE:                      return "VBV Buffer Size";
 914        case V4L2_CID_MPEG_VIDEO_DEC_PTS:                       return "Video Decoder PTS";
 915        case V4L2_CID_MPEG_VIDEO_DEC_FRAME:                     return "Video Decoder Frame Count";
 916        case V4L2_CID_MPEG_VIDEO_VBV_DELAY:                     return "Initial Delay for VBV Control";
 917        case V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE:             return "Horizontal MV Search Range";
 918        case V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE:             return "Vertical MV Search Range";
 919        case V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER:             return "Repeat Sequence Header";
 920        case V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME:               return "Force Key Frame";
 921        case V4L2_CID_MPEG_VIDEO_MPEG2_SLICE_PARAMS:            return "MPEG-2 Slice Parameters";
 922        case V4L2_CID_MPEG_VIDEO_MPEG2_QUANTIZATION:            return "MPEG-2 Quantization Matrices";
 923        case V4L2_CID_MPEG_VIDEO_FWHT_PARAMS:                   return "FWHT Stateless Parameters";
 924        case V4L2_CID_FWHT_I_FRAME_QP:                          return "FWHT I-Frame QP Value";
 925        case V4L2_CID_FWHT_P_FRAME_QP:                          return "FWHT P-Frame QP Value";
 926
 927        /* VPX controls */
 928        case V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS:            return "VPX Number of Partitions";
 929        case V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4:           return "VPX Intra Mode Decision Disable";
 930        case V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES:            return "VPX No. of Refs for P Frame";
 931        case V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL:              return "VPX Loop Filter Level Range";
 932        case V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS:          return "VPX Deblocking Effect Control";
 933        case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD:   return "VPX Golden Frame Refresh Period";
 934        case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL:          return "VPX Golden Frame Indicator";
 935        case V4L2_CID_MPEG_VIDEO_VPX_MIN_QP:                    return "VPX Minimum QP Value";
 936        case V4L2_CID_MPEG_VIDEO_VPX_MAX_QP:                    return "VPX Maximum QP Value";
 937        case V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP:                return "VPX I-Frame QP Value";
 938        case V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP:                return "VPX P-Frame QP Value";
 939        case V4L2_CID_MPEG_VIDEO_VP8_PROFILE:                   return "VP8 Profile";
 940        case V4L2_CID_MPEG_VIDEO_VP9_PROFILE:                   return "VP9 Profile";
 941        case V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER:              return "VP8 Frame Header";
 942
 943        /* HEVC controls */
 944        case V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP:               return "HEVC I-Frame QP Value";
 945        case V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP:               return "HEVC P-Frame QP Value";
 946        case V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP:               return "HEVC B-Frame QP Value";
 947        case V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP:                   return "HEVC Minimum QP Value";
 948        case V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP:                   return "HEVC Maximum QP Value";
 949        case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE:                  return "HEVC Profile";
 950        case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL:                    return "HEVC Level";
 951        case V4L2_CID_MPEG_VIDEO_HEVC_TIER:                     return "HEVC Tier";
 952        case V4L2_CID_MPEG_VIDEO_HEVC_FRAME_RATE_RESOLUTION:    return "HEVC Frame Rate Resolution";
 953        case V4L2_CID_MPEG_VIDEO_HEVC_MAX_PARTITION_DEPTH:      return "HEVC Maximum Coding Unit Depth";
 954        case V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE:             return "HEVC Refresh Type";
 955        case V4L2_CID_MPEG_VIDEO_HEVC_CONST_INTRA_PRED:         return "HEVC Constant Intra Prediction";
 956        case V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU:              return "HEVC Lossless Encoding";
 957        case V4L2_CID_MPEG_VIDEO_HEVC_WAVEFRONT:                return "HEVC Wavefront";
 958        case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:         return "HEVC Loop Filter";
 959        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP:                  return "HEVC QP Values";
 960        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE:         return "HEVC Hierarchical Coding Type";
 961        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER:        return "HEVC Hierarchical Coding Layer";
 962        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP:        return "HEVC Hierarchical Layer 0 QP";
 963        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP:        return "HEVC Hierarchical Layer 1 QP";
 964        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP:        return "HEVC Hierarchical Layer 2 QP";
 965        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP:        return "HEVC Hierarchical Layer 3 QP";
 966        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP:        return "HEVC Hierarchical Layer 4 QP";
 967        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP:        return "HEVC Hierarchical Layer 5 QP";
 968        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_QP:        return "HEVC Hierarchical Layer 6 QP";
 969        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR:        return "HEVC Hierarchical Lay 0 BitRate";
 970        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR:        return "HEVC Hierarchical Lay 1 BitRate";
 971        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR:        return "HEVC Hierarchical Lay 2 BitRate";
 972        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR:        return "HEVC Hierarchical Lay 3 BitRate";
 973        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR:        return "HEVC Hierarchical Lay 4 BitRate";
 974        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR:        return "HEVC Hierarchical Lay 5 BitRate";
 975        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR:        return "HEVC Hierarchical Lay 6 BitRate";
 976        case V4L2_CID_MPEG_VIDEO_HEVC_GENERAL_PB:               return "HEVC General PB";
 977        case V4L2_CID_MPEG_VIDEO_HEVC_TEMPORAL_ID:              return "HEVC Temporal ID";
 978        case V4L2_CID_MPEG_VIDEO_HEVC_STRONG_SMOOTHING:         return "HEVC Strong Intra Smoothing";
 979        case V4L2_CID_MPEG_VIDEO_HEVC_INTRA_PU_SPLIT:           return "HEVC Intra PU Split";
 980        case V4L2_CID_MPEG_VIDEO_HEVC_TMV_PREDICTION:           return "HEVC TMV Prediction";
 981        case V4L2_CID_MPEG_VIDEO_HEVC_MAX_NUM_MERGE_MV_MINUS1:  return "HEVC Max Num of Candidate MVs";
 982        case V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE:        return "HEVC ENC Without Startcode";
 983        case V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_PERIOD:           return "HEVC Num of I-Frame b/w 2 IDR";
 984        case V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2:      return "HEVC Loop Filter Beta Offset";
 985        case V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2:        return "HEVC Loop Filter TC Offset";
 986        case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:     return "HEVC Size of Length Field";
 987        case V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES:        return "Reference Frames for a P-Frame";
 988        case V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR:         return "Prepend SPS and PPS to IDR";
 989        case V4L2_CID_MPEG_VIDEO_HEVC_SPS:                      return "HEVC Sequence Parameter Set";
 990        case V4L2_CID_MPEG_VIDEO_HEVC_PPS:                      return "HEVC Picture Parameter Set";
 991        case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:             return "HEVC Slice Parameters";
 992        case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:              return "HEVC Decode Mode";
 993        case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:               return "HEVC Start Code";
 994
 995        /* CAMERA controls */
 996        /* Keep the order of the 'case's the same as in v4l2-controls.h! */
 997        case V4L2_CID_CAMERA_CLASS:             return "Camera Controls";
 998        case V4L2_CID_EXPOSURE_AUTO:            return "Auto Exposure";
 999        case V4L2_CID_EXPOSURE_ABSOLUTE:        return "Exposure Time, Absolute";
1000        case V4L2_CID_EXPOSURE_AUTO_PRIORITY:   return "Exposure, Dynamic Framerate";
1001        case V4L2_CID_PAN_RELATIVE:             return "Pan, Relative";
1002        case V4L2_CID_TILT_RELATIVE:            return "Tilt, Relative";
1003        case V4L2_CID_PAN_RESET:                return "Pan, Reset";
1004        case V4L2_CID_TILT_RESET:               return "Tilt, Reset";
1005        case V4L2_CID_PAN_ABSOLUTE:             return "Pan, Absolute";
1006        case V4L2_CID_TILT_ABSOLUTE:            return "Tilt, Absolute";
1007        case V4L2_CID_FOCUS_ABSOLUTE:           return "Focus, Absolute";
1008        case V4L2_CID_FOCUS_RELATIVE:           return "Focus, Relative";
1009        case V4L2_CID_FOCUS_AUTO:               return "Focus, Automatic Continuous";
1010        case V4L2_CID_ZOOM_ABSOLUTE:            return "Zoom, Absolute";
1011        case V4L2_CID_ZOOM_RELATIVE:            return "Zoom, Relative";
1012        case V4L2_CID_ZOOM_CONTINUOUS:          return "Zoom, Continuous";
1013        case V4L2_CID_PRIVACY:                  return "Privacy";
1014        case V4L2_CID_IRIS_ABSOLUTE:            return "Iris, Absolute";
1015        case V4L2_CID_IRIS_RELATIVE:            return "Iris, Relative";
1016        case V4L2_CID_AUTO_EXPOSURE_BIAS:       return "Auto Exposure, Bias";
1017        case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE: return "White Balance, Auto & Preset";
1018        case V4L2_CID_WIDE_DYNAMIC_RANGE:       return "Wide Dynamic Range";
1019        case V4L2_CID_IMAGE_STABILIZATION:      return "Image Stabilization";
1020        case V4L2_CID_ISO_SENSITIVITY:          return "ISO Sensitivity";
1021        case V4L2_CID_ISO_SENSITIVITY_AUTO:     return "ISO Sensitivity, Auto";
1022        case V4L2_CID_EXPOSURE_METERING:        return "Exposure, Metering Mode";
1023        case V4L2_CID_SCENE_MODE:               return "Scene Mode";
1024        case V4L2_CID_3A_LOCK:                  return "3A Lock";
1025        case V4L2_CID_AUTO_FOCUS_START:         return "Auto Focus, Start";
1026        case V4L2_CID_AUTO_FOCUS_STOP:          return "Auto Focus, Stop";
1027        case V4L2_CID_AUTO_FOCUS_STATUS:        return "Auto Focus, Status";
1028        case V4L2_CID_AUTO_FOCUS_RANGE:         return "Auto Focus, Range";
1029        case V4L2_CID_PAN_SPEED:                return "Pan, Speed";
1030        case V4L2_CID_TILT_SPEED:               return "Tilt, Speed";
1031        case V4L2_CID_UNIT_CELL_SIZE:           return "Unit Cell Size";
1032        case V4L2_CID_CAMERA_ORIENTATION:       return "Camera Orientation";
1033        case V4L2_CID_CAMERA_SENSOR_ROTATION:   return "Camera Sensor Rotation";
1034
1035        /* FM Radio Modulator controls */
1036        /* Keep the order of the 'case's the same as in v4l2-controls.h! */
1037        case V4L2_CID_FM_TX_CLASS:              return "FM Radio Modulator Controls";
1038        case V4L2_CID_RDS_TX_DEVIATION:         return "RDS Signal Deviation";
1039        case V4L2_CID_RDS_TX_PI:                return "RDS Program ID";
1040        case V4L2_CID_RDS_TX_PTY:               return "RDS Program Type";
1041        case V4L2_CID_RDS_TX_PS_NAME:           return "RDS PS Name";
1042        case V4L2_CID_RDS_TX_RADIO_TEXT:        return "RDS Radio Text";
1043        case V4L2_CID_RDS_TX_MONO_STEREO:       return "RDS Stereo";
1044        case V4L2_CID_RDS_TX_ARTIFICIAL_HEAD:   return "RDS Artificial Head";
1045        case V4L2_CID_RDS_TX_COMPRESSED:        return "RDS Compressed";
1046        case V4L2_CID_RDS_TX_DYNAMIC_PTY:       return "RDS Dynamic PTY";
1047        case V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT: return "RDS Traffic Announcement";
1048        case V4L2_CID_RDS_TX_TRAFFIC_PROGRAM:   return "RDS Traffic Program";
1049        case V4L2_CID_RDS_TX_MUSIC_SPEECH:      return "RDS Music";
1050        case V4L2_CID_RDS_TX_ALT_FREQS_ENABLE:  return "RDS Enable Alt Frequencies";
1051        case V4L2_CID_RDS_TX_ALT_FREQS:         return "RDS Alternate Frequencies";
1052        case V4L2_CID_AUDIO_LIMITER_ENABLED:    return "Audio Limiter Feature Enabled";
1053        case V4L2_CID_AUDIO_LIMITER_RELEASE_TIME: return "Audio Limiter Release Time";
1054        case V4L2_CID_AUDIO_LIMITER_DEVIATION:  return "Audio Limiter Deviation";
1055        case V4L2_CID_AUDIO_COMPRESSION_ENABLED: return "Audio Compression Enabled";
1056        case V4L2_CID_AUDIO_COMPRESSION_GAIN:   return "Audio Compression Gain";
1057        case V4L2_CID_AUDIO_COMPRESSION_THRESHOLD: return "Audio Compression Threshold";
1058        case V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME: return "Audio Compression Attack Time";
1059        case V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME: return "Audio Compression Release Time";
1060        case V4L2_CID_PILOT_TONE_ENABLED:       return "Pilot Tone Feature Enabled";
1061        case V4L2_CID_PILOT_TONE_DEVIATION:     return "Pilot Tone Deviation";
1062        case V4L2_CID_PILOT_TONE_FREQUENCY:     return "Pilot Tone Frequency";
1063        case V4L2_CID_TUNE_PREEMPHASIS:         return "Pre-Emphasis";
1064        case V4L2_CID_TUNE_POWER_LEVEL:         return "Tune Power Level";
1065        case V4L2_CID_TUNE_ANTENNA_CAPACITOR:   return "Tune Antenna Capacitor";
1066
1067        /* Flash controls */
1068        /* Keep the order of the 'case's the same as in v4l2-controls.h! */
1069        case V4L2_CID_FLASH_CLASS:              return "Flash Controls";
1070        case V4L2_CID_FLASH_LED_MODE:           return "LED Mode";
1071        case V4L2_CID_FLASH_STROBE_SOURCE:      return "Strobe Source";
1072        case V4L2_CID_FLASH_STROBE:             return "Strobe";
1073        case V4L2_CID_FLASH_STROBE_STOP:        return "Stop Strobe";
1074        case V4L2_CID_FLASH_STROBE_STATUS:      return "Strobe Status";
1075        case V4L2_CID_FLASH_TIMEOUT:            return "Strobe Timeout";
1076        case V4L2_CID_FLASH_INTENSITY:          return "Intensity, Flash Mode";
1077        case V4L2_CID_FLASH_TORCH_INTENSITY:    return "Intensity, Torch Mode";
1078        case V4L2_CID_FLASH_INDICATOR_INTENSITY: return "Intensity, Indicator";
1079        case V4L2_CID_FLASH_FAULT:              return "Faults";
1080        case V4L2_CID_FLASH_CHARGE:             return "Charge";
1081        case V4L2_CID_FLASH_READY:              return "Ready to Strobe";
1082
1083        /* JPEG encoder controls */
1084        /* Keep the order of the 'case's the same as in v4l2-controls.h! */
1085        case V4L2_CID_JPEG_CLASS:               return "JPEG Compression Controls";
1086        case V4L2_CID_JPEG_CHROMA_SUBSAMPLING:  return "Chroma Subsampling";
1087        case V4L2_CID_JPEG_RESTART_INTERVAL:    return "Restart Interval";
1088        case V4L2_CID_JPEG_COMPRESSION_QUALITY: return "Compression Quality";
1089        case V4L2_CID_JPEG_ACTIVE_MARKER:       return "Active Markers";
1090
1091        /* Image source controls */
1092        /* Keep the order of the 'case's the same as in v4l2-controls.h! */
1093        case V4L2_CID_IMAGE_SOURCE_CLASS:       return "Image Source Controls";
1094        case V4L2_CID_VBLANK:                   return "Vertical Blanking";
1095        case V4L2_CID_HBLANK:                   return "Horizontal Blanking";
1096        case V4L2_CID_ANALOGUE_GAIN:            return "Analogue Gain";
1097        case V4L2_CID_TEST_PATTERN_RED:         return "Red Pixel Value";
1098        case V4L2_CID_TEST_PATTERN_GREENR:      return "Green (Red) Pixel Value";
1099        case V4L2_CID_TEST_PATTERN_BLUE:        return "Blue Pixel Value";
1100        case V4L2_CID_TEST_PATTERN_GREENB:      return "Green (Blue) Pixel Value";
1101
1102        /* Image processing controls */
1103        /* Keep the order of the 'case's the same as in v4l2-controls.h! */
1104        case V4L2_CID_IMAGE_PROC_CLASS:         return "Image Processing Controls";
1105        case V4L2_CID_LINK_FREQ:                return "Link Frequency";
1106        case V4L2_CID_PIXEL_RATE:               return "Pixel Rate";
1107        case V4L2_CID_TEST_PATTERN:             return "Test Pattern";
1108        case V4L2_CID_DEINTERLACING_MODE:       return "Deinterlacing Mode";
1109        case V4L2_CID_DIGITAL_GAIN:             return "Digital Gain";
1110
1111        /* DV controls */
1112        /* Keep the order of the 'case's the same as in v4l2-controls.h! */
1113        case V4L2_CID_DV_CLASS:                 return "Digital Video Controls";
1114        case V4L2_CID_DV_TX_HOTPLUG:            return "Hotplug Present";
1115        case V4L2_CID_DV_TX_RXSENSE:            return "RxSense Present";
1116        case V4L2_CID_DV_TX_EDID_PRESENT:       return "EDID Present";
1117        case V4L2_CID_DV_TX_MODE:               return "Transmit Mode";
1118        case V4L2_CID_DV_TX_RGB_RANGE:          return "Tx RGB Quantization Range";
1119        case V4L2_CID_DV_TX_IT_CONTENT_TYPE:    return "Tx IT Content Type";
1120        case V4L2_CID_DV_RX_POWER_PRESENT:      return "Power Present";
1121        case V4L2_CID_DV_RX_RGB_RANGE:          return "Rx RGB Quantization Range";
1122        case V4L2_CID_DV_RX_IT_CONTENT_TYPE:    return "Rx IT Content Type";
1123
1124        case V4L2_CID_FM_RX_CLASS:              return "FM Radio Receiver Controls";
1125        case V4L2_CID_TUNE_DEEMPHASIS:          return "De-Emphasis";
1126        case V4L2_CID_RDS_RECEPTION:            return "RDS Reception";
1127        case V4L2_CID_RF_TUNER_CLASS:           return "RF Tuner Controls";
1128        case V4L2_CID_RF_TUNER_RF_GAIN:         return "RF Gain";
1129        case V4L2_CID_RF_TUNER_LNA_GAIN_AUTO:   return "LNA Gain, Auto";
1130        case V4L2_CID_RF_TUNER_LNA_GAIN:        return "LNA Gain";
1131        case V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO: return "Mixer Gain, Auto";
1132        case V4L2_CID_RF_TUNER_MIXER_GAIN:      return "Mixer Gain";
1133        case V4L2_CID_RF_TUNER_IF_GAIN_AUTO:    return "IF Gain, Auto";
1134        case V4L2_CID_RF_TUNER_IF_GAIN:         return "IF Gain";
1135        case V4L2_CID_RF_TUNER_BANDWIDTH_AUTO:  return "Bandwidth, Auto";
1136        case V4L2_CID_RF_TUNER_BANDWIDTH:       return "Bandwidth";
1137        case V4L2_CID_RF_TUNER_PLL_LOCK:        return "PLL Lock";
1138        case V4L2_CID_RDS_RX_PTY:               return "RDS Program Type";
1139        case V4L2_CID_RDS_RX_PS_NAME:           return "RDS PS Name";
1140        case V4L2_CID_RDS_RX_RADIO_TEXT:        return "RDS Radio Text";
1141        case V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT: return "RDS Traffic Announcement";
1142        case V4L2_CID_RDS_RX_TRAFFIC_PROGRAM:   return "RDS Traffic Program";
1143        case V4L2_CID_RDS_RX_MUSIC_SPEECH:      return "RDS Music";
1144
1145        /* Detection controls */
1146        /* Keep the order of the 'case's the same as in v4l2-controls.h! */
1147        case V4L2_CID_DETECT_CLASS:             return "Detection Controls";
1148        case V4L2_CID_DETECT_MD_MODE:           return "Motion Detection Mode";
1149        case V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD: return "MD Global Threshold";
1150        case V4L2_CID_DETECT_MD_THRESHOLD_GRID: return "MD Threshold Grid";
1151        case V4L2_CID_DETECT_MD_REGION_GRID:    return "MD Region Grid";
1152        default:
1153                return NULL;
1154        }
1155}
1156EXPORT_SYMBOL(v4l2_ctrl_get_name);
1157
1158void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
1159                    s64 *min, s64 *max, u64 *step, s64 *def, u32 *flags)
1160{
1161        *name = v4l2_ctrl_get_name(id);
1162        *flags = 0;
1163
1164        switch (id) {
1165        case V4L2_CID_AUDIO_MUTE:
1166        case V4L2_CID_AUDIO_LOUDNESS:
1167        case V4L2_CID_AUTO_WHITE_BALANCE:
1168        case V4L2_CID_AUTOGAIN:
1169        case V4L2_CID_HFLIP:
1170        case V4L2_CID_VFLIP:
1171        case V4L2_CID_HUE_AUTO:
1172        case V4L2_CID_CHROMA_AGC:
1173        case V4L2_CID_COLOR_KILLER:
1174        case V4L2_CID_AUTOBRIGHTNESS:
1175        case V4L2_CID_MPEG_AUDIO_MUTE:
1176        case V4L2_CID_MPEG_VIDEO_MUTE:
1177        case V4L2_CID_MPEG_VIDEO_GOP_CLOSURE:
1178        case V4L2_CID_MPEG_VIDEO_PULLDOWN:
1179        case V4L2_CID_EXPOSURE_AUTO_PRIORITY:
1180        case V4L2_CID_FOCUS_AUTO:
1181        case V4L2_CID_PRIVACY:
1182        case V4L2_CID_AUDIO_LIMITER_ENABLED:
1183        case V4L2_CID_AUDIO_COMPRESSION_ENABLED:
1184        case V4L2_CID_PILOT_TONE_ENABLED:
1185        case V4L2_CID_ILLUMINATORS_1:
1186        case V4L2_CID_ILLUMINATORS_2:
1187        case V4L2_CID_FLASH_STROBE_STATUS:
1188        case V4L2_CID_FLASH_CHARGE:
1189        case V4L2_CID_FLASH_READY:
1190        case V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER:
1191        case V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE:
1192        case V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE:
1193        case V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE:
1194        case V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM:
1195        case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE:
1196        case V4L2_CID_MPEG_VIDEO_MPEG4_QPEL:
1197        case V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER:
1198        case V4L2_CID_WIDE_DYNAMIC_RANGE:
1199        case V4L2_CID_IMAGE_STABILIZATION:
1200        case V4L2_CID_RDS_RECEPTION:
1201        case V4L2_CID_RF_TUNER_LNA_GAIN_AUTO:
1202        case V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO:
1203        case V4L2_CID_RF_TUNER_IF_GAIN_AUTO:
1204        case V4L2_CID_RF_TUNER_BANDWIDTH_AUTO:
1205        case V4L2_CID_RF_TUNER_PLL_LOCK:
1206        case V4L2_CID_RDS_TX_MONO_STEREO:
1207        case V4L2_CID_RDS_TX_ARTIFICIAL_HEAD:
1208        case V4L2_CID_RDS_TX_COMPRESSED:
1209        case V4L2_CID_RDS_TX_DYNAMIC_PTY:
1210        case V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT:
1211        case V4L2_CID_RDS_TX_TRAFFIC_PROGRAM:
1212        case V4L2_CID_RDS_TX_MUSIC_SPEECH:
1213        case V4L2_CID_RDS_TX_ALT_FREQS_ENABLE:
1214        case V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT:
1215        case V4L2_CID_RDS_RX_TRAFFIC_PROGRAM:
1216        case V4L2_CID_RDS_RX_MUSIC_SPEECH:
1217                *type = V4L2_CTRL_TYPE_BOOLEAN;
1218                *min = 0;
1219                *max = *step = 1;
1220                break;
1221        case V4L2_CID_ROTATE:
1222                *type = V4L2_CTRL_TYPE_INTEGER;
1223                *flags |= V4L2_CTRL_FLAG_MODIFY_LAYOUT;
1224                break;
1225        case V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE:
1226        case V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE:
1227                *type = V4L2_CTRL_TYPE_INTEGER;
1228                break;
1229        case V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME:
1230        case V4L2_CID_PAN_RESET:
1231        case V4L2_CID_TILT_RESET:
1232        case V4L2_CID_FLASH_STROBE:
1233        case V4L2_CID_FLASH_STROBE_STOP:
1234        case V4L2_CID_AUTO_FOCUS_START:
1235        case V4L2_CID_AUTO_FOCUS_STOP:
1236        case V4L2_CID_DO_WHITE_BALANCE:
1237                *type = V4L2_CTRL_TYPE_BUTTON;
1238                *flags |= V4L2_CTRL_FLAG_WRITE_ONLY |
1239                          V4L2_CTRL_FLAG_EXECUTE_ON_WRITE;
1240                *min = *max = *step = *def = 0;
1241                break;
1242        case V4L2_CID_POWER_LINE_FREQUENCY:
1243        case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
1244        case V4L2_CID_MPEG_AUDIO_ENCODING:
1245        case V4L2_CID_MPEG_AUDIO_L1_BITRATE:
1246        case V4L2_CID_MPEG_AUDIO_L2_BITRATE:
1247        case V4L2_CID_MPEG_AUDIO_L3_BITRATE:
1248        case V4L2_CID_MPEG_AUDIO_AC3_BITRATE:
1249        case V4L2_CID_MPEG_AUDIO_MODE:
1250        case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION:
1251        case V4L2_CID_MPEG_AUDIO_EMPHASIS:
1252        case V4L2_CID_MPEG_AUDIO_CRC:
1253        case V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK:
1254        case V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK:
1255        case V4L2_CID_MPEG_VIDEO_ENCODING:
1256        case V4L2_CID_MPEG_VIDEO_ASPECT:
1257        case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
1258        case V4L2_CID_MPEG_STREAM_TYPE:
1259        case V4L2_CID_MPEG_STREAM_VBI_FMT:
1260        case V4L2_CID_EXPOSURE_AUTO:
1261        case V4L2_CID_AUTO_FOCUS_RANGE:
1262        case V4L2_CID_COLORFX:
1263        case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE:
1264        case V4L2_CID_TUNE_PREEMPHASIS:
1265        case V4L2_CID_FLASH_LED_MODE:
1266        case V4L2_CID_FLASH_STROBE_SOURCE:
1267        case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
1268        case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:
1269        case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
1270        case V4L2_CID_MPEG_VIDEO_H264_LEVEL:
1271        case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE:
1272        case V4L2_CID_MPEG_VIDEO_H264_PROFILE:
1273        case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC:
1274        case V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE:
1275        case V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE:
1276        case V4L2_CID_MPEG_VIDEO_H264_DECODE_MODE:
1277        case V4L2_CID_MPEG_VIDEO_H264_START_CODE:
1278        case V4L2_CID_MPEG_VIDEO_MPEG2_LEVEL:
1279        case V4L2_CID_MPEG_VIDEO_MPEG2_PROFILE:
1280        case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL:
1281        case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE:
1282        case V4L2_CID_JPEG_CHROMA_SUBSAMPLING:
1283        case V4L2_CID_ISO_SENSITIVITY_AUTO:
1284        case V4L2_CID_EXPOSURE_METERING:
1285        case V4L2_CID_SCENE_MODE:
1286        case V4L2_CID_DV_TX_MODE:
1287        case V4L2_CID_DV_TX_RGB_RANGE:
1288        case V4L2_CID_DV_TX_IT_CONTENT_TYPE:
1289        case V4L2_CID_DV_RX_RGB_RANGE:
1290        case V4L2_CID_DV_RX_IT_CONTENT_TYPE:
1291        case V4L2_CID_TEST_PATTERN:
1292        case V4L2_CID_DEINTERLACING_MODE:
1293        case V4L2_CID_TUNE_DEEMPHASIS:
1294        case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL:
1295        case V4L2_CID_MPEG_VIDEO_VP8_PROFILE:
1296        case V4L2_CID_MPEG_VIDEO_VP9_PROFILE:
1297        case V4L2_CID_DETECT_MD_MODE:
1298        case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE:
1299        case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL:
1300        case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE:
1301        case V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE:
1302        case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:
1303        case V4L2_CID_MPEG_VIDEO_HEVC_TIER:
1304        case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
1305        case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:
1306        case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:
1307        case V4L2_CID_CAMERA_ORIENTATION:
1308                *type = V4L2_CTRL_TYPE_MENU;
1309                break;
1310        case V4L2_CID_LINK_FREQ:
1311                *type = V4L2_CTRL_TYPE_INTEGER_MENU;
1312                break;
1313        case V4L2_CID_RDS_TX_PS_NAME:
1314        case V4L2_CID_RDS_TX_RADIO_TEXT:
1315        case V4L2_CID_RDS_RX_PS_NAME:
1316        case V4L2_CID_RDS_RX_RADIO_TEXT:
1317                *type = V4L2_CTRL_TYPE_STRING;
1318                break;
1319        case V4L2_CID_ISO_SENSITIVITY:
1320        case V4L2_CID_AUTO_EXPOSURE_BIAS:
1321        case V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS:
1322        case V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES:
1323                *type = V4L2_CTRL_TYPE_INTEGER_MENU;
1324                break;
1325        case V4L2_CID_USER_CLASS:
1326        case V4L2_CID_CAMERA_CLASS:
1327        case V4L2_CID_MPEG_CLASS:
1328        case V4L2_CID_FM_TX_CLASS:
1329        case V4L2_CID_FLASH_CLASS:
1330        case V4L2_CID_JPEG_CLASS:
1331        case V4L2_CID_IMAGE_SOURCE_CLASS:
1332        case V4L2_CID_IMAGE_PROC_CLASS:
1333        case V4L2_CID_DV_CLASS:
1334        case V4L2_CID_FM_RX_CLASS:
1335        case V4L2_CID_RF_TUNER_CLASS:
1336        case V4L2_CID_DETECT_CLASS:
1337                *type = V4L2_CTRL_TYPE_CTRL_CLASS;
1338                /* You can neither read not write these */
1339                *flags |= V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_WRITE_ONLY;
1340                *min = *max = *step = *def = 0;
1341                break;
1342        case V4L2_CID_BG_COLOR:
1343                *type = V4L2_CTRL_TYPE_INTEGER;
1344                *step = 1;
1345                *min = 0;
1346                /* Max is calculated as RGB888 that is 2^24 */
1347                *max = 0xFFFFFF;
1348                break;
1349        case V4L2_CID_FLASH_FAULT:
1350        case V4L2_CID_JPEG_ACTIVE_MARKER:
1351        case V4L2_CID_3A_LOCK:
1352        case V4L2_CID_AUTO_FOCUS_STATUS:
1353        case V4L2_CID_DV_TX_HOTPLUG:
1354        case V4L2_CID_DV_TX_RXSENSE:
1355        case V4L2_CID_DV_TX_EDID_PRESENT:
1356        case V4L2_CID_DV_RX_POWER_PRESENT:
1357                *type = V4L2_CTRL_TYPE_BITMASK;
1358                break;
1359        case V4L2_CID_MIN_BUFFERS_FOR_CAPTURE:
1360        case V4L2_CID_MIN_BUFFERS_FOR_OUTPUT:
1361                *type = V4L2_CTRL_TYPE_INTEGER;
1362                *flags |= V4L2_CTRL_FLAG_READ_ONLY;
1363                break;
1364        case V4L2_CID_MPEG_VIDEO_DEC_PTS:
1365                *type = V4L2_CTRL_TYPE_INTEGER64;
1366                *flags |= V4L2_CTRL_FLAG_VOLATILE | V4L2_CTRL_FLAG_READ_ONLY;
1367                *min = *def = 0;
1368                *max = 0x1ffffffffLL;
1369                *step = 1;
1370                break;
1371        case V4L2_CID_MPEG_VIDEO_DEC_FRAME:
1372                *type = V4L2_CTRL_TYPE_INTEGER64;
1373                *flags |= V4L2_CTRL_FLAG_VOLATILE | V4L2_CTRL_FLAG_READ_ONLY;
1374                *min = *def = 0;
1375                *max = 0x7fffffffffffffffLL;
1376                *step = 1;
1377                break;
1378        case V4L2_CID_PIXEL_RATE:
1379                *type = V4L2_CTRL_TYPE_INTEGER64;
1380                *flags |= V4L2_CTRL_FLAG_READ_ONLY;
1381                break;
1382        case V4L2_CID_DETECT_MD_REGION_GRID:
1383                *type = V4L2_CTRL_TYPE_U8;
1384                break;
1385        case V4L2_CID_DETECT_MD_THRESHOLD_GRID:
1386                *type = V4L2_CTRL_TYPE_U16;
1387                break;
1388        case V4L2_CID_RDS_TX_ALT_FREQS:
1389                *type = V4L2_CTRL_TYPE_U32;
1390                break;
1391        case V4L2_CID_MPEG_VIDEO_MPEG2_SLICE_PARAMS:
1392                *type = V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS;
1393                break;
1394        case V4L2_CID_MPEG_VIDEO_MPEG2_QUANTIZATION:
1395                *type = V4L2_CTRL_TYPE_MPEG2_QUANTIZATION;
1396                break;
1397        case V4L2_CID_MPEG_VIDEO_FWHT_PARAMS:
1398                *type = V4L2_CTRL_TYPE_FWHT_PARAMS;
1399                break;
1400        case V4L2_CID_MPEG_VIDEO_H264_SPS:
1401                *type = V4L2_CTRL_TYPE_H264_SPS;
1402                break;
1403        case V4L2_CID_MPEG_VIDEO_H264_PPS:
1404                *type = V4L2_CTRL_TYPE_H264_PPS;
1405                break;
1406        case V4L2_CID_MPEG_VIDEO_H264_SCALING_MATRIX:
1407                *type = V4L2_CTRL_TYPE_H264_SCALING_MATRIX;
1408                break;
1409        case V4L2_CID_MPEG_VIDEO_H264_SLICE_PARAMS:
1410                *type = V4L2_CTRL_TYPE_H264_SLICE_PARAMS;
1411                break;
1412        case V4L2_CID_MPEG_VIDEO_H264_DECODE_PARAMS:
1413                *type = V4L2_CTRL_TYPE_H264_DECODE_PARAMS;
1414                break;
1415        case V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER:
1416                *type = V4L2_CTRL_TYPE_VP8_FRAME_HEADER;
1417                break;
1418        case V4L2_CID_MPEG_VIDEO_HEVC_SPS:
1419                *type = V4L2_CTRL_TYPE_HEVC_SPS;
1420                break;
1421        case V4L2_CID_MPEG_VIDEO_HEVC_PPS:
1422                *type = V4L2_CTRL_TYPE_HEVC_PPS;
1423                break;
1424        case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:
1425                *type = V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS;
1426                break;
1427        case V4L2_CID_UNIT_CELL_SIZE:
1428                *type = V4L2_CTRL_TYPE_AREA;
1429                *flags |= V4L2_CTRL_FLAG_READ_ONLY;
1430                break;
1431        default:
1432                *type = V4L2_CTRL_TYPE_INTEGER;
1433                break;
1434        }
1435        switch (id) {
1436        case V4L2_CID_MPEG_AUDIO_ENCODING:
1437        case V4L2_CID_MPEG_AUDIO_MODE:
1438        case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
1439        case V4L2_CID_MPEG_VIDEO_B_FRAMES:
1440        case V4L2_CID_MPEG_STREAM_TYPE:
1441                *flags |= V4L2_CTRL_FLAG_UPDATE;
1442                break;
1443        case V4L2_CID_AUDIO_VOLUME:
1444        case V4L2_CID_AUDIO_BALANCE:
1445        case V4L2_CID_AUDIO_BASS:
1446        case V4L2_CID_AUDIO_TREBLE:
1447        case V4L2_CID_BRIGHTNESS:
1448        case V4L2_CID_CONTRAST:
1449        case V4L2_CID_SATURATION:
1450        case V4L2_CID_HUE:
1451        case V4L2_CID_RED_BALANCE:
1452        case V4L2_CID_BLUE_BALANCE:
1453        case V4L2_CID_GAMMA:
1454        case V4L2_CID_SHARPNESS:
1455        case V4L2_CID_CHROMA_GAIN:
1456        case V4L2_CID_RDS_TX_DEVIATION:
1457        case V4L2_CID_AUDIO_LIMITER_RELEASE_TIME:
1458        case V4L2_CID_AUDIO_LIMITER_DEVIATION:
1459        case V4L2_CID_AUDIO_COMPRESSION_GAIN:
1460        case V4L2_CID_AUDIO_COMPRESSION_THRESHOLD:
1461        case V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME:
1462        case V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME:
1463        case V4L2_CID_PILOT_TONE_DEVIATION:
1464        case V4L2_CID_PILOT_TONE_FREQUENCY:
1465        case V4L2_CID_TUNE_POWER_LEVEL:
1466        case V4L2_CID_TUNE_ANTENNA_CAPACITOR:
1467        case V4L2_CID_RF_TUNER_RF_GAIN:
1468        case V4L2_CID_RF_TUNER_LNA_GAIN:
1469        case V4L2_CID_RF_TUNER_MIXER_GAIN:
1470        case V4L2_CID_RF_TUNER_IF_GAIN:
1471        case V4L2_CID_RF_TUNER_BANDWIDTH:
1472        case V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD:
1473                *flags |= V4L2_CTRL_FLAG_SLIDER;
1474                break;
1475        case V4L2_CID_PAN_RELATIVE:
1476        case V4L2_CID_TILT_RELATIVE:
1477        case V4L2_CID_FOCUS_RELATIVE:
1478        case V4L2_CID_IRIS_RELATIVE:
1479        case V4L2_CID_ZOOM_RELATIVE:
1480                *flags |= V4L2_CTRL_FLAG_WRITE_ONLY |
1481                          V4L2_CTRL_FLAG_EXECUTE_ON_WRITE;
1482                break;
1483        case V4L2_CID_FLASH_STROBE_STATUS:
1484        case V4L2_CID_AUTO_FOCUS_STATUS:
1485        case V4L2_CID_FLASH_READY:
1486        case V4L2_CID_DV_TX_HOTPLUG:
1487        case V4L2_CID_DV_TX_RXSENSE:
1488        case V4L2_CID_DV_TX_EDID_PRESENT:
1489        case V4L2_CID_DV_RX_POWER_PRESENT:
1490        case V4L2_CID_DV_RX_IT_CONTENT_TYPE:
1491        case V4L2_CID_RDS_RX_PTY:
1492        case V4L2_CID_RDS_RX_PS_NAME:
1493        case V4L2_CID_RDS_RX_RADIO_TEXT:
1494        case V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT:
1495        case V4L2_CID_RDS_RX_TRAFFIC_PROGRAM:
1496        case V4L2_CID_RDS_RX_MUSIC_SPEECH:
1497        case V4L2_CID_CAMERA_ORIENTATION:
1498        case V4L2_CID_CAMERA_SENSOR_ROTATION:
1499                *flags |= V4L2_CTRL_FLAG_READ_ONLY;
1500                break;
1501        case V4L2_CID_RF_TUNER_PLL_LOCK:
1502                *flags |= V4L2_CTRL_FLAG_VOLATILE;
1503                break;
1504        }
1505}
1506EXPORT_SYMBOL(v4l2_ctrl_fill);
1507
1508static u32 user_flags(const struct v4l2_ctrl *ctrl)
1509{
1510        u32 flags = ctrl->flags;
1511
1512        if (ctrl->is_ptr)
1513                flags |= V4L2_CTRL_FLAG_HAS_PAYLOAD;
1514
1515        return flags;
1516}
1517
1518static void fill_event(struct v4l2_event *ev, struct v4l2_ctrl *ctrl, u32 changes)
1519{
1520        memset(ev, 0, sizeof(*ev));
1521        ev->type = V4L2_EVENT_CTRL;
1522        ev->id = ctrl->id;
1523        ev->u.ctrl.changes = changes;
1524        ev->u.ctrl.type = ctrl->type;
1525        ev->u.ctrl.flags = user_flags(ctrl);
1526        if (ctrl->is_ptr)
1527                ev->u.ctrl.value64 = 0;
1528        else
1529                ev->u.ctrl.value64 = *ctrl->p_cur.p_s64;
1530        ev->u.ctrl.minimum = ctrl->minimum;
1531        ev->u.ctrl.maximum = ctrl->maximum;
1532        if (ctrl->type == V4L2_CTRL_TYPE_MENU
1533            || ctrl->type == V4L2_CTRL_TYPE_INTEGER_MENU)
1534                ev->u.ctrl.step = 1;
1535        else
1536                ev->u.ctrl.step = ctrl->step;
1537        ev->u.ctrl.default_value = ctrl->default_value;
1538}
1539
1540static void send_event(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 changes)
1541{
1542        struct v4l2_event ev;
1543        struct v4l2_subscribed_event *sev;
1544
1545        if (list_empty(&ctrl->ev_subs))
1546                return;
1547        fill_event(&ev, ctrl, changes);
1548
1549        list_for_each_entry(sev, &ctrl->ev_subs, node)
1550                if (sev->fh != fh ||
1551                    (sev->flags & V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK))
1552                        v4l2_event_queue_fh(sev->fh, &ev);
1553}
1554
1555static bool std_equal(const struct v4l2_ctrl *ctrl, u32 idx,
1556                      union v4l2_ctrl_ptr ptr1,
1557                      union v4l2_ctrl_ptr ptr2)
1558{
1559        switch (ctrl->type) {
1560        case V4L2_CTRL_TYPE_BUTTON:
1561                return false;
1562        case V4L2_CTRL_TYPE_STRING:
1563                idx *= ctrl->elem_size;
1564                /* strings are always 0-terminated */
1565                return !strcmp(ptr1.p_char + idx, ptr2.p_char + idx);
1566        case V4L2_CTRL_TYPE_INTEGER64:
1567                return ptr1.p_s64[idx] == ptr2.p_s64[idx];
1568        case V4L2_CTRL_TYPE_U8:
1569                return ptr1.p_u8[idx] == ptr2.p_u8[idx];
1570        case V4L2_CTRL_TYPE_U16:
1571                return ptr1.p_u16[idx] == ptr2.p_u16[idx];
1572        case V4L2_CTRL_TYPE_U32:
1573                return ptr1.p_u32[idx] == ptr2.p_u32[idx];
1574        default:
1575                if (ctrl->is_int)
1576                        return ptr1.p_s32[idx] == ptr2.p_s32[idx];
1577                idx *= ctrl->elem_size;
1578                return !memcmp(ptr1.p_const + idx, ptr2.p_const + idx,
1579                               ctrl->elem_size);
1580        }
1581}
1582
1583static void std_init_compound(const struct v4l2_ctrl *ctrl, u32 idx,
1584                              union v4l2_ctrl_ptr ptr)
1585{
1586        struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params;
1587        void *p = ptr.p + idx * ctrl->elem_size;
1588
1589        if (ctrl->p_def.p_const)
1590                memcpy(p, ctrl->p_def.p_const, ctrl->elem_size);
1591        else
1592                memset(p, 0, ctrl->elem_size);
1593
1594        /*
1595         * The cast is needed to get rid of a gcc warning complaining that
1596         * V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS is not part of the
1597         * v4l2_ctrl_type enum.
1598         */
1599        switch ((u32)ctrl->type) {
1600        case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS:
1601                p_mpeg2_slice_params = p;
1602                /* 4:2:0 */
1603                p_mpeg2_slice_params->sequence.chroma_format = 1;
1604                /* interlaced top field */
1605                p_mpeg2_slice_params->picture.picture_structure = 1;
1606                p_mpeg2_slice_params->picture.picture_coding_type =
1607                                        V4L2_MPEG2_PICTURE_CODING_TYPE_I;
1608                break;
1609        }
1610}
1611
1612static void std_init(const struct v4l2_ctrl *ctrl, u32 idx,
1613                     union v4l2_ctrl_ptr ptr)
1614{
1615        switch (ctrl->type) {
1616        case V4L2_CTRL_TYPE_STRING:
1617                idx *= ctrl->elem_size;
1618                memset(ptr.p_char + idx, ' ', ctrl->minimum);
1619                ptr.p_char[idx + ctrl->minimum] = '\0';
1620                break;
1621        case V4L2_CTRL_TYPE_INTEGER64:
1622                ptr.p_s64[idx] = ctrl->default_value;
1623                break;
1624        case V4L2_CTRL_TYPE_INTEGER:
1625        case V4L2_CTRL_TYPE_INTEGER_MENU:
1626        case V4L2_CTRL_TYPE_MENU:
1627        case V4L2_CTRL_TYPE_BITMASK:
1628        case V4L2_CTRL_TYPE_BOOLEAN:
1629                ptr.p_s32[idx] = ctrl->default_value;
1630                break;
1631        case V4L2_CTRL_TYPE_BUTTON:
1632        case V4L2_CTRL_TYPE_CTRL_CLASS:
1633                ptr.p_s32[idx] = 0;
1634                break;
1635        case V4L2_CTRL_TYPE_U8:
1636                ptr.p_u8[idx] = ctrl->default_value;
1637                break;
1638        case V4L2_CTRL_TYPE_U16:
1639                ptr.p_u16[idx] = ctrl->default_value;
1640                break;
1641        case V4L2_CTRL_TYPE_U32:
1642                ptr.p_u32[idx] = ctrl->default_value;
1643                break;
1644        default:
1645                std_init_compound(ctrl, idx, ptr);
1646                break;
1647        }
1648}
1649
1650static void std_log(const struct v4l2_ctrl *ctrl)
1651{
1652        union v4l2_ctrl_ptr ptr = ctrl->p_cur;
1653
1654        if (ctrl->is_array) {
1655                unsigned i;
1656
1657                for (i = 0; i < ctrl->nr_of_dims; i++)
1658                        pr_cont("[%u]", ctrl->dims[i]);
1659                pr_cont(" ");
1660        }
1661
1662        switch (ctrl->type) {
1663        case V4L2_CTRL_TYPE_INTEGER:
1664                pr_cont("%d", *ptr.p_s32);
1665                break;
1666        case V4L2_CTRL_TYPE_BOOLEAN:
1667                pr_cont("%s", *ptr.p_s32 ? "true" : "false");
1668                break;
1669        case V4L2_CTRL_TYPE_MENU:
1670                pr_cont("%s", ctrl->qmenu[*ptr.p_s32]);
1671                break;
1672        case V4L2_CTRL_TYPE_INTEGER_MENU:
1673                pr_cont("%lld", ctrl->qmenu_int[*ptr.p_s32]);
1674                break;
1675        case V4L2_CTRL_TYPE_BITMASK:
1676                pr_cont("0x%08x", *ptr.p_s32);
1677                break;
1678        case V4L2_CTRL_TYPE_INTEGER64:
1679                pr_cont("%lld", *ptr.p_s64);
1680                break;
1681        case V4L2_CTRL_TYPE_STRING:
1682                pr_cont("%s", ptr.p_char);
1683                break;
1684        case V4L2_CTRL_TYPE_U8:
1685                pr_cont("%u", (unsigned)*ptr.p_u8);
1686                break;
1687        case V4L2_CTRL_TYPE_U16:
1688                pr_cont("%u", (unsigned)*ptr.p_u16);
1689                break;
1690        case V4L2_CTRL_TYPE_U32:
1691                pr_cont("%u", (unsigned)*ptr.p_u32);
1692                break;
1693        default:
1694                pr_cont("unknown type %d", ctrl->type);
1695                break;
1696        }
1697}
1698
1699/*
1700 * Round towards the closest legal value. Be careful when we are
1701 * close to the maximum range of the control type to prevent
1702 * wrap-arounds.
1703 */
1704#define ROUND_TO_RANGE(val, offset_type, ctrl)                  \
1705({                                                              \
1706        offset_type offset;                                     \
1707        if ((ctrl)->maximum >= 0 &&                             \
1708            val >= (ctrl)->maximum - (s32)((ctrl)->step / 2))   \
1709                val = (ctrl)->maximum;                          \
1710        else                                                    \
1711                val += (s32)((ctrl)->step / 2);                 \
1712        val = clamp_t(typeof(val), val,                         \
1713                      (ctrl)->minimum, (ctrl)->maximum);        \
1714        offset = (val) - (ctrl)->minimum;                       \
1715        offset = (ctrl)->step * (offset / (u32)(ctrl)->step);   \
1716        val = (ctrl)->minimum + offset;                         \
1717        0;                                                      \
1718})
1719
1720/* Validate a new control */
1721
1722#define zero_padding(s) \
1723        memset(&(s).padding, 0, sizeof((s).padding))
1724
1725/*
1726 * Compound controls validation requires setting unused fields/flags to zero
1727 * in order to properly detect unchanged controls with std_equal's memcmp.
1728 */
1729static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
1730                                 union v4l2_ctrl_ptr ptr)
1731{
1732        struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params;
1733        struct v4l2_ctrl_vp8_frame_header *p_vp8_frame_header;
1734        struct v4l2_ctrl_hevc_sps *p_hevc_sps;
1735        struct v4l2_ctrl_hevc_pps *p_hevc_pps;
1736        struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params;
1737        struct v4l2_area *area;
1738        void *p = ptr.p + idx * ctrl->elem_size;
1739        unsigned int i;
1740
1741        switch ((u32)ctrl->type) {
1742        case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS:
1743                p_mpeg2_slice_params = p;
1744
1745                switch (p_mpeg2_slice_params->sequence.chroma_format) {
1746                case 1: /* 4:2:0 */
1747                case 2: /* 4:2:2 */
1748                case 3: /* 4:4:4 */
1749                        break;
1750                default:
1751                        return -EINVAL;
1752                }
1753
1754                switch (p_mpeg2_slice_params->picture.intra_dc_precision) {
1755                case 0: /* 8 bits */
1756                case 1: /* 9 bits */
1757                case 2: /* 10 bits */
1758                case 3: /* 11 bits */
1759                        break;
1760                default:
1761                        return -EINVAL;
1762                }
1763
1764                switch (p_mpeg2_slice_params->picture.picture_structure) {
1765                case 1: /* interlaced top field */
1766                case 2: /* interlaced bottom field */
1767                case 3: /* progressive */
1768                        break;
1769                default:
1770                        return -EINVAL;
1771                }
1772
1773                switch (p_mpeg2_slice_params->picture.picture_coding_type) {
1774                case V4L2_MPEG2_PICTURE_CODING_TYPE_I:
1775                case V4L2_MPEG2_PICTURE_CODING_TYPE_P:
1776                case V4L2_MPEG2_PICTURE_CODING_TYPE_B:
1777                        break;
1778                default:
1779                        return -EINVAL;
1780                }
1781
1782                break;
1783
1784        case V4L2_CTRL_TYPE_MPEG2_QUANTIZATION:
1785                break;
1786
1787        case V4L2_CTRL_TYPE_FWHT_PARAMS:
1788                break;
1789
1790        case V4L2_CTRL_TYPE_H264_SPS:
1791        case V4L2_CTRL_TYPE_H264_PPS:
1792        case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
1793        case V4L2_CTRL_TYPE_H264_SLICE_PARAMS:
1794        case V4L2_CTRL_TYPE_H264_DECODE_PARAMS:
1795                break;
1796
1797        case V4L2_CTRL_TYPE_VP8_FRAME_HEADER:
1798                p_vp8_frame_header = p;
1799
1800                switch (p_vp8_frame_header->num_dct_parts) {
1801                case 1:
1802                case 2:
1803                case 4:
1804                case 8:
1805                        break;
1806                default:
1807                        return -EINVAL;
1808                }
1809                zero_padding(p_vp8_frame_header->segment_header);
1810                zero_padding(p_vp8_frame_header->lf_header);
1811                zero_padding(p_vp8_frame_header->quant_header);
1812                zero_padding(p_vp8_frame_header->entropy_header);
1813                zero_padding(p_vp8_frame_header->coder_state);
1814                break;
1815
1816        case V4L2_CTRL_TYPE_HEVC_SPS:
1817                p_hevc_sps = p;
1818
1819                if (!(p_hevc_sps->flags & V4L2_HEVC_SPS_FLAG_PCM_ENABLED)) {
1820                        p_hevc_sps->pcm_sample_bit_depth_luma_minus1 = 0;
1821                        p_hevc_sps->pcm_sample_bit_depth_chroma_minus1 = 0;
1822                        p_hevc_sps->log2_min_pcm_luma_coding_block_size_minus3 = 0;
1823                        p_hevc_sps->log2_diff_max_min_pcm_luma_coding_block_size = 0;
1824                }
1825
1826                if (!(p_hevc_sps->flags &
1827                      V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT))
1828                        p_hevc_sps->num_long_term_ref_pics_sps = 0;
1829                break;
1830
1831        case V4L2_CTRL_TYPE_HEVC_PPS:
1832                p_hevc_pps = p;
1833
1834                if (!(p_hevc_pps->flags &
1835                      V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED))
1836                        p_hevc_pps->diff_cu_qp_delta_depth = 0;
1837
1838                if (!(p_hevc_pps->flags & V4L2_HEVC_PPS_FLAG_TILES_ENABLED)) {
1839                        p_hevc_pps->num_tile_columns_minus1 = 0;
1840                        p_hevc_pps->num_tile_rows_minus1 = 0;
1841                        memset(&p_hevc_pps->column_width_minus1, 0,
1842                               sizeof(p_hevc_pps->column_width_minus1));
1843                        memset(&p_hevc_pps->row_height_minus1, 0,
1844                               sizeof(p_hevc_pps->row_height_minus1));
1845
1846                        p_hevc_pps->flags &=
1847                                ~V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED;
1848                }
1849
1850                if (p_hevc_pps->flags &
1851                    V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER) {
1852                        p_hevc_pps->pps_beta_offset_div2 = 0;
1853                        p_hevc_pps->pps_tc_offset_div2 = 0;
1854                }
1855
1856                zero_padding(*p_hevc_pps);
1857                break;
1858
1859        case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
1860                p_hevc_slice_params = p;
1861
1862                if (p_hevc_slice_params->num_active_dpb_entries >
1863                    V4L2_HEVC_DPB_ENTRIES_NUM_MAX)
1864                        return -EINVAL;
1865
1866                zero_padding(p_hevc_slice_params->pred_weight_table);
1867
1868                for (i = 0; i < p_hevc_slice_params->num_active_dpb_entries;
1869                     i++) {
1870                        struct v4l2_hevc_dpb_entry *dpb_entry =
1871                                &p_hevc_slice_params->dpb[i];
1872
1873                        zero_padding(*dpb_entry);
1874                }
1875
1876                zero_padding(*p_hevc_slice_params);
1877                break;
1878
1879        case V4L2_CTRL_TYPE_AREA:
1880                area = p;
1881                if (!area->width || !area->height)
1882                        return -EINVAL;
1883                break;
1884
1885        default:
1886                return -EINVAL;
1887        }
1888
1889        return 0;
1890}
1891
1892static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx,
1893                        union v4l2_ctrl_ptr ptr)
1894{
1895        size_t len;
1896        u64 offset;
1897        s64 val;
1898
1899        switch ((u32)ctrl->type) {
1900        case V4L2_CTRL_TYPE_INTEGER:
1901                return ROUND_TO_RANGE(ptr.p_s32[idx], u32, ctrl);
1902        case V4L2_CTRL_TYPE_INTEGER64:
1903                /*
1904                 * We can't use the ROUND_TO_RANGE define here due to
1905                 * the u64 divide that needs special care.
1906                 */
1907                val = ptr.p_s64[idx];
1908                if (ctrl->maximum >= 0 && val >= ctrl->maximum - (s64)(ctrl->step / 2))
1909                        val = ctrl->maximum;
1910                else
1911                        val += (s64)(ctrl->step / 2);
1912                val = clamp_t(s64, val, ctrl->minimum, ctrl->maximum);
1913                offset = val - ctrl->minimum;
1914                do_div(offset, ctrl->step);
1915                ptr.p_s64[idx] = ctrl->minimum + offset * ctrl->step;
1916                return 0;
1917        case V4L2_CTRL_TYPE_U8:
1918                return ROUND_TO_RANGE(ptr.p_u8[idx], u8, ctrl);
1919        case V4L2_CTRL_TYPE_U16:
1920                return ROUND_TO_RANGE(ptr.p_u16[idx], u16, ctrl);
1921        case V4L2_CTRL_TYPE_U32:
1922                return ROUND_TO_RANGE(ptr.p_u32[idx], u32, ctrl);
1923
1924        case V4L2_CTRL_TYPE_BOOLEAN:
1925                ptr.p_s32[idx] = !!ptr.p_s32[idx];
1926                return 0;
1927
1928        case V4L2_CTRL_TYPE_MENU:
1929        case V4L2_CTRL_TYPE_INTEGER_MENU:
1930                if (ptr.p_s32[idx] < ctrl->minimum || ptr.p_s32[idx] > ctrl->maximum)
1931                        return -ERANGE;
1932                if (ctrl->menu_skip_mask & (1ULL << ptr.p_s32[idx]))
1933                        return -EINVAL;
1934                if (ctrl->type == V4L2_CTRL_TYPE_MENU &&
1935                    ctrl->qmenu[ptr.p_s32[idx]][0] == '\0')
1936                        return -EINVAL;
1937                return 0;
1938
1939        case V4L2_CTRL_TYPE_BITMASK:
1940                ptr.p_s32[idx] &= ctrl->maximum;
1941                return 0;
1942
1943        case V4L2_CTRL_TYPE_BUTTON:
1944        case V4L2_CTRL_TYPE_CTRL_CLASS:
1945                ptr.p_s32[idx] = 0;
1946                return 0;
1947
1948        case V4L2_CTRL_TYPE_STRING:
1949                idx *= ctrl->elem_size;
1950                len = strlen(ptr.p_char + idx);
1951                if (len < ctrl->minimum)
1952                        return -ERANGE;
1953                if ((len - (u32)ctrl->minimum) % (u32)ctrl->step)
1954                        return -ERANGE;
1955                return 0;
1956
1957        default:
1958                return std_validate_compound(ctrl, idx, ptr);
1959        }
1960}
1961
1962static const struct v4l2_ctrl_type_ops std_type_ops = {
1963        .equal = std_equal,
1964        .init = std_init,
1965        .log = std_log,
1966        .validate = std_validate,
1967};
1968
1969/* Helper function: copy the given control value back to the caller */
1970static int ptr_to_user(struct v4l2_ext_control *c,
1971                       struct v4l2_ctrl *ctrl,
1972                       union v4l2_ctrl_ptr ptr)
1973{
1974        u32 len;
1975
1976        if (ctrl->is_ptr && !ctrl->is_string)
1977                return copy_to_user(c->ptr, ptr.p_const, c->size) ?
1978                       -EFAULT : 0;
1979
1980        switch (ctrl->type) {
1981        case V4L2_CTRL_TYPE_STRING:
1982                len = strlen(ptr.p_char);
1983                if (c->size < len + 1) {
1984                        c->size = ctrl->elem_size;
1985                        return -ENOSPC;
1986                }
1987                return copy_to_user(c->string, ptr.p_char, len + 1) ?
1988                       -EFAULT : 0;
1989        case V4L2_CTRL_TYPE_INTEGER64:
1990                c->value64 = *ptr.p_s64;
1991                break;
1992        default:
1993                c->value = *ptr.p_s32;
1994                break;
1995        }
1996        return 0;
1997}
1998
1999/* Helper function: copy the current control value back to the caller */
2000static int cur_to_user(struct v4l2_ext_control *c,
2001                       struct v4l2_ctrl *ctrl)
2002{
2003        return ptr_to_user(c, ctrl, ctrl->p_cur);
2004}
2005
2006/* Helper function: copy the new control value back to the caller */
2007static int new_to_user(struct v4l2_ext_control *c,
2008                       struct v4l2_ctrl *ctrl)
2009{
2010        return ptr_to_user(c, ctrl, ctrl->p_new);
2011}
2012
2013/* Helper function: copy the request value back to the caller */
2014static int req_to_user(struct v4l2_ext_control *c,
2015                       struct v4l2_ctrl_ref *ref)
2016{
2017        return ptr_to_user(c, ref->ctrl, ref->p_req);
2018}
2019
2020/* Helper function: copy the initial control value back to the caller */
2021static int def_to_user(struct v4l2_ext_control *c, struct v4l2_ctrl *ctrl)
2022{
2023        int idx;
2024
2025        for (idx = 0; idx < ctrl->elems; idx++)
2026                ctrl->type_ops->init(ctrl, idx, ctrl->p_new);
2027
2028        return ptr_to_user(c, ctrl, ctrl->p_new);
2029}
2030
2031/* Helper function: copy the caller-provider value to the given control value */
2032static int user_to_ptr(struct v4l2_ext_control *c,
2033                       struct v4l2_ctrl *ctrl,
2034                       union v4l2_ctrl_ptr ptr)
2035{
2036        int ret;
2037        u32 size;
2038
2039        ctrl->is_new = 1;
2040        if (ctrl->is_ptr && !ctrl->is_string) {
2041                unsigned idx;
2042
2043                ret = copy_from_user(ptr.p, c->ptr, c->size) ? -EFAULT : 0;
2044                if (ret || !ctrl->is_array)
2045                        return ret;
2046                for (idx = c->size / ctrl->elem_size; idx < ctrl->elems; idx++)
2047                        ctrl->type_ops->init(ctrl, idx, ptr);
2048                return 0;
2049        }
2050
2051        switch (ctrl->type) {
2052        case V4L2_CTRL_TYPE_INTEGER64:
2053                *ptr.p_s64 = c->value64;
2054                break;
2055        case V4L2_CTRL_TYPE_STRING:
2056                size = c->size;
2057                if (size == 0)
2058                        return -ERANGE;
2059                if (size > ctrl->maximum + 1)
2060                        size = ctrl->maximum + 1;
2061                ret = copy_from_user(ptr.p_char, c->string, size) ? -EFAULT : 0;
2062                if (!ret) {
2063                        char last = ptr.p_char[size - 1];
2064
2065                        ptr.p_char[size - 1] = 0;
2066                        /* If the string was longer than ctrl->maximum,
2067                           then return an error. */
2068                        if (strlen(ptr.p_char) == ctrl->maximum && last)
2069                                return -ERANGE;
2070                }
2071                return ret;
2072        default:
2073                *ptr.p_s32 = c->value;
2074                break;
2075        }
2076        return 0;
2077}
2078
2079/* Helper function: copy the caller-provider value as the new control value */
2080static int user_to_new(struct v4l2_ext_control *c,
2081                       struct v4l2_ctrl *ctrl)
2082{
2083        return user_to_ptr(c, ctrl, ctrl->p_new);
2084}
2085
2086/* Copy the one value to another. */
2087static void ptr_to_ptr(struct v4l2_ctrl *ctrl,
2088                       union v4l2_ctrl_ptr from, union v4l2_ctrl_ptr to)
2089{
2090        if (ctrl == NULL)
2091                return;
2092        memcpy(to.p, from.p_const, ctrl->elems * ctrl->elem_size);
2093}
2094
2095/* Copy the new value to the current value. */
2096static void new_to_cur(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 ch_flags)
2097{
2098        bool changed;
2099
2100        if (ctrl == NULL)
2101                return;
2102
2103        /* has_changed is set by cluster_changed */
2104        changed = ctrl->has_changed;
2105        if (changed)
2106                ptr_to_ptr(ctrl, ctrl->p_new, ctrl->p_cur);
2107
2108        if (ch_flags & V4L2_EVENT_CTRL_CH_FLAGS) {
2109                /* Note: CH_FLAGS is only set for auto clusters. */
2110                ctrl->flags &=
2111                        ~(V4L2_CTRL_FLAG_INACTIVE | V4L2_CTRL_FLAG_VOLATILE);
2112                if (!is_cur_manual(ctrl->cluster[0])) {
2113                        ctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
2114                        if (ctrl->cluster[0]->has_volatiles)
2115                                ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE;
2116                }
2117                fh = NULL;
2118        }
2119        if (changed || ch_flags) {
2120                /* If a control was changed that was not one of the controls
2121                   modified by the application, then send the event to all. */
2122                if (!ctrl->is_new)
2123                        fh = NULL;
2124                send_event(fh, ctrl,
2125                        (changed ? V4L2_EVENT_CTRL_CH_VALUE : 0) | ch_flags);
2126                if (ctrl->call_notify && changed && ctrl->handler->notify)
2127                        ctrl->handler->notify(ctrl, ctrl->handler->notify_priv);
2128        }
2129}
2130
2131/* Copy the current value to the new value */
2132static void cur_to_new(struct v4l2_ctrl *ctrl)
2133{
2134        if (ctrl == NULL)
2135                return;
2136        ptr_to_ptr(ctrl, ctrl->p_cur, ctrl->p_new);
2137}
2138
2139/* Copy the new value to the request value */
2140static void new_to_req(struct v4l2_ctrl_ref *ref)
2141{
2142        if (!ref)
2143                return;
2144        ptr_to_ptr(ref->ctrl, ref->ctrl->p_new, ref->p_req);
2145        ref->req = ref;
2146}
2147
2148/* Copy the request value to the new value */
2149static void req_to_new(struct v4l2_ctrl_ref *ref)
2150{
2151        if (!ref)
2152                return;
2153        if (ref->req)
2154                ptr_to_ptr(ref->ctrl, ref->req->p_req, ref->ctrl->p_new);
2155        else
2156                ptr_to_ptr(ref->ctrl, ref->ctrl->p_cur, ref->ctrl->p_new);
2157}
2158
2159/* Return non-zero if one or more of the controls in the cluster has a new
2160   value that differs from the current value. */
2161static int cluster_changed(struct v4l2_ctrl *master)
2162{
2163        bool changed = false;
2164        unsigned idx;
2165        int i;
2166
2167        for (i = 0; i < master->ncontrols; i++) {
2168                struct v4l2_ctrl *ctrl = master->cluster[i];
2169                bool ctrl_changed = false;
2170
2171                if (ctrl == NULL)
2172                        continue;
2173
2174                if (ctrl->flags & V4L2_CTRL_FLAG_EXECUTE_ON_WRITE)
2175                        changed = ctrl_changed = true;
2176
2177                /*
2178                 * Set has_changed to false to avoid generating
2179                 * the event V4L2_EVENT_CTRL_CH_VALUE
2180                 */
2181                if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE) {
2182                        ctrl->has_changed = false;
2183                        continue;
2184                }
2185
2186                for (idx = 0; !ctrl_changed && idx < ctrl->elems; idx++)
2187                        ctrl_changed = !ctrl->type_ops->equal(ctrl, idx,
2188                                ctrl->p_cur, ctrl->p_new);
2189                ctrl->has_changed = ctrl_changed;
2190                changed |= ctrl->has_changed;
2191        }
2192        return changed;
2193}
2194
2195/* Control range checking */
2196static int check_range(enum v4l2_ctrl_type type,
2197                s64 min, s64 max, u64 step, s64 def)
2198{
2199        switch (type) {
2200        case V4L2_CTRL_TYPE_BOOLEAN:
2201                if (step != 1 || max > 1 || min < 0)
2202                        return -ERANGE;
2203                fallthrough;
2204        case V4L2_CTRL_TYPE_U8:
2205        case V4L2_CTRL_TYPE_U16:
2206        case V4L2_CTRL_TYPE_U32:
2207        case V4L2_CTRL_TYPE_INTEGER:
2208        case V4L2_CTRL_TYPE_INTEGER64:
2209                if (step == 0 || min > max || def < min || def > max)
2210                        return -ERANGE;
2211                return 0;
2212        case V4L2_CTRL_TYPE_BITMASK:
2213                if (step || min || !max || (def & ~max))
2214                        return -ERANGE;
2215                return 0;
2216        case V4L2_CTRL_TYPE_MENU:
2217        case V4L2_CTRL_TYPE_INTEGER_MENU:
2218                if (min > max || def < min || def > max)
2219                        return -ERANGE;
2220                /* Note: step == menu_skip_mask for menu controls.
2221                   So here we check if the default value is masked out. */
2222                if (step && ((1 << def) & step))
2223                        return -EINVAL;
2224                return 0;
2225        case V4L2_CTRL_TYPE_STRING:
2226                if (min > max || min < 0 || step < 1 || def)
2227                        return -ERANGE;
2228                return 0;
2229        default:
2230                return 0;
2231        }
2232}
2233
2234/* Validate a new control */
2235static int validate_new(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr p_new)
2236{
2237        unsigned idx;
2238        int err = 0;
2239
2240        for (idx = 0; !err && idx < ctrl->elems; idx++)
2241                err = ctrl->type_ops->validate(ctrl, idx, p_new);
2242        return err;
2243}
2244
2245static inline u32 node2id(struct list_head *node)
2246{
2247        return list_entry(node, struct v4l2_ctrl_ref, node)->ctrl->id;
2248}
2249
2250/* Set the handler's error code if it wasn't set earlier already */
2251static inline int handler_set_err(struct v4l2_ctrl_handler *hdl, int err)
2252{
2253        if (hdl->error == 0)
2254                hdl->error = err;
2255        return err;
2256}
2257
2258/* Initialize the handler */
2259int v4l2_ctrl_handler_init_class(struct v4l2_ctrl_handler *hdl,
2260                                 unsigned nr_of_controls_hint,
2261                                 struct lock_class_key *key, const char *name)
2262{
2263        mutex_init(&hdl->_lock);
2264        hdl->lock = &hdl->_lock;
2265        lockdep_set_class_and_name(hdl->lock, key, name);
2266        INIT_LIST_HEAD(&hdl->ctrls);
2267        INIT_LIST_HEAD(&hdl->ctrl_refs);
2268        INIT_LIST_HEAD(&hdl->requests);
2269        INIT_LIST_HEAD(&hdl->requests_queued);
2270        hdl->request_is_queued = false;
2271        hdl->nr_of_buckets = 1 + nr_of_controls_hint / 8;
2272        hdl->buckets = kvmalloc_array(hdl->nr_of_buckets,
2273                                      sizeof(hdl->buckets[0]),
2274                                      GFP_KERNEL | __GFP_ZERO);
2275        hdl->error = hdl->buckets ? 0 : -ENOMEM;
2276        media_request_object_init(&hdl->req_obj);
2277        return hdl->error;
2278}
2279EXPORT_SYMBOL(v4l2_ctrl_handler_init_class);
2280
2281/* Free all controls and control refs */
2282void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)
2283{
2284        struct v4l2_ctrl_ref *ref, *next_ref;
2285        struct v4l2_ctrl *ctrl, *next_ctrl;
2286        struct v4l2_subscribed_event *sev, *next_sev;
2287
2288        if (hdl == NULL || hdl->buckets == NULL)
2289                return;
2290
2291        if (!hdl->req_obj.req && !list_empty(&hdl->requests)) {
2292                struct v4l2_ctrl_handler *req, *next_req;
2293
2294                list_for_each_entry_safe(req, next_req, &hdl->requests, requests) {
2295                        media_request_object_unbind(&req->req_obj);
2296                        media_request_object_put(&req->req_obj);
2297                }
2298        }
2299        mutex_lock(hdl->lock);
2300        /* Free all nodes */
2301        list_for_each_entry_safe(ref, next_ref, &hdl->ctrl_refs, node) {
2302                list_del(&ref->node);
2303                kfree(ref);
2304        }
2305        /* Free all controls owned by the handler */
2306        list_for_each_entry_safe(ctrl, next_ctrl, &hdl->ctrls, node) {
2307                list_del(&ctrl->node);
2308                list_for_each_entry_safe(sev, next_sev, &ctrl->ev_subs, node)
2309                        list_del(&sev->node);
2310                kvfree(ctrl);
2311        }
2312        kvfree(hdl->buckets);
2313        hdl->buckets = NULL;
2314        hdl->cached = NULL;
2315        hdl->error = 0;
2316        mutex_unlock(hdl->lock);
2317        mutex_destroy(&hdl->_lock);
2318}
2319EXPORT_SYMBOL(v4l2_ctrl_handler_free);
2320
2321/* For backwards compatibility: V4L2_CID_PRIVATE_BASE should no longer
2322   be used except in G_CTRL, S_CTRL, QUERYCTRL and QUERYMENU when dealing
2323   with applications that do not use the NEXT_CTRL flag.
2324
2325   We just find the n-th private user control. It's O(N), but that should not
2326   be an issue in this particular case. */
2327static struct v4l2_ctrl_ref *find_private_ref(
2328                struct v4l2_ctrl_handler *hdl, u32 id)
2329{
2330        struct v4l2_ctrl_ref *ref;
2331
2332        id -= V4L2_CID_PRIVATE_BASE;
2333        list_for_each_entry(ref, &hdl->ctrl_refs, node) {
2334                /* Search for private user controls that are compatible with
2335                   VIDIOC_G/S_CTRL. */
2336                if (V4L2_CTRL_ID2WHICH(ref->ctrl->id) == V4L2_CTRL_CLASS_USER &&
2337                    V4L2_CTRL_DRIVER_PRIV(ref->ctrl->id)) {
2338                        if (!ref->ctrl->is_int)
2339                                continue;
2340                        if (id == 0)
2341                                return ref;
2342                        id--;
2343                }
2344        }
2345        return NULL;
2346}
2347
2348/* Find a control with the given ID. */
2349static struct v4l2_ctrl_ref *find_ref(struct v4l2_ctrl_handler *hdl, u32 id)
2350{
2351        struct v4l2_ctrl_ref *ref;
2352        int bucket;
2353
2354        id &= V4L2_CTRL_ID_MASK;
2355
2356        /* Old-style private controls need special handling */
2357        if (id >= V4L2_CID_PRIVATE_BASE)
2358                return find_private_ref(hdl, id);
2359        bucket = id % hdl->nr_of_buckets;
2360
2361        /* Simple optimization: cache the last control found */
2362        if (hdl->cached && hdl->cached->ctrl->id == id)
2363                return hdl->cached;
2364
2365        /* Not in cache, search the hash */
2366        ref = hdl->buckets ? hdl->buckets[bucket] : NULL;
2367        while (ref && ref->ctrl->id != id)
2368                ref = ref->next;
2369
2370        if (ref)
2371                hdl->cached = ref; /* cache it! */
2372        return ref;
2373}
2374
2375/* Find a control with the given ID. Take the handler's lock first. */
2376static struct v4l2_ctrl_ref *find_ref_lock(
2377                struct v4l2_ctrl_handler *hdl, u32 id)
2378{
2379        struct v4l2_ctrl_ref *ref = NULL;
2380
2381        if (hdl) {
2382                mutex_lock(hdl->lock);
2383                ref = find_ref(hdl, id);
2384                mutex_unlock(hdl->lock);
2385        }
2386        return ref;
2387}
2388
2389/* Find a control with the given ID. */
2390struct v4l2_ctrl *v4l2_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id)
2391{
2392        struct v4l2_ctrl_ref *ref = find_ref_lock(hdl, id);
2393
2394        return ref ? ref->ctrl : NULL;
2395}
2396EXPORT_SYMBOL(v4l2_ctrl_find);
2397
2398/* Allocate a new v4l2_ctrl_ref and hook it into the handler. */
2399static int handler_new_ref(struct v4l2_ctrl_handler *hdl,
2400                           struct v4l2_ctrl *ctrl,
2401                           struct v4l2_ctrl_ref **ctrl_ref,
2402                           bool from_other_dev, bool allocate_req)
2403{
2404        struct v4l2_ctrl_ref *ref;
2405        struct v4l2_ctrl_ref *new_ref;
2406        u32 id = ctrl->id;
2407        u32 class_ctrl = V4L2_CTRL_ID2WHICH(id) | 1;
2408        int bucket = id % hdl->nr_of_buckets;   /* which bucket to use */
2409        unsigned int size_extra_req = 0;
2410
2411        if (ctrl_ref)
2412                *ctrl_ref = NULL;
2413
2414        /*
2415         * Automatically add the control class if it is not yet present and
2416         * the new control is not a compound control.
2417         */
2418        if (ctrl->type < V4L2_CTRL_COMPOUND_TYPES &&
2419            id != class_ctrl && find_ref_lock(hdl, class_ctrl) == NULL)
2420                if (!v4l2_ctrl_new_std(hdl, NULL, class_ctrl, 0, 0, 0, 0))
2421                        return hdl->error;
2422
2423        if (hdl->error)
2424                return hdl->error;
2425
2426        if (allocate_req)
2427                size_extra_req = ctrl->elems * ctrl->elem_size;
2428        new_ref = kzalloc(sizeof(*new_ref) + size_extra_req, GFP_KERNEL);
2429        if (!new_ref)
2430                return handler_set_err(hdl, -ENOMEM);
2431        new_ref->ctrl = ctrl;
2432        new_ref->from_other_dev = from_other_dev;
2433        if (size_extra_req)
2434                new_ref->p_req.p = &new_ref[1];
2435
2436        INIT_LIST_HEAD(&new_ref->node);
2437
2438        mutex_lock(hdl->lock);
2439
2440        /* Add immediately at the end of the list if the list is empty, or if
2441           the last element in the list has a lower ID.
2442           This ensures that when elements are added in ascending order the
2443           insertion is an O(1) operation. */
2444        if (list_empty(&hdl->ctrl_refs) || id > node2id(hdl->ctrl_refs.prev)) {
2445                list_add_tail(&new_ref->node, &hdl->ctrl_refs);
2446                goto insert_in_hash;
2447        }
2448
2449        /* Find insert position in sorted list */
2450        list_for_each_entry(ref, &hdl->ctrl_refs, node) {
2451                if (ref->ctrl->id < id)
2452                        continue;
2453                /* Don't add duplicates */
2454                if (ref->ctrl->id == id) {
2455                        kfree(new_ref);
2456                        goto unlock;
2457                }
2458                list_add(&new_ref->node, ref->node.prev);
2459                break;
2460        }
2461
2462insert_in_hash:
2463        /* Insert the control node in the hash */
2464        new_ref->next = hdl->buckets[bucket];
2465        hdl->buckets[bucket] = new_ref;
2466        if (ctrl_ref)
2467                *ctrl_ref = new_ref;
2468        if (ctrl->handler == hdl) {
2469                /* By default each control starts in a cluster of its own.
2470                 * new_ref->ctrl is basically a cluster array with one
2471                 * element, so that's perfect to use as the cluster pointer.
2472                 * But only do this for the handler that owns the control.
2473                 */
2474                ctrl->cluster = &new_ref->ctrl;
2475                ctrl->ncontrols = 1;
2476        }
2477
2478unlock:
2479        mutex_unlock(hdl->lock);
2480        return 0;
2481}
2482
2483/* Add a new control */
2484static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
2485                        const struct v4l2_ctrl_ops *ops,
2486                        const struct v4l2_ctrl_type_ops *type_ops,
2487                        u32 id, const char *name, enum v4l2_ctrl_type type,
2488                        s64 min, s64 max, u64 step, s64 def,
2489                        const u32 dims[V4L2_CTRL_MAX_DIMS], u32 elem_size,
2490                        u32 flags, const char * const *qmenu,
2491                        const s64 *qmenu_int, const union v4l2_ctrl_ptr p_def,
2492                        void *priv)
2493{
2494        struct v4l2_ctrl *ctrl;
2495        unsigned sz_extra;
2496        unsigned nr_of_dims = 0;
2497        unsigned elems = 1;
2498        bool is_array;
2499        unsigned tot_ctrl_size;
2500        unsigned idx;
2501        void *data;
2502        int err;
2503
2504        if (hdl->error)
2505                return NULL;
2506
2507        while (dims && dims[nr_of_dims]) {
2508                elems *= dims[nr_of_dims];
2509                nr_of_dims++;
2510                if (nr_of_dims == V4L2_CTRL_MAX_DIMS)
2511                        break;
2512        }
2513        is_array = nr_of_dims > 0;
2514
2515        /* Prefill elem_size for all types handled by std_type_ops */
2516        switch ((u32)type) {
2517        case V4L2_CTRL_TYPE_INTEGER64:
2518                elem_size = sizeof(s64);
2519                break;
2520        case V4L2_CTRL_TYPE_STRING:
2521                elem_size = max + 1;
2522                break;
2523        case V4L2_CTRL_TYPE_U8:
2524                elem_size = sizeof(u8);
2525                break;
2526        case V4L2_CTRL_TYPE_U16:
2527                elem_size = sizeof(u16);
2528                break;
2529        case V4L2_CTRL_TYPE_U32:
2530                elem_size = sizeof(u32);
2531                break;
2532        case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS:
2533                elem_size = sizeof(struct v4l2_ctrl_mpeg2_slice_params);
2534                break;
2535        case V4L2_CTRL_TYPE_MPEG2_QUANTIZATION:
2536                elem_size = sizeof(struct v4l2_ctrl_mpeg2_quantization);
2537                break;
2538        case V4L2_CTRL_TYPE_FWHT_PARAMS:
2539                elem_size = sizeof(struct v4l2_ctrl_fwht_params);
2540                break;
2541        case V4L2_CTRL_TYPE_H264_SPS:
2542                elem_size = sizeof(struct v4l2_ctrl_h264_sps);
2543                break;
2544        case V4L2_CTRL_TYPE_H264_PPS:
2545                elem_size = sizeof(struct v4l2_ctrl_h264_pps);
2546                break;
2547        case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
2548                elem_size = sizeof(struct v4l2_ctrl_h264_scaling_matrix);
2549                break;
2550        case V4L2_CTRL_TYPE_H264_SLICE_PARAMS:
2551                elem_size = sizeof(struct v4l2_ctrl_h264_slice_params);
2552                break;
2553        case V4L2_CTRL_TYPE_H264_DECODE_PARAMS:
2554                elem_size = sizeof(struct v4l2_ctrl_h264_decode_params);
2555                break;
2556        case V4L2_CTRL_TYPE_VP8_FRAME_HEADER:
2557                elem_size = sizeof(struct v4l2_ctrl_vp8_frame_header);
2558                break;
2559        case V4L2_CTRL_TYPE_HEVC_SPS:
2560                elem_size = sizeof(struct v4l2_ctrl_hevc_sps);
2561                break;
2562        case V4L2_CTRL_TYPE_HEVC_PPS:
2563                elem_size = sizeof(struct v4l2_ctrl_hevc_pps);
2564                break;
2565        case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
2566                elem_size = sizeof(struct v4l2_ctrl_hevc_slice_params);
2567                break;
2568        case V4L2_CTRL_TYPE_AREA:
2569                elem_size = sizeof(struct v4l2_area);
2570                break;
2571        default:
2572                if (type < V4L2_CTRL_COMPOUND_TYPES)
2573                        elem_size = sizeof(s32);
2574                break;
2575        }
2576        tot_ctrl_size = elem_size * elems;
2577
2578        /* Sanity checks */
2579        if (id == 0 || name == NULL || !elem_size ||
2580            id >= V4L2_CID_PRIVATE_BASE ||
2581            (type == V4L2_CTRL_TYPE_MENU && qmenu == NULL) ||
2582            (type == V4L2_CTRL_TYPE_INTEGER_MENU && qmenu_int == NULL)) {
2583                handler_set_err(hdl, -ERANGE);
2584                return NULL;
2585        }
2586        err = check_range(type, min, max, step, def);
2587        if (err) {
2588                handler_set_err(hdl, err);
2589                return NULL;
2590        }
2591        if (is_array &&
2592            (type == V4L2_CTRL_TYPE_BUTTON ||
2593             type == V4L2_CTRL_TYPE_CTRL_CLASS)) {
2594                handler_set_err(hdl, -EINVAL);
2595                return NULL;
2596        }
2597
2598        sz_extra = 0;
2599        if (type == V4L2_CTRL_TYPE_BUTTON)
2600                flags |= V4L2_CTRL_FLAG_WRITE_ONLY |
2601                        V4L2_CTRL_FLAG_EXECUTE_ON_WRITE;
2602        else if (type == V4L2_CTRL_TYPE_CTRL_CLASS)
2603                flags |= V4L2_CTRL_FLAG_READ_ONLY;
2604        else if (type == V4L2_CTRL_TYPE_INTEGER64 ||
2605                 type == V4L2_CTRL_TYPE_STRING ||
2606                 type >= V4L2_CTRL_COMPOUND_TYPES ||
2607                 is_array)
2608                sz_extra += 2 * tot_ctrl_size;
2609
2610        if (type >= V4L2_CTRL_COMPOUND_TYPES && p_def.p_const)
2611                sz_extra += elem_size;
2612
2613        ctrl = kvzalloc(sizeof(*ctrl) + sz_extra, GFP_KERNEL);
2614        if (ctrl == NULL) {
2615                handler_set_err(hdl, -ENOMEM);
2616                return NULL;
2617        }
2618
2619        INIT_LIST_HEAD(&ctrl->node);
2620        INIT_LIST_HEAD(&ctrl->ev_subs);
2621        ctrl->handler = hdl;
2622        ctrl->ops = ops;
2623        ctrl->type_ops = type_ops ? type_ops : &std_type_ops;
2624        ctrl->id = id;
2625        ctrl->name = name;
2626        ctrl->type = type;
2627        ctrl->flags = flags;
2628        ctrl->minimum = min;
2629        ctrl->maximum = max;
2630        ctrl->step = step;
2631        ctrl->default_value = def;
2632        ctrl->is_string = !is_array && type == V4L2_CTRL_TYPE_STRING;
2633        ctrl->is_ptr = is_array || type >= V4L2_CTRL_COMPOUND_TYPES || ctrl->is_string;
2634        ctrl->is_int = !ctrl->is_ptr && type != V4L2_CTRL_TYPE_INTEGER64;
2635        ctrl->is_array = is_array;
2636        ctrl->elems = elems;
2637        ctrl->nr_of_dims = nr_of_dims;
2638        if (nr_of_dims)
2639                memcpy(ctrl->dims, dims, nr_of_dims * sizeof(dims[0]));
2640        ctrl->elem_size = elem_size;
2641        if (type == V4L2_CTRL_TYPE_MENU)
2642                ctrl->qmenu = qmenu;
2643        else if (type == V4L2_CTRL_TYPE_INTEGER_MENU)
2644                ctrl->qmenu_int = qmenu_int;
2645        ctrl->priv = priv;
2646        ctrl->cur.val = ctrl->val = def;
2647        data = &ctrl[1];
2648
2649        if (!ctrl->is_int) {
2650                ctrl->p_new.p = data;
2651                ctrl->p_cur.p = data + tot_ctrl_size;
2652        } else {
2653                ctrl->p_new.p = &ctrl->val;
2654                ctrl->p_cur.p = &ctrl->cur.val;
2655        }
2656
2657        if (type >= V4L2_CTRL_COMPOUND_TYPES && p_def.p_const) {
2658                ctrl->p_def.p = ctrl->p_cur.p + tot_ctrl_size;
2659                memcpy(ctrl->p_def.p, p_def.p_const, elem_size);
2660        }
2661
2662        for (idx = 0; idx < elems; idx++) {
2663                ctrl->type_ops->init(ctrl, idx, ctrl->p_cur);
2664                ctrl->type_ops->init(ctrl, idx, ctrl->p_new);
2665        }
2666
2667        if (handler_new_ref(hdl, ctrl, NULL, false, false)) {
2668                kvfree(ctrl);
2669                return NULL;
2670        }
2671        mutex_lock(hdl->lock);
2672        list_add_tail(&ctrl->node, &hdl->ctrls);
2673        mutex_unlock(hdl->lock);
2674        return ctrl;
2675}
2676
2677struct v4l2_ctrl *v4l2_ctrl_new_custom(struct v4l2_ctrl_handler *hdl,
2678                        const struct v4l2_ctrl_config *cfg, void *priv)
2679{
2680        bool is_menu;
2681        struct v4l2_ctrl *ctrl;
2682        const char *name = cfg->name;
2683        const char * const *qmenu = cfg->qmenu;
2684        const s64 *qmenu_int = cfg->qmenu_int;
2685        enum v4l2_ctrl_type type = cfg->type;
2686        u32 flags = cfg->flags;
2687        s64 min = cfg->min;
2688        s64 max = cfg->max;
2689        u64 step = cfg->step;
2690        s64 def = cfg->def;
2691
2692        if (name == NULL)
2693                v4l2_ctrl_fill(cfg->id, &name, &type, &min, &max, &step,
2694                                                                &def, &flags);
2695
2696        is_menu = (type == V4L2_CTRL_TYPE_MENU ||
2697                   type == V4L2_CTRL_TYPE_INTEGER_MENU);
2698        if (is_menu)
2699                WARN_ON(step);
2700        else
2701                WARN_ON(cfg->menu_skip_mask);
2702        if (type == V4L2_CTRL_TYPE_MENU && !qmenu) {
2703                qmenu = v4l2_ctrl_get_menu(cfg->id);
2704        } else if (type == V4L2_CTRL_TYPE_INTEGER_MENU && !qmenu_int) {
2705                handler_set_err(hdl, -EINVAL);
2706                return NULL;
2707        }
2708
2709        ctrl = v4l2_ctrl_new(hdl, cfg->ops, cfg->type_ops, cfg->id, name,
2710                        type, min, max,
2711                        is_menu ? cfg->menu_skip_mask : step, def,
2712                        cfg->dims, cfg->elem_size,
2713                        flags, qmenu, qmenu_int, cfg->p_def, priv);
2714        if (ctrl)
2715                ctrl->is_private = cfg->is_private;
2716        return ctrl;
2717}
2718EXPORT_SYMBOL(v4l2_ctrl_new_custom);
2719
2720/* Helper function for standard non-menu controls */
2721struct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl,
2722                        const struct v4l2_ctrl_ops *ops,
2723                        u32 id, s64 min, s64 max, u64 step, s64 def)
2724{
2725        const char *name;
2726        enum v4l2_ctrl_type type;
2727        u32 flags;
2728
2729        v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2730        if (type == V4L2_CTRL_TYPE_MENU ||
2731            type == V4L2_CTRL_TYPE_INTEGER_MENU ||
2732            type >= V4L2_CTRL_COMPOUND_TYPES) {
2733                handler_set_err(hdl, -EINVAL);
2734                return NULL;
2735        }
2736        return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2737                             min, max, step, def, NULL, 0,
2738                             flags, NULL, NULL, ptr_null, NULL);
2739}
2740EXPORT_SYMBOL(v4l2_ctrl_new_std);
2741
2742/* Helper function for standard menu controls */
2743struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl,
2744                        const struct v4l2_ctrl_ops *ops,
2745                        u32 id, u8 _max, u64 mask, u8 _def)
2746{
2747        const char * const *qmenu = NULL;
2748        const s64 *qmenu_int = NULL;
2749        unsigned int qmenu_int_len = 0;
2750        const char *name;
2751        enum v4l2_ctrl_type type;
2752        s64 min;
2753        s64 max = _max;
2754        s64 def = _def;
2755        u64 step;
2756        u32 flags;
2757
2758        v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2759
2760        if (type == V4L2_CTRL_TYPE_MENU)
2761                qmenu = v4l2_ctrl_get_menu(id);
2762        else if (type == V4L2_CTRL_TYPE_INTEGER_MENU)
2763                qmenu_int = v4l2_ctrl_get_int_menu(id, &qmenu_int_len);
2764
2765        if ((!qmenu && !qmenu_int) || (qmenu_int && max > qmenu_int_len)) {
2766                handler_set_err(hdl, -EINVAL);
2767                return NULL;
2768        }
2769        return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2770                             0, max, mask, def, NULL, 0,
2771                             flags, qmenu, qmenu_int, ptr_null, NULL);
2772}
2773EXPORT_SYMBOL(v4l2_ctrl_new_std_menu);
2774
2775/* Helper function for standard menu controls with driver defined menu */
2776struct v4l2_ctrl *v4l2_ctrl_new_std_menu_items(struct v4l2_ctrl_handler *hdl,
2777                        const struct v4l2_ctrl_ops *ops, u32 id, u8 _max,
2778                        u64 mask, u8 _def, const char * const *qmenu)
2779{
2780        enum v4l2_ctrl_type type;
2781        const char *name;
2782        u32 flags;
2783        u64 step;
2784        s64 min;
2785        s64 max = _max;
2786        s64 def = _def;
2787
2788        /* v4l2_ctrl_new_std_menu_items() should only be called for
2789         * standard controls without a standard menu.
2790         */
2791        if (v4l2_ctrl_get_menu(id)) {
2792                handler_set_err(hdl, -EINVAL);
2793                return NULL;
2794        }
2795
2796        v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2797        if (type != V4L2_CTRL_TYPE_MENU || qmenu == NULL) {
2798                handler_set_err(hdl, -EINVAL);
2799                return NULL;
2800        }
2801        return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2802                             0, max, mask, def, NULL, 0,
2803                             flags, qmenu, NULL, ptr_null, NULL);
2804
2805}
2806EXPORT_SYMBOL(v4l2_ctrl_new_std_menu_items);
2807
2808/* Helper function for standard compound controls */
2809struct v4l2_ctrl *v4l2_ctrl_new_std_compound(struct v4l2_ctrl_handler *hdl,
2810                                const struct v4l2_ctrl_ops *ops, u32 id,
2811                                const union v4l2_ctrl_ptr p_def)
2812{
2813        const char *name;
2814        enum v4l2_ctrl_type type;
2815        u32 flags;
2816        s64 min, max, step, def;
2817
2818        v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2819        if (type < V4L2_CTRL_COMPOUND_TYPES) {
2820                handler_set_err(hdl, -EINVAL);
2821                return NULL;
2822        }
2823        return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2824                             min, max, step, def, NULL, 0,
2825                             flags, NULL, NULL, p_def, NULL);
2826}
2827EXPORT_SYMBOL(v4l2_ctrl_new_std_compound);
2828
2829/* Helper function for standard integer menu controls */
2830struct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl,
2831                        const struct v4l2_ctrl_ops *ops,
2832                        u32 id, u8 _max, u8 _def, const s64 *qmenu_int)
2833{
2834        const char *name;
2835        enum v4l2_ctrl_type type;
2836        s64 min;
2837        u64 step;
2838        s64 max = _max;
2839        s64 def = _def;
2840        u32 flags;
2841
2842        v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2843        if (type != V4L2_CTRL_TYPE_INTEGER_MENU) {
2844                handler_set_err(hdl, -EINVAL);
2845                return NULL;
2846        }
2847        return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2848                             0, max, 0, def, NULL, 0,
2849                             flags, NULL, qmenu_int, ptr_null, NULL);
2850}
2851EXPORT_SYMBOL(v4l2_ctrl_new_int_menu);
2852
2853/* Add the controls from another handler to our own. */
2854int v4l2_ctrl_add_handler(struct v4l2_ctrl_handler *hdl,
2855                          struct v4l2_ctrl_handler *add,
2856                          bool (*filter)(const struct v4l2_ctrl *ctrl),
2857                          bool from_other_dev)
2858{
2859        struct v4l2_ctrl_ref *ref;
2860        int ret = 0;
2861
2862        /* Do nothing if either handler is NULL or if they are the same */
2863        if (!hdl || !add || hdl == add)
2864                return 0;
2865        if (hdl->error)
2866                return hdl->error;
2867        mutex_lock(add->lock);
2868        list_for_each_entry(ref, &add->ctrl_refs, node) {
2869                struct v4l2_ctrl *ctrl = ref->ctrl;
2870
2871                /* Skip handler-private controls. */
2872                if (ctrl->is_private)
2873                        continue;
2874                /* And control classes */
2875                if (ctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
2876                        continue;
2877                /* Filter any unwanted controls */
2878                if (filter && !filter(ctrl))
2879                        continue;
2880                ret = handler_new_ref(hdl, ctrl, NULL, from_other_dev, false);
2881                if (ret)
2882                        break;
2883        }
2884        mutex_unlock(add->lock);
2885        return ret;
2886}
2887EXPORT_SYMBOL(v4l2_ctrl_add_handler);
2888
2889bool v4l2_ctrl_radio_filter(const struct v4l2_ctrl *ctrl)
2890{
2891        if (V4L2_CTRL_ID2WHICH(ctrl->id) == V4L2_CTRL_CLASS_FM_TX)
2892                return true;
2893        if (V4L2_CTRL_ID2WHICH(ctrl->id) == V4L2_CTRL_CLASS_FM_RX)
2894                return true;
2895        switch (ctrl->id) {
2896        case V4L2_CID_AUDIO_MUTE:
2897        case V4L2_CID_AUDIO_VOLUME:
2898        case V4L2_CID_AUDIO_BALANCE:
2899        case V4L2_CID_AUDIO_BASS:
2900        case V4L2_CID_AUDIO_TREBLE:
2901        case V4L2_CID_AUDIO_LOUDNESS:
2902                return true;
2903        default:
2904                break;
2905        }
2906        return false;
2907}
2908EXPORT_SYMBOL(v4l2_ctrl_radio_filter);
2909
2910/* Cluster controls */
2911void v4l2_ctrl_cluster(unsigned ncontrols, struct v4l2_ctrl **controls)
2912{
2913        bool has_volatiles = false;
2914        int i;
2915
2916        /* The first control is the master control and it must not be NULL */
2917        if (WARN_ON(ncontrols == 0 || controls[0] == NULL))
2918                return;
2919
2920        for (i = 0; i < ncontrols; i++) {
2921                if (controls[i]) {
2922                        controls[i]->cluster = controls;
2923                        controls[i]->ncontrols = ncontrols;
2924                        if (controls[i]->flags & V4L2_CTRL_FLAG_VOLATILE)
2925                                has_volatiles = true;
2926                }
2927        }
2928        controls[0]->has_volatiles = has_volatiles;
2929}
2930EXPORT_SYMBOL(v4l2_ctrl_cluster);
2931
2932void v4l2_ctrl_auto_cluster(unsigned ncontrols, struct v4l2_ctrl **controls,
2933                            u8 manual_val, bool set_volatile)
2934{
2935        struct v4l2_ctrl *master = controls[0];
2936        u32 flag = 0;
2937        int i;
2938
2939        v4l2_ctrl_cluster(ncontrols, controls);
2940        WARN_ON(ncontrols <= 1);
2941        WARN_ON(manual_val < master->minimum || manual_val > master->maximum);
2942        WARN_ON(set_volatile && !has_op(master, g_volatile_ctrl));
2943        master->is_auto = true;
2944        master->has_volatiles = set_volatile;
2945        master->manual_mode_value = manual_val;
2946        master->flags |= V4L2_CTRL_FLAG_UPDATE;
2947
2948        if (!is_cur_manual(master))
2949                flag = V4L2_CTRL_FLAG_INACTIVE |
2950                        (set_volatile ? V4L2_CTRL_FLAG_VOLATILE : 0);
2951
2952        for (i = 1; i < ncontrols; i++)
2953                if (controls[i])
2954                        controls[i]->flags |= flag;
2955}
2956EXPORT_SYMBOL(v4l2_ctrl_auto_cluster);
2957
2958/* Activate/deactivate a control. */
2959void v4l2_ctrl_activate(struct v4l2_ctrl *ctrl, bool active)
2960{
2961        /* invert since the actual flag is called 'inactive' */
2962        bool inactive = !active;
2963        bool old;
2964
2965        if (ctrl == NULL)
2966                return;
2967
2968        if (inactive)
2969                /* set V4L2_CTRL_FLAG_INACTIVE */
2970                old = test_and_set_bit(4, &ctrl->flags);
2971        else
2972                /* clear V4L2_CTRL_FLAG_INACTIVE */
2973                old = test_and_clear_bit(4, &ctrl->flags);
2974        if (old != inactive)
2975                send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_FLAGS);
2976}
2977EXPORT_SYMBOL(v4l2_ctrl_activate);
2978
2979void __v4l2_ctrl_grab(struct v4l2_ctrl *ctrl, bool grabbed)
2980{
2981        bool old;
2982
2983        if (ctrl == NULL)
2984                return;
2985
2986        lockdep_assert_held(ctrl->handler->lock);
2987
2988        if (grabbed)
2989                /* set V4L2_CTRL_FLAG_GRABBED */
2990                old = test_and_set_bit(1, &ctrl->flags);
2991        else
2992                /* clear V4L2_CTRL_FLAG_GRABBED */
2993                old = test_and_clear_bit(1, &ctrl->flags);
2994        if (old != grabbed)
2995                send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_FLAGS);
2996}
2997EXPORT_SYMBOL(__v4l2_ctrl_grab);
2998
2999/* Log the control name and value */
3000static void log_ctrl(const struct v4l2_ctrl *ctrl,
3001                     const char *prefix, const char *colon)
3002{
3003        if (ctrl->flags & (V4L2_CTRL_FLAG_DISABLED | V4L2_CTRL_FLAG_WRITE_ONLY))
3004                return;
3005        if (ctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
3006                return;
3007
3008        pr_info("%s%s%s: ", prefix, colon, ctrl->name);
3009
3010        ctrl->type_ops->log(ctrl);
3011
3012        if (ctrl->flags & (V4L2_CTRL_FLAG_INACTIVE |
3013                           V4L2_CTRL_FLAG_GRABBED |
3014                           V4L2_CTRL_FLAG_VOLATILE)) {
3015                if (ctrl->flags & V4L2_CTRL_FLAG_INACTIVE)
3016                        pr_cont(" inactive");
3017                if (ctrl->flags & V4L2_CTRL_FLAG_GRABBED)
3018                        pr_cont(" grabbed");
3019                if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE)
3020                        pr_cont(" volatile");
3021        }
3022        pr_cont("\n");
3023}
3024
3025/* Log all controls owned by the handler */
3026void v4l2_ctrl_handler_log_status(struct v4l2_ctrl_handler *hdl,
3027                                  const char *prefix)
3028{
3029        struct v4l2_ctrl *ctrl;
3030        const char *colon = "";
3031        int len;
3032
3033        if (hdl == NULL)
3034                return;
3035        if (prefix == NULL)
3036                prefix = "";
3037        len = strlen(prefix);
3038        if (len && prefix[len - 1] != ' ')
3039                colon = ": ";
3040        mutex_lock(hdl->lock);
3041        list_for_each_entry(ctrl, &hdl->ctrls, node)
3042                if (!(ctrl->flags & V4L2_CTRL_FLAG_DISABLED))
3043                        log_ctrl(ctrl, prefix, colon);
3044        mutex_unlock(hdl->lock);
3045}
3046EXPORT_SYMBOL(v4l2_ctrl_handler_log_status);
3047
3048int v4l2_ctrl_subdev_log_status(struct v4l2_subdev *sd)
3049{
3050        v4l2_ctrl_handler_log_status(sd->ctrl_handler, sd->name);
3051        return 0;
3052}
3053EXPORT_SYMBOL(v4l2_ctrl_subdev_log_status);
3054
3055/* Call s_ctrl for all controls owned by the handler */
3056int __v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler *hdl)
3057{
3058        struct v4l2_ctrl *ctrl;
3059        int ret = 0;
3060
3061        if (hdl == NULL)
3062                return 0;
3063
3064        lockdep_assert_held(hdl->lock);
3065
3066        list_for_each_entry(ctrl, &hdl->ctrls, node)
3067                ctrl->done = false;
3068
3069        list_for_each_entry(ctrl, &hdl->ctrls, node) {
3070                struct v4l2_ctrl *master = ctrl->cluster[0];
3071                int i;
3072
3073                /* Skip if this control was already handled by a cluster. */
3074                /* Skip button controls and read-only controls. */
3075                if (ctrl->done || ctrl->type == V4L2_CTRL_TYPE_BUTTON ||
3076                    (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY))
3077                        continue;
3078
3079                for (i = 0; i < master->ncontrols; i++) {
3080                        if (master->cluster[i]) {
3081                                cur_to_new(master->cluster[i]);
3082                                master->cluster[i]->is_new = 1;
3083                                master->cluster[i]->done = true;
3084                        }
3085                }
3086                ret = call_op(master, s_ctrl);
3087                if (ret)
3088                        break;
3089        }
3090
3091        return ret;
3092}
3093EXPORT_SYMBOL_GPL(__v4l2_ctrl_handler_setup);
3094
3095int v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler *hdl)
3096{
3097        int ret;
3098
3099        if (hdl == NULL)
3100                return 0;
3101
3102        mutex_lock(hdl->lock);
3103        ret = __v4l2_ctrl_handler_setup(hdl);
3104        mutex_unlock(hdl->lock);
3105
3106        return ret;
3107}
3108EXPORT_SYMBOL(v4l2_ctrl_handler_setup);
3109
3110/* Implement VIDIOC_QUERY_EXT_CTRL */
3111int v4l2_query_ext_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_query_ext_ctrl *qc)
3112{
3113        const unsigned next_flags = V4L2_CTRL_FLAG_NEXT_CTRL | V4L2_CTRL_FLAG_NEXT_COMPOUND;
3114        u32 id = qc->id & V4L2_CTRL_ID_MASK;
3115        struct v4l2_ctrl_ref *ref;
3116        struct v4l2_ctrl *ctrl;
3117
3118        if (hdl == NULL)
3119                return -EINVAL;
3120
3121        mutex_lock(hdl->lock);
3122
3123        /* Try to find it */
3124        ref = find_ref(hdl, id);
3125
3126        if ((qc->id & next_flags) && !list_empty(&hdl->ctrl_refs)) {
3127                bool is_compound;
3128                /* Match any control that is not hidden */
3129                unsigned mask = 1;
3130                bool match = false;
3131
3132                if ((qc->id & next_flags) == V4L2_CTRL_FLAG_NEXT_COMPOUND) {
3133                        /* Match any hidden control */
3134                        match = true;
3135                } else if ((qc->id & next_flags) == next_flags) {
3136                        /* Match any control, compound or not */
3137                        mask = 0;
3138                }
3139
3140                /* Find the next control with ID > qc->id */
3141
3142                /* Did we reach the end of the control list? */
3143                if (id >= node2id(hdl->ctrl_refs.prev)) {
3144                        ref = NULL; /* Yes, so there is no next control */
3145                } else if (ref) {
3146                        /* We found a control with the given ID, so just get
3147                           the next valid one in the list. */
3148                        list_for_each_entry_continue(ref, &hdl->ctrl_refs, node) {
3149                                is_compound = ref->ctrl->is_array ||
3150                                        ref->ctrl->type >= V4L2_CTRL_COMPOUND_TYPES;
3151                                if (id < ref->ctrl->id &&
3152                                    (is_compound & mask) == match)
3153                                        break;
3154                        }
3155                        if (&ref->node == &hdl->ctrl_refs)
3156                                ref = NULL;
3157                } else {
3158                        /* No control with the given ID exists, so start
3159                           searching for the next largest ID. We know there
3160                           is one, otherwise the first 'if' above would have
3161                           been true. */
3162                        list_for_each_entry(ref, &hdl->ctrl_refs, node) {
3163                                is_compound = ref->ctrl->is_array ||
3164                                        ref->ctrl->type >= V4L2_CTRL_COMPOUND_TYPES;
3165                                if (id < ref->ctrl->id &&
3166                                    (is_compound & mask) == match)
3167                                        break;
3168                        }
3169                        if (&ref->node == &hdl->ctrl_refs)
3170                                ref = NULL;
3171                }
3172        }
3173        mutex_unlock(hdl->lock);
3174
3175        if (!ref)
3176                return -EINVAL;
3177
3178        ctrl = ref->ctrl;
3179        memset(qc, 0, sizeof(*qc));
3180        if (id >= V4L2_CID_PRIVATE_BASE)
3181                qc->id = id;
3182        else
3183                qc->id = ctrl->id;
3184        strscpy(qc->name, ctrl->name, sizeof(qc->name));
3185        qc->flags = user_flags(ctrl);
3186        qc->type = ctrl->type;
3187        qc->elem_size = ctrl->elem_size;
3188        qc->elems = ctrl->elems;
3189        qc->nr_of_dims = ctrl->nr_of_dims;
3190        memcpy(qc->dims, ctrl->dims, qc->nr_of_dims * sizeof(qc->dims[0]));
3191        qc->minimum = ctrl->minimum;
3192        qc->maximum = ctrl->maximum;
3193        qc->default_value = ctrl->default_value;
3194        if (ctrl->type == V4L2_CTRL_TYPE_MENU
3195            || ctrl->type == V4L2_CTRL_TYPE_INTEGER_MENU)
3196                qc->step = 1;
3197        else
3198                qc->step = ctrl->step;
3199        return 0;
3200}
3201EXPORT_SYMBOL(v4l2_query_ext_ctrl);
3202
3203/* Implement VIDIOC_QUERYCTRL */
3204int v4l2_queryctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc)
3205{
3206        struct v4l2_query_ext_ctrl qec = { qc->id };
3207        int rc;
3208
3209        rc = v4l2_query_ext_ctrl(hdl, &qec);
3210        if (rc)
3211                return rc;
3212
3213        qc->id = qec.id;
3214        qc->type = qec.type;
3215        qc->flags = qec.flags;
3216        strscpy(qc->name, qec.name, sizeof(qc->name));
3217        switch (qc->type) {
3218        case V4L2_CTRL_TYPE_INTEGER:
3219        case V4L2_CTRL_TYPE_BOOLEAN:
3220        case V4L2_CTRL_TYPE_MENU:
3221        case V4L2_CTRL_TYPE_INTEGER_MENU:
3222        case V4L2_CTRL_TYPE_STRING:
3223        case V4L2_CTRL_TYPE_BITMASK:
3224                qc->minimum = qec.minimum;
3225                qc->maximum = qec.maximum;
3226                qc->step = qec.step;
3227                qc->default_value = qec.default_value;
3228                break;
3229        default:
3230                qc->minimum = 0;
3231                qc->maximum = 0;
3232                qc->step = 0;
3233                qc->default_value = 0;
3234                break;
3235        }
3236        return 0;
3237}
3238EXPORT_SYMBOL(v4l2_queryctrl);
3239
3240/* Implement VIDIOC_QUERYMENU */
3241int v4l2_querymenu(struct v4l2_ctrl_handler *hdl, struct v4l2_querymenu *qm)
3242{
3243        struct v4l2_ctrl *ctrl;
3244        u32 i = qm->index;
3245
3246        ctrl = v4l2_ctrl_find(hdl, qm->id);
3247        if (!ctrl)
3248                return -EINVAL;
3249
3250        qm->reserved = 0;
3251        /* Sanity checks */
3252        switch (ctrl->type) {
3253        case V4L2_CTRL_TYPE_MENU:
3254                if (ctrl->qmenu == NULL)
3255                        return -EINVAL;
3256                break;
3257        case V4L2_CTRL_TYPE_INTEGER_MENU:
3258                if (ctrl->qmenu_int == NULL)
3259                        return -EINVAL;
3260                break;
3261        default:
3262                return -EINVAL;
3263        }
3264
3265        if (i < ctrl->minimum || i > ctrl->maximum)
3266                return -EINVAL;
3267
3268        /* Use mask to see if this menu item should be skipped */
3269        if (ctrl->menu_skip_mask & (1ULL << i))
3270                return -EINVAL;
3271        /* Empty menu items should also be skipped */
3272        if (ctrl->type == V4L2_CTRL_TYPE_MENU) {
3273                if (ctrl->qmenu[i] == NULL || ctrl->qmenu[i][0] == '\0')
3274                        return -EINVAL;
3275                strscpy(qm->name, ctrl->qmenu[i], sizeof(qm->name));
3276        } else {
3277                qm->value = ctrl->qmenu_int[i];
3278        }
3279        return 0;
3280}
3281EXPORT_SYMBOL(v4l2_querymenu);
3282
3283static int v4l2_ctrl_request_clone(struct v4l2_ctrl_handler *hdl,
3284                                   const struct v4l2_ctrl_handler *from)
3285{
3286        struct v4l2_ctrl_ref *ref;
3287        int err = 0;
3288
3289        if (WARN_ON(!hdl || hdl == from))
3290                return -EINVAL;
3291
3292        if (hdl->error)
3293                return hdl->error;
3294
3295        WARN_ON(hdl->lock != &hdl->_lock);
3296
3297        mutex_lock(from->lock);
3298        list_for_each_entry(ref, &from->ctrl_refs, node) {
3299                struct v4l2_ctrl *ctrl = ref->ctrl;
3300                struct v4l2_ctrl_ref *new_ref;
3301
3302                /* Skip refs inherited from other devices */
3303                if (ref->from_other_dev)
3304                        continue;
3305                /* And buttons */
3306                if (ctrl->type == V4L2_CTRL_TYPE_BUTTON)
3307                        continue;
3308                err = handler_new_ref(hdl, ctrl, &new_ref, false, true);
3309                if (err)
3310                        break;
3311        }
3312        mutex_unlock(from->lock);
3313        return err;
3314}
3315
3316static void v4l2_ctrl_request_queue(struct media_request_object *obj)
3317{
3318        struct v4l2_ctrl_handler *hdl =
3319                container_of(obj, struct v4l2_ctrl_handler, req_obj);
3320        struct v4l2_ctrl_handler *main_hdl = obj->priv;
3321        struct v4l2_ctrl_handler *prev_hdl = NULL;
3322        struct v4l2_ctrl_ref *ref_ctrl, *ref_ctrl_prev = NULL;
3323
3324        mutex_lock(main_hdl->lock);
3325        if (list_empty(&main_hdl->requests_queued))
3326                goto queue;
3327
3328        prev_hdl = list_last_entry(&main_hdl->requests_queued,
3329                                   struct v4l2_ctrl_handler, requests_queued);
3330        /*
3331         * Note: prev_hdl and hdl must contain the same list of control
3332         * references, so if any differences are detected then that is a
3333         * driver bug and the WARN_ON is triggered.
3334         */
3335        mutex_lock(prev_hdl->lock);
3336        ref_ctrl_prev = list_first_entry(&prev_hdl->ctrl_refs,
3337                                         struct v4l2_ctrl_ref, node);
3338        list_for_each_entry(ref_ctrl, &hdl->ctrl_refs, node) {
3339                if (ref_ctrl->req)
3340                        continue;
3341                while (ref_ctrl_prev->ctrl->id < ref_ctrl->ctrl->id) {
3342                        /* Should never happen, but just in case... */
3343                        if (list_is_last(&ref_ctrl_prev->node,
3344                                         &prev_hdl->ctrl_refs))
3345                                break;
3346                        ref_ctrl_prev = list_next_entry(ref_ctrl_prev, node);
3347                }
3348                if (WARN_ON(ref_ctrl_prev->ctrl->id != ref_ctrl->ctrl->id))
3349                        break;
3350                ref_ctrl->req = ref_ctrl_prev->req;
3351        }
3352        mutex_unlock(prev_hdl->lock);
3353queue:
3354        list_add_tail(&hdl->requests_queued, &main_hdl->requests_queued);
3355        hdl->request_is_queued = true;
3356        mutex_unlock(main_hdl->lock);
3357}
3358
3359static void v4l2_ctrl_request_unbind(struct media_request_object *obj)
3360{
3361        struct v4l2_ctrl_handler *hdl =
3362                container_of(obj, struct v4l2_ctrl_handler, req_obj);
3363        struct v4l2_ctrl_handler *main_hdl = obj->priv;
3364
3365        list_del_init(&hdl->requests);
3366        mutex_lock(main_hdl->lock);
3367        if (hdl->request_is_queued) {
3368                list_del_init(&hdl->requests_queued);
3369                hdl->request_is_queued = false;
3370        }
3371        mutex_unlock(main_hdl->lock);
3372}
3373
3374static void v4l2_ctrl_request_release(struct media_request_object *obj)
3375{
3376        struct v4l2_ctrl_handler *hdl =
3377                container_of(obj, struct v4l2_ctrl_handler, req_obj);
3378
3379        v4l2_ctrl_handler_free(hdl);
3380        kfree(hdl);
3381}
3382
3383static const struct media_request_object_ops req_ops = {
3384        .queue = v4l2_ctrl_request_queue,
3385        .unbind = v4l2_ctrl_request_unbind,
3386        .release = v4l2_ctrl_request_release,
3387};
3388
3389struct v4l2_ctrl_handler *v4l2_ctrl_request_hdl_find(struct media_request *req,
3390                                        struct v4l2_ctrl_handler *parent)
3391{
3392        struct media_request_object *obj;
3393
3394        if (WARN_ON(req->state != MEDIA_REQUEST_STATE_VALIDATING &&
3395                    req->state != MEDIA_REQUEST_STATE_QUEUED))
3396                return NULL;
3397
3398        obj = media_request_object_find(req, &req_ops, parent);
3399        if (obj)
3400                return container_of(obj, struct v4l2_ctrl_handler, req_obj);
3401        return NULL;
3402}
3403EXPORT_SYMBOL_GPL(v4l2_ctrl_request_hdl_find);
3404
3405struct v4l2_ctrl *
3406v4l2_ctrl_request_hdl_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id)
3407{
3408        struct v4l2_ctrl_ref *ref = find_ref_lock(hdl, id);
3409
3410        return (ref && ref->req == ref) ? ref->ctrl : NULL;
3411}
3412EXPORT_SYMBOL_GPL(v4l2_ctrl_request_hdl_ctrl_find);
3413
3414static int v4l2_ctrl_request_bind(struct media_request *req,
3415                           struct v4l2_ctrl_handler *hdl,
3416                           struct v4l2_ctrl_handler *from)
3417{
3418        int ret;
3419
3420        ret = v4l2_ctrl_request_clone(hdl, from);
3421
3422        if (!ret) {
3423                ret = media_request_object_bind(req, &req_ops,
3424                                                from, false, &hdl->req_obj);
3425                if (!ret)
3426                        list_add_tail(&hdl->requests, &from->requests);
3427        }
3428        return ret;
3429}
3430
3431/* Some general notes on the atomic requirements of VIDIOC_G/TRY/S_EXT_CTRLS:
3432
3433   It is not a fully atomic operation, just best-effort only. After all, if
3434   multiple controls have to be set through multiple i2c writes (for example)
3435   then some initial writes may succeed while others fail. Thus leaving the
3436   system in an inconsistent state. The question is how much effort you are
3437   willing to spend on trying to make something atomic that really isn't.
3438
3439   From the point of view of an application the main requirement is that
3440   when you call VIDIOC_S_EXT_CTRLS and some values are invalid then an
3441   error should be returned without actually affecting any controls.
3442
3443   If all the values are correct, then it is acceptable to just give up
3444   in case of low-level errors.
3445
3446   It is important though that the application can tell when only a partial
3447   configuration was done. The way we do that is through the error_idx field
3448   of struct v4l2_ext_controls: if that is equal to the count field then no
3449   controls were affected. Otherwise all controls before that index were
3450   successful in performing their 'get' or 'set' operation, the control at
3451   the given index failed, and you don't know what happened with the controls
3452   after the failed one. Since if they were part of a control cluster they
3453   could have been successfully processed (if a cluster member was encountered
3454   at index < error_idx), they could have failed (if a cluster member was at
3455   error_idx), or they may not have been processed yet (if the first cluster
3456   member appeared after error_idx).
3457
3458   It is all fairly theoretical, though. In practice all you can do is to
3459   bail out. If error_idx == count, then it is an application bug. If
3460   error_idx < count then it is only an application bug if the error code was
3461   EBUSY. That usually means that something started streaming just when you
3462   tried to set the controls. In all other cases it is a driver/hardware
3463   problem and all you can do is to retry or bail out.
3464
3465   Note that these rules do not apply to VIDIOC_TRY_EXT_CTRLS: since that
3466   never modifies controls the error_idx is just set to whatever control
3467   has an invalid value.
3468 */
3469
3470/* Prepare for the extended g/s/try functions.
3471   Find the controls in the control array and do some basic checks. */
3472static int prepare_ext_ctrls(struct v4l2_ctrl_handler *hdl,
3473                             struct v4l2_ext_controls *cs,
3474                             struct v4l2_ctrl_helper *helpers,
3475                             struct video_device *vdev,
3476                             bool get)
3477{
3478        struct v4l2_ctrl_helper *h;
3479        bool have_clusters = false;
3480        u32 i;
3481
3482        for (i = 0, h = helpers; i < cs->count; i++, h++) {
3483                struct v4l2_ext_control *c = &cs->controls[i];
3484                struct v4l2_ctrl_ref *ref;
3485                struct v4l2_ctrl *ctrl;
3486                u32 id = c->id & V4L2_CTRL_ID_MASK;
3487
3488                cs->error_idx = i;
3489
3490                if (cs->which &&
3491                    cs->which != V4L2_CTRL_WHICH_DEF_VAL &&
3492                    cs->which != V4L2_CTRL_WHICH_REQUEST_VAL &&
3493                    V4L2_CTRL_ID2WHICH(id) != cs->which) {
3494                        dprintk(vdev,
3495                                "invalid which 0x%x or control id 0x%x\n",
3496                                cs->which, id);
3497                        return -EINVAL;
3498                }
3499
3500                /* Old-style private controls are not allowed for
3501                   extended controls */
3502                if (id >= V4L2_CID_PRIVATE_BASE) {
3503                        dprintk(vdev,
3504                                "old-style private controls not allowed\n");
3505                        return -EINVAL;
3506                }
3507                ref = find_ref_lock(hdl, id);
3508                if (ref == NULL) {
3509                        dprintk(vdev, "cannot find control id 0x%x\n", id);
3510                        return -EINVAL;
3511                }
3512                h->ref = ref;
3513                ctrl = ref->ctrl;
3514                if (ctrl->flags & V4L2_CTRL_FLAG_DISABLED) {
3515                        dprintk(vdev, "control id 0x%x is disabled\n", id);
3516                        return -EINVAL;
3517                }
3518
3519                if (ctrl->cluster[0]->ncontrols > 1)
3520                        have_clusters = true;
3521                if (ctrl->cluster[0] != ctrl)
3522                        ref = find_ref_lock(hdl, ctrl->cluster[0]->id);
3523                if (ctrl->is_ptr && !ctrl->is_string) {
3524                        unsigned tot_size = ctrl->elems * ctrl->elem_size;
3525
3526                        if (c->size < tot_size) {
3527                                /*
3528                                 * In the get case the application first
3529                                 * queries to obtain the size of the control.
3530                                 */
3531                                if (get) {
3532                                        c->size = tot_size;
3533                                        return -ENOSPC;
3534                                }
3535                                dprintk(vdev,
3536                                        "pointer control id 0x%x size too small, %d bytes but %d bytes needed\n",
3537                                        id, c->size, tot_size);
3538                                return -EFAULT;
3539                        }
3540                        c->size = tot_size;
3541                }
3542                /* Store the ref to the master control of the cluster */
3543                h->mref = ref;
3544                /* Initially set next to 0, meaning that there is no other
3545                   control in this helper array belonging to the same
3546                   cluster */
3547                h->next = 0;
3548        }
3549
3550        /* We are done if there were no controls that belong to a multi-
3551           control cluster. */
3552        if (!have_clusters)
3553                return 0;
3554
3555        /* The code below figures out in O(n) time which controls in the list
3556           belong to the same cluster. */
3557
3558        /* This has to be done with the handler lock taken. */
3559        mutex_lock(hdl->lock);
3560
3561        /* First zero the helper field in the master control references */
3562        for (i = 0; i < cs->count; i++)
3563                helpers[i].mref->helper = NULL;
3564        for (i = 0, h = helpers; i < cs->count; i++, h++) {
3565                struct v4l2_ctrl_ref *mref = h->mref;
3566
3567                /* If the mref->helper is set, then it points to an earlier
3568                   helper that belongs to the same cluster. */
3569                if (mref->helper) {
3570                        /* Set the next field of mref->helper to the current
3571                           index: this means that that earlier helper now
3572                           points to the next helper in the same cluster. */
3573                        mref->helper->next = i;
3574                        /* mref should be set only for the first helper in the
3575                           cluster, clear the others. */
3576                        h->mref = NULL;
3577                }
3578                /* Point the mref helper to the current helper struct. */
3579                mref->helper = h;
3580        }
3581        mutex_unlock(hdl->lock);
3582        return 0;
3583}
3584
3585/* Handles the corner case where cs->count == 0. It checks whether the
3586   specified control class exists. If that class ID is 0, then it checks
3587   whether there are any controls at all. */
3588static int class_check(struct v4l2_ctrl_handler *hdl, u32 which)
3589{
3590        if (which == 0 || which == V4L2_CTRL_WHICH_DEF_VAL ||
3591            which == V4L2_CTRL_WHICH_REQUEST_VAL)
3592                return 0;
3593        return find_ref_lock(hdl, which | 1) ? 0 : -EINVAL;
3594}
3595
3596/* Get extended controls. Allocates the helpers array if needed. */
3597static int v4l2_g_ext_ctrls_common(struct v4l2_ctrl_handler *hdl,
3598                                   struct v4l2_ext_controls *cs,
3599                                   struct video_device *vdev)
3600{
3601        struct v4l2_ctrl_helper helper[4];
3602        struct v4l2_ctrl_helper *helpers = helper;
3603        int ret;
3604        int i, j;
3605        bool def_value;
3606
3607        def_value = (cs->which == V4L2_CTRL_WHICH_DEF_VAL);
3608
3609        cs->error_idx = cs->count;
3610        cs->which = V4L2_CTRL_ID2WHICH(cs->which);
3611
3612        if (hdl == NULL)
3613                return -EINVAL;
3614
3615        if (cs->count == 0)
3616                return class_check(hdl, cs->which);
3617
3618        if (cs->count > ARRAY_SIZE(helper)) {
3619                helpers = kvmalloc_array(cs->count, sizeof(helper[0]),
3620                                         GFP_KERNEL);
3621                if (helpers == NULL)
3622                        return -ENOMEM;
3623        }
3624
3625        ret = prepare_ext_ctrls(hdl, cs, helpers, vdev, true);
3626        cs->error_idx = cs->count;
3627
3628        for (i = 0; !ret && i < cs->count; i++)
3629                if (helpers[i].ref->ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY)
3630                        ret = -EACCES;
3631
3632        for (i = 0; !ret && i < cs->count; i++) {
3633                int (*ctrl_to_user)(struct v4l2_ext_control *c,
3634                                    struct v4l2_ctrl *ctrl);
3635                struct v4l2_ctrl *master;
3636
3637                ctrl_to_user = def_value ? def_to_user : cur_to_user;
3638
3639                if (helpers[i].mref == NULL)
3640                        continue;
3641
3642                master = helpers[i].mref->ctrl;
3643                cs->error_idx = i;
3644
3645                v4l2_ctrl_lock(master);
3646
3647                /* g_volatile_ctrl will update the new control values */
3648                if (!def_value &&
3649                    ((master->flags & V4L2_CTRL_FLAG_VOLATILE) ||
3650                    (master->has_volatiles && !is_cur_manual(master)))) {
3651                        for (j = 0; j < master->ncontrols; j++)
3652                                cur_to_new(master->cluster[j]);
3653                        ret = call_op(master, g_volatile_ctrl);
3654                        ctrl_to_user = new_to_user;
3655                }
3656                /* If OK, then copy the current (for non-volatile controls)
3657                   or the new (for volatile controls) control values to the
3658                   caller */
3659                if (!ret) {
3660                        u32 idx = i;
3661
3662                        do {
3663                                if (helpers[idx].ref->req)
3664                                        ret = req_to_user(cs->controls + idx,
3665                                                helpers[idx].ref->req);
3666                                else
3667                                        ret = ctrl_to_user(cs->controls + idx,
3668                                                helpers[idx].ref->ctrl);
3669                                idx = helpers[idx].next;
3670                        } while (!ret && idx);
3671                }
3672                v4l2_ctrl_unlock(master);
3673        }
3674
3675        if (cs->count > ARRAY_SIZE(helper))
3676                kvfree(helpers);
3677        return ret;
3678}
3679
3680static struct media_request_object *
3681v4l2_ctrls_find_req_obj(struct v4l2_ctrl_handler *hdl,
3682                        struct media_request *req, bool set)
3683{
3684        struct media_request_object *obj;
3685        struct v4l2_ctrl_handler *new_hdl;
3686        int ret;
3687
3688        if (IS_ERR(req))
3689                return ERR_CAST(req);
3690
3691        if (set && WARN_ON(req->state != MEDIA_REQUEST_STATE_UPDATING))
3692                return ERR_PTR(-EBUSY);
3693
3694        obj = media_request_object_find(req, &req_ops, hdl);
3695        if (obj)
3696                return obj;
3697        if (!set)
3698                return ERR_PTR(-ENOENT);
3699
3700        new_hdl = kzalloc(sizeof(*new_hdl), GFP_KERNEL);
3701        if (!new_hdl)
3702                return ERR_PTR(-ENOMEM);
3703
3704        obj = &new_hdl->req_obj;
3705        ret = v4l2_ctrl_handler_init(new_hdl, (hdl->nr_of_buckets - 1) * 8);
3706        if (!ret)
3707                ret = v4l2_ctrl_request_bind(req, new_hdl, hdl);
3708        if (ret) {
3709                kfree(new_hdl);
3710
3711                return ERR_PTR(ret);
3712        }
3713
3714        media_request_object_get(obj);
3715        return obj;
3716}
3717
3718int v4l2_g_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct video_device *vdev,
3719                     struct media_device *mdev, struct v4l2_ext_controls *cs)
3720{
3721        struct media_request_object *obj = NULL;
3722        struct media_request *req = NULL;
3723        int ret;
3724
3725        if (cs->which == V4L2_CTRL_WHICH_REQUEST_VAL) {
3726                if (!mdev || cs->request_fd < 0)
3727                        return -EINVAL;
3728
3729                req = media_request_get_by_fd(mdev, cs->request_fd);
3730                if (IS_ERR(req))
3731                        return PTR_ERR(req);
3732
3733                if (req->state != MEDIA_REQUEST_STATE_COMPLETE) {
3734                        media_request_put(req);
3735                        return -EACCES;
3736                }
3737
3738                ret = media_request_lock_for_access(req);
3739                if (ret) {
3740                        media_request_put(req);
3741                        return ret;
3742                }
3743
3744                obj = v4l2_ctrls_find_req_obj(hdl, req, false);
3745                if (IS_ERR(obj)) {
3746                        media_request_unlock_for_access(req);
3747                        media_request_put(req);
3748                        return PTR_ERR(obj);
3749                }
3750
3751                hdl = container_of(obj, struct v4l2_ctrl_handler,
3752                                   req_obj);
3753        }
3754
3755        ret = v4l2_g_ext_ctrls_common(hdl, cs, vdev);
3756
3757        if (obj) {
3758                media_request_unlock_for_access(req);
3759                media_request_object_put(obj);
3760                media_request_put(req);
3761        }
3762        return ret;
3763}
3764EXPORT_SYMBOL(v4l2_g_ext_ctrls);
3765
3766/* Helper function to get a single control */
3767static int get_ctrl(struct v4l2_ctrl *ctrl, struct v4l2_ext_control *c)
3768{
3769        struct v4l2_ctrl *master = ctrl->cluster[0];
3770        int ret = 0;
3771        int i;
3772
3773        /* Compound controls are not supported. The new_to_user() and
3774         * cur_to_user() calls below would need to be modified not to access
3775         * userspace memory when called from get_ctrl().
3776         */
3777        if (!ctrl->is_int && ctrl->type != V4L2_CTRL_TYPE_INTEGER64)
3778                return -EINVAL;
3779
3780        if (ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY)
3781                return -EACCES;
3782
3783        v4l2_ctrl_lock(master);
3784        /* g_volatile_ctrl will update the current control values */
3785        if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE) {
3786                for (i = 0; i < master->ncontrols; i++)
3787                        cur_to_new(master->cluster[i]);
3788                ret = call_op(master, g_volatile_ctrl);
3789                new_to_user(c, ctrl);
3790        } else {
3791                cur_to_user(c, ctrl);
3792        }
3793        v4l2_ctrl_unlock(master);
3794        return ret;
3795}
3796
3797int v4l2_g_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_control *control)
3798{
3799        struct v4l2_ctrl *ctrl = v4l2_ctrl_find(hdl, control->id);
3800        struct v4l2_ext_control c;
3801        int ret;
3802
3803        if (ctrl == NULL || !ctrl->is_int)
3804                return -EINVAL;
3805        ret = get_ctrl(ctrl, &c);
3806        control->value = c.value;
3807        return ret;
3808}
3809EXPORT_SYMBOL(v4l2_g_ctrl);
3810
3811s32 v4l2_ctrl_g_ctrl(struct v4l2_ctrl *ctrl)
3812{
3813        struct v4l2_ext_control c;
3814
3815        /* It's a driver bug if this happens. */
3816        if (WARN_ON(!ctrl->is_int))
3817                return 0;
3818        c.value = 0;
3819        get_ctrl(ctrl, &c);
3820        return c.value;
3821}
3822EXPORT_SYMBOL(v4l2_ctrl_g_ctrl);
3823
3824s64 v4l2_ctrl_g_ctrl_int64(struct v4l2_ctrl *ctrl)
3825{
3826        struct v4l2_ext_control c;
3827
3828        /* It's a driver bug if this happens. */
3829        if (WARN_ON(ctrl->is_ptr || ctrl->type != V4L2_CTRL_TYPE_INTEGER64))
3830                return 0;
3831        c.value64 = 0;
3832        get_ctrl(ctrl, &c);
3833        return c.value64;
3834}
3835EXPORT_SYMBOL(v4l2_ctrl_g_ctrl_int64);
3836
3837
3838/* Core function that calls try/s_ctrl and ensures that the new value is
3839   copied to the current value on a set.
3840   Must be called with ctrl->handler->lock held. */
3841static int try_or_set_cluster(struct v4l2_fh *fh, struct v4l2_ctrl *master,
3842                              bool set, u32 ch_flags)
3843{
3844        bool update_flag;
3845        int ret;
3846        int i;
3847
3848        /* Go through the cluster and either validate the new value or
3849           (if no new value was set), copy the current value to the new
3850           value, ensuring a consistent view for the control ops when
3851           called. */
3852        for (i = 0; i < master->ncontrols; i++) {
3853                struct v4l2_ctrl *ctrl = master->cluster[i];
3854
3855                if (ctrl == NULL)
3856                        continue;
3857
3858                if (!ctrl->is_new) {
3859                        cur_to_new(ctrl);
3860                        continue;
3861                }
3862                /* Check again: it may have changed since the
3863                   previous check in try_or_set_ext_ctrls(). */
3864                if (set && (ctrl->flags & V4L2_CTRL_FLAG_GRABBED))
3865                        return -EBUSY;
3866        }
3867
3868        ret = call_op(master, try_ctrl);
3869
3870        /* Don't set if there is no change */
3871        if (ret || !set || !cluster_changed(master))
3872                return ret;
3873        ret = call_op(master, s_ctrl);
3874        if (ret)
3875                return ret;
3876
3877        /* If OK, then make the new values permanent. */
3878        update_flag = is_cur_manual(master) != is_new_manual(master);
3879
3880        for (i = 0; i < master->ncontrols; i++) {
3881                /*
3882                 * If we switch from auto to manual mode, and this cluster
3883                 * contains volatile controls, then all non-master controls
3884                 * have to be marked as changed. The 'new' value contains
3885                 * the volatile value (obtained by update_from_auto_cluster),
3886                 * which now has to become the current value.
3887                 */
3888                if (i && update_flag && is_new_manual(master) &&
3889                    master->has_volatiles && master->cluster[i])
3890                        master->cluster[i]->has_changed = true;
3891
3892                new_to_cur(fh, master->cluster[i], ch_flags |
3893                        ((update_flag && i > 0) ? V4L2_EVENT_CTRL_CH_FLAGS : 0));
3894        }
3895        return 0;
3896}
3897
3898/* Validate controls. */
3899static int validate_ctrls(struct v4l2_ext_controls *cs,
3900                          struct v4l2_ctrl_helper *helpers,
3901                          struct video_device *vdev,
3902                          bool set)
3903{
3904        unsigned i;
3905        int ret = 0;
3906
3907        cs->error_idx = cs->count;
3908        for (i = 0; i < cs->count; i++) {
3909                struct v4l2_ctrl *ctrl = helpers[i].ref->ctrl;
3910                union v4l2_ctrl_ptr p_new;
3911
3912                cs->error_idx = i;
3913
3914                if (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY) {
3915                        dprintk(vdev,
3916                                "control id 0x%x is read-only\n",
3917                                ctrl->id);
3918                        return -EACCES;
3919                }
3920                /* This test is also done in try_set_control_cluster() which
3921                   is called in atomic context, so that has the final say,
3922                   but it makes sense to do an up-front check as well. Once
3923                   an error occurs in try_set_control_cluster() some other
3924                   controls may have been set already and we want to do a
3925                   best-effort to avoid that. */
3926                if (set && (ctrl->flags & V4L2_CTRL_FLAG_GRABBED)) {
3927                        dprintk(vdev,
3928                                "control id 0x%x is grabbed, cannot set\n",
3929                                ctrl->id);
3930                        return -EBUSY;
3931                }
3932                /*
3933                 * Skip validation for now if the payload needs to be copied
3934                 * from userspace into kernelspace. We'll validate those later.
3935                 */
3936                if (ctrl->is_ptr)
3937                        continue;
3938                if (ctrl->type == V4L2_CTRL_TYPE_INTEGER64)
3939                        p_new.p_s64 = &cs->controls[i].value64;
3940                else
3941                        p_new.p_s32 = &cs->controls[i].value;
3942                ret = validate_new(ctrl, p_new);
3943                if (ret)
3944                        return ret;
3945        }
3946        return 0;
3947}
3948
3949/* Obtain the current volatile values of an autocluster and mark them
3950   as new. */
3951static void update_from_auto_cluster(struct v4l2_ctrl *master)
3952{
3953        int i;
3954
3955        for (i = 1; i < master->ncontrols; i++)
3956                cur_to_new(master->cluster[i]);
3957        if (!call_op(master, g_volatile_ctrl))
3958                for (i = 1; i < master->ncontrols; i++)
3959                        if (master->cluster[i])
3960                                master->cluster[i]->is_new = 1;
3961}
3962
3963/* Try or try-and-set controls */
3964static int try_set_ext_ctrls_common(struct v4l2_fh *fh,
3965                                    struct v4l2_ctrl_handler *hdl,
3966                                    struct v4l2_ext_controls *cs,
3967                                    struct video_device *vdev, bool set)
3968{
3969        struct v4l2_ctrl_helper helper[4];
3970        struct v4l2_ctrl_helper *helpers = helper;
3971        unsigned i, j;
3972        int ret;
3973
3974        cs->error_idx = cs->count;
3975
3976        /* Default value cannot be changed */
3977        if (cs->which == V4L2_CTRL_WHICH_DEF_VAL) {
3978                dprintk(vdev, "%s: cannot change default value\n",
3979                        video_device_node_name(vdev));
3980                return -EINVAL;
3981        }
3982
3983        cs->which = V4L2_CTRL_ID2WHICH(cs->which);
3984
3985        if (hdl == NULL) {
3986                dprintk(vdev, "%s: invalid null control handler\n",
3987                        video_device_node_name(vdev));
3988                return -EINVAL;
3989        }
3990
3991        if (cs->count == 0)
3992                return class_check(hdl, cs->which);
3993
3994        if (cs->count > ARRAY_SIZE(helper)) {
3995                helpers = kvmalloc_array(cs->count, sizeof(helper[0]),
3996                                         GFP_KERNEL);
3997                if (!helpers)
3998                        return -ENOMEM;
3999        }
4000        ret = prepare_ext_ctrls(hdl, cs, helpers, vdev, false);
4001        if (!ret)
4002                ret = validate_ctrls(cs, helpers, vdev, set);
4003        if (ret && set)
4004                cs->error_idx = cs->count;
4005        for (i = 0; !ret && i < cs->count; i++) {
4006                struct v4l2_ctrl *master;
4007                u32 idx = i;
4008
4009                if (helpers[i].mref == NULL)
4010                        continue;
4011
4012                cs->error_idx = i;
4013                master = helpers[i].mref->ctrl;
4014                v4l2_ctrl_lock(master);
4015
4016                /* Reset the 'is_new' flags of the cluster */
4017                for (j = 0; j < master->ncontrols; j++)
4018                        if (master->cluster[j])
4019                                master->cluster[j]->is_new = 0;
4020
4021                /* For volatile autoclusters that are currently in auto mode
4022                   we need to discover if it will be set to manual mode.
4023                   If so, then we have to copy the current volatile values
4024                   first since those will become the new manual values (which
4025                   may be overwritten by explicit new values from this set
4026                   of controls). */
4027                if (master->is_auto && master->has_volatiles &&
4028                                                !is_cur_manual(master)) {
4029                        /* Pick an initial non-manual value */
4030                        s32 new_auto_val = master->manual_mode_value + 1;
4031                        u32 tmp_idx = idx;
4032
4033                        do {
4034                                /* Check if the auto control is part of the
4035                                   list, and remember the new value. */
4036                                if (helpers[tmp_idx].ref->ctrl == master)
4037                                        new_auto_val = cs->controls[tmp_idx].value;
4038                                tmp_idx = helpers[tmp_idx].next;
4039                        } while (tmp_idx);
4040                        /* If the new value == the manual value, then copy
4041                           the current volatile values. */
4042                        if (new_auto_val == master->manual_mode_value)
4043                                update_from_auto_cluster(master);
4044                }
4045
4046                /* Copy the new caller-supplied control values.
4047                   user_to_new() sets 'is_new' to 1. */
4048                do {
4049                        struct v4l2_ctrl *ctrl = helpers[idx].ref->ctrl;
4050
4051                        ret = user_to_new(cs->controls + idx, ctrl);
4052                        if (!ret && ctrl->is_ptr)
4053                                ret = validate_new(ctrl, ctrl->p_new);
4054                        idx = helpers[idx].next;
4055                } while (!ret && idx);
4056
4057                if (!ret)
4058                        ret = try_or_set_cluster(fh, master,
4059                                                 !hdl->req_obj.req && set, 0);
4060                if (!ret && hdl->req_obj.req && set) {
4061                        for (j = 0; j < master->ncontrols; j++) {
4062                                struct v4l2_ctrl_ref *ref =
4063                                        find_ref(hdl, master->cluster[j]->id);
4064
4065                                new_to_req(ref);
4066                        }
4067                }
4068
4069                /* Copy the new values back to userspace. */
4070                if (!ret) {
4071                        idx = i;
4072                        do {
4073                                ret = new_to_user(cs->controls + idx,
4074                                                helpers[idx].ref->ctrl);
4075                                idx = helpers[idx].next;
4076                        } while (!ret && idx);
4077                }
4078                v4l2_ctrl_unlock(master);
4079        }
4080
4081        if (cs->count > ARRAY_SIZE(helper))
4082                kvfree(helpers);
4083        return ret;
4084}
4085
4086static int try_set_ext_ctrls(struct v4l2_fh *fh,
4087                             struct v4l2_ctrl_handler *hdl,
4088                             struct video_device *vdev,
4089                             struct media_device *mdev,
4090                             struct v4l2_ext_controls *cs, bool set)
4091{
4092        struct media_request_object *obj = NULL;
4093        struct media_request *req = NULL;
4094        int ret;
4095
4096        if (cs->which == V4L2_CTRL_WHICH_REQUEST_VAL) {
4097                if (!mdev) {
4098                        dprintk(vdev, "%s: missing media device\n",
4099                                video_device_node_name(vdev));
4100                        return -EINVAL;
4101                }
4102
4103                if (cs->request_fd < 0) {
4104                        dprintk(vdev, "%s: invalid request fd %d\n",
4105                                video_device_node_name(vdev), cs->request_fd);
4106                        return -EINVAL;
4107                }
4108
4109                req = media_request_get_by_fd(mdev, cs->request_fd);
4110                if (IS_ERR(req)) {
4111                        dprintk(vdev, "%s: cannot find request fd %d\n",
4112                                video_device_node_name(vdev), cs->request_fd);
4113                        return PTR_ERR(req);
4114                }
4115
4116                ret = media_request_lock_for_update(req);
4117                if (ret) {
4118                        dprintk(vdev, "%s: cannot lock request fd %d\n",
4119                                video_device_node_name(vdev), cs->request_fd);
4120                        media_request_put(req);
4121                        return ret;
4122                }
4123
4124                obj = v4l2_ctrls_find_req_obj(hdl, req, set);
4125                if (IS_ERR(obj)) {
4126                        dprintk(vdev,
4127                                "%s: cannot find request object for request fd %d\n",
4128                                video_device_node_name(vdev),
4129                                cs->request_fd);
4130                        media_request_unlock_for_update(req);
4131                        media_request_put(req);
4132                        return PTR_ERR(obj);
4133                }
4134                hdl = container_of(obj, struct v4l2_ctrl_handler,
4135                                   req_obj);
4136        }
4137
4138        ret = try_set_ext_ctrls_common(fh, hdl, cs, vdev, set);
4139        if (ret)
4140                dprintk(vdev,
4141                        "%s: try_set_ext_ctrls_common failed (%d)\n",
4142                        video_device_node_name(vdev), ret);
4143
4144        if (obj) {
4145                media_request_unlock_for_update(req);
4146                media_request_object_put(obj);
4147                media_request_put(req);
4148        }
4149
4150        return ret;
4151}
4152
4153int v4l2_try_ext_ctrls(struct v4l2_ctrl_handler *hdl,
4154                       struct video_device *vdev,
4155                       struct media_device *mdev,
4156                       struct v4l2_ext_controls *cs)
4157{
4158        return try_set_ext_ctrls(NULL, hdl, vdev, mdev, cs, false);
4159}
4160EXPORT_SYMBOL(v4l2_try_ext_ctrls);
4161
4162int v4l2_s_ext_ctrls(struct v4l2_fh *fh,
4163                     struct v4l2_ctrl_handler *hdl,
4164                     struct video_device *vdev,
4165                     struct media_device *mdev,
4166                     struct v4l2_ext_controls *cs)
4167{
4168        return try_set_ext_ctrls(fh, hdl, vdev, mdev, cs, true);
4169}
4170EXPORT_SYMBOL(v4l2_s_ext_ctrls);
4171
4172/* Helper function for VIDIOC_S_CTRL compatibility */
4173static int set_ctrl(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 ch_flags)
4174{
4175        struct v4l2_ctrl *master = ctrl->cluster[0];
4176        int ret;
4177        int i;
4178
4179        /* Reset the 'is_new' flags of the cluster */
4180        for (i = 0; i < master->ncontrols; i++)
4181                if (master->cluster[i])
4182                        master->cluster[i]->is_new = 0;
4183
4184        ret = validate_new(ctrl, ctrl->p_new);
4185        if (ret)
4186                return ret;
4187
4188        /* For autoclusters with volatiles that are switched from auto to
4189           manual mode we have to update the current volatile values since
4190           those will become the initial manual values after such a switch. */
4191        if (master->is_auto && master->has_volatiles && ctrl == master &&
4192            !is_cur_manual(master) && ctrl->val == master->manual_mode_value)
4193                update_from_auto_cluster(master);
4194
4195        ctrl->is_new = 1;
4196        return try_or_set_cluster(fh, master, true, ch_flags);
4197}
4198
4199/* Helper function for VIDIOC_S_CTRL compatibility */
4200static int set_ctrl_lock(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl,
4201                         struct v4l2_ext_control *c)
4202{
4203        int ret;
4204
4205        v4l2_ctrl_lock(ctrl);
4206        user_to_new(c, ctrl);
4207        ret = set_ctrl(fh, ctrl, 0);
4208        if (!ret)
4209                cur_to_user(c, ctrl);
4210        v4l2_ctrl_unlock(ctrl);
4211        return ret;
4212}
4213
4214int v4l2_s_ctrl(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl,
4215                                        struct v4l2_control *control)
4216{
4217        struct v4l2_ctrl *ctrl = v4l2_ctrl_find(hdl, control->id);
4218        struct v4l2_ext_control c = { control->id };
4219        int ret;
4220
4221        if (ctrl == NULL || !ctrl->is_int)
4222                return -EINVAL;
4223
4224        if (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY)
4225                return -EACCES;
4226
4227        c.value = control->value;
4228        ret = set_ctrl_lock(fh, ctrl, &c);
4229        control->value = c.value;
4230        return ret;
4231}
4232EXPORT_SYMBOL(v4l2_s_ctrl);
4233
4234int __v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val)
4235{
4236        lockdep_assert_held(ctrl->handler->lock);
4237
4238        /* It's a driver bug if this happens. */
4239        if (WARN_ON(!ctrl->is_int))
4240                return -EINVAL;
4241        ctrl->val = val;
4242        return set_ctrl(NULL, ctrl, 0);
4243}
4244EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl);
4245
4246int __v4l2_ctrl_s_ctrl_int64(struct v4l2_ctrl *ctrl, s64 val)
4247{
4248        lockdep_assert_held(ctrl->handler->lock);
4249
4250        /* It's a driver bug if this happens. */
4251        if (WARN_ON(ctrl->is_ptr || ctrl->type != V4L2_CTRL_TYPE_INTEGER64))
4252                return -EINVAL;
4253        *ctrl->p_new.p_s64 = val;
4254        return set_ctrl(NULL, ctrl, 0);
4255}
4256EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl_int64);
4257
4258int __v4l2_ctrl_s_ctrl_string(struct v4l2_ctrl *ctrl, const char *s)
4259{
4260        lockdep_assert_held(ctrl->handler->lock);
4261
4262        /* It's a driver bug if this happens. */
4263        if (WARN_ON(ctrl->type != V4L2_CTRL_TYPE_STRING))
4264                return -EINVAL;
4265        strscpy(ctrl->p_new.p_char, s, ctrl->maximum + 1);
4266        return set_ctrl(NULL, ctrl, 0);
4267}
4268EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl_string);
4269
4270int __v4l2_ctrl_s_ctrl_compound(struct v4l2_ctrl *ctrl,
4271                                enum v4l2_ctrl_type type, const void *p)
4272{
4273        lockdep_assert_held(ctrl->handler->lock);
4274
4275        /* It's a driver bug if this happens. */
4276        if (WARN_ON(ctrl->type != type))
4277                return -EINVAL;
4278        memcpy(ctrl->p_new.p, p, ctrl->elems * ctrl->elem_size);
4279        return set_ctrl(NULL, ctrl, 0);
4280}
4281EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl_compound);
4282
4283void v4l2_ctrl_request_complete(struct media_request *req,
4284                                struct v4l2_ctrl_handler *main_hdl)
4285{
4286        struct media_request_object *obj;
4287        struct v4l2_ctrl_handler *hdl;
4288        struct v4l2_ctrl_ref *ref;
4289
4290        if (!req || !main_hdl)
4291                return;
4292
4293        /*
4294         * Note that it is valid if nothing was found. It means
4295         * that this request doesn't have any controls and so just
4296         * wants to leave the controls unchanged.
4297         */
4298        obj = media_request_object_find(req, &req_ops, main_hdl);
4299        if (!obj)
4300                return;
4301        hdl = container_of(obj, struct v4l2_ctrl_handler, req_obj);
4302
4303        list_for_each_entry(ref, &hdl->ctrl_refs, node) {
4304                struct v4l2_ctrl *ctrl = ref->ctrl;
4305                struct v4l2_ctrl *master = ctrl->cluster[0];
4306                unsigned int i;
4307
4308                if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE) {
4309                        ref->req = ref;
4310
4311                        v4l2_ctrl_lock(master);
4312                        /* g_volatile_ctrl will update the current control values */
4313                        for (i = 0; i < master->ncontrols; i++)
4314                                cur_to_new(master->cluster[i]);
4315                        call_op(master, g_volatile_ctrl);
4316                        new_to_req(ref);
4317                        v4l2_ctrl_unlock(master);
4318                        continue;
4319                }
4320                if (ref->req == ref)
4321                        continue;
4322
4323                v4l2_ctrl_lock(ctrl);
4324                if (ref->req) {
4325                        ptr_to_ptr(ctrl, ref->req->p_req, ref->p_req);
4326                } else {
4327                        ptr_to_ptr(ctrl, ctrl->p_cur, ref->p_req);
4328                        /*
4329                         * Set ref->req to ensure that when userspace wants to
4330                         * obtain the controls of this request it will take
4331                         * this value and not the current value of the control.
4332                         */
4333                        ref->req = ref;
4334                }
4335                v4l2_ctrl_unlock(ctrl);
4336        }
4337
4338        mutex_lock(main_hdl->lock);
4339        WARN_ON(!hdl->request_is_queued);
4340        list_del_init(&hdl->requests_queued);
4341        hdl->request_is_queued = false;
4342        mutex_unlock(main_hdl->lock);
4343        media_request_object_complete(obj);
4344        media_request_object_put(obj);
4345}
4346EXPORT_SYMBOL(v4l2_ctrl_request_complete);
4347
4348int v4l2_ctrl_request_setup(struct media_request *req,
4349                             struct v4l2_ctrl_handler *main_hdl)
4350{
4351        struct media_request_object *obj;
4352        struct v4l2_ctrl_handler *hdl;
4353        struct v4l2_ctrl_ref *ref;
4354        int ret = 0;
4355
4356        if (!req || !main_hdl)
4357                return 0;
4358
4359        if (WARN_ON(req->state != MEDIA_REQUEST_STATE_QUEUED))
4360                return -EBUSY;
4361
4362        /*
4363         * Note that it is valid if nothing was found. It means
4364         * that this request doesn't have any controls and so just
4365         * wants to leave the controls unchanged.
4366         */
4367        obj = media_request_object_find(req, &req_ops, main_hdl);
4368        if (!obj)
4369                return 0;
4370        if (obj->completed) {
4371                media_request_object_put(obj);
4372                return -EBUSY;
4373        }
4374        hdl = container_of(obj, struct v4l2_ctrl_handler, req_obj);
4375
4376        list_for_each_entry(ref, &hdl->ctrl_refs, node)
4377                ref->req_done = false;
4378
4379        list_for_each_entry(ref, &hdl->ctrl_refs, node) {
4380                struct v4l2_ctrl *ctrl = ref->ctrl;
4381                struct v4l2_ctrl *master = ctrl->cluster[0];
4382                bool have_new_data = false;
4383                int i;
4384
4385                /*
4386                 * Skip if this control was already handled by a cluster.
4387                 * Skip button controls and read-only controls.
4388                 */
4389                if (ref->req_done || ctrl->type == V4L2_CTRL_TYPE_BUTTON ||
4390                    (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY))
4391                        continue;
4392
4393                v4l2_ctrl_lock(master);
4394                for (i = 0; i < master->ncontrols; i++) {
4395                        if (master->cluster[i]) {
4396                                struct v4l2_ctrl_ref *r =
4397                                        find_ref(hdl, master->cluster[i]->id);
4398
4399                                if (r->req && r == r->req) {
4400                                        have_new_data = true;
4401                                        break;
4402                                }
4403                        }
4404                }
4405                if (!have_new_data) {
4406                        v4l2_ctrl_unlock(master);
4407                        continue;
4408                }
4409
4410                for (i = 0; i < master->ncontrols; i++) {
4411                        if (master->cluster[i]) {
4412                                struct v4l2_ctrl_ref *r =
4413                                        find_ref(hdl, master->cluster[i]->id);
4414
4415                                req_to_new(r);
4416                                master->cluster[i]->is_new = 1;
4417                                r->req_done = true;
4418                        }
4419                }
4420                /*
4421                 * For volatile autoclusters that are currently in auto mode
4422                 * we need to discover if it will be set to manual mode.
4423                 * If so, then we have to copy the current volatile values
4424                 * first since those will become the new manual values (which
4425                 * may be overwritten by explicit new values from this set
4426                 * of controls).
4427                 */
4428                if (master->is_auto && master->has_volatiles &&
4429                    !is_cur_manual(master)) {
4430                        s32 new_auto_val = *master->p_new.p_s32;
4431
4432                        /*
4433                         * If the new value == the manual value, then copy
4434                         * the current volatile values.
4435                         */
4436                        if (new_auto_val == master->manual_mode_value)
4437                                update_from_auto_cluster(master);
4438                }
4439
4440                ret = try_or_set_cluster(NULL, master, true, 0);
4441                v4l2_ctrl_unlock(master);
4442
4443                if (ret)
4444                        break;
4445        }
4446
4447        media_request_object_put(obj);
4448        return ret;
4449}
4450EXPORT_SYMBOL(v4l2_ctrl_request_setup);
4451
4452void v4l2_ctrl_notify(struct v4l2_ctrl *ctrl, v4l2_ctrl_notify_fnc notify, void *priv)
4453{
4454        if (ctrl == NULL)
4455                return;
4456        if (notify == NULL) {
4457                ctrl->call_notify = 0;
4458                return;
4459        }
4460        if (WARN_ON(ctrl->handler->notify && ctrl->handler->notify != notify))
4461                return;
4462        ctrl->handler->notify = notify;
4463        ctrl->handler->notify_priv = priv;
4464        ctrl->call_notify = 1;
4465}
4466EXPORT_SYMBOL(v4l2_ctrl_notify);
4467
4468int __v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl,
4469                        s64 min, s64 max, u64 step, s64 def)
4470{
4471        bool value_changed;
4472        bool range_changed = false;
4473        int ret;
4474
4475        lockdep_assert_held(ctrl->handler->lock);
4476
4477        switch (ctrl->type) {
4478        case V4L2_CTRL_TYPE_INTEGER:
4479        case V4L2_CTRL_TYPE_INTEGER64:
4480        case V4L2_CTRL_TYPE_BOOLEAN:
4481        case V4L2_CTRL_TYPE_MENU:
4482        case V4L2_CTRL_TYPE_INTEGER_MENU:
4483        case V4L2_CTRL_TYPE_BITMASK:
4484        case V4L2_CTRL_TYPE_U8:
4485        case V4L2_CTRL_TYPE_U16:
4486        case V4L2_CTRL_TYPE_U32:
4487                if (ctrl->is_array)
4488                        return -EINVAL;
4489                ret = check_range(ctrl->type, min, max, step, def);
4490                if (ret)
4491                        return ret;
4492                break;
4493        default:
4494                return -EINVAL;
4495        }
4496        if ((ctrl->minimum != min) || (ctrl->maximum != max) ||
4497                (ctrl->step != step) || ctrl->default_value != def) {
4498                range_changed = true;
4499                ctrl->minimum = min;
4500                ctrl->maximum = max;
4501                ctrl->step = step;
4502                ctrl->default_value = def;
4503        }
4504        cur_to_new(ctrl);
4505        if (validate_new(ctrl, ctrl->p_new)) {
4506                if (ctrl->type == V4L2_CTRL_TYPE_INTEGER64)
4507                        *ctrl->p_new.p_s64 = def;
4508                else
4509                        *ctrl->p_new.p_s32 = def;
4510        }
4511
4512        if (ctrl->type == V4L2_CTRL_TYPE_INTEGER64)
4513                value_changed = *ctrl->p_new.p_s64 != *ctrl->p_cur.p_s64;
4514        else
4515                value_changed = *ctrl->p_new.p_s32 != *ctrl->p_cur.p_s32;
4516        if (value_changed)
4517                ret = set_ctrl(NULL, ctrl, V4L2_EVENT_CTRL_CH_RANGE);
4518        else if (range_changed)
4519                send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_RANGE);
4520        return ret;
4521}
4522EXPORT_SYMBOL(__v4l2_ctrl_modify_range);
4523
4524static int v4l2_ctrl_add_event(struct v4l2_subscribed_event *sev, unsigned elems)
4525{
4526        struct v4l2_ctrl *ctrl = v4l2_ctrl_find(sev->fh->ctrl_handler, sev->id);
4527
4528        if (ctrl == NULL)
4529                return -EINVAL;
4530
4531        v4l2_ctrl_lock(ctrl);
4532        list_add_tail(&sev->node, &ctrl->ev_subs);
4533        if (ctrl->type != V4L2_CTRL_TYPE_CTRL_CLASS &&
4534            (sev->flags & V4L2_EVENT_SUB_FL_SEND_INITIAL)) {
4535                struct v4l2_event ev;
4536                u32 changes = V4L2_EVENT_CTRL_CH_FLAGS;
4537
4538                if (!(ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY))
4539                        changes |= V4L2_EVENT_CTRL_CH_VALUE;
4540                fill_event(&ev, ctrl, changes);
4541                /* Mark the queue as active, allowing this initial
4542                   event to be accepted. */
4543                sev->elems = elems;
4544                v4l2_event_queue_fh(sev->fh, &ev);
4545        }
4546        v4l2_ctrl_unlock(ctrl);
4547        return 0;
4548}
4549
4550static void v4l2_ctrl_del_event(struct v4l2_subscribed_event *sev)
4551{
4552        struct v4l2_ctrl *ctrl = v4l2_ctrl_find(sev->fh->ctrl_handler, sev->id);
4553
4554        if (ctrl == NULL)
4555                return;
4556
4557        v4l2_ctrl_lock(ctrl);
4558        list_del(&sev->node);
4559        v4l2_ctrl_unlock(ctrl);
4560}
4561
4562void v4l2_ctrl_replace(struct v4l2_event *old, const struct v4l2_event *new)
4563{
4564        u32 old_changes = old->u.ctrl.changes;
4565
4566        old->u.ctrl = new->u.ctrl;
4567        old->u.ctrl.changes |= old_changes;
4568}
4569EXPORT_SYMBOL(v4l2_ctrl_replace);
4570
4571void v4l2_ctrl_merge(const struct v4l2_event *old, struct v4l2_event *new)
4572{
4573        new->u.ctrl.changes |= old->u.ctrl.changes;
4574}
4575EXPORT_SYMBOL(v4l2_ctrl_merge);
4576
4577const struct v4l2_subscribed_event_ops v4l2_ctrl_sub_ev_ops = {
4578        .add = v4l2_ctrl_add_event,
4579        .del = v4l2_ctrl_del_event,
4580        .replace = v4l2_ctrl_replace,
4581        .merge = v4l2_ctrl_merge,
4582};
4583EXPORT_SYMBOL(v4l2_ctrl_sub_ev_ops);
4584
4585int v4l2_ctrl_log_status(struct file *file, void *fh)
4586{
4587        struct video_device *vfd = video_devdata(file);
4588        struct v4l2_fh *vfh = file->private_data;
4589
4590        if (test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) && vfd->v4l2_dev)
4591                v4l2_ctrl_handler_log_status(vfh->ctrl_handler,
4592                        vfd->v4l2_dev->name);
4593        return 0;
4594}
4595EXPORT_SYMBOL(v4l2_ctrl_log_status);
4596
4597int v4l2_ctrl_subscribe_event(struct v4l2_fh *fh,
4598                                const struct v4l2_event_subscription *sub)
4599{
4600        if (sub->type == V4L2_EVENT_CTRL)
4601                return v4l2_event_subscribe(fh, sub, 0, &v4l2_ctrl_sub_ev_ops);
4602        return -EINVAL;
4603}
4604EXPORT_SYMBOL(v4l2_ctrl_subscribe_event);
4605
4606int v4l2_ctrl_subdev_subscribe_event(struct v4l2_subdev *sd, struct v4l2_fh *fh,
4607                                     struct v4l2_event_subscription *sub)
4608{
4609        if (!sd->ctrl_handler)
4610                return -EINVAL;
4611        return v4l2_ctrl_subscribe_event(fh, sub);
4612}
4613EXPORT_SYMBOL(v4l2_ctrl_subdev_subscribe_event);
4614
4615__poll_t v4l2_ctrl_poll(struct file *file, struct poll_table_struct *wait)
4616{
4617        struct v4l2_fh *fh = file->private_data;
4618
4619        poll_wait(file, &fh->wait, wait);
4620        if (v4l2_event_pending(fh))
4621                return EPOLLPRI;
4622        return 0;
4623}
4624EXPORT_SYMBOL(v4l2_ctrl_poll);
4625
4626int v4l2_ctrl_new_fwnode_properties(struct v4l2_ctrl_handler *hdl,
4627                                    const struct v4l2_ctrl_ops *ctrl_ops,
4628                                    const struct v4l2_fwnode_device_properties *p)
4629{
4630        if (p->orientation != V4L2_FWNODE_PROPERTY_UNSET) {
4631                u32 orientation_ctrl;
4632
4633                switch (p->orientation) {
4634                case V4L2_FWNODE_ORIENTATION_FRONT:
4635                        orientation_ctrl = V4L2_CAMERA_ORIENTATION_FRONT;
4636                        break;
4637                case V4L2_FWNODE_ORIENTATION_BACK:
4638                        orientation_ctrl = V4L2_CAMERA_ORIENTATION_BACK;
4639                        break;
4640                case V4L2_FWNODE_ORIENTATION_EXTERNAL:
4641                        orientation_ctrl = V4L2_CAMERA_ORIENTATION_EXTERNAL;
4642                        break;
4643                default:
4644                        return -EINVAL;
4645                }
4646                if (!v4l2_ctrl_new_std_menu(hdl, ctrl_ops,
4647                                            V4L2_CID_CAMERA_ORIENTATION,
4648                                            V4L2_CAMERA_ORIENTATION_EXTERNAL, 0,
4649                                            orientation_ctrl))
4650                        return hdl->error;
4651        }
4652
4653        if (p->rotation != V4L2_FWNODE_PROPERTY_UNSET) {
4654                if (!v4l2_ctrl_new_std(hdl, ctrl_ops,
4655                                       V4L2_CID_CAMERA_SENSOR_ROTATION,
4656                                       p->rotation, p->rotation, 1,
4657                                       p->rotation))
4658                        return hdl->error;
4659        }
4660
4661        return hdl->error;
4662}
4663EXPORT_SYMBOL(v4l2_ctrl_new_fwnode_properties);
4664