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