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