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