[go: nahoru, domu]

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		*min = *max = *step = *def = 0;
996		break;
997	case V4L2_CID_POWER_LINE_FREQUENCY:
998	case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
999	case V4L2_CID_MPEG_AUDIO_ENCODING:
1000	case V4L2_CID_MPEG_AUDIO_L1_BITRATE:
1001	case V4L2_CID_MPEG_AUDIO_L2_BITRATE:
1002	case V4L2_CID_MPEG_AUDIO_L3_BITRATE:
1003	case V4L2_CID_MPEG_AUDIO_AC3_BITRATE:
1004	case V4L2_CID_MPEG_AUDIO_MODE:
1005	case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION:
1006	case V4L2_CID_MPEG_AUDIO_EMPHASIS:
1007	case V4L2_CID_MPEG_AUDIO_CRC:
1008	case V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK:
1009	case V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK:
1010	case V4L2_CID_MPEG_VIDEO_ENCODING:
1011	case V4L2_CID_MPEG_VIDEO_ASPECT:
1012	case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
1013	case V4L2_CID_MPEG_STREAM_TYPE:
1014	case V4L2_CID_MPEG_STREAM_VBI_FMT:
1015	case V4L2_CID_EXPOSURE_AUTO:
1016	case V4L2_CID_AUTO_FOCUS_RANGE:
1017	case V4L2_CID_COLORFX:
1018	case V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE:
1019	case V4L2_CID_TUNE_PREEMPHASIS:
1020	case V4L2_CID_FLASH_LED_MODE:
1021	case V4L2_CID_FLASH_STROBE_SOURCE:
1022	case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
1023	case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:
1024	case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
1025	case V4L2_CID_MPEG_VIDEO_H264_LEVEL:
1026	case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE:
1027	case V4L2_CID_MPEG_VIDEO_H264_PROFILE:
1028	case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC:
1029	case V4L2_CID_MPEG_VIDEO_H264_SEI_FP_ARRANGEMENT_TYPE:
1030	case V4L2_CID_MPEG_VIDEO_H264_FMO_MAP_TYPE:
1031	case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL:
1032	case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE:
1033	case V4L2_CID_JPEG_CHROMA_SUBSAMPLING:
1034	case V4L2_CID_ISO_SENSITIVITY_AUTO:
1035	case V4L2_CID_EXPOSURE_METERING:
1036	case V4L2_CID_SCENE_MODE:
1037	case V4L2_CID_DV_TX_MODE:
1038	case V4L2_CID_DV_TX_RGB_RANGE:
1039	case V4L2_CID_DV_RX_RGB_RANGE:
1040	case V4L2_CID_TEST_PATTERN:
1041	case V4L2_CID_TUNE_DEEMPHASIS:
1042	case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL:
1043	case V4L2_CID_DETECT_MD_MODE:
1044		*type = V4L2_CTRL_TYPE_MENU;
1045		break;
1046	case V4L2_CID_LINK_FREQ:
1047		*type = V4L2_CTRL_TYPE_INTEGER_MENU;
1048		break;
1049	case V4L2_CID_RDS_TX_PS_NAME:
1050	case V4L2_CID_RDS_TX_RADIO_TEXT:
1051	case V4L2_CID_RDS_RX_PS_NAME:
1052	case V4L2_CID_RDS_RX_RADIO_TEXT:
1053		*type = V4L2_CTRL_TYPE_STRING;
1054		break;
1055	case V4L2_CID_ISO_SENSITIVITY:
1056	case V4L2_CID_AUTO_EXPOSURE_BIAS:
1057	case V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS:
1058	case V4L2_CID_MPEG_VIDEO_VPX_NUM_REF_FRAMES:
1059		*type = V4L2_CTRL_TYPE_INTEGER_MENU;
1060		break;
1061	case V4L2_CID_USER_CLASS:
1062	case V4L2_CID_CAMERA_CLASS:
1063	case V4L2_CID_MPEG_CLASS:
1064	case V4L2_CID_FM_TX_CLASS:
1065	case V4L2_CID_FLASH_CLASS:
1066	case V4L2_CID_JPEG_CLASS:
1067	case V4L2_CID_IMAGE_SOURCE_CLASS:
1068	case V4L2_CID_IMAGE_PROC_CLASS:
1069	case V4L2_CID_DV_CLASS:
1070	case V4L2_CID_FM_RX_CLASS:
1071	case V4L2_CID_RF_TUNER_CLASS:
1072	case V4L2_CID_DETECT_CLASS:
1073		*type = V4L2_CTRL_TYPE_CTRL_CLASS;
1074		/* You can neither read not write these */
1075		*flags |= V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_WRITE_ONLY;
1076		*min = *max = *step = *def = 0;
1077		break;
1078	case V4L2_CID_BG_COLOR:
1079		*type = V4L2_CTRL_TYPE_INTEGER;
1080		*step = 1;
1081		*min = 0;
1082		/* Max is calculated as RGB888 that is 2^24 */
1083		*max = 0xFFFFFF;
1084		break;
1085	case V4L2_CID_FLASH_FAULT:
1086	case V4L2_CID_JPEG_ACTIVE_MARKER:
1087	case V4L2_CID_3A_LOCK:
1088	case V4L2_CID_AUTO_FOCUS_STATUS:
1089	case V4L2_CID_DV_TX_HOTPLUG:
1090	case V4L2_CID_DV_TX_RXSENSE:
1091	case V4L2_CID_DV_TX_EDID_PRESENT:
1092	case V4L2_CID_DV_RX_POWER_PRESENT:
1093		*type = V4L2_CTRL_TYPE_BITMASK;
1094		break;
1095	case V4L2_CID_MIN_BUFFERS_FOR_CAPTURE:
1096	case V4L2_CID_MIN_BUFFERS_FOR_OUTPUT:
1097		*type = V4L2_CTRL_TYPE_INTEGER;
1098		*flags |= V4L2_CTRL_FLAG_READ_ONLY;
1099		break;
1100	case V4L2_CID_MPEG_VIDEO_DEC_PTS:
1101		*type = V4L2_CTRL_TYPE_INTEGER64;
1102		*flags |= V4L2_CTRL_FLAG_VOLATILE | V4L2_CTRL_FLAG_READ_ONLY;
1103		*min = *def = 0;
1104		*max = 0x1ffffffffLL;
1105		*step = 1;
1106		break;
1107	case V4L2_CID_MPEG_VIDEO_DEC_FRAME:
1108		*type = V4L2_CTRL_TYPE_INTEGER64;
1109		*flags |= V4L2_CTRL_FLAG_VOLATILE | V4L2_CTRL_FLAG_READ_ONLY;
1110		*min = *def = 0;
1111		*max = 0x7fffffffffffffffLL;
1112		*step = 1;
1113		break;
1114	case V4L2_CID_PIXEL_RATE:
1115		*type = V4L2_CTRL_TYPE_INTEGER64;
1116		*flags |= V4L2_CTRL_FLAG_READ_ONLY;
1117		break;
1118	case V4L2_CID_DETECT_MD_REGION_GRID:
1119		*type = V4L2_CTRL_TYPE_U8;
1120		break;
1121	case V4L2_CID_DETECT_MD_THRESHOLD_GRID:
1122		*type = V4L2_CTRL_TYPE_U16;
1123		break;
1124	case V4L2_CID_RDS_TX_ALT_FREQS:
1125		*type = V4L2_CTRL_TYPE_U32;
1126		break;
1127	default:
1128		*type = V4L2_CTRL_TYPE_INTEGER;
1129		break;
1130	}
1131	switch (id) {
1132	case V4L2_CID_MPEG_AUDIO_ENCODING:
1133	case V4L2_CID_MPEG_AUDIO_MODE:
1134	case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
1135	case V4L2_CID_MPEG_VIDEO_B_FRAMES:
1136	case V4L2_CID_MPEG_STREAM_TYPE:
1137		*flags |= V4L2_CTRL_FLAG_UPDATE;
1138		break;
1139	case V4L2_CID_AUDIO_VOLUME:
1140	case V4L2_CID_AUDIO_BALANCE:
1141	case V4L2_CID_AUDIO_BASS:
1142	case V4L2_CID_AUDIO_TREBLE:
1143	case V4L2_CID_BRIGHTNESS:
1144	case V4L2_CID_CONTRAST:
1145	case V4L2_CID_SATURATION:
1146	case V4L2_CID_HUE:
1147	case V4L2_CID_RED_BALANCE:
1148	case V4L2_CID_BLUE_BALANCE:
1149	case V4L2_CID_GAMMA:
1150	case V4L2_CID_SHARPNESS:
1151	case V4L2_CID_CHROMA_GAIN:
1152	case V4L2_CID_RDS_TX_DEVIATION:
1153	case V4L2_CID_AUDIO_LIMITER_RELEASE_TIME:
1154	case V4L2_CID_AUDIO_LIMITER_DEVIATION:
1155	case V4L2_CID_AUDIO_COMPRESSION_GAIN:
1156	case V4L2_CID_AUDIO_COMPRESSION_THRESHOLD:
1157	case V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME:
1158	case V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME:
1159	case V4L2_CID_PILOT_TONE_DEVIATION:
1160	case V4L2_CID_PILOT_TONE_FREQUENCY:
1161	case V4L2_CID_TUNE_POWER_LEVEL:
1162	case V4L2_CID_TUNE_ANTENNA_CAPACITOR:
1163	case V4L2_CID_RF_TUNER_LNA_GAIN:
1164	case V4L2_CID_RF_TUNER_MIXER_GAIN:
1165	case V4L2_CID_RF_TUNER_IF_GAIN:
1166	case V4L2_CID_RF_TUNER_BANDWIDTH:
1167	case V4L2_CID_DETECT_MD_GLOBAL_THRESHOLD:
1168		*flags |= V4L2_CTRL_FLAG_SLIDER;
1169		break;
1170	case V4L2_CID_PAN_RELATIVE:
1171	case V4L2_CID_TILT_RELATIVE:
1172	case V4L2_CID_FOCUS_RELATIVE:
1173	case V4L2_CID_IRIS_RELATIVE:
1174	case V4L2_CID_ZOOM_RELATIVE:
1175		*flags |= V4L2_CTRL_FLAG_WRITE_ONLY;
1176		break;
1177	case V4L2_CID_FLASH_STROBE_STATUS:
1178	case V4L2_CID_AUTO_FOCUS_STATUS:
1179	case V4L2_CID_FLASH_READY:
1180	case V4L2_CID_DV_TX_HOTPLUG:
1181	case V4L2_CID_DV_TX_RXSENSE:
1182	case V4L2_CID_DV_TX_EDID_PRESENT:
1183	case V4L2_CID_DV_RX_POWER_PRESENT:
1184	case V4L2_CID_RDS_RX_PTY:
1185	case V4L2_CID_RDS_RX_PS_NAME:
1186	case V4L2_CID_RDS_RX_RADIO_TEXT:
1187	case V4L2_CID_RDS_RX_TRAFFIC_ANNOUNCEMENT:
1188	case V4L2_CID_RDS_RX_TRAFFIC_PROGRAM:
1189	case V4L2_CID_RDS_RX_MUSIC_SPEECH:
1190		*flags |= V4L2_CTRL_FLAG_READ_ONLY;
1191		break;
1192	case V4L2_CID_RF_TUNER_PLL_LOCK:
1193		*flags |= V4L2_CTRL_FLAG_VOLATILE;
1194		break;
1195	}
1196}
1197EXPORT_SYMBOL(v4l2_ctrl_fill);
1198
1199static void fill_event(struct v4l2_event *ev, struct v4l2_ctrl *ctrl, u32 changes)
1200{
1201	memset(ev->reserved, 0, sizeof(ev->reserved));
1202	ev->type = V4L2_EVENT_CTRL;
1203	ev->id = ctrl->id;
1204	ev->u.ctrl.changes = changes;
1205	ev->u.ctrl.type = ctrl->type;
1206	ev->u.ctrl.flags = ctrl->flags;
1207	if (ctrl->is_ptr)
1208		ev->u.ctrl.value64 = 0;
1209	else
1210		ev->u.ctrl.value64 = *ctrl->p_cur.p_s64;
1211	ev->u.ctrl.minimum = ctrl->minimum;
1212	ev->u.ctrl.maximum = ctrl->maximum;
1213	if (ctrl->type == V4L2_CTRL_TYPE_MENU
1214	    || ctrl->type == V4L2_CTRL_TYPE_INTEGER_MENU)
1215		ev->u.ctrl.step = 1;
1216	else
1217		ev->u.ctrl.step = ctrl->step;
1218	ev->u.ctrl.default_value = ctrl->default_value;
1219}
1220
1221static void send_event(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 changes)
1222{
1223	struct v4l2_event ev;
1224	struct v4l2_subscribed_event *sev;
1225
1226	if (list_empty(&ctrl->ev_subs))
1227		return;
1228	fill_event(&ev, ctrl, changes);
1229
1230	list_for_each_entry(sev, &ctrl->ev_subs, node)
1231		if (sev->fh != fh ||
1232		    (sev->flags & V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK))
1233			v4l2_event_queue_fh(sev->fh, &ev);
1234}
1235
1236static bool std_equal(const struct v4l2_ctrl *ctrl, u32 idx,
1237		      union v4l2_ctrl_ptr ptr1,
1238		      union v4l2_ctrl_ptr ptr2)
1239{
1240	switch (ctrl->type) {
1241	case V4L2_CTRL_TYPE_BUTTON:
1242		return false;
1243	case V4L2_CTRL_TYPE_STRING:
1244		idx *= ctrl->elem_size;
1245		/* strings are always 0-terminated */
1246		return !strcmp(ptr1.p_char + idx, ptr2.p_char + idx);
1247	case V4L2_CTRL_TYPE_INTEGER64:
1248		return ptr1.p_s64[idx] == ptr2.p_s64[idx];
1249	case V4L2_CTRL_TYPE_U8:
1250		return ptr1.p_u8[idx] == ptr2.p_u8[idx];
1251	case V4L2_CTRL_TYPE_U16:
1252		return ptr1.p_u16[idx] == ptr2.p_u16[idx];
1253	case V4L2_CTRL_TYPE_U32:
1254		return ptr1.p_u32[idx] == ptr2.p_u32[idx];
1255	default:
1256		if (ctrl->is_int)
1257			return ptr1.p_s32[idx] == ptr2.p_s32[idx];
1258		idx *= ctrl->elem_size;
1259		return !memcmp(ptr1.p + idx, ptr2.p + idx, ctrl->elem_size);
1260	}
1261}
1262
1263static void std_init(const struct v4l2_ctrl *ctrl, u32 idx,
1264		     union v4l2_ctrl_ptr ptr)
1265{
1266	switch (ctrl->type) {
1267	case V4L2_CTRL_TYPE_STRING:
1268		idx *= ctrl->elem_size;
1269		memset(ptr.p_char + idx, ' ', ctrl->minimum);
1270		ptr.p_char[idx + ctrl->minimum] = '\0';
1271		break;
1272	case V4L2_CTRL_TYPE_INTEGER64:
1273		ptr.p_s64[idx] = ctrl->default_value;
1274		break;
1275	case V4L2_CTRL_TYPE_INTEGER:
1276	case V4L2_CTRL_TYPE_INTEGER_MENU:
1277	case V4L2_CTRL_TYPE_MENU:
1278	case V4L2_CTRL_TYPE_BITMASK:
1279	case V4L2_CTRL_TYPE_BOOLEAN:
1280		ptr.p_s32[idx] = ctrl->default_value;
1281		break;
1282	case V4L2_CTRL_TYPE_U8:
1283		ptr.p_u8[idx] = ctrl->default_value;
1284		break;
1285	case V4L2_CTRL_TYPE_U16:
1286		ptr.p_u16[idx] = ctrl->default_value;
1287		break;
1288	case V4L2_CTRL_TYPE_U32:
1289		ptr.p_u32[idx] = ctrl->default_value;
1290		break;
1291	default:
1292		idx *= ctrl->elem_size;
1293		memset(ptr.p + idx, 0, ctrl->elem_size);
1294		break;
1295	}
1296}
1297
1298static void std_log(const struct v4l2_ctrl *ctrl)
1299{
1300	union v4l2_ctrl_ptr ptr = ctrl->p_cur;
1301
1302	if (ctrl->is_array) {
1303		unsigned i;
1304
1305		for (i = 0; i < ctrl->nr_of_dims; i++)
1306			pr_cont("[%u]", ctrl->dims[i]);
1307		pr_cont(" ");
1308	}
1309
1310	switch (ctrl->type) {
1311	case V4L2_CTRL_TYPE_INTEGER:
1312		pr_cont("%d", *ptr.p_s32);
1313		break;
1314	case V4L2_CTRL_TYPE_BOOLEAN:
1315		pr_cont("%s", *ptr.p_s32 ? "true" : "false");
1316		break;
1317	case V4L2_CTRL_TYPE_MENU:
1318		pr_cont("%s", ctrl->qmenu[*ptr.p_s32]);
1319		break;
1320	case V4L2_CTRL_TYPE_INTEGER_MENU:
1321		pr_cont("%lld", ctrl->qmenu_int[*ptr.p_s32]);
1322		break;
1323	case V4L2_CTRL_TYPE_BITMASK:
1324		pr_cont("0x%08x", *ptr.p_s32);
1325		break;
1326	case V4L2_CTRL_TYPE_INTEGER64:
1327		pr_cont("%lld", *ptr.p_s64);
1328		break;
1329	case V4L2_CTRL_TYPE_STRING:
1330		pr_cont("%s", ptr.p_char);
1331		break;
1332	case V4L2_CTRL_TYPE_U8:
1333		pr_cont("%u", (unsigned)*ptr.p_u8);
1334		break;
1335	case V4L2_CTRL_TYPE_U16:
1336		pr_cont("%u", (unsigned)*ptr.p_u16);
1337		break;
1338	case V4L2_CTRL_TYPE_U32:
1339		pr_cont("%u", (unsigned)*ptr.p_u32);
1340		break;
1341	default:
1342		pr_cont("unknown type %d", ctrl->type);
1343		break;
1344	}
1345}
1346
1347/*
1348 * Round towards the closest legal value. Be careful when we are
1349 * close to the maximum range of the control type to prevent
1350 * wrap-arounds.
1351 */
1352#define ROUND_TO_RANGE(val, offset_type, ctrl)			\
1353({								\
1354	offset_type offset;					\
1355	if ((ctrl)->maximum >= 0 &&				\
1356	    val >= (ctrl)->maximum - (s32)((ctrl)->step / 2))	\
1357		val = (ctrl)->maximum;				\
1358	else							\
1359		val += (s32)((ctrl)->step / 2);			\
1360	val = clamp_t(typeof(val), val,				\
1361		      (ctrl)->minimum, (ctrl)->maximum);	\
1362	offset = (val) - (ctrl)->minimum;			\
1363	offset = (ctrl)->step * (offset / (u32)(ctrl)->step);	\
1364	val = (ctrl)->minimum + offset;				\
1365	0;							\
1366})
1367
1368/* Validate a new control */
1369static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx,
1370			union v4l2_ctrl_ptr ptr)
1371{
1372	size_t len;
1373	u64 offset;
1374	s64 val;
1375
1376	switch (ctrl->type) {
1377	case V4L2_CTRL_TYPE_INTEGER:
1378		return ROUND_TO_RANGE(ptr.p_s32[idx], u32, ctrl);
1379	case V4L2_CTRL_TYPE_INTEGER64:
1380		/*
1381		 * We can't use the ROUND_TO_RANGE define here due to
1382		 * the u64 divide that needs special care.
1383		 */
1384		val = ptr.p_s64[idx];
1385		if (ctrl->maximum >= 0 && val >= ctrl->maximum - (s64)(ctrl->step / 2))
1386			val = ctrl->maximum;
1387		else
1388			val += (s64)(ctrl->step / 2);
1389		val = clamp_t(s64, val, ctrl->minimum, ctrl->maximum);
1390		offset = val - ctrl->minimum;
1391		do_div(offset, ctrl->step);
1392		ptr.p_s64[idx] = ctrl->minimum + offset * ctrl->step;
1393		return 0;
1394	case V4L2_CTRL_TYPE_U8:
1395		return ROUND_TO_RANGE(ptr.p_u8[idx], u8, ctrl);
1396	case V4L2_CTRL_TYPE_U16:
1397		return ROUND_TO_RANGE(ptr.p_u16[idx], u16, ctrl);
1398	case V4L2_CTRL_TYPE_U32:
1399		return ROUND_TO_RANGE(ptr.p_u32[idx], u32, ctrl);
1400
1401	case V4L2_CTRL_TYPE_BOOLEAN:
1402		ptr.p_s32[idx] = !!ptr.p_s32[idx];
1403		return 0;
1404
1405	case V4L2_CTRL_TYPE_MENU:
1406	case V4L2_CTRL_TYPE_INTEGER_MENU:
1407		if (ptr.p_s32[idx] < ctrl->minimum || ptr.p_s32[idx] > ctrl->maximum)
1408			return -ERANGE;
1409		if (ctrl->menu_skip_mask & (1 << ptr.p_s32[idx]))
1410			return -EINVAL;
1411		if (ctrl->type == V4L2_CTRL_TYPE_MENU &&
1412		    ctrl->qmenu[ptr.p_s32[idx]][0] == '\0')
1413			return -EINVAL;
1414		return 0;
1415
1416	case V4L2_CTRL_TYPE_BITMASK:
1417		ptr.p_s32[idx] &= ctrl->maximum;
1418		return 0;
1419
1420	case V4L2_CTRL_TYPE_BUTTON:
1421	case V4L2_CTRL_TYPE_CTRL_CLASS:
1422		ptr.p_s32[idx] = 0;
1423		return 0;
1424
1425	case V4L2_CTRL_TYPE_STRING:
1426		idx *= ctrl->elem_size;
1427		len = strlen(ptr.p_char + idx);
1428		if (len < ctrl->minimum)
1429			return -ERANGE;
1430		if ((len - (u32)ctrl->minimum) % (u32)ctrl->step)
1431			return -ERANGE;
1432		return 0;
1433
1434	default:
1435		return -EINVAL;
1436	}
1437}
1438
1439static const struct v4l2_ctrl_type_ops std_type_ops = {
1440	.equal = std_equal,
1441	.init = std_init,
1442	.log = std_log,
1443	.validate = std_validate,
1444};
1445
1446/* Helper function: copy the given control value back to the caller */
1447static int ptr_to_user(struct v4l2_ext_control *c,
1448		       struct v4l2_ctrl *ctrl,
1449		       union v4l2_ctrl_ptr ptr)
1450{
1451	u32 len;
1452
1453	if (ctrl->is_ptr && !ctrl->is_string)
1454		return copy_to_user(c->ptr, ptr.p, c->size) ?
1455		       -EFAULT : 0;
1456
1457	switch (ctrl->type) {
1458	case V4L2_CTRL_TYPE_STRING:
1459		len = strlen(ptr.p_char);
1460		if (c->size < len + 1) {
1461			c->size = ctrl->elem_size;
1462			return -ENOSPC;
1463		}
1464		return copy_to_user(c->string, ptr.p_char, len + 1) ?
1465		       -EFAULT : 0;
1466	case V4L2_CTRL_TYPE_INTEGER64:
1467		c->value64 = *ptr.p_s64;
1468		break;
1469	default:
1470		c->value = *ptr.p_s32;
1471		break;
1472	}
1473	return 0;
1474}
1475
1476/* Helper function: copy the current control value back to the caller */
1477static int cur_to_user(struct v4l2_ext_control *c,
1478		       struct v4l2_ctrl *ctrl)
1479{
1480	return ptr_to_user(c, ctrl, ctrl->p_cur);
1481}
1482
1483/* Helper function: copy the new control value back to the caller */
1484static int new_to_user(struct v4l2_ext_control *c,
1485		       struct v4l2_ctrl *ctrl)
1486{
1487	return ptr_to_user(c, ctrl, ctrl->p_new);
1488}
1489
1490/* Helper function: copy the caller-provider value to the given control value */
1491static int user_to_ptr(struct v4l2_ext_control *c,
1492		       struct v4l2_ctrl *ctrl,
1493		       union v4l2_ctrl_ptr ptr)
1494{
1495	int ret;
1496	u32 size;
1497
1498	ctrl->is_new = 1;
1499	if (ctrl->is_ptr && !ctrl->is_string) {
1500		unsigned idx;
1501
1502		ret = copy_from_user(ptr.p, c->ptr, c->size) ? -EFAULT : 0;
1503		if (ret || !ctrl->is_array)
1504			return ret;
1505		for (idx = c->size / ctrl->elem_size; idx < ctrl->elems; idx++)
1506			ctrl->type_ops->init(ctrl, idx, ptr);
1507		return 0;
1508	}
1509
1510	switch (ctrl->type) {
1511	case V4L2_CTRL_TYPE_INTEGER64:
1512		*ptr.p_s64 = c->value64;
1513		break;
1514	case V4L2_CTRL_TYPE_STRING:
1515		size = c->size;
1516		if (size == 0)
1517			return -ERANGE;
1518		if (size > ctrl->maximum + 1)
1519			size = ctrl->maximum + 1;
1520		ret = copy_from_user(ptr.p_char, c->string, size) ? -EFAULT : 0;
1521		if (!ret) {
1522			char last = ptr.p_char[size - 1];
1523
1524			ptr.p_char[size - 1] = 0;
1525			/* If the string was longer than ctrl->maximum,
1526			   then return an error. */
1527			if (strlen(ptr.p_char) == ctrl->maximum && last)
1528				return -ERANGE;
1529		}
1530		return ret;
1531	default:
1532		*ptr.p_s32 = c->value;
1533		break;
1534	}
1535	return 0;
1536}
1537
1538/* Helper function: copy the caller-provider value as the new control value */
1539static int user_to_new(struct v4l2_ext_control *c,
1540		       struct v4l2_ctrl *ctrl)
1541{
1542	return user_to_ptr(c, ctrl, ctrl->p_new);
1543}
1544
1545/* Copy the one value to another. */
1546static void ptr_to_ptr(struct v4l2_ctrl *ctrl,
1547		       union v4l2_ctrl_ptr from, union v4l2_ctrl_ptr to)
1548{
1549	if (ctrl == NULL)
1550		return;
1551	memcpy(to.p, from.p, ctrl->elems * ctrl->elem_size);
1552}
1553
1554/* Copy the new value to the current value. */
1555static void new_to_cur(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 ch_flags)
1556{
1557	bool changed;
1558
1559	if (ctrl == NULL)
1560		return;
1561
1562	/* has_changed is set by cluster_changed */
1563	changed = ctrl->has_changed;
1564	if (changed)
1565		ptr_to_ptr(ctrl, ctrl->p_new, ctrl->p_cur);
1566
1567	if (ch_flags & V4L2_EVENT_CTRL_CH_FLAGS) {
1568		/* Note: CH_FLAGS is only set for auto clusters. */
1569		ctrl->flags &=
1570			~(V4L2_CTRL_FLAG_INACTIVE | V4L2_CTRL_FLAG_VOLATILE);
1571		if (!is_cur_manual(ctrl->cluster[0])) {
1572			ctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
1573			if (ctrl->cluster[0]->has_volatiles)
1574				ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE;
1575		}
1576		fh = NULL;
1577	}
1578	if (changed || ch_flags) {
1579		/* If a control was changed that was not one of the controls
1580		   modified by the application, then send the event to all. */
1581		if (!ctrl->is_new)
1582			fh = NULL;
1583		send_event(fh, ctrl,
1584			(changed ? V4L2_EVENT_CTRL_CH_VALUE : 0) | ch_flags);
1585		if (ctrl->call_notify && changed && ctrl->handler->notify)
1586			ctrl->handler->notify(ctrl, ctrl->handler->notify_priv);
1587	}
1588}
1589
1590/* Copy the current value to the new value */
1591static void cur_to_new(struct v4l2_ctrl *ctrl)
1592{
1593	if (ctrl == NULL)
1594		return;
1595	ptr_to_ptr(ctrl, ctrl->p_cur, ctrl->p_new);
1596}
1597
1598/* Return non-zero if one or more of the controls in the cluster has a new
1599   value that differs from the current value. */
1600static int cluster_changed(struct v4l2_ctrl *master)
1601{
1602	bool changed = false;
1603	unsigned idx;
1604	int i;
1605
1606	for (i = 0; i < master->ncontrols; i++) {
1607		struct v4l2_ctrl *ctrl = master->cluster[i];
1608		bool ctrl_changed = false;
1609
1610		if (ctrl == NULL)
1611			continue;
1612		for (idx = 0; !ctrl_changed && idx < ctrl->elems; idx++)
1613			ctrl_changed = !ctrl->type_ops->equal(ctrl, idx,
1614				ctrl->p_cur, ctrl->p_new);
1615		ctrl->has_changed = ctrl_changed;
1616		changed |= ctrl->has_changed;
1617	}
1618	return changed;
1619}
1620
1621/* Control range checking */
1622static int check_range(enum v4l2_ctrl_type type,
1623		s64 min, s64 max, u64 step, s64 def)
1624{
1625	switch (type) {
1626	case V4L2_CTRL_TYPE_BOOLEAN:
1627		if (step != 1 || max > 1 || min < 0)
1628			return -ERANGE;
1629		/* fall through */
1630	case V4L2_CTRL_TYPE_U8:
1631	case V4L2_CTRL_TYPE_U16:
1632	case V4L2_CTRL_TYPE_U32:
1633	case V4L2_CTRL_TYPE_INTEGER:
1634	case V4L2_CTRL_TYPE_INTEGER64:
1635		if (step == 0 || min > max || def < min || def > max)
1636			return -ERANGE;
1637		return 0;
1638	case V4L2_CTRL_TYPE_BITMASK:
1639		if (step || min || !max || (def & ~max))
1640			return -ERANGE;
1641		return 0;
1642	case V4L2_CTRL_TYPE_MENU:
1643	case V4L2_CTRL_TYPE_INTEGER_MENU:
1644		if (min > max || def < min || def > max)
1645			return -ERANGE;
1646		/* Note: step == menu_skip_mask for menu controls.
1647		   So here we check if the default value is masked out. */
1648		if (step && ((1 << def) & step))
1649			return -EINVAL;
1650		return 0;
1651	case V4L2_CTRL_TYPE_STRING:
1652		if (min > max || min < 0 || step < 1 || def)
1653			return -ERANGE;
1654		return 0;
1655	default:
1656		return 0;
1657	}
1658}
1659
1660/* Validate a new control */
1661static int validate_new(const struct v4l2_ctrl *ctrl,
1662			struct v4l2_ext_control *c)
1663{
1664	union v4l2_ctrl_ptr ptr;
1665	unsigned idx;
1666	int err = 0;
1667
1668	if (!ctrl->is_ptr) {
1669		switch (ctrl->type) {
1670		case V4L2_CTRL_TYPE_INTEGER:
1671		case V4L2_CTRL_TYPE_INTEGER_MENU:
1672		case V4L2_CTRL_TYPE_MENU:
1673		case V4L2_CTRL_TYPE_BITMASK:
1674		case V4L2_CTRL_TYPE_BOOLEAN:
1675		case V4L2_CTRL_TYPE_BUTTON:
1676		case V4L2_CTRL_TYPE_CTRL_CLASS:
1677			ptr.p_s32 = &c->value;
1678			return ctrl->type_ops->validate(ctrl, 0, ptr);
1679
1680		case V4L2_CTRL_TYPE_INTEGER64:
1681			ptr.p_s64 = &c->value64;
1682			return ctrl->type_ops->validate(ctrl, 0, ptr);
1683		default:
1684			break;
1685		}
1686	}
1687	ptr.p = c->ptr;
1688	for (idx = 0; !err && idx < c->size / ctrl->elem_size; idx++)
1689		err = ctrl->type_ops->validate(ctrl, idx, ptr);
1690	return err;
1691}
1692
1693static inline u32 node2id(struct list_head *node)
1694{
1695	return list_entry(node, struct v4l2_ctrl_ref, node)->ctrl->id;
1696}
1697
1698/* Set the handler's error code if it wasn't set earlier already */
1699static inline int handler_set_err(struct v4l2_ctrl_handler *hdl, int err)
1700{
1701	if (hdl->error == 0)
1702		hdl->error = err;
1703	return err;
1704}
1705
1706/* Initialize the handler */
1707int v4l2_ctrl_handler_init_class(struct v4l2_ctrl_handler *hdl,
1708				 unsigned nr_of_controls_hint,
1709				 struct lock_class_key *key, const char *name)
1710{
1711	hdl->lock = &hdl->_lock;
1712	mutex_init(hdl->lock);
1713	lockdep_set_class_and_name(hdl->lock, key, name);
1714	INIT_LIST_HEAD(&hdl->ctrls);
1715	INIT_LIST_HEAD(&hdl->ctrl_refs);
1716	hdl->nr_of_buckets = 1 + nr_of_controls_hint / 8;
1717	hdl->buckets = kcalloc(hdl->nr_of_buckets, sizeof(hdl->buckets[0]),
1718			       GFP_KERNEL);
1719	hdl->error = hdl->buckets ? 0 : -ENOMEM;
1720	return hdl->error;
1721}
1722EXPORT_SYMBOL(v4l2_ctrl_handler_init_class);
1723
1724/* Free all controls and control refs */
1725void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)
1726{
1727	struct v4l2_ctrl_ref *ref, *next_ref;
1728	struct v4l2_ctrl *ctrl, *next_ctrl;
1729	struct v4l2_subscribed_event *sev, *next_sev;
1730
1731	if (hdl == NULL || hdl->buckets == NULL)
1732		return;
1733
1734	mutex_lock(hdl->lock);
1735	/* Free all nodes */
1736	list_for_each_entry_safe(ref, next_ref, &hdl->ctrl_refs, node) {
1737		list_del(&ref->node);
1738		kfree(ref);
1739	}
1740	/* Free all controls owned by the handler */
1741	list_for_each_entry_safe(ctrl, next_ctrl, &hdl->ctrls, node) {
1742		list_del(&ctrl->node);
1743		list_for_each_entry_safe(sev, next_sev, &ctrl->ev_subs, node)
1744			list_del(&sev->node);
1745		kfree(ctrl);
1746	}
1747	kfree(hdl->buckets);
1748	hdl->buckets = NULL;
1749	hdl->cached = NULL;
1750	hdl->error = 0;
1751	mutex_unlock(hdl->lock);
1752}
1753EXPORT_SYMBOL(v4l2_ctrl_handler_free);
1754
1755/* For backwards compatibility: V4L2_CID_PRIVATE_BASE should no longer
1756   be used except in G_CTRL, S_CTRL, QUERYCTRL and QUERYMENU when dealing
1757   with applications that do not use the NEXT_CTRL flag.
1758
1759   We just find the n-th private user control. It's O(N), but that should not
1760   be an issue in this particular case. */
1761static struct v4l2_ctrl_ref *find_private_ref(
1762		struct v4l2_ctrl_handler *hdl, u32 id)
1763{
1764	struct v4l2_ctrl_ref *ref;
1765
1766	id -= V4L2_CID_PRIVATE_BASE;
1767	list_for_each_entry(ref, &hdl->ctrl_refs, node) {
1768		/* Search for private user controls that are compatible with
1769		   VIDIOC_G/S_CTRL. */
1770		if (V4L2_CTRL_ID2CLASS(ref->ctrl->id) == V4L2_CTRL_CLASS_USER &&
1771		    V4L2_CTRL_DRIVER_PRIV(ref->ctrl->id)) {
1772			if (!ref->ctrl->is_int)
1773				continue;
1774			if (id == 0)
1775				return ref;
1776			id--;
1777		}
1778	}
1779	return NULL;
1780}
1781
1782/* Find a control with the given ID. */
1783static struct v4l2_ctrl_ref *find_ref(struct v4l2_ctrl_handler *hdl, u32 id)
1784{
1785	struct v4l2_ctrl_ref *ref;
1786	int bucket;
1787
1788	id &= V4L2_CTRL_ID_MASK;
1789
1790	/* Old-style private controls need special handling */
1791	if (id >= V4L2_CID_PRIVATE_BASE)
1792		return find_private_ref(hdl, id);
1793	bucket = id % hdl->nr_of_buckets;
1794
1795	/* Simple optimization: cache the last control found */
1796	if (hdl->cached && hdl->cached->ctrl->id == id)
1797		return hdl->cached;
1798
1799	/* Not in cache, search the hash */
1800	ref = hdl->buckets ? hdl->buckets[bucket] : NULL;
1801	while (ref && ref->ctrl->id != id)
1802		ref = ref->next;
1803
1804	if (ref)
1805		hdl->cached = ref; /* cache it! */
1806	return ref;
1807}
1808
1809/* Find a control with the given ID. Take the handler's lock first. */
1810static struct v4l2_ctrl_ref *find_ref_lock(
1811		struct v4l2_ctrl_handler *hdl, u32 id)
1812{
1813	struct v4l2_ctrl_ref *ref = NULL;
1814
1815	if (hdl) {
1816		mutex_lock(hdl->lock);
1817		ref = find_ref(hdl, id);
1818		mutex_unlock(hdl->lock);
1819	}
1820	return ref;
1821}
1822
1823/* Find a control with the given ID. */
1824struct v4l2_ctrl *v4l2_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id)
1825{
1826	struct v4l2_ctrl_ref *ref = find_ref_lock(hdl, id);
1827
1828	return ref ? ref->ctrl : NULL;
1829}
1830EXPORT_SYMBOL(v4l2_ctrl_find);
1831
1832/* Allocate a new v4l2_ctrl_ref and hook it into the handler. */
1833static int handler_new_ref(struct v4l2_ctrl_handler *hdl,
1834			   struct v4l2_ctrl *ctrl)
1835{
1836	struct v4l2_ctrl_ref *ref;
1837	struct v4l2_ctrl_ref *new_ref;
1838	u32 id = ctrl->id;
1839	u32 class_ctrl = V4L2_CTRL_ID2CLASS(id) | 1;
1840	int bucket = id % hdl->nr_of_buckets;	/* which bucket to use */
1841
1842	/*
1843	 * Automatically add the control class if it is not yet present and
1844	 * the new control is not a compound control.
1845	 */
1846	if (ctrl->type < V4L2_CTRL_COMPOUND_TYPES &&
1847	    id != class_ctrl && find_ref_lock(hdl, class_ctrl) == NULL)
1848		if (!v4l2_ctrl_new_std(hdl, NULL, class_ctrl, 0, 0, 0, 0))
1849			return hdl->error;
1850
1851	if (hdl->error)
1852		return hdl->error;
1853
1854	new_ref = kzalloc(sizeof(*new_ref), GFP_KERNEL);
1855	if (!new_ref)
1856		return handler_set_err(hdl, -ENOMEM);
1857	new_ref->ctrl = ctrl;
1858	if (ctrl->handler == hdl) {
1859		/* By default each control starts in a cluster of its own.
1860		   new_ref->ctrl is basically a cluster array with one
1861		   element, so that's perfect to use as the cluster pointer.
1862		   But only do this for the handler that owns the control. */
1863		ctrl->cluster = &new_ref->ctrl;
1864		ctrl->ncontrols = 1;
1865	}
1866
1867	INIT_LIST_HEAD(&new_ref->node);
1868
1869	mutex_lock(hdl->lock);
1870
1871	/* Add immediately at the end of the list if the list is empty, or if
1872	   the last element in the list has a lower ID.
1873	   This ensures that when elements are added in ascending order the
1874	   insertion is an O(1) operation. */
1875	if (list_empty(&hdl->ctrl_refs) || id > node2id(hdl->ctrl_refs.prev)) {
1876		list_add_tail(&new_ref->node, &hdl->ctrl_refs);
1877		goto insert_in_hash;
1878	}
1879
1880	/* Find insert position in sorted list */
1881	list_for_each_entry(ref, &hdl->ctrl_refs, node) {
1882		if (ref->ctrl->id < id)
1883			continue;
1884		/* Don't add duplicates */
1885		if (ref->ctrl->id == id) {
1886			kfree(new_ref);
1887			goto unlock;
1888		}
1889		list_add(&new_ref->node, ref->node.prev);
1890		break;
1891	}
1892
1893insert_in_hash:
1894	/* Insert the control node in the hash */
1895	new_ref->next = hdl->buckets[bucket];
1896	hdl->buckets[bucket] = new_ref;
1897
1898unlock:
1899	mutex_unlock(hdl->lock);
1900	return 0;
1901}
1902
1903/* Add a new control */
1904static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
1905			const struct v4l2_ctrl_ops *ops,
1906			const struct v4l2_ctrl_type_ops *type_ops,
1907			u32 id, const char *name, enum v4l2_ctrl_type type,
1908			s64 min, s64 max, u64 step, s64 def,
1909			const u32 dims[V4L2_CTRL_MAX_DIMS], u32 elem_size,
1910			u32 flags, const char * const *qmenu,
1911			const s64 *qmenu_int, void *priv)
1912{
1913	struct v4l2_ctrl *ctrl;
1914	unsigned sz_extra;
1915	unsigned nr_of_dims = 0;
1916	unsigned elems = 1;
1917	bool is_array;
1918	unsigned tot_ctrl_size;
1919	unsigned idx;
1920	void *data;
1921	int err;
1922
1923	if (hdl->error)
1924		return NULL;
1925
1926	while (dims && dims[nr_of_dims]) {
1927		elems *= dims[nr_of_dims];
1928		nr_of_dims++;
1929		if (nr_of_dims == V4L2_CTRL_MAX_DIMS)
1930			break;
1931	}
1932	is_array = nr_of_dims > 0;
1933
1934	/* Prefill elem_size for all types handled by std_type_ops */
1935	switch (type) {
1936	case V4L2_CTRL_TYPE_INTEGER64:
1937		elem_size = sizeof(s64);
1938		break;
1939	case V4L2_CTRL_TYPE_STRING:
1940		elem_size = max + 1;
1941		break;
1942	case V4L2_CTRL_TYPE_U8:
1943		elem_size = sizeof(u8);
1944		break;
1945	case V4L2_CTRL_TYPE_U16:
1946		elem_size = sizeof(u16);
1947		break;
1948	case V4L2_CTRL_TYPE_U32:
1949		elem_size = sizeof(u32);
1950		break;
1951	default:
1952		if (type < V4L2_CTRL_COMPOUND_TYPES)
1953			elem_size = sizeof(s32);
1954		break;
1955	}
1956	tot_ctrl_size = elem_size * elems;
1957
1958	/* Sanity checks */
1959	if (id == 0 || name == NULL || !elem_size ||
1960	    id >= V4L2_CID_PRIVATE_BASE ||
1961	    (type == V4L2_CTRL_TYPE_MENU && qmenu == NULL) ||
1962	    (type == V4L2_CTRL_TYPE_INTEGER_MENU && qmenu_int == NULL)) {
1963		handler_set_err(hdl, -ERANGE);
1964		return NULL;
1965	}
1966	err = check_range(type, min, max, step, def);
1967	if (err) {
1968		handler_set_err(hdl, err);
1969		return NULL;
1970	}
1971	if (type == V4L2_CTRL_TYPE_BITMASK && ((def & ~max) || min || step)) {
1972		handler_set_err(hdl, -ERANGE);
1973		return NULL;
1974	}
1975	if (is_array &&
1976	    (type == V4L2_CTRL_TYPE_BUTTON ||
1977	     type == V4L2_CTRL_TYPE_CTRL_CLASS)) {
1978		handler_set_err(hdl, -EINVAL);
1979		return NULL;
1980	}
1981
1982	sz_extra = 0;
1983	if (type == V4L2_CTRL_TYPE_BUTTON)
1984		flags |= V4L2_CTRL_FLAG_WRITE_ONLY;
1985	else if (type == V4L2_CTRL_TYPE_CTRL_CLASS)
1986		flags |= V4L2_CTRL_FLAG_READ_ONLY;
1987	else if (type == V4L2_CTRL_TYPE_INTEGER64 ||
1988		 type == V4L2_CTRL_TYPE_STRING ||
1989		 type >= V4L2_CTRL_COMPOUND_TYPES ||
1990		 is_array)
1991		sz_extra += 2 * tot_ctrl_size;
1992
1993	ctrl = kzalloc(sizeof(*ctrl) + sz_extra, GFP_KERNEL);
1994	if (ctrl == NULL) {
1995		handler_set_err(hdl, -ENOMEM);
1996		return NULL;
1997	}
1998
1999	INIT_LIST_HEAD(&ctrl->node);
2000	INIT_LIST_HEAD(&ctrl->ev_subs);
2001	ctrl->handler = hdl;
2002	ctrl->ops = ops;
2003	ctrl->type_ops = type_ops ? type_ops : &std_type_ops;
2004	ctrl->id = id;
2005	ctrl->name = name;
2006	ctrl->type = type;
2007	ctrl->flags = flags;
2008	ctrl->minimum = min;
2009	ctrl->maximum = max;
2010	ctrl->step = step;
2011	ctrl->default_value = def;
2012	ctrl->is_string = !is_array && type == V4L2_CTRL_TYPE_STRING;
2013	ctrl->is_ptr = is_array || type >= V4L2_CTRL_COMPOUND_TYPES || ctrl->is_string;
2014	ctrl->is_int = !ctrl->is_ptr && type != V4L2_CTRL_TYPE_INTEGER64;
2015	ctrl->is_array = is_array;
2016	ctrl->elems = elems;
2017	ctrl->nr_of_dims = nr_of_dims;
2018	if (nr_of_dims)
2019		memcpy(ctrl->dims, dims, nr_of_dims * sizeof(dims[0]));
2020	ctrl->elem_size = elem_size;
2021	if (type == V4L2_CTRL_TYPE_MENU)
2022		ctrl->qmenu = qmenu;
2023	else if (type == V4L2_CTRL_TYPE_INTEGER_MENU)
2024		ctrl->qmenu_int = qmenu_int;
2025	ctrl->priv = priv;
2026	ctrl->cur.val = ctrl->val = def;
2027	data = &ctrl[1];
2028
2029	if (!ctrl->is_int) {
2030		ctrl->p_new.p = data;
2031		ctrl->p_cur.p = data + tot_ctrl_size;
2032	} else {
2033		ctrl->p_new.p = &ctrl->val;
2034		ctrl->p_cur.p = &ctrl->cur.val;
2035	}
2036	for (idx = 0; idx < elems; idx++) {
2037		ctrl->type_ops->init(ctrl, idx, ctrl->p_cur);
2038		ctrl->type_ops->init(ctrl, idx, ctrl->p_new);
2039	}
2040
2041	if (handler_new_ref(hdl, ctrl)) {
2042		kfree(ctrl);
2043		return NULL;
2044	}
2045	mutex_lock(hdl->lock);
2046	list_add_tail(&ctrl->node, &hdl->ctrls);
2047	mutex_unlock(hdl->lock);
2048	return ctrl;
2049}
2050
2051struct v4l2_ctrl *v4l2_ctrl_new_custom(struct v4l2_ctrl_handler *hdl,
2052			const struct v4l2_ctrl_config *cfg, void *priv)
2053{
2054	bool is_menu;
2055	struct v4l2_ctrl *ctrl;
2056	const char *name = cfg->name;
2057	const char * const *qmenu = cfg->qmenu;
2058	const s64 *qmenu_int = cfg->qmenu_int;
2059	enum v4l2_ctrl_type type = cfg->type;
2060	u32 flags = cfg->flags;
2061	s64 min = cfg->min;
2062	s64 max = cfg->max;
2063	u64 step = cfg->step;
2064	s64 def = cfg->def;
2065
2066	if (name == NULL)
2067		v4l2_ctrl_fill(cfg->id, &name, &type, &min, &max, &step,
2068								&def, &flags);
2069
2070	is_menu = (cfg->type == V4L2_CTRL_TYPE_MENU ||
2071		   cfg->type == V4L2_CTRL_TYPE_INTEGER_MENU);
2072	if (is_menu)
2073		WARN_ON(step);
2074	else
2075		WARN_ON(cfg->menu_skip_mask);
2076	if (cfg->type == V4L2_CTRL_TYPE_MENU && qmenu == NULL)
2077		qmenu = v4l2_ctrl_get_menu(cfg->id);
2078	else if (cfg->type == V4L2_CTRL_TYPE_INTEGER_MENU &&
2079		 qmenu_int == NULL) {
2080		handler_set_err(hdl, -EINVAL);
2081		return NULL;
2082	}
2083
2084	ctrl = v4l2_ctrl_new(hdl, cfg->ops, cfg->type_ops, cfg->id, name,
2085			type, min, max,
2086			is_menu ? cfg->menu_skip_mask : step, def,
2087			cfg->dims, cfg->elem_size,
2088			flags, qmenu, qmenu_int, priv);
2089	if (ctrl)
2090		ctrl->is_private = cfg->is_private;
2091	return ctrl;
2092}
2093EXPORT_SYMBOL(v4l2_ctrl_new_custom);
2094
2095/* Helper function for standard non-menu controls */
2096struct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl,
2097			const struct v4l2_ctrl_ops *ops,
2098			u32 id, s64 min, s64 max, u64 step, s64 def)
2099{
2100	const char *name;
2101	enum v4l2_ctrl_type type;
2102	u32 flags;
2103
2104	v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2105	if (type == V4L2_CTRL_TYPE_MENU ||
2106	    type == V4L2_CTRL_TYPE_INTEGER_MENU ||
2107	    type >= V4L2_CTRL_COMPOUND_TYPES) {
2108		handler_set_err(hdl, -EINVAL);
2109		return NULL;
2110	}
2111	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2112			     min, max, step, def, NULL, 0,
2113			     flags, NULL, NULL, NULL);
2114}
2115EXPORT_SYMBOL(v4l2_ctrl_new_std);
2116
2117/* Helper function for standard menu controls */
2118struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl,
2119			const struct v4l2_ctrl_ops *ops,
2120			u32 id, u8 _max, u64 mask, u8 _def)
2121{
2122	const char * const *qmenu = NULL;
2123	const s64 *qmenu_int = NULL;
2124	unsigned int qmenu_int_len = 0;
2125	const char *name;
2126	enum v4l2_ctrl_type type;
2127	s64 min;
2128	s64 max = _max;
2129	s64 def = _def;
2130	u64 step;
2131	u32 flags;
2132
2133	v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2134
2135	if (type == V4L2_CTRL_TYPE_MENU)
2136		qmenu = v4l2_ctrl_get_menu(id);
2137	else if (type == V4L2_CTRL_TYPE_INTEGER_MENU)
2138		qmenu_int = v4l2_ctrl_get_int_menu(id, &qmenu_int_len);
2139
2140	if ((!qmenu && !qmenu_int) || (qmenu_int && max > qmenu_int_len)) {
2141		handler_set_err(hdl, -EINVAL);
2142		return NULL;
2143	}
2144	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2145			     0, max, mask, def, NULL, 0,
2146			     flags, qmenu, qmenu_int, NULL);
2147}
2148EXPORT_SYMBOL(v4l2_ctrl_new_std_menu);
2149
2150/* Helper function for standard menu controls with driver defined menu */
2151struct v4l2_ctrl *v4l2_ctrl_new_std_menu_items(struct v4l2_ctrl_handler *hdl,
2152			const struct v4l2_ctrl_ops *ops, u32 id, u8 _max,
2153			u64 mask, u8 _def, const char * const *qmenu)
2154{
2155	enum v4l2_ctrl_type type;
2156	const char *name;
2157	u32 flags;
2158	u64 step;
2159	s64 min;
2160	s64 max = _max;
2161	s64 def = _def;
2162
2163	/* v4l2_ctrl_new_std_menu_items() should only be called for
2164	 * standard controls without a standard menu.
2165	 */
2166	if (v4l2_ctrl_get_menu(id)) {
2167		handler_set_err(hdl, -EINVAL);
2168		return NULL;
2169	}
2170
2171	v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2172	if (type != V4L2_CTRL_TYPE_MENU || qmenu == NULL) {
2173		handler_set_err(hdl, -EINVAL);
2174		return NULL;
2175	}
2176	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2177			     0, max, mask, def, NULL, 0,
2178			     flags, qmenu, NULL, NULL);
2179
2180}
2181EXPORT_SYMBOL(v4l2_ctrl_new_std_menu_items);
2182
2183/* Helper function for standard integer menu controls */
2184struct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl,
2185			const struct v4l2_ctrl_ops *ops,
2186			u32 id, u8 _max, u8 _def, const s64 *qmenu_int)
2187{
2188	const char *name;
2189	enum v4l2_ctrl_type type;
2190	s64 min;
2191	u64 step;
2192	s64 max = _max;
2193	s64 def = _def;
2194	u32 flags;
2195
2196	v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
2197	if (type != V4L2_CTRL_TYPE_INTEGER_MENU) {
2198		handler_set_err(hdl, -EINVAL);
2199		return NULL;
2200	}
2201	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
2202			     0, max, 0, def, NULL, 0,
2203			     flags, NULL, qmenu_int, NULL);
2204}
2205EXPORT_SYMBOL(v4l2_ctrl_new_int_menu);
2206
2207/* Add a control from another handler to this handler */
2208struct v4l2_ctrl *v4l2_ctrl_add_ctrl(struct v4l2_ctrl_handler *hdl,
2209					  struct v4l2_ctrl *ctrl)
2210{
2211	if (hdl == NULL || hdl->error)
2212		return NULL;
2213	if (ctrl == NULL) {
2214		handler_set_err(hdl, -EINVAL);
2215		return NULL;
2216	}
2217	if (ctrl->handler == hdl)
2218		return ctrl;
2219	return handler_new_ref(hdl, ctrl) ? NULL : ctrl;
2220}
2221EXPORT_SYMBOL(v4l2_ctrl_add_ctrl);
2222
2223/* Add the controls from another handler to our own. */
2224int v4l2_ctrl_add_handler(struct v4l2_ctrl_handler *hdl,
2225			  struct v4l2_ctrl_handler *add,
2226			  bool (*filter)(const struct v4l2_ctrl *ctrl))
2227{
2228	struct v4l2_ctrl_ref *ref;
2229	int ret = 0;
2230
2231	/* Do nothing if either handler is NULL or if they are the same */
2232	if (!hdl || !add || hdl == add)
2233		return 0;
2234	if (hdl->error)
2235		return hdl->error;
2236	mutex_lock(add->lock);
2237	list_for_each_entry(ref, &add->ctrl_refs, node) {
2238		struct v4l2_ctrl *ctrl = ref->ctrl;
2239
2240		/* Skip handler-private controls. */
2241		if (ctrl->is_private)
2242			continue;
2243		/* And control classes */
2244		if (ctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
2245			continue;
2246		/* Filter any unwanted controls */
2247		if (filter && !filter(ctrl))
2248			continue;
2249		ret = handler_new_ref(hdl, ctrl);
2250		if (ret)
2251			break;
2252	}
2253	mutex_unlock(add->lock);
2254	return ret;
2255}
2256EXPORT_SYMBOL(v4l2_ctrl_add_handler);
2257
2258bool v4l2_ctrl_radio_filter(const struct v4l2_ctrl *ctrl)
2259{
2260	if (V4L2_CTRL_ID2CLASS(ctrl->id) == V4L2_CTRL_CLASS_FM_TX)
2261		return true;
2262	if (V4L2_CTRL_ID2CLASS(ctrl->id) == V4L2_CTRL_CLASS_FM_RX)
2263		return true;
2264	switch (ctrl->id) {
2265	case V4L2_CID_AUDIO_MUTE:
2266	case V4L2_CID_AUDIO_VOLUME:
2267	case V4L2_CID_AUDIO_BALANCE:
2268	case V4L2_CID_AUDIO_BASS:
2269	case V4L2_CID_AUDIO_TREBLE:
2270	case V4L2_CID_AUDIO_LOUDNESS:
2271		return true;
2272	default:
2273		break;
2274	}
2275	return false;
2276}
2277EXPORT_SYMBOL(v4l2_ctrl_radio_filter);
2278
2279/* Cluster controls */
2280void v4l2_ctrl_cluster(unsigned ncontrols, struct v4l2_ctrl **controls)
2281{
2282	bool has_volatiles = false;
2283	int i;
2284
2285	/* The first control is the master control and it must not be NULL */
2286	if (WARN_ON(ncontrols == 0 || controls[0] == NULL))
2287		return;
2288
2289	for (i = 0; i < ncontrols; i++) {
2290		if (controls[i]) {
2291			controls[i]->cluster = controls;
2292			controls[i]->ncontrols = ncontrols;
2293			if (controls[i]->flags & V4L2_CTRL_FLAG_VOLATILE)
2294				has_volatiles = true;
2295		}
2296	}
2297	controls[0]->has_volatiles = has_volatiles;
2298}
2299EXPORT_SYMBOL(v4l2_ctrl_cluster);
2300
2301void v4l2_ctrl_auto_cluster(unsigned ncontrols, struct v4l2_ctrl **controls,
2302			    u8 manual_val, bool set_volatile)
2303{
2304	struct v4l2_ctrl *master = controls[0];
2305	u32 flag = 0;
2306	int i;
2307
2308	v4l2_ctrl_cluster(ncontrols, controls);
2309	WARN_ON(ncontrols <= 1);
2310	WARN_ON(manual_val < master->minimum || manual_val > master->maximum);
2311	WARN_ON(set_volatile && !has_op(master, g_volatile_ctrl));
2312	master->is_auto = true;
2313	master->has_volatiles = set_volatile;
2314	master->manual_mode_value = manual_val;
2315	master->flags |= V4L2_CTRL_FLAG_UPDATE;
2316
2317	if (!is_cur_manual(master))
2318		flag = V4L2_CTRL_FLAG_INACTIVE |
2319			(set_volatile ? V4L2_CTRL_FLAG_VOLATILE : 0);
2320
2321	for (i = 1; i < ncontrols; i++)
2322		if (controls[i])
2323			controls[i]->flags |= flag;
2324}
2325EXPORT_SYMBOL(v4l2_ctrl_auto_cluster);
2326
2327/* Activate/deactivate a control. */
2328void v4l2_ctrl_activate(struct v4l2_ctrl *ctrl, bool active)
2329{
2330	/* invert since the actual flag is called 'inactive' */
2331	bool inactive = !active;
2332	bool old;
2333
2334	if (ctrl == NULL)
2335		return;
2336
2337	if (inactive)
2338		/* set V4L2_CTRL_FLAG_INACTIVE */
2339		old = test_and_set_bit(4, &ctrl->flags);
2340	else
2341		/* clear V4L2_CTRL_FLAG_INACTIVE */
2342		old = test_and_clear_bit(4, &ctrl->flags);
2343	if (old != inactive)
2344		send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_FLAGS);
2345}
2346EXPORT_SYMBOL(v4l2_ctrl_activate);
2347
2348/* Grab/ungrab a control.
2349   Typically used when streaming starts and you want to grab controls,
2350   preventing the user from changing them.
2351
2352   Just call this and the framework will block any attempts to change
2353   these controls. */
2354void v4l2_ctrl_grab(struct v4l2_ctrl *ctrl, bool grabbed)
2355{
2356	bool old;
2357
2358	if (ctrl == NULL)
2359		return;
2360
2361	v4l2_ctrl_lock(ctrl);
2362	if (grabbed)
2363		/* set V4L2_CTRL_FLAG_GRABBED */
2364		old = test_and_set_bit(1, &ctrl->flags);
2365	else
2366		/* clear V4L2_CTRL_FLAG_GRABBED */
2367		old = test_and_clear_bit(1, &ctrl->flags);
2368	if (old != grabbed)
2369		send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_FLAGS);
2370	v4l2_ctrl_unlock(ctrl);
2371}
2372EXPORT_SYMBOL(v4l2_ctrl_grab);
2373
2374/* Log the control name and value */
2375static void log_ctrl(const struct v4l2_ctrl *ctrl,
2376		     const char *prefix, const char *colon)
2377{
2378	if (ctrl->flags & (V4L2_CTRL_FLAG_DISABLED | V4L2_CTRL_FLAG_WRITE_ONLY))
2379		return;
2380	if (ctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
2381		return;
2382
2383	pr_info("%s%s%s: ", prefix, colon, ctrl->name);
2384
2385	ctrl->type_ops->log(ctrl);
2386
2387	if (ctrl->flags & (V4L2_CTRL_FLAG_INACTIVE |
2388			   V4L2_CTRL_FLAG_GRABBED |
2389			   V4L2_CTRL_FLAG_VOLATILE)) {
2390		if (ctrl->flags & V4L2_CTRL_FLAG_INACTIVE)
2391			pr_cont(" inactive");
2392		if (ctrl->flags & V4L2_CTRL_FLAG_GRABBED)
2393			pr_cont(" grabbed");
2394		if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE)
2395			pr_cont(" volatile");
2396	}
2397	pr_cont("\n");
2398}
2399
2400/* Log all controls owned by the handler */
2401void v4l2_ctrl_handler_log_status(struct v4l2_ctrl_handler *hdl,
2402				  const char *prefix)
2403{
2404	struct v4l2_ctrl *ctrl;
2405	const char *colon = "";
2406	int len;
2407
2408	if (hdl == NULL)
2409		return;
2410	if (prefix == NULL)
2411		prefix = "";
2412	len = strlen(prefix);
2413	if (len && prefix[len - 1] != ' ')
2414		colon = ": ";
2415	mutex_lock(hdl->lock);
2416	list_for_each_entry(ctrl, &hdl->ctrls, node)
2417		if (!(ctrl->flags & V4L2_CTRL_FLAG_DISABLED))
2418			log_ctrl(ctrl, prefix, colon);
2419	mutex_unlock(hdl->lock);
2420}
2421EXPORT_SYMBOL(v4l2_ctrl_handler_log_status);
2422
2423int v4l2_ctrl_subdev_log_status(struct v4l2_subdev *sd)
2424{
2425	v4l2_ctrl_handler_log_status(sd->ctrl_handler, sd->name);
2426	return 0;
2427}
2428EXPORT_SYMBOL(v4l2_ctrl_subdev_log_status);
2429
2430/* Call s_ctrl for all controls owned by the handler */
2431int v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler *hdl)
2432{
2433	struct v4l2_ctrl *ctrl;
2434	int ret = 0;
2435
2436	if (hdl == NULL)
2437		return 0;
2438	mutex_lock(hdl->lock);
2439	list_for_each_entry(ctrl, &hdl->ctrls, node)
2440		ctrl->done = false;
2441
2442	list_for_each_entry(ctrl, &hdl->ctrls, node) {
2443		struct v4l2_ctrl *master = ctrl->cluster[0];
2444		int i;
2445
2446		/* Skip if this control was already handled by a cluster. */
2447		/* Skip button controls and read-only controls. */
2448		if (ctrl->done || ctrl->type == V4L2_CTRL_TYPE_BUTTON ||
2449		    (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY))
2450			continue;
2451
2452		for (i = 0; i < master->ncontrols; i++) {
2453			if (master->cluster[i]) {
2454				cur_to_new(master->cluster[i]);
2455				master->cluster[i]->is_new = 1;
2456				master->cluster[i]->done = true;
2457			}
2458		}
2459		ret = call_op(master, s_ctrl);
2460		if (ret)
2461			break;
2462	}
2463	mutex_unlock(hdl->lock);
2464	return ret;
2465}
2466EXPORT_SYMBOL(v4l2_ctrl_handler_setup);
2467
2468/* Implement VIDIOC_QUERY_EXT_CTRL */
2469int v4l2_query_ext_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_query_ext_ctrl *qc)
2470{
2471	const unsigned next_flags = V4L2_CTRL_FLAG_NEXT_CTRL | V4L2_CTRL_FLAG_NEXT_COMPOUND;
2472	u32 id = qc->id & V4L2_CTRL_ID_MASK;
2473	struct v4l2_ctrl_ref *ref;
2474	struct v4l2_ctrl *ctrl;
2475
2476	if (hdl == NULL)
2477		return -EINVAL;
2478
2479	mutex_lock(hdl->lock);
2480
2481	/* Try to find it */
2482	ref = find_ref(hdl, id);
2483
2484	if ((qc->id & next_flags) && !list_empty(&hdl->ctrl_refs)) {
2485		bool is_compound;
2486		/* Match any control that is not hidden */
2487		unsigned mask = 1;
2488		bool match = false;
2489
2490		if ((qc->id & next_flags) == V4L2_CTRL_FLAG_NEXT_COMPOUND) {
2491			/* Match any hidden control */
2492			match = true;
2493		} else if ((qc->id & next_flags) == next_flags) {
2494			/* Match any control, compound or not */
2495			mask = 0;
2496		}
2497
2498		/* Find the next control with ID > qc->id */
2499
2500		/* Did we reach the end of the control list? */
2501		if (id >= node2id(hdl->ctrl_refs.prev)) {
2502			ref = NULL; /* Yes, so there is no next control */
2503		} else if (ref) {
2504			/* We found a control with the given ID, so just get
2505			   the next valid one in the list. */
2506			list_for_each_entry_continue(ref, &hdl->ctrl_refs, node) {
2507				is_compound =
2508					ref->ctrl->type >= V4L2_CTRL_COMPOUND_TYPES;
2509				if (id < ref->ctrl->id &&
2510				    (is_compound & mask) == match)
2511					break;
2512			}
2513			if (&ref->node == &hdl->ctrl_refs)
2514				ref = NULL;
2515		} else {
2516			/* No control with the given ID exists, so start
2517			   searching for the next largest ID. We know there
2518			   is one, otherwise the first 'if' above would have
2519			   been true. */
2520			list_for_each_entry(ref, &hdl->ctrl_refs, node) {
2521				is_compound =
2522					ref->ctrl->type >= V4L2_CTRL_COMPOUND_TYPES;
2523				if (id < ref->ctrl->id &&
2524				    (is_compound & mask) == match)
2525					break;
2526			}
2527			if (&ref->node == &hdl->ctrl_refs)
2528				ref = NULL;
2529		}
2530	}
2531	mutex_unlock(hdl->lock);
2532
2533	if (!ref)
2534		return -EINVAL;
2535
2536	ctrl = ref->ctrl;
2537	memset(qc, 0, sizeof(*qc));
2538	if (id >= V4L2_CID_PRIVATE_BASE)
2539		qc->id = id;
2540	else
2541		qc->id = ctrl->id;
2542	strlcpy(qc->name, ctrl->name, sizeof(qc->name));
2543	qc->flags = ctrl->flags;
2544	qc->type = ctrl->type;
2545	if (ctrl->is_ptr)
2546		qc->flags |= V4L2_CTRL_FLAG_HAS_PAYLOAD;
2547	qc->elem_size = ctrl->elem_size;
2548	qc->elems = ctrl->elems;
2549	qc->nr_of_dims = ctrl->nr_of_dims;
2550	memcpy(qc->dims, ctrl->dims, qc->nr_of_dims * sizeof(qc->dims[0]));
2551	qc->minimum = ctrl->minimum;
2552	qc->maximum = ctrl->maximum;
2553	qc->default_value = ctrl->default_value;
2554	if (ctrl->type == V4L2_CTRL_TYPE_MENU
2555	    || ctrl->type == V4L2_CTRL_TYPE_INTEGER_MENU)
2556		qc->step = 1;
2557	else
2558		qc->step = ctrl->step;
2559	return 0;
2560}
2561EXPORT_SYMBOL(v4l2_query_ext_ctrl);
2562
2563/* Implement VIDIOC_QUERYCTRL */
2564int v4l2_queryctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc)
2565{
2566	struct v4l2_query_ext_ctrl qec = { qc->id };
2567	int rc;
2568
2569	rc = v4l2_query_ext_ctrl(hdl, &qec);
2570	if (rc)
2571		return rc;
2572
2573	qc->id = qec.id;
2574	qc->type = qec.type;
2575	qc->flags = qec.flags;
2576	strlcpy(qc->name, qec.name, sizeof(qc->name));
2577	switch (qc->type) {
2578	case V4L2_CTRL_TYPE_INTEGER:
2579	case V4L2_CTRL_TYPE_BOOLEAN:
2580	case V4L2_CTRL_TYPE_MENU:
2581	case V4L2_CTRL_TYPE_INTEGER_MENU:
2582	case V4L2_CTRL_TYPE_STRING:
2583	case V4L2_CTRL_TYPE_BITMASK:
2584		qc->minimum = qec.minimum;
2585		qc->maximum = qec.maximum;
2586		qc->step = qec.step;
2587		qc->default_value = qec.default_value;
2588		break;
2589	default:
2590		qc->minimum = 0;
2591		qc->maximum = 0;
2592		qc->step = 0;
2593		qc->default_value = 0;
2594		break;
2595	}
2596	return 0;
2597}
2598EXPORT_SYMBOL(v4l2_queryctrl);
2599
2600int v4l2_subdev_queryctrl(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc)
2601{
2602	if (qc->id & (V4L2_CTRL_FLAG_NEXT_CTRL | V4L2_CTRL_FLAG_NEXT_COMPOUND))
2603		return -EINVAL;
2604	return v4l2_queryctrl(sd->ctrl_handler, qc);
2605}
2606EXPORT_SYMBOL(v4l2_subdev_queryctrl);
2607
2608/* Implement VIDIOC_QUERYMENU */
2609int v4l2_querymenu(struct v4l2_ctrl_handler *hdl, struct v4l2_querymenu *qm)
2610{
2611	struct v4l2_ctrl *ctrl;
2612	u32 i = qm->index;
2613
2614	ctrl = v4l2_ctrl_find(hdl, qm->id);
2615	if (!ctrl)
2616		return -EINVAL;
2617
2618	qm->reserved = 0;
2619	/* Sanity checks */
2620	switch (ctrl->type) {
2621	case V4L2_CTRL_TYPE_MENU:
2622		if (ctrl->qmenu == NULL)
2623			return -EINVAL;
2624		break;
2625	case V4L2_CTRL_TYPE_INTEGER_MENU:
2626		if (ctrl->qmenu_int == NULL)
2627			return -EINVAL;
2628		break;
2629	default:
2630		return -EINVAL;
2631	}
2632
2633	if (i < ctrl->minimum || i > ctrl->maximum)
2634		return -EINVAL;
2635
2636	/* Use mask to see if this menu item should be skipped */
2637	if (ctrl->menu_skip_mask & (1 << i))
2638		return -EINVAL;
2639	/* Empty menu items should also be skipped */
2640	if (ctrl->type == V4L2_CTRL_TYPE_MENU) {
2641		if (ctrl->qmenu[i] == NULL || ctrl->qmenu[i][0] == '\0')
2642			return -EINVAL;
2643		strlcpy(qm->name, ctrl->qmenu[i], sizeof(qm->name));
2644	} else {
2645		qm->value = ctrl->qmenu_int[i];
2646	}
2647	return 0;
2648}
2649EXPORT_SYMBOL(v4l2_querymenu);
2650
2651int v4l2_subdev_querymenu(struct v4l2_subdev *sd, struct v4l2_querymenu *qm)
2652{
2653	return v4l2_querymenu(sd->ctrl_handler, qm);
2654}
2655EXPORT_SYMBOL(v4l2_subdev_querymenu);
2656
2657
2658
2659/* Some general notes on the atomic requirements of VIDIOC_G/TRY/S_EXT_CTRLS:
2660
2661   It is not a fully atomic operation, just best-effort only. After all, if
2662   multiple controls have to be set through multiple i2c writes (for example)
2663   then some initial writes may succeed while others fail. Thus leaving the
2664   system in an inconsistent state. The question is how much effort you are
2665   willing to spend on trying to make something atomic that really isn't.
2666
2667   From the point of view of an application the main requirement is that
2668   when you call VIDIOC_S_EXT_CTRLS and some values are invalid then an
2669   error should be returned without actually affecting any controls.
2670
2671   If all the values are correct, then it is acceptable to just give up
2672   in case of low-level errors.
2673
2674   It is important though that the application can tell when only a partial
2675   configuration was done. The way we do that is through the error_idx field
2676   of struct v4l2_ext_controls: if that is equal to the count field then no
2677   controls were affected. Otherwise all controls before that index were
2678   successful in performing their 'get' or 'set' operation, the control at
2679   the given index failed, and you don't know what happened with the controls
2680   after the failed one. Since if they were part of a control cluster they
2681   could have been successfully processed (if a cluster member was encountered
2682   at index < error_idx), they could have failed (if a cluster member was at
2683   error_idx), or they may not have been processed yet (if the first cluster
2684   member appeared after error_idx).
2685
2686   It is all fairly theoretical, though. In practice all you can do is to
2687   bail out. If error_idx == count, then it is an application bug. If
2688   error_idx < count then it is only an application bug if the error code was
2689   EBUSY. That usually means that something started streaming just when you
2690   tried to set the controls. In all other cases it is a driver/hardware
2691   problem and all you can do is to retry or bail out.
2692
2693   Note that these rules do not apply to VIDIOC_TRY_EXT_CTRLS: since that
2694   never modifies controls the error_idx is just set to whatever control
2695   has an invalid value.
2696 */
2697
2698/* Prepare for the extended g/s/try functions.
2699   Find the controls in the control array and do some basic checks. */
2700static int prepare_ext_ctrls(struct v4l2_ctrl_handler *hdl,
2701			     struct v4l2_ext_controls *cs,
2702			     struct v4l2_ctrl_helper *helpers,
2703			     bool get)
2704{
2705	struct v4l2_ctrl_helper *h;
2706	bool have_clusters = false;
2707	u32 i;
2708
2709	for (i = 0, h = helpers; i < cs->count; i++, h++) {
2710		struct v4l2_ext_control *c = &cs->controls[i];
2711		struct v4l2_ctrl_ref *ref;
2712		struct v4l2_ctrl *ctrl;
2713		u32 id = c->id & V4L2_CTRL_ID_MASK;
2714
2715		cs->error_idx = i;
2716
2717		if (cs->ctrl_class && V4L2_CTRL_ID2CLASS(id) != cs->ctrl_class)
2718			return -EINVAL;
2719
2720		/* Old-style private controls are not allowed for
2721		   extended controls */
2722		if (id >= V4L2_CID_PRIVATE_BASE)
2723			return -EINVAL;
2724		ref = find_ref_lock(hdl, id);
2725		if (ref == NULL)
2726			return -EINVAL;
2727		ctrl = ref->ctrl;
2728		if (ctrl->flags & V4L2_CTRL_FLAG_DISABLED)
2729			return -EINVAL;
2730
2731		if (ctrl->cluster[0]->ncontrols > 1)
2732			have_clusters = true;
2733		if (ctrl->cluster[0] != ctrl)
2734			ref = find_ref_lock(hdl, ctrl->cluster[0]->id);
2735		if (ctrl->is_ptr && !ctrl->is_string) {
2736			unsigned tot_size = ctrl->elems * ctrl->elem_size;
2737
2738			if (c->size < tot_size) {
2739				if (get) {
2740					c->size = tot_size;
2741					return -ENOSPC;
2742				}
2743				return -EFAULT;
2744			}
2745			c->size = tot_size;
2746		}
2747		/* Store the ref to the master control of the cluster */
2748		h->mref = ref;
2749		h->ctrl = ctrl;
2750		/* Initially set next to 0, meaning that there is no other
2751		   control in this helper array belonging to the same
2752		   cluster */
2753		h->next = 0;
2754	}
2755
2756	/* We are done if there were no controls that belong to a multi-
2757	   control cluster. */
2758	if (!have_clusters)
2759		return 0;
2760
2761	/* The code below figures out in O(n) time which controls in the list
2762	   belong to the same cluster. */
2763
2764	/* This has to be done with the handler lock taken. */
2765	mutex_lock(hdl->lock);
2766
2767	/* First zero the helper field in the master control references */
2768	for (i = 0; i < cs->count; i++)
2769		helpers[i].mref->helper = NULL;
2770	for (i = 0, h = helpers; i < cs->count; i++, h++) {
2771		struct v4l2_ctrl_ref *mref = h->mref;
2772
2773		/* If the mref->helper is set, then it points to an earlier
2774		   helper that belongs to the same cluster. */
2775		if (mref->helper) {
2776			/* Set the next field of mref->helper to the current
2777			   index: this means that that earlier helper now
2778			   points to the next helper in the same cluster. */
2779			mref->helper->next = i;
2780			/* mref should be set only for the first helper in the
2781			   cluster, clear the others. */
2782			h->mref = NULL;
2783		}
2784		/* Point the mref helper to the current helper struct. */
2785		mref->helper = h;
2786	}
2787	mutex_unlock(hdl->lock);
2788	return 0;
2789}
2790
2791/* Handles the corner case where cs->count == 0. It checks whether the
2792   specified control class exists. If that class ID is 0, then it checks
2793   whether there are any controls at all. */
2794static int class_check(struct v4l2_ctrl_handler *hdl, u32 ctrl_class)
2795{
2796	if (ctrl_class == 0)
2797		return list_empty(&hdl->ctrl_refs) ? -EINVAL : 0;
2798	return find_ref_lock(hdl, ctrl_class | 1) ? 0 : -EINVAL;
2799}
2800
2801
2802
2803/* Get extended controls. Allocates the helpers array if needed. */
2804int v4l2_g_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct v4l2_ext_controls *cs)
2805{
2806	struct v4l2_ctrl_helper helper[4];
2807	struct v4l2_ctrl_helper *helpers = helper;
2808	int ret;
2809	int i, j;
2810
2811	cs->error_idx = cs->count;
2812	cs->ctrl_class = V4L2_CTRL_ID2CLASS(cs->ctrl_class);
2813
2814	if (hdl == NULL)
2815		return -EINVAL;
2816
2817	if (cs->count == 0)
2818		return class_check(hdl, cs->ctrl_class);
2819
2820	if (cs->count > ARRAY_SIZE(helper)) {
2821		helpers = kmalloc_array(cs->count, sizeof(helper[0]),
2822					GFP_KERNEL);
2823		if (helpers == NULL)
2824			return -ENOMEM;
2825	}
2826
2827	ret = prepare_ext_ctrls(hdl, cs, helpers, true);
2828	cs->error_idx = cs->count;
2829
2830	for (i = 0; !ret && i < cs->count; i++)
2831		if (helpers[i].ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY)
2832			ret = -EACCES;
2833
2834	for (i = 0; !ret && i < cs->count; i++) {
2835		int (*ctrl_to_user)(struct v4l2_ext_control *c,
2836				    struct v4l2_ctrl *ctrl) = cur_to_user;
2837		struct v4l2_ctrl *master;
2838
2839		if (helpers[i].mref == NULL)
2840			continue;
2841
2842		master = helpers[i].mref->ctrl;
2843		cs->error_idx = i;
2844
2845		v4l2_ctrl_lock(master);
2846
2847		/* g_volatile_ctrl will update the new control values */
2848		if ((master->flags & V4L2_CTRL_FLAG_VOLATILE) ||
2849			(master->has_volatiles && !is_cur_manual(master))) {
2850			for (j = 0; j < master->ncontrols; j++)
2851				cur_to_new(master->cluster[j]);
2852			ret = call_op(master, g_volatile_ctrl);
2853			ctrl_to_user = new_to_user;
2854		}
2855		/* If OK, then copy the current (for non-volatile controls)
2856		   or the new (for volatile controls) control values to the
2857		   caller */
2858		if (!ret) {
2859			u32 idx = i;
2860
2861			do {
2862				ret = ctrl_to_user(cs->controls + idx,
2863						   helpers[idx].ctrl);
2864				idx = helpers[idx].next;
2865			} while (!ret && idx);
2866		}
2867		v4l2_ctrl_unlock(master);
2868	}
2869
2870	if (cs->count > ARRAY_SIZE(helper))
2871		kfree(helpers);
2872	return ret;
2873}
2874EXPORT_SYMBOL(v4l2_g_ext_ctrls);
2875
2876int v4l2_subdev_g_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *cs)
2877{
2878	return v4l2_g_ext_ctrls(sd->ctrl_handler, cs);
2879}
2880EXPORT_SYMBOL(v4l2_subdev_g_ext_ctrls);
2881
2882/* Helper function to get a single control */
2883static int get_ctrl(struct v4l2_ctrl *ctrl, struct v4l2_ext_control *c)
2884{
2885	struct v4l2_ctrl *master = ctrl->cluster[0];
2886	int ret = 0;
2887	int i;
2888
2889	/* Compound controls are not supported. The new_to_user() and
2890	 * cur_to_user() calls below would need to be modified not to access
2891	 * userspace memory when called from get_ctrl().
2892	 */
2893	if (!ctrl->is_int)
2894		return -EINVAL;
2895
2896	if (ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY)
2897		return -EACCES;
2898
2899	v4l2_ctrl_lock(master);
2900	/* g_volatile_ctrl will update the current control values */
2901	if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE) {
2902		for (i = 0; i < master->ncontrols; i++)
2903			cur_to_new(master->cluster[i]);
2904		ret = call_op(master, g_volatile_ctrl);
2905		new_to_user(c, ctrl);
2906	} else {
2907		cur_to_user(c, ctrl);
2908	}
2909	v4l2_ctrl_unlock(master);
2910	return ret;
2911}
2912
2913int v4l2_g_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_control *control)
2914{
2915	struct v4l2_ctrl *ctrl = v4l2_ctrl_find(hdl, control->id);
2916	struct v4l2_ext_control c;
2917	int ret;
2918
2919	if (ctrl == NULL || !ctrl->is_int)
2920		return -EINVAL;
2921	ret = get_ctrl(ctrl, &c);
2922	control->value = c.value;
2923	return ret;
2924}
2925EXPORT_SYMBOL(v4l2_g_ctrl);
2926
2927int v4l2_subdev_g_ctrl(struct v4l2_subdev *sd, struct v4l2_control *control)
2928{
2929	return v4l2_g_ctrl(sd->ctrl_handler, control);
2930}
2931EXPORT_SYMBOL(v4l2_subdev_g_ctrl);
2932
2933s32 v4l2_ctrl_g_ctrl(struct v4l2_ctrl *ctrl)
2934{
2935	struct v4l2_ext_control c;
2936
2937	/* It's a driver bug if this happens. */
2938	WARN_ON(!ctrl->is_int);
2939	c.value = 0;
2940	get_ctrl(ctrl, &c);
2941	return c.value;
2942}
2943EXPORT_SYMBOL(v4l2_ctrl_g_ctrl);
2944
2945s64 v4l2_ctrl_g_ctrl_int64(struct v4l2_ctrl *ctrl)
2946{
2947	struct v4l2_ext_control c;
2948
2949	/* It's a driver bug if this happens. */
2950	WARN_ON(ctrl->is_ptr || ctrl->type != V4L2_CTRL_TYPE_INTEGER64);
2951	c.value = 0;
2952	get_ctrl(ctrl, &c);
2953	return c.value;
2954}
2955EXPORT_SYMBOL(v4l2_ctrl_g_ctrl_int64);
2956
2957
2958/* Core function that calls try/s_ctrl and ensures that the new value is
2959   copied to the current value on a set.
2960   Must be called with ctrl->handler->lock held. */
2961static int try_or_set_cluster(struct v4l2_fh *fh, struct v4l2_ctrl *master,
2962			      bool set, u32 ch_flags)
2963{
2964	bool update_flag;
2965	int ret;
2966	int i;
2967
2968	/* Go through the cluster and either validate the new value or
2969	   (if no new value was set), copy the current value to the new
2970	   value, ensuring a consistent view for the control ops when
2971	   called. */
2972	for (i = 0; i < master->ncontrols; i++) {
2973		struct v4l2_ctrl *ctrl = master->cluster[i];
2974
2975		if (ctrl == NULL)
2976			continue;
2977
2978		if (!ctrl->is_new) {
2979			cur_to_new(ctrl);
2980			continue;
2981		}
2982		/* Check again: it may have changed since the
2983		   previous check in try_or_set_ext_ctrls(). */
2984		if (set && (ctrl->flags & V4L2_CTRL_FLAG_GRABBED))
2985			return -EBUSY;
2986	}
2987
2988	ret = call_op(master, try_ctrl);
2989
2990	/* Don't set if there is no change */
2991	if (ret || !set || !cluster_changed(master))
2992		return ret;
2993	ret = call_op(master, s_ctrl);
2994	if (ret)
2995		return ret;
2996
2997	/* If OK, then make the new values permanent. */
2998	update_flag = is_cur_manual(master) != is_new_manual(master);
2999	for (i = 0; i < master->ncontrols; i++)
3000		new_to_cur(fh, master->cluster[i], ch_flags |
3001			((update_flag && i > 0) ? V4L2_EVENT_CTRL_CH_FLAGS : 0));
3002	return 0;
3003}
3004
3005/* Validate controls. */
3006static int validate_ctrls(struct v4l2_ext_controls *cs,
3007			  struct v4l2_ctrl_helper *helpers, bool set)
3008{
3009	unsigned i;
3010	int ret = 0;
3011
3012	cs->error_idx = cs->count;
3013	for (i = 0; i < cs->count; i++) {
3014		struct v4l2_ctrl *ctrl = helpers[i].ctrl;
3015
3016		cs->error_idx = i;
3017
3018		if (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY)
3019			return -EACCES;
3020		/* This test is also done in try_set_control_cluster() which
3021		   is called in atomic context, so that has the final say,
3022		   but it makes sense to do an up-front check as well. Once
3023		   an error occurs in try_set_control_cluster() some other
3024		   controls may have been set already and we want to do a
3025		   best-effort to avoid that. */
3026		if (set && (ctrl->flags & V4L2_CTRL_FLAG_GRABBED))
3027			return -EBUSY;
3028		ret = validate_new(ctrl, &cs->controls[i]);
3029		if (ret)
3030			return ret;
3031	}
3032	return 0;
3033}
3034
3035/* Obtain the current volatile values of an autocluster and mark them
3036   as new. */
3037static void update_from_auto_cluster(struct v4l2_ctrl *master)
3038{
3039	int i;
3040
3041	for (i = 0; i < master->ncontrols; i++)
3042		cur_to_new(master->cluster[i]);
3043	if (!call_op(master, g_volatile_ctrl))
3044		for (i = 1; i < master->ncontrols; i++)
3045			if (master->cluster[i])
3046				master->cluster[i]->is_new = 1;
3047}
3048
3049/* Try or try-and-set controls */
3050static int try_set_ext_ctrls(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl,
3051			     struct v4l2_ext_controls *cs,
3052			     bool set)
3053{
3054	struct v4l2_ctrl_helper helper[4];
3055	struct v4l2_ctrl_helper *helpers = helper;
3056	unsigned i, j;
3057	int ret;
3058
3059	cs->error_idx = cs->count;
3060	cs->ctrl_class = V4L2_CTRL_ID2CLASS(cs->ctrl_class);
3061
3062	if (hdl == NULL)
3063		return -EINVAL;
3064
3065	if (cs->count == 0)
3066		return class_check(hdl, cs->ctrl_class);
3067
3068	if (cs->count > ARRAY_SIZE(helper)) {
3069		helpers = kmalloc_array(cs->count, sizeof(helper[0]),
3070					GFP_KERNEL);
3071		if (!helpers)
3072			return -ENOMEM;
3073	}
3074	ret = prepare_ext_ctrls(hdl, cs, helpers, false);
3075	if (!ret)
3076		ret = validate_ctrls(cs, helpers, set);
3077	if (ret && set)
3078		cs->error_idx = cs->count;
3079	for (i = 0; !ret && i < cs->count; i++) {
3080		struct v4l2_ctrl *master;
3081		u32 idx = i;
3082
3083		if (helpers[i].mref == NULL)
3084			continue;
3085
3086		cs->error_idx = i;
3087		master = helpers[i].mref->ctrl;
3088		v4l2_ctrl_lock(master);
3089
3090		/* Reset the 'is_new' flags of the cluster */
3091		for (j = 0; j < master->ncontrols; j++)
3092			if (master->cluster[j])
3093				master->cluster[j]->is_new = 0;
3094
3095		/* For volatile autoclusters that are currently in auto mode
3096		   we need to discover if it will be set to manual mode.
3097		   If so, then we have to copy the current volatile values
3098		   first since those will become the new manual values (which
3099		   may be overwritten by explicit new values from this set
3100		   of controls). */
3101		if (master->is_auto && master->has_volatiles &&
3102						!is_cur_manual(master)) {
3103			/* Pick an initial non-manual value */
3104			s32 new_auto_val = master->manual_mode_value + 1;
3105			u32 tmp_idx = idx;
3106
3107			do {
3108				/* Check if the auto control is part of the
3109				   list, and remember the new value. */
3110				if (helpers[tmp_idx].ctrl == master)
3111					new_auto_val = cs->controls[tmp_idx].value;
3112				tmp_idx = helpers[tmp_idx].next;
3113			} while (tmp_idx);
3114			/* If the new value == the manual value, then copy
3115			   the current volatile values. */
3116			if (new_auto_val == master->manual_mode_value)
3117				update_from_auto_cluster(master);
3118		}
3119
3120		/* Copy the new caller-supplied control values.
3121		   user_to_new() sets 'is_new' to 1. */
3122		do {
3123			ret = user_to_new(cs->controls + idx, helpers[idx].ctrl);
3124			idx = helpers[idx].next;
3125		} while (!ret && idx);
3126
3127		if (!ret)
3128			ret = try_or_set_cluster(fh, master, set, 0);
3129
3130		/* Copy the new values back to userspace. */
3131		if (!ret) {
3132			idx = i;
3133			do {
3134				ret = new_to_user(cs->controls + idx,
3135						helpers[idx].ctrl);
3136				idx = helpers[idx].next;
3137			} while (!ret && idx);
3138		}
3139		v4l2_ctrl_unlock(master);
3140	}
3141
3142	if (cs->count > ARRAY_SIZE(helper))
3143		kfree(helpers);
3144	return ret;
3145}
3146
3147int v4l2_try_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct v4l2_ext_controls *cs)
3148{
3149	return try_set_ext_ctrls(NULL, hdl, cs, false);
3150}
3151EXPORT_SYMBOL(v4l2_try_ext_ctrls);
3152
3153int v4l2_s_ext_ctrls(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl,
3154					struct v4l2_ext_controls *cs)
3155{
3156	return try_set_ext_ctrls(fh, hdl, cs, true);
3157}
3158EXPORT_SYMBOL(v4l2_s_ext_ctrls);
3159
3160int v4l2_subdev_try_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *cs)
3161{
3162	return try_set_ext_ctrls(NULL, sd->ctrl_handler, cs, false);
3163}
3164EXPORT_SYMBOL(v4l2_subdev_try_ext_ctrls);
3165
3166int v4l2_subdev_s_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *cs)
3167{
3168	return try_set_ext_ctrls(NULL, sd->ctrl_handler, cs, true);
3169}
3170EXPORT_SYMBOL(v4l2_subdev_s_ext_ctrls);
3171
3172/* Helper function for VIDIOC_S_CTRL compatibility */
3173static int set_ctrl(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl,
3174		    struct v4l2_ext_control *c, u32 ch_flags)
3175{
3176	struct v4l2_ctrl *master = ctrl->cluster[0];
3177	int i;
3178
3179	/* Reset the 'is_new' flags of the cluster */
3180	for (i = 0; i < master->ncontrols; i++)
3181		if (master->cluster[i])
3182			master->cluster[i]->is_new = 0;
3183
3184	if (c)
3185		user_to_new(c, ctrl);
3186
3187	/* For autoclusters with volatiles that are switched from auto to
3188	   manual mode we have to update the current volatile values since
3189	   those will become the initial manual values after such a switch. */
3190	if (master->is_auto && master->has_volatiles && ctrl == master &&
3191	    !is_cur_manual(master) && ctrl->val == master->manual_mode_value)
3192		update_from_auto_cluster(master);
3193
3194	ctrl->is_new = 1;
3195	return try_or_set_cluster(fh, master, true, ch_flags);
3196}
3197
3198/* Helper function for VIDIOC_S_CTRL compatibility */
3199static int set_ctrl_lock(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl,
3200			 struct v4l2_ext_control *c)
3201{
3202	int ret = validate_new(ctrl, c);
3203
3204	if (!ret) {
3205		v4l2_ctrl_lock(ctrl);
3206		ret = set_ctrl(fh, ctrl, c, 0);
3207		if (!ret)
3208			cur_to_user(c, ctrl);
3209		v4l2_ctrl_unlock(ctrl);
3210	}
3211	return ret;
3212}
3213
3214int v4l2_s_ctrl(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl,
3215					struct v4l2_control *control)
3216{
3217	struct v4l2_ctrl *ctrl = v4l2_ctrl_find(hdl, control->id);
3218	struct v4l2_ext_control c;
3219	int ret;
3220
3221	if (ctrl == NULL || !ctrl->is_int)
3222		return -EINVAL;
3223
3224	if (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY)
3225		return -EACCES;
3226
3227	c.value = control->value;
3228	ret = set_ctrl_lock(fh, ctrl, &c);
3229	control->value = c.value;
3230	return ret;
3231}
3232EXPORT_SYMBOL(v4l2_s_ctrl);
3233
3234int v4l2_subdev_s_ctrl(struct v4l2_subdev *sd, struct v4l2_control *control)
3235{
3236	return v4l2_s_ctrl(NULL, sd->ctrl_handler, control);
3237}
3238EXPORT_SYMBOL(v4l2_subdev_s_ctrl);
3239
3240int __v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val)
3241{
3242	lockdep_assert_held(ctrl->handler->lock);
3243
3244	/* It's a driver bug if this happens. */
3245	WARN_ON(!ctrl->is_int);
3246	ctrl->val = val;
3247	return set_ctrl(NULL, ctrl, NULL, 0);
3248}
3249EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl);
3250
3251int __v4l2_ctrl_s_ctrl_int64(struct v4l2_ctrl *ctrl, s64 val)
3252{
3253	lockdep_assert_held(ctrl->handler->lock);
3254
3255	/* It's a driver bug if this happens. */
3256	WARN_ON(ctrl->is_ptr || ctrl->type != V4L2_CTRL_TYPE_INTEGER64);
3257	*ctrl->p_new.p_s64 = val;
3258	return set_ctrl(NULL, ctrl, NULL, 0);
3259}
3260EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl_int64);
3261
3262int __v4l2_ctrl_s_ctrl_string(struct v4l2_ctrl *ctrl, const char *s)
3263{
3264	lockdep_assert_held(ctrl->handler->lock);
3265
3266	/* It's a driver bug if this happens. */
3267	WARN_ON(ctrl->type != V4L2_CTRL_TYPE_STRING);
3268	strlcpy(ctrl->p_new.p_char, s, ctrl->maximum + 1);
3269	return set_ctrl(NULL, ctrl, NULL, 0);
3270}
3271EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl_string);
3272
3273void v4l2_ctrl_notify(struct v4l2_ctrl *ctrl, v4l2_ctrl_notify_fnc notify, void *priv)
3274{
3275	if (ctrl == NULL)
3276		return;
3277	if (notify == NULL) {
3278		ctrl->call_notify = 0;
3279		return;
3280	}
3281	if (WARN_ON(ctrl->handler->notify && ctrl->handler->notify != notify))
3282		return;
3283	ctrl->handler->notify = notify;
3284	ctrl->handler->notify_priv = priv;
3285	ctrl->call_notify = 1;
3286}
3287EXPORT_SYMBOL(v4l2_ctrl_notify);
3288
3289int __v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl,
3290			s64 min, s64 max, u64 step, s64 def)
3291{
3292	int ret;
3293	struct v4l2_ext_control c;
3294
3295	lockdep_assert_held(ctrl->handler->lock);
3296
3297	switch (ctrl->type) {
3298	case V4L2_CTRL_TYPE_INTEGER:
3299	case V4L2_CTRL_TYPE_INTEGER64:
3300	case V4L2_CTRL_TYPE_BOOLEAN:
3301	case V4L2_CTRL_TYPE_MENU:
3302	case V4L2_CTRL_TYPE_INTEGER_MENU:
3303	case V4L2_CTRL_TYPE_BITMASK:
3304	case V4L2_CTRL_TYPE_U8:
3305	case V4L2_CTRL_TYPE_U16:
3306	case V4L2_CTRL_TYPE_U32:
3307		if (ctrl->is_array)
3308			return -EINVAL;
3309		ret = check_range(ctrl->type, min, max, step, def);
3310		if (ret)
3311			return ret;
3312		break;
3313	default:
3314		return -EINVAL;
3315	}
3316	ctrl->minimum = min;
3317	ctrl->maximum = max;
3318	ctrl->step = step;
3319	ctrl->default_value = def;
3320	c.value = *ctrl->p_cur.p_s32;
3321	if (validate_new(ctrl, &c))
3322		c.value = def;
3323	if (c.value != *ctrl->p_cur.p_s32)
3324		ret = set_ctrl(NULL, ctrl, &c, V4L2_EVENT_CTRL_CH_RANGE);
3325	else
3326		send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_RANGE);
3327	return ret;
3328}
3329EXPORT_SYMBOL(__v4l2_ctrl_modify_range);
3330
3331static int v4l2_ctrl_add_event(struct v4l2_subscribed_event *sev, unsigned elems)
3332{
3333	struct v4l2_ctrl *ctrl = v4l2_ctrl_find(sev->fh->ctrl_handler, sev->id);
3334
3335	if (ctrl == NULL)
3336		return -EINVAL;
3337
3338	v4l2_ctrl_lock(ctrl);
3339	list_add_tail(&sev->node, &ctrl->ev_subs);
3340	if (ctrl->type != V4L2_CTRL_TYPE_CTRL_CLASS &&
3341	    (sev->flags & V4L2_EVENT_SUB_FL_SEND_INITIAL)) {
3342		struct v4l2_event ev;
3343		u32 changes = V4L2_EVENT_CTRL_CH_FLAGS;
3344
3345		if (!(ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY))
3346			changes |= V4L2_EVENT_CTRL_CH_VALUE;
3347		fill_event(&ev, ctrl, changes);
3348		/* Mark the queue as active, allowing this initial
3349		   event to be accepted. */
3350		sev->elems = elems;
3351		v4l2_event_queue_fh(sev->fh, &ev);
3352	}
3353	v4l2_ctrl_unlock(ctrl);
3354	return 0;
3355}
3356
3357static void v4l2_ctrl_del_event(struct v4l2_subscribed_event *sev)
3358{
3359	struct v4l2_ctrl *ctrl = v4l2_ctrl_find(sev->fh->ctrl_handler, sev->id);
3360
3361	v4l2_ctrl_lock(ctrl);
3362	list_del(&sev->node);
3363	v4l2_ctrl_unlock(ctrl);
3364}
3365
3366void v4l2_ctrl_replace(struct v4l2_event *old, const struct v4l2_event *new)
3367{
3368	u32 old_changes = old->u.ctrl.changes;
3369
3370	old->u.ctrl = new->u.ctrl;
3371	old->u.ctrl.changes |= old_changes;
3372}
3373EXPORT_SYMBOL(v4l2_ctrl_replace);
3374
3375void v4l2_ctrl_merge(const struct v4l2_event *old, struct v4l2_event *new)
3376{
3377	new->u.ctrl.changes |= old->u.ctrl.changes;
3378}
3379EXPORT_SYMBOL(v4l2_ctrl_merge);
3380
3381const struct v4l2_subscribed_event_ops v4l2_ctrl_sub_ev_ops = {
3382	.add = v4l2_ctrl_add_event,
3383	.del = v4l2_ctrl_del_event,
3384	.replace = v4l2_ctrl_replace,
3385	.merge = v4l2_ctrl_merge,
3386};
3387EXPORT_SYMBOL(v4l2_ctrl_sub_ev_ops);
3388
3389int v4l2_ctrl_log_status(struct file *file, void *fh)
3390{
3391	struct video_device *vfd = video_devdata(file);
3392	struct v4l2_fh *vfh = file->private_data;
3393
3394	if (test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) && vfd->v4l2_dev)
3395		v4l2_ctrl_handler_log_status(vfh->ctrl_handler,
3396			vfd->v4l2_dev->name);
3397	return 0;
3398}
3399EXPORT_SYMBOL(v4l2_ctrl_log_status);
3400
3401int v4l2_ctrl_subscribe_event(struct v4l2_fh *fh,
3402				const struct v4l2_event_subscription *sub)
3403{
3404	if (sub->type == V4L2_EVENT_CTRL)
3405		return v4l2_event_subscribe(fh, sub, 0, &v4l2_ctrl_sub_ev_ops);
3406	return -EINVAL;
3407}
3408EXPORT_SYMBOL(v4l2_ctrl_subscribe_event);
3409
3410int v4l2_ctrl_subdev_subscribe_event(struct v4l2_subdev *sd, struct v4l2_fh *fh,
3411				     struct v4l2_event_subscription *sub)
3412{
3413	if (!sd->ctrl_handler)
3414		return -EINVAL;
3415	return v4l2_ctrl_subscribe_event(fh, sub);
3416}
3417EXPORT_SYMBOL(v4l2_ctrl_subdev_subscribe_event);
3418
3419unsigned int v4l2_ctrl_poll(struct file *file, struct poll_table_struct *wait)
3420{
3421	struct v4l2_fh *fh = file->private_data;
3422
3423	if (v4l2_event_pending(fh))
3424		return POLLPRI;
3425	poll_wait(file, &fh->wait, wait);
3426	return 0;
3427}
3428EXPORT_SYMBOL(v4l2_ctrl_poll);
3429