]> Git Repo - linux.git/blob - drivers/media/v4l2-core/v4l2-ctrls.c
Merge tag 'powerpc-5.4-2' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc...
[linux.git] / drivers / media / v4l2-core / v4l2-ctrls.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3     V4L2 controls framework implementation.
4
5     Copyright (C) 2010  Hans Verkuil <[email protected]>
6
7  */
8
9 #define pr_fmt(fmt) "v4l2-ctrls: " fmt
10
11 #include <linux/ctype.h>
12 #include <linux/mm.h>
13 #include <linux/slab.h>
14 #include <linux/export.h>
15 #include <media/v4l2-ioctl.h>
16 #include <media/v4l2-device.h>
17 #include <media/v4l2-ctrls.h>
18 #include <media/v4l2-event.h>
19 #include <media/v4l2-dev.h>
20
21 #define dprintk(vdev, fmt, arg...) do {                                 \
22         if (!WARN_ON(!(vdev)) && ((vdev)->dev_debug & V4L2_DEV_DEBUG_CTRL)) \
23                 printk(KERN_DEBUG pr_fmt("%s: %s: " fmt),               \
24                        __func__, video_device_node_name(vdev), ##arg);  \
25 } while (0)
26
27 #define has_op(master, op) \
28         (master->ops && master->ops->op)
29 #define call_op(master, op) \
30         (has_op(master, op) ? master->ops->op(master) : 0)
31
32 /* Internal temporary helper struct, one for each v4l2_ext_control */
33 struct v4l2_ctrl_helper {
34         /* Pointer to the control reference of the master control */
35         struct v4l2_ctrl_ref *mref;
36         /* The control ref corresponding to the v4l2_ext_control ID field. */
37         struct v4l2_ctrl_ref *ref;
38         /* v4l2_ext_control index of the next control belonging to the
39            same cluster, or 0 if there isn't any. */
40         u32 next;
41 };
42
43 /* Small helper function to determine if the autocluster is set to manual
44    mode. */
45 static bool is_cur_manual(const struct v4l2_ctrl *master)
46 {
47         return master->is_auto && master->cur.val == master->manual_mode_value;
48 }
49
50 /* Same as above, but this checks the against the new value instead of the
51    current value. */
52 static bool is_new_manual(const struct v4l2_ctrl *master)
53 {
54         return master->is_auto && master->val == master->manual_mode_value;
55 }
56
57 /* Returns NULL or a character pointer array containing the menu for
58    the given control ID. The pointer array ends with a NULL pointer.
59    An empty string signifies a menu entry that is invalid. This allows
60    drivers to disable certain options if it is not supported. */
61 const char * const *v4l2_ctrl_get_menu(u32 id)
62 {
63         static const char * const mpeg_audio_sampling_freq[] = {
64                 "44.1 kHz",
65                 "48 kHz",
66                 "32 kHz",
67                 NULL
68         };
69         static const char * const mpeg_audio_encoding[] = {
70                 "MPEG-1/2 Layer I",
71                 "MPEG-1/2 Layer II",
72                 "MPEG-1/2 Layer III",
73                 "MPEG-2/4 AAC",
74                 "AC-3",
75                 NULL
76         };
77         static const char * const mpeg_audio_l1_bitrate[] = {
78                 "32 kbps",
79                 "64 kbps",
80                 "96 kbps",
81                 "128 kbps",
82                 "160 kbps",
83                 "192 kbps",
84                 "224 kbps",
85                 "256 kbps",
86                 "288 kbps",
87                 "320 kbps",
88                 "352 kbps",
89                 "384 kbps",
90                 "416 kbps",
91                 "448 kbps",
92                 NULL
93         };
94         static const char * const mpeg_audio_l2_bitrate[] = {
95                 "32 kbps",
96                 "48 kbps",
97                 "56 kbps",
98                 "64 kbps",
99                 "80 kbps",
100                 "96 kbps",
101                 "112 kbps",
102                 "128 kbps",
103                 "160 kbps",
104                 "192 kbps",
105                 "224 kbps",
106                 "256 kbps",
107                 "320 kbps",
108                 "384 kbps",
109                 NULL
110         };
111         static const char * const mpeg_audio_l3_bitrate[] = {
112                 "32 kbps",
113                 "40 kbps",
114                 "48 kbps",
115                 "56 kbps",
116                 "64 kbps",
117                 "80 kbps",
118                 "96 kbps",
119                 "112 kbps",
120                 "128 kbps",
121                 "160 kbps",
122                 "192 kbps",
123                 "224 kbps",
124                 "256 kbps",
125                 "320 kbps",
126                 NULL
127         };
128         static const char * const mpeg_audio_ac3_bitrate[] = {
129                 "32 kbps",
130                 "40 kbps",
131                 "48 kbps",
132                 "56 kbps",
133                 "64 kbps",
134                 "80 kbps",
135                 "96 kbps",
136                 "112 kbps",
137                 "128 kbps",
138                 "160 kbps",
139                 "192 kbps",
140                 "224 kbps",
141                 "256 kbps",
142                 "320 kbps",
143                 "384 kbps",
144                 "448 kbps",
145                 "512 kbps",
146                 "576 kbps",
147                 "640 kbps",
148                 NULL
149         };
150         static const char * const mpeg_audio_mode[] = {
151                 "Stereo",
152                 "Joint Stereo",
153                 "Dual",
154                 "Mono",
155                 NULL
156         };
157         static const char * const mpeg_audio_mode_extension[] = {
158                 "Bound 4",
159                 "Bound 8",
160                 "Bound 12",
161                 "Bound 16",
162                 NULL
163         };
164         static const char * const mpeg_audio_emphasis[] = {
165                 "No Emphasis",
166                 "50/15 us",
167                 "CCITT J17",
168                 NULL
169         };
170         static const char * const mpeg_audio_crc[] = {
171                 "No CRC",
172                 "16-bit CRC",
173                 NULL
174         };
175         static const char * const mpeg_audio_dec_playback[] = {
176                 "Auto",
177                 "Stereo",
178                 "Left",
179                 "Right",
180                 "Mono",
181                 "Swapped Stereo",
182                 NULL
183         };
184         static const char * const mpeg_video_encoding[] = {
185                 "MPEG-1",
186                 "MPEG-2",
187                 "MPEG-4 AVC",
188                 NULL
189         };
190         static const char * const mpeg_video_aspect[] = {
191                 "1x1",
192                 "4x3",
193                 "16x9",
194                 "2.21x1",
195                 NULL
196         };
197         static const char * const mpeg_video_bitrate_mode[] = {
198                 "Variable Bitrate",
199                 "Constant Bitrate",
200                 NULL
201         };
202         static const char * const mpeg_stream_type[] = {
203                 "MPEG-2 Program Stream",
204                 "MPEG-2 Transport Stream",
205                 "MPEG-1 System Stream",
206                 "MPEG-2 DVD-compatible Stream",
207                 "MPEG-1 VCD-compatible Stream",
208                 "MPEG-2 SVCD-compatible Stream",
209                 NULL
210         };
211         static const char * const mpeg_stream_vbi_fmt[] = {
212                 "No VBI",
213                 "Private Packet, IVTV Format",
214                 NULL
215         };
216         static const char * const camera_power_line_frequency[] = {
217                 "Disabled",
218                 "50 Hz",
219                 "60 Hz",
220                 "Auto",
221                 NULL
222         };
223         static const char * const camera_exposure_auto[] = {
224                 "Auto Mode",
225                 "Manual Mode",
226                 "Shutter Priority Mode",
227                 "Aperture Priority Mode",
228                 NULL
229         };
230         static const char * const camera_exposure_metering[] = {
231                 "Average",
232                 "Center Weighted",
233                 "Spot",
234                 "Matrix",
235                 NULL
236         };
237         static const char * const camera_auto_focus_range[] = {
238                 "Auto",
239                 "Normal",
240                 "Macro",
241                 "Infinity",
242                 NULL
243         };
244         static const char * const colorfx[] = {
245                 "None",
246                 "Black & White",
247                 "Sepia",
248                 "Negative",
249                 "Emboss",
250                 "Sketch",
251                 "Sky Blue",
252                 "Grass Green",
253                 "Skin Whiten",
254                 "Vivid",
255                 "Aqua",
256                 "Art Freeze",
257                 "Silhouette",
258                 "Solarization",
259                 "Antique",
260                 "Set Cb/Cr",
261                 NULL
262         };
263         static const char * const auto_n_preset_white_balance[] = {
264                 "Manual",
265                 "Auto",
266                 "Incandescent",
267                 "Fluorescent",
268                 "Fluorescent H",
269                 "Horizon",
270                 "Daylight",
271                 "Flash",
272                 "Cloudy",
273                 "Shade",
274                 NULL,
275         };
276         static const char * const camera_iso_sensitivity_auto[] = {
277                 "Manual",
278                 "Auto",
279                 NULL
280         };
281         static const char * const scene_mode[] = {
282                 "None",
283                 "Backlight",
284                 "Beach/Snow",
285                 "Candle Light",
286                 "Dusk/Dawn",
287                 "Fall Colors",
288                 "Fireworks",
289                 "Landscape",
290                 "Night",
291                 "Party/Indoor",
292                 "Portrait",
293                 "Sports",
294                 "Sunset",
295                 "Text",
296                 NULL
297         };
298         static const char * const tune_emphasis[] = {
299                 "None",
300                 "50 Microseconds",
301                 "75 Microseconds",
302                 NULL,
303         };
304         static const char * const header_mode[] = {
305                 "Separate Buffer",
306                 "Joined With 1st Frame",
307                 NULL,
308         };
309         static const char * const multi_slice[] = {
310                 "Single",
311                 "Max Macroblocks",
312                 "Max Bytes",
313                 NULL,
314         };
315         static const char * const entropy_mode[] = {
316                 "CAVLC",
317                 "CABAC",
318                 NULL,
319         };
320         static const char * const mpeg_h264_level[] = {
321                 "1",
322                 "1b",
323                 "1.1",
324                 "1.2",
325                 "1.3",
326                 "2",
327                 "2.1",
328                 "2.2",
329                 "3",
330                 "3.1",
331                 "3.2",
332                 "4",
333                 "4.1",
334                 "4.2",
335                 "5",
336                 "5.1",
337                 NULL,
338         };
339         static const char * const h264_loop_filter[] = {
340                 "Enabled",
341                 "Disabled",
342                 "Disabled at Slice Boundary",
343                 NULL,
344         };
345         static const char * const h264_profile[] = {
346                 "Baseline",
347                 "Constrained Baseline",
348                 "Main",
349                 "Extended",
350                 "High",
351                 "High 10",
352                 "High 422",
353                 "High 444 Predictive",
354                 "High 10 Intra",
355                 "High 422 Intra",
356                 "High 444 Intra",
357                 "CAVLC 444 Intra",
358                 "Scalable Baseline",
359                 "Scalable High",
360                 "Scalable High Intra",
361                 "Stereo High",
362                 "Multiview High",
363                 NULL,
364         };
365         static const char * const vui_sar_idc[] = {
366                 "Unspecified",
367                 "1:1",
368                 "12:11",
369                 "10:11",
370                 "16:11",
371                 "40:33",
372                 "24:11",
373                 "20:11",
374                 "32:11",
375                 "80:33",
376                 "18:11",
377                 "15:11",
378                 "64:33",
379                 "160:99",
380                 "4:3",
381                 "3:2",
382                 "2:1",
383                 "Extended SAR",
384                 NULL,
385         };
386         static const char * const h264_fp_arrangement_type[] = {
387                 "Checkerboard",
388                 "Column",
389                 "Row",
390                 "Side by Side",
391                 "Top Bottom",
392                 "Temporal",
393                 NULL,
394         };
395         static const char * const h264_fmo_map_type[] = {
396                 "Interleaved Slices",
397                 "Scattered Slices",
398                 "Foreground with Leftover",
399                 "Box Out",
400                 "Raster Scan",
401                 "Wipe Scan",
402                 "Explicit",
403                 NULL,
404         };
405         static const char * const h264_decode_mode[] = {
406                 "Slice-Based",
407                 "Frame-Based",
408                 NULL,
409         };
410         static const char * const h264_start_code[] = {
411                 "No Start Code",
412                 "Annex B Start Code",
413                 NULL,
414         };
415         static const char * const mpeg_mpeg2_level[] = {
416                 "Low",
417                 "Main",
418                 "High 1440",
419                 "High",
420                 NULL,
421         };
422         static const char * const mpeg2_profile[] = {
423                 "Simple",
424                 "Main",
425                 "SNR Scalable",
426                 "Spatially Scalable",
427                 "High",
428                 NULL,
429         };
430         static const char * const mpeg_mpeg4_level[] = {
431                 "0",
432                 "0b",
433                 "1",
434                 "2",
435                 "3",
436                 "3b",
437                 "4",
438                 "5",
439                 NULL,
440         };
441         static const char * const mpeg4_profile[] = {
442                 "Simple",
443                 "Advanced Simple",
444                 "Core",
445                 "Simple Scalable",
446                 "Advanced Coding Efficiency",
447                 NULL,
448         };
449
450         static const char * const vpx_golden_frame_sel[] = {
451                 "Use Previous Frame",
452                 "Use Previous Specific Frame",
453                 NULL,
454         };
455         static const char * const vp8_profile[] = {
456                 "0",
457                 "1",
458                 "2",
459                 "3",
460                 NULL,
461         };
462         static const char * const vp9_profile[] = {
463                 "0",
464                 "1",
465                 "2",
466                 "3",
467                 NULL,
468         };
469
470         static const char * const flash_led_mode[] = {
471                 "Off",
472                 "Flash",
473                 "Torch",
474                 NULL,
475         };
476         static const char * const flash_strobe_source[] = {
477                 "Software",
478                 "External",
479                 NULL,
480         };
481
482         static const char * const jpeg_chroma_subsampling[] = {
483                 "4:4:4",
484                 "4:2:2",
485                 "4:2:0",
486                 "4:1:1",
487                 "4:1:0",
488                 "Gray",
489                 NULL,
490         };
491         static const char * const dv_tx_mode[] = {
492                 "DVI-D",
493                 "HDMI",
494                 NULL,
495         };
496         static const char * const dv_rgb_range[] = {
497                 "Automatic",
498                 "RGB Limited Range (16-235)",
499                 "RGB Full Range (0-255)",
500                 NULL,
501         };
502         static const char * const dv_it_content_type[] = {
503                 "Graphics",
504                 "Photo",
505                 "Cinema",
506                 "Game",
507                 "No IT Content",
508                 NULL,
509         };
510         static const char * const detect_md_mode[] = {
511                 "Disabled",
512                 "Global",
513                 "Threshold Grid",
514                 "Region Grid",
515                 NULL,
516         };
517
518         static const char * const hevc_profile[] = {
519                 "Main",
520                 "Main Still Picture",
521                 "Main 10",
522                 NULL,
523         };
524         static const char * const hevc_level[] = {
525                 "1",
526                 "2",
527                 "2.1",
528                 "3",
529                 "3.1",
530                 "4",
531                 "4.1",
532                 "5",
533                 "5.1",
534                 "5.2",
535                 "6",
536                 "6.1",
537                 "6.2",
538                 NULL,
539         };
540         static const char * const hevc_hierarchial_coding_type[] = {
541                 "B",
542                 "P",
543                 NULL,
544         };
545         static const char * const hevc_refresh_type[] = {
546                 "None",
547                 "CRA",
548                 "IDR",
549                 NULL,
550         };
551         static const char * const hevc_size_of_length_field[] = {
552                 "0",
553                 "1",
554                 "2",
555                 "4",
556                 NULL,
557         };
558         static const char * const hevc_tier[] = {
559                 "Main",
560                 "High",
561                 NULL,
562         };
563         static const char * const hevc_loop_filter_mode[] = {
564                 "Disabled",
565                 "Enabled",
566                 "Disabled at slice boundary",
567                 "NULL",
568         };
569
570         switch (id) {
571         case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
572                 return mpeg_audio_sampling_freq;
573         case V4L2_CID_MPEG_AUDIO_ENCODING:
574                 return mpeg_audio_encoding;
575         case V4L2_CID_MPEG_AUDIO_L1_BITRATE:
576                 return mpeg_audio_l1_bitrate;
577         case V4L2_CID_MPEG_AUDIO_L2_BITRATE:
578                 return mpeg_audio_l2_bitrate;
579         case V4L2_CID_MPEG_AUDIO_L3_BITRATE:
580                 return mpeg_audio_l3_bitrate;
581         case V4L2_CID_MPEG_AUDIO_AC3_BITRATE:
582                 return mpeg_audio_ac3_bitrate;
583         case V4L2_CID_MPEG_AUDIO_MODE:
584                 return mpeg_audio_mode;
585         case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION:
586                 return mpeg_audio_mode_extension;
587         case V4L2_CID_MPEG_AUDIO_EMPHASIS:
588                 return mpeg_audio_emphasis;
589         case V4L2_CID_MPEG_AUDIO_CRC:
590                 return mpeg_audio_crc;
591         case V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK:
592         case V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK:
593                 return mpeg_audio_dec_playback;
594         case V4L2_CID_MPEG_VIDEO_ENCODING:
595                 return mpeg_video_encoding;
596         case V4L2_CID_MPEG_VIDEO_ASPECT:
597                 return mpeg_video_aspect;
598         case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
599                 return mpeg_video_bitrate_mode;
600         case V4L2_CID_MPEG_STREAM_TYPE:
601                 return mpeg_stream_type;
602         case V4L2_CID_MPEG_STREAM_VBI_FMT:
603                 return mpeg_stream_vbi_fmt;
604         case V4L2_CID_POWER_LINE_FREQUENCY:
605                 return camera_power_line_frequency;
606         case V4L2_CID_EXPOSURE_AUTO:
607                 return camera_exposure_auto;
608         case V4L2_CID_EXPOSURE_METERING:
609                 return camera_exposure_metering;
610         case V4L2_CID_AUTO_FOCUS_RANGE:
611                 return camera_auto_focus_range;
612         case V4L2_CID_COLORFX:
613                 return colorfx;
614         case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE:
615                 return auto_n_preset_white_balance;
616         case V4L2_CID_ISO_SENSITIVITY_AUTO:
617                 return camera_iso_sensitivity_auto;
618         case V4L2_CID_SCENE_MODE:
619                 return scene_mode;
620         case V4L2_CID_TUNE_PREEMPHASIS:
621                 return tune_emphasis;
622         case V4L2_CID_TUNE_DEEMPHASIS:
623                 return tune_emphasis;
624         case V4L2_CID_FLASH_LED_MODE:
625                 return flash_led_mode;
626         case V4L2_CID_FLASH_STROBE_SOURCE:
627                 return flash_strobe_source;
628         case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
629                 return header_mode;
630         case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:
631                 return multi_slice;
632         case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
633                 return entropy_mode;
634         case V4L2_CID_MPEG_VIDEO_H264_LEVEL:
635                 return mpeg_h264_level;
636         case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE:
637                 return h264_loop_filter;
638         case V4L2_CID_MPEG_VIDEO_H264_PROFILE:
639                 return h264_profile;
640         case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC:
641                 return vui_sar_idc;
642         case V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE:
643                 return h264_fp_arrangement_type;
644         case V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE:
645                 return h264_fmo_map_type;
646         case V4L2_CID_MPEG_VIDEO_H264_DECODE_MODE:
647                 return h264_decode_mode;
648         case V4L2_CID_MPEG_VIDEO_H264_START_CODE:
649                 return h264_start_code;
650         case V4L2_CID_MPEG_VIDEO_MPEG2_LEVEL:
651                 return mpeg_mpeg2_level;
652         case V4L2_CID_MPEG_VIDEO_MPEG2_PROFILE:
653                 return mpeg2_profile;
654         case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL:
655                 return mpeg_mpeg4_level;
656         case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE:
657                 return mpeg4_profile;
658         case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL:
659                 return vpx_golden_frame_sel;
660         case V4L2_CID_MPEG_VIDEO_VP8_PROFILE:
661                 return vp8_profile;
662         case V4L2_CID_MPEG_VIDEO_VP9_PROFILE:
663                 return vp9_profile;
664         case V4L2_CID_JPEG_CHROMA_SUBSAMPLING:
665                 return jpeg_chroma_subsampling;
666         case V4L2_CID_DV_TX_MODE:
667                 return dv_tx_mode;
668         case V4L2_CID_DV_TX_RGB_RANGE:
669         case V4L2_CID_DV_RX_RGB_RANGE:
670                 return dv_rgb_range;
671         case V4L2_CID_DV_TX_IT_CONTENT_TYPE:
672         case V4L2_CID_DV_RX_IT_CONTENT_TYPE:
673                 return dv_it_content_type;
674         case V4L2_CID_DETECT_MD_MODE:
675                 return detect_md_mode;
676         case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE:
677                 return hevc_profile;
678         case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL:
679                 return hevc_level;
680         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE:
681                 return hevc_hierarchial_coding_type;
682         case V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE:
683                 return hevc_refresh_type;
684         case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:
685                 return hevc_size_of_length_field;
686         case V4L2_CID_MPEG_VIDEO_HEVC_TIER:
687                 return hevc_tier;
688         case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
689                 return hevc_loop_filter_mode;
690
691         default:
692                 return NULL;
693         }
694 }
695 EXPORT_SYMBOL(v4l2_ctrl_get_menu);
696
697 #define __v4l2_qmenu_int_len(arr, len) ({ *(len) = ARRAY_SIZE(arr); arr; })
698 /*
699  * Returns NULL or an s64 type array containing the menu for given
700  * control ID. The total number of the menu items is returned in @len.
701  */
702 const s64 *v4l2_ctrl_get_int_menu(u32 id, u32 *len)
703 {
704         static const s64 qmenu_int_vpx_num_partitions[] = {
705                 1, 2, 4, 8,
706         };
707
708         static const s64 qmenu_int_vpx_num_ref_frames[] = {
709                 1, 2, 3,
710         };
711
712         switch (id) {
713         case V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS:
714                 return __v4l2_qmenu_int_len(qmenu_int_vpx_num_partitions, len);
715         case V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES:
716                 return __v4l2_qmenu_int_len(qmenu_int_vpx_num_ref_frames, len);
717         default:
718                 *len = 0;
719                 return NULL;
720         }
721 }
722 EXPORT_SYMBOL(v4l2_ctrl_get_int_menu);
723
724 /* Return the control name. */
725 const char *v4l2_ctrl_get_name(u32 id)
726 {
727         switch (id) {
728         /* USER controls */
729         /* Keep the order of the 'case's the same as in v4l2-controls.h! */
730         case V4L2_CID_USER_CLASS:               return "User Controls";
731         case V4L2_CID_BRIGHTNESS:               return "Brightness";
732         case V4L2_CID_CONTRAST:                 return "Contrast";
733         case V4L2_CID_SATURATION:               return "Saturation";
734         case V4L2_CID_HUE:                      return "Hue";
735         case V4L2_CID_AUDIO_VOLUME:             return "Volume";
736         case V4L2_CID_AUDIO_BALANCE:            return "Balance";
737         case V4L2_CID_AUDIO_BASS:               return "Bass";
738         case V4L2_CID_AUDIO_TREBLE:             return "Treble";
739         case V4L2_CID_AUDIO_MUTE:               return "Mute";
740         case V4L2_CID_AUDIO_LOUDNESS:           return "Loudness";
741         case V4L2_CID_BLACK_LEVEL:              return "Black Level";
742         case V4L2_CID_AUTO_WHITE_BALANCE:       return "White Balance, Automatic";
743         case V4L2_CID_DO_WHITE_BALANCE:         return "Do White Balance";
744         case V4L2_CID_RED_BALANCE:              return "Red Balance";
745         case V4L2_CID_BLUE_BALANCE:             return "Blue Balance";
746         case V4L2_CID_GAMMA:                    return "Gamma";
747         case V4L2_CID_EXPOSURE:                 return "Exposure";
748         case V4L2_CID_AUTOGAIN:                 return "Gain, Automatic";
749         case V4L2_CID_GAIN:                     return "Gain";
750         case V4L2_CID_HFLIP:                    return "Horizontal Flip";
751         case V4L2_CID_VFLIP:                    return "Vertical Flip";
752         case V4L2_CID_POWER_LINE_FREQUENCY:     return "Power Line Frequency";
753         case V4L2_CID_HUE_AUTO:                 return "Hue, Automatic";
754         case V4L2_CID_WHITE_BALANCE_TEMPERATURE: return "White Balance Temperature";
755         case V4L2_CID_SHARPNESS:                return "Sharpness";
756         case V4L2_CID_BACKLIGHT_COMPENSATION:   return "Backlight Compensation";
757         case V4L2_CID_CHROMA_AGC:               return "Chroma AGC";
758         case V4L2_CID_COLOR_KILLER:             return "Color Killer";
759         case V4L2_CID_COLORFX:                  return "Color Effects";
760         case V4L2_CID_AUTOBRIGHTNESS:           return "Brightness, Automatic";
761         case V4L2_CID_BAND_STOP_FILTER:         return "Band-Stop Filter";
762         case V4L2_CID_ROTATE:                   return "Rotate";
763         case V4L2_CID_BG_COLOR:                 return "Background Color";
764         case V4L2_CID_CHROMA_GAIN:              return "Chroma Gain";
765         case V4L2_CID_ILLUMINATORS_1:           return "Illuminator 1";
766         case V4L2_CID_ILLUMINATORS_2:           return "Illuminator 2";
767         case V4L2_CID_MIN_BUFFERS_FOR_CAPTURE:  return "Min Number of Capture Buffers";
768         case V4L2_CID_MIN_BUFFERS_FOR_OUTPUT:   return "Min Number of Output Buffers";
769         case V4L2_CID_ALPHA_COMPONENT:          return "Alpha Component";
770         case V4L2_CID_COLORFX_CBCR:             return "Color Effects, CbCr";
771
772         /* Codec controls */
773         /* The MPEG controls are applicable to all codec controls
774          * and the 'MPEG' part of the define is historical */
775         /* Keep the order of the 'case's the same as in videodev2.h! */
776         case V4L2_CID_MPEG_CLASS:               return "Codec Controls";
777         case V4L2_CID_MPEG_STREAM_TYPE:         return "Stream Type";
778         case V4L2_CID_MPEG_STREAM_PID_PMT:      return "Stream PMT Program ID";
779         case V4L2_CID_MPEG_STREAM_PID_AUDIO:    return "Stream Audio Program ID";
780         case V4L2_CID_MPEG_STREAM_PID_VIDEO:    return "Stream Video Program ID";
781         case V4L2_CID_MPEG_STREAM_PID_PCR:      return "Stream PCR Program ID";
782         case V4L2_CID_MPEG_STREAM_PES_ID_AUDIO: return "Stream PES Audio ID";
783         case V4L2_CID_MPEG_STREAM_PES_ID_VIDEO: return "Stream PES Video ID";
784         case V4L2_CID_MPEG_STREAM_VBI_FMT:      return "Stream VBI Format";
785         case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ: return "Audio Sampling Frequency";
786         case V4L2_CID_MPEG_AUDIO_ENCODING:      return "Audio Encoding";
787         case V4L2_CID_MPEG_AUDIO_L1_BITRATE:    return "Audio Layer I Bitrate";
788         case V4L2_CID_MPEG_AUDIO_L2_BITRATE:    return "Audio Layer II Bitrate";
789         case V4L2_CID_MPEG_AUDIO_L3_BITRATE:    return "Audio Layer III Bitrate";
790         case V4L2_CID_MPEG_AUDIO_MODE:          return "Audio Stereo Mode";
791         case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION: return "Audio Stereo Mode Extension";
792         case V4L2_CID_MPEG_AUDIO_EMPHASIS:      return "Audio Emphasis";
793         case V4L2_CID_MPEG_AUDIO_CRC:           return "Audio CRC";
794         case V4L2_CID_MPEG_AUDIO_MUTE:          return "Audio Mute";
795         case V4L2_CID_MPEG_AUDIO_AAC_BITRATE:   return "Audio AAC Bitrate";
796         case V4L2_CID_MPEG_AUDIO_AC3_BITRATE:   return "Audio AC-3 Bitrate";
797         case V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK:  return "Audio Playback";
798         case V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK: return "Audio Multilingual Playback";
799         case V4L2_CID_MPEG_VIDEO_ENCODING:      return "Video Encoding";
800         case V4L2_CID_MPEG_VIDEO_ASPECT:        return "Video Aspect";
801         case V4L2_CID_MPEG_VIDEO_B_FRAMES:      return "Video B Frames";
802         case V4L2_CID_MPEG_VIDEO_GOP_SIZE:      return "Video GOP Size";
803         case V4L2_CID_MPEG_VIDEO_GOP_CLOSURE:   return "Video GOP Closure";
804         case V4L2_CID_MPEG_VIDEO_PULLDOWN:      return "Video Pulldown";
805         case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:  return "Video Bitrate Mode";
806         case V4L2_CID_MPEG_VIDEO_BITRATE:       return "Video Bitrate";
807         case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK:  return "Video Peak Bitrate";
808         case V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION: return "Video Temporal Decimation";
809         case V4L2_CID_MPEG_VIDEO_MUTE:          return "Video Mute";
810         case V4L2_CID_MPEG_VIDEO_MUTE_YUV:      return "Video Mute YUV";
811         case V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE:       return "Decoder Slice Interface";
812         case V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER:  return "MPEG4 Loop Filter Enable";
813         case V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB:       return "Number of Intra Refresh MBs";
814         case V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE:               return "Frame Level Rate Control Enable";
815         case V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE:                  return "H264 MB Level Rate Control";
816         case V4L2_CID_MPEG_VIDEO_HEADER_MODE:                   return "Sequence Header Mode";
817         case V4L2_CID_MPEG_VIDEO_MAX_REF_PIC:                   return "Max Number of Reference Pics";
818         case V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP:               return "H263 I-Frame QP Value";
819         case V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP:               return "H263 P-Frame QP Value";
820         case V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP:               return "H263 B-Frame QP Value";
821         case V4L2_CID_MPEG_VIDEO_H263_MIN_QP:                   return "H263 Minimum QP Value";
822         case V4L2_CID_MPEG_VIDEO_H263_MAX_QP:                   return "H263 Maximum QP Value";
823         case V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP:               return "H264 I-Frame QP Value";
824         case V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP:               return "H264 P-Frame QP Value";
825         case V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP:               return "H264 B-Frame QP Value";
826         case V4L2_CID_MPEG_VIDEO_H264_MAX_QP:                   return "H264 Maximum QP Value";
827         case V4L2_CID_MPEG_VIDEO_H264_MIN_QP:                   return "H264 Minimum QP Value";
828         case V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM:            return "H264 8x8 Transform Enable";
829         case V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE:                 return "H264 CPB Buffer Size";
830         case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:             return "H264 Entropy Mode";
831         case V4L2_CID_MPEG_VIDEO_H264_I_PERIOD:                 return "H264 I-Frame Period";
832         case V4L2_CID_MPEG_VIDEO_H264_LEVEL:                    return "H264 Level";
833         case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA:        return "H264 Loop Filter Alpha Offset";
834         case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA:         return "H264 Loop Filter Beta Offset";
835         case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE:         return "H264 Loop Filter Mode";
836         case V4L2_CID_MPEG_VIDEO_H264_PROFILE:                  return "H264 Profile";
837         case V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT:       return "Vertical Size of SAR";
838         case V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH:        return "Horizontal Size of SAR";
839         case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE:           return "Aspect Ratio VUI Enable";
840         case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC:              return "VUI Aspect Ratio IDC";
841         case V4L2_CID_MPEG_VIDEO_H264_SEI_FRAME_PACKING:        return "H264 Enable Frame Packing SEI";
842         case V4L2_CID_MPEG_VIDEO_H264_SEI_FP_CURRENT_FRAME_0:   return "H264 Set Curr. Frame as Frame0";
843         case V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE:  return "H264 FP Arrangement Type";
844         case V4L2_CID_MPEG_VIDEO_H264_FMO:                      return "H264 Flexible MB Ordering";
845         case V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE:             return "H264 Map Type for FMO";
846         case V4L2_CID_MPEG_VIDEO_H264_FMO_SLICE_GROUP:          return "H264 FMO Number of Slice Groups";
847         case V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_DIRECTION:     return "H264 FMO Direction of Change";
848         case V4L2_CID_MPEG_VIDEO_H264_FMO_CHANGE_RATE:          return "H264 FMO Size of 1st Slice Grp";
849         case V4L2_CID_MPEG_VIDEO_H264_FMO_RUN_LENGTH:           return "H264 FMO No. of Consecutive MBs";
850         case V4L2_CID_MPEG_VIDEO_H264_ASO:                      return "H264 Arbitrary Slice Ordering";
851         case V4L2_CID_MPEG_VIDEO_H264_ASO_SLICE_ORDER:          return "H264 ASO Slice Order";
852         case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING:      return "Enable H264 Hierarchical Coding";
853         case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE: return "H264 Hierarchical Coding Type";
854         case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER:return "H264 Number of HC Layers";
855         case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP:
856                                                                 return "H264 Set QP Value for HC Layers";
857         case V4L2_CID_MPEG_VIDEO_H264_CONSTRAINED_INTRA_PREDICTION:
858                                                                 return "H264 Constrained Intra Pred";
859         case V4L2_CID_MPEG_VIDEO_H264_CHROMA_QP_INDEX_OFFSET:   return "H264 Chroma QP Index Offset";
860         case V4L2_CID_MPEG_VIDEO_H264_I_FRAME_MIN_QP:           return "H264 I-Frame Minimum QP Value";
861         case V4L2_CID_MPEG_VIDEO_H264_I_FRAME_MAX_QP:           return "H264 I-Frame Maximum QP Value";
862         case V4L2_CID_MPEG_VIDEO_H264_P_FRAME_MIN_QP:           return "H264 P-Frame Minimum QP Value";
863         case V4L2_CID_MPEG_VIDEO_H264_P_FRAME_MAX_QP:           return "H264 P-Frame Maximum QP Value";
864         case V4L2_CID_MPEG_VIDEO_H264_SPS:                      return "H264 Sequence Parameter Set";
865         case V4L2_CID_MPEG_VIDEO_H264_PPS:                      return "H264 Picture Parameter Set";
866         case V4L2_CID_MPEG_VIDEO_H264_SCALING_MATRIX:           return "H264 Scaling Matrix";
867         case V4L2_CID_MPEG_VIDEO_H264_SLICE_PARAMS:             return "H264 Slice Parameters";
868         case V4L2_CID_MPEG_VIDEO_H264_DECODE_PARAMS:            return "H264 Decode Parameters";
869         case V4L2_CID_MPEG_VIDEO_H264_DECODE_MODE:              return "H264 Decode Mode";
870         case V4L2_CID_MPEG_VIDEO_H264_START_CODE:               return "H264 Start Code";
871         case V4L2_CID_MPEG_VIDEO_MPEG2_LEVEL:                   return "MPEG2 Level";
872         case V4L2_CID_MPEG_VIDEO_MPEG2_PROFILE:                 return "MPEG2 Profile";
873         case V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP:              return "MPEG4 I-Frame QP Value";
874         case V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP:              return "MPEG4 P-Frame QP Value";
875         case V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP:              return "MPEG4 B-Frame QP Value";
876         case V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP:                  return "MPEG4 Minimum QP Value";
877         case V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP:                  return "MPEG4 Maximum QP Value";
878         case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL:                   return "MPEG4 Level";
879         case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE:                 return "MPEG4 Profile";
880         case V4L2_CID_MPEG_VIDEO_MPEG4_QPEL:                    return "Quarter Pixel Search Enable";
881         case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES:         return "Maximum Bytes in a Slice";
882         case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB:            return "Number of MBs in a Slice";
883         case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:              return "Slice Partitioning Method";
884         case V4L2_CID_MPEG_VIDEO_VBV_SIZE:                      return "VBV Buffer Size";
885         case V4L2_CID_MPEG_VIDEO_DEC_PTS:                       return "Video Decoder PTS";
886         case V4L2_CID_MPEG_VIDEO_DEC_FRAME:                     return "Video Decoder Frame Count";
887         case V4L2_CID_MPEG_VIDEO_VBV_DELAY:                     return "Initial Delay for VBV Control";
888         case V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE:             return "Horizontal MV Search Range";
889         case V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE:             return "Vertical MV Search Range";
890         case V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER:             return "Repeat Sequence Header";
891         case V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME:               return "Force Key Frame";
892         case V4L2_CID_MPEG_VIDEO_MPEG2_SLICE_PARAMS:            return "MPEG-2 Slice Parameters";
893         case V4L2_CID_MPEG_VIDEO_MPEG2_QUANTIZATION:            return "MPEG-2 Quantization Matrices";
894         case V4L2_CID_MPEG_VIDEO_FWHT_PARAMS:                   return "FWHT Stateless Parameters";
895         case V4L2_CID_FWHT_I_FRAME_QP:                          return "FWHT I-Frame QP Value";
896         case V4L2_CID_FWHT_P_FRAME_QP:                          return "FWHT P-Frame QP Value";
897
898         /* VPX controls */
899         case V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS:            return "VPX Number of Partitions";
900         case V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4:           return "VPX Intra Mode Decision Disable";
901         case V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES:            return "VPX No. of Refs for P Frame";
902         case V4L2_CID_MPEG_VIDEO_VPX_FILTER_LEVEL:              return "VPX Loop Filter Level Range";
903         case V4L2_CID_MPEG_VIDEO_VPX_FILTER_SHARPNESS:          return "VPX Deblocking Effect Control";
904         case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_REF_PERIOD:   return "VPX Golden Frame Refresh Period";
905         case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL:          return "VPX Golden Frame Indicator";
906         case V4L2_CID_MPEG_VIDEO_VPX_MIN_QP:                    return "VPX Minimum QP Value";
907         case V4L2_CID_MPEG_VIDEO_VPX_MAX_QP:                    return "VPX Maximum QP Value";
908         case V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP:                return "VPX I-Frame QP Value";
909         case V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP:                return "VPX P-Frame QP Value";
910         case V4L2_CID_MPEG_VIDEO_VP8_PROFILE:                   return "VP8 Profile";
911         case V4L2_CID_MPEG_VIDEO_VP9_PROFILE:                   return "VP9 Profile";
912         case V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER:              return "VP8 Frame Header";
913
914         /* HEVC controls */
915         case V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP:               return "HEVC I-Frame QP Value";
916         case V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP:               return "HEVC P-Frame QP Value";
917         case V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP:               return "HEVC B-Frame QP Value";
918         case V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP:                   return "HEVC Minimum QP Value";
919         case V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP:                   return "HEVC Maximum QP Value";
920         case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE:                  return "HEVC Profile";
921         case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL:                    return "HEVC Level";
922         case V4L2_CID_MPEG_VIDEO_HEVC_TIER:                     return "HEVC Tier";
923         case V4L2_CID_MPEG_VIDEO_HEVC_FRAME_RATE_RESOLUTION:    return "HEVC Frame Rate Resolution";
924         case V4L2_CID_MPEG_VIDEO_HEVC_MAX_PARTITION_DEPTH:      return "HEVC Maximum Coding Unit Depth";
925         case V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE:             return "HEVC Refresh Type";
926         case V4L2_CID_MPEG_VIDEO_HEVC_CONST_INTRA_PRED:         return "HEVC Constant Intra Prediction";
927         case V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU:              return "HEVC Lossless Encoding";
928         case V4L2_CID_MPEG_VIDEO_HEVC_WAVEFRONT:                return "HEVC Wavefront";
929         case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:         return "HEVC Loop Filter";
930         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP:                  return "HEVC QP Values";
931         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE:         return "HEVC Hierarchical Coding Type";
932         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER:        return "HEVC Hierarchical Coding Layer";
933         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP:        return "HEVC Hierarchical Layer 0 QP";
934         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP:        return "HEVC Hierarchical Layer 1 QP";
935         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP:        return "HEVC Hierarchical Layer 2 QP";
936         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP:        return "HEVC Hierarchical Layer 3 QP";
937         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP:        return "HEVC Hierarchical Layer 4 QP";
938         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP:        return "HEVC Hierarchical Layer 5 QP";
939         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_QP:        return "HEVC Hierarchical Layer 6 QP";
940         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR:        return "HEVC Hierarchical Lay 0 BitRate";
941         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR:        return "HEVC Hierarchical Lay 1 BitRate";
942         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR:        return "HEVC Hierarchical Lay 2 BitRate";
943         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR:        return "HEVC Hierarchical Lay 3 BitRate";
944         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR:        return "HEVC Hierarchical Lay 4 BitRate";
945         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR:        return "HEVC Hierarchical Lay 5 BitRate";
946         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR:        return "HEVC Hierarchical Lay 6 BitRate";
947         case V4L2_CID_MPEG_VIDEO_HEVC_GENERAL_PB:               return "HEVC General PB";
948         case V4L2_CID_MPEG_VIDEO_HEVC_TEMPORAL_ID:              return "HEVC Temporal ID";
949         case V4L2_CID_MPEG_VIDEO_HEVC_STRONG_SMOOTHING:         return "HEVC Strong Intra Smoothing";
950         case V4L2_CID_MPEG_VIDEO_HEVC_INTRA_PU_SPLIT:           return "HEVC Intra PU Split";
951         case V4L2_CID_MPEG_VIDEO_HEVC_TMV_PREDICTION:           return "HEVC TMV Prediction";
952         case V4L2_CID_MPEG_VIDEO_HEVC_MAX_NUM_MERGE_MV_MINUS1:  return "HEVC Max Num of Candidate MVs";
953         case V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE:        return "HEVC ENC Without Startcode";
954         case V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_PERIOD:           return "HEVC Num of I-Frame b/w 2 IDR";
955         case V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2:      return "HEVC Loop Filter Beta Offset";
956         case V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2:        return "HEVC Loop Filter TC Offset";
957         case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:     return "HEVC Size of Length Field";
958         case V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES:        return "Reference Frames for a P-Frame";
959         case V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR:         return "Prepend SPS and PPS to IDR";
960
961         /* CAMERA controls */
962         /* Keep the order of the 'case's the same as in v4l2-controls.h! */
963         case V4L2_CID_CAMERA_CLASS:             return "Camera Controls";
964         case V4L2_CID_EXPOSURE_AUTO:            return "Auto Exposure";
965         case V4L2_CID_EXPOSURE_ABSOLUTE:        return "Exposure Time, Absolute";
966         case V4L2_CID_EXPOSURE_AUTO_PRIORITY:   return "Exposure, Dynamic Framerate";
967         case V4L2_CID_PAN_RELATIVE:             return "Pan, Relative";
968         case V4L2_CID_TILT_RELATIVE:            return "Tilt, Relative";
969         case V4L2_CID_PAN_RESET:                return "Pan, Reset";
970         case V4L2_CID_TILT_RESET:               return "Tilt, Reset";
971         case V4L2_CID_PAN_ABSOLUTE:             return "Pan, Absolute";
972         case V4L2_CID_TILT_ABSOLUTE:            return "Tilt, Absolute";
973         case V4L2_CID_FOCUS_ABSOLUTE:           return "Focus, Absolute";
974         case V4L2_CID_FOCUS_RELATIVE:           return "Focus, Relative";
975         case V4L2_CID_FOCUS_AUTO:               return "Focus, Automatic Continuous";
976         case V4L2_CID_ZOOM_ABSOLUTE:            return "Zoom, Absolute";
977         case V4L2_CID_ZOOM_RELATIVE:            return "Zoom, Relative";
978         case V4L2_CID_ZOOM_CONTINUOUS:          return "Zoom, Continuous";
979         case V4L2_CID_PRIVACY:                  return "Privacy";
980         case V4L2_CID_IRIS_ABSOLUTE:            return "Iris, Absolute";
981         case V4L2_CID_IRIS_RELATIVE:            return "Iris, Relative";
982         case V4L2_CID_AUTO_EXPOSURE_BIAS:       return "Auto Exposure, Bias";
983         case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE: return "White Balance, Auto & Preset";
984         case V4L2_CID_WIDE_DYNAMIC_RANGE:       return "Wide Dynamic Range";
985         case V4L2_CID_IMAGE_STABILIZATION:      return "Image Stabilization";
986         case V4L2_CID_ISO_SENSITIVITY:          return "ISO Sensitivity";
987         case V4L2_CID_ISO_SENSITIVITY_AUTO:     return "ISO Sensitivity, Auto";
988         case V4L2_CID_EXPOSURE_METERING:        return "Exposure, Metering Mode";
989         case V4L2_CID_SCENE_MODE:               return "Scene Mode";
990         case V4L2_CID_3A_LOCK:                  return "3A Lock";
991         case V4L2_CID_AUTO_FOCUS_START:         return "Auto Focus, Start";
992         case V4L2_CID_AUTO_FOCUS_STOP:          return "Auto Focus, Stop";
993         case V4L2_CID_AUTO_FOCUS_STATUS:        return "Auto Focus, Status";
994         case V4L2_CID_AUTO_FOCUS_RANGE:         return "Auto Focus, Range";
995         case V4L2_CID_PAN_SPEED:                return "Pan, Speed";
996         case V4L2_CID_TILT_SPEED:               return "Tilt, Speed";
997
998         /* FM Radio Modulator controls */
999         /* Keep the order of the 'case's the same as in v4l2-controls.h! */
1000         case V4L2_CID_FM_TX_CLASS:              return "FM Radio Modulator Controls";
1001         case V4L2_CID_RDS_TX_DEVIATION:         return "RDS Signal Deviation";
1002         case V4L2_CID_RDS_TX_PI:                return "RDS Program ID";
1003         case V4L2_CID_RDS_TX_PTY:               return "RDS Program Type";
1004         case V4L2_CID_RDS_TX_PS_NAME:           return "RDS PS Name";
1005         case V4L2_CID_RDS_TX_RADIO_TEXT:        return "RDS Radio Text";
1006         case V4L2_CID_RDS_TX_MONO_STEREO:       return "RDS Stereo";
1007         case V4L2_CID_RDS_TX_ARTIFICIAL_HEAD:   return "RDS Artificial Head";
1008         case V4L2_CID_RDS_TX_COMPRESSED:        return "RDS Compressed";
1009         case V4L2_CID_RDS_TX_DYNAMIC_PTY:       return "RDS Dynamic PTY";
1010         case V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT: return "RDS Traffic Announcement";
1011         case V4L2_CID_RDS_TX_TRAFFIC_PROGRAM:   return "RDS Traffic Program";
1012         case V4L2_CID_RDS_TX_MUSIC_SPEECH:      return "RDS Music";
1013         case V4L2_CID_RDS_TX_ALT_FREQS_ENABLE:  return "RDS Enable Alt Frequencies";
1014         case V4L2_CID_RDS_TX_ALT_FREQS:         return "RDS Alternate Frequencies";
1015         case V4L2_CID_AUDIO_LIMITER_ENABLED:    return "Audio Limiter Feature Enabled";
1016         case V4L2_CID_AUDIO_LIMITER_RELEASE_TIME: return "Audio Limiter Release Time";
1017         case V4L2_CID_AUDIO_LIMITER_DEVIATION:  return "Audio Limiter Deviation";
1018         case V4L2_CID_AUDIO_COMPRESSION_ENABLED: return "Audio Compression Enabled";
1019         case V4L2_CID_AUDIO_COMPRESSION_GAIN:   return "Audio Compression Gain";
1020         case V4L2_CID_AUDIO_COMPRESSION_THRESHOLD: return "Audio Compression Threshold";
1021         case V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME: return "Audio Compression Attack Time";
1022         case V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME: return "Audio Compression Release Time";
1023         case V4L2_CID_PILOT_TONE_ENABLED:       return "Pilot Tone Feature Enabled";
1024         case V4L2_CID_PILOT_TONE_DEVIATION:     return "Pilot Tone Deviation";
1025         case V4L2_CID_PILOT_TONE_FREQUENCY:     return "Pilot Tone Frequency";
1026         case V4L2_CID_TUNE_PREEMPHASIS:         return "Pre-Emphasis";
1027         case V4L2_CID_TUNE_POWER_LEVEL:         return "Tune Power Level";
1028         case V4L2_CID_TUNE_ANTENNA_CAPACITOR:   return "Tune Antenna Capacitor";
1029
1030         /* Flash controls */
1031         /* Keep the order of the 'case's the same as in v4l2-controls.h! */
1032         case V4L2_CID_FLASH_CLASS:              return "Flash Controls";
1033         case V4L2_CID_FLASH_LED_MODE:           return "LED Mode";
1034         case V4L2_CID_FLASH_STROBE_SOURCE:      return "Strobe Source";
1035         case V4L2_CID_FLASH_STROBE:             return "Strobe";
1036         case V4L2_CID_FLASH_STROBE_STOP:        return "Stop Strobe";
1037         case V4L2_CID_FLASH_STROBE_STATUS:      return "Strobe Status";
1038         case V4L2_CID_FLASH_TIMEOUT:            return "Strobe Timeout";
1039         case V4L2_CID_FLASH_INTENSITY:          return "Intensity, Flash Mode";
1040         case V4L2_CID_FLASH_TORCH_INTENSITY:    return "Intensity, Torch Mode";
1041         case V4L2_CID_FLASH_INDICATOR_INTENSITY: return "Intensity, Indicator";
1042         case V4L2_CID_FLASH_FAULT:              return "Faults";
1043         case V4L2_CID_FLASH_CHARGE:             return "Charge";
1044         case V4L2_CID_FLASH_READY:              return "Ready to Strobe";
1045
1046         /* JPEG encoder controls */
1047         /* Keep the order of the 'case's the same as in v4l2-controls.h! */
1048         case V4L2_CID_JPEG_CLASS:               return "JPEG Compression Controls";
1049         case V4L2_CID_JPEG_CHROMA_SUBSAMPLING:  return "Chroma Subsampling";
1050         case V4L2_CID_JPEG_RESTART_INTERVAL:    return "Restart Interval";
1051         case V4L2_CID_JPEG_COMPRESSION_QUALITY: return "Compression Quality";
1052         case V4L2_CID_JPEG_ACTIVE_MARKER:       return "Active Markers";
1053
1054         /* Image source controls */
1055         /* Keep the order of the 'case's the same as in v4l2-controls.h! */
1056         case V4L2_CID_IMAGE_SOURCE_CLASS:       return "Image Source Controls";
1057         case V4L2_CID_VBLANK:                   return "Vertical Blanking";
1058         case V4L2_CID_HBLANK:                   return "Horizontal Blanking";
1059         case V4L2_CID_ANALOGUE_GAIN:            return "Analogue Gain";
1060         case V4L2_CID_TEST_PATTERN_RED:         return "Red Pixel Value";
1061         case V4L2_CID_TEST_PATTERN_GREENR:      return "Green (Red) Pixel Value";
1062         case V4L2_CID_TEST_PATTERN_BLUE:        return "Blue Pixel Value";
1063         case V4L2_CID_TEST_PATTERN_GREENB:      return "Green (Blue) Pixel Value";
1064
1065         /* Image processing controls */
1066         /* Keep the order of the 'case's the same as in v4l2-controls.h! */
1067         case V4L2_CID_IMAGE_PROC_CLASS:         return "Image Processing Controls";
1068         case V4L2_CID_LINK_FREQ:                return "Link Frequency";
1069         case V4L2_CID_PIXEL_RATE:               return "Pixel Rate";
1070         case V4L2_CID_TEST_PATTERN:             return "Test Pattern";
1071         case V4L2_CID_DEINTERLACING_MODE:       return "Deinterlacing Mode";
1072         case V4L2_CID_DIGITAL_GAIN:             return "Digital Gain";
1073
1074         /* DV controls */
1075         /* Keep the order of the 'case's the same as in v4l2-controls.h! */
1076         case V4L2_CID_DV_CLASS:                 return "Digital Video Controls";
1077         case V4L2_CID_DV_TX_HOTPLUG:            return "Hotplug Present";
1078         case V4L2_CID_DV_TX_RXSENSE:            return "RxSense Present";
1079         case V4L2_CID_DV_TX_EDID_PRESENT:       return "EDID Present";
1080         case V4L2_CID_DV_TX_MODE:               return "Transmit Mode";
1081         case V4L2_CID_DV_TX_RGB_RANGE:          return "Tx RGB Quantization Range";
1082         case V4L2_CID_DV_TX_IT_CONTENT_TYPE:    return "Tx IT Content Type";
1083         case V4L2_CID_DV_RX_POWER_PRESENT:      return "Power Present";
1084         case V4L2_CID_DV_RX_RGB_RANGE:          return "Rx RGB Quantization Range";
1085         case V4L2_CID_DV_RX_IT_CONTENT_TYPE:    return "Rx IT Content Type";
1086
1087         case V4L2_CID_FM_RX_CLASS:              return "FM Radio Receiver Controls";
1088         case V4L2_CID_TUNE_DEEMPHASIS:          return "De-Emphasis";
1089         case V4L2_CID_RDS_RECEPTION:            return "RDS Reception";
1090         case V4L2_CID_RF_TUNER_CLASS:           return "RF Tuner Controls";
1091         case V4L2_CID_RF_TUNER_RF_GAIN:         return "RF Gain";
1092         case V4L2_CID_RF_TUNER_LNA_GAIN_AUTO:   return "LNA Gain, Auto";
1093         case V4L2_CID_RF_TUNER_LNA_GAIN:        return "LNA Gain";
1094         case V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO: return "Mixer Gain, Auto";
1095         case V4L2_CID_RF_TUNER_MIXER_GAIN:      return "Mixer Gain";
1096         case V4L2_CID_RF_TUNER_IF_GAIN_AUTO:    return "IF Gain, Auto";
1097         case V4L2_CID_RF_TUNER_IF_GAIN:         return "IF Gain";
1098         case V4L2_CID_RF_TUNER_BANDWIDTH_AUTO:  return "Bandwidth, Auto";
1099         case V4L2_CID_RF_TUNER_BANDWIDTH:       return "Bandwidth";
1100         case V4L2_CID_RF_TUNER_PLL_LOCK:        return "PLL Lock";
1101         case V4L2_CID_RDS_RX_PTY:               return "RDS Program Type";
1102         case V4L2_CID_RDS_RX_PS_NAME:           return "RDS PS Name";
1103         case V4L2_CID_RDS_RX_RADIO_TEXT:        return "RDS Radio Text";
1104         case V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT: return "RDS Traffic Announcement";
1105         case V4L2_CID_RDS_RX_TRAFFIC_PROGRAM:   return "RDS Traffic Program";
1106         case V4L2_CID_RDS_RX_MUSIC_SPEECH:      return "RDS Music";
1107
1108         /* Detection controls */
1109         /* Keep the order of the 'case's the same as in v4l2-controls.h! */
1110         case V4L2_CID_DETECT_CLASS:             return "Detection Controls";
1111         case V4L2_CID_DETECT_MD_MODE:           return "Motion Detection Mode";
1112         case V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD: return "MD Global Threshold";
1113         case V4L2_CID_DETECT_MD_THRESHOLD_GRID: return "MD Threshold Grid";
1114         case V4L2_CID_DETECT_MD_REGION_GRID:    return "MD Region Grid";
1115         default:
1116                 return NULL;
1117         }
1118 }
1119 EXPORT_SYMBOL(v4l2_ctrl_get_name);
1120
1121 void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
1122                     s64 *min, s64 *max, u64 *step, s64 *def, u32 *flags)
1123 {
1124         *name = v4l2_ctrl_get_name(id);
1125         *flags = 0;
1126
1127         switch (id) {
1128         case V4L2_CID_AUDIO_MUTE:
1129         case V4L2_CID_AUDIO_LOUDNESS:
1130         case V4L2_CID_AUTO_WHITE_BALANCE:
1131         case V4L2_CID_AUTOGAIN:
1132         case V4L2_CID_HFLIP:
1133         case V4L2_CID_VFLIP:
1134         case V4L2_CID_HUE_AUTO:
1135         case V4L2_CID_CHROMA_AGC:
1136         case V4L2_CID_COLOR_KILLER:
1137         case V4L2_CID_AUTOBRIGHTNESS:
1138         case V4L2_CID_MPEG_AUDIO_MUTE:
1139         case V4L2_CID_MPEG_VIDEO_MUTE:
1140         case V4L2_CID_MPEG_VIDEO_GOP_CLOSURE:
1141         case V4L2_CID_MPEG_VIDEO_PULLDOWN:
1142         case V4L2_CID_EXPOSURE_AUTO_PRIORITY:
1143         case V4L2_CID_FOCUS_AUTO:
1144         case V4L2_CID_PRIVACY:
1145         case V4L2_CID_AUDIO_LIMITER_ENABLED:
1146         case V4L2_CID_AUDIO_COMPRESSION_ENABLED:
1147         case V4L2_CID_PILOT_TONE_ENABLED:
1148         case V4L2_CID_ILLUMINATORS_1:
1149         case V4L2_CID_ILLUMINATORS_2:
1150         case V4L2_CID_FLASH_STROBE_STATUS:
1151         case V4L2_CID_FLASH_CHARGE:
1152         case V4L2_CID_FLASH_READY:
1153         case V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER:
1154         case V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE:
1155         case V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE:
1156         case V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE:
1157         case V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM:
1158         case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE:
1159         case V4L2_CID_MPEG_VIDEO_MPEG4_QPEL:
1160         case V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER:
1161         case V4L2_CID_WIDE_DYNAMIC_RANGE:
1162         case V4L2_CID_IMAGE_STABILIZATION:
1163         case V4L2_CID_RDS_RECEPTION:
1164         case V4L2_CID_RF_TUNER_LNA_GAIN_AUTO:
1165         case V4L2_CID_RF_TUNER_MIXER_GAIN_AUTO:
1166         case V4L2_CID_RF_TUNER_IF_GAIN_AUTO:
1167         case V4L2_CID_RF_TUNER_BANDWIDTH_AUTO:
1168         case V4L2_CID_RF_TUNER_PLL_LOCK:
1169         case V4L2_CID_RDS_TX_MONO_STEREO:
1170         case V4L2_CID_RDS_TX_ARTIFICIAL_HEAD:
1171         case V4L2_CID_RDS_TX_COMPRESSED:
1172         case V4L2_CID_RDS_TX_DYNAMIC_PTY:
1173         case V4L2_CID_RDS_TX_TRAFFIC_ANNOUNCEMENT:
1174         case V4L2_CID_RDS_TX_TRAFFIC_PROGRAM:
1175         case V4L2_CID_RDS_TX_MUSIC_SPEECH:
1176         case V4L2_CID_RDS_TX_ALT_FREQS_ENABLE:
1177         case V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT:
1178         case V4L2_CID_RDS_RX_TRAFFIC_PROGRAM:
1179         case V4L2_CID_RDS_RX_MUSIC_SPEECH:
1180                 *type = V4L2_CTRL_TYPE_BOOLEAN;
1181                 *min = 0;
1182                 *max = *step = 1;
1183                 break;
1184         case V4L2_CID_ROTATE:
1185                 *type = V4L2_CTRL_TYPE_INTEGER;
1186                 *flags |= V4L2_CTRL_FLAG_MODIFY_LAYOUT;
1187                 break;
1188         case V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE:
1189         case V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE:
1190                 *type = V4L2_CTRL_TYPE_INTEGER;
1191                 break;
1192         case V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME:
1193         case V4L2_CID_PAN_RESET:
1194         case V4L2_CID_TILT_RESET:
1195         case V4L2_CID_FLASH_STROBE:
1196         case V4L2_CID_FLASH_STROBE_STOP:
1197         case V4L2_CID_AUTO_FOCUS_START:
1198         case V4L2_CID_AUTO_FOCUS_STOP:
1199         case V4L2_CID_DO_WHITE_BALANCE:
1200                 *type = V4L2_CTRL_TYPE_BUTTON;
1201                 *flags |= V4L2_CTRL_FLAG_WRITE_ONLY |
1202                           V4L2_CTRL_FLAG_EXECUTE_ON_WRITE;
1203                 *min = *max = *step = *def = 0;
1204                 break;
1205         case V4L2_CID_POWER_LINE_FREQUENCY:
1206         case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
1207         case V4L2_CID_MPEG_AUDIO_ENCODING:
1208         case V4L2_CID_MPEG_AUDIO_L1_BITRATE:
1209         case V4L2_CID_MPEG_AUDIO_L2_BITRATE:
1210         case V4L2_CID_MPEG_AUDIO_L3_BITRATE:
1211         case V4L2_CID_MPEG_AUDIO_AC3_BITRATE:
1212         case V4L2_CID_MPEG_AUDIO_MODE:
1213         case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION:
1214         case V4L2_CID_MPEG_AUDIO_EMPHASIS:
1215         case V4L2_CID_MPEG_AUDIO_CRC:
1216         case V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK:
1217         case V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK:
1218         case V4L2_CID_MPEG_VIDEO_ENCODING:
1219         case V4L2_CID_MPEG_VIDEO_ASPECT:
1220         case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
1221         case V4L2_CID_MPEG_STREAM_TYPE:
1222         case V4L2_CID_MPEG_STREAM_VBI_FMT:
1223         case V4L2_CID_EXPOSURE_AUTO:
1224         case V4L2_CID_AUTO_FOCUS_RANGE:
1225         case V4L2_CID_COLORFX:
1226         case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE:
1227         case V4L2_CID_TUNE_PREEMPHASIS:
1228         case V4L2_CID_FLASH_LED_MODE:
1229         case V4L2_CID_FLASH_STROBE_SOURCE:
1230         case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
1231         case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:
1232         case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
1233         case V4L2_CID_MPEG_VIDEO_H264_LEVEL:
1234         case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE:
1235         case V4L2_CID_MPEG_VIDEO_H264_PROFILE:
1236         case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC:
1237         case V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE:
1238         case V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE:
1239         case V4L2_CID_MPEG_VIDEO_H264_DECODE_MODE:
1240         case V4L2_CID_MPEG_VIDEO_H264_START_CODE:
1241         case V4L2_CID_MPEG_VIDEO_MPEG2_LEVEL:
1242         case V4L2_CID_MPEG_VIDEO_MPEG2_PROFILE:
1243         case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL:
1244         case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE:
1245         case V4L2_CID_JPEG_CHROMA_SUBSAMPLING:
1246         case V4L2_CID_ISO_SENSITIVITY_AUTO:
1247         case V4L2_CID_EXPOSURE_METERING:
1248         case V4L2_CID_SCENE_MODE:
1249         case V4L2_CID_DV_TX_MODE:
1250         case V4L2_CID_DV_TX_RGB_RANGE:
1251         case V4L2_CID_DV_TX_IT_CONTENT_TYPE:
1252         case V4L2_CID_DV_RX_RGB_RANGE:
1253         case V4L2_CID_DV_RX_IT_CONTENT_TYPE:
1254         case V4L2_CID_TEST_PATTERN:
1255         case V4L2_CID_DEINTERLACING_MODE:
1256         case V4L2_CID_TUNE_DEEMPHASIS:
1257         case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL:
1258         case V4L2_CID_MPEG_VIDEO_VP8_PROFILE:
1259         case V4L2_CID_MPEG_VIDEO_VP9_PROFILE:
1260         case V4L2_CID_DETECT_MD_MODE:
1261         case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE:
1262         case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL:
1263         case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE:
1264         case V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE:
1265         case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:
1266         case V4L2_CID_MPEG_VIDEO_HEVC_TIER:
1267         case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
1268                 *type = V4L2_CTRL_TYPE_MENU;
1269                 break;
1270         case V4L2_CID_LINK_FREQ:
1271                 *type = V4L2_CTRL_TYPE_INTEGER_MENU;
1272                 break;
1273         case V4L2_CID_RDS_TX_PS_NAME:
1274         case V4L2_CID_RDS_TX_RADIO_TEXT:
1275         case V4L2_CID_RDS_RX_PS_NAME:
1276         case V4L2_CID_RDS_RX_RADIO_TEXT:
1277                 *type = V4L2_CTRL_TYPE_STRING;
1278                 break;
1279         case V4L2_CID_ISO_SENSITIVITY:
1280         case V4L2_CID_AUTO_EXPOSURE_BIAS:
1281         case V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS:
1282         case V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES:
1283                 *type = V4L2_CTRL_TYPE_INTEGER_MENU;
1284                 break;
1285         case V4L2_CID_USER_CLASS:
1286         case V4L2_CID_CAMERA_CLASS:
1287         case V4L2_CID_MPEG_CLASS:
1288         case V4L2_CID_FM_TX_CLASS:
1289         case V4L2_CID_FLASH_CLASS:
1290         case V4L2_CID_JPEG_CLASS:
1291         case V4L2_CID_IMAGE_SOURCE_CLASS:
1292         case V4L2_CID_IMAGE_PROC_CLASS:
1293         case V4L2_CID_DV_CLASS:
1294         case V4L2_CID_FM_RX_CLASS:
1295         case V4L2_CID_RF_TUNER_CLASS:
1296         case V4L2_CID_DETECT_CLASS:
1297                 *type = V4L2_CTRL_TYPE_CTRL_CLASS;
1298                 /* You can neither read not write these */
1299                 *flags |= V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_WRITE_ONLY;
1300                 *min = *max = *step = *def = 0;
1301                 break;
1302         case V4L2_CID_BG_COLOR:
1303                 *type = V4L2_CTRL_TYPE_INTEGER;
1304                 *step = 1;
1305                 *min = 0;
1306                 /* Max is calculated as RGB888 that is 2^24 */
1307                 *max = 0xFFFFFF;
1308                 break;
1309         case V4L2_CID_FLASH_FAULT:
1310         case V4L2_CID_JPEG_ACTIVE_MARKER:
1311         case V4L2_CID_3A_LOCK:
1312         case V4L2_CID_AUTO_FOCUS_STATUS:
1313         case V4L2_CID_DV_TX_HOTPLUG:
1314         case V4L2_CID_DV_TX_RXSENSE:
1315         case V4L2_CID_DV_TX_EDID_PRESENT:
1316         case V4L2_CID_DV_RX_POWER_PRESENT:
1317                 *type = V4L2_CTRL_TYPE_BITMASK;
1318                 break;
1319         case V4L2_CID_MIN_BUFFERS_FOR_CAPTURE:
1320         case V4L2_CID_MIN_BUFFERS_FOR_OUTPUT:
1321                 *type = V4L2_CTRL_TYPE_INTEGER;
1322                 *flags |= V4L2_CTRL_FLAG_READ_ONLY;
1323                 break;
1324         case V4L2_CID_MPEG_VIDEO_DEC_PTS:
1325                 *type = V4L2_CTRL_TYPE_INTEGER64;
1326                 *flags |= V4L2_CTRL_FLAG_VOLATILE | V4L2_CTRL_FLAG_READ_ONLY;
1327                 *min = *def = 0;
1328                 *max = 0x1ffffffffLL;
1329                 *step = 1;
1330                 break;
1331         case V4L2_CID_MPEG_VIDEO_DEC_FRAME:
1332                 *type = V4L2_CTRL_TYPE_INTEGER64;
1333                 *flags |= V4L2_CTRL_FLAG_VOLATILE | V4L2_CTRL_FLAG_READ_ONLY;
1334                 *min = *def = 0;
1335                 *max = 0x7fffffffffffffffLL;
1336                 *step = 1;
1337                 break;
1338         case V4L2_CID_PIXEL_RATE:
1339                 *type = V4L2_CTRL_TYPE_INTEGER64;
1340                 *flags |= V4L2_CTRL_FLAG_READ_ONLY;
1341                 break;
1342         case V4L2_CID_DETECT_MD_REGION_GRID:
1343                 *type = V4L2_CTRL_TYPE_U8;
1344                 break;
1345         case V4L2_CID_DETECT_MD_THRESHOLD_GRID:
1346                 *type = V4L2_CTRL_TYPE_U16;
1347                 break;
1348         case V4L2_CID_RDS_TX_ALT_FREQS:
1349                 *type = V4L2_CTRL_TYPE_U32;
1350                 break;
1351         case V4L2_CID_MPEG_VIDEO_MPEG2_SLICE_PARAMS:
1352                 *type = V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS;
1353                 break;
1354         case V4L2_CID_MPEG_VIDEO_MPEG2_QUANTIZATION:
1355                 *type = V4L2_CTRL_TYPE_MPEG2_QUANTIZATION;
1356                 break;
1357         case V4L2_CID_MPEG_VIDEO_FWHT_PARAMS:
1358                 *type = V4L2_CTRL_TYPE_FWHT_PARAMS;
1359                 break;
1360         case V4L2_CID_MPEG_VIDEO_H264_SPS:
1361                 *type = V4L2_CTRL_TYPE_H264_SPS;
1362                 break;
1363         case V4L2_CID_MPEG_VIDEO_H264_PPS:
1364                 *type = V4L2_CTRL_TYPE_H264_PPS;
1365                 break;
1366         case V4L2_CID_MPEG_VIDEO_H264_SCALING_MATRIX:
1367                 *type = V4L2_CTRL_TYPE_H264_SCALING_MATRIX;
1368                 break;
1369         case V4L2_CID_MPEG_VIDEO_H264_SLICE_PARAMS:
1370                 *type = V4L2_CTRL_TYPE_H264_SLICE_PARAMS;
1371                 break;
1372         case V4L2_CID_MPEG_VIDEO_H264_DECODE_PARAMS:
1373                 *type = V4L2_CTRL_TYPE_H264_DECODE_PARAMS;
1374                 break;
1375         case V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER:
1376                 *type = V4L2_CTRL_TYPE_VP8_FRAME_HEADER;
1377                 break;
1378         default:
1379                 *type = V4L2_CTRL_TYPE_INTEGER;
1380                 break;
1381         }
1382         switch (id) {
1383         case V4L2_CID_MPEG_AUDIO_ENCODING:
1384         case V4L2_CID_MPEG_AUDIO_MODE:
1385         case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
1386         case V4L2_CID_MPEG_VIDEO_B_FRAMES:
1387         case V4L2_CID_MPEG_STREAM_TYPE:
1388                 *flags |= V4L2_CTRL_FLAG_UPDATE;
1389                 break;
1390         case V4L2_CID_AUDIO_VOLUME:
1391         case V4L2_CID_AUDIO_BALANCE:
1392         case V4L2_CID_AUDIO_BASS:
1393         case V4L2_CID_AUDIO_TREBLE:
1394         case V4L2_CID_BRIGHTNESS:
1395         case V4L2_CID_CONTRAST:
1396         case V4L2_CID_SATURATION:
1397         case V4L2_CID_HUE:
1398         case V4L2_CID_RED_BALANCE:
1399         case V4L2_CID_BLUE_BALANCE:
1400         case V4L2_CID_GAMMA:
1401         case V4L2_CID_SHARPNESS:
1402         case V4L2_CID_CHROMA_GAIN:
1403         case V4L2_CID_RDS_TX_DEVIATION:
1404         case V4L2_CID_AUDIO_LIMITER_RELEASE_TIME:
1405         case V4L2_CID_AUDIO_LIMITER_DEVIATION:
1406         case V4L2_CID_AUDIO_COMPRESSION_GAIN:
1407         case V4L2_CID_AUDIO_COMPRESSION_THRESHOLD:
1408         case V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME:
1409         case V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME:
1410         case V4L2_CID_PILOT_TONE_DEVIATION:
1411         case V4L2_CID_PILOT_TONE_FREQUENCY:
1412         case V4L2_CID_TUNE_POWER_LEVEL:
1413         case V4L2_CID_TUNE_ANTENNA_CAPACITOR:
1414         case V4L2_CID_RF_TUNER_RF_GAIN:
1415         case V4L2_CID_RF_TUNER_LNA_GAIN:
1416         case V4L2_CID_RF_TUNER_MIXER_GAIN:
1417         case V4L2_CID_RF_TUNER_IF_GAIN:
1418         case V4L2_CID_RF_TUNER_BANDWIDTH:
1419         case V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD:
1420                 *flags |= V4L2_CTRL_FLAG_SLIDER;
1421                 break;
1422         case V4L2_CID_PAN_RELATIVE:
1423         case V4L2_CID_TILT_RELATIVE:
1424         case V4L2_CID_FOCUS_RELATIVE:
1425         case V4L2_CID_IRIS_RELATIVE:
1426         case V4L2_CID_ZOOM_RELATIVE:
1427                 *flags |= V4L2_CTRL_FLAG_WRITE_ONLY |
1428                           V4L2_CTRL_FLAG_EXECUTE_ON_WRITE;
1429                 break;
1430         case V4L2_CID_FLASH_STROBE_STATUS:
1431         case V4L2_CID_AUTO_FOCUS_STATUS:
1432         case V4L2_CID_FLASH_READY:
1433         case V4L2_CID_DV_TX_HOTPLUG:
1434         case V4L2_CID_DV_TX_RXSENSE:
1435         case V4L2_CID_DV_TX_EDID_PRESENT:
1436         case V4L2_CID_DV_RX_POWER_PRESENT:
1437         case V4L2_CID_DV_RX_IT_CONTENT_TYPE:
1438         case V4L2_CID_RDS_RX_PTY:
1439         case V4L2_CID_RDS_RX_PS_NAME:
1440         case V4L2_CID_RDS_RX_RADIO_TEXT:
1441         case V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT:
1442         case V4L2_CID_RDS_RX_TRAFFIC_PROGRAM:
1443         case V4L2_CID_RDS_RX_MUSIC_SPEECH:
1444                 *flags |= V4L2_CTRL_FLAG_READ_ONLY;
1445                 break;
1446         case V4L2_CID_RF_TUNER_PLL_LOCK:
1447                 *flags |= V4L2_CTRL_FLAG_VOLATILE;
1448                 break;
1449         }
1450 }
1451 EXPORT_SYMBOL(v4l2_ctrl_fill);
1452
1453 static u32 user_flags(const struct v4l2_ctrl *ctrl)
1454 {
1455         u32 flags = ctrl->flags;
1456
1457         if (ctrl->is_ptr)
1458                 flags |= V4L2_CTRL_FLAG_HAS_PAYLOAD;
1459
1460         return flags;
1461 }
1462
1463 static void fill_event(struct v4l2_event *ev, struct v4l2_ctrl *ctrl, u32 changes)
1464 {
1465         memset(ev, 0, sizeof(*ev));
1466         ev->type = V4L2_EVENT_CTRL;
1467         ev->id = ctrl->id;
1468         ev->u.ctrl.changes = changes;
1469         ev->u.ctrl.type = ctrl->type;
1470         ev->u.ctrl.flags = user_flags(ctrl);
1471         if (ctrl->is_ptr)
1472                 ev->u.ctrl.value64 = 0;
1473         else
1474                 ev->u.ctrl.value64 = *ctrl->p_cur.p_s64;
1475         ev->u.ctrl.minimum = ctrl->minimum;
1476         ev->u.ctrl.maximum = ctrl->maximum;
1477         if (ctrl->type == V4L2_CTRL_TYPE_MENU
1478             || ctrl->type == V4L2_CTRL_TYPE_INTEGER_MENU)
1479                 ev->u.ctrl.step = 1;
1480         else
1481                 ev->u.ctrl.step = ctrl->step;
1482         ev->u.ctrl.default_value = ctrl->default_value;
1483 }
1484
1485 static void send_event(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 changes)
1486 {
1487         struct v4l2_event ev;
1488         struct v4l2_subscribed_event *sev;
1489
1490         if (list_empty(&ctrl->ev_subs))
1491                 return;
1492         fill_event(&ev, ctrl, changes);
1493
1494         list_for_each_entry(sev, &ctrl->ev_subs, node)
1495                 if (sev->fh != fh ||
1496                     (sev->flags & V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK))
1497                         v4l2_event_queue_fh(sev->fh, &ev);
1498 }
1499
1500 static bool std_equal(const struct v4l2_ctrl *ctrl, u32 idx,
1501                       union v4l2_ctrl_ptr ptr1,
1502                       union v4l2_ctrl_ptr ptr2)
1503 {
1504         switch (ctrl->type) {
1505         case V4L2_CTRL_TYPE_BUTTON:
1506                 return false;
1507         case V4L2_CTRL_TYPE_STRING:
1508                 idx *= ctrl->elem_size;
1509                 /* strings are always 0-terminated */
1510                 return !strcmp(ptr1.p_char + idx, ptr2.p_char + idx);
1511         case V4L2_CTRL_TYPE_INTEGER64:
1512                 return ptr1.p_s64[idx] == ptr2.p_s64[idx];
1513         case V4L2_CTRL_TYPE_U8:
1514                 return ptr1.p_u8[idx] == ptr2.p_u8[idx];
1515         case V4L2_CTRL_TYPE_U16:
1516                 return ptr1.p_u16[idx] == ptr2.p_u16[idx];
1517         case V4L2_CTRL_TYPE_U32:
1518                 return ptr1.p_u32[idx] == ptr2.p_u32[idx];
1519         default:
1520                 if (ctrl->is_int)
1521                         return ptr1.p_s32[idx] == ptr2.p_s32[idx];
1522                 idx *= ctrl->elem_size;
1523                 return !memcmp(ptr1.p + idx, ptr2.p + idx, ctrl->elem_size);
1524         }
1525 }
1526
1527 static void std_init_compound(const struct v4l2_ctrl *ctrl, u32 idx,
1528                               union v4l2_ctrl_ptr ptr)
1529 {
1530         struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params;
1531         void *p = ptr.p + idx * ctrl->elem_size;
1532
1533         memset(p, 0, ctrl->elem_size);
1534
1535         /*
1536          * The cast is needed to get rid of a gcc warning complaining that
1537          * V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS is not part of the
1538          * v4l2_ctrl_type enum.
1539          */
1540         switch ((u32)ctrl->type) {
1541         case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS:
1542                 p_mpeg2_slice_params = p;
1543                 /* 4:2:0 */
1544                 p_mpeg2_slice_params->sequence.chroma_format = 1;
1545                 /* interlaced top field */
1546                 p_mpeg2_slice_params->picture.picture_structure = 1;
1547                 p_mpeg2_slice_params->picture.picture_coding_type =
1548                                         V4L2_MPEG2_PICTURE_CODING_TYPE_I;
1549                 break;
1550         }
1551 }
1552
1553 static void std_init(const struct v4l2_ctrl *ctrl, u32 idx,
1554                      union v4l2_ctrl_ptr ptr)
1555 {
1556         switch (ctrl->type) {
1557         case V4L2_CTRL_TYPE_STRING:
1558                 idx *= ctrl->elem_size;
1559                 memset(ptr.p_char + idx, ' ', ctrl->minimum);
1560                 ptr.p_char[idx + ctrl->minimum] = '\0';
1561                 break;
1562         case V4L2_CTRL_TYPE_INTEGER64:
1563                 ptr.p_s64[idx] = ctrl->default_value;
1564                 break;
1565         case V4L2_CTRL_TYPE_INTEGER:
1566         case V4L2_CTRL_TYPE_INTEGER_MENU:
1567         case V4L2_CTRL_TYPE_MENU:
1568         case V4L2_CTRL_TYPE_BITMASK:
1569         case V4L2_CTRL_TYPE_BOOLEAN:
1570                 ptr.p_s32[idx] = ctrl->default_value;
1571                 break;
1572         case V4L2_CTRL_TYPE_BUTTON:
1573         case V4L2_CTRL_TYPE_CTRL_CLASS:
1574                 ptr.p_s32[idx] = 0;
1575                 break;
1576         case V4L2_CTRL_TYPE_U8:
1577                 ptr.p_u8[idx] = ctrl->default_value;
1578                 break;
1579         case V4L2_CTRL_TYPE_U16:
1580                 ptr.p_u16[idx] = ctrl->default_value;
1581                 break;
1582         case V4L2_CTRL_TYPE_U32:
1583                 ptr.p_u32[idx] = ctrl->default_value;
1584                 break;
1585         default:
1586                 std_init_compound(ctrl, idx, ptr);
1587                 break;
1588         }
1589 }
1590
1591 static void std_log(const struct v4l2_ctrl *ctrl)
1592 {
1593         union v4l2_ctrl_ptr ptr = ctrl->p_cur;
1594
1595         if (ctrl->is_array) {
1596                 unsigned i;
1597
1598                 for (i = 0; i < ctrl->nr_of_dims; i++)
1599                         pr_cont("[%u]", ctrl->dims[i]);
1600                 pr_cont(" ");
1601         }
1602
1603         switch (ctrl->type) {
1604         case V4L2_CTRL_TYPE_INTEGER:
1605                 pr_cont("%d", *ptr.p_s32);
1606                 break;
1607         case V4L2_CTRL_TYPE_BOOLEAN:
1608                 pr_cont("%s", *ptr.p_s32 ? "true" : "false");
1609                 break;
1610         case V4L2_CTRL_TYPE_MENU:
1611                 pr_cont("%s", ctrl->qmenu[*ptr.p_s32]);
1612                 break;
1613         case V4L2_CTRL_TYPE_INTEGER_MENU:
1614                 pr_cont("%lld", ctrl->qmenu_int[*ptr.p_s32]);
1615                 break;
1616         case V4L2_CTRL_TYPE_BITMASK:
1617                 pr_cont("0x%08x", *ptr.p_s32);
1618                 break;
1619         case V4L2_CTRL_TYPE_INTEGER64:
1620                 pr_cont("%lld", *ptr.p_s64);
1621                 break;
1622         case V4L2_CTRL_TYPE_STRING:
1623                 pr_cont("%s", ptr.p_char);
1624                 break;
1625         case V4L2_CTRL_TYPE_U8:
1626                 pr_cont("%u", (unsigned)*ptr.p_u8);
1627                 break;
1628         case V4L2_CTRL_TYPE_U16:
1629                 pr_cont("%u", (unsigned)*ptr.p_u16);
1630                 break;
1631         case V4L2_CTRL_TYPE_U32:
1632                 pr_cont("%u", (unsigned)*ptr.p_u32);
1633                 break;
1634         default:
1635                 pr_cont("unknown type %d", ctrl->type);
1636                 break;
1637         }
1638 }
1639
1640 /*
1641  * Round towards the closest legal value. Be careful when we are
1642  * close to the maximum range of the control type to prevent
1643  * wrap-arounds.
1644  */
1645 #define ROUND_TO_RANGE(val, offset_type, ctrl)                  \
1646 ({                                                              \
1647         offset_type offset;                                     \
1648         if ((ctrl)->maximum >= 0 &&                             \
1649             val >= (ctrl)->maximum - (s32)((ctrl)->step / 2))   \
1650                 val = (ctrl)->maximum;                          \
1651         else                                                    \
1652                 val += (s32)((ctrl)->step / 2);                 \
1653         val = clamp_t(typeof(val), val,                         \
1654                       (ctrl)->minimum, (ctrl)->maximum);        \
1655         offset = (val) - (ctrl)->minimum;                       \
1656         offset = (ctrl)->step * (offset / (u32)(ctrl)->step);   \
1657         val = (ctrl)->minimum + offset;                         \
1658         0;                                                      \
1659 })
1660
1661 /* Validate a new control */
1662
1663 #define zero_padding(s) \
1664         memset(&(s).padding, 0, sizeof((s).padding))
1665
1666 /*
1667  * Compound controls validation requires setting unused fields/flags to zero
1668  * in order to properly detect unchanged controls with std_equal's memcmp.
1669  */
1670 static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
1671                                  union v4l2_ctrl_ptr ptr)
1672 {
1673         struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params;
1674         struct v4l2_ctrl_vp8_frame_header *p_vp8_frame_header;
1675         void *p = ptr.p + idx * ctrl->elem_size;
1676
1677         switch ((u32)ctrl->type) {
1678         case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS:
1679                 p_mpeg2_slice_params = p;
1680
1681                 switch (p_mpeg2_slice_params->sequence.chroma_format) {
1682                 case 1: /* 4:2:0 */
1683                 case 2: /* 4:2:2 */
1684                 case 3: /* 4:4:4 */
1685                         break;
1686                 default:
1687                         return -EINVAL;
1688                 }
1689
1690                 switch (p_mpeg2_slice_params->picture.intra_dc_precision) {
1691                 case 0: /* 8 bits */
1692                 case 1: /* 9 bits */
1693                 case 2: /* 10 bits */
1694                 case 3: /* 11 bits */
1695                         break;
1696                 default:
1697                         return -EINVAL;
1698                 }
1699
1700                 switch (p_mpeg2_slice_params->picture.picture_structure) {
1701                 case 1: /* interlaced top field */
1702                 case 2: /* interlaced bottom field */
1703                 case 3: /* progressive */
1704                         break;
1705                 default:
1706                         return -EINVAL;
1707                 }
1708
1709                 switch (p_mpeg2_slice_params->picture.picture_coding_type) {
1710                 case V4L2_MPEG2_PICTURE_CODING_TYPE_I:
1711                 case V4L2_MPEG2_PICTURE_CODING_TYPE_P:
1712                 case V4L2_MPEG2_PICTURE_CODING_TYPE_B:
1713                         break;
1714                 default:
1715                         return -EINVAL;
1716                 }
1717
1718                 break;
1719
1720         case V4L2_CTRL_TYPE_MPEG2_QUANTIZATION:
1721                 break;
1722
1723         case V4L2_CTRL_TYPE_FWHT_PARAMS:
1724                 break;
1725
1726         case V4L2_CTRL_TYPE_H264_SPS:
1727         case V4L2_CTRL_TYPE_H264_PPS:
1728         case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
1729         case V4L2_CTRL_TYPE_H264_SLICE_PARAMS:
1730         case V4L2_CTRL_TYPE_H264_DECODE_PARAMS:
1731                 break;
1732
1733         case V4L2_CTRL_TYPE_VP8_FRAME_HEADER:
1734                 p_vp8_frame_header = p;
1735
1736                 switch (p_vp8_frame_header->num_dct_parts) {
1737                 case 1:
1738                 case 2:
1739                 case 4:
1740                 case 8:
1741                         break;
1742                 default:
1743                         return -EINVAL;
1744                 }
1745                 zero_padding(p_vp8_frame_header->segment_header);
1746                 zero_padding(p_vp8_frame_header->lf_header);
1747                 zero_padding(p_vp8_frame_header->quant_header);
1748                 zero_padding(p_vp8_frame_header->entropy_header);
1749                 zero_padding(p_vp8_frame_header->coder_state);
1750                 break;
1751         default:
1752                 return -EINVAL;
1753         }
1754
1755         return 0;
1756 }
1757
1758 static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx,
1759                         union v4l2_ctrl_ptr ptr)
1760 {
1761         size_t len;
1762         u64 offset;
1763         s64 val;
1764
1765         switch ((u32)ctrl->type) {
1766         case V4L2_CTRL_TYPE_INTEGER:
1767                 return ROUND_TO_RANGE(ptr.p_s32[idx], u32, ctrl);
1768         case V4L2_CTRL_TYPE_INTEGER64:
1769                 /*
1770                  * We can't use the ROUND_TO_RANGE define here due to
1771                  * the u64 divide that needs special care.
1772                  */
1773                 val = ptr.p_s64[idx];
1774                 if (ctrl->maximum >= 0 && val >= ctrl->maximum - (s64)(ctrl->step / 2))
1775                         val = ctrl->maximum;
1776                 else
1777                         val += (s64)(ctrl->step / 2);
1778                 val = clamp_t(s64, val, ctrl->minimum, ctrl->maximum);
1779                 offset = val - ctrl->minimum;
1780                 do_div(offset, ctrl->step);
1781                 ptr.p_s64[idx] = ctrl->minimum + offset * ctrl->step;
1782                 return 0;
1783         case V4L2_CTRL_TYPE_U8:
1784                 return ROUND_TO_RANGE(ptr.p_u8[idx], u8, ctrl);
1785         case V4L2_CTRL_TYPE_U16:
1786                 return ROUND_TO_RANGE(ptr.p_u16[idx], u16, ctrl);
1787         case V4L2_CTRL_TYPE_U32:
1788                 return ROUND_TO_RANGE(ptr.p_u32[idx], u32, ctrl);
1789
1790         case V4L2_CTRL_TYPE_BOOLEAN:
1791                 ptr.p_s32[idx] = !!ptr.p_s32[idx];
1792                 return 0;
1793
1794         case V4L2_CTRL_TYPE_MENU:
1795         case V4L2_CTRL_TYPE_INTEGER_MENU:
1796                 if (ptr.p_s32[idx] < ctrl->minimum || ptr.p_s32[idx] > ctrl->maximum)
1797                         return -ERANGE;
1798                 if (ctrl->menu_skip_mask & (1ULL << ptr.p_s32[idx]))
1799                         return -EINVAL;
1800                 if (ctrl->type == V4L2_CTRL_TYPE_MENU &&
1801                     ctrl->qmenu[ptr.p_s32[idx]][0] == '\0')
1802                         return -EINVAL;
1803                 return 0;
1804
1805         case V4L2_CTRL_TYPE_BITMASK:
1806                 ptr.p_s32[idx] &= ctrl->maximum;
1807                 return 0;
1808
1809         case V4L2_CTRL_TYPE_BUTTON:
1810         case V4L2_CTRL_TYPE_CTRL_CLASS:
1811                 ptr.p_s32[idx] = 0;
1812                 return 0;
1813
1814         case V4L2_CTRL_TYPE_STRING:
1815                 idx *= ctrl->elem_size;
1816                 len = strlen(ptr.p_char + idx);
1817                 if (len < ctrl->minimum)
1818                         return -ERANGE;
1819                 if ((len - (u32)ctrl->minimum) % (u32)ctrl->step)
1820                         return -ERANGE;
1821                 return 0;
1822
1823         default:
1824                 return std_validate_compound(ctrl, idx, ptr);
1825         }
1826 }
1827
1828 static const struct v4l2_ctrl_type_ops std_type_ops = {
1829         .equal = std_equal,
1830         .init = std_init,
1831         .log = std_log,
1832         .validate = std_validate,
1833 };
1834
1835 /* Helper function: copy the given control value back to the caller */
1836 static int ptr_to_user(struct v4l2_ext_control *c,
1837                        struct v4l2_ctrl *ctrl,
1838                        union v4l2_ctrl_ptr ptr)
1839 {
1840         u32 len;
1841
1842         if (ctrl->is_ptr && !ctrl->is_string)
1843                 return copy_to_user(c->ptr, ptr.p, c->size) ?
1844                        -EFAULT : 0;
1845
1846         switch (ctrl->type) {
1847         case V4L2_CTRL_TYPE_STRING:
1848                 len = strlen(ptr.p_char);
1849                 if (c->size < len + 1) {
1850                         c->size = ctrl->elem_size;
1851                         return -ENOSPC;
1852                 }
1853                 return copy_to_user(c->string, ptr.p_char, len + 1) ?
1854                        -EFAULT : 0;
1855         case V4L2_CTRL_TYPE_INTEGER64:
1856                 c->value64 = *ptr.p_s64;
1857                 break;
1858         default:
1859                 c->value = *ptr.p_s32;
1860                 break;
1861         }
1862         return 0;
1863 }
1864
1865 /* Helper function: copy the current control value back to the caller */
1866 static int cur_to_user(struct v4l2_ext_control *c,
1867                        struct v4l2_ctrl *ctrl)
1868 {
1869         return ptr_to_user(c, ctrl, ctrl->p_cur);
1870 }
1871
1872 /* Helper function: copy the new control value back to the caller */
1873 static int new_to_user(struct v4l2_ext_control *c,
1874                        struct v4l2_ctrl *ctrl)
1875 {
1876         return ptr_to_user(c, ctrl, ctrl->p_new);
1877 }
1878
1879 /* Helper function: copy the request value back to the caller */
1880 static int req_to_user(struct v4l2_ext_control *c,
1881                        struct v4l2_ctrl_ref *ref)
1882 {
1883         return ptr_to_user(c, ref->ctrl, ref->p_req);
1884 }
1885
1886 /* Helper function: copy the initial control value back to the caller */
1887 static int def_to_user(struct v4l2_ext_control *c, struct v4l2_ctrl *ctrl)
1888 {
1889         int idx;
1890
1891         for (idx = 0; idx < ctrl->elems; idx++)
1892                 ctrl->type_ops->init(ctrl, idx, ctrl->p_new);
1893
1894         return ptr_to_user(c, ctrl, ctrl->p_new);
1895 }
1896
1897 /* Helper function: copy the caller-provider value to the given control value */
1898 static int user_to_ptr(struct v4l2_ext_control *c,
1899                        struct v4l2_ctrl *ctrl,
1900                        union v4l2_ctrl_ptr ptr)
1901 {
1902         int ret;
1903         u32 size;
1904
1905         ctrl->is_new = 1;
1906         if (ctrl->is_ptr && !ctrl->is_string) {
1907                 unsigned idx;
1908
1909                 ret = copy_from_user(ptr.p, c->ptr, c->size) ? -EFAULT : 0;
1910                 if (ret || !ctrl->is_array)
1911                         return ret;
1912                 for (idx = c->size / ctrl->elem_size; idx < ctrl->elems; idx++)
1913                         ctrl->type_ops->init(ctrl, idx, ptr);
1914                 return 0;
1915         }
1916
1917         switch (ctrl->type) {
1918         case V4L2_CTRL_TYPE_INTEGER64:
1919                 *ptr.p_s64 = c->value64;
1920                 break;
1921         case V4L2_CTRL_TYPE_STRING:
1922                 size = c->size;
1923                 if (size == 0)
1924                         return -ERANGE;
1925                 if (size > ctrl->maximum + 1)
1926                         size = ctrl->maximum + 1;
1927                 ret = copy_from_user(ptr.p_char, c->string, size) ? -EFAULT : 0;
1928                 if (!ret) {
1929                         char last = ptr.p_char[size - 1];
1930
1931                         ptr.p_char[size - 1] = 0;
1932                         /* If the string was longer than ctrl->maximum,
1933                            then return an error. */
1934                         if (strlen(ptr.p_char) == ctrl->maximum && last)
1935                                 return -ERANGE;
1936                 }
1937                 return ret;
1938         default:
1939                 *ptr.p_s32 = c->value;
1940                 break;
1941         }
1942         return 0;
1943 }
1944
1945 /* Helper function: copy the caller-provider value as the new control value */
1946 static int user_to_new(struct v4l2_ext_control *c,
1947                        struct v4l2_ctrl *ctrl)
1948 {
1949         return user_to_ptr(c, ctrl, ctrl->p_new);
1950 }
1951
1952 /* Copy the one value to another. */
1953 static void ptr_to_ptr(struct v4l2_ctrl *ctrl,
1954                        union v4l2_ctrl_ptr from, union v4l2_ctrl_ptr to)
1955 {
1956         if (ctrl == NULL)
1957                 return;
1958         memcpy(to.p, from.p, ctrl->elems * ctrl->elem_size);
1959 }
1960
1961 /* Copy the new value to the current value. */
1962 static void new_to_cur(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 ch_flags)
1963 {
1964         bool changed;
1965
1966         if (ctrl == NULL)
1967                 return;
1968
1969         /* has_changed is set by cluster_changed */
1970         changed = ctrl->has_changed;
1971         if (changed)
1972                 ptr_to_ptr(ctrl, ctrl->p_new, ctrl->p_cur);
1973
1974         if (ch_flags & V4L2_EVENT_CTRL_CH_FLAGS) {
1975                 /* Note: CH_FLAGS is only set for auto clusters. */
1976                 ctrl->flags &=
1977                         ~(V4L2_CTRL_FLAG_INACTIVE | V4L2_CTRL_FLAG_VOLATILE);
1978                 if (!is_cur_manual(ctrl->cluster[0])) {
1979                         ctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
1980                         if (ctrl->cluster[0]->has_volatiles)
1981                                 ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE;
1982                 }
1983                 fh = NULL;
1984         }
1985         if (changed || ch_flags) {
1986                 /* If a control was changed that was not one of the controls
1987                    modified by the application, then send the event to all. */
1988                 if (!ctrl->is_new)
1989                         fh = NULL;
1990                 send_event(fh, ctrl,
1991                         (changed ? V4L2_EVENT_CTRL_CH_VALUE : 0) | ch_flags);
1992                 if (ctrl->call_notify && changed && ctrl->handler->notify)
1993                         ctrl->handler->notify(ctrl, ctrl->handler->notify_priv);
1994         }
1995 }
1996
1997 /* Copy the current value to the new value */
1998 static void cur_to_new(struct v4l2_ctrl *ctrl)
1999 {
2000         if (ctrl == NULL)
2001                 return;
2002         ptr_to_ptr(ctrl, ctrl->p_cur, ctrl->p_new);
2003 }
2004
2005 /* Copy the new value to the request value */
2006 static void new_to_req(struct v4l2_ctrl_ref *ref)
2007 {
2008         if (!ref)
2009                 return;
2010         ptr_to_ptr(ref->ctrl, ref->ctrl->p_new, ref->p_req);
2011         ref->req = ref;
2012 }
2013
2014 /* Copy the request value to the new value */
2015 static void req_to_new(struct v4l2_ctrl_ref *ref)
2016 {
2017         if (!ref)
2018                 return;
2019         if (ref->req)
2020                 ptr_to_ptr(ref->ctrl, ref->req->p_req, ref->ctrl->p_new);
2021         else
2022                 ptr_to_ptr(ref->ctrl, ref->ctrl->p_cur, ref->ctrl->p_new);
2023 }
2024
2025 /* Return non-zero if one or more of the controls in the cluster has a new
2026    value that differs from the current value. */
2027 static int cluster_changed(struct v4l2_ctrl *master)
2028 {
2029         bool changed = false;
2030         unsigned idx;
2031         int i;
2032
2033         for (i = 0; i < master->ncontrols; i++) {
2034                 struct v4l2_ctrl *ctrl = master->cluster[i];
2035                 bool ctrl_changed = false;
2036
2037                 if (ctrl == NULL)
2038                         continue;
2039
2040                 if (ctrl->flags & V4L2_CTRL_FLAG_EXECUTE_ON_WRITE)
2041                         changed = ctrl_changed = true;
2042
2043                 /*
2044                  * Set has_changed to false to avoid generating
2045                  * the event V4L2_EVENT_CTRL_CH_VALUE
2046                  */
2047                 if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE) {
2048                         ctrl->has_changed = false;
2049                         continue;
2050                 }
2051
2052                 for (idx = 0; !ctrl_changed && idx < ctrl->elems; idx++)
2053                         ctrl_changed = !ctrl->type_ops->equal(ctrl, idx,
2054                                 ctrl->p_cur, ctrl->p_new);
2055                 ctrl->has_changed = ctrl_changed;
2056                 changed |= ctrl->has_changed;
2057         }
2058         return changed;
2059 }
2060
2061 /* Control range checking */
2062 static int check_range(enum v4l2_ctrl_type type,
2063                 s64 min, s64 max, u64 step, s64 def)
2064 {
2065         switch (type) {
2066         case V4L2_CTRL_TYPE_BOOLEAN:
2067                 if (step != 1 || max > 1 || min < 0)
2068                         return -ERANGE;
2069                 /* fall through */
2070         case V4L2_CTRL_TYPE_U8:
2071         case V4L2_CTRL_TYPE_U16:
2072         case V4L2_CTRL_TYPE_U32:
2073         case V4L2_CTRL_TYPE_INTEGER:
2074         case V4L2_CTRL_TYPE_INTEGER64:
2075                 if (step == 0 || min > max || def < min || def > max)
2076                         return -ERANGE;
2077                 return 0;
2078         case V4L2_CTRL_TYPE_BITMASK:
2079                 if (step || min || !max || (def & ~max))
2080                         return -ERANGE;
2081                 return 0;
2082         case V4L2_CTRL_TYPE_MENU:
2083         case V4L2_CTRL_TYPE_INTEGER_MENU:
2084                 if (min > max || def < min || def > max)
2085                         return -ERANGE;
2086                 /* Note: step == menu_skip_mask for menu controls.
2087                    So here we check if the default value is masked out. */
2088                 if (step && ((1 << def) & step))
2089                         return -EINVAL;
2090                 return 0;
2091         case V4L2_CTRL_TYPE_STRING:
2092                 if (min > max || min < 0 || step < 1 || def)
2093                         return -ERANGE;
2094                 return 0;
2095         default:
2096                 return 0;
2097         }
2098 }
2099
2100 /* Validate a new control */
2101 static int validate_new(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr p_new)
2102 {
2103         unsigned idx;
2104         int err = 0;
2105
2106         for (idx = 0; !err && idx < ctrl->elems; idx++)
2107                 err = ctrl->type_ops->validate(ctrl, idx, p_new);
2108         return err;
2109 }
2110
2111 static inline u32 node2id(struct list_head *node)
2112 {
2113         return list_entry(node, struct v4l2_ctrl_ref, node)->ctrl->id;
2114 }
2115
2116 /* Set the handler's error code if it wasn't set earlier already */
2117 static inline int handler_set_err(struct v4l2_ctrl_handler *hdl, int err)
2118 {
2119         if (hdl->error == 0)
2120                 hdl->error = err;
2121         return err;
2122 }
2123
2124 /* Initialize the handler */
2125 int v4l2_ctrl_handler_init_class(struct v4l2_ctrl_handler *hdl,
2126                                  unsigned nr_of_controls_hint,
2127                                  struct lock_class_key *key, const char *name)
2128 {
2129         mutex_init(&hdl->_lock);
2130         hdl->lock = &hdl->_lock;
2131         lockdep_set_class_and_name(hdl->lock, key, name);
2132         INIT_LIST_HEAD(&hdl->ctrls);
2133         INIT_LIST_HEAD(&hdl->ctrl_refs);
2134         INIT_LIST_HEAD(&hdl->requests);
2135         INIT_LIST_HEAD(&hdl->requests_queued);
2136         hdl->request_is_queued = false;
2137         hdl->nr_of_buckets = 1 + nr_of_controls_hint / 8;
2138         hdl->buckets = kvmalloc_array(hdl->nr_of_buckets,
2139                                       sizeof(hdl->buckets[0]),
2140                                       GFP_KERNEL | __GFP_ZERO);
2141         hdl->error = hdl->buckets ? 0 : -ENOMEM;
2142         media_request_object_init(&hdl->req_obj);
2143         return hdl->error;
2144 }
2145 EXPORT_SYMBOL(v4l2_ctrl_handler_init_class);
2146
2147 /* Free all controls and control refs */
2148 void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)
2149 {
2150         struct v4l2_ctrl_ref *ref, *next_ref;
2151         struct v4l2_ctrl *ctrl, *next_ctrl;
2152         struct v4l2_subscribed_event *sev, *next_sev;
2153
2154         if (hdl == NULL || hdl->buckets == NULL)
2155                 return;
2156
2157         if (!hdl->req_obj.req && !list_empty(&hdl->requests)) {
2158                 struct v4l2_ctrl_handler *req, *next_req;
2159
2160                 list_for_each_entry_safe(req, next_req, &hdl->requests, requests) {
2161                         media_request_object_unbind(&req->req_obj);
2162                         media_request_object_put(&req->req_obj);
2163                 }
2164         }
2165         mutex_lock(hdl->lock);
2166         /* Free all nodes */
2167         list_for_each_entry_safe(ref, next_ref, &hdl->ctrl_refs, node) {
2168                 list_del(&ref->node);
2169                 kfree(ref);
2170         }
2171         /* Free all controls owned by the handler */
2172         list_for_each_entry_safe(ctrl, next_ctrl, &hdl->ctrls, node) {
2173                 list_del(&ctrl->node);
2174                 list_for_each_entry_safe(sev, next_sev, &ctrl->ev_subs, node)
2175                         list_del(&sev->node);
2176                 kvfree(ctrl);
2177         }
2178         kvfree(hdl->buckets);
2179         hdl->buckets = NULL;
2180         hdl->cached = NULL;
2181         hdl->error = 0;
2182         mutex_unlock(hdl->lock);
2183         mutex_destroy(&hdl->_lock);
2184 }
2185 EXPORT_SYMBOL(v4l2_ctrl_handler_free);
2186
2187 /* For backwards compatibility: V4L2_CID_PRIVATE_BASE should no longer
2188    be used except in G_CTRL, S_CTRL, QUERYCTRL and QUERYMENU when dealing
2189    with applications that do not use the NEXT_CTRL flag.
2190
2191    We just find the n-th private user control. It's O(N), but that should not
2192    be an issue in this particular case. */
2193 static struct v4l2_ctrl_ref *find_private_ref(
2194                 struct v4l2_ctrl_handler *hdl, u32 id)
2195 {
2196         struct v4l2_ctrl_ref *ref;
2197
2198         id -= V4L2_CID_PRIVATE_BASE;
2199         list_for_each_entry(ref, &hdl->ctrl_refs, node) {
2200                 /* Search for private user controls that are compatible with
2201                    VIDIOC_G/S_CTRL. */
2202                 if (V4L2_CTRL_ID2WHICH(ref->ctrl->id) == V4L2_CTRL_CLASS_USER &&
2203                     V4L2_CTRL_DRIVER_PRIV(ref->ctrl->id)) {
2204                         if (!ref->ctrl->is_int)
2205                                 continue;
2206                         if (id == 0)
2207                                 return ref;
2208                         id--;
2209                 }
2210         }
2211         return NULL;
2212 }
2213
2214 /* Find a control with the given ID. */
2215 static struct v4l2_ctrl_ref *find_ref(struct v4l2_ctrl_handler *hdl, u32 id)
2216 {
2217         struct v4l2_ctrl_ref *ref;
2218         int bucket;
2219
2220         id &= V4L2_CTRL_ID_MASK;
2221
2222         /* Old-style private controls need special handling */
2223         if (id >= V4L2_CID_PRIVATE_BASE)
2224                 return find_private_ref(hdl, id);
2225         bucket = id % hdl->nr_of_buckets;
2226
2227         /* Simple optimization: cache the last control found */
2228         if (hdl->cached && hdl->cached->ctrl->id == id)
2229                 return hdl->cached;
2230
2231         /* Not in cache, search the hash */
2232         ref = hdl->buckets ? hdl->buckets[bucket] : NULL;
2233         while (ref && ref->ctrl->id != id)
2234                 ref = ref->next;
2235
2236         if (ref)
2237                 hdl->cached = ref; /* cache it! */
2238         return ref;
2239 }
2240
2241 /* Find a control with the given ID. Take the handler's lock first. */
2242 static struct v4l2_ctrl_ref *find_ref_lock(
2243                 struct v4l2_ctrl_handler *hdl, u32 id)
2244 {
2245         struct v4l2_ctrl_ref *ref = NULL;
2246
2247         if (hdl) {
2248                 mutex_lock(hdl->lock);
2249                 ref = find_ref(hdl, id);
2250                 mutex_unlock(hdl->lock);
2251         }
2252         return ref;
2253 }
2254
2255 /* Find a control with the given ID. */
2256 struct v4l2_ctrl *v4l2_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id)
2257 {
2258         struct v4l2_ctrl_ref *ref = find_ref_lock(hdl, id);
2259
2260         return ref ? ref->ctrl : NULL;
2261 }
2262 EXPORT_SYMBOL(v4l2_ctrl_find);
2263
2264 /* Allocate a new v4l2_ctrl_ref and hook it into the handler. */
2265 static int handler_new_ref(struct v4l2_ctrl_handler *hdl,
2266                            struct v4l2_ctrl *ctrl,
2267                            struct v4l2_ctrl_ref **ctrl_ref,
2268                            bool from_other_dev, bool allocate_req)
2269 {
2270         struct v4l2_ctrl_ref *ref;
2271         struct v4l2_ctrl_ref *new_ref;
2272         u32 id = ctrl->id;
2273         u32 class_ctrl = V4L2_CTRL_ID2WHICH(id) | 1;
2274         int bucket = id % hdl->nr_of_buckets;   /* which bucket to use */
2275         unsigned int size_extra_req = 0;
2276
2277         if (ctrl_ref)
2278                 *ctrl_ref = NULL;
2279
2280         /*
2281          * Automatically add the control class if it is not yet present and
2282          * the new control is not a compound control.
2283          */
2284         if (ctrl->type < V4L2_CTRL_COMPOUND_TYPES &&
2285             id != class_ctrl && find_ref_lock(hdl, class_ctrl) == NULL)
2286                 if (!v4l2_ctrl_new_std(hdl, NULL, class_ctrl, 0, 0, 0, 0))
2287                         return hdl->error;
2288
2289         if (hdl->error)
2290                 return hdl->error;
2291
2292         if (allocate_req)
2293                 size_extra_req = ctrl->elems * ctrl->elem_size;
2294         new_ref = kzalloc(sizeof(*new_ref) + size_extra_req, GFP_KERNEL);
2295         if (!new_ref)
2296                 return handler_set_err(hdl, -ENOMEM);
2297         new_ref->ctrl = ctrl;
2298         new_ref->from_other_dev = from_other_dev;
2299         if (size_extra_req)
2300                 new_ref->p_req.p = &new_ref[1];
2301
2302         INIT_LIST_HEAD(&new_ref->node);
2303
2304         mutex_lock(hdl->lock);
2305
2306         /* Add immediately at the end of the list if the list is empty, or if
2307            the last element in the list has a lower ID.
2308            This ensures that when elements are added in ascending order the
2309            insertion is an O(1) operation. */
2310         if (list_empty(&hdl->ctrl_refs) || id > node2id(hdl->ctrl_refs.prev)) {
2311                 list_add_tail(&new_ref->node, &hdl->ctrl_refs);
2312                 goto insert_in_hash;
2313         }
2314
2315         /* Find insert position in sorted list */
2316         list_for_each_entry(ref, &hdl->ctrl_refs, node) {
2317                 if (ref->ctrl->id < id)
2318                         continue;
2319                 /* Don't add duplicates */
2320                 if (ref->ctrl->id == id) {
2321                         kfree(new_ref);
2322                         goto unlock;
2323                 }
2324                 list_add(&new_ref->node, ref->node.prev);
2325                 break;
2326         }
2327
2328 insert_in_hash:
2329         /* Insert the control node in the hash */
2330         new_ref->next = hdl->buckets[bucket];
2331         hdl->buckets[bucket] = new_ref;
2332         if (ctrl_ref)
2333                 *ctrl_ref = new_ref;
2334         if (ctrl->handler == hdl) {
2335                 /* By default each control starts in a cluster of its own.
2336                  * new_ref->ctrl is basically a cluster array with one
2337                  * element, so that's perfect to use as the cluster pointer.
2338                  * But only do this for the handler that owns the control.
2339                  */
2340                 ctrl->cluster = &new_ref->ctrl;
2341                 ctrl->ncontrols = 1;
2342         }
2343
2344 unlock:
2345         mutex_unlock(hdl->lock);
2346         return 0;
2347 }
2348
2349 /* Add a new control */
2350 static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
2351                         const struct v4l2_ctrl_ops *ops,
2352                         const struct v4l2_ctrl_type_ops *type_ops,
2353                         u32 id, const char *name, enum v4l2_ctrl_type type,
2354                         s64 min, s64 max, u64 step, s64 def,
2355                         const u32 dims[V4L2_CTRL_MAX_DIMS], u32 elem_size,
2356                         u32 flags, const char * const *qmenu,
2357                         const s64 *qmenu_int, void *priv)
2358 {
2359         struct v4l2_ctrl *ctrl;
2360         unsigned sz_extra;
2361         unsigned nr_of_dims = 0;
2362         unsigned elems = 1;
2363         bool is_array;
2364         unsigned tot_ctrl_size;
2365         unsigned idx;
2366         void *data;
2367         int err;
2368
2369         if (hdl->error)
2370                 return NULL;
2371
2372         while (dims && dims[nr_of_dims]) {
2373                 elems *= dims[nr_of_dims];
2374                 nr_of_dims++;
2375                 if (nr_of_dims == V4L2_CTRL_MAX_DIMS)
2376                         break;
2377         }
2378         is_array = nr_of_dims > 0;
2379
2380         /* Prefill elem_size for all types handled by std_type_ops */
2381         switch ((u32)type) {
2382         case V4L2_CTRL_TYPE_INTEGER64:
2383                 elem_size = sizeof(s64);
2384                 break;
2385         case V4L2_CTRL_TYPE_STRING:
2386                 elem_size = max + 1;
2387                 break;
2388         case V4L2_CTRL_TYPE_U8:
2389                 elem_size = sizeof(u8);
2390                 break;
2391         case V4L2_CTRL_TYPE_U16:
2392                 elem_size = sizeof(u16);
2393                 break;
2394         case V4L2_CTRL_TYPE_U32:
2395                 elem_size = sizeof(u32);
2396                 break;
2397         case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS:
2398                 elem_size = sizeof(struct v4l2_ctrl_mpeg2_slice_params);
2399                 break;
2400         case V4L2_CTRL_TYPE_MPEG2_QUANTIZATION:
2401                 elem_size = sizeof(struct v4l2_ctrl_mpeg2_quantization);
2402                 break;
2403         case V4L2_CTRL_TYPE_FWHT_PARAMS:
2404                 elem_size = sizeof(struct v4l2_ctrl_fwht_params);
2405                 break;
2406         case V4L2_CTRL_TYPE_H264_SPS:
2407                 elem_size = sizeof(struct v4l2_ctrl_h264_sps);
2408                 break;
2409         case V4L2_CTRL_TYPE_H264_PPS:
2410                 elem_size = sizeof(struct v4l2_ctrl_h264_pps);
2411                 break;
2412         case V4L2_CTRL_TYPE_H264_SCALING_MATRIX:
2413                 elem_size = sizeof(struct v4l2_ctrl_h264_scaling_matrix);
2414                 break;
2415         case V4L2_CTRL_TYPE_H264_SLICE_PARAMS:
2416                 elem_size = sizeof(struct v4l2_ctrl_h264_slice_params);
2417                 break;
2418         case V4L2_CTRL_TYPE_H264_DECODE_PARAMS:
2419                 elem_size = sizeof(struct v4l2_ctrl_h264_decode_params);
2420                 break;
2421         case V4L2_CTRL_TYPE_VP8_FRAME_HEADER:
2422                 elem_size = sizeof(struct v4l2_ctrl_vp8_frame_header);
2423                 break;
2424         default:
2425                 if (type < V4L2_CTRL_COMPOUND_TYPES)
2426                         elem_size = sizeof(s32);
2427                 break;
2428         }
2429         tot_ctrl_size = elem_size * elems;
2430
2431         /* Sanity checks */
2432         if (id == 0 || name == NULL || !elem_size ||
2433             id >= V4L2_CID_PRIVATE_BASE ||
2434             (type == V4L2_CTRL_TYPE_MENU && qmenu == NULL) ||
2435             (type == V4L2_CTRL_TYPE_INTEGER_MENU && qmenu_int == NULL)) {
2436                 handler_set_err(hdl, -ERANGE);
2437                 return NULL;
2438         }
2439         err = check_range(type, min, max, step, def);
2440         if (err) {
2441                 handler_set_err(hdl, err);
2442                 return NULL;
2443         }
2444         if (is_array &&
2445             (type == V4L2_CTRL_TYPE_BUTTON ||
2446              type == V4L2_CTRL_TYPE_CTRL_CLASS)) {
2447                 handler_set_err(hdl, -EINVAL);
2448                 return NULL;
2449         }
2450
2451         sz_extra = 0;
2452         if (type == V4L2_CTRL_TYPE_BUTTON)
2453                 flags |= V4L2_CTRL_FLAG_WRITE_ONLY |
2454                         V4L2_CTRL_FLAG_EXECUTE_ON_WRITE;
2455         else if (type == V4L2_CTRL_TYPE_CTRL_CLASS)
2456                 flags |= V4L2_CTRL_FLAG_READ_ONLY;
2457         else if (type == V4L2_CTRL_TYPE_INTEGER64 ||
2458                  type == V4L2_CTRL_TYPE_STRING ||
2459                  type >= V4L2_CTRL_COMPOUND_TYPES ||
2460                  is_array)
2461                 sz_extra += 2 * tot_ctrl_size;
2462
2463         ctrl = kvzalloc(sizeof(*ctrl) + sz_extra, GFP_KERNEL);
2464         if (ctrl == NULL) {
2465                 handler_set_err(hdl, -ENOMEM);
2466                 return NULL;
2467         }
2468
2469         INIT_LIST_HEAD(&ctrl->node);
2470         INIT_LIST_HEAD(&ctrl->ev_subs);
2471         ctrl->handler = hdl;
2472         ctrl->ops = ops;
2473         ctrl->type_ops = type_ops ? type_ops : &std_type_ops;
2474         ctrl->id = id;
2475         ctrl->name = name;
2476         ctrl->type = type;
2477         ctrl->flags = flags;
2478         ctrl->minimum = min;
2479         ctrl->maximum = max;
2480         ctrl->step = step;
2481         ctrl->default_value = def;
2482         ctrl->is_string = !is_array && type == V4L2_CTRL_TYPE_STRING;
2483         ctrl->is_ptr = is_array || type >= V4L2_CTRL_COMPOUND_TYPES || ctrl->is_string;
2484         ctrl->is_int = !ctrl->is_ptr && type != V4L2_CTRL_TYPE_INTEGER64;
2485         ctrl->is_array = is_array;
2486         ctrl->elems = elems;
2487         ctrl->nr_of_dims = nr_of_dims;
2488         if (nr_of_dims)
2489                 memcpy(ctrl->dims, dims, nr_of_dims * sizeof(dims[0]));
2490         ctrl->elem_size = elem_size;
2491         if (type == V4L2_CTRL_TYPE_MENU)
2492                 ctrl->qmenu = qmenu;
2493         else if (type == V4L2_CTRL_TYPE_INTEGER_MENU)
2494                 ctrl->qmenu_int = qmenu_int;
2495         ctrl->priv = priv;
2496         ctrl->cur.val = ctrl->val = def;
2497         data = &ctrl[1];
2498
2499         if (!ctrl->is_int) {
2500                 ctrl->p_new.p = data;
2501                 ctrl->p_cur.p = data + tot_ctrl_size;
2502         } else {
2503                 ctrl->p_new.p = &ctrl->val;
2504                 ctrl->p_cur.p = &ctrl->cur.val;
2505         }
2506         for (idx = 0; idx < elems; idx++) {
2507                 ctrl->type_ops->init(ctrl, idx, ctrl->p_cur);
2508                 ctrl->type_ops->init(ctrl, idx, ctrl->p_new);
2509         }
2510
2511         if (handler_new_ref(hdl, ctrl, NULL, false, false)) {
2512                 kvfree(ctrl);
2513                 return NULL;
2514         }
2515         mutex_lock(hdl->lock);
2516         list_add_tail(&ctrl->node, &hdl->ctrls);
2517         mutex_unlock(hdl->lock);
2518         return ctrl;
2519 }
2520
2521 struct v4l2_ctrl *v4l2_ctrl_new_custom(struct v4l2_ctrl_handler *hdl,
2522                         const struct v4l2_ctrl_config *cfg, void *priv)
2523 {
2524         bool is_menu;
2525         struct v4l2_ctrl *ctrl;
2526         const char *name = cfg->name;
2527         const char * const *qmenu = cfg->qmenu;
2528         const s64 *qmenu_int = cfg->qmenu_int;
2529         enum v4l2_ctrl_type type = cfg->type;
2530         u32 flags = cfg->flags;
2531         s64 min = cfg->min;
2532         s64 max = cfg->max;
2533         u64 step = cfg->step;
2534         s64 def = cfg->def;
2535
2536         if (name == NULL)
2537                 v4l2_ctrl_fill(cfg->id, &name, &type, &min, &max, &step,
2538                                                                 &def, &flags);
2539
2540         is_menu = (type == V4L2_CTRL_TYPE_MENU ||
2541                    type == V4L2_CTRL_TYPE_INTEGER_MENU);
2542         if (is_menu)
2543                 WARN_ON(step);
2544         else
2545                 WARN_ON(cfg->menu_skip_mask);
2546         if (type == V4L2_CTRL_TYPE_MENU && !qmenu) {
2547                 qmenu = v4l2_ctrl_get_menu(cfg->id);
2548         } else if (type == V4L2_CTRL_TYPE_INTEGER_MENU && !qmenu_int) {
2549                 handler_set_err(hdl, -EINVAL);
2550                 return NULL;
2551         }
2552
2553         ctrl = v4l2_ctrl_new(hdl, cfg->ops, cfg->type_ops, cfg->id, name,
2554                         type, min, max,
2555                         is_menu ? cfg->menu_skip_mask : step, def,
2556                         cfg->dims, cfg->elem_size,
2557                         flags, qmenu, qmenu_int, priv);
2558         if (ctrl)
2559                 ctrl->is_private = cfg->is_private;
2560         return ctrl;
2561 }
2562 EXPORT_SYMBOL(v4l2_ctrl_new_custom);
2563
2564 /* Helper function for standard non-menu controls */
2565 struct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl,
2566                         const struct v4l2_ctrl_ops *ops,
2567                         u32 id, s64 min, s64 max, u64 step, s64 def)
2568 {
2569         const char *name;
2570         enum v4l2_ctrl_type type;
2571         u32 flags;
2572
2573         v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2574         if (type == V4L2_CTRL_TYPE_MENU ||
2575             type == V4L2_CTRL_TYPE_INTEGER_MENU ||
2576             type >= V4L2_CTRL_COMPOUND_TYPES) {
2577                 handler_set_err(hdl, -EINVAL);
2578                 return NULL;
2579         }
2580         return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2581                              min, max, step, def, NULL, 0,
2582                              flags, NULL, NULL, NULL);
2583 }
2584 EXPORT_SYMBOL(v4l2_ctrl_new_std);
2585
2586 /* Helper function for standard menu controls */
2587 struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl,
2588                         const struct v4l2_ctrl_ops *ops,
2589                         u32 id, u8 _max, u64 mask, u8 _def)
2590 {
2591         const char * const *qmenu = NULL;
2592         const s64 *qmenu_int = NULL;
2593         unsigned int qmenu_int_len = 0;
2594         const char *name;
2595         enum v4l2_ctrl_type type;
2596         s64 min;
2597         s64 max = _max;
2598         s64 def = _def;
2599         u64 step;
2600         u32 flags;
2601
2602         v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2603
2604         if (type == V4L2_CTRL_TYPE_MENU)
2605                 qmenu = v4l2_ctrl_get_menu(id);
2606         else if (type == V4L2_CTRL_TYPE_INTEGER_MENU)
2607                 qmenu_int = v4l2_ctrl_get_int_menu(id, &qmenu_int_len);
2608
2609         if ((!qmenu && !qmenu_int) || (qmenu_int && max > qmenu_int_len)) {
2610                 handler_set_err(hdl, -EINVAL);
2611                 return NULL;
2612         }
2613         return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2614                              0, max, mask, def, NULL, 0,
2615                              flags, qmenu, qmenu_int, NULL);
2616 }
2617 EXPORT_SYMBOL(v4l2_ctrl_new_std_menu);
2618
2619 /* Helper function for standard menu controls with driver defined menu */
2620 struct v4l2_ctrl *v4l2_ctrl_new_std_menu_items(struct v4l2_ctrl_handler *hdl,
2621                         const struct v4l2_ctrl_ops *ops, u32 id, u8 _max,
2622                         u64 mask, u8 _def, const char * const *qmenu)
2623 {
2624         enum v4l2_ctrl_type type;
2625         const char *name;
2626         u32 flags;
2627         u64 step;
2628         s64 min;
2629         s64 max = _max;
2630         s64 def = _def;
2631
2632         /* v4l2_ctrl_new_std_menu_items() should only be called for
2633          * standard controls without a standard menu.
2634          */
2635         if (v4l2_ctrl_get_menu(id)) {
2636                 handler_set_err(hdl, -EINVAL);
2637                 return NULL;
2638         }
2639
2640         v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2641         if (type != V4L2_CTRL_TYPE_MENU || qmenu == NULL) {
2642                 handler_set_err(hdl, -EINVAL);
2643                 return NULL;
2644         }
2645         return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2646                              0, max, mask, def, NULL, 0,
2647                              flags, qmenu, NULL, NULL);
2648
2649 }
2650 EXPORT_SYMBOL(v4l2_ctrl_new_std_menu_items);
2651
2652 /* Helper function for standard integer menu controls */
2653 struct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl,
2654                         const struct v4l2_ctrl_ops *ops,
2655                         u32 id, u8 _max, u8 _def, const s64 *qmenu_int)
2656 {
2657         const char *name;
2658         enum v4l2_ctrl_type type;
2659         s64 min;
2660         u64 step;
2661         s64 max = _max;
2662         s64 def = _def;
2663         u32 flags;
2664
2665         v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2666         if (type != V4L2_CTRL_TYPE_INTEGER_MENU) {
2667                 handler_set_err(hdl, -EINVAL);
2668                 return NULL;
2669         }
2670         return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2671                              0, max, 0, def, NULL, 0,
2672                              flags, NULL, qmenu_int, NULL);
2673 }
2674 EXPORT_SYMBOL(v4l2_ctrl_new_int_menu);
2675
2676 /* Add the controls from another handler to our own. */
2677 int v4l2_ctrl_add_handler(struct v4l2_ctrl_handler *hdl,
2678                           struct v4l2_ctrl_handler *add,
2679                           bool (*filter)(const struct v4l2_ctrl *ctrl),
2680                           bool from_other_dev)
2681 {
2682         struct v4l2_ctrl_ref *ref;
2683         int ret = 0;
2684
2685         /* Do nothing if either handler is NULL or if they are the same */
2686         if (!hdl || !add || hdl == add)
2687                 return 0;
2688         if (hdl->error)
2689                 return hdl->error;
2690         mutex_lock(add->lock);
2691         list_for_each_entry(ref, &add->ctrl_refs, node) {
2692                 struct v4l2_ctrl *ctrl = ref->ctrl;
2693
2694                 /* Skip handler-private controls. */
2695                 if (ctrl->is_private)
2696                         continue;
2697                 /* And control classes */
2698                 if (ctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
2699                         continue;
2700                 /* Filter any unwanted controls */
2701                 if (filter && !filter(ctrl))
2702                         continue;
2703                 ret = handler_new_ref(hdl, ctrl, NULL, from_other_dev, false);
2704                 if (ret)
2705                         break;
2706         }
2707         mutex_unlock(add->lock);
2708         return ret;
2709 }
2710 EXPORT_SYMBOL(v4l2_ctrl_add_handler);
2711
2712 bool v4l2_ctrl_radio_filter(const struct v4l2_ctrl *ctrl)
2713 {
2714         if (V4L2_CTRL_ID2WHICH(ctrl->id) == V4L2_CTRL_CLASS_FM_TX)
2715                 return true;
2716         if (V4L2_CTRL_ID2WHICH(ctrl->id) == V4L2_CTRL_CLASS_FM_RX)
2717                 return true;
2718         switch (ctrl->id) {
2719         case V4L2_CID_AUDIO_MUTE:
2720         case V4L2_CID_AUDIO_VOLUME:
2721         case V4L2_CID_AUDIO_BALANCE:
2722         case V4L2_CID_AUDIO_BASS:
2723         case V4L2_CID_AUDIO_TREBLE:
2724         case V4L2_CID_AUDIO_LOUDNESS:
2725                 return true;
2726         default:
2727                 break;
2728         }
2729         return false;
2730 }
2731 EXPORT_SYMBOL(v4l2_ctrl_radio_filter);
2732
2733 /* Cluster controls */
2734 void v4l2_ctrl_cluster(unsigned ncontrols, struct v4l2_ctrl **controls)
2735 {
2736         bool has_volatiles = false;
2737         int i;
2738
2739         /* The first control is the master control and it must not be NULL */
2740         if (WARN_ON(ncontrols == 0 || controls[0] == NULL))
2741                 return;
2742
2743         for (i = 0; i < ncontrols; i++) {
2744                 if (controls[i]) {
2745                         controls[i]->cluster = controls;
2746                         controls[i]->ncontrols = ncontrols;
2747                         if (controls[i]->flags & V4L2_CTRL_FLAG_VOLATILE)
2748                                 has_volatiles = true;
2749                 }
2750         }
2751         controls[0]->has_volatiles = has_volatiles;
2752 }
2753 EXPORT_SYMBOL(v4l2_ctrl_cluster);
2754
2755 void v4l2_ctrl_auto_cluster(unsigned ncontrols, struct v4l2_ctrl **controls,
2756                             u8 manual_val, bool set_volatile)
2757 {
2758         struct v4l2_ctrl *master = controls[0];
2759         u32 flag = 0;
2760         int i;
2761
2762         v4l2_ctrl_cluster(ncontrols, controls);
2763         WARN_ON(ncontrols <= 1);
2764         WARN_ON(manual_val < master->minimum || manual_val > master->maximum);
2765         WARN_ON(set_volatile && !has_op(master, g_volatile_ctrl));
2766         master->is_auto = true;
2767         master->has_volatiles = set_volatile;
2768         master->manual_mode_value = manual_val;
2769         master->flags |= V4L2_CTRL_FLAG_UPDATE;
2770
2771         if (!is_cur_manual(master))
2772                 flag = V4L2_CTRL_FLAG_INACTIVE |
2773                         (set_volatile ? V4L2_CTRL_FLAG_VOLATILE : 0);
2774
2775         for (i = 1; i < ncontrols; i++)
2776                 if (controls[i])
2777                         controls[i]->flags |= flag;
2778 }
2779 EXPORT_SYMBOL(v4l2_ctrl_auto_cluster);
2780
2781 /* Activate/deactivate a control. */
2782 void v4l2_ctrl_activate(struct v4l2_ctrl *ctrl, bool active)
2783 {
2784         /* invert since the actual flag is called 'inactive' */
2785         bool inactive = !active;
2786         bool old;
2787
2788         if (ctrl == NULL)
2789                 return;
2790
2791         if (inactive)
2792                 /* set V4L2_CTRL_FLAG_INACTIVE */
2793                 old = test_and_set_bit(4, &ctrl->flags);
2794         else
2795                 /* clear V4L2_CTRL_FLAG_INACTIVE */
2796                 old = test_and_clear_bit(4, &ctrl->flags);
2797         if (old != inactive)
2798                 send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_FLAGS);
2799 }
2800 EXPORT_SYMBOL(v4l2_ctrl_activate);
2801
2802 void __v4l2_ctrl_grab(struct v4l2_ctrl *ctrl, bool grabbed)
2803 {
2804         bool old;
2805
2806         if (ctrl == NULL)
2807                 return;
2808
2809         lockdep_assert_held(ctrl->handler->lock);
2810
2811         if (grabbed)
2812                 /* set V4L2_CTRL_FLAG_GRABBED */
2813                 old = test_and_set_bit(1, &ctrl->flags);
2814         else
2815                 /* clear V4L2_CTRL_FLAG_GRABBED */
2816                 old = test_and_clear_bit(1, &ctrl->flags);
2817         if (old != grabbed)
2818                 send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_FLAGS);
2819 }
2820 EXPORT_SYMBOL(__v4l2_ctrl_grab);
2821
2822 /* Log the control name and value */
2823 static void log_ctrl(const struct v4l2_ctrl *ctrl,
2824                      const char *prefix, const char *colon)
2825 {
2826         if (ctrl->flags & (V4L2_CTRL_FLAG_DISABLED | V4L2_CTRL_FLAG_WRITE_ONLY))
2827                 return;
2828         if (ctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
2829                 return;
2830
2831         pr_info("%s%s%s: ", prefix, colon, ctrl->name);
2832
2833         ctrl->type_ops->log(ctrl);
2834
2835         if (ctrl->flags & (V4L2_CTRL_FLAG_INACTIVE |
2836                            V4L2_CTRL_FLAG_GRABBED |
2837                            V4L2_CTRL_FLAG_VOLATILE)) {
2838                 if (ctrl->flags & V4L2_CTRL_FLAG_INACTIVE)
2839                         pr_cont(" inactive");
2840                 if (ctrl->flags & V4L2_CTRL_FLAG_GRABBED)
2841                         pr_cont(" grabbed");
2842                 if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE)
2843                         pr_cont(" volatile");
2844         }
2845         pr_cont("\n");
2846 }
2847
2848 /* Log all controls owned by the handler */
2849 void v4l2_ctrl_handler_log_status(struct v4l2_ctrl_handler *hdl,
2850                                   const char *prefix)
2851 {
2852         struct v4l2_ctrl *ctrl;
2853         const char *colon = "";
2854         int len;
2855
2856         if (hdl == NULL)
2857                 return;
2858         if (prefix == NULL)
2859                 prefix = "";
2860         len = strlen(prefix);
2861         if (len && prefix[len - 1] != ' ')
2862                 colon = ": ";
2863         mutex_lock(hdl->lock);
2864         list_for_each_entry(ctrl, &hdl->ctrls, node)
2865                 if (!(ctrl->flags & V4L2_CTRL_FLAG_DISABLED))
2866                         log_ctrl(ctrl, prefix, colon);
2867         mutex_unlock(hdl->lock);
2868 }
2869 EXPORT_SYMBOL(v4l2_ctrl_handler_log_status);
2870
2871 int v4l2_ctrl_subdev_log_status(struct v4l2_subdev *sd)
2872 {
2873         v4l2_ctrl_handler_log_status(sd->ctrl_handler, sd->name);
2874         return 0;
2875 }
2876 EXPORT_SYMBOL(v4l2_ctrl_subdev_log_status);
2877
2878 /* Call s_ctrl for all controls owned by the handler */
2879 int __v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler *hdl)
2880 {
2881         struct v4l2_ctrl *ctrl;
2882         int ret = 0;
2883
2884         if (hdl == NULL)
2885                 return 0;
2886
2887         lockdep_assert_held(hdl->lock);
2888
2889         list_for_each_entry(ctrl, &hdl->ctrls, node)
2890                 ctrl->done = false;
2891
2892         list_for_each_entry(ctrl, &hdl->ctrls, node) {
2893                 struct v4l2_ctrl *master = ctrl->cluster[0];
2894                 int i;
2895
2896                 /* Skip if this control was already handled by a cluster. */
2897                 /* Skip button controls and read-only controls. */
2898                 if (ctrl->done || ctrl->type == V4L2_CTRL_TYPE_BUTTON ||
2899                     (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY))
2900                         continue;
2901
2902                 for (i = 0; i < master->ncontrols; i++) {
2903                         if (master->cluster[i]) {
2904                                 cur_to_new(master->cluster[i]);
2905                                 master->cluster[i]->is_new = 1;
2906                                 master->cluster[i]->done = true;
2907                         }
2908                 }
2909                 ret = call_op(master, s_ctrl);
2910                 if (ret)
2911                         break;
2912         }
2913
2914         return ret;
2915 }
2916 EXPORT_SYMBOL_GPL(__v4l2_ctrl_handler_setup);
2917
2918 int v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler *hdl)
2919 {
2920         int ret;
2921
2922         if (hdl == NULL)
2923                 return 0;
2924
2925         mutex_lock(hdl->lock);
2926         ret = __v4l2_ctrl_handler_setup(hdl);
2927         mutex_unlock(hdl->lock);
2928
2929         return ret;
2930 }
2931 EXPORT_SYMBOL(v4l2_ctrl_handler_setup);
2932
2933 /* Implement VIDIOC_QUERY_EXT_CTRL */
2934 int v4l2_query_ext_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_query_ext_ctrl *qc)
2935 {
2936         const unsigned next_flags = V4L2_CTRL_FLAG_NEXT_CTRL | V4L2_CTRL_FLAG_NEXT_COMPOUND;
2937         u32 id = qc->id & V4L2_CTRL_ID_MASK;
2938         struct v4l2_ctrl_ref *ref;
2939         struct v4l2_ctrl *ctrl;
2940
2941         if (hdl == NULL)
2942                 return -EINVAL;
2943
2944         mutex_lock(hdl->lock);
2945
2946         /* Try to find it */
2947         ref = find_ref(hdl, id);
2948
2949         if ((qc->id & next_flags) && !list_empty(&hdl->ctrl_refs)) {
2950                 bool is_compound;
2951                 /* Match any control that is not hidden */
2952                 unsigned mask = 1;
2953                 bool match = false;
2954
2955                 if ((qc->id & next_flags) == V4L2_CTRL_FLAG_NEXT_COMPOUND) {
2956                         /* Match any hidden control */
2957                         match = true;
2958                 } else if ((qc->id & next_flags) == next_flags) {
2959                         /* Match any control, compound or not */
2960                         mask = 0;
2961                 }
2962
2963                 /* Find the next control with ID > qc->id */
2964
2965                 /* Did we reach the end of the control list? */
2966                 if (id >= node2id(hdl->ctrl_refs.prev)) {
2967                         ref = NULL; /* Yes, so there is no next control */
2968                 } else if (ref) {
2969                         /* We found a control with the given ID, so just get
2970                            the next valid one in the list. */
2971                         list_for_each_entry_continue(ref, &hdl->ctrl_refs, node) {
2972                                 is_compound = ref->ctrl->is_array ||
2973                                         ref->ctrl->type >= V4L2_CTRL_COMPOUND_TYPES;
2974                                 if (id < ref->ctrl->id &&
2975                                     (is_compound & mask) == match)
2976                                         break;
2977                         }
2978                         if (&ref->node == &hdl->ctrl_refs)
2979                                 ref = NULL;
2980                 } else {
2981                         /* No control with the given ID exists, so start
2982                            searching for the next largest ID. We know there
2983                            is one, otherwise the first 'if' above would have
2984                            been true. */
2985                         list_for_each_entry(ref, &hdl->ctrl_refs, node) {
2986                                 is_compound = ref->ctrl->is_array ||
2987                                         ref->ctrl->type >= V4L2_CTRL_COMPOUND_TYPES;
2988                                 if (id < ref->ctrl->id &&
2989                                     (is_compound & mask) == match)
2990                                         break;
2991                         }
2992                         if (&ref->node == &hdl->ctrl_refs)
2993                                 ref = NULL;
2994                 }
2995         }
2996         mutex_unlock(hdl->lock);
2997
2998         if (!ref)
2999                 return -EINVAL;
3000
3001         ctrl = ref->ctrl;
3002         memset(qc, 0, sizeof(*qc));
3003         if (id >= V4L2_CID_PRIVATE_BASE)
3004                 qc->id = id;
3005         else
3006                 qc->id = ctrl->id;
3007         strscpy(qc->name, ctrl->name, sizeof(qc->name));
3008         qc->flags = user_flags(ctrl);
3009         qc->type = ctrl->type;
3010         qc->elem_size = ctrl->elem_size;
3011         qc->elems = ctrl->elems;
3012         qc->nr_of_dims = ctrl->nr_of_dims;
3013         memcpy(qc->dims, ctrl->dims, qc->nr_of_dims * sizeof(qc->dims[0]));
3014         qc->minimum = ctrl->minimum;
3015         qc->maximum = ctrl->maximum;
3016         qc->default_value = ctrl->default_value;
3017         if (ctrl->type == V4L2_CTRL_TYPE_MENU
3018             || ctrl->type == V4L2_CTRL_TYPE_INTEGER_MENU)
3019                 qc->step = 1;
3020         else
3021                 qc->step = ctrl->step;
3022         return 0;
3023 }
3024 EXPORT_SYMBOL(v4l2_query_ext_ctrl);
3025
3026 /* Implement VIDIOC_QUERYCTRL */
3027 int v4l2_queryctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc)
3028 {
3029         struct v4l2_query_ext_ctrl qec = { qc->id };
3030         int rc;
3031
3032         rc = v4l2_query_ext_ctrl(hdl, &qec);
3033         if (rc)
3034                 return rc;
3035
3036         qc->id = qec.id;
3037         qc->type = qec.type;
3038         qc->flags = qec.flags;
3039         strscpy(qc->name, qec.name, sizeof(qc->name));
3040         switch (qc->type) {
3041         case V4L2_CTRL_TYPE_INTEGER:
3042         case V4L2_CTRL_TYPE_BOOLEAN:
3043         case V4L2_CTRL_TYPE_MENU:
3044         case V4L2_CTRL_TYPE_INTEGER_MENU:
3045         case V4L2_CTRL_TYPE_STRING:
3046         case V4L2_CTRL_TYPE_BITMASK:
3047                 qc->minimum = qec.minimum;
3048                 qc->maximum = qec.maximum;
3049                 qc->step = qec.step;
3050                 qc->default_value = qec.default_value;
3051                 break;
3052         default:
3053                 qc->minimum = 0;
3054                 qc->maximum = 0;
3055                 qc->step = 0;
3056                 qc->default_value = 0;
3057                 break;
3058         }
3059         return 0;
3060 }
3061 EXPORT_SYMBOL(v4l2_queryctrl);
3062
3063 /* Implement VIDIOC_QUERYMENU */
3064 int v4l2_querymenu(struct v4l2_ctrl_handler *hdl, struct v4l2_querymenu *qm)
3065 {
3066         struct v4l2_ctrl *ctrl;
3067         u32 i = qm->index;
3068
3069         ctrl = v4l2_ctrl_find(hdl, qm->id);
3070         if (!ctrl)
3071                 return -EINVAL;
3072
3073         qm->reserved = 0;
3074         /* Sanity checks */
3075         switch (ctrl->type) {
3076         case V4L2_CTRL_TYPE_MENU:
3077                 if (ctrl->qmenu == NULL)
3078                         return -EINVAL;
3079                 break;
3080         case V4L2_CTRL_TYPE_INTEGER_MENU:
3081                 if (ctrl->qmenu_int == NULL)
3082                         return -EINVAL;
3083                 break;
3084         default:
3085                 return -EINVAL;
3086         }
3087
3088         if (i < ctrl->minimum || i > ctrl->maximum)
3089                 return -EINVAL;
3090
3091         /* Use mask to see if this menu item should be skipped */
3092         if (ctrl->menu_skip_mask & (1ULL << i))
3093                 return -EINVAL;
3094         /* Empty menu items should also be skipped */
3095         if (ctrl->type == V4L2_CTRL_TYPE_MENU) {
3096                 if (ctrl->qmenu[i] == NULL || ctrl->qmenu[i][0] == '\0')
3097                         return -EINVAL;
3098                 strscpy(qm->name, ctrl->qmenu[i], sizeof(qm->name));
3099         } else {
3100                 qm->value = ctrl->qmenu_int[i];
3101         }
3102         return 0;
3103 }
3104 EXPORT_SYMBOL(v4l2_querymenu);
3105
3106 static int v4l2_ctrl_request_clone(struct v4l2_ctrl_handler *hdl,
3107                                    const struct v4l2_ctrl_handler *from)
3108 {
3109         struct v4l2_ctrl_ref *ref;
3110         int err = 0;
3111
3112         if (WARN_ON(!hdl || hdl == from))
3113                 return -EINVAL;
3114
3115         if (hdl->error)
3116                 return hdl->error;
3117
3118         WARN_ON(hdl->lock != &hdl->_lock);
3119
3120         mutex_lock(from->lock);
3121         list_for_each_entry(ref, &from->ctrl_refs, node) {
3122                 struct v4l2_ctrl *ctrl = ref->ctrl;
3123                 struct v4l2_ctrl_ref *new_ref;
3124
3125                 /* Skip refs inherited from other devices */
3126                 if (ref->from_other_dev)
3127                         continue;
3128                 /* And buttons */
3129                 if (ctrl->type == V4L2_CTRL_TYPE_BUTTON)
3130                         continue;
3131                 err = handler_new_ref(hdl, ctrl, &new_ref, false, true);
3132                 if (err)
3133                         break;
3134         }
3135         mutex_unlock(from->lock);
3136         return err;
3137 }
3138
3139 static void v4l2_ctrl_request_queue(struct media_request_object *obj)
3140 {
3141         struct v4l2_ctrl_handler *hdl =
3142                 container_of(obj, struct v4l2_ctrl_handler, req_obj);
3143         struct v4l2_ctrl_handler *main_hdl = obj->priv;
3144         struct v4l2_ctrl_handler *prev_hdl = NULL;
3145         struct v4l2_ctrl_ref *ref_ctrl, *ref_ctrl_prev = NULL;
3146
3147         if (list_empty(&main_hdl->requests_queued))
3148                 goto queue;
3149
3150         prev_hdl = list_last_entry(&main_hdl->requests_queued,
3151                                    struct v4l2_ctrl_handler, requests_queued);
3152         /*
3153          * Note: prev_hdl and hdl must contain the same list of control
3154          * references, so if any differences are detected then that is a
3155          * driver bug and the WARN_ON is triggered.
3156          */
3157         mutex_lock(prev_hdl->lock);
3158         ref_ctrl_prev = list_first_entry(&prev_hdl->ctrl_refs,
3159                                          struct v4l2_ctrl_ref, node);
3160         list_for_each_entry(ref_ctrl, &hdl->ctrl_refs, node) {
3161                 if (ref_ctrl->req)
3162                         continue;
3163                 while (ref_ctrl_prev->ctrl->id < ref_ctrl->ctrl->id) {
3164                         /* Should never happen, but just in case... */
3165                         if (list_is_last(&ref_ctrl_prev->node,
3166                                          &prev_hdl->ctrl_refs))
3167                                 break;
3168                         ref_ctrl_prev = list_next_entry(ref_ctrl_prev, node);
3169                 }
3170                 if (WARN_ON(ref_ctrl_prev->ctrl->id != ref_ctrl->ctrl->id))
3171                         break;
3172                 ref_ctrl->req = ref_ctrl_prev->req;
3173         }
3174         mutex_unlock(prev_hdl->lock);
3175 queue:
3176         list_add_tail(&hdl->requests_queued, &main_hdl->requests_queued);
3177         hdl->request_is_queued = true;
3178 }
3179
3180 static void v4l2_ctrl_request_unbind(struct media_request_object *obj)
3181 {
3182         struct v4l2_ctrl_handler *hdl =
3183                 container_of(obj, struct v4l2_ctrl_handler, req_obj);
3184
3185         list_del_init(&hdl->requests);
3186         if (hdl->request_is_queued) {
3187                 list_del_init(&hdl->requests_queued);
3188                 hdl->request_is_queued = false;
3189         }
3190 }
3191
3192 static void v4l2_ctrl_request_release(struct media_request_object *obj)
3193 {
3194         struct v4l2_ctrl_handler *hdl =
3195                 container_of(obj, struct v4l2_ctrl_handler, req_obj);
3196
3197         v4l2_ctrl_handler_free(hdl);
3198         kfree(hdl);
3199 }
3200
3201 static const struct media_request_object_ops req_ops = {
3202         .queue = v4l2_ctrl_request_queue,
3203         .unbind = v4l2_ctrl_request_unbind,
3204         .release = v4l2_ctrl_request_release,
3205 };
3206
3207 struct v4l2_ctrl_handler *v4l2_ctrl_request_hdl_find(struct media_request *req,
3208                                         struct v4l2_ctrl_handler *parent)
3209 {
3210         struct media_request_object *obj;
3211
3212         if (WARN_ON(req->state != MEDIA_REQUEST_STATE_VALIDATING &&
3213                     req->state != MEDIA_REQUEST_STATE_QUEUED))
3214                 return NULL;
3215
3216         obj = media_request_object_find(req, &req_ops, parent);
3217         if (obj)
3218                 return container_of(obj, struct v4l2_ctrl_handler, req_obj);
3219         return NULL;
3220 }
3221 EXPORT_SYMBOL_GPL(v4l2_ctrl_request_hdl_find);
3222
3223 struct v4l2_ctrl *
3224 v4l2_ctrl_request_hdl_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id)
3225 {
3226         struct v4l2_ctrl_ref *ref = find_ref_lock(hdl, id);
3227
3228         return (ref && ref->req == ref) ? ref->ctrl : NULL;
3229 }
3230 EXPORT_SYMBOL_GPL(v4l2_ctrl_request_hdl_ctrl_find);
3231
3232 static int v4l2_ctrl_request_bind(struct media_request *req,
3233                            struct v4l2_ctrl_handler *hdl,
3234                            struct v4l2_ctrl_handler *from)
3235 {
3236         int ret;
3237
3238         ret = v4l2_ctrl_request_clone(hdl, from);
3239
3240         if (!ret) {
3241                 ret = media_request_object_bind(req, &req_ops,
3242                                                 from, false, &hdl->req_obj);
3243                 if (!ret)
3244                         list_add_tail(&hdl->requests, &from->requests);
3245         }
3246         return ret;
3247 }
3248
3249 /* Some general notes on the atomic requirements of VIDIOC_G/TRY/S_EXT_CTRLS:
3250
3251    It is not a fully atomic operation, just best-effort only. After all, if
3252    multiple controls have to be set through multiple i2c writes (for example)
3253    then some initial writes may succeed while others fail. Thus leaving the
3254    system in an inconsistent state. The question is how much effort you are
3255    willing to spend on trying to make something atomic that really isn't.
3256
3257    From the point of view of an application the main requirement is that
3258    when you call VIDIOC_S_EXT_CTRLS and some values are invalid then an
3259    error should be returned without actually affecting any controls.
3260
3261    If all the values are correct, then it is acceptable to just give up
3262    in case of low-level errors.
3263
3264    It is important though that the application can tell when only a partial
3265    configuration was done. The way we do that is through the error_idx field
3266    of struct v4l2_ext_controls: if that is equal to the count field then no
3267    controls were affected. Otherwise all controls before that index were
3268    successful in performing their 'get' or 'set' operation, the control at
3269    the given index failed, and you don't know what happened with the controls
3270    after the failed one. Since if they were part of a control cluster they
3271    could have been successfully processed (if a cluster member was encountered
3272    at index < error_idx), they could have failed (if a cluster member was at
3273    error_idx), or they may not have been processed yet (if the first cluster
3274    member appeared after error_idx).
3275
3276    It is all fairly theoretical, though. In practice all you can do is to
3277    bail out. If error_idx == count, then it is an application bug. If
3278    error_idx < count then it is only an application bug if the error code was
3279    EBUSY. That usually means that something started streaming just when you
3280    tried to set the controls. In all other cases it is a driver/hardware
3281    problem and all you can do is to retry or bail out.
3282
3283    Note that these rules do not apply to VIDIOC_TRY_EXT_CTRLS: since that
3284    never modifies controls the error_idx is just set to whatever control
3285    has an invalid value.
3286  */
3287
3288 /* Prepare for the extended g/s/try functions.
3289    Find the controls in the control array and do some basic checks. */
3290 static int prepare_ext_ctrls(struct v4l2_ctrl_handler *hdl,
3291                              struct v4l2_ext_controls *cs,
3292                              struct v4l2_ctrl_helper *helpers,
3293                              struct video_device *vdev,
3294                              bool get)
3295 {
3296         struct v4l2_ctrl_helper *h;
3297         bool have_clusters = false;
3298         u32 i;
3299
3300         for (i = 0, h = helpers; i < cs->count; i++, h++) {
3301                 struct v4l2_ext_control *c = &cs->controls[i];
3302                 struct v4l2_ctrl_ref *ref;
3303                 struct v4l2_ctrl *ctrl;
3304                 u32 id = c->id & V4L2_CTRL_ID_MASK;
3305
3306                 cs->error_idx = i;
3307
3308                 if (cs->which &&
3309                     cs->which != V4L2_CTRL_WHICH_DEF_VAL &&
3310                     cs->which != V4L2_CTRL_WHICH_REQUEST_VAL &&
3311                     V4L2_CTRL_ID2WHICH(id) != cs->which) {
3312                         dprintk(vdev,
3313                                 "invalid which 0x%x or control id 0x%x\n",
3314                                 cs->which, id);
3315                         return -EINVAL;
3316                 }
3317
3318                 /* Old-style private controls are not allowed for
3319                    extended controls */
3320                 if (id >= V4L2_CID_PRIVATE_BASE) {
3321                         dprintk(vdev,
3322                                 "old-style private controls not allowed\n");
3323                         return -EINVAL;
3324                 }
3325                 ref = find_ref_lock(hdl, id);
3326                 if (ref == NULL) {
3327                         dprintk(vdev, "cannot find control id 0x%x\n", id);
3328                         return -EINVAL;
3329                 }
3330                 h->ref = ref;
3331                 ctrl = ref->ctrl;
3332                 if (ctrl->flags & V4L2_CTRL_FLAG_DISABLED) {
3333                         dprintk(vdev, "control id 0x%x is disabled\n", id);
3334                         return -EINVAL;
3335                 }
3336
3337                 if (ctrl->cluster[0]->ncontrols > 1)
3338                         have_clusters = true;
3339                 if (ctrl->cluster[0] != ctrl)
3340                         ref = find_ref_lock(hdl, ctrl->cluster[0]->id);
3341                 if (ctrl->is_ptr && !ctrl->is_string) {
3342                         unsigned tot_size = ctrl->elems * ctrl->elem_size;
3343
3344                         if (c->size < tot_size) {
3345                                 /*
3346                                  * In the get case the application first
3347                                  * queries to obtain the size of the control.
3348                                  */
3349                                 if (get) {
3350                                         c->size = tot_size;
3351                                         return -ENOSPC;
3352                                 }
3353                                 dprintk(vdev,
3354                                         "pointer control id 0x%x size too small, %d bytes but %d bytes needed\n",
3355                                         id, c->size, tot_size);
3356                                 return -EFAULT;
3357                         }
3358                         c->size = tot_size;
3359                 }
3360                 /* Store the ref to the master control of the cluster */
3361                 h->mref = ref;
3362                 /* Initially set next to 0, meaning that there is no other
3363                    control in this helper array belonging to the same
3364                    cluster */
3365                 h->next = 0;
3366         }
3367
3368         /* We are done if there were no controls that belong to a multi-
3369            control cluster. */
3370         if (!have_clusters)
3371                 return 0;
3372
3373         /* The code below figures out in O(n) time which controls in the list
3374            belong to the same cluster. */
3375
3376         /* This has to be done with the handler lock taken. */
3377         mutex_lock(hdl->lock);
3378
3379         /* First zero the helper field in the master control references */
3380         for (i = 0; i < cs->count; i++)
3381                 helpers[i].mref->helper = NULL;
3382         for (i = 0, h = helpers; i < cs->count; i++, h++) {
3383                 struct v4l2_ctrl_ref *mref = h->mref;
3384
3385                 /* If the mref->helper is set, then it points to an earlier
3386                    helper that belongs to the same cluster. */
3387                 if (mref->helper) {
3388                         /* Set the next field of mref->helper to the current
3389                            index: this means that that earlier helper now
3390                            points to the next helper in the same cluster. */
3391                         mref->helper->next = i;
3392                         /* mref should be set only for the first helper in the
3393                            cluster, clear the others. */
3394                         h->mref = NULL;
3395                 }
3396                 /* Point the mref helper to the current helper struct. */
3397                 mref->helper = h;
3398         }
3399         mutex_unlock(hdl->lock);
3400         return 0;
3401 }
3402
3403 /* Handles the corner case where cs->count == 0. It checks whether the
3404    specified control class exists. If that class ID is 0, then it checks
3405    whether there are any controls at all. */
3406 static int class_check(struct v4l2_ctrl_handler *hdl, u32 which)
3407 {
3408         if (which == 0 || which == V4L2_CTRL_WHICH_DEF_VAL ||
3409             which == V4L2_CTRL_WHICH_REQUEST_VAL)
3410                 return 0;
3411         return find_ref_lock(hdl, which | 1) ? 0 : -EINVAL;
3412 }
3413
3414 /* Get extended controls. Allocates the helpers array if needed. */
3415 static int v4l2_g_ext_ctrls_common(struct v4l2_ctrl_handler *hdl,
3416                                    struct v4l2_ext_controls *cs,
3417                                    struct video_device *vdev)
3418 {
3419         struct v4l2_ctrl_helper helper[4];
3420         struct v4l2_ctrl_helper *helpers = helper;
3421         int ret;
3422         int i, j;
3423         bool def_value;
3424
3425         def_value = (cs->which == V4L2_CTRL_WHICH_DEF_VAL);
3426
3427         cs->error_idx = cs->count;
3428         cs->which = V4L2_CTRL_ID2WHICH(cs->which);
3429
3430         if (hdl == NULL)
3431                 return -EINVAL;
3432
3433         if (cs->count == 0)
3434                 return class_check(hdl, cs->which);
3435
3436         if (cs->count > ARRAY_SIZE(helper)) {
3437                 helpers = kvmalloc_array(cs->count, sizeof(helper[0]),
3438                                          GFP_KERNEL);
3439                 if (helpers == NULL)
3440                         return -ENOMEM;
3441         }
3442
3443         ret = prepare_ext_ctrls(hdl, cs, helpers, vdev, true);
3444         cs->error_idx = cs->count;
3445
3446         for (i = 0; !ret && i < cs->count; i++)
3447                 if (helpers[i].ref->ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY)
3448                         ret = -EACCES;
3449
3450         for (i = 0; !ret && i < cs->count; i++) {
3451                 int (*ctrl_to_user)(struct v4l2_ext_control *c,
3452                                     struct v4l2_ctrl *ctrl);
3453                 struct v4l2_ctrl *master;
3454
3455                 ctrl_to_user = def_value ? def_to_user : cur_to_user;
3456
3457                 if (helpers[i].mref == NULL)
3458                         continue;
3459
3460                 master = helpers[i].mref->ctrl;
3461                 cs->error_idx = i;
3462
3463                 v4l2_ctrl_lock(master);
3464
3465                 /* g_volatile_ctrl will update the new control values */
3466                 if (!def_value &&
3467                     ((master->flags & V4L2_CTRL_FLAG_VOLATILE) ||
3468                     (master->has_volatiles && !is_cur_manual(master)))) {
3469                         for (j = 0; j < master->ncontrols; j++)
3470                                 cur_to_new(master->cluster[j]);
3471                         ret = call_op(master, g_volatile_ctrl);
3472                         ctrl_to_user = new_to_user;
3473                 }
3474                 /* If OK, then copy the current (for non-volatile controls)
3475                    or the new (for volatile controls) control values to the
3476                    caller */
3477                 if (!ret) {
3478                         u32 idx = i;
3479
3480                         do {
3481                                 if (helpers[idx].ref->req)
3482                                         ret = req_to_user(cs->controls + idx,
3483                                                 helpers[idx].ref->req);
3484                                 else
3485                                         ret = ctrl_to_user(cs->controls + idx,
3486                                                 helpers[idx].ref->ctrl);
3487                                 idx = helpers[idx].next;
3488                         } while (!ret && idx);
3489                 }
3490                 v4l2_ctrl_unlock(master);
3491         }
3492
3493         if (cs->count > ARRAY_SIZE(helper))
3494                 kvfree(helpers);
3495         return ret;
3496 }
3497
3498 static struct media_request_object *
3499 v4l2_ctrls_find_req_obj(struct v4l2_ctrl_handler *hdl,
3500                         struct media_request *req, bool set)
3501 {
3502         struct media_request_object *obj;
3503         struct v4l2_ctrl_handler *new_hdl;
3504         int ret;
3505
3506         if (IS_ERR(req))
3507                 return ERR_CAST(req);
3508
3509         if (set && WARN_ON(req->state != MEDIA_REQUEST_STATE_UPDATING))
3510                 return ERR_PTR(-EBUSY);
3511
3512         obj = media_request_object_find(req, &req_ops, hdl);
3513         if (obj)
3514                 return obj;
3515         if (!set)
3516                 return ERR_PTR(-ENOENT);
3517
3518         new_hdl = kzalloc(sizeof(*new_hdl), GFP_KERNEL);
3519         if (!new_hdl)
3520                 return ERR_PTR(-ENOMEM);
3521
3522         obj = &new_hdl->req_obj;
3523         ret = v4l2_ctrl_handler_init(new_hdl, (hdl->nr_of_buckets - 1) * 8);
3524         if (!ret)
3525                 ret = v4l2_ctrl_request_bind(req, new_hdl, hdl);
3526         if (ret) {
3527                 kfree(new_hdl);
3528
3529                 return ERR_PTR(ret);
3530         }
3531
3532         media_request_object_get(obj);
3533         return obj;
3534 }
3535
3536 int v4l2_g_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct video_device *vdev,
3537                      struct media_device *mdev, struct v4l2_ext_controls *cs)
3538 {
3539         struct media_request_object *obj = NULL;
3540         struct media_request *req = NULL;
3541         int ret;
3542
3543         if (cs->which == V4L2_CTRL_WHICH_REQUEST_VAL) {
3544                 if (!mdev || cs->request_fd < 0)
3545                         return -EINVAL;
3546
3547                 req = media_request_get_by_fd(mdev, cs->request_fd);
3548                 if (IS_ERR(req))
3549                         return PTR_ERR(req);
3550
3551                 if (req->state != MEDIA_REQUEST_STATE_COMPLETE) {
3552                         media_request_put(req);
3553                         return -EACCES;
3554                 }
3555
3556                 ret = media_request_lock_for_access(req);
3557                 if (ret) {
3558                         media_request_put(req);
3559                         return ret;
3560                 }
3561
3562                 obj = v4l2_ctrls_find_req_obj(hdl, req, false);
3563                 if (IS_ERR(obj)) {
3564                         media_request_unlock_for_access(req);
3565                         media_request_put(req);
3566                         return PTR_ERR(obj);
3567                 }
3568
3569                 hdl = container_of(obj, struct v4l2_ctrl_handler,
3570                                    req_obj);
3571         }
3572
3573         ret = v4l2_g_ext_ctrls_common(hdl, cs, vdev);
3574
3575         if (obj) {
3576                 media_request_unlock_for_access(req);
3577                 media_request_object_put(obj);
3578                 media_request_put(req);
3579         }
3580         return ret;
3581 }
3582 EXPORT_SYMBOL(v4l2_g_ext_ctrls);
3583
3584 /* Helper function to get a single control */
3585 static int get_ctrl(struct v4l2_ctrl *ctrl, struct v4l2_ext_control *c)
3586 {
3587         struct v4l2_ctrl *master = ctrl->cluster[0];
3588         int ret = 0;
3589         int i;
3590
3591         /* Compound controls are not supported. The new_to_user() and
3592          * cur_to_user() calls below would need to be modified not to access
3593          * userspace memory when called from get_ctrl().
3594          */
3595         if (!ctrl->is_int && ctrl->type != V4L2_CTRL_TYPE_INTEGER64)
3596                 return -EINVAL;
3597
3598         if (ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY)
3599                 return -EACCES;
3600
3601         v4l2_ctrl_lock(master);
3602         /* g_volatile_ctrl will update the current control values */
3603         if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE) {
3604                 for (i = 0; i < master->ncontrols; i++)
3605                         cur_to_new(master->cluster[i]);
3606                 ret = call_op(master, g_volatile_ctrl);
3607                 new_to_user(c, ctrl);
3608         } else {
3609                 cur_to_user(c, ctrl);
3610         }
3611         v4l2_ctrl_unlock(master);
3612         return ret;
3613 }
3614
3615 int v4l2_g_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_control *control)
3616 {
3617         struct v4l2_ctrl *ctrl = v4l2_ctrl_find(hdl, control->id);
3618         struct v4l2_ext_control c;
3619         int ret;
3620
3621         if (ctrl == NULL || !ctrl->is_int)
3622                 return -EINVAL;
3623         ret = get_ctrl(ctrl, &c);
3624         control->value = c.value;
3625         return ret;
3626 }
3627 EXPORT_SYMBOL(v4l2_g_ctrl);
3628
3629 s32 v4l2_ctrl_g_ctrl(struct v4l2_ctrl *ctrl)
3630 {
3631         struct v4l2_ext_control c;
3632
3633         /* It's a driver bug if this happens. */
3634         WARN_ON(!ctrl->is_int);
3635         c.value = 0;
3636         get_ctrl(ctrl, &c);
3637         return c.value;
3638 }
3639 EXPORT_SYMBOL(v4l2_ctrl_g_ctrl);
3640
3641 s64 v4l2_ctrl_g_ctrl_int64(struct v4l2_ctrl *ctrl)
3642 {
3643         struct v4l2_ext_control c;
3644
3645         /* It's a driver bug if this happens. */
3646         WARN_ON(ctrl->is_ptr || ctrl->type != V4L2_CTRL_TYPE_INTEGER64);
3647         c.value64 = 0;
3648         get_ctrl(ctrl, &c);
3649         return c.value64;
3650 }
3651 EXPORT_SYMBOL(v4l2_ctrl_g_ctrl_int64);
3652
3653
3654 /* Core function that calls try/s_ctrl and ensures that the new value is
3655    copied to the current value on a set.
3656    Must be called with ctrl->handler->lock held. */
3657 static int try_or_set_cluster(struct v4l2_fh *fh, struct v4l2_ctrl *master,
3658                               bool set, u32 ch_flags)
3659 {
3660         bool update_flag;
3661         int ret;
3662         int i;
3663
3664         /* Go through the cluster and either validate the new value or
3665            (if no new value was set), copy the current value to the new
3666            value, ensuring a consistent view for the control ops when
3667            called. */
3668         for (i = 0; i < master->ncontrols; i++) {
3669                 struct v4l2_ctrl *ctrl = master->cluster[i];
3670
3671                 if (ctrl == NULL)
3672                         continue;
3673
3674                 if (!ctrl->is_new) {
3675                         cur_to_new(ctrl);
3676                         continue;
3677                 }
3678                 /* Check again: it may have changed since the
3679                    previous check in try_or_set_ext_ctrls(). */
3680                 if (set && (ctrl->flags & V4L2_CTRL_FLAG_GRABBED))
3681                         return -EBUSY;
3682         }
3683
3684         ret = call_op(master, try_ctrl);
3685
3686         /* Don't set if there is no change */
3687         if (ret || !set || !cluster_changed(master))
3688                 return ret;
3689         ret = call_op(master, s_ctrl);
3690         if (ret)
3691                 return ret;
3692
3693         /* If OK, then make the new values permanent. */
3694         update_flag = is_cur_manual(master) != is_new_manual(master);
3695
3696         for (i = 0; i < master->ncontrols; i++) {
3697                 /*
3698                  * If we switch from auto to manual mode, and this cluster
3699                  * contains volatile controls, then all non-master controls
3700                  * have to be marked as changed. The 'new' value contains
3701                  * the volatile value (obtained by update_from_auto_cluster),
3702                  * which now has to become the current value.
3703                  */
3704                 if (i && update_flag && is_new_manual(master) &&
3705                     master->has_volatiles && master->cluster[i])
3706                         master->cluster[i]->has_changed = true;
3707
3708                 new_to_cur(fh, master->cluster[i], ch_flags |
3709                         ((update_flag && i > 0) ? V4L2_EVENT_CTRL_CH_FLAGS : 0));
3710         }
3711         return 0;
3712 }
3713
3714 /* Validate controls. */
3715 static int validate_ctrls(struct v4l2_ext_controls *cs,
3716                           struct v4l2_ctrl_helper *helpers,
3717                           struct video_device *vdev,
3718                           bool set)
3719 {
3720         unsigned i;
3721         int ret = 0;
3722
3723         cs->error_idx = cs->count;
3724         for (i = 0; i < cs->count; i++) {
3725                 struct v4l2_ctrl *ctrl = helpers[i].ref->ctrl;
3726                 union v4l2_ctrl_ptr p_new;
3727
3728                 cs->error_idx = i;
3729
3730                 if (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY) {
3731                         dprintk(vdev,
3732                                 "control id 0x%x is read-only\n",
3733                                 ctrl->id);
3734                         return -EACCES;
3735                 }
3736                 /* This test is also done in try_set_control_cluster() which
3737                    is called in atomic context, so that has the final say,
3738                    but it makes sense to do an up-front check as well. Once
3739                    an error occurs in try_set_control_cluster() some other
3740                    controls may have been set already and we want to do a
3741                    best-effort to avoid that. */
3742                 if (set && (ctrl->flags & V4L2_CTRL_FLAG_GRABBED)) {
3743                         dprintk(vdev,
3744                                 "control id 0x%x is grabbed, cannot set\n",
3745                                 ctrl->id);
3746                         return -EBUSY;
3747                 }
3748                 /*
3749                  * Skip validation for now if the payload needs to be copied
3750                  * from userspace into kernelspace. We'll validate those later.
3751                  */
3752                 if (ctrl->is_ptr)
3753                         continue;
3754                 if (ctrl->type == V4L2_CTRL_TYPE_INTEGER64)
3755                         p_new.p_s64 = &cs->controls[i].value64;
3756                 else
3757                         p_new.p_s32 = &cs->controls[i].value;
3758                 ret = validate_new(ctrl, p_new);
3759                 if (ret)
3760                         return ret;
3761         }
3762         return 0;
3763 }
3764
3765 /* Obtain the current volatile values of an autocluster and mark them
3766    as new. */
3767 static void update_from_auto_cluster(struct v4l2_ctrl *master)
3768 {
3769         int i;
3770
3771         for (i = 1; i < master->ncontrols; i++)
3772                 cur_to_new(master->cluster[i]);
3773         if (!call_op(master, g_volatile_ctrl))
3774                 for (i = 1; i < master->ncontrols; i++)
3775                         if (master->cluster[i])
3776                                 master->cluster[i]->is_new = 1;
3777 }
3778
3779 /* Try or try-and-set controls */
3780 static int try_set_ext_ctrls_common(struct v4l2_fh *fh,
3781                                     struct v4l2_ctrl_handler *hdl,
3782                                     struct v4l2_ext_controls *cs,
3783                                     struct video_device *vdev, bool set)
3784 {
3785         struct v4l2_ctrl_helper helper[4];
3786         struct v4l2_ctrl_helper *helpers = helper;
3787         unsigned i, j;
3788         int ret;
3789
3790         cs->error_idx = cs->count;
3791
3792         /* Default value cannot be changed */
3793         if (cs->which == V4L2_CTRL_WHICH_DEF_VAL) {
3794                 dprintk(vdev, "%s: cannot change default value\n",
3795                         video_device_node_name(vdev));
3796                 return -EINVAL;
3797         }
3798
3799         cs->which = V4L2_CTRL_ID2WHICH(cs->which);
3800
3801         if (hdl == NULL) {
3802                 dprintk(vdev, "%s: invalid null control handler\n",
3803                         video_device_node_name(vdev));
3804                 return -EINVAL;
3805         }
3806
3807         if (cs->count == 0)
3808                 return class_check(hdl, cs->which);
3809
3810         if (cs->count > ARRAY_SIZE(helper)) {
3811                 helpers = kvmalloc_array(cs->count, sizeof(helper[0]),
3812                                          GFP_KERNEL);
3813                 if (!helpers)
3814                         return -ENOMEM;
3815         }
3816         ret = prepare_ext_ctrls(hdl, cs, helpers, vdev, false);
3817         if (!ret)
3818                 ret = validate_ctrls(cs, helpers, vdev, set);
3819         if (ret && set)
3820                 cs->error_idx = cs->count;
3821         for (i = 0; !ret && i < cs->count; i++) {
3822                 struct v4l2_ctrl *master;
3823                 u32 idx = i;
3824
3825                 if (helpers[i].mref == NULL)
3826                         continue;
3827
3828                 cs->error_idx = i;
3829                 master = helpers[i].mref->ctrl;
3830                 v4l2_ctrl_lock(master);
3831
3832                 /* Reset the 'is_new' flags of the cluster */
3833                 for (j = 0; j < master->ncontrols; j++)
3834                         if (master->cluster[j])
3835                                 master->cluster[j]->is_new = 0;
3836
3837                 /* For volatile autoclusters that are currently in auto mode
3838                    we need to discover if it will be set to manual mode.
3839                    If so, then we have to copy the current volatile values
3840                    first since those will become the new manual values (which
3841                    may be overwritten by explicit new values from this set
3842                    of controls). */
3843                 if (master->is_auto && master->has_volatiles &&
3844                                                 !is_cur_manual(master)) {
3845                         /* Pick an initial non-manual value */
3846                         s32 new_auto_val = master->manual_mode_value + 1;
3847                         u32 tmp_idx = idx;
3848
3849                         do {
3850                                 /* Check if the auto control is part of the
3851                                    list, and remember the new value. */
3852                                 if (helpers[tmp_idx].ref->ctrl == master)
3853                                         new_auto_val = cs->controls[tmp_idx].value;
3854                                 tmp_idx = helpers[tmp_idx].next;
3855                         } while (tmp_idx);
3856                         /* If the new value == the manual value, then copy
3857                            the current volatile values. */
3858                         if (new_auto_val == master->manual_mode_value)
3859                                 update_from_auto_cluster(master);
3860                 }
3861
3862                 /* Copy the new caller-supplied control values.
3863                    user_to_new() sets 'is_new' to 1. */
3864                 do {
3865                         struct v4l2_ctrl *ctrl = helpers[idx].ref->ctrl;
3866
3867                         ret = user_to_new(cs->controls + idx, ctrl);
3868                         if (!ret && ctrl->is_ptr)
3869                                 ret = validate_new(ctrl, ctrl->p_new);
3870                         idx = helpers[idx].next;
3871                 } while (!ret && idx);
3872
3873                 if (!ret)
3874                         ret = try_or_set_cluster(fh, master,
3875                                                  !hdl->req_obj.req && set, 0);
3876                 if (!ret && hdl->req_obj.req && set) {
3877                         for (j = 0; j < master->ncontrols; j++) {
3878                                 struct v4l2_ctrl_ref *ref =
3879                                         find_ref(hdl, master->cluster[j]->id);
3880
3881                                 new_to_req(ref);
3882                         }
3883                 }
3884
3885                 /* Copy the new values back to userspace. */
3886                 if (!ret) {
3887                         idx = i;
3888                         do {
3889                                 ret = new_to_user(cs->controls + idx,
3890                                                 helpers[idx].ref->ctrl);
3891                                 idx = helpers[idx].next;
3892                         } while (!ret && idx);
3893                 }
3894                 v4l2_ctrl_unlock(master);
3895         }
3896
3897         if (cs->count > ARRAY_SIZE(helper))
3898                 kvfree(helpers);
3899         return ret;
3900 }
3901
3902 static int try_set_ext_ctrls(struct v4l2_fh *fh,
3903                              struct v4l2_ctrl_handler *hdl,
3904                              struct video_device *vdev,
3905                              struct media_device *mdev,
3906                              struct v4l2_ext_controls *cs, bool set)
3907 {
3908         struct media_request_object *obj = NULL;
3909         struct media_request *req = NULL;
3910         int ret;
3911
3912         if (cs->which == V4L2_CTRL_WHICH_REQUEST_VAL) {
3913                 if (!mdev) {
3914                         dprintk(vdev, "%s: missing media device\n",
3915                                 video_device_node_name(vdev));
3916                         return -EINVAL;
3917                 }
3918
3919                 if (cs->request_fd < 0) {
3920                         dprintk(vdev, "%s: invalid request fd %d\n",
3921                                 video_device_node_name(vdev), cs->request_fd);
3922                         return -EINVAL;
3923                 }
3924
3925                 req = media_request_get_by_fd(mdev, cs->request_fd);
3926                 if (IS_ERR(req)) {
3927                         dprintk(vdev, "%s: cannot find request fd %d\n",
3928                                 video_device_node_name(vdev), cs->request_fd);
3929                         return PTR_ERR(req);
3930                 }
3931
3932                 ret = media_request_lock_for_update(req);
3933                 if (ret) {
3934                         dprintk(vdev, "%s: cannot lock request fd %d\n",
3935                                 video_device_node_name(vdev), cs->request_fd);
3936                         media_request_put(req);
3937                         return ret;
3938                 }
3939
3940                 obj = v4l2_ctrls_find_req_obj(hdl, req, set);
3941                 if (IS_ERR(obj)) {
3942                         dprintk(vdev,
3943                                 "%s: cannot find request object for request fd %d\n",
3944                                 video_device_node_name(vdev),
3945                                 cs->request_fd);
3946                         media_request_unlock_for_update(req);
3947                         media_request_put(req);
3948                         return PTR_ERR(obj);
3949                 }
3950                 hdl = container_of(obj, struct v4l2_ctrl_handler,
3951                                    req_obj);
3952         }
3953
3954         ret = try_set_ext_ctrls_common(fh, hdl, cs, vdev, set);
3955         if (ret)
3956                 dprintk(vdev,
3957                         "%s: try_set_ext_ctrls_common failed (%d)\n",
3958                         video_device_node_name(vdev), ret);
3959
3960         if (obj) {
3961                 media_request_unlock_for_update(req);
3962                 media_request_object_put(obj);
3963                 media_request_put(req);
3964         }
3965
3966         return ret;
3967 }
3968
3969 int v4l2_try_ext_ctrls(struct v4l2_ctrl_handler *hdl,
3970                        struct video_device *vdev,
3971                        struct media_device *mdev,
3972                        struct v4l2_ext_controls *cs)
3973 {
3974         return try_set_ext_ctrls(NULL, hdl, vdev, mdev, cs, false);
3975 }
3976 EXPORT_SYMBOL(v4l2_try_ext_ctrls);
3977
3978 int v4l2_s_ext_ctrls(struct v4l2_fh *fh,
3979                      struct v4l2_ctrl_handler *hdl,
3980                      struct video_device *vdev,
3981                      struct media_device *mdev,
3982                      struct v4l2_ext_controls *cs)
3983 {
3984         return try_set_ext_ctrls(fh, hdl, vdev, mdev, cs, true);
3985 }
3986 EXPORT_SYMBOL(v4l2_s_ext_ctrls);
3987
3988 /* Helper function for VIDIOC_S_CTRL compatibility */
3989 static int set_ctrl(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 ch_flags)
3990 {
3991         struct v4l2_ctrl *master = ctrl->cluster[0];
3992         int ret;
3993         int i;
3994
3995         /* Reset the 'is_new' flags of the cluster */
3996         for (i = 0; i < master->ncontrols; i++)
3997                 if (master->cluster[i])
3998                         master->cluster[i]->is_new = 0;
3999
4000         ret = validate_new(ctrl, ctrl->p_new);
4001         if (ret)
4002                 return ret;
4003
4004         /* For autoclusters with volatiles that are switched from auto to
4005            manual mode we have to update the current volatile values since
4006            those will become the initial manual values after such a switch. */
4007         if (master->is_auto && master->has_volatiles && ctrl == master &&
4008             !is_cur_manual(master) && ctrl->val == master->manual_mode_value)
4009                 update_from_auto_cluster(master);
4010
4011         ctrl->is_new = 1;
4012         return try_or_set_cluster(fh, master, true, ch_flags);
4013 }
4014
4015 /* Helper function for VIDIOC_S_CTRL compatibility */
4016 static int set_ctrl_lock(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl,
4017                          struct v4l2_ext_control *c)
4018 {
4019         int ret;
4020
4021         v4l2_ctrl_lock(ctrl);
4022         user_to_new(c, ctrl);
4023         ret = set_ctrl(fh, ctrl, 0);
4024         if (!ret)
4025                 cur_to_user(c, ctrl);
4026         v4l2_ctrl_unlock(ctrl);
4027         return ret;
4028 }
4029
4030 int v4l2_s_ctrl(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl,
4031                                         struct v4l2_control *control)
4032 {
4033         struct v4l2_ctrl *ctrl = v4l2_ctrl_find(hdl, control->id);
4034         struct v4l2_ext_control c = { control->id };
4035         int ret;
4036
4037         if (ctrl == NULL || !ctrl->is_int)
4038                 return -EINVAL;
4039
4040         if (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY)
4041                 return -EACCES;
4042
4043         c.value = control->value;
4044         ret = set_ctrl_lock(fh, ctrl, &c);
4045         control->value = c.value;
4046         return ret;
4047 }
4048 EXPORT_SYMBOL(v4l2_s_ctrl);
4049
4050 int __v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val)
4051 {
4052         lockdep_assert_held(ctrl->handler->lock);
4053
4054         /* It's a driver bug if this happens. */
4055         WARN_ON(!ctrl->is_int);
4056         ctrl->val = val;
4057         return set_ctrl(NULL, ctrl, 0);
4058 }
4059 EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl);
4060
4061 int __v4l2_ctrl_s_ctrl_int64(struct v4l2_ctrl *ctrl, s64 val)
4062 {
4063         lockdep_assert_held(ctrl->handler->lock);
4064
4065         /* It's a driver bug if this happens. */
4066         WARN_ON(ctrl->is_ptr || ctrl->type != V4L2_CTRL_TYPE_INTEGER64);
4067         *ctrl->p_new.p_s64 = val;
4068         return set_ctrl(NULL, ctrl, 0);
4069 }
4070 EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl_int64);
4071
4072 int __v4l2_ctrl_s_ctrl_string(struct v4l2_ctrl *ctrl, const char *s)
4073 {
4074         lockdep_assert_held(ctrl->handler->lock);
4075
4076         /* It's a driver bug if this happens. */
4077         WARN_ON(ctrl->type != V4L2_CTRL_TYPE_STRING);
4078         strscpy(ctrl->p_new.p_char, s, ctrl->maximum + 1);
4079         return set_ctrl(NULL, ctrl, 0);
4080 }
4081 EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl_string);
4082
4083 void v4l2_ctrl_request_complete(struct media_request *req,
4084                                 struct v4l2_ctrl_handler *main_hdl)
4085 {
4086         struct media_request_object *obj;
4087         struct v4l2_ctrl_handler *hdl;
4088         struct v4l2_ctrl_ref *ref;
4089
4090         if (!req || !main_hdl)
4091                 return;
4092
4093         /*
4094          * Note that it is valid if nothing was found. It means
4095          * that this request doesn't have any controls and so just
4096          * wants to leave the controls unchanged.
4097          */
4098         obj = media_request_object_find(req, &req_ops, main_hdl);
4099         if (!obj)
4100                 return;
4101         hdl = container_of(obj, struct v4l2_ctrl_handler, req_obj);
4102
4103         list_for_each_entry(ref, &hdl->ctrl_refs, node) {
4104                 struct v4l2_ctrl *ctrl = ref->ctrl;
4105                 struct v4l2_ctrl *master = ctrl->cluster[0];
4106                 unsigned int i;
4107
4108                 if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE) {
4109                         ref->req = ref;
4110
4111                         v4l2_ctrl_lock(master);
4112                         /* g_volatile_ctrl will update the current control values */
4113                         for (i = 0; i < master->ncontrols; i++)
4114                                 cur_to_new(master->cluster[i]);
4115                         call_op(master, g_volatile_ctrl);
4116                         new_to_req(ref);
4117                         v4l2_ctrl_unlock(master);
4118                         continue;
4119                 }
4120                 if (ref->req == ref)
4121                         continue;
4122
4123                 v4l2_ctrl_lock(ctrl);
4124                 if (ref->req)
4125                         ptr_to_ptr(ctrl, ref->req->p_req, ref->p_req);
4126                 else
4127                         ptr_to_ptr(ctrl, ctrl->p_cur, ref->p_req);
4128                 v4l2_ctrl_unlock(ctrl);
4129         }
4130
4131         WARN_ON(!hdl->request_is_queued);
4132         list_del_init(&hdl->requests_queued);
4133         hdl->request_is_queued = false;
4134         media_request_object_complete(obj);
4135         media_request_object_put(obj);
4136 }
4137 EXPORT_SYMBOL(v4l2_ctrl_request_complete);
4138
4139 int v4l2_ctrl_request_setup(struct media_request *req,
4140                              struct v4l2_ctrl_handler *main_hdl)
4141 {
4142         struct media_request_object *obj;
4143         struct v4l2_ctrl_handler *hdl;
4144         struct v4l2_ctrl_ref *ref;
4145         int ret = 0;
4146
4147         if (!req || !main_hdl)
4148                 return 0;
4149
4150         if (WARN_ON(req->state != MEDIA_REQUEST_STATE_QUEUED))
4151                 return -EBUSY;
4152
4153         /*
4154          * Note that it is valid if nothing was found. It means
4155          * that this request doesn't have any controls and so just
4156          * wants to leave the controls unchanged.
4157          */
4158         obj = media_request_object_find(req, &req_ops, main_hdl);
4159         if (!obj)
4160                 return 0;
4161         if (obj->completed) {
4162                 media_request_object_put(obj);
4163                 return -EBUSY;
4164         }
4165         hdl = container_of(obj, struct v4l2_ctrl_handler, req_obj);
4166
4167         list_for_each_entry(ref, &hdl->ctrl_refs, node)
4168                 ref->req_done = false;
4169
4170         list_for_each_entry(ref, &hdl->ctrl_refs, node) {
4171                 struct v4l2_ctrl *ctrl = ref->ctrl;
4172                 struct v4l2_ctrl *master = ctrl->cluster[0];
4173                 bool have_new_data = false;
4174                 int i;
4175
4176                 /*
4177                  * Skip if this control was already handled by a cluster.
4178                  * Skip button controls and read-only controls.
4179                  */
4180                 if (ref->req_done || ctrl->type == V4L2_CTRL_TYPE_BUTTON ||
4181                     (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY))
4182                         continue;
4183
4184                 v4l2_ctrl_lock(master);
4185                 for (i = 0; i < master->ncontrols; i++) {
4186                         if (master->cluster[i]) {
4187                                 struct v4l2_ctrl_ref *r =
4188                                         find_ref(hdl, master->cluster[i]->id);
4189
4190                                 if (r->req && r == r->req) {
4191                                         have_new_data = true;
4192                                         break;
4193                                 }
4194                         }
4195                 }
4196                 if (!have_new_data) {
4197                         v4l2_ctrl_unlock(master);
4198                         continue;
4199                 }
4200
4201                 for (i = 0; i < master->ncontrols; i++) {
4202                         if (master->cluster[i]) {
4203                                 struct v4l2_ctrl_ref *r =
4204                                         find_ref(hdl, master->cluster[i]->id);
4205
4206                                 req_to_new(r);
4207                                 master->cluster[i]->is_new = 1;
4208                                 r->req_done = true;
4209                         }
4210                 }
4211                 /*
4212                  * For volatile autoclusters that are currently in auto mode
4213                  * we need to discover if it will be set to manual mode.
4214                  * If so, then we have to copy the current volatile values
4215                  * first since those will become the new manual values (which
4216                  * may be overwritten by explicit new values from this set
4217                  * of controls).
4218                  */
4219                 if (master->is_auto && master->has_volatiles &&
4220                     !is_cur_manual(master)) {
4221                         s32 new_auto_val = *master->p_new.p_s32;
4222
4223                         /*
4224                          * If the new value == the manual value, then copy
4225                          * the current volatile values.
4226                          */
4227                         if (new_auto_val == master->manual_mode_value)
4228                                 update_from_auto_cluster(master);
4229                 }
4230
4231                 ret = try_or_set_cluster(NULL, master, true, 0);
4232                 v4l2_ctrl_unlock(master);
4233
4234                 if (ret)
4235                         break;
4236         }
4237
4238         media_request_object_put(obj);
4239         return ret;
4240 }
4241 EXPORT_SYMBOL(v4l2_ctrl_request_setup);
4242
4243 void v4l2_ctrl_notify(struct v4l2_ctrl *ctrl, v4l2_ctrl_notify_fnc notify, void *priv)
4244 {
4245         if (ctrl == NULL)
4246                 return;
4247         if (notify == NULL) {
4248                 ctrl->call_notify = 0;
4249                 return;
4250         }
4251         if (WARN_ON(ctrl->handler->notify && ctrl->handler->notify != notify))
4252                 return;
4253         ctrl->handler->notify = notify;
4254         ctrl->handler->notify_priv = priv;
4255         ctrl->call_notify = 1;
4256 }
4257 EXPORT_SYMBOL(v4l2_ctrl_notify);
4258
4259 int __v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl,
4260                         s64 min, s64 max, u64 step, s64 def)
4261 {
4262         bool value_changed;
4263         bool range_changed = false;
4264         int ret;
4265
4266         lockdep_assert_held(ctrl->handler->lock);
4267
4268         switch (ctrl->type) {
4269         case V4L2_CTRL_TYPE_INTEGER:
4270         case V4L2_CTRL_TYPE_INTEGER64:
4271         case V4L2_CTRL_TYPE_BOOLEAN:
4272         case V4L2_CTRL_TYPE_MENU:
4273         case V4L2_CTRL_TYPE_INTEGER_MENU:
4274         case V4L2_CTRL_TYPE_BITMASK:
4275         case V4L2_CTRL_TYPE_U8:
4276         case V4L2_CTRL_TYPE_U16:
4277         case V4L2_CTRL_TYPE_U32:
4278                 if (ctrl->is_array)
4279                         return -EINVAL;
4280                 ret = check_range(ctrl->type, min, max, step, def);
4281                 if (ret)
4282                         return ret;
4283                 break;
4284         default:
4285                 return -EINVAL;
4286         }
4287         if ((ctrl->minimum != min) || (ctrl->maximum != max) ||
4288                 (ctrl->step != step) || ctrl->default_value != def) {
4289                 range_changed = true;
4290                 ctrl->minimum = min;
4291                 ctrl->maximum = max;
4292                 ctrl->step = step;
4293                 ctrl->default_value = def;
4294         }
4295         cur_to_new(ctrl);
4296         if (validate_new(ctrl, ctrl->p_new)) {
4297                 if (ctrl->type == V4L2_CTRL_TYPE_INTEGER64)
4298                         *ctrl->p_new.p_s64 = def;
4299                 else
4300                         *ctrl->p_new.p_s32 = def;
4301         }
4302
4303         if (ctrl->type == V4L2_CTRL_TYPE_INTEGER64)
4304                 value_changed = *ctrl->p_new.p_s64 != *ctrl->p_cur.p_s64;
4305         else
4306                 value_changed = *ctrl->p_new.p_s32 != *ctrl->p_cur.p_s32;
4307         if (value_changed)
4308                 ret = set_ctrl(NULL, ctrl, V4L2_EVENT_CTRL_CH_RANGE);
4309         else if (range_changed)
4310                 send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_RANGE);
4311         return ret;
4312 }
4313 EXPORT_SYMBOL(__v4l2_ctrl_modify_range);
4314
4315 static int v4l2_ctrl_add_event(struct v4l2_subscribed_event *sev, unsigned elems)
4316 {
4317         struct v4l2_ctrl *ctrl = v4l2_ctrl_find(sev->fh->ctrl_handler, sev->id);
4318
4319         if (ctrl == NULL)
4320                 return -EINVAL;
4321
4322         v4l2_ctrl_lock(ctrl);
4323         list_add_tail(&sev->node, &ctrl->ev_subs);
4324         if (ctrl->type != V4L2_CTRL_TYPE_CTRL_CLASS &&
4325             (sev->flags & V4L2_EVENT_SUB_FL_SEND_INITIAL)) {
4326                 struct v4l2_event ev;
4327                 u32 changes = V4L2_EVENT_CTRL_CH_FLAGS;
4328
4329                 if (!(ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY))
4330                         changes |= V4L2_EVENT_CTRL_CH_VALUE;
4331                 fill_event(&ev, ctrl, changes);
4332                 /* Mark the queue as active, allowing this initial
4333                    event to be accepted. */
4334                 sev->elems = elems;
4335                 v4l2_event_queue_fh(sev->fh, &ev);
4336         }
4337         v4l2_ctrl_unlock(ctrl);
4338         return 0;
4339 }
4340
4341 static void v4l2_ctrl_del_event(struct v4l2_subscribed_event *sev)
4342 {
4343         struct v4l2_ctrl *ctrl = v4l2_ctrl_find(sev->fh->ctrl_handler, sev->id);
4344
4345         if (ctrl == NULL)
4346                 return;
4347
4348         v4l2_ctrl_lock(ctrl);
4349         list_del(&sev->node);
4350         v4l2_ctrl_unlock(ctrl);
4351 }
4352
4353 void v4l2_ctrl_replace(struct v4l2_event *old, const struct v4l2_event *new)
4354 {
4355         u32 old_changes = old->u.ctrl.changes;
4356
4357         old->u.ctrl = new->u.ctrl;
4358         old->u.ctrl.changes |= old_changes;
4359 }
4360 EXPORT_SYMBOL(v4l2_ctrl_replace);
4361
4362 void v4l2_ctrl_merge(const struct v4l2_event *old, struct v4l2_event *new)
4363 {
4364         new->u.ctrl.changes |= old->u.ctrl.changes;
4365 }
4366 EXPORT_SYMBOL(v4l2_ctrl_merge);
4367
4368 const struct v4l2_subscribed_event_ops v4l2_ctrl_sub_ev_ops = {
4369         .add = v4l2_ctrl_add_event,
4370         .del = v4l2_ctrl_del_event,
4371         .replace = v4l2_ctrl_replace,
4372         .merge = v4l2_ctrl_merge,
4373 };
4374 EXPORT_SYMBOL(v4l2_ctrl_sub_ev_ops);
4375
4376 int v4l2_ctrl_log_status(struct file *file, void *fh)
4377 {
4378         struct video_device *vfd = video_devdata(file);
4379         struct v4l2_fh *vfh = file->private_data;
4380
4381         if (test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) && vfd->v4l2_dev)
4382                 v4l2_ctrl_handler_log_status(vfh->ctrl_handler,
4383                         vfd->v4l2_dev->name);
4384         return 0;
4385 }
4386 EXPORT_SYMBOL(v4l2_ctrl_log_status);
4387
4388 int v4l2_ctrl_subscribe_event(struct v4l2_fh *fh,
4389                                 const struct v4l2_event_subscription *sub)
4390 {
4391         if (sub->type == V4L2_EVENT_CTRL)
4392                 return v4l2_event_subscribe(fh, sub, 0, &v4l2_ctrl_sub_ev_ops);
4393         return -EINVAL;
4394 }
4395 EXPORT_SYMBOL(v4l2_ctrl_subscribe_event);
4396
4397 int v4l2_ctrl_subdev_subscribe_event(struct v4l2_subdev *sd, struct v4l2_fh *fh,
4398                                      struct v4l2_event_subscription *sub)
4399 {
4400         if (!sd->ctrl_handler)
4401                 return -EINVAL;
4402         return v4l2_ctrl_subscribe_event(fh, sub);
4403 }
4404 EXPORT_SYMBOL(v4l2_ctrl_subdev_subscribe_event);
4405
4406 __poll_t v4l2_ctrl_poll(struct file *file, struct poll_table_struct *wait)
4407 {
4408         struct v4l2_fh *fh = file->private_data;
4409
4410         poll_wait(file, &fh->wait, wait);
4411         if (v4l2_event_pending(fh))
4412                 return EPOLLPRI;
4413         return 0;
4414 }
4415 EXPORT_SYMBOL(v4l2_ctrl_poll);
This page took 0.294124 seconds and 4 git commands to generate.