4 * A generic video device interface for the LINUX operating system
5 * using a set of device structures/vectors for low level operations.
7 * This file replaces the videodev.c file that comes with the
8 * regular kernel distribution.
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License
12 * as published by the Free Software Foundation; either version
13 * 2 of the License, or (at your option) any later version.
15 * Author: Bill Dirks <bdirks@pacbell.net>
16 * based on code by Alan Cox, <alan@cymru.net>
21 * Video capture interface for Linux
23 * A generic video device interface for the LINUX operating system
24 * using a set of device structures/vectors for low level operations.
26 * This program is free software; you can redistribute it and/or
27 * modify it under the terms of the GNU General Public License
28 * as published by the Free Software Foundation; either version
29 * 2 of the License, or (at your option) any later version.
31 * Author: Alan Cox, <alan@redhat.com>
37 * Video4linux 1/2 integration by Justin Schoeman
38 * <justin@suntiger.ee.up.ac.za>
39 * 2.4 PROCFS support ported from 2.4 kernels by
40 * Iñaki García Etxebarria <garetxe@euskalnet.net>
41 * Makefile fix by "W. Michael Petullo" <mike@flyn.org>
42 * 2.4 devfs support ported from 2.4 kernels by
43 * Dan Merillat <dan@merillat.org>
44 * Added Gerd Knorrs v4l1 enhancements (Justin Schoeman)
47 #include <linux/module.h>
48 #include <linux/types.h>
49 #include <linux/kernel.h>
50 #include <linux/sched.h>
51 #include <linux/smp_lock.h>
53 #include <linux/string.h>
54 #include <linux/errno.h>
55 #include <asm/uaccess.h>
56 #include <asm/system.h>
57 #include <asm/pgtable.h>
59 #include <asm/div64.h>
60 #include <linux/video_decoder.h>
61 #define __OLD_VIDIOC_ /* To allow fixing old calls*/
62 #include <media/v4l2-common.h>
65 #include <linux/kmod.h>
68 #if defined(CONFIG_UST) || defined(CONFIG_UST_MODULE)
69 #include <linux/ust.h>
73 #include <linux/videodev.h>
75 MODULE_AUTHOR("Bill Dirks, Justin Schoeman, Gerd Knorr");
76 MODULE_DESCRIPTION("misc helper functions for v4l2 device drivers");
77 MODULE_LICENSE("GPL");
81 * V 4 L 2 D R I V E R H E L P E R A P I
86 * Video Standard Operations (contributed by Michael Schimek)
90 char *v4l2_norm_to_name(v4l2_std_id id)
100 name="PAL-DK"; break;
103 case V4L2_STD_PAL_B1:
104 name="PAL-B1"; break;
113 case V4L2_STD_PAL_D1:
114 name="PAL-D1"; break;
121 case V4L2_STD_PAL_Nc:
122 name="PAL-Nc"; break;
123 case V4L2_STD_PAL_60:
124 name="PAL-60"; break;
127 case V4L2_STD_NTSC_M:
128 name="NTSC-M"; break;
129 case V4L2_STD_NTSC_M_JP:
130 name="NTSC-M-JP"; break;
131 case V4L2_STD_NTSC_443:
132 name="NTSC-443"; break;
133 case V4L2_STD_NTSC_M_KR:
134 name="NTSC-M-KR"; break;
137 case V4L2_STD_SECAM_DK:
138 name="SECAM-DK"; break;
139 case V4L2_STD_SECAM_B:
140 name="SECAM-B"; break;
141 case V4L2_STD_SECAM_D:
142 name="SECAM-D"; break;
143 case V4L2_STD_SECAM_G:
144 name="SECAM-G"; break;
145 case V4L2_STD_SECAM_H:
146 name="SECAM-H"; break;
147 case V4L2_STD_SECAM_K:
148 name="SECAM-K"; break;
149 case V4L2_STD_SECAM_K1:
150 name="SECAM-K1"; break;
151 case V4L2_STD_SECAM_L:
152 name="SECAM-L"; break;
153 case V4L2_STD_SECAM_LC:
154 name="SECAM-LC"; break;
156 name="Unknown"; break;
162 /* Fill in the fields of a v4l2_standard structure according to the
163 'id' and 'transmission' parameters. Returns negative on error. */
164 int v4l2_video_std_construct(struct v4l2_standard *vs,
167 u32 index = vs->index;
169 memset(vs, 0, sizeof(struct v4l2_standard));
172 if (id & V4L2_STD_525_60) {
173 vs->frameperiod.numerator = 1001;
174 vs->frameperiod.denominator = 30000;
175 vs->framelines = 525;
177 vs->frameperiod.numerator = 1;
178 vs->frameperiod.denominator = 25;
179 vs->framelines = 625;
181 strlcpy(vs->name,name,sizeof(vs->name));
185 /* ----------------------------------------------------------------- */
186 /* priority handling */
188 #define V4L2_PRIO_VALID(val) (val == V4L2_PRIORITY_BACKGROUND || \
189 val == V4L2_PRIORITY_INTERACTIVE || \
190 val == V4L2_PRIORITY_RECORD)
192 int v4l2_prio_init(struct v4l2_prio_state *global)
194 memset(global,0,sizeof(*global));
198 int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local,
199 enum v4l2_priority new)
201 if (!V4L2_PRIO_VALID(new))
206 atomic_inc(&global->prios[new]);
207 if (V4L2_PRIO_VALID(*local))
208 atomic_dec(&global->prios[*local]);
213 int v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local)
215 return v4l2_prio_change(global,local,V4L2_PRIORITY_DEFAULT);
218 int v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority *local)
220 if (V4L2_PRIO_VALID(*local))
221 atomic_dec(&global->prios[*local]);
225 enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global)
227 if (atomic_read(&global->prios[V4L2_PRIORITY_RECORD]) > 0)
228 return V4L2_PRIORITY_RECORD;
229 if (atomic_read(&global->prios[V4L2_PRIORITY_INTERACTIVE]) > 0)
230 return V4L2_PRIORITY_INTERACTIVE;
231 if (atomic_read(&global->prios[V4L2_PRIORITY_BACKGROUND]) > 0)
232 return V4L2_PRIORITY_BACKGROUND;
233 return V4L2_PRIORITY_UNSET;
236 int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority *local)
238 if (*local < v4l2_prio_max(global))
244 /* ----------------------------------------------------------------- */
245 /* some arrays for pretty-printing debug messages of enum types */
247 char *v4l2_field_names[] = {
248 [V4L2_FIELD_ANY] = "any",
249 [V4L2_FIELD_NONE] = "none",
250 [V4L2_FIELD_TOP] = "top",
251 [V4L2_FIELD_BOTTOM] = "bottom",
252 [V4L2_FIELD_INTERLACED] = "interlaced",
253 [V4L2_FIELD_SEQ_TB] = "seq-tb",
254 [V4L2_FIELD_SEQ_BT] = "seq-bt",
255 [V4L2_FIELD_ALTERNATE] = "alternate",
258 char *v4l2_type_names[] = {
259 [V4L2_BUF_TYPE_VIDEO_CAPTURE] = "video-cap",
260 [V4L2_BUF_TYPE_VIDEO_OVERLAY] = "video-over",
261 [V4L2_BUF_TYPE_VIDEO_OUTPUT] = "video-out",
262 [V4L2_BUF_TYPE_VBI_CAPTURE] = "vbi-cap",
263 [V4L2_BUF_TYPE_VBI_OUTPUT] = "vbi-out",
264 [V4L2_BUF_TYPE_SLICED_VBI_CAPTURE] = "sliced-vbi-cap",
265 [V4L2_BUF_TYPE_SLICED_VBI_OUTPUT] = "slicec-vbi-out",
268 static char *v4l2_memory_names[] = {
269 [V4L2_MEMORY_MMAP] = "mmap",
270 [V4L2_MEMORY_USERPTR] = "userptr",
271 [V4L2_MEMORY_OVERLAY] = "overlay",
274 #define prt_names(a,arr) (((a)>=0)&&((a)<ARRAY_SIZE(arr)))?arr[a]:"unknown"
276 /* ------------------------------------------------------------------ */
277 /* debug help functions */
279 #ifdef CONFIG_VIDEO_V4L1_COMPAT
280 static const char *v4l1_ioctls[] = {
281 [_IOC_NR(VIDIOCGCAP)] = "VIDIOCGCAP",
282 [_IOC_NR(VIDIOCGCHAN)] = "VIDIOCGCHAN",
283 [_IOC_NR(VIDIOCSCHAN)] = "VIDIOCSCHAN",
284 [_IOC_NR(VIDIOCGTUNER)] = "VIDIOCGTUNER",
285 [_IOC_NR(VIDIOCSTUNER)] = "VIDIOCSTUNER",
286 [_IOC_NR(VIDIOCGPICT)] = "VIDIOCGPICT",
287 [_IOC_NR(VIDIOCSPICT)] = "VIDIOCSPICT",
288 [_IOC_NR(VIDIOCCAPTURE)] = "VIDIOCCAPTURE",
289 [_IOC_NR(VIDIOCGWIN)] = "VIDIOCGWIN",
290 [_IOC_NR(VIDIOCSWIN)] = "VIDIOCSWIN",
291 [_IOC_NR(VIDIOCGFBUF)] = "VIDIOCGFBUF",
292 [_IOC_NR(VIDIOCSFBUF)] = "VIDIOCSFBUF",
293 [_IOC_NR(VIDIOCKEY)] = "VIDIOCKEY",
294 [_IOC_NR(VIDIOCGFREQ)] = "VIDIOCGFREQ",
295 [_IOC_NR(VIDIOCSFREQ)] = "VIDIOCSFREQ",
296 [_IOC_NR(VIDIOCGAUDIO)] = "VIDIOCGAUDIO",
297 [_IOC_NR(VIDIOCSAUDIO)] = "VIDIOCSAUDIO",
298 [_IOC_NR(VIDIOCSYNC)] = "VIDIOCSYNC",
299 [_IOC_NR(VIDIOCMCAPTURE)] = "VIDIOCMCAPTURE",
300 [_IOC_NR(VIDIOCGMBUF)] = "VIDIOCGMBUF",
301 [_IOC_NR(VIDIOCGUNIT)] = "VIDIOCGUNIT",
302 [_IOC_NR(VIDIOCGCAPTURE)] = "VIDIOCGCAPTURE",
303 [_IOC_NR(VIDIOCSCAPTURE)] = "VIDIOCSCAPTURE",
304 [_IOC_NR(VIDIOCSPLAYMODE)] = "VIDIOCSPLAYMODE",
305 [_IOC_NR(VIDIOCSWRITEMODE)] = "VIDIOCSWRITEMODE",
306 [_IOC_NR(VIDIOCGPLAYINFO)] = "VIDIOCGPLAYINFO",
307 [_IOC_NR(VIDIOCSMICROCODE)] = "VIDIOCSMICROCODE",
308 [_IOC_NR(VIDIOCGVBIFMT)] = "VIDIOCGVBIFMT",
309 [_IOC_NR(VIDIOCSVBIFMT)] = "VIDIOCSVBIFMT"
311 #define V4L1_IOCTLS ARRAY_SIZE(v4l1_ioctls)
314 static const char *v4l2_ioctls[] = {
315 [_IOC_NR(VIDIOC_QUERYCAP)] = "VIDIOC_QUERYCAP",
316 [_IOC_NR(VIDIOC_RESERVED)] = "VIDIOC_RESERVED",
317 [_IOC_NR(VIDIOC_ENUM_FMT)] = "VIDIOC_ENUM_FMT",
318 [_IOC_NR(VIDIOC_G_FMT)] = "VIDIOC_G_FMT",
319 [_IOC_NR(VIDIOC_S_FMT)] = "VIDIOC_S_FMT",
320 [_IOC_NR(VIDIOC_G_MPEGCOMP)] = "VIDIOC_G_MPEGCOMP",
321 [_IOC_NR(VIDIOC_S_MPEGCOMP)] = "VIDIOC_S_MPEGCOMP",
322 [_IOC_NR(VIDIOC_REQBUFS)] = "VIDIOC_REQBUFS",
323 [_IOC_NR(VIDIOC_QUERYBUF)] = "VIDIOC_QUERYBUF",
324 [_IOC_NR(VIDIOC_G_FBUF)] = "VIDIOC_G_FBUF",
325 [_IOC_NR(VIDIOC_S_FBUF)] = "VIDIOC_S_FBUF",
326 [_IOC_NR(VIDIOC_OVERLAY)] = "VIDIOC_OVERLAY",
327 [_IOC_NR(VIDIOC_QBUF)] = "VIDIOC_QBUF",
328 [_IOC_NR(VIDIOC_DQBUF)] = "VIDIOC_DQBUF",
329 [_IOC_NR(VIDIOC_STREAMON)] = "VIDIOC_STREAMON",
330 [_IOC_NR(VIDIOC_STREAMOFF)] = "VIDIOC_STREAMOFF",
331 [_IOC_NR(VIDIOC_G_PARM)] = "VIDIOC_G_PARM",
332 [_IOC_NR(VIDIOC_S_PARM)] = "VIDIOC_S_PARM",
333 [_IOC_NR(VIDIOC_G_STD)] = "VIDIOC_G_STD",
334 [_IOC_NR(VIDIOC_S_STD)] = "VIDIOC_S_STD",
335 [_IOC_NR(VIDIOC_ENUMSTD)] = "VIDIOC_ENUMSTD",
336 [_IOC_NR(VIDIOC_ENUMINPUT)] = "VIDIOC_ENUMINPUT",
337 [_IOC_NR(VIDIOC_G_CTRL)] = "VIDIOC_G_CTRL",
338 [_IOC_NR(VIDIOC_S_CTRL)] = "VIDIOC_S_CTRL",
339 [_IOC_NR(VIDIOC_G_TUNER)] = "VIDIOC_G_TUNER",
340 [_IOC_NR(VIDIOC_S_TUNER)] = "VIDIOC_S_TUNER",
341 [_IOC_NR(VIDIOC_G_AUDIO)] = "VIDIOC_G_AUDIO",
342 [_IOC_NR(VIDIOC_S_AUDIO)] = "VIDIOC_S_AUDIO",
343 [_IOC_NR(VIDIOC_QUERYCTRL)] = "VIDIOC_QUERYCTRL",
344 [_IOC_NR(VIDIOC_QUERYMENU)] = "VIDIOC_QUERYMENU",
345 [_IOC_NR(VIDIOC_G_INPUT)] = "VIDIOC_G_INPUT",
346 [_IOC_NR(VIDIOC_S_INPUT)] = "VIDIOC_S_INPUT",
347 [_IOC_NR(VIDIOC_G_OUTPUT)] = "VIDIOC_G_OUTPUT",
348 [_IOC_NR(VIDIOC_S_OUTPUT)] = "VIDIOC_S_OUTPUT",
349 [_IOC_NR(VIDIOC_ENUMOUTPUT)] = "VIDIOC_ENUMOUTPUT",
350 [_IOC_NR(VIDIOC_G_AUDOUT)] = "VIDIOC_G_AUDOUT",
351 [_IOC_NR(VIDIOC_S_AUDOUT)] = "VIDIOC_S_AUDOUT",
352 [_IOC_NR(VIDIOC_G_MODULATOR)] = "VIDIOC_G_MODULATOR",
353 [_IOC_NR(VIDIOC_S_MODULATOR)] = "VIDIOC_S_MODULATOR",
354 [_IOC_NR(VIDIOC_G_FREQUENCY)] = "VIDIOC_G_FREQUENCY",
355 [_IOC_NR(VIDIOC_S_FREQUENCY)] = "VIDIOC_S_FREQUENCY",
356 [_IOC_NR(VIDIOC_CROPCAP)] = "VIDIOC_CROPCAP",
357 [_IOC_NR(VIDIOC_G_CROP)] = "VIDIOC_G_CROP",
358 [_IOC_NR(VIDIOC_S_CROP)] = "VIDIOC_S_CROP",
359 [_IOC_NR(VIDIOC_G_JPEGCOMP)] = "VIDIOC_G_JPEGCOMP",
360 [_IOC_NR(VIDIOC_S_JPEGCOMP)] = "VIDIOC_S_JPEGCOMP",
361 [_IOC_NR(VIDIOC_QUERYSTD)] = "VIDIOC_QUERYSTD",
362 [_IOC_NR(VIDIOC_TRY_FMT)] = "VIDIOC_TRY_FMT",
363 [_IOC_NR(VIDIOC_ENUMAUDIO)] = "VIDIOC_ENUMAUDIO",
364 [_IOC_NR(VIDIOC_ENUMAUDOUT)] = "VIDIOC_ENUMAUDOUT",
365 [_IOC_NR(VIDIOC_G_PRIORITY)] = "VIDIOC_G_PRIORITY",
366 [_IOC_NR(VIDIOC_S_PRIORITY)] = "VIDIOC_S_PRIORITY",
368 [_IOC_NR(VIDIOC_G_SLICED_VBI_CAP)] = "VIDIOC_G_SLICED_VBI_CAP",
370 [_IOC_NR(VIDIOC_LOG_STATUS)] = "VIDIOC_LOG_STATUS",
371 [_IOC_NR(VIDIOC_G_EXT_CTRLS)] = "VIDIOC_G_EXT_CTRLS",
372 [_IOC_NR(VIDIOC_S_EXT_CTRLS)] = "VIDIOC_S_EXT_CTRLS",
373 [_IOC_NR(VIDIOC_TRY_EXT_CTRLS)] = "VIDIOC_TRY_EXT_CTRLS"
375 #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls)
377 static const char *v4l2_int_ioctls[] = {
378 #ifdef CONFIG_VIDEO_V4L1_COMPAT
379 [_IOC_NR(DECODER_GET_CAPABILITIES)] = "DECODER_GET_CAPABILITIES",
380 [_IOC_NR(DECODER_GET_STATUS)] = "DECODER_GET_STATUS",
381 [_IOC_NR(DECODER_SET_NORM)] = "DECODER_SET_NORM",
382 [_IOC_NR(DECODER_SET_INPUT)] = "DECODER_SET_INPUT",
383 [_IOC_NR(DECODER_SET_OUTPUT)] = "DECODER_SET_OUTPUT",
384 [_IOC_NR(DECODER_ENABLE_OUTPUT)] = "DECODER_ENABLE_OUTPUT",
385 [_IOC_NR(DECODER_SET_PICTURE)] = "DECODER_SET_PICTURE",
386 [_IOC_NR(DECODER_SET_GPIO)] = "DECODER_SET_GPIO",
387 [_IOC_NR(DECODER_INIT)] = "DECODER_INIT",
388 [_IOC_NR(DECODER_SET_VBI_BYPASS)] = "DECODER_SET_VBI_BYPASS",
389 [_IOC_NR(DECODER_DUMP)] = "DECODER_DUMP",
391 [_IOC_NR(AUDC_SET_RADIO)] = "AUDC_SET_RADIO",
393 [_IOC_NR(TUNER_SET_TYPE_ADDR)] = "TUNER_SET_TYPE_ADDR",
394 [_IOC_NR(TUNER_SET_STANDBY)] = "TUNER_SET_STANDBY",
395 [_IOC_NR(TDA9887_SET_CONFIG)] = "TDA9887_SET_CONFIG",
397 [_IOC_NR(VIDIOC_INT_S_TUNER_MODE)] = "VIDIOC_INT_S_TUNER_MODE",
398 [_IOC_NR(VIDIOC_INT_S_REGISTER)] = "VIDIOC_INT_S_REGISTER",
399 [_IOC_NR(VIDIOC_INT_G_REGISTER)] = "VIDIOC_INT_G_REGISTER",
400 [_IOC_NR(VIDIOC_INT_RESET)] = "VIDIOC_INT_RESET",
401 [_IOC_NR(VIDIOC_INT_AUDIO_CLOCK_FREQ)] = "VIDIOC_INT_AUDIO_CLOCK_FREQ",
402 [_IOC_NR(VIDIOC_INT_DECODE_VBI_LINE)] = "VIDIOC_INT_DECODE_VBI_LINE",
403 [_IOC_NR(VIDIOC_INT_S_VBI_DATA)] = "VIDIOC_INT_S_VBI_DATA",
404 [_IOC_NR(VIDIOC_INT_G_VBI_DATA)] = "VIDIOC_INT_G_VBI_DATA",
405 [_IOC_NR(VIDIOC_INT_G_CHIP_IDENT)] = "VIDIOC_INT_G_CHIP_IDENT",
406 [_IOC_NR(VIDIOC_INT_I2S_CLOCK_FREQ)] = "VIDIOC_INT_I2S_CLOCK_FREQ",
407 [_IOC_NR(VIDIOC_INT_S_STANDBY)] = "VIDIOC_INT_S_STANDBY",
408 [_IOC_NR(VIDIOC_INT_S_AUDIO_ROUTING)] = "VIDIOC_INT_S_AUDIO_ROUTING",
409 [_IOC_NR(VIDIOC_INT_G_AUDIO_ROUTING)] = "VIDIOC_INT_G_AUDIO_ROUTING",
410 [_IOC_NR(VIDIOC_INT_S_VIDEO_ROUTING)] = "VIDIOC_INT_S_VIDEO_ROUTING",
411 [_IOC_NR(VIDIOC_INT_G_VIDEO_ROUTING)] = "VIDIOC_INT_G_VIDEO_ROUTING",
412 [_IOC_NR(VIDIOC_INT_S_CRYSTAL_FREQ)] = "VIDIOC_INT_S_CRYSTAL_FREQ"
414 #define V4L2_INT_IOCTLS ARRAY_SIZE(v4l2_int_ioctls)
416 static void v4l_print_pix_fmt (char *s, struct v4l2_pix_format *fmt)
418 printk ("%s: width=%d, height=%d, format=%d, field=%s, "
419 "bytesperline=%d sizeimage=%d, colorspace=%d\n", s,
420 fmt->width,fmt->height,fmt->pixelformat,
421 prt_names(fmt->field,v4l2_field_names),
422 fmt->bytesperline,fmt->sizeimage,fmt->colorspace);
425 /* Common ioctl debug function. This function can be used by
426 external ioctl messages as well as internal V4L ioctl */
427 void v4l_printk_ioctl(unsigned int cmd)
431 switch (_IOC_DIR(cmd)) {
432 case _IOC_NONE: dir = "--"; break;
433 case _IOC_READ: dir = "r-"; break;
434 case _IOC_WRITE: dir = "-w"; break;
435 case _IOC_READ | _IOC_WRITE: dir = "rw"; break;
436 default: dir = "*ERR*"; break;
438 switch (_IOC_TYPE(cmd)) {
440 printk("v4l2_int ioctl %s, dir=%s (0x%08x)\n",
441 (_IOC_NR(cmd) < V4L2_INT_IOCTLS) ?
442 v4l2_int_ioctls[_IOC_NR(cmd)] : "UNKNOWN", dir, cmd);
444 #ifdef CONFIG_VIDEO_V4L1_COMPAT
446 printk("v4l1 ioctl %s, dir=%s (0x%08x)\n",
447 (_IOC_NR(cmd) < V4L1_IOCTLS) ?
448 v4l1_ioctls[_IOC_NR(cmd)] : "UNKNOWN", dir, cmd);
452 printk("v4l2 ioctl %s, dir=%s (0x%08x)\n",
453 (_IOC_NR(cmd) < V4L2_IOCTLS) ?
454 v4l2_ioctls[_IOC_NR(cmd)] : "UNKNOWN", dir, cmd);
458 printk("unknown ioctl '%c', dir=%s, #%d (0x%08x)\n",
459 _IOC_TYPE(cmd), dir, _IOC_NR(cmd), cmd);
463 /* Common ioctl debug function. This function can be used by
464 external ioctl messages as well as internal V4L ioctl and its
466 void v4l_printk_ioctl_arg(char *s,unsigned int cmd, void *arg)
470 v4l_printk_ioctl(cmd);
472 case VIDIOC_INT_G_CHIP_IDENT:
474 enum v4l2_chip_ident *p=arg;
475 printk ("%s: chip ident=%d\n", s, *p);
478 case VIDIOC_G_PRIORITY:
479 case VIDIOC_S_PRIORITY:
481 enum v4l2_priority *p=arg;
482 printk ("%s: priority=%d\n", s, *p);
485 case VIDIOC_INT_S_TUNER_MODE:
487 enum v4l2_tuner_type *p=arg;
488 printk ("%s: tuner type=%d\n", s, *p);
491 #ifdef CONFIG_VIDEO_V4L1_COMPAT
492 case DECODER_SET_VBI_BYPASS:
493 case DECODER_ENABLE_OUTPUT:
494 case DECODER_GET_STATUS:
495 case DECODER_SET_OUTPUT:
496 case DECODER_SET_INPUT:
497 case DECODER_SET_GPIO:
498 case DECODER_SET_NORM:
501 case VIDIOCSWRITEMODE:
503 case TUNER_SET_TYPE_ADDR:
504 case TUNER_SET_STANDBY:
505 case TDA9887_SET_CONFIG:
507 case VIDIOC_OVERLAY_OLD:
509 case VIDIOC_STREAMOFF:
510 case VIDIOC_G_OUTPUT:
511 case VIDIOC_S_OUTPUT:
512 case VIDIOC_STREAMON:
518 printk ("%s: value=%d\n", s, *p);
523 case VIDIOC_ENUMAUDIO:
525 case VIDIOC_G_AUDIO_OLD:
528 struct v4l2_audio *p=arg;
530 printk ("%s: index=%d, name=%s, capability=%d, mode=%d\n",
531 s,p->index, p->name,p->capability, p->mode);
534 case VIDIOC_G_AUDOUT:
535 case VIDIOC_S_AUDOUT:
536 case VIDIOC_ENUMAUDOUT:
538 case VIDIOC_G_AUDOUT_OLD:
541 struct v4l2_audioout *p=arg;
542 printk ("%s: index=%d, name=%s, capability=%d, mode=%d\n", s,
543 p->index, p->name, p->capability,p->mode);
548 case VIDIOC_QUERYBUF:
550 struct v4l2_buffer *p=arg;
551 struct v4l2_timecode *tc=&p->timecode;
552 printk ("%s: %02ld:%02d:%02d.%08ld index=%d, type=%s, "
553 "bytesused=%d, flags=0x%08x, "
554 "field=%0d, sequence=%d, memory=%s, offset/userptr=0x%08lx\n",
556 (p->timestamp.tv_sec/3600),
557 (int)(p->timestamp.tv_sec/60)%60,
558 (int)(p->timestamp.tv_sec%60),
559 p->timestamp.tv_usec,
561 prt_names(p->type,v4l2_type_names),
562 p->bytesused,p->flags,
563 p->field,p->sequence,
564 prt_names(p->memory,v4l2_memory_names),
566 printk ("%s: timecode= %02d:%02d:%02d type=%d, "
567 "flags=0x%08x, frames=%d, userbits=0x%08x\n",
568 s,tc->hours,tc->minutes,tc->seconds,
569 tc->type, tc->flags, tc->frames, *(__u32 *) tc->userbits);
572 case VIDIOC_QUERYCAP:
574 struct v4l2_capability *p=arg;
575 printk ("%s: driver=%s, card=%s, bus=%s, version=0x%08x, "
576 "capabilities=0x%08x\n", s,
577 p->driver,p->card,p->bus_info,
585 case VIDIOC_S_CTRL_OLD:
588 struct v4l2_control *p=arg;
589 printk ("%s: id=%d, value=%d\n", s, p->id, p->value);
592 case VIDIOC_G_EXT_CTRLS:
593 case VIDIOC_S_EXT_CTRLS:
594 case VIDIOC_TRY_EXT_CTRLS:
596 struct v4l2_ext_controls *p = arg;
599 printk("%s: ctrl_class=%d, count=%d\n", s, p->ctrl_class, p->count);
600 for (i = 0; i < p->count; i++) {
601 struct v4l2_ext_control *c = &p->controls[i];
602 if (cmd == VIDIOC_G_EXT_CTRLS)
603 printk("%s: id=%d\n", s, c->id);
605 printk("%s: id=%d, value=%d\n", s, c->id, c->value);
612 struct v4l2_crop *p=arg;
613 /*FIXME: Should also show rect structs */
614 printk ("%s: type=%d\n", s, p->type);
619 case VIDIOC_CROPCAP_OLD:
622 struct v4l2_cropcap *p=arg;
623 /*FIXME: Should also show rect structs */
624 printk ("%s: type=%d\n", s, p->type);
627 case VIDIOC_INT_DECODE_VBI_LINE:
629 struct v4l2_decode_vbi_line *p=arg;
630 printk ("%s: is_second_field=%d, ptr=0x%08lx, line=%d, "
632 p->is_second_field,(unsigned long)p->p,p->line,p->type);
635 case VIDIOC_ENUM_FMT:
637 struct v4l2_fmtdesc *p=arg;
638 printk ("%s: index=%d, type=%d, flags=%d, description=%s,"
639 " pixelformat=%d\n", s,
640 p->index, p->type, p->flags,p->description,
649 struct v4l2_format *p=arg;
650 printk ("%s: type=%s\n", s,
651 prt_names(p->type,v4l2_type_names));
653 case V4L2_BUF_TYPE_VIDEO_CAPTURE:
654 v4l_print_pix_fmt (s, &p->fmt.pix);
663 struct v4l2_framebuffer *p=arg;
664 printk ("%s: capability=%d, flags=%d, base=0x%08lx\n", s,
665 p->capability,p->flags, (unsigned long)p->base);
666 v4l_print_pix_fmt (s, &p->fmt);
669 case VIDIOC_G_FREQUENCY:
670 case VIDIOC_S_FREQUENCY:
672 struct v4l2_frequency *p=arg;
673 printk ("%s: tuner=%d, type=%d, frequency=%d\n", s,
674 p->tuner,p->type,p->frequency);
677 case VIDIOC_ENUMINPUT:
679 struct v4l2_input *p=arg;
680 printk ("%s: index=%d, name=%s, type=%d, audioset=%d, "
681 "tuner=%d, std=%Ld, status=%d\n", s,
682 p->index,p->name,p->type,p->audioset,
684 (unsigned long long)p->std,
688 case VIDIOC_G_JPEGCOMP:
689 case VIDIOC_S_JPEGCOMP:
691 struct v4l2_jpegcompression *p=arg;
692 printk ("%s: quality=%d, APPn=%d, APP_len=%d, COM_len=%d,"
693 " jpeg_markers=%d\n", s,
694 p->quality,p->APPn,p->APP_len,
695 p->COM_len,p->jpeg_markers);
698 case VIDIOC_G_MODULATOR:
699 case VIDIOC_S_MODULATOR:
701 struct v4l2_modulator *p=arg;
702 printk ("%s: index=%d, name=%s, capability=%d, rangelow=%d,"
703 " rangehigh=%d, txsubchans=%d\n", s,
704 p->index, p->name,p->capability,p->rangelow,
705 p->rangehigh,p->txsubchans);
708 case VIDIOC_G_MPEGCOMP:
709 case VIDIOC_S_MPEGCOMP:
711 struct v4l2_mpeg_compression *p=arg;
712 /*FIXME: Several fields not shown */
713 printk ("%s: ts_pid_pmt=%d, ts_pid_audio=%d, ts_pid_video=%d, "
714 "ts_pid_pcr=%d, ps_size=%d, au_sample_rate=%d, "
715 "au_pesid=%c, vi_frame_rate=%d, vi_frames_per_gop=%d, "
716 "vi_bframes_count=%d, vi_pesid=%c\n", s,
717 p->ts_pid_pmt,p->ts_pid_audio, p->ts_pid_video,
718 p->ts_pid_pcr, p->ps_size, p->au_sample_rate,
719 p->au_pesid, p->vi_frame_rate,
720 p->vi_frames_per_gop, p->vi_bframes_count,
724 case VIDIOC_ENUMOUTPUT:
726 struct v4l2_output *p=arg;
727 printk ("%s: index=%d, name=%s,type=%d, audioset=%d, "
728 "modulator=%d, std=%Ld\n",
729 s,p->index,p->name,p->type,p->audioset,
731 (unsigned long long)p->std);
734 case VIDIOC_QUERYCTRL:
736 struct v4l2_queryctrl *p=arg;
737 printk ("%s: id=%d, type=%d, name=%s, min/max=%d/%d,"
738 " step=%d, default=%d, flags=0x%08x\n", s,
739 p->id,p->type,p->name,p->minimum,p->maximum,
740 p->step,p->default_value,p->flags);
743 case VIDIOC_QUERYMENU:
745 struct v4l2_querymenu *p=arg;
746 printk ("%s: id=%d, index=%d, name=%s\n", s,
747 p->id,p->index,p->name);
750 case VIDIOC_INT_G_REGISTER:
751 case VIDIOC_INT_S_REGISTER:
753 struct v4l2_register *p=arg;
754 printk ("%s: i2c_id=%d, reg=%lu, val=%d\n", s,
755 p->i2c_id,p->reg,p->val);
761 struct v4l2_requestbuffers *p=arg;
762 printk ("%s: count=%d, type=%s, memory=%s\n", s,
764 prt_names(p->type,v4l2_type_names),
765 prt_names(p->memory,v4l2_memory_names));
768 case VIDIOC_INT_S_AUDIO_ROUTING:
769 case VIDIOC_INT_S_VIDEO_ROUTING:
770 case VIDIOC_INT_G_AUDIO_ROUTING:
771 case VIDIOC_INT_G_VIDEO_ROUTING:
773 struct v4l2_routing *p=arg;
774 printk ("%s: input=0x%x, output=0x%x\n", s, p->input, p->output);
777 case VIDIOC_INT_S_CRYSTAL_FREQ:
779 struct v4l2_crystal_freq *p=arg;
780 printk ("%s: freq=%u, flags=0x%x\n", s, p->freq, p->flags);
783 case VIDIOC_G_SLICED_VBI_CAP:
785 struct v4l2_sliced_vbi_cap *p=arg;
786 printk ("%s: service_set=%d\n", s,
790 case VIDIOC_INT_S_VBI_DATA:
791 case VIDIOC_INT_G_VBI_DATA:
793 struct v4l2_sliced_vbi_data *p=arg;
794 printk ("%s: id=%d, field=%d, line=%d\n", s,
795 p->id, p->field, p->line);
800 struct v4l2_standard *p=arg;
801 printk ("%s: index=%d, id=%Ld, name=%s, fps=%d/%d, "
802 "framelines=%d\n", s, p->index,
803 (unsigned long long)p->id, p->name,
804 p->frameperiod.numerator,
805 p->frameperiod.denominator,
813 case VIDIOC_S_PARM_OLD:
816 struct v4l2_streamparm *p=arg;
817 printk ("%s: type=%d\n", s, p->type);
824 struct v4l2_tuner *p=arg;
825 printk ("%s: index=%d, name=%s, type=%d, capability=%d, "
826 "rangelow=%d, rangehigh=%d, signal=%d, afc=%d, "
827 "rxsubchans=%d, audmode=%d\n", s,
828 p->index, p->name, p->type,
829 p->capability, p->rangelow,p->rangehigh,
830 p->rxsubchans, p->audmode, p->signal,
834 #ifdef CONFIG_VIDEO_V4L1_COMPAT
838 struct vbi_format *p=arg;
839 printk ("%s: sampling_rate=%d, samples_per_line=%d, "
840 "sample_format=%d, start=%d/%d, count=%d/%d, flags=%d\n", s,
841 p->sampling_rate,p->samples_per_line,
842 p->sample_format,p->start[0],p->start[1],
843 p->count[0],p->count[1],p->flags);
849 struct video_audio *p=arg;
850 printk ("%s: audio=%d, volume=%d, bass=%d, treble=%d, "
851 "flags=%d, name=%s, mode=%d, balance=%d, step=%d\n",
852 s,p->audio,p->volume,p->bass, p->treble,
853 p->flags,p->name,p->mode,p->balance,p->step);
859 struct video_buffer *p=arg;
860 printk ("%s: base=%08lx, height=%d, width=%d, depth=%d, "
861 "bytesperline=%d\n", s,
862 (unsigned long) p->base, p->height, p->width,
863 p->depth,p->bytesperline);
868 struct video_capability *p=arg;
869 printk ("%s: name=%s, type=%d, channels=%d, audios=%d, "
870 "maxwidth=%d, maxheight=%d, minwidth=%d, minheight=%d\n",
871 s,p->name,p->type,p->channels,p->audios,
872 p->maxwidth,p->maxheight,p->minwidth,
880 struct video_capture *p=arg;
881 printk ("%s: x=%d, y=%d, width=%d, height=%d, decimation=%d,"
883 p->x, p->y,p->width, p->height,
884 p->decimation,p->flags);
890 struct video_channel *p=arg;
891 printk ("%s: channel=%d, name=%s, tuners=%d, flags=%d, "
892 "type=%d, norm=%d\n", s,
893 p->channel,p->name,p->tuners,
894 p->flags,p->type,p->norm);
898 case VIDIOCSMICROCODE:
900 struct video_code *p=arg;
901 printk ("%s: loadwhat=%s, datasize=%d\n", s,
902 p->loadwhat,p->datasize);
905 case DECODER_GET_CAPABILITIES:
907 struct video_decoder_capability *p=arg;
908 printk ("%s: flags=%d, inputs=%d, outputs=%d\n", s,
909 p->flags,p->inputs,p->outputs);
914 struct video_decoder_init *p=arg;
915 printk ("%s: len=%c\n", s, p->len);
918 case VIDIOCGPLAYINFO:
920 struct video_info *p=arg;
921 printk ("%s: frame_count=%d, h_size=%d, v_size=%d, "
922 "smpte_timecode=%d, picture_type=%d, "
923 "temporal_reference=%d, user_data=%s\n", s,
924 p->frame_count, p->h_size,
925 p->v_size, p->smpte_timecode,
926 p->picture_type, p->temporal_reference,
932 struct video_key *p=arg;
933 printk ("%s: key=%s, flags=%d\n", s,
939 struct video_mbuf *p=arg;
940 printk ("%s: size=%d, frames=%d, offsets=0x%08lx\n", s,
943 (unsigned long)p->offsets);
948 struct video_mmap *p=arg;
949 printk ("%s: frame=%d, height=%d, width=%d, format=%d\n", s,
957 case DECODER_SET_PICTURE:
959 struct video_picture *p=arg;
961 printk ("%s: brightness=%d, hue=%d, colour=%d, contrast=%d,"
962 " whiteness=%d, depth=%d, palette=%d\n", s,
963 p->brightness, p->hue, p->colour,
964 p->contrast, p->whiteness, p->depth,
968 case VIDIOCSPLAYMODE:
970 struct video_play_mode *p=arg;
971 printk ("%s: mode=%d, p1=%d, p2=%d\n", s,
972 p->mode,p->p1,p->p2);
978 struct video_tuner *p=arg;
979 printk ("%s: tuner=%d, name=%s, rangelow=%ld, rangehigh=%ld, "
980 "flags=%d, mode=%d, signal=%d\n", s,
981 p->tuner, p->name,p->rangelow, p->rangehigh,
982 p->flags,p->mode, p->signal);
987 struct video_unit *p=arg;
988 printk ("%s: video=%d, vbi=%d, radio=%d, audio=%d, "
990 p->video,p->vbi,p->radio,p->audio,p->teletext);
996 struct video_window *p=arg;
997 printk ("%s: x=%d, y=%d, width=%d, height=%d, chromakey=%d,"
998 " flags=%d, clipcount=%d\n", s,
999 p->x, p->y,p->width, p->height,
1000 p->chromakey,p->flags,
1007 unsigned long *p=arg;
1008 printk ("%s: value=%lu\n", s, *p);
1012 case VIDIOC_INT_AUDIO_CLOCK_FREQ:
1013 case VIDIOC_INT_I2S_CLOCK_FREQ:
1014 case VIDIOC_INT_S_STANDBY:
1015 case VIDIOC_INT_RESET:
1019 printk ("%s: value=%d\n", s, *p);
1024 case VIDIOC_QUERYSTD:
1028 printk ("%s: value=%Lu\n", s, (unsigned long long)*p);
1034 /* ----------------------------------------------------------------- */
1036 /* Helper functions for control handling */
1038 /* Check for correctness of the ctrl's value based on the data from
1039 struct v4l2_queryctrl and the available menu items. Note that
1040 menu_items may be NULL, in that case it is ignored. */
1041 int v4l2_ctrl_check(struct v4l2_ext_control *ctrl, struct v4l2_queryctrl *qctrl,
1042 const char **menu_items)
1044 if (qctrl->flags & V4L2_CTRL_FLAG_DISABLED)
1046 if (qctrl->flags & V4L2_CTRL_FLAG_GRABBED)
1048 if (qctrl->type == V4L2_CTRL_TYPE_BUTTON ||
1049 qctrl->type == V4L2_CTRL_TYPE_INTEGER64 ||
1050 qctrl->type == V4L2_CTRL_TYPE_CTRL_CLASS)
1052 if (ctrl->value < qctrl->minimum || ctrl->value > qctrl->maximum)
1054 if (qctrl->type == V4L2_CTRL_TYPE_MENU && menu_items != NULL) {
1055 if (menu_items[ctrl->value] == NULL ||
1056 menu_items[ctrl->value][0] == '\0')
1062 /* Returns NULL or a character pointer array containing the menu for
1063 the given control ID. The pointer array ends with a NULL pointer.
1064 An empty string signifies a menu entry that is invalid. This allows
1065 drivers to disable certain options if it is not supported. */
1066 const char **v4l2_ctrl_get_menu(u32 id)
1068 static const char *mpeg_audio_sampling_freq[] = {
1074 static const char *mpeg_audio_encoding[] = {
1080 static const char *mpeg_audio_l1_bitrate[] = {
1097 static const char *mpeg_audio_l2_bitrate[] = {
1114 static const char *mpeg_audio_l3_bitrate[] = {
1131 static const char *mpeg_audio_mode[] = {
1138 static const char *mpeg_audio_mode_extension[] = {
1145 static const char *mpeg_audio_emphasis[] = {
1151 static const char *mpeg_audio_crc[] = {
1156 static const char *mpeg_video_encoding[] = {
1161 static const char *mpeg_video_aspect[] = {
1168 static const char *mpeg_video_bitrate_mode[] = {
1173 static const char *mpeg_stream_type[] = {
1174 "MPEG-2 Program Stream",
1175 "MPEG-2 Transport Stream",
1176 "MPEG-1 System Stream",
1177 "MPEG-2 DVD-compatible Stream",
1178 "MPEG-1 VCD-compatible Stream",
1179 "MPEG-2 SVCD-compatible Stream",
1182 static const char *mpeg_stream_vbi_fmt[] = {
1184 "Private packet, IVTV format",
1189 case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
1190 return mpeg_audio_sampling_freq;
1191 case V4L2_CID_MPEG_AUDIO_ENCODING:
1192 return mpeg_audio_encoding;
1193 case V4L2_CID_MPEG_AUDIO_L1_BITRATE:
1194 return mpeg_audio_l1_bitrate;
1195 case V4L2_CID_MPEG_AUDIO_L2_BITRATE:
1196 return mpeg_audio_l2_bitrate;
1197 case V4L2_CID_MPEG_AUDIO_L3_BITRATE:
1198 return mpeg_audio_l3_bitrate;
1199 case V4L2_CID_MPEG_AUDIO_MODE:
1200 return mpeg_audio_mode;
1201 case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION:
1202 return mpeg_audio_mode_extension;
1203 case V4L2_CID_MPEG_AUDIO_EMPHASIS:
1204 return mpeg_audio_emphasis;
1205 case V4L2_CID_MPEG_AUDIO_CRC:
1206 return mpeg_audio_crc;
1207 case V4L2_CID_MPEG_VIDEO_ENCODING:
1208 return mpeg_video_encoding;
1209 case V4L2_CID_MPEG_VIDEO_ASPECT:
1210 return mpeg_video_aspect;
1211 case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
1212 return mpeg_video_bitrate_mode;
1213 case V4L2_CID_MPEG_STREAM_TYPE:
1214 return mpeg_stream_type;
1215 case V4L2_CID_MPEG_STREAM_VBI_FMT:
1216 return mpeg_stream_vbi_fmt;
1222 /* Fill in a struct v4l2_queryctrl */
1223 int v4l2_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 max, s32 step, s32 def)
1228 switch (qctrl->id) {
1230 case V4L2_CID_USER_CLASS: name = "User Controls"; break;
1231 case V4L2_CID_AUDIO_VOLUME: name = "Volume"; break;
1232 case V4L2_CID_AUDIO_MUTE: name = "Mute"; break;
1233 case V4L2_CID_AUDIO_BALANCE: name = "Balance"; break;
1234 case V4L2_CID_AUDIO_BASS: name = "Bass"; break;
1235 case V4L2_CID_AUDIO_TREBLE: name = "Treble"; break;
1236 case V4L2_CID_AUDIO_LOUDNESS: name = "Loudness"; break;
1237 case V4L2_CID_BRIGHTNESS: name = "Brightness"; break;
1238 case V4L2_CID_CONTRAST: name = "Contrast"; break;
1239 case V4L2_CID_SATURATION: name = "Saturation"; break;
1240 case V4L2_CID_HUE: name = "Hue"; break;
1243 case V4L2_CID_MPEG_CLASS: name = "MPEG Encoder Controls"; break;
1244 case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ: name = "Audio Sampling Frequency"; break;
1245 case V4L2_CID_MPEG_AUDIO_ENCODING: name = "Audio Encoding Layer"; break;
1246 case V4L2_CID_MPEG_AUDIO_L1_BITRATE: name = "Audio Layer I Bitrate"; break;
1247 case V4L2_CID_MPEG_AUDIO_L2_BITRATE: name = "Audio Layer II Bitrate"; break;
1248 case V4L2_CID_MPEG_AUDIO_L3_BITRATE: name = "Audio Layer III Bitrate"; break;
1249 case V4L2_CID_MPEG_AUDIO_MODE: name = "Audio Stereo Mode"; break;
1250 case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION: name = "Audio Stereo Mode Extension"; break;
1251 case V4L2_CID_MPEG_AUDIO_EMPHASIS: name = "Audio Emphasis"; break;
1252 case V4L2_CID_MPEG_AUDIO_CRC: name = "Audio CRC"; break;
1253 case V4L2_CID_MPEG_VIDEO_ENCODING: name = "Video Encoding"; break;
1254 case V4L2_CID_MPEG_VIDEO_ASPECT: name = "Video Aspect"; break;
1255 case V4L2_CID_MPEG_VIDEO_B_FRAMES: name = "Video B Frames"; break;
1256 case V4L2_CID_MPEG_VIDEO_GOP_SIZE: name = "Video GOP Size"; break;
1257 case V4L2_CID_MPEG_VIDEO_GOP_CLOSURE: name = "Video GOP Closure"; break;
1258 case V4L2_CID_MPEG_VIDEO_PULLDOWN: name = "Video Pulldown"; break;
1259 case V4L2_CID_MPEG_VIDEO_BITRATE_MODE: name = "Video Bitrate Mode"; break;
1260 case V4L2_CID_MPEG_VIDEO_BITRATE: name = "Video Bitrate"; break;
1261 case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK: name = "Video Peak Bitrate"; break;
1262 case V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION: name = "Video Temporal Decimation"; break;
1263 case V4L2_CID_MPEG_STREAM_TYPE: name = "Stream Type"; break;
1264 case V4L2_CID_MPEG_STREAM_PID_PMT: name = "Stream PMT Program ID"; break;
1265 case V4L2_CID_MPEG_STREAM_PID_AUDIO: name = "Stream Audio Program ID"; break;
1266 case V4L2_CID_MPEG_STREAM_PID_VIDEO: name = "Stream Video Program ID"; break;
1267 case V4L2_CID_MPEG_STREAM_PID_PCR: name = "Stream PCR Program ID"; break;
1268 case V4L2_CID_MPEG_STREAM_PES_ID_AUDIO: name = "Stream PES Audio ID"; break;
1269 case V4L2_CID_MPEG_STREAM_PES_ID_VIDEO: name = "Stream PES Video ID"; break;
1270 case V4L2_CID_MPEG_STREAM_VBI_FMT: name = "Stream VBI Format"; break;
1275 switch (qctrl->id) {
1276 case V4L2_CID_AUDIO_MUTE:
1277 case V4L2_CID_AUDIO_LOUDNESS:
1278 case V4L2_CID_MPEG_VIDEO_GOP_CLOSURE:
1279 case V4L2_CID_MPEG_VIDEO_PULLDOWN:
1280 qctrl->type = V4L2_CTRL_TYPE_BOOLEAN;
1284 case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
1285 case V4L2_CID_MPEG_AUDIO_ENCODING:
1286 case V4L2_CID_MPEG_AUDIO_L1_BITRATE:
1287 case V4L2_CID_MPEG_AUDIO_L2_BITRATE:
1288 case V4L2_CID_MPEG_AUDIO_L3_BITRATE:
1289 case V4L2_CID_MPEG_AUDIO_MODE:
1290 case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION:
1291 case V4L2_CID_MPEG_AUDIO_EMPHASIS:
1292 case V4L2_CID_MPEG_AUDIO_CRC:
1293 case V4L2_CID_MPEG_VIDEO_ENCODING:
1294 case V4L2_CID_MPEG_VIDEO_ASPECT:
1295 case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
1296 case V4L2_CID_MPEG_STREAM_TYPE:
1297 case V4L2_CID_MPEG_STREAM_VBI_FMT:
1298 qctrl->type = V4L2_CTRL_TYPE_MENU;
1301 case V4L2_CID_USER_CLASS:
1302 case V4L2_CID_MPEG_CLASS:
1303 qctrl->type = V4L2_CTRL_TYPE_CTRL_CLASS;
1304 qctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY;
1305 min = max = step = def = 0;
1308 qctrl->type = V4L2_CTRL_TYPE_INTEGER;
1311 switch (qctrl->id) {
1312 case V4L2_CID_MPEG_AUDIO_ENCODING:
1313 case V4L2_CID_MPEG_AUDIO_MODE:
1314 case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
1315 case V4L2_CID_MPEG_VIDEO_B_FRAMES:
1316 case V4L2_CID_MPEG_STREAM_TYPE:
1317 qctrl->flags |= V4L2_CTRL_FLAG_UPDATE;
1319 case V4L2_CID_AUDIO_VOLUME:
1320 case V4L2_CID_AUDIO_BALANCE:
1321 case V4L2_CID_AUDIO_BASS:
1322 case V4L2_CID_AUDIO_TREBLE:
1323 case V4L2_CID_BRIGHTNESS:
1324 case V4L2_CID_CONTRAST:
1325 case V4L2_CID_SATURATION:
1327 qctrl->flags |= V4L2_CTRL_FLAG_SLIDER;
1330 qctrl->minimum = min;
1331 qctrl->maximum = max;
1333 qctrl->default_value = def;
1334 qctrl->reserved[0] = qctrl->reserved[1] = 0;
1335 snprintf(qctrl->name, sizeof(qctrl->name), name);
1339 /* Fill in a struct v4l2_queryctrl with standard values based on
1341 int v4l2_ctrl_query_fill_std(struct v4l2_queryctrl *qctrl)
1343 switch (qctrl->id) {
1345 case V4L2_CID_USER_CLASS:
1346 case V4L2_CID_MPEG_CLASS:
1347 return v4l2_ctrl_query_fill(qctrl, 0, 0, 0, 0);
1348 case V4L2_CID_AUDIO_VOLUME:
1349 return v4l2_ctrl_query_fill(qctrl, 0, 65535, 65535 / 100, 58880);
1350 case V4L2_CID_AUDIO_MUTE:
1351 case V4L2_CID_AUDIO_LOUDNESS:
1352 return v4l2_ctrl_query_fill(qctrl, 0, 1, 1, 0);
1353 case V4L2_CID_AUDIO_BALANCE:
1354 case V4L2_CID_AUDIO_BASS:
1355 case V4L2_CID_AUDIO_TREBLE:
1356 return v4l2_ctrl_query_fill(qctrl, 0, 65535, 65535 / 100, 32768);
1357 case V4L2_CID_BRIGHTNESS:
1358 return v4l2_ctrl_query_fill(qctrl, 0, 255, 1, 128);
1359 case V4L2_CID_CONTRAST:
1360 case V4L2_CID_SATURATION:
1361 return v4l2_ctrl_query_fill(qctrl, 0, 127, 1, 64);
1363 return v4l2_ctrl_query_fill(qctrl, -128, 127, 1, 0);
1366 case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
1367 return v4l2_ctrl_query_fill(qctrl,
1368 V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100,
1369 V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000, 1,
1370 V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000);
1371 case V4L2_CID_MPEG_AUDIO_ENCODING:
1372 return v4l2_ctrl_query_fill(qctrl,
1373 V4L2_MPEG_AUDIO_ENCODING_LAYER_1,
1374 V4L2_MPEG_AUDIO_ENCODING_LAYER_3, 1,
1375 V4L2_MPEG_AUDIO_ENCODING_LAYER_2);
1376 case V4L2_CID_MPEG_AUDIO_L1_BITRATE:
1377 return v4l2_ctrl_query_fill(qctrl,
1378 V4L2_MPEG_AUDIO_L1_BITRATE_32K,
1379 V4L2_MPEG_AUDIO_L1_BITRATE_448K, 1,
1380 V4L2_MPEG_AUDIO_L1_BITRATE_256K);
1381 case V4L2_CID_MPEG_AUDIO_L2_BITRATE:
1382 return v4l2_ctrl_query_fill(qctrl,
1383 V4L2_MPEG_AUDIO_L2_BITRATE_32K,
1384 V4L2_MPEG_AUDIO_L2_BITRATE_384K, 1,
1385 V4L2_MPEG_AUDIO_L2_BITRATE_224K);
1386 case V4L2_CID_MPEG_AUDIO_L3_BITRATE:
1387 return v4l2_ctrl_query_fill(qctrl,
1388 V4L2_MPEG_AUDIO_L3_BITRATE_32K,
1389 V4L2_MPEG_AUDIO_L3_BITRATE_320K, 1,
1390 V4L2_MPEG_AUDIO_L3_BITRATE_192K);
1391 case V4L2_CID_MPEG_AUDIO_MODE:
1392 return v4l2_ctrl_query_fill(qctrl,
1393 V4L2_MPEG_AUDIO_MODE_STEREO,
1394 V4L2_MPEG_AUDIO_MODE_MONO, 1,
1395 V4L2_MPEG_AUDIO_MODE_STEREO);
1396 case V4L2_CID_MPEG_AUDIO_MODE_EXTENSION:
1397 return v4l2_ctrl_query_fill(qctrl,
1398 V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4,
1399 V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16, 1,
1400 V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4);
1401 case V4L2_CID_MPEG_AUDIO_EMPHASIS:
1402 return v4l2_ctrl_query_fill(qctrl,
1403 V4L2_MPEG_AUDIO_EMPHASIS_NONE,
1404 V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17, 1,
1405 V4L2_MPEG_AUDIO_EMPHASIS_NONE);
1406 case V4L2_CID_MPEG_AUDIO_CRC:
1407 return v4l2_ctrl_query_fill(qctrl,
1408 V4L2_MPEG_AUDIO_CRC_NONE,
1409 V4L2_MPEG_AUDIO_CRC_CRC16, 1,
1410 V4L2_MPEG_AUDIO_CRC_NONE);
1411 case V4L2_CID_MPEG_VIDEO_ENCODING:
1412 return v4l2_ctrl_query_fill(qctrl,
1413 V4L2_MPEG_VIDEO_ENCODING_MPEG_1,
1414 V4L2_MPEG_VIDEO_ENCODING_MPEG_2, 1,
1415 V4L2_MPEG_VIDEO_ENCODING_MPEG_2);
1416 case V4L2_CID_MPEG_VIDEO_ASPECT:
1417 return v4l2_ctrl_query_fill(qctrl,
1418 V4L2_MPEG_VIDEO_ASPECT_1x1,
1419 V4L2_MPEG_VIDEO_ASPECT_221x100, 1,
1420 V4L2_MPEG_VIDEO_ASPECT_4x3);
1421 case V4L2_CID_MPEG_VIDEO_B_FRAMES:
1422 return v4l2_ctrl_query_fill(qctrl, 0, 33, 1, 2);
1423 case V4L2_CID_MPEG_VIDEO_GOP_SIZE:
1424 return v4l2_ctrl_query_fill(qctrl, 1, 34, 1, 12);
1425 case V4L2_CID_MPEG_VIDEO_GOP_CLOSURE:
1426 return v4l2_ctrl_query_fill(qctrl, 0, 1, 1, 1);
1427 case V4L2_CID_MPEG_VIDEO_PULLDOWN:
1428 return v4l2_ctrl_query_fill(qctrl, 0, 1, 1, 0);
1429 case V4L2_CID_MPEG_VIDEO_BITRATE_MODE:
1430 return v4l2_ctrl_query_fill(qctrl,
1431 V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
1432 V4L2_MPEG_VIDEO_BITRATE_MODE_CBR, 1,
1433 V4L2_MPEG_VIDEO_BITRATE_MODE_VBR);
1434 case V4L2_CID_MPEG_VIDEO_BITRATE:
1435 return v4l2_ctrl_query_fill(qctrl, 0, 27000000, 1, 6000000);
1436 case V4L2_CID_MPEG_VIDEO_BITRATE_PEAK:
1437 return v4l2_ctrl_query_fill(qctrl, 0, 27000000, 1, 8000000);
1438 case V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION:
1439 return v4l2_ctrl_query_fill(qctrl, 0, 255, 1, 0);
1440 case V4L2_CID_MPEG_STREAM_TYPE:
1441 return v4l2_ctrl_query_fill(qctrl,
1442 V4L2_MPEG_STREAM_TYPE_MPEG2_PS,
1443 V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD, 1,
1444 V4L2_MPEG_STREAM_TYPE_MPEG2_PS);
1445 case V4L2_CID_MPEG_STREAM_PID_PMT:
1446 return v4l2_ctrl_query_fill(qctrl, 0, (1 << 14) - 1, 1, 16);
1447 case V4L2_CID_MPEG_STREAM_PID_AUDIO:
1448 return v4l2_ctrl_query_fill(qctrl, 0, (1 << 14) - 1, 1, 260);
1449 case V4L2_CID_MPEG_STREAM_PID_VIDEO:
1450 return v4l2_ctrl_query_fill(qctrl, 0, (1 << 14) - 1, 1, 256);
1451 case V4L2_CID_MPEG_STREAM_PID_PCR:
1452 return v4l2_ctrl_query_fill(qctrl, 0, (1 << 14) - 1, 1, 259);
1453 case V4L2_CID_MPEG_STREAM_PES_ID_AUDIO:
1454 return v4l2_ctrl_query_fill(qctrl, 0, 255, 1, 0);
1455 case V4L2_CID_MPEG_STREAM_PES_ID_VIDEO:
1456 return v4l2_ctrl_query_fill(qctrl, 0, 255, 1, 0);
1457 case V4L2_CID_MPEG_STREAM_VBI_FMT:
1458 return v4l2_ctrl_query_fill(qctrl,
1459 V4L2_MPEG_STREAM_VBI_FMT_NONE,
1460 V4L2_MPEG_STREAM_VBI_FMT_IVTV, 1,
1461 V4L2_MPEG_STREAM_VBI_FMT_NONE);
1467 /* Fill in a struct v4l2_querymenu based on the struct v4l2_queryctrl and
1468 the menu. The qctrl pointer may be NULL, in which case it is ignored. */
1469 int v4l2_ctrl_query_menu(struct v4l2_querymenu *qmenu, struct v4l2_queryctrl *qctrl,
1470 const char **menu_items)
1474 if (menu_items == NULL ||
1475 (qctrl && (qmenu->index < qctrl->minimum || qmenu->index > qctrl->maximum)))
1477 for (i = 0; i < qmenu->index && menu_items[i]; i++) ;
1478 if (menu_items[i] == NULL || menu_items[i][0] == '\0')
1480 snprintf(qmenu->name, sizeof(qmenu->name), menu_items[qmenu->index]);
1481 qmenu->reserved = 0;
1485 /* ctrl_classes points to an array of u32 pointers, the last element is
1486 a NULL pointer. Each u32 array is a 0-terminated array of control IDs.
1487 Each array must be sorted low to high and belong to the same control
1488 class. The array of u32 pointer must also be sorted, from low class IDs
1491 This function returns the first ID that follows after the given ID.
1492 When no more controls are available 0 is returned. */
1493 u32 v4l2_ctrl_next(const u32 * const * ctrl_classes, u32 id)
1498 /* if no query is desired, then just return the control ID */
1499 if ((id & V4L2_CTRL_FLAG_NEXT_CTRL) == 0)
1501 if (ctrl_classes == NULL)
1503 id &= V4L2_CTRL_ID_MASK;
1504 ctrl_class = V4L2_CTRL_ID2CLASS(id);
1505 id++; /* select next control */
1506 /* find first class that matches (or is greater than) the class of
1508 while (*ctrl_classes && V4L2_CTRL_ID2CLASS(**ctrl_classes) < ctrl_class)
1510 /* no more classes */
1511 if (*ctrl_classes == NULL)
1513 pctrl = *ctrl_classes;
1514 /* find first ctrl within the class that is >= ID */
1515 while (*pctrl && *pctrl < id) pctrl++;
1518 /* we are at the end of the controls of the current class. */
1519 /* continue with next class if available */
1521 if (*ctrl_classes == NULL)
1523 return **ctrl_classes;
1526 /* ----------------------------------------------------------------- */
1528 EXPORT_SYMBOL(v4l2_norm_to_name);
1529 EXPORT_SYMBOL(v4l2_video_std_construct);
1531 EXPORT_SYMBOL(v4l2_prio_init);
1532 EXPORT_SYMBOL(v4l2_prio_change);
1533 EXPORT_SYMBOL(v4l2_prio_open);
1534 EXPORT_SYMBOL(v4l2_prio_close);
1535 EXPORT_SYMBOL(v4l2_prio_max);
1536 EXPORT_SYMBOL(v4l2_prio_check);
1538 EXPORT_SYMBOL(v4l2_field_names);
1539 EXPORT_SYMBOL(v4l2_type_names);
1540 EXPORT_SYMBOL(v4l_printk_ioctl);
1541 EXPORT_SYMBOL(v4l_printk_ioctl_arg);
1543 EXPORT_SYMBOL(v4l2_ctrl_next);
1544 EXPORT_SYMBOL(v4l2_ctrl_check);
1545 EXPORT_SYMBOL(v4l2_ctrl_get_menu);
1546 EXPORT_SYMBOL(v4l2_ctrl_query_menu);
1547 EXPORT_SYMBOL(v4l2_ctrl_query_fill);
1548 EXPORT_SYMBOL(v4l2_ctrl_query_fill_std);