1 /*
2     V4L2 controls framework implementation.
3 
4     Copyright (C) 2010  Hans Verkuil <hverkuil@xs4all.nl>
5 
6     This program is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10 
11     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15 
16     You should have received a copy of the GNU General Public License
17     along with this program; if not, write to the Free Software
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20 
21 #include <linux/ctype.h>
22 #include <linux/slab.h>
23 #include <linux/export.h>
24 #include <media/v4l2-ioctl.h>
25 #include <media/v4l2-device.h>
26 #include <media/v4l2-ctrls.h>
27 #include <media/v4l2-event.h>
28 #include <media/v4l2-dev.h>
29 
30 #define has_op(master, op) \
31 	(master->ops && master->ops->op)
32 #define call_op(master, op) \
33 	(has_op(master, op) ? master->ops->op(master) : 0)
34 
35 /* Internal temporary helper struct, one for each v4l2_ext_control */
36 struct v4l2_ctrl_helper {
37 	/* Pointer to the control reference of the master control */
38 	struct v4l2_ctrl_ref *mref;
39 	/* The control corresponding to the v4l2_ext_control ID field. */
40 	struct v4l2_ctrl *ctrl;
41 	/* v4l2_ext_control index of the next control belonging to the
42 	   same cluster, or 0 if there isn't any. */
43 	u32 next;
44 };
45 
46 /* Small helper function to determine if the autocluster is set to manual
47    mode. */
is_cur_manual(const struct v4l2_ctrl * master)48 static bool is_cur_manual(const struct v4l2_ctrl *master)
49 {
50 	return master->is_auto && master->cur.val == master->manual_mode_value;
51 }
52 
53 /* Same as above, but this checks the against the new value instead of the
54    current value. */
is_new_manual(const struct v4l2_ctrl * master)55 static bool is_new_manual(const struct v4l2_ctrl *master)
56 {
57 	return master->is_auto && master->val == master->manual_mode_value;
58 }
59 
60 /* Returns NULL or a character pointer array containing the menu for
61    the given control ID. The pointer array ends with a NULL pointer.
62    An empty string signifies a menu entry that is invalid. This allows
63    drivers to disable certain options if it is not supported. */
v4l2_ctrl_get_menu(u32 id)64 const char * const *v4l2_ctrl_get_menu(u32 id)
65 {
66 	static const char * const mpeg_audio_sampling_freq[] = {
67 		"44.1 kHz",
68 		"48 kHz",
69 		"32 kHz",
70 		NULL
71 	};
72 	static const char * const mpeg_audio_encoding[] = {
73 		"MPEG-1/2 Layer I",
74 		"MPEG-1/2 Layer II",
75 		"MPEG-1/2 Layer III",
76 		"MPEG-2/4 AAC",
77 		"AC-3",
78 		NULL
79 	};
80 	static const char * const mpeg_audio_l1_bitrate[] = {
81 		"32 kbps",
82 		"64 kbps",
83 		"96 kbps",
84 		"128 kbps",
85 		"160 kbps",
86 		"192 kbps",
87 		"224 kbps",
88 		"256 kbps",
89 		"288 kbps",
90 		"320 kbps",
91 		"352 kbps",
92 		"384 kbps",
93 		"416 kbps",
94 		"448 kbps",
95 		NULL
96 	};
97 	static const char * const mpeg_audio_l2_bitrate[] = {
98 		"32 kbps",
99 		"48 kbps",
100 		"56 kbps",
101 		"64 kbps",
102 		"80 kbps",
103 		"96 kbps",
104 		"112 kbps",
105 		"128 kbps",
106 		"160 kbps",
107 		"192 kbps",
108 		"224 kbps",
109 		"256 kbps",
110 		"320 kbps",
111 		"384 kbps",
112 		NULL
113 	};
114 	static const char * const mpeg_audio_l3_bitrate[] = {
115 		"32 kbps",
116 		"40 kbps",
117 		"48 kbps",
118 		"56 kbps",
119 		"64 kbps",
120 		"80 kbps",
121 		"96 kbps",
122 		"112 kbps",
123 		"128 kbps",
124 		"160 kbps",
125 		"192 kbps",
126 		"224 kbps",
127 		"256 kbps",
128 		"320 kbps",
129 		NULL
130 	};
131 	static const char * const mpeg_audio_ac3_bitrate[] = {
132 		"32 kbps",
133 		"40 kbps",
134 		"48 kbps",
135 		"56 kbps",
136 		"64 kbps",
137 		"80 kbps",
138 		"96 kbps",
139 		"112 kbps",
140 		"128 kbps",
141 		"160 kbps",
142 		"192 kbps",
143 		"224 kbps",
144 		"256 kbps",
145 		"320 kbps",
146 		"384 kbps",
147 		"448 kbps",
148 		"512 kbps",
149 		"576 kbps",
150 		"640 kbps",
151 		NULL
152 	};
153 	static const char * const mpeg_audio_mode[] = {
154 		"Stereo",
155 		"Joint Stereo",
156 		"Dual",
157 		"Mono",
158 		NULL
159 	};
160 	static const char * const mpeg_audio_mode_extension[] = {
161 		"Bound 4",
162 		"Bound 8",
163 		"Bound 12",
164 		"Bound 16",
165 		NULL
166 	};
167 	static const char * const mpeg_audio_emphasis[] = {
168 		"No Emphasis",
169 		"50/15 us",
170 		"CCITT J17",
171 		NULL
172 	};
173 	static const char * const mpeg_audio_crc[] = {
174 		"No CRC",
175 		"16-bit CRC",
176 		NULL
177 	};
178 	static const char * const mpeg_video_encoding[] = {
179 		"MPEG-1",
180 		"MPEG-2",
181 		"MPEG-4 AVC",
182 		NULL
183 	};
184 	static const char * const mpeg_video_aspect[] = {
185 		"1x1",
186 		"4x3",
187 		"16x9",
188 		"2.21x1",
189 		NULL
190 	};
191 	static const char * const mpeg_video_bitrate_mode[] = {
192 		"Variable Bitrate",
193 		"Constant Bitrate",
194 		NULL
195 	};
196 	static const char * const mpeg_stream_type[] = {
197 		"MPEG-2 Program Stream",
198 		"MPEG-2 Transport Stream",
199 		"MPEG-1 System Stream",
200 		"MPEG-2 DVD-compatible Stream",
201 		"MPEG-1 VCD-compatible Stream",
202 		"MPEG-2 SVCD-compatible Stream",
203 		NULL
204 	};
205 	static const char * const mpeg_stream_vbi_fmt[] = {
206 		"No VBI",
207 		"Private Packet, IVTV Format",
208 		NULL
209 	};
210 	static const char * const camera_power_line_frequency[] = {
211 		"Disabled",
212 		"50 Hz",
213 		"60 Hz",
214 		"Auto",
215 		NULL
216 	};
217 	static const char * const camera_exposure_auto[] = {
218 		"Auto Mode",
219 		"Manual Mode",
220 		"Shutter Priority Mode",
221 		"Aperture Priority Mode",
222 		NULL
223 	};
224 	static const char * const colorfx[] = {
225 		"None",
226 		"Black & White",
227 		"Sepia",
228 		"Negative",
229 		"Emboss",
230 		"Sketch",
231 		"Sky Blue",
232 		"Grass Green",
233 		"Skin Whiten",
234 		"Vivid",
235 		NULL
236 	};
237 	static const char * const tune_preemphasis[] = {
238 		"No Preemphasis",
239 		"50 useconds",
240 		"75 useconds",
241 		NULL,
242 	};
243 	static const char * const header_mode[] = {
244 		"Separate Buffer",
245 		"Joined With 1st Frame",
246 		NULL,
247 	};
248 	static const char * const multi_slice[] = {
249 		"Single",
250 		"Max Macroblocks",
251 		"Max Bytes",
252 		NULL,
253 	};
254 	static const char * const entropy_mode[] = {
255 		"CAVLC",
256 		"CABAC",
257 		NULL,
258 	};
259 	static const char * const mpeg_h264_level[] = {
260 		"1",
261 		"1b",
262 		"1.1",
263 		"1.2",
264 		"1.3",
265 		"2",
266 		"2.1",
267 		"2.2",
268 		"3",
269 		"3.1",
270 		"3.2",
271 		"4",
272 		"4.1",
273 		"4.2",
274 		"5",
275 		"5.1",
276 		NULL,
277 	};
278 	static const char * const h264_loop_filter[] = {
279 		"Enabled",
280 		"Disabled",
281 		"Disabled at Slice Boundary",
282 		NULL,
283 	};
284 	static const char * const h264_profile[] = {
285 		"Baseline",
286 		"Constrained Baseline",
287 		"Main",
288 		"Extended",
289 		"High",
290 		"High 10",
291 		"High 422",
292 		"High 444 Predictive",
293 		"High 10 Intra",
294 		"High 422 Intra",
295 		"High 444 Intra",
296 		"CAVLC 444 Intra",
297 		"Scalable Baseline",
298 		"Scalable High",
299 		"Scalable High Intra",
300 		"Multiview High",
301 		NULL,
302 	};
303 	static const char * const vui_sar_idc[] = {
304 		"Unspecified",
305 		"1:1",
306 		"12:11",
307 		"10:11",
308 		"16:11",
309 		"40:33",
310 		"24:11",
311 		"20:11",
312 		"32:11",
313 		"80:33",
314 		"18:11",
315 		"15:11",
316 		"64:33",
317 		"160:99",
318 		"4:3",
319 		"3:2",
320 		"2:1",
321 		"Extended SAR",
322 		NULL,
323 	};
324 	static const char * const mpeg_mpeg4_level[] = {
325 		"0",
326 		"0b",
327 		"1",
328 		"2",
329 		"3",
330 		"3b",
331 		"4",
332 		"5",
333 		NULL,
334 	};
335 	static const char * const mpeg4_profile[] = {
336 		"Simple",
337 		"Adcanved Simple",
338 		"Core",
339 		"Simple Scalable",
340 		"Advanced Coding Efficency",
341 		NULL,
342 	};
343 
344 	static const char * const flash_led_mode[] = {
345 		"Off",
346 		"Flash",
347 		"Torch",
348 		NULL,
349 	};
350 	static const char * const flash_strobe_source[] = {
351 		"Software",
352 		"External",
353 		NULL,
354 	};
355 
356 	switch (id) {
357 	case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
358 		return mpeg_audio_sampling_freq;
359 	case V4L2_CID_MPEG_AUDIO_ENCODING:
360 		return mpeg_audio_encoding;
361 	case V4L2_CID_MPEG_AUDIO_L1_BITRATE:
362 		return mpeg_audio_l1_bitrate;
363 	case V4L2_CID_MPEG_AUDIO_L2_BITRATE:
364 		return mpeg_audio_l2_bitrate;
365 	case V4L2_CID_MPEG_AUDIO_L3_BITRATE:
366 		return mpeg_audio_l3_bitrate;
367 	case V4L2_CID_MPEG_AUDIO_AC3_BITRATE:
368 		return mpeg_audio_ac3_bitrate;
369 	case V4L2_CID_MPEG_AUDIO_MODE:
370 		return mpeg_audio_mode;
371 	case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION:
372 		return mpeg_audio_mode_extension;
373 	case V4L2_CID_MPEG_AUDIO_EMPHASIS:
374 		return mpeg_audio_emphasis;
375 	case V4L2_CID_MPEG_AUDIO_CRC:
376 		return mpeg_audio_crc;
377 	case V4L2_CID_MPEG_VIDEO_ENCODING:
378 		return mpeg_video_encoding;
379 	case V4L2_CID_MPEG_VIDEO_ASPECT:
380 		return mpeg_video_aspect;
381 	case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
382 		return mpeg_video_bitrate_mode;
383 	case V4L2_CID_MPEG_STREAM_TYPE:
384 		return mpeg_stream_type;
385 	case V4L2_CID_MPEG_STREAM_VBI_FMT:
386 		return mpeg_stream_vbi_fmt;
387 	case V4L2_CID_POWER_LINE_FREQUENCY:
388 		return camera_power_line_frequency;
389 	case V4L2_CID_EXPOSURE_AUTO:
390 		return camera_exposure_auto;
391 	case V4L2_CID_COLORFX:
392 		return colorfx;
393 	case V4L2_CID_TUNE_PREEMPHASIS:
394 		return tune_preemphasis;
395 	case V4L2_CID_FLASH_LED_MODE:
396 		return flash_led_mode;
397 	case V4L2_CID_FLASH_STROBE_SOURCE:
398 		return flash_strobe_source;
399 	case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
400 		return header_mode;
401 	case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:
402 		return multi_slice;
403 	case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
404 		return entropy_mode;
405 	case V4L2_CID_MPEG_VIDEO_H264_LEVEL:
406 		return mpeg_h264_level;
407 	case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE:
408 		return h264_loop_filter;
409 	case V4L2_CID_MPEG_VIDEO_H264_PROFILE:
410 		return h264_profile;
411 	case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC:
412 		return vui_sar_idc;
413 	case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL:
414 		return mpeg_mpeg4_level;
415 	case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE:
416 		return mpeg4_profile;
417 	default:
418 		return NULL;
419 	}
420 }
421 EXPORT_SYMBOL(v4l2_ctrl_get_menu);
422 
423 /* Return the control name. */
v4l2_ctrl_get_name(u32 id)424 const char *v4l2_ctrl_get_name(u32 id)
425 {
426 	switch (id) {
427 	/* USER controls */
428 	/* Keep the order of the 'case's the same as in videodev2.h! */
429 	case V4L2_CID_USER_CLASS:		return "User Controls";
430 	case V4L2_CID_BRIGHTNESS:		return "Brightness";
431 	case V4L2_CID_CONTRAST:			return "Contrast";
432 	case V4L2_CID_SATURATION:		return "Saturation";
433 	case V4L2_CID_HUE:			return "Hue";
434 	case V4L2_CID_AUDIO_VOLUME:		return "Volume";
435 	case V4L2_CID_AUDIO_BALANCE:		return "Balance";
436 	case V4L2_CID_AUDIO_BASS:		return "Bass";
437 	case V4L2_CID_AUDIO_TREBLE:		return "Treble";
438 	case V4L2_CID_AUDIO_MUTE:		return "Mute";
439 	case V4L2_CID_AUDIO_LOUDNESS:		return "Loudness";
440 	case V4L2_CID_BLACK_LEVEL:		return "Black Level";
441 	case V4L2_CID_AUTO_WHITE_BALANCE:	return "White Balance, Automatic";
442 	case V4L2_CID_DO_WHITE_BALANCE:		return "Do White Balance";
443 	case V4L2_CID_RED_BALANCE:		return "Red Balance";
444 	case V4L2_CID_BLUE_BALANCE:		return "Blue Balance";
445 	case V4L2_CID_GAMMA:			return "Gamma";
446 	case V4L2_CID_EXPOSURE:			return "Exposure";
447 	case V4L2_CID_AUTOGAIN:			return "Gain, Automatic";
448 	case V4L2_CID_GAIN:			return "Gain";
449 	case V4L2_CID_HFLIP:			return "Horizontal Flip";
450 	case V4L2_CID_VFLIP:			return "Vertical Flip";
451 	case V4L2_CID_HCENTER:			return "Horizontal Center";
452 	case V4L2_CID_VCENTER:			return "Vertical Center";
453 	case V4L2_CID_POWER_LINE_FREQUENCY:	return "Power Line Frequency";
454 	case V4L2_CID_HUE_AUTO:			return "Hue, Automatic";
455 	case V4L2_CID_WHITE_BALANCE_TEMPERATURE: return "White Balance Temperature";
456 	case V4L2_CID_SHARPNESS:		return "Sharpness";
457 	case V4L2_CID_BACKLIGHT_COMPENSATION:	return "Backlight Compensation";
458 	case V4L2_CID_CHROMA_AGC:		return "Chroma AGC";
459 	case V4L2_CID_COLOR_KILLER:		return "Color Killer";
460 	case V4L2_CID_COLORFX:			return "Color Effects";
461 	case V4L2_CID_AUTOBRIGHTNESS:		return "Brightness, Automatic";
462 	case V4L2_CID_BAND_STOP_FILTER:		return "Band-Stop Filter";
463 	case V4L2_CID_ROTATE:			return "Rotate";
464 	case V4L2_CID_BG_COLOR:			return "Background Color";
465 	case V4L2_CID_CHROMA_GAIN:		return "Chroma Gain";
466 	case V4L2_CID_ILLUMINATORS_1:		return "Illuminator 1";
467 	case V4L2_CID_ILLUMINATORS_2:		return "Illuminator 2";
468 	case V4L2_CID_MIN_BUFFERS_FOR_CAPTURE:	return "Min Number of Capture Buffers";
469 	case V4L2_CID_MIN_BUFFERS_FOR_OUTPUT:	return "Min Number of Output Buffers";
470 	case V4L2_CID_ALPHA_COMPONENT:		return "Alpha Component";
471 
472 	/* MPEG controls */
473 	/* Keep the order of the 'case's the same as in videodev2.h! */
474 	case V4L2_CID_MPEG_CLASS:		return "MPEG Encoder Controls";
475 	case V4L2_CID_MPEG_STREAM_TYPE:		return "Stream Type";
476 	case V4L2_CID_MPEG_STREAM_PID_PMT:	return "Stream PMT Program ID";
477 	case V4L2_CID_MPEG_STREAM_PID_AUDIO:	return "Stream Audio Program ID";
478 	case V4L2_CID_MPEG_STREAM_PID_VIDEO:	return "Stream Video Program ID";
479 	case V4L2_CID_MPEG_STREAM_PID_PCR:	return "Stream PCR Program ID";
480 	case V4L2_CID_MPEG_STREAM_PES_ID_AUDIO: return "Stream PES Audio ID";
481 	case V4L2_CID_MPEG_STREAM_PES_ID_VIDEO: return "Stream PES Video ID";
482 	case V4L2_CID_MPEG_STREAM_VBI_FMT:	return "Stream VBI Format";
483 	case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ: return "Audio Sampling Frequency";
484 	case V4L2_CID_MPEG_AUDIO_ENCODING:	return "Audio Encoding";
485 	case V4L2_CID_MPEG_AUDIO_L1_BITRATE:	return "Audio Layer I Bitrate";
486 	case V4L2_CID_MPEG_AUDIO_L2_BITRATE:	return "Audio Layer II Bitrate";
487 	case V4L2_CID_MPEG_AUDIO_L3_BITRATE:	return "Audio Layer III Bitrate";
488 	case V4L2_CID_MPEG_AUDIO_MODE:		return "Audio Stereo Mode";
489 	case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION: return "Audio Stereo Mode Extension";
490 	case V4L2_CID_MPEG_AUDIO_EMPHASIS:	return "Audio Emphasis";
491 	case V4L2_CID_MPEG_AUDIO_CRC:		return "Audio CRC";
492 	case V4L2_CID_MPEG_AUDIO_MUTE:		return "Audio Mute";
493 	case V4L2_CID_MPEG_AUDIO_AAC_BITRATE:	return "Audio AAC Bitrate";
494 	case V4L2_CID_MPEG_AUDIO_AC3_BITRATE:	return "Audio AC-3 Bitrate";
495 	case V4L2_CID_MPEG_VIDEO_ENCODING:	return "Video Encoding";
496 	case V4L2_CID_MPEG_VIDEO_ASPECT:	return "Video Aspect";
497 	case V4L2_CID_MPEG_VIDEO_B_FRAMES:	return "Video B Frames";
498 	case V4L2_CID_MPEG_VIDEO_GOP_SIZE:	return "Video GOP Size";
499 	case V4L2_CID_MPEG_VIDEO_GOP_CLOSURE:	return "Video GOP Closure";
500 	case V4L2_CID_MPEG_VIDEO_PULLDOWN:	return "Video Pulldown";
501 	case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:	return "Video Bitrate Mode";
502 	case V4L2_CID_MPEG_VIDEO_BITRATE:	return "Video Bitrate";
503 	case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK:	return "Video Peak Bitrate";
504 	case V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION: return "Video Temporal Decimation";
505 	case V4L2_CID_MPEG_VIDEO_MUTE:		return "Video Mute";
506 	case V4L2_CID_MPEG_VIDEO_MUTE_YUV:	return "Video Mute YUV";
507 	case V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE:	return "Decoder Slice Interface";
508 	case V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER:	return "MPEG4 Loop Filter Enable";
509 	case V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB:	return "Number of Intra Refresh MBs";
510 	case V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE:		return "Frame Level Rate Control Enable";
511 	case V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE:			return "H264 MB Level Rate Control";
512 	case V4L2_CID_MPEG_VIDEO_HEADER_MODE:			return "Sequence Header Mode";
513 	case V4L2_CID_MPEG_VIDEO_MAX_REF_PIC:			return "Max Number of Reference Pics";
514 	case V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP:		return "H263 I-Frame QP Value";
515 	case V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP:		return "H263 P-Frame QP Value";
516 	case V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP:		return "H263 B-Frame QP Value";
517 	case V4L2_CID_MPEG_VIDEO_H263_MIN_QP:			return "H263 Minimum QP Value";
518 	case V4L2_CID_MPEG_VIDEO_H263_MAX_QP:			return "H263 Maximum QP Value";
519 	case V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP:		return "H264 I-Frame QP Value";
520 	case V4L2_CID_MPEG_VIDEO_H264_P_FRAME_QP:		return "H264 P-Frame QP Value";
521 	case V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP:		return "H264 B-Frame QP Value";
522 	case V4L2_CID_MPEG_VIDEO_H264_MAX_QP:			return "H264 Maximum QP Value";
523 	case V4L2_CID_MPEG_VIDEO_H264_MIN_QP:			return "H264 Minimum QP Value";
524 	case V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM:		return "H264 8x8 Transform Enable";
525 	case V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE:			return "H264 CPB Buffer Size";
526 	case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:		return "H264 Entropy Mode";
527 	case V4L2_CID_MPEG_VIDEO_H264_I_PERIOD:			return "H264 I-Frame Period";
528 	case V4L2_CID_MPEG_VIDEO_H264_LEVEL:			return "H264 Level";
529 	case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA:	return "H264 Loop Filter Alpha Offset";
530 	case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA:		return "H264 Loop Filter Beta Offset";
531 	case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE:		return "H264 Loop Filter Mode";
532 	case V4L2_CID_MPEG_VIDEO_H264_PROFILE:			return "H264 Profile";
533 	case V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT:	return "Vertical Size of SAR";
534 	case V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH:	return "Horizontal Size of SAR";
535 	case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE:		return "Aspect Ratio VUI Enable";
536 	case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC:		return "VUI Aspect Ratio IDC";
537 	case V4L2_CID_MPEG_VIDEO_MPEG4_I_FRAME_QP:		return "MPEG4 I-Frame QP Value";
538 	case V4L2_CID_MPEG_VIDEO_MPEG4_P_FRAME_QP:		return "MPEG4 P-Frame QP Value";
539 	case V4L2_CID_MPEG_VIDEO_MPEG4_B_FRAME_QP:		return "MPEG4 B-Frame QP Value";
540 	case V4L2_CID_MPEG_VIDEO_MPEG4_MIN_QP:			return "MPEG4 Minimum QP Value";
541 	case V4L2_CID_MPEG_VIDEO_MPEG4_MAX_QP:			return "MPEG4 Maximum QP Value";
542 	case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL:			return "MPEG4 Level";
543 	case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE:			return "MPEG4 Profile";
544 	case V4L2_CID_MPEG_VIDEO_MPEG4_QPEL:			return "Quarter Pixel Search Enable";
545 	case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES:		return "Maximum Bytes in a Slice";
546 	case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB:		return "Number of MBs in a Slice";
547 	case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:		return "Slice Partitioning Method";
548 	case V4L2_CID_MPEG_VIDEO_VBV_SIZE:			return "VBV Buffer Size";
549 
550 	/* CAMERA controls */
551 	/* Keep the order of the 'case's the same as in videodev2.h! */
552 	case V4L2_CID_CAMERA_CLASS:		return "Camera Controls";
553 	case V4L2_CID_EXPOSURE_AUTO:		return "Auto Exposure";
554 	case V4L2_CID_EXPOSURE_ABSOLUTE:	return "Exposure Time, Absolute";
555 	case V4L2_CID_EXPOSURE_AUTO_PRIORITY:	return "Exposure, Dynamic Framerate";
556 	case V4L2_CID_PAN_RELATIVE:		return "Pan, Relative";
557 	case V4L2_CID_TILT_RELATIVE:		return "Tilt, Relative";
558 	case V4L2_CID_PAN_RESET:		return "Pan, Reset";
559 	case V4L2_CID_TILT_RESET:		return "Tilt, Reset";
560 	case V4L2_CID_PAN_ABSOLUTE:		return "Pan, Absolute";
561 	case V4L2_CID_TILT_ABSOLUTE:		return "Tilt, Absolute";
562 	case V4L2_CID_FOCUS_ABSOLUTE:		return "Focus, Absolute";
563 	case V4L2_CID_FOCUS_RELATIVE:		return "Focus, Relative";
564 	case V4L2_CID_FOCUS_AUTO:		return "Focus, Automatic";
565 	case V4L2_CID_ZOOM_ABSOLUTE:		return "Zoom, Absolute";
566 	case V4L2_CID_ZOOM_RELATIVE:		return "Zoom, Relative";
567 	case V4L2_CID_ZOOM_CONTINUOUS:		return "Zoom, Continuous";
568 	case V4L2_CID_PRIVACY:			return "Privacy";
569 	case V4L2_CID_IRIS_ABSOLUTE:		return "Iris, Absolute";
570 	case V4L2_CID_IRIS_RELATIVE:		return "Iris, Relative";
571 
572 	/* FM Radio Modulator control */
573 	/* Keep the order of the 'case's the same as in videodev2.h! */
574 	case V4L2_CID_FM_TX_CLASS:		return "FM Radio Modulator Controls";
575 	case V4L2_CID_RDS_TX_DEVIATION:		return "RDS Signal Deviation";
576 	case V4L2_CID_RDS_TX_PI:		return "RDS Program ID";
577 	case V4L2_CID_RDS_TX_PTY:		return "RDS Program Type";
578 	case V4L2_CID_RDS_TX_PS_NAME:		return "RDS PS Name";
579 	case V4L2_CID_RDS_TX_RADIO_TEXT:	return "RDS Radio Text";
580 	case V4L2_CID_AUDIO_LIMITER_ENABLED:	return "Audio Limiter Feature Enabled";
581 	case V4L2_CID_AUDIO_LIMITER_RELEASE_TIME: return "Audio Limiter Release Time";
582 	case V4L2_CID_AUDIO_LIMITER_DEVIATION:	return "Audio Limiter Deviation";
583 	case V4L2_CID_AUDIO_COMPRESSION_ENABLED: return "Audio Compression Enabled";
584 	case V4L2_CID_AUDIO_COMPRESSION_GAIN:	return "Audio Compression Gain";
585 	case V4L2_CID_AUDIO_COMPRESSION_THRESHOLD: return "Audio Compression Threshold";
586 	case V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME: return "Audio Compression Attack Time";
587 	case V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME: return "Audio Compression Release Time";
588 	case V4L2_CID_PILOT_TONE_ENABLED:	return "Pilot Tone Feature Enabled";
589 	case V4L2_CID_PILOT_TONE_DEVIATION:	return "Pilot Tone Deviation";
590 	case V4L2_CID_PILOT_TONE_FREQUENCY:	return "Pilot Tone Frequency";
591 	case V4L2_CID_TUNE_PREEMPHASIS:		return "Pre-Emphasis";
592 	case V4L2_CID_TUNE_POWER_LEVEL:		return "Tune Power Level";
593 	case V4L2_CID_TUNE_ANTENNA_CAPACITOR:	return "Tune Antenna Capacitor";
594 
595 	/* Flash controls */
596 	case V4L2_CID_FLASH_CLASS:		return "Flash Controls";
597 	case V4L2_CID_FLASH_LED_MODE:		return "LED Mode";
598 	case V4L2_CID_FLASH_STROBE_SOURCE:	return "Strobe Source";
599 	case V4L2_CID_FLASH_STROBE:		return "Strobe";
600 	case V4L2_CID_FLASH_STROBE_STOP:	return "Stop Strobe";
601 	case V4L2_CID_FLASH_STROBE_STATUS:	return "Strobe Status";
602 	case V4L2_CID_FLASH_TIMEOUT:		return "Strobe Timeout";
603 	case V4L2_CID_FLASH_INTENSITY:		return "Intensity, Flash Mode";
604 	case V4L2_CID_FLASH_TORCH_INTENSITY:	return "Intensity, Torch Mode";
605 	case V4L2_CID_FLASH_INDICATOR_INTENSITY: return "Intensity, Indicator";
606 	case V4L2_CID_FLASH_FAULT:		return "Faults";
607 	case V4L2_CID_FLASH_CHARGE:		return "Charge";
608 	case V4L2_CID_FLASH_READY:		return "Ready to Strobe";
609 
610 	default:
611 		return NULL;
612 	}
613 }
614 EXPORT_SYMBOL(v4l2_ctrl_get_name);
615 
v4l2_ctrl_fill(u32 id,const char ** name,enum v4l2_ctrl_type * type,s32 * min,s32 * max,s32 * step,s32 * def,u32 * flags)616 void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
617 		    s32 *min, s32 *max, s32 *step, s32 *def, u32 *flags)
618 {
619 	*name = v4l2_ctrl_get_name(id);
620 	*flags = 0;
621 
622 	switch (id) {
623 	case V4L2_CID_AUDIO_MUTE:
624 	case V4L2_CID_AUDIO_LOUDNESS:
625 	case V4L2_CID_AUTO_WHITE_BALANCE:
626 	case V4L2_CID_AUTOGAIN:
627 	case V4L2_CID_HFLIP:
628 	case V4L2_CID_VFLIP:
629 	case V4L2_CID_HUE_AUTO:
630 	case V4L2_CID_CHROMA_AGC:
631 	case V4L2_CID_COLOR_KILLER:
632 	case V4L2_CID_MPEG_AUDIO_MUTE:
633 	case V4L2_CID_MPEG_VIDEO_MUTE:
634 	case V4L2_CID_MPEG_VIDEO_GOP_CLOSURE:
635 	case V4L2_CID_MPEG_VIDEO_PULLDOWN:
636 	case V4L2_CID_EXPOSURE_AUTO_PRIORITY:
637 	case V4L2_CID_FOCUS_AUTO:
638 	case V4L2_CID_PRIVACY:
639 	case V4L2_CID_AUDIO_LIMITER_ENABLED:
640 	case V4L2_CID_AUDIO_COMPRESSION_ENABLED:
641 	case V4L2_CID_PILOT_TONE_ENABLED:
642 	case V4L2_CID_ILLUMINATORS_1:
643 	case V4L2_CID_ILLUMINATORS_2:
644 	case V4L2_CID_FLASH_STROBE_STATUS:
645 	case V4L2_CID_FLASH_CHARGE:
646 	case V4L2_CID_FLASH_READY:
647 	case V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER:
648 	case V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE:
649 	case V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE:
650 	case V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE:
651 	case V4L2_CID_MPEG_VIDEO_H264_8X8_TRANSFORM:
652 	case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_ENABLE:
653 	case V4L2_CID_MPEG_VIDEO_MPEG4_QPEL:
654 		*type = V4L2_CTRL_TYPE_BOOLEAN;
655 		*min = 0;
656 		*max = *step = 1;
657 		break;
658 	case V4L2_CID_PAN_RESET:
659 	case V4L2_CID_TILT_RESET:
660 	case V4L2_CID_FLASH_STROBE:
661 	case V4L2_CID_FLASH_STROBE_STOP:
662 		*type = V4L2_CTRL_TYPE_BUTTON;
663 		*flags |= V4L2_CTRL_FLAG_WRITE_ONLY;
664 		*min = *max = *step = *def = 0;
665 		break;
666 	case V4L2_CID_POWER_LINE_FREQUENCY:
667 	case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
668 	case V4L2_CID_MPEG_AUDIO_ENCODING:
669 	case V4L2_CID_MPEG_AUDIO_L1_BITRATE:
670 	case V4L2_CID_MPEG_AUDIO_L2_BITRATE:
671 	case V4L2_CID_MPEG_AUDIO_L3_BITRATE:
672 	case V4L2_CID_MPEG_AUDIO_AC3_BITRATE:
673 	case V4L2_CID_MPEG_AUDIO_MODE:
674 	case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION:
675 	case V4L2_CID_MPEG_AUDIO_EMPHASIS:
676 	case V4L2_CID_MPEG_AUDIO_CRC:
677 	case V4L2_CID_MPEG_VIDEO_ENCODING:
678 	case V4L2_CID_MPEG_VIDEO_ASPECT:
679 	case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
680 	case V4L2_CID_MPEG_STREAM_TYPE:
681 	case V4L2_CID_MPEG_STREAM_VBI_FMT:
682 	case V4L2_CID_EXPOSURE_AUTO:
683 	case V4L2_CID_COLORFX:
684 	case V4L2_CID_TUNE_PREEMPHASIS:
685 	case V4L2_CID_FLASH_LED_MODE:
686 	case V4L2_CID_FLASH_STROBE_SOURCE:
687 	case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
688 	case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:
689 	case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
690 	case V4L2_CID_MPEG_VIDEO_H264_LEVEL:
691 	case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE:
692 	case V4L2_CID_MPEG_VIDEO_H264_PROFILE:
693 	case V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC:
694 	case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL:
695 	case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE:
696 		*type = V4L2_CTRL_TYPE_MENU;
697 		break;
698 	case V4L2_CID_RDS_TX_PS_NAME:
699 	case V4L2_CID_RDS_TX_RADIO_TEXT:
700 		*type = V4L2_CTRL_TYPE_STRING;
701 		break;
702 	case V4L2_CID_USER_CLASS:
703 	case V4L2_CID_CAMERA_CLASS:
704 	case V4L2_CID_MPEG_CLASS:
705 	case V4L2_CID_FM_TX_CLASS:
706 	case V4L2_CID_FLASH_CLASS:
707 		*type = V4L2_CTRL_TYPE_CTRL_CLASS;
708 		/* You can neither read not write these */
709 		*flags |= V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_WRITE_ONLY;
710 		*min = *max = *step = *def = 0;
711 		break;
712 	case V4L2_CID_BG_COLOR:
713 		*type = V4L2_CTRL_TYPE_INTEGER;
714 		*step = 1;
715 		*min = 0;
716 		/* Max is calculated as RGB888 that is 2^24 */
717 		*max = 0xFFFFFF;
718 		break;
719 	case V4L2_CID_FLASH_FAULT:
720 		*type = V4L2_CTRL_TYPE_BITMASK;
721 		break;
722 	case V4L2_CID_MIN_BUFFERS_FOR_CAPTURE:
723 	case V4L2_CID_MIN_BUFFERS_FOR_OUTPUT:
724 		*type = V4L2_CTRL_TYPE_INTEGER;
725 		*flags |= V4L2_CTRL_FLAG_READ_ONLY;
726 		break;
727 	default:
728 		*type = V4L2_CTRL_TYPE_INTEGER;
729 		break;
730 	}
731 	switch (id) {
732 	case V4L2_CID_MPEG_AUDIO_ENCODING:
733 	case V4L2_CID_MPEG_AUDIO_MODE:
734 	case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
735 	case V4L2_CID_MPEG_VIDEO_B_FRAMES:
736 	case V4L2_CID_MPEG_STREAM_TYPE:
737 		*flags |= V4L2_CTRL_FLAG_UPDATE;
738 		break;
739 	case V4L2_CID_AUDIO_VOLUME:
740 	case V4L2_CID_AUDIO_BALANCE:
741 	case V4L2_CID_AUDIO_BASS:
742 	case V4L2_CID_AUDIO_TREBLE:
743 	case V4L2_CID_BRIGHTNESS:
744 	case V4L2_CID_CONTRAST:
745 	case V4L2_CID_SATURATION:
746 	case V4L2_CID_HUE:
747 	case V4L2_CID_RED_BALANCE:
748 	case V4L2_CID_BLUE_BALANCE:
749 	case V4L2_CID_GAMMA:
750 	case V4L2_CID_SHARPNESS:
751 	case V4L2_CID_CHROMA_GAIN:
752 	case V4L2_CID_RDS_TX_DEVIATION:
753 	case V4L2_CID_AUDIO_LIMITER_RELEASE_TIME:
754 	case V4L2_CID_AUDIO_LIMITER_DEVIATION:
755 	case V4L2_CID_AUDIO_COMPRESSION_GAIN:
756 	case V4L2_CID_AUDIO_COMPRESSION_THRESHOLD:
757 	case V4L2_CID_AUDIO_COMPRESSION_ATTACK_TIME:
758 	case V4L2_CID_AUDIO_COMPRESSION_RELEASE_TIME:
759 	case V4L2_CID_PILOT_TONE_DEVIATION:
760 	case V4L2_CID_PILOT_TONE_FREQUENCY:
761 	case V4L2_CID_TUNE_POWER_LEVEL:
762 	case V4L2_CID_TUNE_ANTENNA_CAPACITOR:
763 		*flags |= V4L2_CTRL_FLAG_SLIDER;
764 		break;
765 	case V4L2_CID_PAN_RELATIVE:
766 	case V4L2_CID_TILT_RELATIVE:
767 	case V4L2_CID_FOCUS_RELATIVE:
768 	case V4L2_CID_IRIS_RELATIVE:
769 	case V4L2_CID_ZOOM_RELATIVE:
770 		*flags |= V4L2_CTRL_FLAG_WRITE_ONLY;
771 		break;
772 	case V4L2_CID_FLASH_STROBE_STATUS:
773 	case V4L2_CID_FLASH_READY:
774 		*flags |= V4L2_CTRL_FLAG_READ_ONLY;
775 		break;
776 	}
777 }
778 EXPORT_SYMBOL(v4l2_ctrl_fill);
779 
780 /* Helper function to determine whether the control type is compatible with
781    VIDIOC_G/S_CTRL. */
type_is_int(const struct v4l2_ctrl * ctrl)782 static bool type_is_int(const struct v4l2_ctrl *ctrl)
783 {
784 	switch (ctrl->type) {
785 	case V4L2_CTRL_TYPE_INTEGER64:
786 	case V4L2_CTRL_TYPE_STRING:
787 		/* Nope, these need v4l2_ext_control */
788 		return false;
789 	default:
790 		return true;
791 	}
792 }
793 
fill_event(struct v4l2_event * ev,struct v4l2_ctrl * ctrl,u32 changes)794 static void fill_event(struct v4l2_event *ev, struct v4l2_ctrl *ctrl, u32 changes)
795 {
796 	memset(ev->reserved, 0, sizeof(ev->reserved));
797 	ev->type = V4L2_EVENT_CTRL;
798 	ev->id = ctrl->id;
799 	ev->u.ctrl.changes = changes;
800 	ev->u.ctrl.type = ctrl->type;
801 	ev->u.ctrl.flags = ctrl->flags;
802 	if (ctrl->type == V4L2_CTRL_TYPE_STRING)
803 		ev->u.ctrl.value64 = 0;
804 	else
805 		ev->u.ctrl.value64 = ctrl->cur.val64;
806 	ev->u.ctrl.minimum = ctrl->minimum;
807 	ev->u.ctrl.maximum = ctrl->maximum;
808 	if (ctrl->type == V4L2_CTRL_TYPE_MENU)
809 		ev->u.ctrl.step = 1;
810 	else
811 		ev->u.ctrl.step = ctrl->step;
812 	ev->u.ctrl.default_value = ctrl->default_value;
813 }
814 
send_event(struct v4l2_fh * fh,struct v4l2_ctrl * ctrl,u32 changes)815 static void send_event(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 changes)
816 {
817 	struct v4l2_event ev;
818 	struct v4l2_subscribed_event *sev;
819 
820 	if (list_empty(&ctrl->ev_subs))
821 		return;
822 	fill_event(&ev, ctrl, changes);
823 
824 	list_for_each_entry(sev, &ctrl->ev_subs, node)
825 		if (sev->fh != fh ||
826 		    (sev->flags & V4L2_EVENT_SUB_FL_ALLOW_FEEDBACK))
827 			v4l2_event_queue_fh(sev->fh, &ev);
828 }
829 
830 /* Helper function: copy the current control value back to the caller */
cur_to_user(struct v4l2_ext_control * c,struct v4l2_ctrl * ctrl)831 static int cur_to_user(struct v4l2_ext_control *c,
832 		       struct v4l2_ctrl *ctrl)
833 {
834 	u32 len;
835 
836 	switch (ctrl->type) {
837 	case V4L2_CTRL_TYPE_STRING:
838 		len = strlen(ctrl->cur.string);
839 		if (c->size < len + 1) {
840 			c->size = len + 1;
841 			return -ENOSPC;
842 		}
843 		return copy_to_user(c->string, ctrl->cur.string,
844 						len + 1) ? -EFAULT : 0;
845 	case V4L2_CTRL_TYPE_INTEGER64:
846 		c->value64 = ctrl->cur.val64;
847 		break;
848 	default:
849 		c->value = ctrl->cur.val;
850 		break;
851 	}
852 	return 0;
853 }
854 
855 /* Helper function: copy the caller-provider value as the new control value */
user_to_new(struct v4l2_ext_control * c,struct v4l2_ctrl * ctrl)856 static int user_to_new(struct v4l2_ext_control *c,
857 		       struct v4l2_ctrl *ctrl)
858 {
859 	int ret;
860 	u32 size;
861 
862 	ctrl->is_new = 1;
863 	switch (ctrl->type) {
864 	case V4L2_CTRL_TYPE_INTEGER64:
865 		ctrl->val64 = c->value64;
866 		break;
867 	case V4L2_CTRL_TYPE_STRING:
868 		size = c->size;
869 		if (size == 0)
870 			return -ERANGE;
871 		if (size > ctrl->maximum + 1)
872 			size = ctrl->maximum + 1;
873 		ret = copy_from_user(ctrl->string, c->string, size);
874 		if (!ret) {
875 			char last = ctrl->string[size - 1];
876 
877 			ctrl->string[size - 1] = 0;
878 			/* If the string was longer than ctrl->maximum,
879 			   then return an error. */
880 			if (strlen(ctrl->string) == ctrl->maximum && last)
881 				return -ERANGE;
882 		}
883 		return ret ? -EFAULT : 0;
884 	default:
885 		ctrl->val = c->value;
886 		break;
887 	}
888 	return 0;
889 }
890 
891 /* Helper function: copy the new control value back to the caller */
new_to_user(struct v4l2_ext_control * c,struct v4l2_ctrl * ctrl)892 static int new_to_user(struct v4l2_ext_control *c,
893 		       struct v4l2_ctrl *ctrl)
894 {
895 	u32 len;
896 
897 	switch (ctrl->type) {
898 	case V4L2_CTRL_TYPE_STRING:
899 		len = strlen(ctrl->string);
900 		if (c->size < len + 1) {
901 			c->size = ctrl->maximum + 1;
902 			return -ENOSPC;
903 		}
904 		return copy_to_user(c->string, ctrl->string,
905 						len + 1) ? -EFAULT : 0;
906 	case V4L2_CTRL_TYPE_INTEGER64:
907 		c->value64 = ctrl->val64;
908 		break;
909 	default:
910 		c->value = ctrl->val;
911 		break;
912 	}
913 	return 0;
914 }
915 
916 /* Copy the new value to the current value. */
new_to_cur(struct v4l2_fh * fh,struct v4l2_ctrl * ctrl,bool update_inactive)917 static void new_to_cur(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl,
918 						bool update_inactive)
919 {
920 	bool changed = false;
921 
922 	if (ctrl == NULL)
923 		return;
924 	switch (ctrl->type) {
925 	case V4L2_CTRL_TYPE_BUTTON:
926 		changed = true;
927 		break;
928 	case V4L2_CTRL_TYPE_STRING:
929 		/* strings are always 0-terminated */
930 		changed = strcmp(ctrl->string, ctrl->cur.string);
931 		strcpy(ctrl->cur.string, ctrl->string);
932 		break;
933 	case V4L2_CTRL_TYPE_INTEGER64:
934 		changed = ctrl->val64 != ctrl->cur.val64;
935 		ctrl->cur.val64 = ctrl->val64;
936 		break;
937 	default:
938 		changed = ctrl->val != ctrl->cur.val;
939 		ctrl->cur.val = ctrl->val;
940 		break;
941 	}
942 	if (update_inactive) {
943 		/* Note: update_inactive can only be true for auto clusters. */
944 		ctrl->flags &=
945 			~(V4L2_CTRL_FLAG_INACTIVE | V4L2_CTRL_FLAG_VOLATILE);
946 		if (!is_cur_manual(ctrl->cluster[0])) {
947 			ctrl->flags |= V4L2_CTRL_FLAG_INACTIVE;
948 			if (ctrl->cluster[0]->has_volatiles)
949 				ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE;
950 		}
951 		fh = NULL;
952 	}
953 	if (changed || update_inactive) {
954 		/* If a control was changed that was not one of the controls
955 		   modified by the application, then send the event to all. */
956 		if (!ctrl->is_new)
957 			fh = NULL;
958 		send_event(fh, ctrl,
959 			(changed ? V4L2_EVENT_CTRL_CH_VALUE : 0) |
960 			(update_inactive ? V4L2_EVENT_CTRL_CH_FLAGS : 0));
961 	}
962 }
963 
964 /* Copy the current value to the new value */
cur_to_new(struct v4l2_ctrl * ctrl)965 static void cur_to_new(struct v4l2_ctrl *ctrl)
966 {
967 	if (ctrl == NULL)
968 		return;
969 	switch (ctrl->type) {
970 	case V4L2_CTRL_TYPE_STRING:
971 		/* strings are always 0-terminated */
972 		strcpy(ctrl->string, ctrl->cur.string);
973 		break;
974 	case V4L2_CTRL_TYPE_INTEGER64:
975 		ctrl->val64 = ctrl->cur.val64;
976 		break;
977 	default:
978 		ctrl->val = ctrl->cur.val;
979 		break;
980 	}
981 }
982 
983 /* Return non-zero if one or more of the controls in the cluster has a new
984    value that differs from the current value. */
cluster_changed(struct v4l2_ctrl * master)985 static int cluster_changed(struct v4l2_ctrl *master)
986 {
987 	int diff = 0;
988 	int i;
989 
990 	for (i = 0; !diff && i < master->ncontrols; i++) {
991 		struct v4l2_ctrl *ctrl = master->cluster[i];
992 
993 		if (ctrl == NULL)
994 			continue;
995 		switch (ctrl->type) {
996 		case V4L2_CTRL_TYPE_BUTTON:
997 			/* Button controls are always 'different' */
998 			return 1;
999 		case V4L2_CTRL_TYPE_STRING:
1000 			/* strings are always 0-terminated */
1001 			diff = strcmp(ctrl->string, ctrl->cur.string);
1002 			break;
1003 		case V4L2_CTRL_TYPE_INTEGER64:
1004 			diff = ctrl->val64 != ctrl->cur.val64;
1005 			break;
1006 		default:
1007 			diff = ctrl->val != ctrl->cur.val;
1008 			break;
1009 		}
1010 	}
1011 	return diff;
1012 }
1013 
1014 /* Validate integer-type control */
validate_new_int(const struct v4l2_ctrl * ctrl,s32 * pval)1015 static int validate_new_int(const struct v4l2_ctrl *ctrl, s32 *pval)
1016 {
1017 	s32 val = *pval;
1018 	u32 offset;
1019 
1020 	switch (ctrl->type) {
1021 	case V4L2_CTRL_TYPE_INTEGER:
1022 		/* Round towards the closest legal value */
1023 		val += ctrl->step / 2;
1024 		if (val < ctrl->minimum)
1025 			val = ctrl->minimum;
1026 		if (val > ctrl->maximum)
1027 			val = ctrl->maximum;
1028 		offset = val - ctrl->minimum;
1029 		offset = ctrl->step * (offset / ctrl->step);
1030 		val = ctrl->minimum + offset;
1031 		*pval = val;
1032 		return 0;
1033 
1034 	case V4L2_CTRL_TYPE_BOOLEAN:
1035 		*pval = !!val;
1036 		return 0;
1037 
1038 	case V4L2_CTRL_TYPE_MENU:
1039 		if (val < ctrl->minimum || val > ctrl->maximum)
1040 			return -ERANGE;
1041 		if (ctrl->qmenu[val][0] == '\0' ||
1042 		    (ctrl->menu_skip_mask & (1 << val)))
1043 			return -EINVAL;
1044 		return 0;
1045 
1046 	case V4L2_CTRL_TYPE_BITMASK:
1047 		*pval &= ctrl->maximum;
1048 		return 0;
1049 
1050 	case V4L2_CTRL_TYPE_BUTTON:
1051 	case V4L2_CTRL_TYPE_CTRL_CLASS:
1052 		*pval = 0;
1053 		return 0;
1054 
1055 	default:
1056 		return -EINVAL;
1057 	}
1058 }
1059 
1060 /* Validate a new control */
validate_new(const struct v4l2_ctrl * ctrl,struct v4l2_ext_control * c)1061 static int validate_new(const struct v4l2_ctrl *ctrl, struct v4l2_ext_control *c)
1062 {
1063 	char *s = c->string;
1064 	size_t len;
1065 
1066 	switch (ctrl->type) {
1067 	case V4L2_CTRL_TYPE_INTEGER:
1068 	case V4L2_CTRL_TYPE_BOOLEAN:
1069 	case V4L2_CTRL_TYPE_MENU:
1070 	case V4L2_CTRL_TYPE_BITMASK:
1071 	case V4L2_CTRL_TYPE_BUTTON:
1072 	case V4L2_CTRL_TYPE_CTRL_CLASS:
1073 		return validate_new_int(ctrl, &c->value);
1074 
1075 	case V4L2_CTRL_TYPE_INTEGER64:
1076 		return 0;
1077 
1078 	case V4L2_CTRL_TYPE_STRING:
1079 		len = strlen(s);
1080 		if (len < ctrl->minimum)
1081 			return -ERANGE;
1082 		if ((len - ctrl->minimum) % ctrl->step)
1083 			return -ERANGE;
1084 		return 0;
1085 
1086 	default:
1087 		return -EINVAL;
1088 	}
1089 }
1090 
node2id(struct list_head * node)1091 static inline u32 node2id(struct list_head *node)
1092 {
1093 	return list_entry(node, struct v4l2_ctrl_ref, node)->ctrl->id;
1094 }
1095 
1096 /* Set the handler's error code if it wasn't set earlier already */
handler_set_err(struct v4l2_ctrl_handler * hdl,int err)1097 static inline int handler_set_err(struct v4l2_ctrl_handler *hdl, int err)
1098 {
1099 	if (hdl->error == 0)
1100 		hdl->error = err;
1101 	return err;
1102 }
1103 
1104 /* Initialize the handler */
v4l2_ctrl_handler_init(struct v4l2_ctrl_handler * hdl,unsigned nr_of_controls_hint)1105 int v4l2_ctrl_handler_init(struct v4l2_ctrl_handler *hdl,
1106 			   unsigned nr_of_controls_hint)
1107 {
1108 	mutex_init(&hdl->lock);
1109 	INIT_LIST_HEAD(&hdl->ctrls);
1110 	INIT_LIST_HEAD(&hdl->ctrl_refs);
1111 	hdl->nr_of_buckets = 1 + nr_of_controls_hint / 8;
1112 	hdl->buckets = kcalloc(hdl->nr_of_buckets, sizeof(hdl->buckets[0]),
1113 			       GFP_KERNEL);
1114 	hdl->error = hdl->buckets ? 0 : -ENOMEM;
1115 	return hdl->error;
1116 }
1117 EXPORT_SYMBOL(v4l2_ctrl_handler_init);
1118 
1119 /* Free all controls and control refs */
v4l2_ctrl_handler_free(struct v4l2_ctrl_handler * hdl)1120 void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)
1121 {
1122 	struct v4l2_ctrl_ref *ref, *next_ref;
1123 	struct v4l2_ctrl *ctrl, *next_ctrl;
1124 	struct v4l2_subscribed_event *sev, *next_sev;
1125 
1126 	if (hdl == NULL || hdl->buckets == NULL)
1127 		return;
1128 
1129 	mutex_lock(&hdl->lock);
1130 	/* Free all nodes */
1131 	list_for_each_entry_safe(ref, next_ref, &hdl->ctrl_refs, node) {
1132 		list_del(&ref->node);
1133 		kfree(ref);
1134 	}
1135 	/* Free all controls owned by the handler */
1136 	list_for_each_entry_safe(ctrl, next_ctrl, &hdl->ctrls, node) {
1137 		list_del(&ctrl->node);
1138 		list_for_each_entry_safe(sev, next_sev, &ctrl->ev_subs, node)
1139 			list_del(&sev->node);
1140 		kfree(ctrl);
1141 	}
1142 	kfree(hdl->buckets);
1143 	hdl->buckets = NULL;
1144 	hdl->cached = NULL;
1145 	hdl->error = 0;
1146 	mutex_unlock(&hdl->lock);
1147 }
1148 EXPORT_SYMBOL(v4l2_ctrl_handler_free);
1149 
1150 /* For backwards compatibility: V4L2_CID_PRIVATE_BASE should no longer
1151    be used except in G_CTRL, S_CTRL, QUERYCTRL and QUERYMENU when dealing
1152    with applications that do not use the NEXT_CTRL flag.
1153 
1154    We just find the n-th private user control. It's O(N), but that should not
1155    be an issue in this particular case. */
find_private_ref(struct v4l2_ctrl_handler * hdl,u32 id)1156 static struct v4l2_ctrl_ref *find_private_ref(
1157 		struct v4l2_ctrl_handler *hdl, u32 id)
1158 {
1159 	struct v4l2_ctrl_ref *ref;
1160 
1161 	id -= V4L2_CID_PRIVATE_BASE;
1162 	list_for_each_entry(ref, &hdl->ctrl_refs, node) {
1163 		/* Search for private user controls that are compatible with
1164 		   VIDIOC_G/S_CTRL. */
1165 		if (V4L2_CTRL_ID2CLASS(ref->ctrl->id) == V4L2_CTRL_CLASS_USER &&
1166 		    V4L2_CTRL_DRIVER_PRIV(ref->ctrl->id)) {
1167 			if (!type_is_int(ref->ctrl))
1168 				continue;
1169 			if (id == 0)
1170 				return ref;
1171 			id--;
1172 		}
1173 	}
1174 	return NULL;
1175 }
1176 
1177 /* Find a control with the given ID. */
find_ref(struct v4l2_ctrl_handler * hdl,u32 id)1178 static struct v4l2_ctrl_ref *find_ref(struct v4l2_ctrl_handler *hdl, u32 id)
1179 {
1180 	struct v4l2_ctrl_ref *ref;
1181 	int bucket;
1182 
1183 	id &= V4L2_CTRL_ID_MASK;
1184 
1185 	/* Old-style private controls need special handling */
1186 	if (id >= V4L2_CID_PRIVATE_BASE)
1187 		return find_private_ref(hdl, id);
1188 	bucket = id % hdl->nr_of_buckets;
1189 
1190 	/* Simple optimization: cache the last control found */
1191 	if (hdl->cached && hdl->cached->ctrl->id == id)
1192 		return hdl->cached;
1193 
1194 	/* Not in cache, search the hash */
1195 	ref = hdl->buckets ? hdl->buckets[bucket] : NULL;
1196 	while (ref && ref->ctrl->id != id)
1197 		ref = ref->next;
1198 
1199 	if (ref)
1200 		hdl->cached = ref; /* cache it! */
1201 	return ref;
1202 }
1203 
1204 /* Find a control with the given ID. Take the handler's lock first. */
find_ref_lock(struct v4l2_ctrl_handler * hdl,u32 id)1205 static struct v4l2_ctrl_ref *find_ref_lock(
1206 		struct v4l2_ctrl_handler *hdl, u32 id)
1207 {
1208 	struct v4l2_ctrl_ref *ref = NULL;
1209 
1210 	if (hdl) {
1211 		mutex_lock(&hdl->lock);
1212 		ref = find_ref(hdl, id);
1213 		mutex_unlock(&hdl->lock);
1214 	}
1215 	return ref;
1216 }
1217 
1218 /* Find a control with the given ID. */
v4l2_ctrl_find(struct v4l2_ctrl_handler * hdl,u32 id)1219 struct v4l2_ctrl *v4l2_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id)
1220 {
1221 	struct v4l2_ctrl_ref *ref = find_ref_lock(hdl, id);
1222 
1223 	return ref ? ref->ctrl : NULL;
1224 }
1225 EXPORT_SYMBOL(v4l2_ctrl_find);
1226 
1227 /* Allocate a new v4l2_ctrl_ref and hook it into the handler. */
handler_new_ref(struct v4l2_ctrl_handler * hdl,struct v4l2_ctrl * ctrl)1228 static int handler_new_ref(struct v4l2_ctrl_handler *hdl,
1229 			   struct v4l2_ctrl *ctrl)
1230 {
1231 	struct v4l2_ctrl_ref *ref;
1232 	struct v4l2_ctrl_ref *new_ref;
1233 	u32 id = ctrl->id;
1234 	u32 class_ctrl = V4L2_CTRL_ID2CLASS(id) | 1;
1235 	int bucket = id % hdl->nr_of_buckets;	/* which bucket to use */
1236 
1237 	/* Automatically add the control class if it is not yet present. */
1238 	if (id != class_ctrl && find_ref_lock(hdl, class_ctrl) == NULL)
1239 		if (!v4l2_ctrl_new_std(hdl, NULL, class_ctrl, 0, 0, 0, 0))
1240 			return hdl->error;
1241 
1242 	if (hdl->error)
1243 		return hdl->error;
1244 
1245 	new_ref = kzalloc(sizeof(*new_ref), GFP_KERNEL);
1246 	if (!new_ref)
1247 		return handler_set_err(hdl, -ENOMEM);
1248 	new_ref->ctrl = ctrl;
1249 	if (ctrl->handler == hdl) {
1250 		/* By default each control starts in a cluster of its own.
1251 		   new_ref->ctrl is basically a cluster array with one
1252 		   element, so that's perfect to use as the cluster pointer.
1253 		   But only do this for the handler that owns the control. */
1254 		ctrl->cluster = &new_ref->ctrl;
1255 		ctrl->ncontrols = 1;
1256 	}
1257 
1258 	INIT_LIST_HEAD(&new_ref->node);
1259 
1260 	mutex_lock(&hdl->lock);
1261 
1262 	/* Add immediately at the end of the list if the list is empty, or if
1263 	   the last element in the list has a lower ID.
1264 	   This ensures that when elements are added in ascending order the
1265 	   insertion is an O(1) operation. */
1266 	if (list_empty(&hdl->ctrl_refs) || id > node2id(hdl->ctrl_refs.prev)) {
1267 		list_add_tail(&new_ref->node, &hdl->ctrl_refs);
1268 		goto insert_in_hash;
1269 	}
1270 
1271 	/* Find insert position in sorted list */
1272 	list_for_each_entry(ref, &hdl->ctrl_refs, node) {
1273 		if (ref->ctrl->id < id)
1274 			continue;
1275 		/* Don't add duplicates */
1276 		if (ref->ctrl->id == id) {
1277 			kfree(new_ref);
1278 			goto unlock;
1279 		}
1280 		list_add(&new_ref->node, ref->node.prev);
1281 		break;
1282 	}
1283 
1284 insert_in_hash:
1285 	/* Insert the control node in the hash */
1286 	new_ref->next = hdl->buckets[bucket];
1287 	hdl->buckets[bucket] = new_ref;
1288 
1289 unlock:
1290 	mutex_unlock(&hdl->lock);
1291 	return 0;
1292 }
1293 
1294 /* Add a new control */
v4l2_ctrl_new(struct v4l2_ctrl_handler * hdl,const struct v4l2_ctrl_ops * ops,u32 id,const char * name,enum v4l2_ctrl_type type,s32 min,s32 max,u32 step,s32 def,u32 flags,const char * const * qmenu,void * priv)1295 static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
1296 			const struct v4l2_ctrl_ops *ops,
1297 			u32 id, const char *name, enum v4l2_ctrl_type type,
1298 			s32 min, s32 max, u32 step, s32 def,
1299 			u32 flags, const char * const *qmenu, void *priv)
1300 {
1301 	struct v4l2_ctrl *ctrl;
1302 	unsigned sz_extra = 0;
1303 
1304 	if (hdl->error)
1305 		return NULL;
1306 
1307 	/* Sanity checks */
1308 	if (id == 0 || name == NULL || id >= V4L2_CID_PRIVATE_BASE ||
1309 	    (type == V4L2_CTRL_TYPE_INTEGER && step == 0) ||
1310 	    (type == V4L2_CTRL_TYPE_BITMASK && max == 0) ||
1311 	    (type == V4L2_CTRL_TYPE_MENU && qmenu == NULL) ||
1312 	    (type == V4L2_CTRL_TYPE_STRING && max == 0)) {
1313 		handler_set_err(hdl, -ERANGE);
1314 		return NULL;
1315 	}
1316 	if (type != V4L2_CTRL_TYPE_BITMASK && max < min) {
1317 		handler_set_err(hdl, -ERANGE);
1318 		return NULL;
1319 	}
1320 	if ((type == V4L2_CTRL_TYPE_INTEGER ||
1321 	     type == V4L2_CTRL_TYPE_MENU ||
1322 	     type == V4L2_CTRL_TYPE_BOOLEAN) &&
1323 	    (def < min || def > max)) {
1324 		handler_set_err(hdl, -ERANGE);
1325 		return NULL;
1326 	}
1327 	if (type == V4L2_CTRL_TYPE_BITMASK && ((def & ~max) || min || step)) {
1328 		handler_set_err(hdl, -ERANGE);
1329 		return NULL;
1330 	}
1331 
1332 	if (type == V4L2_CTRL_TYPE_BUTTON)
1333 		flags |= V4L2_CTRL_FLAG_WRITE_ONLY;
1334 	else if (type == V4L2_CTRL_TYPE_CTRL_CLASS)
1335 		flags |= V4L2_CTRL_FLAG_READ_ONLY;
1336 	else if (type == V4L2_CTRL_TYPE_STRING)
1337 		sz_extra += 2 * (max + 1);
1338 
1339 	ctrl = kzalloc(sizeof(*ctrl) + sz_extra, GFP_KERNEL);
1340 	if (ctrl == NULL) {
1341 		handler_set_err(hdl, -ENOMEM);
1342 		return NULL;
1343 	}
1344 
1345 	INIT_LIST_HEAD(&ctrl->node);
1346 	INIT_LIST_HEAD(&ctrl->ev_subs);
1347 	ctrl->handler = hdl;
1348 	ctrl->ops = ops;
1349 	ctrl->id = id;
1350 	ctrl->name = name;
1351 	ctrl->type = type;
1352 	ctrl->flags = flags;
1353 	ctrl->minimum = min;
1354 	ctrl->maximum = max;
1355 	ctrl->step = step;
1356 	ctrl->qmenu = qmenu;
1357 	ctrl->priv = priv;
1358 	ctrl->cur.val = ctrl->val = ctrl->default_value = def;
1359 
1360 	if (ctrl->type == V4L2_CTRL_TYPE_STRING) {
1361 		ctrl->cur.string = (char *)&ctrl[1] + sz_extra - (max + 1);
1362 		ctrl->string = (char *)&ctrl[1] + sz_extra - 2 * (max + 1);
1363 		if (ctrl->minimum)
1364 			memset(ctrl->cur.string, ' ', ctrl->minimum);
1365 	}
1366 	if (handler_new_ref(hdl, ctrl)) {
1367 		kfree(ctrl);
1368 		return NULL;
1369 	}
1370 	mutex_lock(&hdl->lock);
1371 	list_add_tail(&ctrl->node, &hdl->ctrls);
1372 	mutex_unlock(&hdl->lock);
1373 	return ctrl;
1374 }
1375 
v4l2_ctrl_new_custom(struct v4l2_ctrl_handler * hdl,const struct v4l2_ctrl_config * cfg,void * priv)1376 struct v4l2_ctrl *v4l2_ctrl_new_custom(struct v4l2_ctrl_handler *hdl,
1377 			const struct v4l2_ctrl_config *cfg, void *priv)
1378 {
1379 	bool is_menu;
1380 	struct v4l2_ctrl *ctrl;
1381 	const char *name = cfg->name;
1382 	const char * const *qmenu = cfg->qmenu;
1383 	enum v4l2_ctrl_type type = cfg->type;
1384 	u32 flags = cfg->flags;
1385 	s32 min = cfg->min;
1386 	s32 max = cfg->max;
1387 	u32 step = cfg->step;
1388 	s32 def = cfg->def;
1389 
1390 	if (name == NULL)
1391 		v4l2_ctrl_fill(cfg->id, &name, &type, &min, &max, &step,
1392 								&def, &flags);
1393 
1394 	is_menu = (cfg->type == V4L2_CTRL_TYPE_MENU);
1395 	if (is_menu)
1396 		WARN_ON(step);
1397 	else
1398 		WARN_ON(cfg->menu_skip_mask);
1399 	if (is_menu && qmenu == NULL)
1400 		qmenu = v4l2_ctrl_get_menu(cfg->id);
1401 
1402 	ctrl = v4l2_ctrl_new(hdl, cfg->ops, cfg->id, name,
1403 			type, min, max,
1404 			is_menu ? cfg->menu_skip_mask : step,
1405 			def, flags, qmenu, priv);
1406 	if (ctrl)
1407 		ctrl->is_private = cfg->is_private;
1408 	return ctrl;
1409 }
1410 EXPORT_SYMBOL(v4l2_ctrl_new_custom);
1411 
1412 /* Helper function for standard non-menu controls */
v4l2_ctrl_new_std(struct v4l2_ctrl_handler * hdl,const struct v4l2_ctrl_ops * ops,u32 id,s32 min,s32 max,u32 step,s32 def)1413 struct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl,
1414 			const struct v4l2_ctrl_ops *ops,
1415 			u32 id, s32 min, s32 max, u32 step, s32 def)
1416 {
1417 	const char *name;
1418 	enum v4l2_ctrl_type type;
1419 	u32 flags;
1420 
1421 	v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
1422 	if (type == V4L2_CTRL_TYPE_MENU) {
1423 		handler_set_err(hdl, -EINVAL);
1424 		return NULL;
1425 	}
1426 	return v4l2_ctrl_new(hdl, ops, id, name, type,
1427 				    min, max, step, def, flags, NULL, NULL);
1428 }
1429 EXPORT_SYMBOL(v4l2_ctrl_new_std);
1430 
1431 /* Helper function for standard menu controls */
v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler * hdl,const struct v4l2_ctrl_ops * ops,u32 id,s32 max,s32 mask,s32 def)1432 struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl,
1433 			const struct v4l2_ctrl_ops *ops,
1434 			u32 id, s32 max, s32 mask, s32 def)
1435 {
1436 	const char * const *qmenu = v4l2_ctrl_get_menu(id);
1437 	const char *name;
1438 	enum v4l2_ctrl_type type;
1439 	s32 min;
1440 	s32 step;
1441 	u32 flags;
1442 
1443 	v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
1444 	if (type != V4L2_CTRL_TYPE_MENU) {
1445 		handler_set_err(hdl, -EINVAL);
1446 		return NULL;
1447 	}
1448 	return v4l2_ctrl_new(hdl, ops, id, name, type,
1449 				    0, max, mask, def, flags, qmenu, NULL);
1450 }
1451 EXPORT_SYMBOL(v4l2_ctrl_new_std_menu);
1452 
1453 /* Add a control from another handler to this handler */
v4l2_ctrl_add_ctrl(struct v4l2_ctrl_handler * hdl,struct v4l2_ctrl * ctrl)1454 struct v4l2_ctrl *v4l2_ctrl_add_ctrl(struct v4l2_ctrl_handler *hdl,
1455 					  struct v4l2_ctrl *ctrl)
1456 {
1457 	if (hdl == NULL || hdl->error)
1458 		return NULL;
1459 	if (ctrl == NULL) {
1460 		handler_set_err(hdl, -EINVAL);
1461 		return NULL;
1462 	}
1463 	if (ctrl->handler == hdl)
1464 		return ctrl;
1465 	return handler_new_ref(hdl, ctrl) ? NULL : ctrl;
1466 }
1467 EXPORT_SYMBOL(v4l2_ctrl_add_ctrl);
1468 
1469 /* Add the controls from another handler to our own. */
v4l2_ctrl_add_handler(struct v4l2_ctrl_handler * hdl,struct v4l2_ctrl_handler * add)1470 int v4l2_ctrl_add_handler(struct v4l2_ctrl_handler *hdl,
1471 			  struct v4l2_ctrl_handler *add)
1472 {
1473 	struct v4l2_ctrl *ctrl;
1474 	int ret = 0;
1475 
1476 	/* Do nothing if either handler is NULL or if they are the same */
1477 	if (!hdl || !add || hdl == add)
1478 		return 0;
1479 	if (hdl->error)
1480 		return hdl->error;
1481 	mutex_lock(&add->lock);
1482 	list_for_each_entry(ctrl, &add->ctrls, node) {
1483 		/* Skip handler-private controls. */
1484 		if (ctrl->is_private)
1485 			continue;
1486 		/* And control classes */
1487 		if (ctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
1488 			continue;
1489 		ret = handler_new_ref(hdl, ctrl);
1490 		if (ret)
1491 			break;
1492 	}
1493 	mutex_unlock(&add->lock);
1494 	return ret;
1495 }
1496 EXPORT_SYMBOL(v4l2_ctrl_add_handler);
1497 
1498 /* Cluster controls */
v4l2_ctrl_cluster(unsigned ncontrols,struct v4l2_ctrl ** controls)1499 void v4l2_ctrl_cluster(unsigned ncontrols, struct v4l2_ctrl **controls)
1500 {
1501 	bool has_volatiles = false;
1502 	int i;
1503 
1504 	/* The first control is the master control and it must not be NULL */
1505 	BUG_ON(ncontrols == 0 || controls[0] == NULL);
1506 
1507 	for (i = 0; i < ncontrols; i++) {
1508 		if (controls[i]) {
1509 			controls[i]->cluster = controls;
1510 			controls[i]->ncontrols = ncontrols;
1511 			if (controls[i]->flags & V4L2_CTRL_FLAG_VOLATILE)
1512 				has_volatiles = true;
1513 		}
1514 	}
1515 	controls[0]->has_volatiles = has_volatiles;
1516 }
1517 EXPORT_SYMBOL(v4l2_ctrl_cluster);
1518 
v4l2_ctrl_auto_cluster(unsigned ncontrols,struct v4l2_ctrl ** controls,u8 manual_val,bool set_volatile)1519 void v4l2_ctrl_auto_cluster(unsigned ncontrols, struct v4l2_ctrl **controls,
1520 			    u8 manual_val, bool set_volatile)
1521 {
1522 	struct v4l2_ctrl *master = controls[0];
1523 	u32 flag = 0;
1524 	int i;
1525 
1526 	v4l2_ctrl_cluster(ncontrols, controls);
1527 	WARN_ON(ncontrols <= 1);
1528 	WARN_ON(manual_val < master->minimum || manual_val > master->maximum);
1529 	WARN_ON(set_volatile && !has_op(master, g_volatile_ctrl));
1530 	master->is_auto = true;
1531 	master->has_volatiles = set_volatile;
1532 	master->manual_mode_value = manual_val;
1533 	master->flags |= V4L2_CTRL_FLAG_UPDATE;
1534 
1535 	if (!is_cur_manual(master))
1536 		flag = V4L2_CTRL_FLAG_INACTIVE |
1537 			(set_volatile ? V4L2_CTRL_FLAG_VOLATILE : 0);
1538 
1539 	for (i = 1; i < ncontrols; i++)
1540 		if (controls[i])
1541 			controls[i]->flags |= flag;
1542 }
1543 EXPORT_SYMBOL(v4l2_ctrl_auto_cluster);
1544 
1545 /* Activate/deactivate a control. */
v4l2_ctrl_activate(struct v4l2_ctrl * ctrl,bool active)1546 void v4l2_ctrl_activate(struct v4l2_ctrl *ctrl, bool active)
1547 {
1548 	/* invert since the actual flag is called 'inactive' */
1549 	bool inactive = !active;
1550 	bool old;
1551 
1552 	if (ctrl == NULL)
1553 		return;
1554 
1555 	if (inactive)
1556 		/* set V4L2_CTRL_FLAG_INACTIVE */
1557 		old = test_and_set_bit(4, &ctrl->flags);
1558 	else
1559 		/* clear V4L2_CTRL_FLAG_INACTIVE */
1560 		old = test_and_clear_bit(4, &ctrl->flags);
1561 	if (old != inactive)
1562 		send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_FLAGS);
1563 }
1564 EXPORT_SYMBOL(v4l2_ctrl_activate);
1565 
1566 /* Grab/ungrab a control.
1567    Typically used when streaming starts and you want to grab controls,
1568    preventing the user from changing them.
1569 
1570    Just call this and the framework will block any attempts to change
1571    these controls. */
v4l2_ctrl_grab(struct v4l2_ctrl * ctrl,bool grabbed)1572 void v4l2_ctrl_grab(struct v4l2_ctrl *ctrl, bool grabbed)
1573 {
1574 	bool old;
1575 
1576 	if (ctrl == NULL)
1577 		return;
1578 
1579 	v4l2_ctrl_lock(ctrl);
1580 	if (grabbed)
1581 		/* set V4L2_CTRL_FLAG_GRABBED */
1582 		old = test_and_set_bit(1, &ctrl->flags);
1583 	else
1584 		/* clear V4L2_CTRL_FLAG_GRABBED */
1585 		old = test_and_clear_bit(1, &ctrl->flags);
1586 	if (old != grabbed)
1587 		send_event(NULL, ctrl, V4L2_EVENT_CTRL_CH_FLAGS);
1588 	v4l2_ctrl_unlock(ctrl);
1589 }
1590 EXPORT_SYMBOL(v4l2_ctrl_grab);
1591 
1592 /* Log the control name and value */
log_ctrl(const struct v4l2_ctrl * ctrl,const char * prefix,const char * colon)1593 static void log_ctrl(const struct v4l2_ctrl *ctrl,
1594 		     const char *prefix, const char *colon)
1595 {
1596 	if (ctrl->flags & (V4L2_CTRL_FLAG_DISABLED | V4L2_CTRL_FLAG_WRITE_ONLY))
1597 		return;
1598 	if (ctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
1599 		return;
1600 
1601 	printk(KERN_INFO "%s%s%s: ", prefix, colon, ctrl->name);
1602 
1603 	switch (ctrl->type) {
1604 	case V4L2_CTRL_TYPE_INTEGER:
1605 		printk(KERN_CONT "%d", ctrl->cur.val);
1606 		break;
1607 	case V4L2_CTRL_TYPE_BOOLEAN:
1608 		printk(KERN_CONT "%s", ctrl->cur.val ? "true" : "false");
1609 		break;
1610 	case V4L2_CTRL_TYPE_MENU:
1611 		printk(KERN_CONT "%s", ctrl->qmenu[ctrl->cur.val]);
1612 		break;
1613 	case V4L2_CTRL_TYPE_BITMASK:
1614 		printk(KERN_CONT "0x%08x", ctrl->cur.val);
1615 		break;
1616 	case V4L2_CTRL_TYPE_INTEGER64:
1617 		printk(KERN_CONT "%lld", ctrl->cur.val64);
1618 		break;
1619 	case V4L2_CTRL_TYPE_STRING:
1620 		printk(KERN_CONT "%s", ctrl->cur.string);
1621 		break;
1622 	default:
1623 		printk(KERN_CONT "unknown type %d", ctrl->type);
1624 		break;
1625 	}
1626 	if (ctrl->flags & (V4L2_CTRL_FLAG_INACTIVE |
1627 			   V4L2_CTRL_FLAG_GRABBED |
1628 			   V4L2_CTRL_FLAG_VOLATILE)) {
1629 		if (ctrl->flags & V4L2_CTRL_FLAG_INACTIVE)
1630 			printk(KERN_CONT " inactive");
1631 		if (ctrl->flags & V4L2_CTRL_FLAG_GRABBED)
1632 			printk(KERN_CONT " grabbed");
1633 		if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE)
1634 			printk(KERN_CONT " volatile");
1635 	}
1636 	printk(KERN_CONT "\n");
1637 }
1638 
1639 /* Log all controls owned by the handler */
v4l2_ctrl_handler_log_status(struct v4l2_ctrl_handler * hdl,const char * prefix)1640 void v4l2_ctrl_handler_log_status(struct v4l2_ctrl_handler *hdl,
1641 				  const char *prefix)
1642 {
1643 	struct v4l2_ctrl *ctrl;
1644 	const char *colon = "";
1645 	int len;
1646 
1647 	if (hdl == NULL)
1648 		return;
1649 	if (prefix == NULL)
1650 		prefix = "";
1651 	len = strlen(prefix);
1652 	if (len && prefix[len - 1] != ' ')
1653 		colon = ": ";
1654 	mutex_lock(&hdl->lock);
1655 	list_for_each_entry(ctrl, &hdl->ctrls, node)
1656 		if (!(ctrl->flags & V4L2_CTRL_FLAG_DISABLED))
1657 			log_ctrl(ctrl, prefix, colon);
1658 	mutex_unlock(&hdl->lock);
1659 }
1660 EXPORT_SYMBOL(v4l2_ctrl_handler_log_status);
1661 
1662 /* Call s_ctrl for all controls owned by the handler */
v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler * hdl)1663 int v4l2_ctrl_handler_setup(struct v4l2_ctrl_handler *hdl)
1664 {
1665 	struct v4l2_ctrl *ctrl;
1666 	int ret = 0;
1667 
1668 	if (hdl == NULL)
1669 		return 0;
1670 	mutex_lock(&hdl->lock);
1671 	list_for_each_entry(ctrl, &hdl->ctrls, node)
1672 		ctrl->done = false;
1673 
1674 	list_for_each_entry(ctrl, &hdl->ctrls, node) {
1675 		struct v4l2_ctrl *master = ctrl->cluster[0];
1676 		int i;
1677 
1678 		/* Skip if this control was already handled by a cluster. */
1679 		/* Skip button controls and read-only controls. */
1680 		if (ctrl->done || ctrl->type == V4L2_CTRL_TYPE_BUTTON ||
1681 		    (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY))
1682 			continue;
1683 
1684 		for (i = 0; i < master->ncontrols; i++) {
1685 			if (master->cluster[i]) {
1686 				cur_to_new(master->cluster[i]);
1687 				master->cluster[i]->is_new = 1;
1688 				master->cluster[i]->done = true;
1689 			}
1690 		}
1691 		ret = call_op(master, s_ctrl);
1692 		if (ret)
1693 			break;
1694 	}
1695 	mutex_unlock(&hdl->lock);
1696 	return ret;
1697 }
1698 EXPORT_SYMBOL(v4l2_ctrl_handler_setup);
1699 
1700 /* Implement VIDIOC_QUERYCTRL */
v4l2_queryctrl(struct v4l2_ctrl_handler * hdl,struct v4l2_queryctrl * qc)1701 int v4l2_queryctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc)
1702 {
1703 	u32 id = qc->id & V4L2_CTRL_ID_MASK;
1704 	struct v4l2_ctrl_ref *ref;
1705 	struct v4l2_ctrl *ctrl;
1706 
1707 	if (hdl == NULL)
1708 		return -EINVAL;
1709 
1710 	mutex_lock(&hdl->lock);
1711 
1712 	/* Try to find it */
1713 	ref = find_ref(hdl, id);
1714 
1715 	if ((qc->id & V4L2_CTRL_FLAG_NEXT_CTRL) && !list_empty(&hdl->ctrl_refs)) {
1716 		/* Find the next control with ID > qc->id */
1717 
1718 		/* Did we reach the end of the control list? */
1719 		if (id >= node2id(hdl->ctrl_refs.prev)) {
1720 			ref = NULL; /* Yes, so there is no next control */
1721 		} else if (ref) {
1722 			/* We found a control with the given ID, so just get
1723 			   the next one in the list. */
1724 			ref = list_entry(ref->node.next, typeof(*ref), node);
1725 		} else {
1726 			/* No control with the given ID exists, so start
1727 			   searching for the next largest ID. We know there
1728 			   is one, otherwise the first 'if' above would have
1729 			   been true. */
1730 			list_for_each_entry(ref, &hdl->ctrl_refs, node)
1731 				if (id < ref->ctrl->id)
1732 					break;
1733 		}
1734 	}
1735 	mutex_unlock(&hdl->lock);
1736 	if (!ref)
1737 		return -EINVAL;
1738 
1739 	ctrl = ref->ctrl;
1740 	memset(qc, 0, sizeof(*qc));
1741 	if (id >= V4L2_CID_PRIVATE_BASE)
1742 		qc->id = id;
1743 	else
1744 		qc->id = ctrl->id;
1745 	strlcpy(qc->name, ctrl->name, sizeof(qc->name));
1746 	qc->minimum = ctrl->minimum;
1747 	qc->maximum = ctrl->maximum;
1748 	qc->default_value = ctrl->default_value;
1749 	if (ctrl->type == V4L2_CTRL_TYPE_MENU)
1750 		qc->step = 1;
1751 	else
1752 		qc->step = ctrl->step;
1753 	qc->flags = ctrl->flags;
1754 	qc->type = ctrl->type;
1755 	return 0;
1756 }
1757 EXPORT_SYMBOL(v4l2_queryctrl);
1758 
v4l2_subdev_queryctrl(struct v4l2_subdev * sd,struct v4l2_queryctrl * qc)1759 int v4l2_subdev_queryctrl(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc)
1760 {
1761 	if (qc->id & V4L2_CTRL_FLAG_NEXT_CTRL)
1762 		return -EINVAL;
1763 	return v4l2_queryctrl(sd->ctrl_handler, qc);
1764 }
1765 EXPORT_SYMBOL(v4l2_subdev_queryctrl);
1766 
1767 /* Implement VIDIOC_QUERYMENU */
v4l2_querymenu(struct v4l2_ctrl_handler * hdl,struct v4l2_querymenu * qm)1768 int v4l2_querymenu(struct v4l2_ctrl_handler *hdl, struct v4l2_querymenu *qm)
1769 {
1770 	struct v4l2_ctrl *ctrl;
1771 	u32 i = qm->index;
1772 
1773 	ctrl = v4l2_ctrl_find(hdl, qm->id);
1774 	if (!ctrl)
1775 		return -EINVAL;
1776 
1777 	qm->reserved = 0;
1778 	/* Sanity checks */
1779 	if (ctrl->qmenu == NULL ||
1780 	    i < ctrl->minimum || i > ctrl->maximum)
1781 		return -EINVAL;
1782 	/* Use mask to see if this menu item should be skipped */
1783 	if (ctrl->menu_skip_mask & (1 << i))
1784 		return -EINVAL;
1785 	/* Empty menu items should also be skipped */
1786 	if (ctrl->qmenu[i] == NULL || ctrl->qmenu[i][0] == '\0')
1787 		return -EINVAL;
1788 	strlcpy(qm->name, ctrl->qmenu[i], sizeof(qm->name));
1789 	return 0;
1790 }
1791 EXPORT_SYMBOL(v4l2_querymenu);
1792 
v4l2_subdev_querymenu(struct v4l2_subdev * sd,struct v4l2_querymenu * qm)1793 int v4l2_subdev_querymenu(struct v4l2_subdev *sd, struct v4l2_querymenu *qm)
1794 {
1795 	return v4l2_querymenu(sd->ctrl_handler, qm);
1796 }
1797 EXPORT_SYMBOL(v4l2_subdev_querymenu);
1798 
1799 
1800 
1801 /* Some general notes on the atomic requirements of VIDIOC_G/TRY/S_EXT_CTRLS:
1802 
1803    It is not a fully atomic operation, just best-effort only. After all, if
1804    multiple controls have to be set through multiple i2c writes (for example)
1805    then some initial writes may succeed while others fail. Thus leaving the
1806    system in an inconsistent state. The question is how much effort you are
1807    willing to spend on trying to make something atomic that really isn't.
1808 
1809    From the point of view of an application the main requirement is that
1810    when you call VIDIOC_S_EXT_CTRLS and some values are invalid then an
1811    error should be returned without actually affecting any controls.
1812 
1813    If all the values are correct, then it is acceptable to just give up
1814    in case of low-level errors.
1815 
1816    It is important though that the application can tell when only a partial
1817    configuration was done. The way we do that is through the error_idx field
1818    of struct v4l2_ext_controls: if that is equal to the count field then no
1819    controls were affected. Otherwise all controls before that index were
1820    successful in performing their 'get' or 'set' operation, the control at
1821    the given index failed, and you don't know what happened with the controls
1822    after the failed one. Since if they were part of a control cluster they
1823    could have been successfully processed (if a cluster member was encountered
1824    at index < error_idx), they could have failed (if a cluster member was at
1825    error_idx), or they may not have been processed yet (if the first cluster
1826    member appeared after error_idx).
1827 
1828    It is all fairly theoretical, though. In practice all you can do is to
1829    bail out. If error_idx == count, then it is an application bug. If
1830    error_idx < count then it is only an application bug if the error code was
1831    EBUSY. That usually means that something started streaming just when you
1832    tried to set the controls. In all other cases it is a driver/hardware
1833    problem and all you can do is to retry or bail out.
1834 
1835    Note that these rules do not apply to VIDIOC_TRY_EXT_CTRLS: since that
1836    never modifies controls the error_idx is just set to whatever control
1837    has an invalid value.
1838  */
1839 
1840 /* Prepare for the extended g/s/try functions.
1841    Find the controls in the control array and do some basic checks. */
prepare_ext_ctrls(struct v4l2_ctrl_handler * hdl,struct v4l2_ext_controls * cs,struct v4l2_ctrl_helper * helpers)1842 static int prepare_ext_ctrls(struct v4l2_ctrl_handler *hdl,
1843 			     struct v4l2_ext_controls *cs,
1844 			     struct v4l2_ctrl_helper *helpers)
1845 {
1846 	struct v4l2_ctrl_helper *h;
1847 	bool have_clusters = false;
1848 	u32 i;
1849 
1850 	for (i = 0, h = helpers; i < cs->count; i++, h++) {
1851 		struct v4l2_ext_control *c = &cs->controls[i];
1852 		struct v4l2_ctrl_ref *ref;
1853 		struct v4l2_ctrl *ctrl;
1854 		u32 id = c->id & V4L2_CTRL_ID_MASK;
1855 
1856 		cs->error_idx = i;
1857 
1858 		if (cs->ctrl_class && V4L2_CTRL_ID2CLASS(id) != cs->ctrl_class)
1859 			return -EINVAL;
1860 
1861 		/* Old-style private controls are not allowed for
1862 		   extended controls */
1863 		if (id >= V4L2_CID_PRIVATE_BASE)
1864 			return -EINVAL;
1865 		ref = find_ref_lock(hdl, id);
1866 		if (ref == NULL)
1867 			return -EINVAL;
1868 		ctrl = ref->ctrl;
1869 		if (ctrl->flags & V4L2_CTRL_FLAG_DISABLED)
1870 			return -EINVAL;
1871 
1872 		if (ctrl->cluster[0]->ncontrols > 1)
1873 			have_clusters = true;
1874 		if (ctrl->cluster[0] != ctrl)
1875 			ref = find_ref_lock(hdl, ctrl->cluster[0]->id);
1876 		/* Store the ref to the master control of the cluster */
1877 		h->mref = ref;
1878 		h->ctrl = ctrl;
1879 		/* Initially set next to 0, meaning that there is no other
1880 		   control in this helper array belonging to the same
1881 		   cluster */
1882 		h->next = 0;
1883 	}
1884 
1885 	/* We are done if there were no controls that belong to a multi-
1886 	   control cluster. */
1887 	if (!have_clusters)
1888 		return 0;
1889 
1890 	/* The code below figures out in O(n) time which controls in the list
1891 	   belong to the same cluster. */
1892 
1893 	/* This has to be done with the handler lock taken. */
1894 	mutex_lock(&hdl->lock);
1895 
1896 	/* First zero the helper field in the master control references */
1897 	for (i = 0; i < cs->count; i++)
1898 		helpers[i].mref->helper = 0;
1899 	for (i = 0, h = helpers; i < cs->count; i++, h++) {
1900 		struct v4l2_ctrl_ref *mref = h->mref;
1901 
1902 		/* If the mref->helper is set, then it points to an earlier
1903 		   helper that belongs to the same cluster. */
1904 		if (mref->helper) {
1905 			/* Set the next field of mref->helper to the current
1906 			   index: this means that that earlier helper now
1907 			   points to the next helper in the same cluster. */
1908 			mref->helper->next = i;
1909 			/* mref should be set only for the first helper in the
1910 			   cluster, clear the others. */
1911 			h->mref = NULL;
1912 		}
1913 		/* Point the mref helper to the current helper struct. */
1914 		mref->helper = h;
1915 	}
1916 	mutex_unlock(&hdl->lock);
1917 	return 0;
1918 }
1919 
1920 /* Handles the corner case where cs->count == 0. It checks whether the
1921    specified control class exists. If that class ID is 0, then it checks
1922    whether there are any controls at all. */
class_check(struct v4l2_ctrl_handler * hdl,u32 ctrl_class)1923 static int class_check(struct v4l2_ctrl_handler *hdl, u32 ctrl_class)
1924 {
1925 	if (ctrl_class == 0)
1926 		return list_empty(&hdl->ctrl_refs) ? -EINVAL : 0;
1927 	return find_ref_lock(hdl, ctrl_class | 1) ? 0 : -EINVAL;
1928 }
1929 
1930 
1931 
1932 /* Get extended controls. Allocates the helpers array if needed. */
v4l2_g_ext_ctrls(struct v4l2_ctrl_handler * hdl,struct v4l2_ext_controls * cs)1933 int v4l2_g_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct v4l2_ext_controls *cs)
1934 {
1935 	struct v4l2_ctrl_helper helper[4];
1936 	struct v4l2_ctrl_helper *helpers = helper;
1937 	int ret;
1938 	int i, j;
1939 
1940 	cs->error_idx = cs->count;
1941 	cs->ctrl_class = V4L2_CTRL_ID2CLASS(cs->ctrl_class);
1942 
1943 	if (hdl == NULL)
1944 		return -EINVAL;
1945 
1946 	if (cs->count == 0)
1947 		return class_check(hdl, cs->ctrl_class);
1948 
1949 	if (cs->count > ARRAY_SIZE(helper)) {
1950 		helpers = kmalloc(sizeof(helper[0]) * cs->count, GFP_KERNEL);
1951 		if (helpers == NULL)
1952 			return -ENOMEM;
1953 	}
1954 
1955 	ret = prepare_ext_ctrls(hdl, cs, helpers);
1956 	cs->error_idx = cs->count;
1957 
1958 	for (i = 0; !ret && i < cs->count; i++)
1959 		if (helpers[i].ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY)
1960 			ret = -EACCES;
1961 
1962 	for (i = 0; !ret && i < cs->count; i++) {
1963 		int (*ctrl_to_user)(struct v4l2_ext_control *c,
1964 				    struct v4l2_ctrl *ctrl) = cur_to_user;
1965 		struct v4l2_ctrl *master;
1966 
1967 		if (helpers[i].mref == NULL)
1968 			continue;
1969 
1970 		master = helpers[i].mref->ctrl;
1971 		cs->error_idx = i;
1972 
1973 		v4l2_ctrl_lock(master);
1974 
1975 		/* g_volatile_ctrl will update the new control values */
1976 		if ((master->flags & V4L2_CTRL_FLAG_VOLATILE) ||
1977 			(master->has_volatiles && !is_cur_manual(master))) {
1978 			for (j = 0; j < master->ncontrols; j++)
1979 				cur_to_new(master->cluster[j]);
1980 			ret = call_op(master, g_volatile_ctrl);
1981 			ctrl_to_user = new_to_user;
1982 		}
1983 		/* If OK, then copy the current (for non-volatile controls)
1984 		   or the new (for volatile controls) control values to the
1985 		   caller */
1986 		if (!ret) {
1987 			u32 idx = i;
1988 
1989 			do {
1990 				ret = ctrl_to_user(cs->controls + idx,
1991 						   helpers[idx].ctrl);
1992 				idx = helpers[idx].next;
1993 			} while (!ret && idx);
1994 		}
1995 		v4l2_ctrl_unlock(master);
1996 	}
1997 
1998 	if (cs->count > ARRAY_SIZE(helper))
1999 		kfree(helpers);
2000 	return ret;
2001 }
2002 EXPORT_SYMBOL(v4l2_g_ext_ctrls);
2003 
v4l2_subdev_g_ext_ctrls(struct v4l2_subdev * sd,struct v4l2_ext_controls * cs)2004 int v4l2_subdev_g_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *cs)
2005 {
2006 	return v4l2_g_ext_ctrls(sd->ctrl_handler, cs);
2007 }
2008 EXPORT_SYMBOL(v4l2_subdev_g_ext_ctrls);
2009 
2010 /* Helper function to get a single control */
get_ctrl(struct v4l2_ctrl * ctrl,s32 * val)2011 static int get_ctrl(struct v4l2_ctrl *ctrl, s32 *val)
2012 {
2013 	struct v4l2_ctrl *master = ctrl->cluster[0];
2014 	int ret = 0;
2015 	int i;
2016 
2017 	if (ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY)
2018 		return -EACCES;
2019 
2020 	v4l2_ctrl_lock(master);
2021 	/* g_volatile_ctrl will update the current control values */
2022 	if (ctrl->flags & V4L2_CTRL_FLAG_VOLATILE) {
2023 		for (i = 0; i < master->ncontrols; i++)
2024 			cur_to_new(master->cluster[i]);
2025 		ret = call_op(master, g_volatile_ctrl);
2026 		*val = ctrl->val;
2027 	} else {
2028 		*val = ctrl->cur.val;
2029 	}
2030 	v4l2_ctrl_unlock(master);
2031 	return ret;
2032 }
2033 
v4l2_g_ctrl(struct v4l2_ctrl_handler * hdl,struct v4l2_control * control)2034 int v4l2_g_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_control *control)
2035 {
2036 	struct v4l2_ctrl *ctrl = v4l2_ctrl_find(hdl, control->id);
2037 
2038 	if (ctrl == NULL || !type_is_int(ctrl))
2039 		return -EINVAL;
2040 	return get_ctrl(ctrl, &control->value);
2041 }
2042 EXPORT_SYMBOL(v4l2_g_ctrl);
2043 
v4l2_subdev_g_ctrl(struct v4l2_subdev * sd,struct v4l2_control * control)2044 int v4l2_subdev_g_ctrl(struct v4l2_subdev *sd, struct v4l2_control *control)
2045 {
2046 	return v4l2_g_ctrl(sd->ctrl_handler, control);
2047 }
2048 EXPORT_SYMBOL(v4l2_subdev_g_ctrl);
2049 
v4l2_ctrl_g_ctrl(struct v4l2_ctrl * ctrl)2050 s32 v4l2_ctrl_g_ctrl(struct v4l2_ctrl *ctrl)
2051 {
2052 	s32 val = 0;
2053 
2054 	/* It's a driver bug if this happens. */
2055 	WARN_ON(!type_is_int(ctrl));
2056 	get_ctrl(ctrl, &val);
2057 	return val;
2058 }
2059 EXPORT_SYMBOL(v4l2_ctrl_g_ctrl);
2060 
2061 
2062 /* Core function that calls try/s_ctrl and ensures that the new value is
2063    copied to the current value on a set.
2064    Must be called with ctrl->handler->lock held. */
try_or_set_cluster(struct v4l2_fh * fh,struct v4l2_ctrl * master,bool set)2065 static int try_or_set_cluster(struct v4l2_fh *fh,
2066 			      struct v4l2_ctrl *master, bool set)
2067 {
2068 	bool update_flag;
2069 	int ret;
2070 	int i;
2071 
2072 	/* Go through the cluster and either validate the new value or
2073 	   (if no new value was set), copy the current value to the new
2074 	   value, ensuring a consistent view for the control ops when
2075 	   called. */
2076 	for (i = 0; i < master->ncontrols; i++) {
2077 		struct v4l2_ctrl *ctrl = master->cluster[i];
2078 
2079 		if (ctrl == NULL)
2080 			continue;
2081 
2082 		if (!ctrl->is_new) {
2083 			cur_to_new(ctrl);
2084 			continue;
2085 		}
2086 		/* Check again: it may have changed since the
2087 		   previous check in try_or_set_ext_ctrls(). */
2088 		if (set && (ctrl->flags & V4L2_CTRL_FLAG_GRABBED))
2089 			return -EBUSY;
2090 	}
2091 
2092 	ret = call_op(master, try_ctrl);
2093 
2094 	/* Don't set if there is no change */
2095 	if (ret || !set || !cluster_changed(master))
2096 		return ret;
2097 	ret = call_op(master, s_ctrl);
2098 	if (ret)
2099 		return ret;
2100 
2101 	/* If OK, then make the new values permanent. */
2102 	update_flag = is_cur_manual(master) != is_new_manual(master);
2103 	for (i = 0; i < master->ncontrols; i++)
2104 		new_to_cur(fh, master->cluster[i], update_flag && i > 0);
2105 	return 0;
2106 }
2107 
2108 /* Validate controls. */
validate_ctrls(struct v4l2_ext_controls * cs,struct v4l2_ctrl_helper * helpers,bool set)2109 static int validate_ctrls(struct v4l2_ext_controls *cs,
2110 			  struct v4l2_ctrl_helper *helpers, bool set)
2111 {
2112 	unsigned i;
2113 	int ret = 0;
2114 
2115 	cs->error_idx = cs->count;
2116 	for (i = 0; i < cs->count; i++) {
2117 		struct v4l2_ctrl *ctrl = helpers[i].ctrl;
2118 
2119 		cs->error_idx = i;
2120 
2121 		if (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY)
2122 			return -EACCES;
2123 		/* This test is also done in try_set_control_cluster() which
2124 		   is called in atomic context, so that has the final say,
2125 		   but it makes sense to do an up-front check as well. Once
2126 		   an error occurs in try_set_control_cluster() some other
2127 		   controls may have been set already and we want to do a
2128 		   best-effort to avoid that. */
2129 		if (set && (ctrl->flags & V4L2_CTRL_FLAG_GRABBED))
2130 			return -EBUSY;
2131 		ret = validate_new(ctrl, &cs->controls[i]);
2132 		if (ret)
2133 			return ret;
2134 	}
2135 	return 0;
2136 }
2137 
2138 /* Obtain the current volatile values of an autocluster and mark them
2139    as new. */
update_from_auto_cluster(struct v4l2_ctrl * master)2140 static void update_from_auto_cluster(struct v4l2_ctrl *master)
2141 {
2142 	int i;
2143 
2144 	for (i = 0; i < master->ncontrols; i++)
2145 		cur_to_new(master->cluster[i]);
2146 	if (!call_op(master, g_volatile_ctrl))
2147 		for (i = 1; i < master->ncontrols; i++)
2148 			if (master->cluster[i])
2149 				master->cluster[i]->is_new = 1;
2150 }
2151 
2152 /* Try or try-and-set controls */
try_set_ext_ctrls(struct v4l2_fh * fh,struct v4l2_ctrl_handler * hdl,struct v4l2_ext_controls * cs,bool set)2153 static int try_set_ext_ctrls(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl,
2154 			     struct v4l2_ext_controls *cs,
2155 			     bool set)
2156 {
2157 	struct v4l2_ctrl_helper helper[4];
2158 	struct v4l2_ctrl_helper *helpers = helper;
2159 	unsigned i, j;
2160 	int ret;
2161 
2162 	cs->error_idx = cs->count;
2163 	cs->ctrl_class = V4L2_CTRL_ID2CLASS(cs->ctrl_class);
2164 
2165 	if (hdl == NULL)
2166 		return -EINVAL;
2167 
2168 	if (cs->count == 0)
2169 		return class_check(hdl, cs->ctrl_class);
2170 
2171 	if (cs->count > ARRAY_SIZE(helper)) {
2172 		helpers = kmalloc(sizeof(helper[0]) * cs->count, GFP_KERNEL);
2173 		if (!helpers)
2174 			return -ENOMEM;
2175 	}
2176 	ret = prepare_ext_ctrls(hdl, cs, helpers);
2177 	if (!ret)
2178 		ret = validate_ctrls(cs, helpers, set);
2179 	if (ret && set)
2180 		cs->error_idx = cs->count;
2181 	for (i = 0; !ret && i < cs->count; i++) {
2182 		struct v4l2_ctrl *master;
2183 		u32 idx = i;
2184 
2185 		if (helpers[i].mref == NULL)
2186 			continue;
2187 
2188 		cs->error_idx = i;
2189 		master = helpers[i].mref->ctrl;
2190 		v4l2_ctrl_lock(master);
2191 
2192 		/* Reset the 'is_new' flags of the cluster */
2193 		for (j = 0; j < master->ncontrols; j++)
2194 			if (master->cluster[j])
2195 				master->cluster[j]->is_new = 0;
2196 
2197 		/* For volatile autoclusters that are currently in auto mode
2198 		   we need to discover if it will be set to manual mode.
2199 		   If so, then we have to copy the current volatile values
2200 		   first since those will become the new manual values (which
2201 		   may be overwritten by explicit new values from this set
2202 		   of controls). */
2203 		if (master->is_auto && master->has_volatiles &&
2204 						!is_cur_manual(master)) {
2205 			/* Pick an initial non-manual value */
2206 			s32 new_auto_val = master->manual_mode_value + 1;
2207 			u32 tmp_idx = idx;
2208 
2209 			do {
2210 				/* Check if the auto control is part of the
2211 				   list, and remember the new value. */
2212 				if (helpers[tmp_idx].ctrl == master)
2213 					new_auto_val = cs->controls[tmp_idx].value;
2214 				tmp_idx = helpers[tmp_idx].next;
2215 			} while (tmp_idx);
2216 			/* If the new value == the manual value, then copy
2217 			   the current volatile values. */
2218 			if (new_auto_val == master->manual_mode_value)
2219 				update_from_auto_cluster(master);
2220 		}
2221 
2222 		/* Copy the new caller-supplied control values.
2223 		   user_to_new() sets 'is_new' to 1. */
2224 		do {
2225 			ret = user_to_new(cs->controls + idx, helpers[idx].ctrl);
2226 			idx = helpers[idx].next;
2227 		} while (!ret && idx);
2228 
2229 		if (!ret)
2230 			ret = try_or_set_cluster(fh, master, set);
2231 
2232 		/* Copy the new values back to userspace. */
2233 		if (!ret) {
2234 			idx = i;
2235 			do {
2236 				ret = new_to_user(cs->controls + idx,
2237 						helpers[idx].ctrl);
2238 				idx = helpers[idx].next;
2239 			} while (!ret && idx);
2240 		}
2241 		v4l2_ctrl_unlock(master);
2242 	}
2243 
2244 	if (cs->count > ARRAY_SIZE(helper))
2245 		kfree(helpers);
2246 	return ret;
2247 }
2248 
v4l2_try_ext_ctrls(struct v4l2_ctrl_handler * hdl,struct v4l2_ext_controls * cs)2249 int v4l2_try_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct v4l2_ext_controls *cs)
2250 {
2251 	return try_set_ext_ctrls(NULL, hdl, cs, false);
2252 }
2253 EXPORT_SYMBOL(v4l2_try_ext_ctrls);
2254 
v4l2_s_ext_ctrls(struct v4l2_fh * fh,struct v4l2_ctrl_handler * hdl,struct v4l2_ext_controls * cs)2255 int v4l2_s_ext_ctrls(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl,
2256 					struct v4l2_ext_controls *cs)
2257 {
2258 	return try_set_ext_ctrls(fh, hdl, cs, true);
2259 }
2260 EXPORT_SYMBOL(v4l2_s_ext_ctrls);
2261 
v4l2_subdev_try_ext_ctrls(struct v4l2_subdev * sd,struct v4l2_ext_controls * cs)2262 int v4l2_subdev_try_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *cs)
2263 {
2264 	return try_set_ext_ctrls(NULL, sd->ctrl_handler, cs, false);
2265 }
2266 EXPORT_SYMBOL(v4l2_subdev_try_ext_ctrls);
2267 
v4l2_subdev_s_ext_ctrls(struct v4l2_subdev * sd,struct v4l2_ext_controls * cs)2268 int v4l2_subdev_s_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *cs)
2269 {
2270 	return try_set_ext_ctrls(NULL, sd->ctrl_handler, cs, true);
2271 }
2272 EXPORT_SYMBOL(v4l2_subdev_s_ext_ctrls);
2273 
2274 /* Helper function for VIDIOC_S_CTRL compatibility */
set_ctrl(struct v4l2_fh * fh,struct v4l2_ctrl * ctrl,s32 * val)2275 static int set_ctrl(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, s32 *val)
2276 {
2277 	struct v4l2_ctrl *master = ctrl->cluster[0];
2278 	int ret;
2279 	int i;
2280 
2281 	ret = validate_new_int(ctrl, val);
2282 	if (ret)
2283 		return ret;
2284 
2285 	v4l2_ctrl_lock(ctrl);
2286 
2287 	/* Reset the 'is_new' flags of the cluster */
2288 	for (i = 0; i < master->ncontrols; i++)
2289 		if (master->cluster[i])
2290 			master->cluster[i]->is_new = 0;
2291 
2292 	/* For autoclusters with volatiles that are switched from auto to
2293 	   manual mode we have to update the current volatile values since
2294 	   those will become the initial manual values after such a switch. */
2295 	if (master->is_auto && master->has_volatiles && ctrl == master &&
2296 	    !is_cur_manual(master) && *val == master->manual_mode_value)
2297 		update_from_auto_cluster(master);
2298 	ctrl->val = *val;
2299 	ctrl->is_new = 1;
2300 	ret = try_or_set_cluster(fh, master, true);
2301 	*val = ctrl->cur.val;
2302 	v4l2_ctrl_unlock(ctrl);
2303 	return ret;
2304 }
2305 
v4l2_s_ctrl(struct v4l2_fh * fh,struct v4l2_ctrl_handler * hdl,struct v4l2_control * control)2306 int v4l2_s_ctrl(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl,
2307 					struct v4l2_control *control)
2308 {
2309 	struct v4l2_ctrl *ctrl = v4l2_ctrl_find(hdl, control->id);
2310 
2311 	if (ctrl == NULL || !type_is_int(ctrl))
2312 		return -EINVAL;
2313 
2314 	if (ctrl->flags & V4L2_CTRL_FLAG_READ_ONLY)
2315 		return -EACCES;
2316 
2317 	return set_ctrl(fh, ctrl, &control->value);
2318 }
2319 EXPORT_SYMBOL(v4l2_s_ctrl);
2320 
v4l2_subdev_s_ctrl(struct v4l2_subdev * sd,struct v4l2_control * control)2321 int v4l2_subdev_s_ctrl(struct v4l2_subdev *sd, struct v4l2_control *control)
2322 {
2323 	return v4l2_s_ctrl(NULL, sd->ctrl_handler, control);
2324 }
2325 EXPORT_SYMBOL(v4l2_subdev_s_ctrl);
2326 
v4l2_ctrl_s_ctrl(struct v4l2_ctrl * ctrl,s32 val)2327 int v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val)
2328 {
2329 	/* It's a driver bug if this happens. */
2330 	WARN_ON(!type_is_int(ctrl));
2331 	return set_ctrl(NULL, ctrl, &val);
2332 }
2333 EXPORT_SYMBOL(v4l2_ctrl_s_ctrl);
2334 
v4l2_ctrl_add_event(struct v4l2_ctrl * ctrl,struct v4l2_subscribed_event * sev)2335 void v4l2_ctrl_add_event(struct v4l2_ctrl *ctrl,
2336 				struct v4l2_subscribed_event *sev)
2337 {
2338 	v4l2_ctrl_lock(ctrl);
2339 	list_add_tail(&sev->node, &ctrl->ev_subs);
2340 	if (ctrl->type != V4L2_CTRL_TYPE_CTRL_CLASS &&
2341 	    (sev->flags & V4L2_EVENT_SUB_FL_SEND_INITIAL)) {
2342 		struct v4l2_event ev;
2343 		u32 changes = V4L2_EVENT_CTRL_CH_FLAGS;
2344 
2345 		if (!(ctrl->flags & V4L2_CTRL_FLAG_WRITE_ONLY))
2346 			changes |= V4L2_EVENT_CTRL_CH_VALUE;
2347 		fill_event(&ev, ctrl, changes);
2348 		v4l2_event_queue_fh(sev->fh, &ev);
2349 	}
2350 	v4l2_ctrl_unlock(ctrl);
2351 }
2352 EXPORT_SYMBOL(v4l2_ctrl_add_event);
2353 
v4l2_ctrl_del_event(struct v4l2_ctrl * ctrl,struct v4l2_subscribed_event * sev)2354 void v4l2_ctrl_del_event(struct v4l2_ctrl *ctrl,
2355 				struct v4l2_subscribed_event *sev)
2356 {
2357 	v4l2_ctrl_lock(ctrl);
2358 	list_del(&sev->node);
2359 	v4l2_ctrl_unlock(ctrl);
2360 }
2361 EXPORT_SYMBOL(v4l2_ctrl_del_event);
2362