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