linux/drivers/media/v4l2-core/v4l2-ctrls.c
<<
>>
Prefs
   1/*
   2    V4L2 controls framework implementation.
   3
   4    Copyright (C) 2010  Hans Verkuil <hverkuil@xs4all.nl>
   5
   6    This program is free software; you can redistribute it and/or modify
   7    it under the terms of the GNU General Public License as published by
   8    the Free Software Foundation; either version 2 of the License, or
   9    (at your option) any later version.
  10
  11    This program is distributed in the hope that it will be useful,
  12    but WITHOUT ANY WARRANTY; without even the implied warranty of
  13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14    GNU General Public License for more details.
  15
  16    You should have received a copy of the GNU General Public License
  17    along with this program; if not, write to the Free Software
  18    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19 */
  20
  21#include <linux/ctype.h>
  22#include <linux/slab.h>
  23#include <linux/export.h>
  24#include <media/v4l2-ioctl.h>
  25#include <media/v4l2-device.h>
  26#include <media/v4l2-ctrls.h>
  27#include <media/v4l2-event.h>
  28#include <media/v4l2-dev.h>
  29
  30#define has_op(master, op) \
  31        (master->ops && master->ops->op)
  32#define call_op(master, op) \
  33        (has_op(master, op) ? master->ops->op(master) : 0)
  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 corresponding to the v4l2_ext_control ID field. */
  40        struct v4l2_ctrl *ctrl;
  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                NULL,
 341        };
 342        static const char * const h264_loop_filter[] = {
 343                "Enabled",
 344                "Disabled",
 345                "Disabled at Slice Boundary",
 346                NULL,
 347        };
 348        static const char * const h264_profile[] = {
 349                "Baseline",
 350                "Constrained Baseline",
 351                "Main",
 352                "Extended",
 353                "High",
 354                "High 10",
 355                "High 422",
 356                "High 444 Predictive",
 357                "High 10 Intra",
 358                "High 422 Intra",
 359                "High 444 Intra",
 360                "CAVLC 444 Intra",
 361                "Scalable Baseline",
 362                "Scalable High",
 363                "Scalable High Intra",
 364                "Multiview High",
 365                NULL,
 366        };
 367        static const char * const vui_sar_idc[] = {
 368                "Unspecified",
 369                "1:1",
 370                "12:11",
 371                "10:11",
 372                "16:11",
 373                "40:33",
 374                "24:11",
 375                "20:11",
 376                "32:11",
 377                "80:33",
 378                "18:11",
 379                "15:11",
 380                "64:33",
 381                "160:99",
 382                "4:3",
 383                "3:2",
 384                "2:1",
 385                "Extended SAR",
 386                NULL,
 387        };
 388        static const char * const h264_fp_arrangement_type[] = {
 389                "Checkerboard",
 390                "Column",
 391                "Row",
 392                "Side by Side",
 393                "Top Bottom",
 394                "Temporal",
 395                NULL,
 396        };
 397        static const char * const h264_fmo_map_type[] = {
 398                "Interleaved Slices",
 399                "Scattered Slices",
 400                "Foreground with Leftover",
 401                "Box Out",
 402                "Raster Scan",
 403                "Wipe Scan",
 404                "Explicit",
 405                NULL,
 406        };
 407        static const char * const mpeg_mpeg4_level[] = {
 408                "0",
 409                "0b",
 410                "1",
 411                "2",
 412                "3",
 413                "3b",
 414                "4",
 415                "5",
 416                NULL,
 417        };
 418        static const char * const mpeg4_profile[] = {
 419                "Simple",
 420                "Advanced Simple",
 421                "Core",
 422                "Simple Scalable",
 423                "Advanced Coding Efficiency",
 424                NULL,
 425        };
 426
 427        static const char * const vpx_golden_frame_sel[] = {
 428                "Use Previous Frame",
 429                "Use Previous Specific Frame",
 430                NULL,
 431        };
 432
 433        static const char * const flash_led_mode[] = {
 434                "Off",
 435                "Flash",
 436                "Torch",
 437                NULL,
 438        };
 439        static const char * const flash_strobe_source[] = {
 440                "Software",
 441                "External",
 442                NULL,
 443        };
 444
 445        static const char * const jpeg_chroma_subsampling[] = {
 446                "4:4:4",
 447                "4:2:2",
 448                "4:2:0",
 449                "4:1:1",
 450                "4:1:0",
 451                "Gray",
 452                NULL,
 453        };
 454        static const char * const dv_tx_mode[] = {
 455                "DVI-D",
 456                "HDMI",
 457                NULL,
 458        };
 459        static const char * const dv_rgb_range[] = {
 460                "Automatic",
 461                "RGB limited range (16-235)",
 462                "RGB full range (0-255)",
 463                NULL,
 464        };
 465        static const char * const dv_it_content_type[] = {
 466                "Graphics",
 467                "Photo",
 468                "Cinema",
 469                "Game",
 470                "No IT Content",
 471                NULL,
 472        };
 473        static const char * const detect_md_mode[] = {
 474                "Disabled",
 475                "Global",
 476                "Threshold Grid",
 477                "Region Grid",
 478                NULL,
 479        };
 480
 481
 482        switch (id) {
 483        case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
 484                return mpeg_audio_sampling_freq;
 485        case V4L2_CID_MPEG_AUDIO_ENCODING:
 486                return mpeg_audio_encoding;
 487        case V4L2_CID_MPEG_AUDIO_L1_BITRATE:
 488                return mpeg_audio_l1_bitrate;
 489        case V4L2_CID_MPEG_AUDIO_L2_BITRATE:
 490                return mpeg_audio_l2_bitrate;
 491        case V4L2_CID_MPEG_AUDIO_L3_BITRATE:
 492                return mpeg_audio_l3_bitrate;
 493        case V4L2_CID_MPEG_AUDIO_AC3_BITRATE:
 494                return mpeg_audio_ac3_bitrate;
 495        case V4L2_CID_MPEG_AUDIO_MODE:
 496                return mpeg_audio_mode;
 497        case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION:
 498                return mpeg_audio_mode_extension;
 499        case V4L2_CID_MPEG_AUDIO_EMPHASIS:
 500                return mpeg_audio_emphasis;
 501        case V4L2_CID_MPEG_AUDIO_CRC:
 502                return mpeg_audio_crc;
 503        case V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK:
 504        case V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK:
 505                return mpeg_audio_dec_playback;
 506        case V4L2_CID_MPEG_VIDEO_ENCODING:
 507                return mpeg_video_encoding;
 508        case V4L2_CID_MPEG_VIDEO_ASPECT:
 509                return mpeg_video_aspect;
 510        case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
 511                return mpeg_video_bitrate_mode;
 512        case V4L2_CID_MPEG_STREAM_TYPE:
 513                return mpeg_stream_type;
 514        case V4L2_CID_MPEG_STREAM_VBI_FMT:
 515                return mpeg_stream_vbi_fmt;
 516        case V4L2_CID_POWER_LINE_FREQUENCY:
 517                return camera_power_line_frequency;
 518        case V4L2_CID_EXPOSURE_AUTO:
 519                return camera_exposure_auto;
 520        case V4L2_CID_EXPOSURE_METERING:
 521                return camera_exposure_metering;
 522        case V4L2_CID_AUTO_FOCUS_RANGE:
 523                return camera_auto_focus_range;
 524        case V4L2_CID_COLORFX:
 525                return colorfx;
 526        case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE:
 527                return auto_n_preset_white_balance;
 528        case V4L2_CID_ISO_SENSITIVITY_AUTO:
 529                return camera_iso_sensitivity_auto;
 530        case V4L2_CID_SCENE_MODE:
 531                return scene_mode;
 532        case V4L2_CID_TUNE_PREEMPHASIS:
 533                return tune_emphasis;
 534        case V4L2_CID_TUNE_DEEMPHASIS:
 535                return tune_emphasis;
 536        case V4L2_CID_FLASH_LED_MODE:
 537                return flash_led_mode;
 538        case V4L2_CID_FLASH_STROBE_SOURCE:
 539                return flash_strobe_source;
 540        case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
 541                return header_mode;
 542        case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:
 543                return multi_slice;
 544        case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
 545                return entropy_mode;
 546        case V4L2_CID_MPEG_VIDEO_H264_LEVEL:
 547                return mpeg_h264_level;
 548        case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE:
 549                return h264_loop_filter;
 550        case V4L2_CID_MPEG_VIDEO_H264_PROFILE:
 551                return h264_profile;
 552        case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC:
 553                return vui_sar_idc;
 554        case V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE:
 555                return h264_fp_arrangement_type;
 556        case V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE:
 557                return h264_fmo_map_type;
 558        case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL:
 559                return mpeg_mpeg4_level;
 560        case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE:
 561                return mpeg4_profile;
 562        case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL:
 563                return vpx_golden_frame_sel;
 564        case V4L2_CID_JPEG_CHROMA_SUBSAMPLING:
 565                return jpeg_chroma_subsampling;
 566        case V4L2_CID_DV_TX_MODE:
 567                return dv_tx_mode;
 568        case V4L2_CID_DV_TX_RGB_RANGE:
 569        case V4L2_CID_DV_RX_RGB_RANGE:
 570                return dv_rgb_range;
 571        case V4L2_CID_DV_TX_IT_CONTENT_TYPE:
 572        case V4L2_CID_DV_RX_IT_CONTENT_TYPE:
 573                return dv_it_content_type;
 574        case V4L2_CID_DETECT_MD_MODE:
 575                return detect_md_mode;
 576
 577        default:
 578                return NULL;
 579        }
 580}
 581EXPORT_SYMBOL(v4l2_ctrl_get_menu);
 582
 583#define __v4l2_qmenu_int_len(arr, len) ({ *(len) = ARRAY_SIZE(arr); arr; })
 584/*
 585 * Returns NULL or an s64 type array containing the menu for given
 586 * control ID. The total number of the menu items is returned in @len.
 587 */
 588const s64 *v4l2_ctrl_get_int_menu(u32 id, u32 *len)
 589{
 590        static const s64 qmenu_int_vpx_num_partitions[] = {
 591                1, 2, 4, 8,
 592        };
 593
 594        static const s64 qmenu_int_vpx_num_ref_frames[] = {
 595                1, 2, 3,
 596        };
 597
 598        switch (id) {
 599        case V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS:
 600                return __v4l2_qmenu_int_len(qmenu_int_vpx_num_partitions, len);
 601        case V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES:
 602                return __v4l2_qmenu_int_len(qmenu_int_vpx_num_ref_frames, len);
 603        default:
 604                *len = 0;
 605                return NULL;
 606        }
 607}
 608EXPORT_SYMBOL(v4l2_ctrl_get_int_menu);
 609
 610/* Return the control name. */
 611const char *v4l2_ctrl_get_name(u32 id)
 612{
 613        switch (id) {
 614        /* USER controls */
 615        /* Keep the order of the 'case's the same as in v4l2-controls.h! */
 616        case V4L2_CID_USER_CLASS:               return "User Controls";
 617        case V4L2_CID_BRIGHTNESS:               return "Brightness";
 618        case V4L2_CID_CONTRAST:                 return "Contrast";
 619        case V4L2_CID_SATURATION:               return "Saturation";
 620        case V4L2_CID_HUE:                      return "Hue";
 621        case V4L2_CID_AUDIO_VOLUME:             return "Volume";
 622        case V4L2_CID_AUDIO_BALANCE:            return "Balance";
 623        case V4L2_CID_AUDIO_BASS:               return "Bass";
 624        case V4L2_CID_AUDIO_TREBLE:             return "Treble";
 625        case V4L2_CID_AUDIO_MUTE:               return "Mute";
 626        case V4L2_CID_AUDIO_LOUDNESS:           return "Loudness";
 627        case V4L2_CID_BLACK_LEVEL:              return "Black Level";
 628        case V4L2_CID_AUTO_WHITE_BALANCE:       return "White Balance, Automatic";
 629        case V4L2_CID_DO_WHITE_BALANCE:         return "Do White Balance";
 630        case V4L2_CID_RED_BALANCE:              return "Red Balance";
 631        case V4L2_CID_BLUE_BALANCE:             return "Blue Balance";
 632        case V4L2_CID_GAMMA:                    return "Gamma";
 633        case V4L2_CID_EXPOSURE:                 return "Exposure";
 634        case V4L2_CID_AUTOGAIN:                 return "Gain, Automatic";
 635        case V4L2_CID_GAIN:                     return "Gain";
 636        case V4L2_CID_HFLIP:                    return "Horizontal Flip";
 637        case V4L2_CID_VFLIP:                    return "Vertical Flip";
 638        case V4L2_CID_POWER_LINE_FREQUENCY:     return "Power Line Frequency";
 639        case V4L2_CID_HUE_AUTO:                 return "Hue, Automatic";
 640        case V4L2_CID_WHITE_BALANCE_TEMPERATURE: return "White Balance Temperature";
 641        case V4L2_CID_SHARPNESS:                return "Sharpness";
 642        case V4L2_CID_BACKLIGHT_COMPENSATION:   return "Backlight Compensation";
 643        case V4L2_CID_CHROMA_AGC:               return "Chroma AGC";
 644        case V4L2_CID_COLOR_KILLER:             return "Color Killer";
 645        case V4L2_CID_COLORFX:                  return "Color Effects";
 646        case V4L2_CID_AUTOBRIGHTNESS:           return "Brightness, Automatic";
 647        case V4L2_CID_BAND_STOP_FILTER:         return "Band-Stop Filter";
 648        case V4L2_CID_ROTATE:                   return "Rotate";
 649        case V4L2_CID_BG_COLOR:                 return "Background Color";
 650        case V4L2_CID_CHROMA_GAIN:              return "Chroma Gain";
 651        case V4L2_CID_ILLUMINATORS_1:           return "Illuminator 1";
 652        case V4L2_CID_ILLUMINATORS_2:           return "Illuminator 2";
 653        case V4L2_CID_MIN_BUFFERS_FOR_CAPTURE:  return "Min Number of Capture Buffers";
 654        case V4L2_CID_MIN_BUFFERS_FOR_OUTPUT:   return "Min Number of Output Buffers";
 655        case V4L2_CID_ALPHA_COMPONENT:          return "Alpha Component";
 656        case V4L2_CID_COLORFX_CBCR:             return "Color Effects, CbCr";
 657
 658        /* Codec controls */
 659        /* The MPEG controls are applicable to all codec controls
 660         * and the 'MPEG' part of the define is historical */
 661        /* Keep the order of the 'case's the same as in videodev2.h! */
 662        case V4L2_CID_MPEG_CLASS:               return "Codec Controls";
 663        case V4L2_CID_MPEG_STREAM_TYPE:         return "Stream Type";
 664        case V4L2_CID_MPEG_STREAM_PID_PMT:      return "Stream PMT Program ID";
 665        case V4L2_CID_MPEG_STREAM_PID_AUDIO:    return "Stream Audio Program ID";
 666        case V4L2_CID_MPEG_STREAM_PID_VIDEO:    return "Stream Video Program ID";
 667        case V4L2_CID_MPEG_STREAM_PID_PCR:      return "Stream PCR Program ID";
 668        case V4L2_CID_MPEG_STREAM_PES_ID_AUDIO: return "Stream PES Audio ID";
 669        case V4L2_CID_MPEG_STREAM_PES_ID_VIDEO: return "Stream PES Video ID";
 670        case V4L2_CID_MPEG_STREAM_VBI_FMT:      return "Stream VBI Format";
 671        case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ: return "Audio Sampling Frequency";
 672        case V4L2_CID_MPEG_AUDIO_ENCODING:      return "Audio Encoding";
 673        case V4L2_CID_MPEG_AUDIO_L1_BITRATE:    return "Audio Layer I Bitrate";
 674        case V4L2_CID_MPEG_AUDIO_L2_BITRATE:    return "Audio Layer II Bitrate";
 675        case V4L2_CID_MPEG_AUDIO_L3_BITRATE:    return "Audio Layer III Bitrate";
 676        case V4L2_CID_MPEG_AUDIO_MODE:          return "Audio Stereo Mode";
 677        case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION: return "Audio Stereo Mode Extension";
 678        case V4L2_CID_MPEG_AUDIO_EMPHASIS:      return "Audio Emphasis";
 679        case V4L2_CID_MPEG_AUDIO_CRC:           return "Audio CRC";
 680        case V4L2_CID_MPEG_AUDIO_MUTE:          return "Audio Mute";
 681        case V4L2_CID_MPEG_AUDIO_AAC_BITRATE:   return "Audio AAC Bitrate";
 682        case V4L2_CID_MPEG_AUDIO_AC3_BITRATE:   return "Audio AC-3 Bitrate";
 683        case V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK:  return "Audio Playback";
 684        case V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK: return "Audio Multilingual Playback";
 685        case V4L2_CID_MPEG_VIDEO_ENCODING:      return "Video Encoding";
 686        case V4L2_CID_MPEG_VIDEO_ASPECT:        return "Video Aspect";
 687        case V4L2_CID_MPEG_VIDEO_B_FRAMES:      return "Video B Frames";
 688        case V4L2_CID_MPEG_VIDEO_GOP_SIZE:      return "Video GOP Size";
 689        case V4L2_CID_MPEG_VIDEO_GOP_CLOSURE:   return "Video GOP Closure";
 690        case V4L2_CID_MPEG_VIDEO_PULLDOWN:      return "Video Pulldown";
 691        case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:  return "Video Bitrate Mode";
 692        case V4L2_CID_MPEG_VIDEO_BITRATE:       return "Video Bitrate";
 693        case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK:  return "Video Peak Bitrate";
 694        case V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION: return "Video Temporal Decimation";
 695        case V4L2_CID_MPEG_VIDEO_MUTE:          return "Video Mute";
 696        case V4L2_CID_MPEG_VIDEO_MUTE_YUV:      return "Video Mute YUV";
 697        case V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE:       return "Decoder Slice Interface";
 698        case V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER:  return "MPEG4 Loop Filter Enable";
 699        case V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB:       return "Number of Intra Refresh MBs";
 700        case V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE:               return "Frame Level Rate Control Enable";
 701        case V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE:                  return "H264 MB Level Rate Control";
 702        case V4L2_CID_MPEG_VIDEO_HEADER_MODE:                   return "Sequence Header Mode";
 703        case V4L2_CID_MPEG_VIDEO_MAX_REF_PIC:                   return "Max Number of Reference Pics";
 704        case V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP:               return "H263 I-Frame QP Value";
 705        case V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP:               return "H263 P-Frame QP Value";
 706        case V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP:               return "H263 B-Frame QP Value";
 707        case V4L2_CID_MPEG_VIDEO_H263_MIN_QP:                   return "H263 Minimum QP Value";
 708        case V4L2_CID_MPEG_VIDEO_H263_MAX_QP:                   return "H263 Maximum QP Value";
 709        case V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP:               return "H264 I-Frame QP Value";
 710        case V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP:               return "H264 P-Frame QP Value";
 711        case V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP:               return "H264 B-Frame QP Value";
 712        case V4L2_CID_MPEG_VIDEO_H264_MAX_QP:                   return "H264 Maximum QP Value";
 713        case V4L2_CID_MPEG_VIDEO_H264_MIN_QP:                   return "H264 Minimum QP Value";
 714        case V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM:            return "H264 8x8 Transform Enable";
 715        case V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE:                 return "H264 CPB Buffer Size";
 716        case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:             return "H264 Entropy Mode";
 717        case V4L2_CID_MPEG_VIDEO_H264_I_PERIOD:                 return "H264 I-Frame Period";
 718        case V4L2_CID_MPEG_VIDEO_H264_LEVEL:                    return "H264 Level";
 719        case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA:        return "H264 Loop Filter Alpha Offset";
 720        case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA:         return "H264 Loop Filter Beta Offset";
 721        case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE:         return "H264 Loop Filter Mode";
 722        case V4L2_CID_MPEG_VIDEO_H264_PROFILE:                  return "H264 Profile";
 723        case V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT:       return "Vertical Size of SAR";
 724        case V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH:        return "Horizontal Size of SAR";
 725        case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE:           return "Aspect Ratio VUI Enable";
 726        case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC:              return "VUI Aspect Ratio IDC";
 727        case V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING:        return "H264 Enable Frame Packing SEI";
 728        case V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0:   return "H264 Set Curr. Frame as Frame0";
 729        case V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE:  return "H264 FP Arrangement Type";
 730        case V4L2_CID_MPEG_VIDEO_H264_FMO:                      return "H264 Flexible MB Ordering";
 731        case V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE:             return "H264 Map Type for FMO";
 732        case V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP:          return "H264 FMO Number of Slice Groups";
 733        case V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION:     return "H264 FMO Direction of Change";
 734        case V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE:          return "H264 FMO Size of 1st Slice Grp";
 735        case V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH:           return "H264 FMO No. of Consecutive MBs";
 736        case V4L2_CID_MPEG_VIDEO_H264_ASO:                      return "H264 Arbitrary Slice Ordering";
 737        case V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER:          return "H264 ASO Slice Order";
 738        case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING:      return "Enable H264 Hierarchical Coding";
 739        case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE: return "H264 Hierarchical Coding Type";
 740        case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER:return "H264 Number of HC Layers";
 741        case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP:
 742                                                                return "H264 Set QP Value for HC Layers";
 743        case V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP:              return "MPEG4 I-Frame QP Value";
 744        case V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP:              return "MPEG4 P-Frame QP Value";
 745        case V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP:              return "MPEG4 B-Frame QP Value";
 746        case V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP:                  return "MPEG4 Minimum QP Value";
 747        case V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP:                  return "MPEG4 Maximum QP Value";
 748        case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL:                   return "MPEG4 Level";
 749        case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE:                 return "MPEG4 Profile";
 750        case V4L2_CID_MPEG_VIDEO_MPEG4_QPEL:                    return "Quarter Pixel Search Enable";
 751        case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES:         return "Maximum Bytes in a Slice";
 752        case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB:            return "Number of MBs in a Slice";
 753        case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:              return "Slice Partitioning Method";
 754        case V4L2_CID_MPEG_VIDEO_VBV_SIZE:                      return "VBV Buffer Size";
 755        case V4L2_CID_MPEG_VIDEO_DEC_PTS:                       return "Video Decoder PTS";
 756        case V4L2_CID_MPEG_VIDEO_DEC_FRAME:                     return "Video Decoder Frame Count";
 757        case V4L2_CID_MPEG_VIDEO_VBV_DELAY:                     return "Initial Delay for VBV Control";
 758        case V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE:             return "Horizontal MV Search Range";
 759        case V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE:             return "Vertical MV Search Range";
 760        case V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER:             return "Repeat Sequence Header";
 761        case V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME:               return "Force Key Frame";
 762
 763        /* VPX controls */
 764        case V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS:            return "VPX Number of Partitions";
 765        case V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4:           return "VPX Intra Mode Decision Disable";
 766        case V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES:            return "VPX No. of Refs for P Frame";
 767        case V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL:              return "VPX Loop Filter Level Range";
 768        case V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS:          return "VPX Deblocking Effect Control";
 769        case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD:   return "VPX Golden Frame Refresh Period";
 770        case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL:          return "VPX Golden Frame Indicator";
 771        case V4L2_CID_MPEG_VIDEO_VPX_MIN_QP:                    return "VPX Minimum QP Value";
 772        case V4L2_CID_MPEG_VIDEO_VPX_MAX_QP:                    return "VPX Maximum QP Value";
 773        case V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP:                return "VPX I-Frame QP Value";
 774        case V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP:                return "VPX P-Frame QP Value";
 775        case V4L2_CID_MPEG_VIDEO_VPX_PROFILE:                   return "VPX Profile";
 776
 777        /* CAMERA controls */
 778        /* Keep the order of the 'case's the same as in v4l2-controls.h! */
 779        case V4L2_CID_CAMERA_CLASS:             return "Camera Controls";
 780        case V4L2_CID_EXPOSURE_AUTO:            return "Auto Exposure";
 781        case V4L2_CID_EXPOSURE_ABSOLUTE:        return "Exposure Time, Absolute";
 782        case V4L2_CID_EXPOSURE_AUTO_PRIORITY:   return "Exposure, Dynamic Framerate";
 783        case V4L2_CID_PAN_RELATIVE:             return "Pan, Relative";
 784        case V4L2_CID_TILT_RELATIVE:            return "Tilt, Relative";
 785        case V4L2_CID_PAN_RESET:                return "Pan, Reset";
 786        case V4L2_CID_TILT_RESET:               return "Tilt, Reset";
 787        case V4L2_CID_PAN_ABSOLUTE:             return "Pan, Absolute";
 788        case V4L2_CID_TILT_ABSOLUTE:            return "Tilt, Absolute";
 789        case V4L2_CID_FOCUS_ABSOLUTE:           return "Focus, Absolute";
 790        case V4L2_CID_FOCUS_RELATIVE:           return "Focus, Relative";
 791        case V4L2_CID_FOCUS_AUTO:               return "Focus, Automatic Continuous";
 792        case V4L2_CID_ZOOM_ABSOLUTE:            return "Zoom, Absolute";
 793        case V4L2_CID_ZOOM_RELATIVE:            return "Zoom, Relative";
 794        case V4L2_CID_ZOOM_CONTINUOUS:          return "Zoom, Continuous";
 795        case V4L2_CID_PRIVACY:                  return "Privacy";
 796        case V4L2_CID_IRIS_ABSOLUTE:            return "Iris, Absolute";
 797        case V4L2_CID_IRIS_RELATIVE:            return "Iris, Relative";
 798        case V4L2_CID_AUTO_EXPOSURE_BIAS:       return "Auto Exposure, Bias";
 799        case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE: return "White Balance, Auto & Preset";
 800        case V4L2_CID_WIDE_DYNAMIC_RANGE:       return "Wide Dynamic Range";
 801        case V4L2_CID_IMAGE_STABILIZATION:      return "Image Stabilization";
 802        case V4L2_CID_ISO_SENSITIVITY:          return "ISO Sensitivity";
 803        case V4L2_CID_ISO_SENSITIVITY_AUTO:     return "ISO Sensitivity, Auto";
 804        case V4L2_CID_EXPOSURE_METERING:        return "Exposure, Metering Mode";
 805        case V4L2_CID_SCENE_MODE:               return "Scene Mode";
 806        case V4L2_CID_3A_LOCK:                  return "3A Lock";
 807        case V4L2_CID_AUTO_FOCUS_START:         return "Auto Focus, Start";
 808        case V4L2_CID_AUTO_FOCUS_STOP:          return "Auto Focus, Stop";
 809        case V4L2_CID_AUTO_FOCUS_STATUS:        return "Auto Focus, Status";
 810        case V4L2_CID_AUTO_FOCUS_RANGE:         return "Auto Focus, Range";
 811        case V4L2_CID_PAN_SPEED:                return "Pan, Speed";
 812        case V4L2_CID_TILT_SPEED:               return "Tilt, Speed";
 813
 814        /* FM Radio Modulator controls */
 815        /* Keep the order of the 'case's the same as in v4l2-controls.h! */
 816        case V4L2_CID_FM_TX_CLASS:              return "FM Radio Modulator Controls";
 817        case V4L2_CID_RDS_TX_DEVIATION:         return "RDS Signal Deviation";
 818        case V4L2_CID_RDS_TX_PI:                return "RDS Program ID";
 819        case V4L2_CID_RDS_TX_PTY:               return "RDS Program Type";
 820        case V4L2_CID_RDS_TX_PS_NAME:           return "RDS PS Name";
 821        case V4L2_CID_RDS_TX_RADIO_TEXT:        return "RDS Radio Text";
 822        case V4L2_CID_RDS_TX_MONO_STEREO:       return "RDS Stereo";
 823        case V4L2_CID_RDS_TX_ARTIFICIAL_HEAD:   return "RDS Artificial Head";
 824        case V4L2_CID_RDS_TX_COMPRESSED:        return "RDS Compressed";
 825        case V4L2_CID_RDS_TX_DYNAMIC_PTY:       return "RDS Dynamic PTY";
 826        case V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT: return "RDS Traffic Announcement";
 827        case V4L2_CID_RDS_TX_TRAFFIC_PROGRAM:   return "RDS Traffic Program";
 828        case V4L2_CID_RDS_TX_MUSIC_SPEECH:      return "RDS Music";
 829        case V4L2_CID_RDS_TX_ALT_FREQS_ENABLE:  return "RDS Enable Alt Frequencies";
 830        case V4L2_CID_RDS_TX_ALT_FREQS:         return "RDS Alternate Frequencies";
 831        case V4L2_CID_AUDIO_LIMITER_ENABLED:    return "Audio Limiter Feature Enabled";
 832        case V4L2_CID_AUDIO_LIMITER_RELEASE_TIME: return "Audio Limiter Release Time";
 833        case V4L2_CID_AUDIO_LIMITER_DEVIATION:  return "Audio Limiter Deviation";
 834        case V4L2_CID_AUDIO_COMPRESSION_ENABLED: return "Audio Compression Enabled";
 835        case V4L2_CID_AUDIO_COMPRESSION_GAIN:   return "Audio Compression Gain";
 836        case V4L2_CID_AUDIO_COMPRESSION_THRESHOLD: return "Audio Compression Threshold";
 837        case V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME: return "Audio Compression Attack Time";
 838        case V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME: return "Audio Compression Release Time";
 839        case V4L2_CID_PILOT_TONE_ENABLED:       return "Pilot Tone Feature Enabled";
 840        case V4L2_CID_PILOT_TONE_DEVIATION:     return "Pilot Tone Deviation";
 841        case V4L2_CID_PILOT_TONE_FREQUENCY:     return "Pilot Tone Frequency";
 842        case V4L2_CID_TUNE_PREEMPHASIS:         return "Pre-Emphasis";
 843        case V4L2_CID_TUNE_POWER_LEVEL:         return "Tune Power Level";
 844        case V4L2_CID_TUNE_ANTENNA_CAPACITOR:   return "Tune Antenna Capacitor";
 845
 846        /* Flash controls */
 847        /* Keep the order of the 'case's the same as in v4l2-controls.h! */
 848        case V4L2_CID_FLASH_CLASS:              return "Flash Controls";
 849        case V4L2_CID_FLASH_LED_MODE:           return "LED Mode";
 850        case V4L2_CID_FLASH_STROBE_SOURCE:      return "Strobe Source";
 851        case V4L2_CID_FLASH_STROBE:             return "Strobe";
 852        case V4L2_CID_FLASH_STROBE_STOP:        return "Stop Strobe";
 853        case V4L2_CID_FLASH_STROBE_STATUS:      return "Strobe Status";
 854        case V4L2_CID_FLASH_TIMEOUT:            return "Strobe Timeout";
 855        case V4L2_CID_FLASH_INTENSITY:          return "Intensity, Flash Mode";
 856        case V4L2_CID_FLASH_TORCH_INTENSITY:    return "Intensity, Torch Mode";
 857        case V4L2_CID_FLASH_INDICATOR_INTENSITY: return "Intensity, Indicator";
 858        case V4L2_CID_FLASH_FAULT:              return "Faults";
 859        case V4L2_CID_FLASH_CHARGE:             return "Charge";
 860        case V4L2_CID_FLASH_READY:              return "Ready to Strobe";
 861
 862        /* JPEG encoder controls */
 863        /* Keep the order of the 'case's the same as in v4l2-controls.h! */
 864        case V4L2_CID_JPEG_CLASS:               return "JPEG Compression Controls";
 865        case V4L2_CID_JPEG_CHROMA_SUBSAMPLING:  return "Chroma Subsampling";
 866        case V4L2_CID_JPEG_RESTART_INTERVAL:    return "Restart Interval";
 867        case V4L2_CID_JPEG_COMPRESSION_QUALITY: return "Compression Quality";
 868        case V4L2_CID_JPEG_ACTIVE_MARKER:       return "Active Markers";
 869
 870        /* Image source controls */
 871        /* Keep the order of the 'case's the same as in v4l2-controls.h! */
 872        case V4L2_CID_IMAGE_SOURCE_CLASS:       return "Image Source Controls";
 873        case V4L2_CID_VBLANK:                   return "Vertical Blanking";
 874        case V4L2_CID_HBLANK:                   return "Horizontal Blanking";
 875        case V4L2_CID_ANALOGUE_GAIN:            return "Analogue Gain";
 876        case V4L2_CID_TEST_PATTERN_RED:         return "Red Pixel Value";
 877        case V4L2_CID_TEST_PATTERN_GREENR:      return "Green (Red) Pixel Value";
 878        case V4L2_CID_TEST_PATTERN_BLUE:        return "Blue Pixel Value";
 879        case V4L2_CID_TEST_PATTERN_GREENB:      return "Green (Blue) Pixel Value";
 880
 881        /* Image processing controls */
 882        /* Keep the order of the 'case's the same as in v4l2-controls.h! */
 883        case V4L2_CID_IMAGE_PROC_CLASS:         return "Image Processing Controls";
 884        case V4L2_CID_LINK_FREQ:                return "Link Frequency";
 885        case V4L2_CID_PIXEL_RATE:               return "Pixel Rate";
 886        case V4L2_CID_TEST_PATTERN:             return "Test Pattern";
 887
 888        /* DV controls */
 889        /* Keep the order of the 'case's the same as in v4l2-controls.h! */
 890        case V4L2_CID_DV_CLASS:                 return "Digital Video Controls";
 891        case V4L2_CID_DV_TX_HOTPLUG:            return "Hotplug Present";
 892        case V4L2_CID_DV_TX_RXSENSE:            return "RxSense Present";
 893        case V4L2_CID_DV_TX_EDID_PRESENT:       return "EDID Present";
 894        case V4L2_CID_DV_TX_MODE:               return "Transmit Mode";
 895        case V4L2_CID_DV_TX_RGB_RANGE:          return "Tx RGB Quantization Range";
 896        case V4L2_CID_DV_TX_IT_CONTENT_TYPE:    return "Tx IT Content Type";
 897        case V4L2_CID_DV_RX_POWER_PRESENT:      return "Power Present";
 898        case V4L2_CID_DV_RX_RGB_RANGE:          return "Rx RGB Quantization Range";
 899        case V4L2_CID_DV_RX_IT_CONTENT_TYPE:    return "Rx IT Content Type";
 900
 901        case V4L2_CID_FM_RX_CLASS:              return "FM Radio Receiver Controls";
 902        case V4L2_CID_TUNE_DEEMPHASIS:          return "De-Emphasis";
 903        case V4L2_CID_RDS_RECEPTION:            return "RDS Reception";
 904        case V4L2_CID_RF_TUNER_CLASS:           return "RF Tuner Controls";
 905        case V4L2_CID_RF_TUNER_RF_GAIN:         return "RF Gain";
 906        case V4L2_CID_RF_TUNER_LNA_GAIN_AUTO:   return "LNA Gain, Auto";
 907        case V4L2_CID_RF_TUNER_LNA_GAIN:        return "LNA Gain";
 908        case V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO: return "Mixer Gain, Auto";
 909        case V4L2_CID_RF_TUNER_MIXER_GAIN:      return "Mixer Gain";
 910        case V4L2_CID_RF_TUNER_IF_GAIN_AUTO:    return "IF Gain, Auto";
 911        case V4L2_CID_RF_TUNER_IF_GAIN:         return "IF Gain";
 912        case V4L2_CID_RF_TUNER_BANDWIDTH_AUTO:  return "Bandwidth, Auto";
 913        case V4L2_CID_RF_TUNER_BANDWIDTH:       return "Bandwidth";
 914        case V4L2_CID_RF_TUNER_PLL_LOCK:        return "PLL Lock";
 915        case V4L2_CID_RDS_RX_PTY:               return "RDS Program Type";
 916        case V4L2_CID_RDS_RX_PS_NAME:           return "RDS PS Name";
 917        case V4L2_CID_RDS_RX_RADIO_TEXT:        return "RDS Radio Text";
 918        case V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT: return "RDS Traffic Announcement";
 919        case V4L2_CID_RDS_RX_TRAFFIC_PROGRAM:   return "RDS Traffic Program";
 920        case V4L2_CID_RDS_RX_MUSIC_SPEECH:      return "RDS Music";
 921
 922        /* Detection controls */
 923        /* Keep the order of the 'case's the same as in v4l2-controls.h! */
 924        case V4L2_CID_DETECT_CLASS:             return "Detection Controls";
 925        case V4L2_CID_DETECT_MD_MODE:           return "Motion Detection Mode";
 926        case V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD: return "MD Global Threshold";
 927        case V4L2_CID_DETECT_MD_THRESHOLD_GRID: return "MD Threshold Grid";
 928        case V4L2_CID_DETECT_MD_REGION_GRID:    return "MD Region Grid";
 929        default:
 930                return NULL;
 931        }
 932}
 933EXPORT_SYMBOL(v4l2_ctrl_get_name);
 934
 935void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
 936                    s64 *min, s64 *max, u64 *step, s64 *def, u32 *flags)
 937{
 938        *name = v4l2_ctrl_get_name(id);
 939        *flags = 0;
 940
 941        switch (id) {
 942        case V4L2_CID_AUDIO_MUTE:
 943        case V4L2_CID_AUDIO_LOUDNESS:
 944        case V4L2_CID_AUTO_WHITE_BALANCE:
 945        case V4L2_CID_AUTOGAIN:
 946        case V4L2_CID_HFLIP:
 947        case V4L2_CID_VFLIP:
 948        case V4L2_CID_HUE_AUTO:
 949        case V4L2_CID_CHROMA_AGC:
 950        case V4L2_CID_COLOR_KILLER:
 951        case V4L2_CID_AUTOBRIGHTNESS:
 952        case V4L2_CID_MPEG_AUDIO_MUTE:
 953        case V4L2_CID_MPEG_VIDEO_MUTE:
 954        case V4L2_CID_MPEG_VIDEO_GOP_CLOSURE:
 955        case V4L2_CID_MPEG_VIDEO_PULLDOWN:
 956        case V4L2_CID_EXPOSURE_AUTO_PRIORITY:
 957        case V4L2_CID_FOCUS_AUTO:
 958        case V4L2_CID_PRIVACY:
 959        case V4L2_CID_AUDIO_LIMITER_ENABLED:
 960        case V4L2_CID_AUDIO_COMPRESSION_ENABLED:
 961        case V4L2_CID_PILOT_TONE_ENABLED:
 962        case V4L2_CID_ILLUMINATORS_1:
 963        case V4L2_CID_ILLUMINATORS_2:
 964        case V4L2_CID_FLASH_STROBE_STATUS:
 965        case V4L2_CID_FLASH_CHARGE:
 966        case V4L2_CID_FLASH_READY:
 967        case V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER:
 968        case V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE:
 969        case V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE:
 970        case V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE:
 971        case V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM:
 972        case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE:
 973        case V4L2_CID_MPEG_VIDEO_MPEG4_QPEL:
 974        case V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER:
 975        case V4L2_CID_WIDE_DYNAMIC_RANGE:
 976        case V4L2_CID_IMAGE_STABILIZATION:
 977        case V4L2_CID_RDS_RECEPTION:
 978        case V4L2_CID_RF_TUNER_LNA_GAIN_AUTO:
 979        case V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO:
 980        case V4L2_CID_RF_TUNER_IF_GAIN_AUTO:
 981        case V4L2_CID_RF_TUNER_BANDWIDTH_AUTO:
 982        case V4L2_CID_RF_TUNER_PLL_LOCK:
 983        case V4L2_CID_RDS_TX_MONO_STEREO:
 984        case V4L2_CID_RDS_TX_ARTIFICIAL_HEAD:
 985        case V4L2_CID_RDS_TX_COMPRESSED:
 986        case V4L2_CID_RDS_TX_DYNAMIC_PTY:
 987        case V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT:
 988        case V4L2_CID_RDS_TX_TRAFFIC_PROGRAM:
 989        case V4L2_CID_RDS_TX_MUSIC_SPEECH:
 990        case V4L2_CID_RDS_TX_ALT_FREQS_ENABLE:
 991        case V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT:
 992        case V4L2_CID_RDS_RX_TRAFFIC_PROGRAM:
 993        case V4L2_CID_RDS_RX_MUSIC_SPEECH:
 994                *type = V4L2_CTRL_TYPE_BOOLEAN;
 995                *min = 0;
 996                *max = *step = 1;
 997                break;
 998        case V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE:
 999        case V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE:
1000                *type = V4L2_CTRL_TYPE_INTEGER;
1001                break;
1002        case V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME:
1003        case V4L2_CID_PAN_RESET:
1004        case V4L2_CID_TILT_RESET:
1005        case V4L2_CID_FLASH_STROBE:
1006        case V4L2_CID_FLASH_STROBE_STOP:
1007        case V4L2_CID_AUTO_FOCUS_START:
1008        case V4L2_CID_AUTO_FOCUS_STOP:
1009                *type = V4L2_CTRL_TYPE_BUTTON;
1010                *flags |= V4L2_CTRL_FLAG_WRITE_ONLY |
1011                          V4L2_CTRL_FLAG_EXECUTE_ON_WRITE;
1012                *min = *max = *step = *def = 0;
1013                break;
1014        case V4L2_CID_POWER_LINE_FREQUENCY:
1015        case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
1016        case V4L2_CID_MPEG_AUDIO_ENCODING:
1017        case V4L2_CID_MPEG_AUDIO_L1_BITRATE:
1018        case V4L2_CID_MPEG_AUDIO_L2_BITRATE:
1019        case V4L2_CID_MPEG_AUDIO_L3_BITRATE:
1020        case V4L2_CID_MPEG_AUDIO_AC3_BITRATE:
1021        case V4L2_CID_MPEG_AUDIO_MODE:
1022        case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION:
1023        case V4L2_CID_MPEG_AUDIO_EMPHASIS:
1024        case V4L2_CID_MPEG_AUDIO_CRC:
1025        case V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK:
1026        case V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK:
1027        case V4L2_CID_MPEG_VIDEO_ENCODING:
1028        case V4L2_CID_MPEG_VIDEO_ASPECT:
1029        case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
1030        case V4L2_CID_MPEG_STREAM_TYPE:
1031        case V4L2_CID_MPEG_STREAM_VBI_FMT:
1032        case V4L2_CID_EXPOSURE_AUTO:
1033        case V4L2_CID_AUTO_FOCUS_RANGE:
1034        case V4L2_CID_COLORFX:
1035        case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE:
1036        case V4L2_CID_TUNE_PREEMPHASIS:
1037        case V4L2_CID_FLASH_LED_MODE:
1038        case V4L2_CID_FLASH_STROBE_SOURCE:
1039        case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
1040        case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:
1041        case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
1042        case V4L2_CID_MPEG_VIDEO_H264_LEVEL:
1043        case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE:
1044        case V4L2_CID_MPEG_VIDEO_H264_PROFILE:
1045        case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC:
1046        case V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE:
1047        case V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE:
1048        case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL:
1049        case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE:
1050        case V4L2_CID_JPEG_CHROMA_SUBSAMPLING:
1051        case V4L2_CID_ISO_SENSITIVITY_AUTO:
1052        case V4L2_CID_EXPOSURE_METERING:
1053        case V4L2_CID_SCENE_MODE:
1054        case V4L2_CID_DV_TX_MODE:
1055        case V4L2_CID_DV_TX_RGB_RANGE:
1056        case V4L2_CID_DV_TX_IT_CONTENT_TYPE:
1057        case V4L2_CID_DV_RX_RGB_RANGE:
1058        case V4L2_CID_DV_RX_IT_CONTENT_TYPE:
1059        case V4L2_CID_TEST_PATTERN:
1060        case V4L2_CID_TUNE_DEEMPHASIS:
1061        case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL:
1062        case V4L2_CID_DETECT_MD_MODE:
1063                *type = V4L2_CTRL_TYPE_MENU;
1064                break;
1065        case V4L2_CID_LINK_FREQ:
1066                *type = V4L2_CTRL_TYPE_INTEGER_MENU;
1067                break;
1068        case V4L2_CID_RDS_TX_PS_NAME:
1069        case V4L2_CID_RDS_TX_RADIO_TEXT:
1070        case V4L2_CID_RDS_RX_PS_NAME:
1071        case V4L2_CID_RDS_RX_RADIO_TEXT:
1072                *type = V4L2_CTRL_TYPE_STRING;
1073                break;
1074        case V4L2_CID_ISO_SENSITIVITY:
1075        case V4L2_CID_AUTO_EXPOSURE_BIAS:
1076        case V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS:
1077        case V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES:
1078                *type = V4L2_CTRL_TYPE_INTEGER_MENU;
1079                break;
1080        case V4L2_CID_USER_CLASS:
1081        case V4L2_CID_CAMERA_CLASS:
1082        case V4L2_CID_MPEG_CLASS:
1083        case V4L2_CID_FM_TX_CLASS:
1084        case V4L2_CID_FLASH_CLASS:
1085        case V4L2_CID_JPEG_CLASS:
1086        case V4L2_CID_IMAGE_SOURCE_CLASS:
1087        case V4L2_CID_IMAGE_PROC_CLASS:
1088        case V4L2_CID_DV_CLASS:
1089        case V4L2_CID_FM_RX_CLASS:
1090        case V4L2_CID_RF_TUNER_CLASS:
1091        case V4L2_CID_DETECT_CLASS:
1092                *type = V4L2_CTRL_TYPE_CTRL_CLASS;
1093                /* You can neither read not write these */
1094                *flags |= V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_WRITE_ONLY;
1095                *min = *max = *step = *def = 0;
1096                break;
1097        case V4L2_CID_BG_COLOR:
1098                *type = V4L2_CTRL_TYPE_INTEGER;
1099                *step = 1;
1100                *min = 0;
1101                /* Max is calculated as RGB888 that is 2^24 */
1102                *max = 0xFFFFFF;
1103                break;
1104        case V4L2_CID_FLASH_FAULT:
1105        case V4L2_CID_JPEG_ACTIVE_MARKER:
1106        case V4L2_CID_3A_LOCK:
1107        case V4L2_CID_AUTO_FOCUS_STATUS:
1108        case V4L2_CID_DV_TX_HOTPLUG:
1109        case V4L2_CID_DV_TX_RXSENSE:
1110        case V4L2_CID_DV_TX_EDID_PRESENT:
1111        case V4L2_CID_DV_RX_POWER_PRESENT:
1112                *type = V4L2_CTRL_TYPE_BITMASK;
1113                break;
1114        case V4L2_CID_MIN_BUFFERS_FOR_CAPTURE:
1115        case V4L2_CID_MIN_BUFFERS_FOR_OUTPUT:
1116                *type = V4L2_CTRL_TYPE_INTEGER;
1117                *flags |= V4L2_CTRL_FLAG_READ_ONLY;
1118                break;
1119        case V4L2_CID_MPEG_VIDEO_DEC_PTS:
1120                *type = V4L2_CTRL_TYPE_INTEGER64;
1121                *flags |= V4L2_CTRL_FLAG_VOLATILE | V4L2_CTRL_FLAG_READ_ONLY;
1122                *min = *def = 0;
1123                *max = 0x1ffffffffLL;
1124                *step = 1;
1125                break;
1126        case V4L2_CID_MPEG_VIDEO_DEC_FRAME:
1127                *type = V4L2_CTRL_TYPE_INTEGER64;
1128                *flags |= V4L2_CTRL_FLAG_VOLATILE | V4L2_CTRL_FLAG_READ_ONLY;
1129                *min = *def = 0;
1130                *max = 0x7fffffffffffffffLL;
1131                *step = 1;
1132                break;
1133        case V4L2_CID_PIXEL_RATE:
1134                *type = V4L2_CTRL_TYPE_INTEGER64;
1135                *flags |= V4L2_CTRL_FLAG_READ_ONLY;
1136                break;
1137        case V4L2_CID_DETECT_MD_REGION_GRID:
1138                *type = V4L2_CTRL_TYPE_U8;
1139                break;
1140        case V4L2_CID_DETECT_MD_THRESHOLD_GRID:
1141                *type = V4L2_CTRL_TYPE_U16;
1142                break;
1143        case V4L2_CID_RDS_TX_ALT_FREQS:
1144                *type = V4L2_CTRL_TYPE_U32;
1145                break;
1146        default:
1147                *type = V4L2_CTRL_TYPE_INTEGER;
1148                break;
1149        }
1150        switch (id) {
1151        case V4L2_CID_MPEG_AUDIO_ENCODING:
1152        case V4L2_CID_MPEG_AUDIO_MODE:
1153        case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
1154        case V4L2_CID_MPEG_VIDEO_B_FRAMES:
1155        case V4L2_CID_MPEG_STREAM_TYPE:
1156                *flags |= V4L2_CTRL_FLAG_UPDATE;
1157                break;
1158        case V4L2_CID_AUDIO_VOLUME:
1159        case V4L2_CID_AUDIO_BALANCE:
1160        case V4L2_CID_AUDIO_BASS:
1161        case V4L2_CID_AUDIO_TREBLE:
1162        case V4L2_CID_BRIGHTNESS:
1163        case V4L2_CID_CONTRAST:
1164        case V4L2_CID_SATURATION:
1165        case V4L2_CID_HUE:
1166        case V4L2_CID_RED_BALANCE:
1167        case V4L2_CID_BLUE_BALANCE:
1168        case V4L2_CID_GAMMA:
1169        case V4L2_CID_SHARPNESS:
1170        case V4L2_CID_CHROMA_GAIN:
1171        case V4L2_CID_RDS_TX_DEVIATION:
1172        case V4L2_CID_AUDIO_LIMITER_RELEASE_TIME:
1173        case V4L2_CID_AUDIO_LIMITER_DEVIATION:
1174        case V4L2_CID_AUDIO_COMPRESSION_GAIN:
1175        case V4L2_CID_AUDIO_COMPRESSION_THRESHOLD:
1176        case V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME:
1177        case V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME:
1178        case V4L2_CID_PILOT_TONE_DEVIATION:
1179        case V4L2_CID_PILOT_TONE_FREQUENCY:
1180        case V4L2_CID_TUNE_POWER_LEVEL:
1181        case V4L2_CID_TUNE_ANTENNA_CAPACITOR:
1182        case V4L2_CID_RF_TUNER_RF_GAIN:
1183        case V4L2_CID_RF_TUNER_LNA_GAIN:
1184        case V4L2_CID_RF_TUNER_MIXER_GAIN:
1185        case V4L2_CID_RF_TUNER_IF_GAIN:
1186        case V4L2_CID_RF_TUNER_BANDWIDTH:
1187        case V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD:
1188                *flags |= V4L2_CTRL_FLAG_SLIDER;
1189                break;
1190        case V4L2_CID_PAN_RELATIVE:
1191        case V4L2_CID_TILT_RELATIVE:
1192        case V4L2_CID_FOCUS_RELATIVE:
1193        case V4L2_CID_IRIS_RELATIVE:
1194        case V4L2_CID_ZOOM_RELATIVE:
1195                *flags |= V4L2_CTRL_FLAG_WRITE_ONLY |
1196                          V4L2_CTRL_FLAG_EXECUTE_ON_WRITE;
1197                break;
1198        case V4L2_CID_FLASH_STROBE_STATUS:
1199        case V4L2_CID_AUTO_FOCUS_STATUS:
1200        case V4L2_CID_FLASH_READY:
1201        case V4L2_CID_DV_TX_HOTPLUG:
1202        case V4L2_CID_DV_TX_RXSENSE:
1203        case V4L2_CID_DV_TX_EDID_PRESENT:
1204        case V4L2_CID_DV_RX_POWER_PRESENT:
1205        case V4L2_CID_DV_RX_IT_CONTENT_TYPE:
1206        case V4L2_CID_RDS_RX_PTY:
1207        case V4L2_CID_RDS_RX_PS_NAME:
1208        case V4L2_CID_RDS_RX_RADIO_TEXT:
1209        case V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT:
1210        case V4L2_CID_RDS_RX_TRAFFIC_PROGRAM:
1211        case V4L2_CID_RDS_RX_MUSIC_SPEECH:
1212                *flags |= V4L2_CTRL_FLAG_READ_ONLY;
1213                break;
1214        case V4L2_CID_RF_TUNER_PLL_LOCK:
1215                *flags |= V4L2_CTRL_FLAG_VOLATILE;
1216                break;
1217        }
1218}
1219EXPORT_SYMBOL(v4l2_ctrl_fill);
1220
1221static void fill_event(struct v4l2_event *ev, struct v4l2_ctrl *ctrl, u32 changes)
1222{
1223        memset(ev->reserved, 0, sizeof(ev->reserved));
1224        ev->type = V4L2_EVENT_CTRL;
1225        ev->id = ctrl->id;
1226        ev->u.ctrl.changes = changes;
1227        ev->u.ctrl.type = ctrl->type;
1228        ev->u.ctrl.flags = ctrl->flags;
1229        if (ctrl->is_ptr)
1230                ev->u.ctrl.value64 = 0;
1231        else
1232                ev->u.ctrl.value64 = *ctrl->p_cur.p_s64;
1233        ev->u.ctrl.minimum = ctrl->minimum;
1234        ev->u.ctrl.maximum = ctrl->maximum;
1235        if (ctrl->type == V4L2_CTRL_TYPE_MENU
1236            || ctrl->type == V4L2_CTRL_TYPE_INTEGER_MENU)
1237                ev->u.ctrl.step = 1;
1238        else
1239                ev->u.ctrl.step = ctrl->step;
1240        ev->u.ctrl.default_value = ctrl->default_value;
1241}
1242
1243static void send_event(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 changes)
1244{
1245        struct v4l2_event ev;
1246        struct v4l2_subscribed_event *sev;
1247
1248        if (list_empty(&ctrl->ev_subs))
1249                return;
1250        fill_event(&ev, ctrl, changes);
1251
1252        list_for_each_entry(sev, &ctrl->ev_subs, node)
1253                if (sev->fh != fh ||
1254                    (sev->flags & V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK))
1255                        v4l2_event_queue_fh(sev->fh, &ev);
1256}
1257
1258static bool std_equal(const struct v4l2_ctrl *ctrl, u32 idx,
1259                      union v4l2_ctrl_ptr ptr1,
1260                      union v4l2_ctrl_ptr ptr2)
1261{
1262        switch (ctrl->type) {
1263        case V4L2_CTRL_TYPE_BUTTON:
1264                return false;
1265        case V4L2_CTRL_TYPE_STRING:
1266                idx *= ctrl->elem_size;
1267                /* strings are always 0-terminated */
1268                return !strcmp(ptr1.p_char + idx, ptr2.p_char + idx);
1269        case V4L2_CTRL_TYPE_INTEGER64:
1270                return ptr1.p_s64[idx] == ptr2.p_s64[idx];
1271        case V4L2_CTRL_TYPE_U8:
1272                return ptr1.p_u8[idx] == ptr2.p_u8[idx];
1273        case V4L2_CTRL_TYPE_U16:
1274                return ptr1.p_u16[idx] == ptr2.p_u16[idx];
1275        case V4L2_CTRL_TYPE_U32:
1276                return ptr1.p_u32[idx] == ptr2.p_u32[idx];
1277        default:
1278                if (ctrl->is_int)
1279                        return ptr1.p_s32[idx] == ptr2.p_s32[idx];
1280                idx *= ctrl->elem_size;
1281                return !memcmp(ptr1.p + idx, ptr2.p + idx, ctrl->elem_size);
1282        }
1283}
1284
1285static void std_init(const struct v4l2_ctrl *ctrl, u32 idx,
1286                     union v4l2_ctrl_ptr ptr)
1287{
1288        switch (ctrl->type) {
1289        case V4L2_CTRL_TYPE_STRING:
1290                idx *= ctrl->elem_size;
1291                memset(ptr.p_char + idx, ' ', ctrl->minimum);
1292                ptr.p_char[idx + ctrl->minimum] = '\0';
1293                break;
1294        case V4L2_CTRL_TYPE_INTEGER64:
1295                ptr.p_s64[idx] = ctrl->default_value;
1296                break;
1297        case V4L2_CTRL_TYPE_INTEGER:
1298        case V4L2_CTRL_TYPE_INTEGER_MENU:
1299        case V4L2_CTRL_TYPE_MENU:
1300        case V4L2_CTRL_TYPE_BITMASK:
1301        case V4L2_CTRL_TYPE_BOOLEAN:
1302                ptr.p_s32[idx] = ctrl->default_value;
1303                break;
1304        case V4L2_CTRL_TYPE_U8:
1305                ptr.p_u8[idx] = ctrl->default_value;
1306                break;
1307        case V4L2_CTRL_TYPE_U16:
1308                ptr.p_u16[idx] = ctrl->default_value;
1309                break;
1310        case V4L2_CTRL_TYPE_U32:
1311                ptr.p_u32[idx] = ctrl->default_value;
1312                break;
1313        default:
1314                idx *= ctrl->elem_size;
1315                memset(ptr.p + idx, 0, ctrl->elem_size);
1316                break;
1317        }
1318}
1319
1320static void std_log(const struct v4l2_ctrl *ctrl)
1321{
1322        union v4l2_ctrl_ptr ptr = ctrl->p_cur;
1323
1324        if (ctrl->is_array) {
1325                unsigned i;
1326
1327                for (i = 0; i < ctrl->nr_of_dims; i++)
1328                        pr_cont("[%u]", ctrl->dims[i]);
1329                pr_cont(" ");
1330        }
1331
1332        switch (ctrl->type) {
1333        case V4L2_CTRL_TYPE_INTEGER:
1334                pr_cont("%d", *ptr.p_s32);
1335                break;
1336        case V4L2_CTRL_TYPE_BOOLEAN:
1337                pr_cont("%s", *ptr.p_s32 ? "true" : "false");
1338                break;
1339        case V4L2_CTRL_TYPE_MENU:
1340                pr_cont("%s", ctrl->qmenu[*ptr.p_s32]);
1341                break;
1342        case V4L2_CTRL_TYPE_INTEGER_MENU:
1343                pr_cont("%lld", ctrl->qmenu_int[*ptr.p_s32]);
1344                break;
1345        case V4L2_CTRL_TYPE_BITMASK:
1346                pr_cont("0x%08x", *ptr.p_s32);
1347                break;
1348        case V4L2_CTRL_TYPE_INTEGER64:
1349                pr_cont("%lld", *ptr.p_s64);
1350                break;
1351        case V4L2_CTRL_TYPE_STRING:
1352                pr_cont("%s", ptr.p_char);
1353                break;
1354        case V4L2_CTRL_TYPE_U8:
1355                pr_cont("%u", (unsigned)*ptr.p_u8);
1356                break;
1357        case V4L2_CTRL_TYPE_U16:
1358                pr_cont("%u", (unsigned)*ptr.p_u16);
1359                break;
1360        case V4L2_CTRL_TYPE_U32:
1361                pr_cont("%u", (unsigned)*ptr.p_u32);
1362                break;
1363        default:
1364                pr_cont("unknown type %d", ctrl->type);
1365                break;
1366        }
1367}
1368
1369/*
1370 * Round towards the closest legal value. Be careful when we are
1371 * close to the maximum range of the control type to prevent
1372 * wrap-arounds.
1373 */
1374#define ROUND_TO_RANGE(val, offset_type, ctrl)                  \
1375({                                                              \
1376        offset_type offset;                                     \
1377        if ((ctrl)->maximum >= 0 &&                             \
1378            val >= (ctrl)->maximum - (s32)((ctrl)->step / 2))   \
1379                val = (ctrl)->maximum;                          \
1380        else                                                    \
1381                val += (s32)((ctrl)->step / 2);                 \
1382        val = clamp_t(typeof(val), val,                         \
1383                      (ctrl)->minimum, (ctrl)->maximum);        \
1384        offset = (val) - (ctrl)->minimum;                       \
1385        offset = (ctrl)->step * (offset / (u32)(ctrl)->step);   \
1386        val = (ctrl)->minimum + offset;                         \
1387        0;                                                      \
1388})
1389
1390/* Validate a new control */
1391static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx,
1392                        union v4l2_ctrl_ptr ptr)
1393{
1394        size_t len;
1395        u64 offset;
1396        s64 val;
1397
1398        switch (ctrl->type) {
1399        case V4L2_CTRL_TYPE_INTEGER:
1400                return ROUND_TO_RANGE(ptr.p_s32[idx], u32, ctrl);
1401        case V4L2_CTRL_TYPE_INTEGER64:
1402                /*
1403                 * We can't use the ROUND_TO_RANGE define here due to
1404                 * the u64 divide that needs special care.
1405                 */
1406                val = ptr.p_s64[idx];
1407                if (ctrl->maximum >= 0 && val >= ctrl->maximum - (s64)(ctrl->step / 2))
1408                        val = ctrl->maximum;
1409                else
1410                        val += (s64)(ctrl->step / 2);
1411                val = clamp_t(s64, val, ctrl->minimum, ctrl->maximum);
1412                offset = val - ctrl->minimum;
1413                do_div(offset, ctrl->step);
1414                ptr.p_s64[idx] = ctrl->minimum + offset * ctrl->step;
1415                return 0;
1416        case V4L2_CTRL_TYPE_U8:
1417                return ROUND_TO_RANGE(ptr.p_u8[idx], u8, ctrl);
1418        case V4L2_CTRL_TYPE_U16:
1419                return ROUND_TO_RANGE(ptr.p_u16[idx], u16, ctrl);
1420        case V4L2_CTRL_TYPE_U32:
1421                return ROUND_TO_RANGE(ptr.p_u32[idx], u32, ctrl);
1422
1423        case V4L2_CTRL_TYPE_BOOLEAN:
1424                ptr.p_s32[idx] = !!ptr.p_s32[idx];
1425                return 0;
1426
1427        case V4L2_CTRL_TYPE_MENU:
1428        case V4L2_CTRL_TYPE_INTEGER_MENU:
1429                if (ptr.p_s32[idx] < ctrl->minimum || ptr.p_s32[idx] > ctrl->maximum)
1430                        return -ERANGE;
1431                if (ctrl->menu_skip_mask & (1 << ptr.p_s32[idx]))
1432                        return -EINVAL;
1433                if (ctrl->type == V4L2_CTRL_TYPE_MENU &&
1434                    ctrl->qmenu[ptr.p_s32[idx]][0] == '\0')
1435                        return -EINVAL;
1436                return 0;
1437
1438        case V4L2_CTRL_TYPE_BITMASK:
1439                ptr.p_s32[idx] &= ctrl->maximum;
1440                return 0;
1441
1442        case V4L2_CTRL_TYPE_BUTTON:
1443        case V4L2_CTRL_TYPE_CTRL_CLASS:
1444                ptr.p_s32[idx] = 0;
1445                return 0;
1446
1447        case V4L2_CTRL_TYPE_STRING:
1448                idx *= ctrl->elem_size;
1449                len = strlen(ptr.p_char + idx);
1450                if (len < ctrl->minimum)
1451                        return -ERANGE;
1452                if ((len - (u32)ctrl->minimum) % (u32)ctrl->step)
1453                        return -ERANGE;
1454                return 0;
1455
1456        default:
1457                return -EINVAL;
1458        }
1459}
1460
1461static const struct v4l2_ctrl_type_ops std_type_ops = {
1462        .equal = std_equal,
1463        .init = std_init,
1464        .log = std_log,
1465        .validate = std_validate,
1466};
1467
1468/* Helper function: copy the given control value back to the caller */
1469static int ptr_to_user(struct v4l2_ext_control *c,
1470                       struct v4l2_ctrl *ctrl,
1471                       union v4l2_ctrl_ptr ptr)
1472{
1473        u32 len;
1474
1475        if (ctrl->is_ptr && !ctrl->is_string)
1476                return copy_to_user(c->ptr, ptr.p, c->size) ?
1477                       -EFAULT : 0;
1478
1479        switch (ctrl->type) {
1480        case V4L2_CTRL_TYPE_STRING:
1481                len = strlen(ptr.p_char);
1482                if (c->size < len + 1) {
1483                        c->size = ctrl->elem_size;
1484                        return -ENOSPC;
1485                }
1486                return copy_to_user(c->string, ptr.p_char, len + 1) ?
1487                       -EFAULT : 0;
1488        case V4L2_CTRL_TYPE_INTEGER64:
1489                c->value64 = *ptr.p_s64;
1490                break;
1491        default:
1492                c->value = *ptr.p_s32;
1493                break;
1494        }
1495        return 0;
1496}
1497
1498/* Helper function: copy the current control value back to the caller */
1499static int cur_to_user(struct v4l2_ext_control *c,
1500                       struct v4l2_ctrl *ctrl)
1501{
1502        return ptr_to_user(c, ctrl, ctrl->p_cur);
1503}
1504
1505/* Helper function: copy the new control value back to the caller */
1506static int new_to_user(struct v4l2_ext_control *c,
1507                       struct v4l2_ctrl *ctrl)
1508{
1509        return ptr_to_user(c, ctrl, ctrl->p_new);
1510}
1511
1512/* Helper function: copy the initial control value back to the caller */
1513static int def_to_user(struct v4l2_ext_control *c, struct v4l2_ctrl *ctrl)
1514{
1515        int idx;
1516
1517        for (idx = 0; idx < ctrl->elems; idx++)
1518                ctrl->type_ops->init(ctrl, idx, ctrl->p_new);
1519
1520        return ptr_to_user(c, ctrl, ctrl->p_new);
1521}
1522
1523/* Helper function: copy the caller-provider value to the given control value */
1524static int user_to_ptr(struct v4l2_ext_control *c,
1525                       struct v4l2_ctrl *ctrl,
1526                       union v4l2_ctrl_ptr ptr)
1527{
1528        int ret;
1529        u32 size;
1530
1531        ctrl->is_new = 1;
1532        if (ctrl->is_ptr && !ctrl->is_string) {
1533                unsigned idx;
1534
1535                ret = copy_from_user(ptr.p, c->ptr, c->size) ? -EFAULT : 0;
1536                if (ret || !ctrl->is_array)
1537                        return ret;
1538                for (idx = c->size / ctrl->elem_size; idx < ctrl->elems; idx++)
1539                        ctrl->type_ops->init(ctrl, idx, ptr);
1540                return 0;
1541        }
1542
1543        switch (ctrl->type) {
1544        case V4L2_CTRL_TYPE_INTEGER64:
1545                *ptr.p_s64 = c->value64;
1546                break;
1547        case V4L2_CTRL_TYPE_STRING:
1548                size = c->size;
1549                if (size == 0)
1550                        return -ERANGE;
1551                if (size > ctrl->maximum + 1)
1552                        size = ctrl->maximum + 1;
1553                ret = copy_from_user(ptr.p_char, c->string, size) ? -EFAULT : 0;
1554                if (!ret) {
1555                        char last = ptr.p_char[size - 1];
1556
1557                        ptr.p_char[size - 1] = 0;
1558                        /* If the string was longer than ctrl->maximum,
1559                           then return an error. */
1560                        if (strlen(ptr.p_char) == ctrl->maximum && last)
1561                                return -ERANGE;
1562                }
1563                return ret;
1564        default:
1565                *ptr.p_s32 = c->value;
1566                break;
1567        }
1568        return 0;
1569}
1570
1571/* Helper function: copy the caller-provider value as the new control value */
1572static int user_to_new(struct v4l2_ext_control *c,
1573                       struct v4l2_ctrl *ctrl)
1574{
1575        return user_to_ptr(c, ctrl, ctrl->p_new);
1576}
1577
1578/* Copy the one value to another. */
1579static void ptr_to_ptr(struct v4l2_ctrl *ctrl,
1580                       union v4l2_ctrl_ptr from, union v4l2_ctrl_ptr to)
1581{
1582        if (ctrl == NULL)
1583                return;
1584        memcpy(to.p, from.p, ctrl->elems * ctrl->elem_size);
1585}
1586
1587/* Copy the new value to the current value. */
1588static void new_to_cur(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 ch_flags)
1589{
1590        bool changed;
1591
1592        if (ctrl == NULL)
1593                return;
1594
1595        /* has_changed is set by cluster_changed */
1596        changed = ctrl->has_changed;
1597        if (changed)
1598                ptr_to_ptr(ctrl, ctrl->p_new, ctrl->p_cur);
1599
1600        if (ch_flags & V4L2_EVENT_CTRL_CH_FLAGS) {
1601                /* Note: CH_FLAGS is only set for auto clusters. */
1602                ctrl->flags &=
1603                        ~(V4L2_CTRL_FLAG_INACTIVE | V4L2_CTRL_FLAG_VOLATILE);
1604                if (!is_cur_manual(ctrl->cluster[0])) {
1605                        ctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
1606                        if (ctrl->cluster[0]->has_volatiles)
1607                                ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE;
1608                }
1609                fh = NULL;
1610        }
1611        if (changed || ch_flags) {
1612                /* If a control was changed that was not one of the controls
1613                   modified by the application, then send the event to all. */
1614                if (!ctrl->is_new)
1615                        fh = NULL;
1616                send_event(fh, ctrl,
1617                        (changed ? V4L2_EVENT_CTRL_CH_VALUE : 0) | ch_flags);
1618                if (ctrl->call_notify && changed && ctrl->handler->notify)
1619                        ctrl->handler->notify(ctrl, ctrl->handler->notify_priv);
1620        }
1621}
1622
1623/* Copy the current value to the new value */
1624static void cur_to_new(struct v4l2_ctrl *ctrl)
1625{
1626        if (ctrl == NULL)
1627                return;
1628        ptr_to_ptr(ctrl, ctrl->p_cur, ctrl->p_new);
1629}
1630
1631/* Return non-zero if one or more of the controls in the cluster has a new
1632   value that differs from the current value. */
1633static int cluster_changed(struct v4l2_ctrl *master)
1634{
1635        bool changed = false;
1636        unsigned idx;
1637        int i;
1638
1639        for (i = 0; i < master->ncontrols; i++) {
1640                struct v4l2_ctrl *ctrl = master->cluster[i];
1641                bool ctrl_changed = false;
1642
1643                if (ctrl == NULL)
1644                        continue;
1645
1646                if (ctrl->flags & V4L2_CTRL_FLAG_EXECUTE_ON_WRITE)
1647                        changed = ctrl_changed = true;
1648
1649                /*
1650                 * Set has_changed to false to avoid generating
1651                 * the event V4L2_EVENT_CTRL_CH_VALUE
1652                 */
1653                if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE) {
1654                        ctrl->has_changed = false;
1655                        continue;
1656                }
1657
1658                for (idx = 0; !ctrl_changed && idx < ctrl->elems; idx++)
1659                        ctrl_changed = !ctrl->type_ops->equal(ctrl, idx,
1660                                ctrl->p_cur, ctrl->p_new);
1661                ctrl->has_changed = ctrl_changed;
1662                changed |= ctrl->has_changed;
1663        }
1664        return changed;
1665}
1666
1667/* Control range checking */
1668static int check_range(enum v4l2_ctrl_type type,
1669                s64 min, s64 max, u64 step, s64 def)
1670{
1671        switch (type) {
1672        case V4L2_CTRL_TYPE_BOOLEAN:
1673                if (step != 1 || max > 1 || min < 0)
1674                        return -ERANGE;
1675                /* fall through */
1676        case V4L2_CTRL_TYPE_U8:
1677        case V4L2_CTRL_TYPE_U16:
1678        case V4L2_CTRL_TYPE_U32:
1679        case V4L2_CTRL_TYPE_INTEGER:
1680        case V4L2_CTRL_TYPE_INTEGER64:
1681                if (step == 0 || min > max || def < min || def > max)
1682                        return -ERANGE;
1683                return 0;
1684        case V4L2_CTRL_TYPE_BITMASK:
1685                if (step || min || !max || (def & ~max))
1686                        return -ERANGE;
1687                return 0;
1688        case V4L2_CTRL_TYPE_MENU:
1689        case V4L2_CTRL_TYPE_INTEGER_MENU:
1690                if (min > max || def < min || def > max)
1691                        return -ERANGE;
1692                /* Note: step == menu_skip_mask for menu controls.
1693                   So here we check if the default value is masked out. */
1694                if (step && ((1 << def) & step))
1695                        return -EINVAL;
1696                return 0;
1697        case V4L2_CTRL_TYPE_STRING:
1698                if (min > max || min < 0 || step < 1 || def)
1699                        return -ERANGE;
1700                return 0;
1701        default:
1702                return 0;
1703        }
1704}
1705
1706/* Validate a new control */
1707static int validate_new(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr p_new)
1708{
1709        unsigned idx;
1710        int err = 0;
1711
1712        for (idx = 0; !err && idx < ctrl->elems; idx++)
1713                err = ctrl->type_ops->validate(ctrl, idx, p_new);
1714        return err;
1715}
1716
1717static inline u32 node2id(struct list_head *node)
1718{
1719        return list_entry(node, struct v4l2_ctrl_ref, node)->ctrl->id;
1720}
1721
1722/* Set the handler's error code if it wasn't set earlier already */
1723static inline int handler_set_err(struct v4l2_ctrl_handler *hdl, int err)
1724{
1725        if (hdl->error == 0)
1726                hdl->error = err;
1727        return err;
1728}
1729
1730/* Initialize the handler */
1731int v4l2_ctrl_handler_init_class(struct v4l2_ctrl_handler *hdl,
1732                                 unsigned nr_of_controls_hint,
1733                                 struct lock_class_key *key, const char *name)
1734{
1735        hdl->lock = &hdl->_lock;
1736        mutex_init(hdl->lock);
1737        lockdep_set_class_and_name(hdl->lock, key, name);
1738        INIT_LIST_HEAD(&hdl->ctrls);
1739        INIT_LIST_HEAD(&hdl->ctrl_refs);
1740        hdl->nr_of_buckets = 1 + nr_of_controls_hint / 8;
1741        hdl->buckets = kcalloc(hdl->nr_of_buckets, sizeof(hdl->buckets[0]),
1742                               GFP_KERNEL);
1743        hdl->error = hdl->buckets ? 0 : -ENOMEM;
1744        return hdl->error;
1745}
1746EXPORT_SYMBOL(v4l2_ctrl_handler_init_class);
1747
1748/* Free all controls and control refs */
1749void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)
1750{
1751        struct v4l2_ctrl_ref *ref, *next_ref;
1752        struct v4l2_ctrl *ctrl, *next_ctrl;
1753        struct v4l2_subscribed_event *sev, *next_sev;
1754
1755        if (hdl == NULL || hdl->buckets == NULL)
1756                return;
1757
1758        mutex_lock(hdl->lock);
1759        /* Free all nodes */
1760        list_for_each_entry_safe(ref, next_ref, &hdl->ctrl_refs, node) {
1761                list_del(&ref->node);
1762                kfree(ref);
1763        }
1764        /* Free all controls owned by the handler */
1765        list_for_each_entry_safe(ctrl, next_ctrl, &hdl->ctrls, node) {
1766                list_del(&ctrl->node);
1767                list_for_each_entry_safe(sev, next_sev, &ctrl->ev_subs, node)
1768                        list_del(&sev->node);
1769                kfree(ctrl);
1770        }
1771        kfree(hdl->buckets);
1772        hdl->buckets = NULL;
1773        hdl->cached = NULL;
1774        hdl->error = 0;
1775        mutex_unlock(hdl->lock);
1776}
1777EXPORT_SYMBOL(v4l2_ctrl_handler_free);
1778
1779/* For backwards compatibility: V4L2_CID_PRIVATE_BASE should no longer
1780   be used except in G_CTRL, S_CTRL, QUERYCTRL and QUERYMENU when dealing
1781   with applications that do not use the NEXT_CTRL flag.
1782
1783   We just find the n-th private user control. It's O(N), but that should not
1784   be an issue in this particular case. */
1785static struct v4l2_ctrl_ref *find_private_ref(
1786                struct v4l2_ctrl_handler *hdl, u32 id)
1787{
1788        struct v4l2_ctrl_ref *ref;
1789
1790        id -= V4L2_CID_PRIVATE_BASE;
1791        list_for_each_entry(ref, &hdl->ctrl_refs, node) {
1792                /* Search for private user controls that are compatible with
1793                   VIDIOC_G/S_CTRL. */
1794                if (V4L2_CTRL_ID2WHICH(ref->ctrl->id) == V4L2_CTRL_CLASS_USER &&
1795                    V4L2_CTRL_DRIVER_PRIV(ref->ctrl->id)) {
1796                        if (!ref->ctrl->is_int)
1797                                continue;
1798                        if (id == 0)
1799                                return ref;
1800                        id--;
1801                }
1802        }
1803        return NULL;
1804}
1805
1806/* Find a control with the given ID. */
1807static struct v4l2_ctrl_ref *find_ref(struct v4l2_ctrl_handler *hdl, u32 id)
1808{
1809        struct v4l2_ctrl_ref *ref;
1810        int bucket;
1811
1812        id &= V4L2_CTRL_ID_MASK;
1813
1814        /* Old-style private controls need special handling */
1815        if (id >= V4L2_CID_PRIVATE_BASE)
1816                return find_private_ref(hdl, id);
1817        bucket = id % hdl->nr_of_buckets;
1818
1819        /* Simple optimization: cache the last control found */
1820        if (hdl->cached && hdl->cached->ctrl->id == id)
1821                return hdl->cached;
1822
1823        /* Not in cache, search the hash */
1824        ref = hdl->buckets ? hdl->buckets[bucket] : NULL;
1825        while (ref && ref->ctrl->id != id)
1826                ref = ref->next;
1827
1828        if (ref)
1829                hdl->cached = ref; /* cache it! */
1830        return ref;
1831}
1832
1833/* Find a control with the given ID. Take the handler's lock first. */
1834static struct v4l2_ctrl_ref *find_ref_lock(
1835                struct v4l2_ctrl_handler *hdl, u32 id)
1836{
1837        struct v4l2_ctrl_ref *ref = NULL;
1838
1839        if (hdl) {
1840                mutex_lock(hdl->lock);
1841                ref = find_ref(hdl, id);
1842                mutex_unlock(hdl->lock);
1843        }
1844        return ref;
1845}
1846
1847/* Find a control with the given ID. */
1848struct v4l2_ctrl *v4l2_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id)
1849{
1850        struct v4l2_ctrl_ref *ref = find_ref_lock(hdl, id);
1851
1852        return ref ? ref->ctrl : NULL;
1853}
1854EXPORT_SYMBOL(v4l2_ctrl_find);
1855
1856/* Allocate a new v4l2_ctrl_ref and hook it into the handler. */
1857static int handler_new_ref(struct v4l2_ctrl_handler *hdl,
1858                           struct v4l2_ctrl *ctrl)
1859{
1860        struct v4l2_ctrl_ref *ref;
1861        struct v4l2_ctrl_ref *new_ref;
1862        u32 id = ctrl->id;
1863        u32 class_ctrl = V4L2_CTRL_ID2WHICH(id) | 1;
1864        int bucket = id % hdl->nr_of_buckets;   /* which bucket to use */
1865
1866        /*
1867         * Automatically add the control class if it is not yet present and
1868         * the new control is not a compound control.
1869         */
1870        if (ctrl->type < V4L2_CTRL_COMPOUND_TYPES &&
1871            id != class_ctrl && find_ref_lock(hdl, class_ctrl) == NULL)
1872                if (!v4l2_ctrl_new_std(hdl, NULL, class_ctrl, 0, 0, 0, 0))
1873                        return hdl->error;
1874
1875        if (hdl->error)
1876                return hdl->error;
1877
1878        new_ref = kzalloc(sizeof(*new_ref), GFP_KERNEL);
1879        if (!new_ref)
1880                return handler_set_err(hdl, -ENOMEM);
1881        new_ref->ctrl = ctrl;
1882        if (ctrl->handler == hdl) {
1883                /* By default each control starts in a cluster of its own.
1884                   new_ref->ctrl is basically a cluster array with one
1885                   element, so that's perfect to use as the cluster pointer.
1886                   But only do this for the handler that owns the control. */
1887                ctrl->cluster = &new_ref->ctrl;
1888                ctrl->ncontrols = 1;
1889        }
1890
1891        INIT_LIST_HEAD(&new_ref->node);
1892
1893        mutex_lock(hdl->lock);
1894
1895        /* Add immediately at the end of the list if the list is empty, or if
1896           the last element in the list has a lower ID.
1897           This ensures that when elements are added in ascending order the
1898           insertion is an O(1) operation. */
1899        if (list_empty(&hdl->ctrl_refs) || id > node2id(hdl->ctrl_refs.prev)) {
1900                list_add_tail(&new_ref->node, &hdl->ctrl_refs);
1901                goto insert_in_hash;
1902        }
1903
1904        /* Find insert position in sorted list */
1905        list_for_each_entry(ref, &hdl->ctrl_refs, node) {
1906                if (ref->ctrl->id < id)
1907                        continue;
1908                /* Don't add duplicates */
1909                if (ref->ctrl->id == id) {
1910                        kfree(new_ref);
1911                        goto unlock;
1912                }
1913                list_add(&new_ref->node, ref->node.prev);
1914                break;
1915        }
1916
1917insert_in_hash:
1918        /* Insert the control node in the hash */
1919        new_ref->next = hdl->buckets[bucket];
1920        hdl->buckets[bucket] = new_ref;
1921
1922unlock:
1923        mutex_unlock(hdl->lock);
1924        return 0;
1925}
1926
1927/* Add a new control */
1928static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
1929                        const struct v4l2_ctrl_ops *ops,
1930                        const struct v4l2_ctrl_type_ops *type_ops,
1931                        u32 id, const char *name, enum v4l2_ctrl_type type,
1932                        s64 min, s64 max, u64 step, s64 def,
1933                        const u32 dims[V4L2_CTRL_MAX_DIMS], u32 elem_size,
1934                        u32 flags, const char * const *qmenu,
1935                        const s64 *qmenu_int, void *priv)
1936{
1937        struct v4l2_ctrl *ctrl;
1938        unsigned sz_extra;
1939        unsigned nr_of_dims = 0;
1940        unsigned elems = 1;
1941        bool is_array;
1942        unsigned tot_ctrl_size;
1943        unsigned idx;
1944        void *data;
1945        int err;
1946
1947        if (hdl->error)
1948                return NULL;
1949
1950        while (dims && dims[nr_of_dims]) {
1951                elems *= dims[nr_of_dims];
1952                nr_of_dims++;
1953                if (nr_of_dims == V4L2_CTRL_MAX_DIMS)
1954                        break;
1955        }
1956        is_array = nr_of_dims > 0;
1957
1958        /* Prefill elem_size for all types handled by std_type_ops */
1959        switch (type) {
1960        case V4L2_CTRL_TYPE_INTEGER64:
1961                elem_size = sizeof(s64);
1962                break;
1963        case V4L2_CTRL_TYPE_STRING:
1964                elem_size = max + 1;
1965                break;
1966        case V4L2_CTRL_TYPE_U8:
1967                elem_size = sizeof(u8);
1968                break;
1969        case V4L2_CTRL_TYPE_U16:
1970                elem_size = sizeof(u16);
1971                break;
1972        case V4L2_CTRL_TYPE_U32:
1973                elem_size = sizeof(u32);
1974                break;
1975        default:
1976                if (type < V4L2_CTRL_COMPOUND_TYPES)
1977                        elem_size = sizeof(s32);
1978                break;
1979        }
1980        tot_ctrl_size = elem_size * elems;
1981
1982        /* Sanity checks */
1983        if (id == 0 || name == NULL || !elem_size ||
1984            id >= V4L2_CID_PRIVATE_BASE ||
1985            (type == V4L2_CTRL_TYPE_MENU && qmenu == NULL) ||
1986            (type == V4L2_CTRL_TYPE_INTEGER_MENU && qmenu_int == NULL)) {
1987                handler_set_err(hdl, -ERANGE);
1988                return NULL;
1989        }
1990        err = check_range(type, min, max, step, def);
1991        if (err) {
1992                handler_set_err(hdl, err);
1993                return NULL;
1994        }
1995        if (type == V4L2_CTRL_TYPE_BITMASK && ((def & ~max) || min || step)) {
1996                handler_set_err(hdl, -ERANGE);
1997                return NULL;
1998        }
1999        if (is_array &&
2000            (type == V4L2_CTRL_TYPE_BUTTON ||
2001             type == V4L2_CTRL_TYPE_CTRL_CLASS)) {
2002                handler_set_err(hdl, -EINVAL);
2003                return NULL;
2004        }
2005
2006        sz_extra = 0;
2007        if (type == V4L2_CTRL_TYPE_BUTTON)
2008                flags |= V4L2_CTRL_FLAG_WRITE_ONLY |
2009                        V4L2_CTRL_FLAG_EXECUTE_ON_WRITE;
2010        else if (type == V4L2_CTRL_TYPE_CTRL_CLASS)
2011                flags |= V4L2_CTRL_FLAG_READ_ONLY;
2012        else if (type == V4L2_CTRL_TYPE_INTEGER64 ||
2013                 type == V4L2_CTRL_TYPE_STRING ||
2014                 type >= V4L2_CTRL_COMPOUND_TYPES ||
2015                 is_array)
2016                sz_extra += 2 * tot_ctrl_size;
2017
2018        ctrl = kzalloc(sizeof(*ctrl) + sz_extra, GFP_KERNEL);
2019        if (ctrl == NULL) {
2020                handler_set_err(hdl, -ENOMEM);
2021                return NULL;
2022        }
2023
2024        INIT_LIST_HEAD(&ctrl->node);
2025        INIT_LIST_HEAD(&ctrl->ev_subs);
2026        ctrl->handler = hdl;
2027        ctrl->ops = ops;
2028        ctrl->type_ops = type_ops ? type_ops : &std_type_ops;
2029        ctrl->id = id;
2030        ctrl->name = name;
2031        ctrl->type = type;
2032        ctrl->flags = flags;
2033        ctrl->minimum = min;
2034        ctrl->maximum = max;
2035        ctrl->step = step;
2036        ctrl->default_value = def;
2037        ctrl->is_string = !is_array && type == V4L2_CTRL_TYPE_STRING;
2038        ctrl->is_ptr = is_array || type >= V4L2_CTRL_COMPOUND_TYPES || ctrl->is_string;
2039        ctrl->is_int = !ctrl->is_ptr && type != V4L2_CTRL_TYPE_INTEGER64;
2040        ctrl->is_array = is_array;
2041        ctrl->elems = elems;
2042        ctrl->nr_of_dims = nr_of_dims;
2043        if (nr_of_dims)
2044                memcpy(ctrl->dims, dims, nr_of_dims * sizeof(dims[0]));
2045        ctrl->elem_size = elem_size;
2046        if (type == V4L2_CTRL_TYPE_MENU)
2047                ctrl->qmenu = qmenu;
2048        else if (type == V4L2_CTRL_TYPE_INTEGER_MENU)
2049                ctrl->qmenu_int = qmenu_int;
2050        ctrl->priv = priv;
2051        ctrl->cur.val = ctrl->val = def;
2052        data = &ctrl[1];
2053
2054        if (!ctrl->is_int) {
2055                ctrl->p_new.p = data;
2056                ctrl->p_cur.p = data + tot_ctrl_size;
2057        } else {
2058                ctrl->p_new.p = &ctrl->val;
2059                ctrl->p_cur.p = &ctrl->cur.val;
2060        }
2061        for (idx = 0; idx < elems; idx++) {
2062                ctrl->type_ops->init(ctrl, idx, ctrl->p_cur);
2063                ctrl->type_ops->init(ctrl, idx, ctrl->p_new);
2064        }
2065
2066        if (handler_new_ref(hdl, ctrl)) {
2067                kfree(ctrl);
2068                return NULL;
2069        }
2070        mutex_lock(hdl->lock);
2071        list_add_tail(&ctrl->node, &hdl->ctrls);
2072        mutex_unlock(hdl->lock);
2073        return ctrl;
2074}
2075
2076struct v4l2_ctrl *v4l2_ctrl_new_custom(struct v4l2_ctrl_handler *hdl,
2077                        const struct v4l2_ctrl_config *cfg, void *priv)
2078{
2079        bool is_menu;
2080        struct v4l2_ctrl *ctrl;
2081        const char *name = cfg->name;
2082        const char * const *qmenu = cfg->qmenu;
2083        const s64 *qmenu_int = cfg->qmenu_int;
2084        enum v4l2_ctrl_type type = cfg->type;
2085        u32 flags = cfg->flags;
2086        s64 min = cfg->min;
2087        s64 max = cfg->max;
2088        u64 step = cfg->step;
2089        s64 def = cfg->def;
2090
2091        if (name == NULL)
2092                v4l2_ctrl_fill(cfg->id, &name, &type, &min, &max, &step,
2093                                                                &def, &flags);
2094
2095        is_menu = (cfg->type == V4L2_CTRL_TYPE_MENU ||
2096                   cfg->type == V4L2_CTRL_TYPE_INTEGER_MENU);
2097        if (is_menu)
2098                WARN_ON(step);
2099        else
2100                WARN_ON(cfg->menu_skip_mask);
2101        if (cfg->type == V4L2_CTRL_TYPE_MENU && qmenu == NULL)
2102                qmenu = v4l2_ctrl_get_menu(cfg->id);
2103        else if (cfg->type == V4L2_CTRL_TYPE_INTEGER_MENU &&
2104                 qmenu_int == NULL) {
2105                handler_set_err(hdl, -EINVAL);
2106                return NULL;
2107        }
2108
2109        ctrl = v4l2_ctrl_new(hdl, cfg->ops, cfg->type_ops, cfg->id, name,
2110                        type, min, max,
2111                        is_menu ? cfg->menu_skip_mask : step, def,
2112                        cfg->dims, cfg->elem_size,
2113                        flags, qmenu, qmenu_int, priv);
2114        if (ctrl)
2115                ctrl->is_private = cfg->is_private;
2116        return ctrl;
2117}
2118EXPORT_SYMBOL(v4l2_ctrl_new_custom);
2119
2120/* Helper function for standard non-menu controls */
2121struct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl,
2122                        const struct v4l2_ctrl_ops *ops,
2123                        u32 id, s64 min, s64 max, u64 step, s64 def)
2124{
2125        const char *name;
2126        enum v4l2_ctrl_type type;
2127        u32 flags;
2128
2129        v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2130        if (type == V4L2_CTRL_TYPE_MENU ||
2131            type == V4L2_CTRL_TYPE_INTEGER_MENU ||
2132            type >= V4L2_CTRL_COMPOUND_TYPES) {
2133                handler_set_err(hdl, -EINVAL);
2134                return NULL;
2135        }
2136        return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2137                             min, max, step, def, NULL, 0,
2138                             flags, NULL, NULL, NULL);
2139}
2140EXPORT_SYMBOL(v4l2_ctrl_new_std);
2141
2142/* Helper function for standard menu controls */
2143struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl,
2144                        const struct v4l2_ctrl_ops *ops,
2145                        u32 id, u8 _max, u64 mask, u8 _def)
2146{
2147        const char * const *qmenu = NULL;
2148        const s64 *qmenu_int = NULL;
2149        unsigned int qmenu_int_len = 0;
2150        const char *name;
2151        enum v4l2_ctrl_type type;
2152        s64 min;
2153        s64 max = _max;
2154        s64 def = _def;
2155        u64 step;
2156        u32 flags;
2157
2158        v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2159
2160        if (type == V4L2_CTRL_TYPE_MENU)
2161                qmenu = v4l2_ctrl_get_menu(id);
2162        else if (type == V4L2_CTRL_TYPE_INTEGER_MENU)
2163                qmenu_int = v4l2_ctrl_get_int_menu(id, &qmenu_int_len);
2164
2165        if ((!qmenu && !qmenu_int) || (qmenu_int && max > qmenu_int_len)) {
2166                handler_set_err(hdl, -EINVAL);
2167                return NULL;
2168        }
2169        return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2170                             0, max, mask, def, NULL, 0,
2171                             flags, qmenu, qmenu_int, NULL);
2172}
2173EXPORT_SYMBOL(v4l2_ctrl_new_std_menu);
2174
2175/* Helper function for standard menu controls with driver defined menu */
2176struct v4l2_ctrl *v4l2_ctrl_new_std_menu_items(struct v4l2_ctrl_handler *hdl,
2177                        const struct v4l2_ctrl_ops *ops, u32 id, u8 _max,
2178                        u64 mask, u8 _def, const char * const *qmenu)
2179{
2180        enum v4l2_ctrl_type type;
2181        const char *name;
2182        u32 flags;
2183        u64 step;
2184        s64 min;
2185        s64 max = _max;
2186        s64 def = _def;
2187
2188        /* v4l2_ctrl_new_std_menu_items() should only be called for
2189         * standard controls without a standard menu.
2190         */
2191        if (v4l2_ctrl_get_menu(id)) {
2192                handler_set_err(hdl, -EINVAL);
2193                return NULL;
2194        }
2195
2196        v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2197        if (type != V4L2_CTRL_TYPE_MENU || qmenu == NULL) {
2198                handler_set_err(hdl, -EINVAL);
2199                return NULL;
2200        }
2201        return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2202                             0, max, mask, def, NULL, 0,
2203                             flags, qmenu, NULL, NULL);
2204
2205}
2206EXPORT_SYMBOL(v4l2_ctrl_new_std_menu_items);
2207
2208/* Helper function for standard integer menu controls */
2209struct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl,
2210                        const struct v4l2_ctrl_ops *ops,
2211                        u32 id, u8 _max, u8 _def, const s64 *qmenu_int)
2212{
2213        const char *name;
2214        enum v4l2_ctrl_type type;
2215        s64 min;
2216        u64 step;
2217        s64 max = _max;
2218        s64 def = _def;
2219        u32 flags;
2220
2221        v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2222        if (type != V4L2_CTRL_TYPE_INTEGER_MENU) {
2223                handler_set_err(hdl, -EINVAL);
2224                return NULL;
2225        }
2226        return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2227                             0, max, 0, def, NULL, 0,
2228                             flags, NULL, qmenu_int, NULL);
2229}
2230EXPORT_SYMBOL(v4l2_ctrl_new_int_menu);
2231
2232/* Add the controls from another handler to our own. */
2233int v4l2_ctrl_add_handler(struct v4l2_ctrl_handler *hdl,
2234                          struct v4l2_ctrl_handler *add,
2235                          bool (*filter)(const struct v4l2_ctrl *ctrl))
2236{
2237        struct v4l2_ctrl_ref *ref;
2238        int ret = 0;
2239
2240        /* Do nothing if either handler is NULL or if they are the same */
2241        if (!hdl || !add || hdl == add)
2242                return 0;
2243        if (hdl->error)
2244                return hdl->error;
2245        mutex_lock(add->lock);
2246        list_for_each_entry(ref, &add->ctrl_refs, node) {
2247                struct v4l2_ctrl *ctrl = ref->ctrl;
2248
2249                /* Skip handler-private controls. */
2250                if (ctrl->is_private)
2251                        continue;
2252                /* And control classes */
2253                if (ctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
2254                        continue;
2255                /* Filter any unwanted controls */
2256                if (filter && !filter(ctrl))
2257                        continue;
2258                ret = handler_new_ref(hdl, ctrl);
2259                if (ret)
2260                        break;
2261        }
2262        mutex_unlock(add->lock);
2263        return ret;
2264}
2265EXPORT_SYMBOL(v4l2_ctrl_add_handler);
2266
2267bool v4l2_ctrl_radio_filter(const struct v4l2_ctrl *ctrl)
2268{
2269        if (V4L2_CTRL_ID2WHICH(ctrl->id) == V4L2_CTRL_CLASS_FM_TX)
2270                return true;
2271        if (V4L2_CTRL_ID2WHICH(ctrl->id) == V4L2_CTRL_CLASS_FM_RX)
2272                return true;
2273        switch (ctrl->id) {
2274        case V4L2_CID_AUDIO_MUTE:
2275        case V4L2_CID_AUDIO_VOLUME:
2276        case V4L2_CID_AUDIO_BALANCE:
2277        case V4L2_CID_AUDIO_BASS:
2278        case V4L2_CID_AUDIO_TREBLE:
2279        case V4L2_CID_AUDIO_LOUDNESS:
2280                return true;
2281        default:
2282                break;
2283        }
2284        return false;
2285}
2286EXPORT_SYMBOL(v4l2_ctrl_radio_filter);
2287
2288/* Cluster controls */
2289void v4l2_ctrl_cluster(unsigned ncontrols, struct v4l2_ctrl **controls)
2290{
2291        bool has_volatiles = false;
2292        int i;
2293
2294        /* The first control is the master control and it must not be NULL */
2295        if (WARN_ON(ncontrols == 0 || controls[0] == NULL))
2296                return;
2297
2298        for (i = 0; i < ncontrols; i++) {
2299                if (controls[i]) {
2300                        controls[i]->cluster = controls;
2301                        controls[i]->ncontrols = ncontrols;
2302                        if (controls[i]->flags & V4L2_CTRL_FLAG_VOLATILE)
2303                                has_volatiles = true;
2304                }
2305        }
2306        controls[0]->has_volatiles = has_volatiles;
2307}
2308EXPORT_SYMBOL(v4l2_ctrl_cluster);
2309
2310void v4l2_ctrl_auto_cluster(unsigned ncontrols, struct v4l2_ctrl **controls,
2311                            u8 manual_val, bool set_volatile)
2312{
2313        struct v4l2_ctrl *master = controls[0];
2314        u32 flag = 0;
2315        int i;
2316
2317        v4l2_ctrl_cluster(ncontrols, controls);
2318        WARN_ON(ncontrols <= 1);
2319        WARN_ON(manual_val < master->minimum || manual_val > master->maximum);
2320        WARN_ON(set_volatile && !has_op(master, g_volatile_ctrl));
2321        master->is_auto = true;
2322        master->has_volatiles = set_volatile;
2323        master->manual_mode_value = manual_val;
2324        master->flags |= V4L2_CTRL_FLAG_UPDATE;
2325
2326        if (!is_cur_manual(master))
2327                flag = V4L2_CTRL_FLAG_INACTIVE |
2328                        (set_volatile ? V4L2_CTRL_FLAG_VOLATILE : 0);
2329
2330        for (i = 1; i < ncontrols; i++)
2331                if (controls[i])
2332                        controls[i]->flags |= flag;
2333}
2334EXPORT_SYMBOL(v4l2_ctrl_auto_cluster);
2335
2336/* Activate/deactivate a control. */
2337void v4l2_ctrl_activate(struct v4l2_ctrl *ctrl, bool active)
2338{
2339        /* invert since the actual flag is called 'inactive' */
2340        bool inactive = !active;
2341        bool old;
2342
2343        if (ctrl == NULL)
2344                return;
2345
2346        if (inactive)
2347                /* set V4L2_CTRL_FLAG_INACTIVE */
2348                old = test_and_set_bit(4, &ctrl->flags);
2349        else
2350                /* clear V4L2_CTRL_FLAG_INACTIVE */
2351                old = test_and_clear_bit(4, &ctrl->flags);
2352        if (old != inactive)
2353                send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_FLAGS);
2354}
2355EXPORT_SYMBOL(v4l2_ctrl_activate);
2356
2357/* Grab/ungrab a control.
2358   Typically used when streaming starts and you want to grab controls,
2359   preventing the user from changing them.
2360
2361   Just call this and the framework will block any attempts to change
2362   these controls. */
2363void v4l2_ctrl_grab(struct v4l2_ctrl *ctrl, bool grabbed)
2364{
2365        bool old;
2366
2367        if (ctrl == NULL)
2368                return;
2369
2370        v4l2_ctrl_lock(ctrl);
2371        if (grabbed)
2372                /* set V4L2_CTRL_FLAG_GRABBED */
2373                old = test_and_set_bit(1, &ctrl->flags);
2374        else
2375                /* clear V4L2_CTRL_FLAG_GRABBED */
2376                old = test_and_clear_bit(1, &ctrl->flags);
2377        if (old != grabbed)
2378                send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_FLAGS);
2379        v4l2_ctrl_unlock(ctrl);
2380}
2381EXPORT_SYMBOL(v4l2_ctrl_grab);
2382
2383/* Log the control name and value */
2384static void log_ctrl(const struct v4l2_ctrl *ctrl,
2385                     const char *prefix, const char *colon)
2386{
2387        if (ctrl->flags & (V4L2_CTRL_FLAG_DISABLED | V4L2_CTRL_FLAG_WRITE_ONLY))
2388                return;
2389        if (ctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
2390                return;
2391
2392        pr_info("%s%s%s: ", prefix, colon, ctrl->name);
2393
2394        ctrl->type_ops->log(ctrl);
2395
2396        if (ctrl->flags & (V4L2_CTRL_FLAG_INACTIVE |
2397                           V4L2_CTRL_FLAG_GRABBED |
2398                           V4L2_CTRL_FLAG_VOLATILE)) {
2399                if (ctrl->flags & V4L2_CTRL_FLAG_INACTIVE)
2400                        pr_cont(" inactive");
2401                if (ctrl->flags & V4L2_CTRL_FLAG_GRABBED)
2402                        pr_cont(" grabbed");
2403                if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE)
2404                        pr_cont(" volatile");
2405        }
2406        pr_cont("\n");
2407}
2408
2409/* Log all controls owned by the handler */
2410void v4l2_ctrl_handler_log_status(struct v4l2_ctrl_handler *hdl,
2411                                  const char *prefix)
2412{
2413        struct v4l2_ctrl *ctrl;
2414        const char *colon = "";
2415        int len;
2416
2417        if (hdl == NULL)
2418                return;
2419        if (prefix == NULL)
2420                prefix = "";
2421        len = strlen(prefix);
2422        if (len && prefix[len - 1] != ' ')
2423                colon = ": ";
2424        mutex_lock(hdl->lock);
2425        list_for_each_entry(ctrl, &hdl->ctrls, node)
2426                if (!(ctrl->flags & V4L2_CTRL_FLAG_DISABLED))
2427                        log_ctrl(ctrl, prefix, colon);
2428        mutex_unlock(hdl->lock);
2429}
2430EXPORT_SYMBOL(v4l2_ctrl_handler_log_status);
2431
2432int v4l2_ctrl_subdev_log_status(struct v4l2_subdev *sd)
2433{
2434        v4l2_ctrl_handler_log_status(sd->ctrl_handler, sd->name);
2435        return 0;
2436}
2437EXPORT_SYMBOL(v4l2_ctrl_subdev_log_status);
2438
2439/* Call s_ctrl for all controls owned by the handler */
2440int v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler *hdl)
2441{
2442        struct v4l2_ctrl *ctrl;
2443        int ret = 0;
2444
2445        if (hdl == NULL)
2446                return 0;
2447        mutex_lock(hdl->lock);
2448        list_for_each_entry(ctrl, &hdl->ctrls, node)
2449                ctrl->done = false;
2450
2451        list_for_each_entry(ctrl, &hdl->ctrls, node) {
2452                struct v4l2_ctrl *master = ctrl->cluster[0];
2453                int i;
2454
2455                /* Skip if this control was already handled by a cluster. */
2456                /* Skip button controls and read-only controls. */
2457                if (ctrl->done || ctrl->type == V4L2_CTRL_TYPE_BUTTON ||
2458                    (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY))
2459                        continue;
2460
2461                for (i = 0; i < master->ncontrols; i++) {
2462                        if (master->cluster[i]) {
2463                                cur_to_new(master->cluster[i]);
2464                                master->cluster[i]->is_new = 1;
2465                                master->cluster[i]->done = true;
2466                        }
2467                }
2468                ret = call_op(master, s_ctrl);
2469                if (ret)
2470                        break;
2471        }
2472        mutex_unlock(hdl->lock);
2473        return ret;
2474}
2475EXPORT_SYMBOL(v4l2_ctrl_handler_setup);
2476
2477/* Implement VIDIOC_QUERY_EXT_CTRL */
2478int v4l2_query_ext_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_query_ext_ctrl *qc)
2479{
2480        const unsigned next_flags = V4L2_CTRL_FLAG_NEXT_CTRL | V4L2_CTRL_FLAG_NEXT_COMPOUND;
2481        u32 id = qc->id & V4L2_CTRL_ID_MASK;
2482        struct v4l2_ctrl_ref *ref;
2483        struct v4l2_ctrl *ctrl;
2484
2485        if (hdl == NULL)
2486                return -EINVAL;
2487
2488        mutex_lock(hdl->lock);
2489
2490        /* Try to find it */
2491        ref = find_ref(hdl, id);
2492
2493        if ((qc->id & next_flags) && !list_empty(&hdl->ctrl_refs)) {
2494                bool is_compound;
2495                /* Match any control that is not hidden */
2496                unsigned mask = 1;
2497                bool match = false;
2498
2499                if ((qc->id & next_flags) == V4L2_CTRL_FLAG_NEXT_COMPOUND) {
2500                        /* Match any hidden control */
2501                        match = true;
2502                } else if ((qc->id & next_flags) == next_flags) {
2503                        /* Match any control, compound or not */
2504                        mask = 0;
2505                }
2506
2507                /* Find the next control with ID > qc->id */
2508
2509                /* Did we reach the end of the control list? */
2510                if (id >= node2id(hdl->ctrl_refs.prev)) {
2511                        ref = NULL; /* Yes, so there is no next control */
2512                } else if (ref) {
2513                        /* We found a control with the given ID, so just get
2514                           the next valid one in the list. */
2515                        list_for_each_entry_continue(ref, &hdl->ctrl_refs, node) {
2516                                is_compound = ref->ctrl->is_array ||
2517                                        ref->ctrl->type >= V4L2_CTRL_COMPOUND_TYPES;
2518                                if (id < ref->ctrl->id &&
2519                                    (is_compound & mask) == match)
2520                                        break;
2521                        }
2522                        if (&ref->node == &hdl->ctrl_refs)
2523                                ref = NULL;
2524                } else {
2525                        /* No control with the given ID exists, so start
2526                           searching for the next largest ID. We know there
2527                           is one, otherwise the first 'if' above would have
2528                           been true. */
2529                        list_for_each_entry(ref, &hdl->ctrl_refs, node) {
2530                                is_compound = ref->ctrl->is_array ||
2531                                        ref->ctrl->type >= V4L2_CTRL_COMPOUND_TYPES;
2532                                if (id < ref->ctrl->id &&
2533                                    (is_compound & mask) == match)
2534                                        break;
2535                        }
2536                        if (&ref->node == &hdl->ctrl_refs)
2537                                ref = NULL;
2538                }
2539        }
2540        mutex_unlock(hdl->lock);
2541
2542        if (!ref)
2543                return -EINVAL;
2544
2545        ctrl = ref->ctrl;
2546        memset(qc, 0, sizeof(*qc));
2547        if (id >= V4L2_CID_PRIVATE_BASE)
2548                qc->id = id;
2549        else
2550                qc->id = ctrl->id;
2551        strlcpy(qc->name, ctrl->name, sizeof(qc->name));
2552        qc->flags = ctrl->flags;
2553        qc->type = ctrl->type;
2554        if (ctrl->is_ptr)
2555                qc->flags |= V4L2_CTRL_FLAG_HAS_PAYLOAD;
2556        qc->elem_size = ctrl->elem_size;
2557        qc->elems = ctrl->elems;
2558        qc->nr_of_dims = ctrl->nr_of_dims;
2559        memcpy(qc->dims, ctrl->dims, qc->nr_of_dims * sizeof(qc->dims[0]));
2560        qc->minimum = ctrl->minimum;
2561        qc->maximum = ctrl->maximum;
2562        qc->default_value = ctrl->default_value;
2563        if (ctrl->type == V4L2_CTRL_TYPE_MENU
2564            || ctrl->type == V4L2_CTRL_TYPE_INTEGER_MENU)
2565                qc->step = 1;
2566        else
2567                qc->step = ctrl->step;
2568        return 0;
2569}
2570EXPORT_SYMBOL(v4l2_query_ext_ctrl);
2571
2572/* Implement VIDIOC_QUERYCTRL */
2573int v4l2_queryctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc)
2574{
2575        struct v4l2_query_ext_ctrl qec = { qc->id };
2576        int rc;
2577
2578        rc = v4l2_query_ext_ctrl(hdl, &qec);
2579        if (rc)
2580                return rc;
2581
2582        qc->id = qec.id;
2583        qc->type = qec.type;
2584        qc->flags = qec.flags;
2585        strlcpy(qc->name, qec.name, sizeof(qc->name));
2586        switch (qc->type) {
2587        case V4L2_CTRL_TYPE_INTEGER:
2588        case V4L2_CTRL_TYPE_BOOLEAN:
2589        case V4L2_CTRL_TYPE_MENU:
2590        case V4L2_CTRL_TYPE_INTEGER_MENU:
2591        case V4L2_CTRL_TYPE_STRING:
2592        case V4L2_CTRL_TYPE_BITMASK:
2593                qc->minimum = qec.minimum;
2594                qc->maximum = qec.maximum;
2595                qc->step = qec.step;
2596                qc->default_value = qec.default_value;
2597                break;
2598        default:
2599                qc->minimum = 0;
2600                qc->maximum = 0;
2601                qc->step = 0;
2602                qc->default_value = 0;
2603                break;
2604        }
2605        return 0;
2606}
2607EXPORT_SYMBOL(v4l2_queryctrl);
2608
2609int v4l2_subdev_queryctrl(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc)
2610{
2611        if (qc->id & (V4L2_CTRL_FLAG_NEXT_CTRL | V4L2_CTRL_FLAG_NEXT_COMPOUND))
2612                return -EINVAL;
2613        return v4l2_queryctrl(sd->ctrl_handler, qc);
2614}
2615EXPORT_SYMBOL(v4l2_subdev_queryctrl);
2616
2617/* Implement VIDIOC_QUERYMENU */
2618int v4l2_querymenu(struct v4l2_ctrl_handler *hdl, struct v4l2_querymenu *qm)
2619{
2620        struct v4l2_ctrl *ctrl;
2621        u32 i = qm->index;
2622
2623        ctrl = v4l2_ctrl_find(hdl, qm->id);
2624        if (!ctrl)
2625                return -EINVAL;
2626
2627        qm->reserved = 0;
2628        /* Sanity checks */
2629        switch (ctrl->type) {
2630        case V4L2_CTRL_TYPE_MENU:
2631                if (ctrl->qmenu == NULL)
2632                        return -EINVAL;
2633                break;
2634        case V4L2_CTRL_TYPE_INTEGER_MENU:
2635                if (ctrl->qmenu_int == NULL)
2636                        return -EINVAL;
2637                break;
2638        default:
2639                return -EINVAL;
2640        }
2641
2642        if (i < ctrl->minimum || i > ctrl->maximum)
2643                return -EINVAL;
2644
2645        /* Use mask to see if this menu item should be skipped */
2646        if (ctrl->menu_skip_mask & (1 << i))
2647                return -EINVAL;
2648        /* Empty menu items should also be skipped */
2649        if (ctrl->type == V4L2_CTRL_TYPE_MENU) {
2650                if (ctrl->qmenu[i] == NULL || ctrl->qmenu[i][0] == '\0')
2651                        return -EINVAL;
2652                strlcpy(qm->name, ctrl->qmenu[i], sizeof(qm->name));
2653        } else {
2654                qm->value = ctrl->qmenu_int[i];
2655        }
2656        return 0;
2657}
2658EXPORT_SYMBOL(v4l2_querymenu);
2659
2660int v4l2_subdev_querymenu(struct v4l2_subdev *sd, struct v4l2_querymenu *qm)
2661{
2662        return v4l2_querymenu(sd->ctrl_handler, qm);
2663}
2664EXPORT_SYMBOL(v4l2_subdev_querymenu);
2665
2666
2667
2668/* Some general notes on the atomic requirements of VIDIOC_G/TRY/S_EXT_CTRLS:
2669
2670   It is not a fully atomic operation, just best-effort only. After all, if
2671   multiple controls have to be set through multiple i2c writes (for example)
2672   then some initial writes may succeed while others fail. Thus leaving the
2673   system in an inconsistent state. The question is how much effort you are
2674   willing to spend on trying to make something atomic that really isn't.
2675
2676   From the point of view of an application the main requirement is that
2677   when you call VIDIOC_S_EXT_CTRLS and some values are invalid then an
2678   error should be returned without actually affecting any controls.
2679
2680   If all the values are correct, then it is acceptable to just give up
2681   in case of low-level errors.
2682
2683   It is important though that the application can tell when only a partial
2684   configuration was done. The way we do that is through the error_idx field
2685   of struct v4l2_ext_controls: if that is equal to the count field then no
2686   controls were affected. Otherwise all controls before that index were
2687   successful in performing their 'get' or 'set' operation, the control at
2688   the given index failed, and you don't know what happened with the controls
2689   after the failed one. Since if they were part of a control cluster they
2690   could have been successfully processed (if a cluster member was encountered
2691   at index < error_idx), they could have failed (if a cluster member was at
2692   error_idx), or they may not have been processed yet (if the first cluster
2693   member appeared after error_idx).
2694
2695   It is all fairly theoretical, though. In practice all you can do is to
2696   bail out. If error_idx == count, then it is an application bug. If
2697   error_idx < count then it is only an application bug if the error code was
2698   EBUSY. That usually means that something started streaming just when you
2699   tried to set the controls. In all other cases it is a driver/hardware
2700   problem and all you can do is to retry or bail out.
2701
2702   Note that these rules do not apply to VIDIOC_TRY_EXT_CTRLS: since that
2703   never modifies controls the error_idx is just set to whatever control
2704   has an invalid value.
2705 */
2706
2707/* Prepare for the extended g/s/try functions.
2708   Find the controls in the control array and do some basic checks. */
2709static int prepare_ext_ctrls(struct v4l2_ctrl_handler *hdl,
2710                             struct v4l2_ext_controls *cs,
2711                             struct v4l2_ctrl_helper *helpers,
2712                             bool get)
2713{
2714        struct v4l2_ctrl_helper *h;
2715        bool have_clusters = false;
2716        u32 i;
2717
2718        for (i = 0, h = helpers; i < cs->count; i++, h++) {
2719                struct v4l2_ext_control *c = &cs->controls[i];
2720                struct v4l2_ctrl_ref *ref;
2721                struct v4l2_ctrl *ctrl;
2722                u32 id = c->id & V4L2_CTRL_ID_MASK;
2723
2724                cs->error_idx = i;
2725
2726                if (cs->which &&
2727                    cs->which != V4L2_CTRL_WHICH_DEF_VAL &&
2728                    V4L2_CTRL_ID2WHICH(id) != cs->which)
2729                        return -EINVAL;
2730
2731                /* Old-style private controls are not allowed for
2732                   extended controls */
2733                if (id >= V4L2_CID_PRIVATE_BASE)
2734                        return -EINVAL;
2735                ref = find_ref_lock(hdl, id);
2736                if (ref == NULL)
2737                        return -EINVAL;
2738                ctrl = ref->ctrl;
2739                if (ctrl->flags & V4L2_CTRL_FLAG_DISABLED)
2740                        return -EINVAL;
2741
2742                if (ctrl->cluster[0]->ncontrols > 1)
2743                        have_clusters = true;
2744                if (ctrl->cluster[0] != ctrl)
2745                        ref = find_ref_lock(hdl, ctrl->cluster[0]->id);
2746                if (ctrl->is_ptr && !ctrl->is_string) {
2747                        unsigned tot_size = ctrl->elems * ctrl->elem_size;
2748
2749                        if (c->size < tot_size) {
2750                                if (get) {
2751                                        c->size = tot_size;
2752                                        return -ENOSPC;
2753                                }
2754                                return -EFAULT;
2755                        }
2756                        c->size = tot_size;
2757                }
2758                /* Store the ref to the master control of the cluster */
2759                h->mref = ref;
2760                h->ctrl = ctrl;
2761                /* Initially set next to 0, meaning that there is no other
2762                   control in this helper array belonging to the same
2763                   cluster */
2764                h->next = 0;
2765        }
2766
2767        /* We are done if there were no controls that belong to a multi-
2768           control cluster. */
2769        if (!have_clusters)
2770                return 0;
2771
2772        /* The code below figures out in O(n) time which controls in the list
2773           belong to the same cluster. */
2774
2775        /* This has to be done with the handler lock taken. */
2776        mutex_lock(hdl->lock);
2777
2778        /* First zero the helper field in the master control references */
2779        for (i = 0; i < cs->count; i++)
2780                helpers[i].mref->helper = NULL;
2781        for (i = 0, h = helpers; i < cs->count; i++, h++) {
2782                struct v4l2_ctrl_ref *mref = h->mref;
2783
2784                /* If the mref->helper is set, then it points to an earlier
2785                   helper that belongs to the same cluster. */
2786                if (mref->helper) {
2787                        /* Set the next field of mref->helper to the current
2788                           index: this means that that earlier helper now
2789                           points to the next helper in the same cluster. */
2790                        mref->helper->next = i;
2791                        /* mref should be set only for the first helper in the
2792                           cluster, clear the others. */
2793                        h->mref = NULL;
2794                }
2795                /* Point the mref helper to the current helper struct. */
2796                mref->helper = h;
2797        }
2798        mutex_unlock(hdl->lock);
2799        return 0;
2800}
2801
2802/* Handles the corner case where cs->count == 0. It checks whether the
2803   specified control class exists. If that class ID is 0, then it checks
2804   whether there are any controls at all. */
2805static int class_check(struct v4l2_ctrl_handler *hdl, u32 which)
2806{
2807        if (which == 0 || which == V4L2_CTRL_WHICH_DEF_VAL)
2808                return list_empty(&hdl->ctrl_refs) ? -EINVAL : 0;
2809        return find_ref_lock(hdl, which | 1) ? 0 : -EINVAL;
2810}
2811
2812
2813
2814/* Get extended controls. Allocates the helpers array if needed. */
2815int v4l2_g_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct v4l2_ext_controls *cs)
2816{
2817        struct v4l2_ctrl_helper helper[4];
2818        struct v4l2_ctrl_helper *helpers = helper;
2819        int ret;
2820        int i, j;
2821        bool def_value;
2822
2823        def_value = (cs->which == V4L2_CTRL_WHICH_DEF_VAL);
2824
2825        cs->error_idx = cs->count;
2826        cs->which = V4L2_CTRL_ID2WHICH(cs->which);
2827
2828        if (hdl == NULL)
2829                return -EINVAL;
2830
2831        if (cs->count == 0)
2832                return class_check(hdl, cs->which);
2833
2834        if (cs->count > ARRAY_SIZE(helper)) {
2835                helpers = kmalloc_array(cs->count, sizeof(helper[0]),
2836                                        GFP_KERNEL);
2837                if (helpers == NULL)
2838                        return -ENOMEM;
2839        }
2840
2841        ret = prepare_ext_ctrls(hdl, cs, helpers, true);
2842        cs->error_idx = cs->count;
2843
2844        for (i = 0; !ret && i < cs->count; i++)
2845                if (helpers[i].ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY)
2846                        ret = -EACCES;
2847
2848        for (i = 0; !ret && i < cs->count; i++) {
2849                int (*ctrl_to_user)(struct v4l2_ext_control *c,
2850                                    struct v4l2_ctrl *ctrl);
2851                struct v4l2_ctrl *master;
2852
2853                ctrl_to_user = def_value ? def_to_user : cur_to_user;
2854
2855                if (helpers[i].mref == NULL)
2856                        continue;
2857
2858                master = helpers[i].mref->ctrl;
2859                cs->error_idx = i;
2860
2861                v4l2_ctrl_lock(master);
2862
2863                /* g_volatile_ctrl will update the new control values */
2864                if (!def_value &&
2865                    ((master->flags & V4L2_CTRL_FLAG_VOLATILE) ||
2866                    (master->has_volatiles && !is_cur_manual(master)))) {
2867                        for (j = 0; j < master->ncontrols; j++)
2868                                cur_to_new(master->cluster[j]);
2869                        ret = call_op(master, g_volatile_ctrl);
2870                        ctrl_to_user = new_to_user;
2871                }
2872                /* If OK, then copy the current (for non-volatile controls)
2873                   or the new (for volatile controls) control values to the
2874                   caller */
2875                if (!ret) {
2876                        u32 idx = i;
2877
2878                        do {
2879                                ret = ctrl_to_user(cs->controls + idx,
2880                                                   helpers[idx].ctrl);
2881                                idx = helpers[idx].next;
2882                        } while (!ret && idx);
2883                }
2884                v4l2_ctrl_unlock(master);
2885        }
2886
2887        if (cs->count > ARRAY_SIZE(helper))
2888                kfree(helpers);
2889        return ret;
2890}
2891EXPORT_SYMBOL(v4l2_g_ext_ctrls);
2892
2893int v4l2_subdev_g_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *cs)
2894{
2895        return v4l2_g_ext_ctrls(sd->ctrl_handler, cs);
2896}
2897EXPORT_SYMBOL(v4l2_subdev_g_ext_ctrls);
2898
2899/* Helper function to get a single control */
2900static int get_ctrl(struct v4l2_ctrl *ctrl, struct v4l2_ext_control *c)
2901{
2902        struct v4l2_ctrl *master = ctrl->cluster[0];
2903        int ret = 0;
2904        int i;
2905
2906        /* Compound controls are not supported. The new_to_user() and
2907         * cur_to_user() calls below would need to be modified not to access
2908         * userspace memory when called from get_ctrl().
2909         */
2910        if (!ctrl->is_int && ctrl->type != V4L2_CTRL_TYPE_INTEGER64)
2911                return -EINVAL;
2912
2913        if (ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY)
2914                return -EACCES;
2915
2916        v4l2_ctrl_lock(master);
2917        /* g_volatile_ctrl will update the current control values */
2918        if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE) {
2919                for (i = 0; i < master->ncontrols; i++)
2920                        cur_to_new(master->cluster[i]);
2921                ret = call_op(master, g_volatile_ctrl);
2922                new_to_user(c, ctrl);
2923        } else {
2924                cur_to_user(c, ctrl);
2925        }
2926        v4l2_ctrl_unlock(master);
2927        return ret;
2928}
2929
2930int v4l2_g_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_control *control)
2931{
2932        struct v4l2_ctrl *ctrl = v4l2_ctrl_find(hdl, control->id);
2933        struct v4l2_ext_control c;
2934        int ret;
2935
2936        if (ctrl == NULL || !ctrl->is_int)
2937                return -EINVAL;
2938        ret = get_ctrl(ctrl, &c);
2939        control->value = c.value;
2940        return ret;
2941}
2942EXPORT_SYMBOL(v4l2_g_ctrl);
2943
2944int v4l2_subdev_g_ctrl(struct v4l2_subdev *sd, struct v4l2_control *control)
2945{
2946        return v4l2_g_ctrl(sd->ctrl_handler, control);
2947}
2948EXPORT_SYMBOL(v4l2_subdev_g_ctrl);
2949
2950s32 v4l2_ctrl_g_ctrl(struct v4l2_ctrl *ctrl)
2951{
2952        struct v4l2_ext_control c;
2953
2954        /* It's a driver bug if this happens. */
2955        WARN_ON(!ctrl->is_int);
2956        c.value = 0;
2957        get_ctrl(ctrl, &c);
2958        return c.value;
2959}
2960EXPORT_SYMBOL(v4l2_ctrl_g_ctrl);
2961
2962s64 v4l2_ctrl_g_ctrl_int64(struct v4l2_ctrl *ctrl)
2963{
2964        struct v4l2_ext_control c;
2965
2966        /* It's a driver bug if this happens. */
2967        WARN_ON(ctrl->is_ptr || ctrl->type != V4L2_CTRL_TYPE_INTEGER64);
2968        c.value64 = 0;
2969        get_ctrl(ctrl, &c);
2970        return c.value64;
2971}
2972EXPORT_SYMBOL(v4l2_ctrl_g_ctrl_int64);
2973
2974
2975/* Core function that calls try/s_ctrl and ensures that the new value is
2976   copied to the current value on a set.
2977   Must be called with ctrl->handler->lock held. */
2978static int try_or_set_cluster(struct v4l2_fh *fh, struct v4l2_ctrl *master,
2979                              bool set, u32 ch_flags)
2980{
2981        bool update_flag;
2982        int ret;
2983        int i;
2984
2985        /* Go through the cluster and either validate the new value or
2986           (if no new value was set), copy the current value to the new
2987           value, ensuring a consistent view for the control ops when
2988           called. */
2989        for (i = 0; i < master->ncontrols; i++) {
2990                struct v4l2_ctrl *ctrl = master->cluster[i];
2991
2992                if (ctrl == NULL)
2993                        continue;
2994
2995                if (!ctrl->is_new) {
2996                        cur_to_new(ctrl);
2997                        continue;
2998                }
2999                /* Check again: it may have changed since the
3000                   previous check in try_or_set_ext_ctrls(). */
3001                if (set && (ctrl->flags & V4L2_CTRL_FLAG_GRABBED))
3002                        return -EBUSY;
3003        }
3004
3005        ret = call_op(master, try_ctrl);
3006
3007        /* Don't set if there is no change */
3008        if (ret || !set || !cluster_changed(master))
3009                return ret;
3010        ret = call_op(master, s_ctrl);
3011        if (ret)
3012                return ret;
3013
3014        /* If OK, then make the new values permanent. */
3015        update_flag = is_cur_manual(master) != is_new_manual(master);
3016        for (i = 0; i < master->ncontrols; i++)
3017                new_to_cur(fh, master->cluster[i], ch_flags |
3018                        ((update_flag && i > 0) ? V4L2_EVENT_CTRL_CH_FLAGS : 0));
3019        return 0;
3020}
3021
3022/* Validate controls. */
3023static int validate_ctrls(struct v4l2_ext_controls *cs,
3024                          struct v4l2_ctrl_helper *helpers, bool set)
3025{
3026        unsigned i;
3027        int ret = 0;
3028
3029        cs->error_idx = cs->count;
3030        for (i = 0; i < cs->count; i++) {
3031                struct v4l2_ctrl *ctrl = helpers[i].ctrl;
3032                union v4l2_ctrl_ptr p_new;
3033
3034                cs->error_idx = i;
3035
3036                if (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY)
3037                        return -EACCES;
3038                /* This test is also done in try_set_control_cluster() which
3039                   is called in atomic context, so that has the final say,
3040                   but it makes sense to do an up-front check as well. Once
3041                   an error occurs in try_set_control_cluster() some other
3042                   controls may have been set already and we want to do a
3043                   best-effort to avoid that. */
3044                if (set && (ctrl->flags & V4L2_CTRL_FLAG_GRABBED))
3045                        return -EBUSY;
3046                /*
3047                 * Skip validation for now if the payload needs to be copied
3048                 * from userspace into kernelspace. We'll validate those later.
3049                 */
3050                if (ctrl->is_ptr)
3051                        continue;
3052                if (ctrl->type == V4L2_CTRL_TYPE_INTEGER64)
3053                        p_new.p_s64 = &cs->controls[i].value64;
3054                else
3055                        p_new.p_s32 = &cs->controls[i].value;
3056                ret = validate_new(ctrl, p_new);
3057                if (ret)
3058                        return ret;
3059        }
3060        return 0;
3061}
3062
3063/* Obtain the current volatile values of an autocluster and mark them
3064   as new. */
3065static void update_from_auto_cluster(struct v4l2_ctrl *master)
3066{
3067        int i;
3068
3069        for (i = 1; i < master->ncontrols; i++)
3070                cur_to_new(master->cluster[i]);
3071        if (!call_op(master, g_volatile_ctrl))
3072                for (i = 1; i < master->ncontrols; i++)
3073                        if (master->cluster[i])
3074                                master->cluster[i]->is_new = 1;
3075}
3076
3077/* Try or try-and-set controls */
3078static int try_set_ext_ctrls(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl,
3079                             struct v4l2_ext_controls *cs,
3080                             bool set)
3081{
3082        struct v4l2_ctrl_helper helper[4];
3083        struct v4l2_ctrl_helper *helpers = helper;
3084        unsigned i, j;
3085        int ret;
3086
3087        cs->error_idx = cs->count;
3088
3089        /* Default value cannot be changed */
3090        if (cs->which == V4L2_CTRL_WHICH_DEF_VAL)
3091                return -EINVAL;
3092
3093        cs->which = V4L2_CTRL_ID2WHICH(cs->which);
3094
3095        if (hdl == NULL)
3096                return -EINVAL;
3097
3098        if (cs->count == 0)
3099                return class_check(hdl, cs->which);
3100
3101        if (cs->count > ARRAY_SIZE(helper)) {
3102                helpers = kmalloc_array(cs->count, sizeof(helper[0]),
3103                                        GFP_KERNEL);
3104                if (!helpers)
3105                        return -ENOMEM;
3106        }
3107        ret = prepare_ext_ctrls(hdl, cs, helpers, false);
3108        if (!ret)
3109                ret = validate_ctrls(cs, helpers, set);
3110        if (ret && set)
3111                cs->error_idx = cs->count;
3112        for (i = 0; !ret && i < cs->count; i++) {
3113                struct v4l2_ctrl *master;
3114                u32 idx = i;
3115
3116                if (helpers[i].mref == NULL)
3117                        continue;
3118
3119                cs->error_idx = i;
3120                master = helpers[i].mref->ctrl;
3121                v4l2_ctrl_lock(master);
3122
3123                /* Reset the 'is_new' flags of the cluster */
3124                for (j = 0; j < master->ncontrols; j++)
3125                        if (master->cluster[j])
3126                                master->cluster[j]->is_new = 0;
3127
3128                /* For volatile autoclusters that are currently in auto mode
3129                   we need to discover if it will be set to manual mode.
3130                   If so, then we have to copy the current volatile values
3131                   first since those will become the new manual values (which
3132                   may be overwritten by explicit new values from this set
3133                   of controls). */
3134                if (master->is_auto && master->has_volatiles &&
3135                                                !is_cur_manual(master)) {
3136                        /* Pick an initial non-manual value */
3137                        s32 new_auto_val = master->manual_mode_value + 1;
3138                        u32 tmp_idx = idx;
3139
3140                        do {
3141                                /* Check if the auto control is part of the
3142                                   list, and remember the new value. */
3143                                if (helpers[tmp_idx].ctrl == master)
3144                                        new_auto_val = cs->controls[tmp_idx].value;
3145                                tmp_idx = helpers[tmp_idx].next;
3146                        } while (tmp_idx);
3147                        /* If the new value == the manual value, then copy
3148                           the current volatile values. */
3149                        if (new_auto_val == master->manual_mode_value)
3150                                update_from_auto_cluster(master);
3151                }
3152
3153                /* Copy the new caller-supplied control values.
3154                   user_to_new() sets 'is_new' to 1. */
3155                do {
3156                        struct v4l2_ctrl *ctrl = helpers[idx].ctrl;
3157
3158                        ret = user_to_new(cs->controls + idx, ctrl);
3159                        if (!ret && ctrl->is_ptr)
3160                                ret = validate_new(ctrl, ctrl->p_new);
3161                        idx = helpers[idx].next;
3162                } while (!ret && idx);
3163
3164                if (!ret)
3165                        ret = try_or_set_cluster(fh, master, set, 0);
3166
3167                /* Copy the new values back to userspace. */
3168                if (!ret) {
3169                        idx = i;
3170                        do {
3171                                ret = new_to_user(cs->controls + idx,
3172                                                helpers[idx].ctrl);
3173                                idx = helpers[idx].next;
3174                        } while (!ret && idx);
3175                }
3176                v4l2_ctrl_unlock(master);
3177        }
3178
3179        if (cs->count > ARRAY_SIZE(helper))
3180                kfree(helpers);
3181        return ret;
3182}
3183
3184int v4l2_try_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct v4l2_ext_controls *cs)
3185{
3186        return try_set_ext_ctrls(NULL, hdl, cs, false);
3187}
3188EXPORT_SYMBOL(v4l2_try_ext_ctrls);
3189
3190int v4l2_s_ext_ctrls(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl,
3191                                        struct v4l2_ext_controls *cs)
3192{
3193        return try_set_ext_ctrls(fh, hdl, cs, true);
3194}
3195EXPORT_SYMBOL(v4l2_s_ext_ctrls);
3196
3197int v4l2_subdev_try_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *cs)
3198{
3199        return try_set_ext_ctrls(NULL, sd->ctrl_handler, cs, false);
3200}
3201EXPORT_SYMBOL(v4l2_subdev_try_ext_ctrls);
3202
3203int v4l2_subdev_s_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *cs)
3204{
3205        return try_set_ext_ctrls(NULL, sd->ctrl_handler, cs, true);
3206}
3207EXPORT_SYMBOL(v4l2_subdev_s_ext_ctrls);
3208
3209/* Helper function for VIDIOC_S_CTRL compatibility */
3210static int set_ctrl(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 ch_flags)
3211{
3212        struct v4l2_ctrl *master = ctrl->cluster[0];
3213        int ret;
3214        int i;
3215
3216        /* Reset the 'is_new' flags of the cluster */
3217        for (i = 0; i < master->ncontrols; i++)
3218                if (master->cluster[i])
3219                        master->cluster[i]->is_new = 0;
3220
3221        ret = validate_new(ctrl, ctrl->p_new);
3222        if (ret)
3223                return ret;
3224
3225        /* For autoclusters with volatiles that are switched from auto to
3226           manual mode we have to update the current volatile values since
3227           those will become the initial manual values after such a switch. */
3228        if (master->is_auto && master->has_volatiles && ctrl == master &&
3229            !is_cur_manual(master) && ctrl->val == master->manual_mode_value)
3230                update_from_auto_cluster(master);
3231
3232        ctrl->is_new = 1;
3233        return try_or_set_cluster(fh, master, true, ch_flags);
3234}
3235
3236/* Helper function for VIDIOC_S_CTRL compatibility */
3237static int set_ctrl_lock(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl,
3238                         struct v4l2_ext_control *c)
3239{
3240        int ret;
3241
3242        v4l2_ctrl_lock(ctrl);
3243        user_to_new(c, ctrl);
3244        ret = set_ctrl(fh, ctrl, 0);
3245        if (!ret)
3246                cur_to_user(c, ctrl);
3247        v4l2_ctrl_unlock(ctrl);
3248        return ret;
3249}
3250
3251int v4l2_s_ctrl(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl,
3252                                        struct v4l2_control *control)
3253{
3254        struct v4l2_ctrl *ctrl = v4l2_ctrl_find(hdl, control->id);
3255        struct v4l2_ext_control c = { control->id };
3256        int ret;
3257
3258        if (ctrl == NULL || !ctrl->is_int)
3259                return -EINVAL;
3260
3261        if (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY)
3262                return -EACCES;
3263
3264        c.value = control->value;
3265        ret = set_ctrl_lock(fh, ctrl, &c);
3266        control->value = c.value;
3267        return ret;
3268}
3269EXPORT_SYMBOL(v4l2_s_ctrl);
3270
3271int v4l2_subdev_s_ctrl(struct v4l2_subdev *sd, struct v4l2_control *control)
3272{
3273        return v4l2_s_ctrl(NULL, sd->ctrl_handler, control);
3274}
3275EXPORT_SYMBOL(v4l2_subdev_s_ctrl);
3276
3277int __v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val)
3278{
3279        lockdep_assert_held(ctrl->handler->lock);
3280
3281        /* It's a driver bug if this happens. */
3282        WARN_ON(!ctrl->is_int);
3283        ctrl->val = val;
3284        return set_ctrl(NULL, ctrl, 0);
3285}
3286EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl);
3287
3288int __v4l2_ctrl_s_ctrl_int64(struct v4l2_ctrl *ctrl, s64 val)
3289{
3290        lockdep_assert_held(ctrl->handler->lock);
3291
3292        /* It's a driver bug if this happens. */
3293        WARN_ON(ctrl->is_ptr || ctrl->type != V4L2_CTRL_TYPE_INTEGER64);
3294        *ctrl->p_new.p_s64 = val;
3295        return set_ctrl(NULL, ctrl, 0);
3296}
3297EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl_int64);
3298
3299int __v4l2_ctrl_s_ctrl_string(struct v4l2_ctrl *ctrl, const char *s)
3300{
3301        lockdep_assert_held(ctrl->handler->lock);
3302
3303        /* It's a driver bug if this happens. */
3304        WARN_ON(ctrl->type != V4L2_CTRL_TYPE_STRING);
3305        strlcpy(ctrl->p_new.p_char, s, ctrl->maximum + 1);
3306        return set_ctrl(NULL, ctrl, 0);
3307}
3308EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl_string);
3309
3310void v4l2_ctrl_notify(struct v4l2_ctrl *ctrl, v4l2_ctrl_notify_fnc notify, void *priv)
3311{
3312        if (ctrl == NULL)
3313                return;
3314        if (notify == NULL) {
3315                ctrl->call_notify = 0;
3316                return;
3317        }
3318        if (WARN_ON(ctrl->handler->notify && ctrl->handler->notify != notify))
3319                return;
3320        ctrl->handler->notify = notify;
3321        ctrl->handler->notify_priv = priv;
3322        ctrl->call_notify = 1;
3323}
3324EXPORT_SYMBOL(v4l2_ctrl_notify);
3325
3326int __v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl,
3327                        s64 min, s64 max, u64 step, s64 def)
3328{
3329        bool value_changed;
3330        bool range_changed = false;
3331        int ret;
3332
3333        lockdep_assert_held(ctrl->handler->lock);
3334
3335        switch (ctrl->type) {
3336        case V4L2_CTRL_TYPE_INTEGER:
3337        case V4L2_CTRL_TYPE_INTEGER64:
3338        case V4L2_CTRL_TYPE_BOOLEAN:
3339        case V4L2_CTRL_TYPE_MENU:
3340        case V4L2_CTRL_TYPE_INTEGER_MENU:
3341        case V4L2_CTRL_TYPE_BITMASK:
3342        case V4L2_CTRL_TYPE_U8:
3343        case V4L2_CTRL_TYPE_U16:
3344        case V4L2_CTRL_TYPE_U32:
3345                if (ctrl->is_array)
3346                        return -EINVAL;
3347                ret = check_range(ctrl->type, min, max, step, def);
3348                if (ret)
3349                        return ret;
3350                break;
3351        default:
3352                return -EINVAL;
3353        }
3354        if ((ctrl->minimum != min) || (ctrl->maximum != max) ||
3355                (ctrl->step != step) || ctrl->default_value != def) {
3356                range_changed = true;
3357                ctrl->minimum = min;
3358                ctrl->maximum = max;
3359                ctrl->step = step;
3360                ctrl->default_value = def;
3361        }
3362        cur_to_new(ctrl);
3363        if (validate_new(ctrl, ctrl->p_new)) {
3364                if (ctrl->type == V4L2_CTRL_TYPE_INTEGER64)
3365                        *ctrl->p_new.p_s64 = def;
3366                else
3367                        *ctrl->p_new.p_s32 = def;
3368        }
3369
3370        if (ctrl->type == V4L2_CTRL_TYPE_INTEGER64)
3371                value_changed = *ctrl->p_new.p_s64 != *ctrl->p_cur.p_s64;
3372        else
3373                value_changed = *ctrl->p_new.p_s32 != *ctrl->p_cur.p_s32;
3374        if (value_changed)
3375                ret = set_ctrl(NULL, ctrl, V4L2_EVENT_CTRL_CH_RANGE);
3376        else if (range_changed)
3377                send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_RANGE);
3378        return ret;
3379}
3380EXPORT_SYMBOL(__v4l2_ctrl_modify_range);
3381
3382static int v4l2_ctrl_add_event(struct v4l2_subscribed_event *sev, unsigned elems)
3383{
3384        struct v4l2_ctrl *ctrl = v4l2_ctrl_find(sev->fh->ctrl_handler, sev->id);
3385
3386        if (ctrl == NULL)
3387                return -EINVAL;
3388
3389        v4l2_ctrl_lock(ctrl);
3390        list_add_tail(&sev->node, &ctrl->ev_subs);
3391        if (ctrl->type != V4L2_CTRL_TYPE_CTRL_CLASS &&
3392            (sev->flags & V4L2_EVENT_SUB_FL_SEND_INITIAL)) {
3393                struct v4l2_event ev;
3394                u32 changes = V4L2_EVENT_CTRL_CH_FLAGS;
3395
3396                if (!(ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY))
3397                        changes |= V4L2_EVENT_CTRL_CH_VALUE;
3398                fill_event(&ev, ctrl, changes);
3399                /* Mark the queue as active, allowing this initial
3400                   event to be accepted. */
3401                sev->elems = elems;
3402                v4l2_event_queue_fh(sev->fh, &ev);
3403        }
3404        v4l2_ctrl_unlock(ctrl);
3405        return 0;
3406}
3407
3408static void v4l2_ctrl_del_event(struct v4l2_subscribed_event *sev)
3409{
3410        struct v4l2_ctrl *ctrl = v4l2_ctrl_find(sev->fh->ctrl_handler, sev->id);
3411
3412        v4l2_ctrl_lock(ctrl);
3413        list_del(&sev->node);
3414        v4l2_ctrl_unlock(ctrl);
3415}
3416
3417void v4l2_ctrl_replace(struct v4l2_event *old, const struct v4l2_event *new)
3418{
3419        u32 old_changes = old->u.ctrl.changes;
3420
3421        old->u.ctrl = new->u.ctrl;
3422        old->u.ctrl.changes |= old_changes;
3423}
3424EXPORT_SYMBOL(v4l2_ctrl_replace);
3425
3426void v4l2_ctrl_merge(const struct v4l2_event *old, struct v4l2_event *new)
3427{
3428        new->u.ctrl.changes |= old->u.ctrl.changes;
3429}
3430EXPORT_SYMBOL(v4l2_ctrl_merge);
3431
3432const struct v4l2_subscribed_event_ops v4l2_ctrl_sub_ev_ops = {
3433        .add = v4l2_ctrl_add_event,
3434        .del = v4l2_ctrl_del_event,
3435        .replace = v4l2_ctrl_replace,
3436        .merge = v4l2_ctrl_merge,
3437};
3438EXPORT_SYMBOL(v4l2_ctrl_sub_ev_ops);
3439
3440int v4l2_ctrl_log_status(struct file *file, void *fh)
3441{
3442        struct video_device *vfd = video_devdata(file);
3443        struct v4l2_fh *vfh = file->private_data;
3444
3445        if (test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) && vfd->v4l2_dev)
3446                v4l2_ctrl_handler_log_status(vfh->ctrl_handler,
3447                        vfd->v4l2_dev->name);
3448        return 0;
3449}
3450EXPORT_SYMBOL(v4l2_ctrl_log_status);
3451
3452int v4l2_ctrl_subscribe_event(struct v4l2_fh *fh,
3453                                const struct v4l2_event_subscription *sub)
3454{
3455        if (sub->type == V4L2_EVENT_CTRL)
3456                return v4l2_event_subscribe(fh, sub, 0, &v4l2_ctrl_sub_ev_ops);
3457        return -EINVAL;
3458}
3459EXPORT_SYMBOL(v4l2_ctrl_subscribe_event);
3460
3461int v4l2_ctrl_subdev_subscribe_event(struct v4l2_subdev *sd, struct v4l2_fh *fh,
3462                                     struct v4l2_event_subscription *sub)
3463{
3464        if (!sd->ctrl_handler)
3465                return -EINVAL;
3466        return v4l2_ctrl_subscribe_event(fh, sub);
3467}
3468EXPORT_SYMBOL(v4l2_ctrl_subdev_subscribe_event);
3469
3470unsigned int v4l2_ctrl_poll(struct file *file, struct poll_table_struct *wait)
3471{
3472        struct v4l2_fh *fh = file->private_data;
3473
3474        if (v4l2_event_pending(fh))
3475                return POLLPRI;
3476        poll_wait(file, &fh->wait, wait);
3477        return 0;
3478}
3479EXPORT_SYMBOL(v4l2_ctrl_poll);
3480