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