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