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