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