diff options
author | Mauro Carvalho Chehab <mchehab@infradead.org> | 2006-06-06 21:18:44 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2006-06-06 21:18:44 -0300 |
commit | cf2dd5ced9bcd10541403a7fb3e3c6ab7084e038 (patch) | |
tree | 10dd0fac329510fa4e53ca9558134b38cfa54576 /linux/drivers/media/video/videodev.c | |
parent | ed3550c9b792d1b469cb0b56719b635a2d6ea808 (diff) | |
download | mediapointer-dvb-s2-cf2dd5ced9bcd10541403a7fb3e3c6ab7084e038.tar.gz mediapointer-dvb-s2-cf2dd5ced9bcd10541403a7fb3e3c6ab7084e038.tar.bz2 |
Fixes lots of small errors at videodev.
From: Mauro Carvalho Chehab <mchehab@infradead.org>
Fixes several small errors at debug;
Fixes max line size to 80 columns;
Fixes parameter passage to callback functions;
Removed unused fh pointer at video_device struct.
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'linux/drivers/media/video/videodev.c')
-rw-r--r-- | linux/drivers/media/video/videodev.c | 707 |
1 files changed, 397 insertions, 310 deletions
diff --git a/linux/drivers/media/video/videodev.c b/linux/drivers/media/video/videodev.c index 727cccc07..e372394f5 100644 --- a/linux/drivers/media/video/videodev.c +++ b/linux/drivers/media/video/videodev.c @@ -1,13 +1,13 @@ /* * Video capture interface for Linux version 2 * - * A generic video device interface for the LINUX operating system - * using a set of device structures/vectors for low level operations. + * A generic video device interface for the LINUX operating system + * using a set of device structures/vectors for low level operations. * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. * * Authors: Alan Cox, <alan@redhat.com> (version 1) * Mauro Carvalho Chehab <mchehab@infradead.org> (version 2) @@ -16,10 +16,15 @@ * - Added procfs support */ -#define dbgarg(fmt, arg...) \ - if (vfd->debug & V4L2_DEBUG_IOCTL_ARG) \ - printk ("%s: " fmt, vfd->name, ## arg); +#define dbgarg(cmd, fmt, arg...) \ + if (vfd->debug & V4L2_DEBUG_IOCTL_ARG) \ + printk (KERN_DEBUG "%s: ", vfd->name); \ + v4l_printk_ioctl(cmd); \ + printk (KERN_DEBUG "%s: " fmt, vfd->name, ## arg); +#define dbgarg2(fmt, arg...) \ + if (vfd->debug & V4L2_DEBUG_IOCTL_ARG) \ + printk (KERN_DEBUG "%s: " fmt, vfd->name, ## arg); #include <linux/module.h> #include <linux/types.h> @@ -57,7 +62,8 @@ static ssize_t show_name(struct class_device *cd, char *buf) { - struct video_device *vfd = container_of(cd, struct video_device, class_dev); + struct video_device *vfd = container_of(cd, struct video_device, + class_dev); return sprintf(buf,"%.*s\n",(int)sizeof(vfd->name),vfd->name); } @@ -65,7 +71,8 @@ static CLASS_DEVICE_ATTR(name, S_IRUGO, show_name, NULL); #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,12) static ssize_t show_dev(struct class_device *cd, char *buf) { - struct video_device *vfd = container_of(cd, struct video_device, class_dev); + struct video_device *vfd = container_of(cd, struct video_device, + class_dev); dev_t dev = MKDEV(VIDEO_MAJOR, vfd->minor); return print_dev_t(buf,dev); } @@ -88,7 +95,8 @@ void video_device_release(struct video_device *vfd) static void video_release(struct class_device *cd) { - struct video_device *vfd = container_of(cd, struct video_device, class_dev); + struct video_device *vfd = container_of(cd, struct video_device, + class_dev); #if 1 /* keep */ /* needed until all drivers are fixed */ @@ -226,7 +234,8 @@ video_usercopy(struct inode *inode, struct file *file, err = -EFAULT; if (_IOC_DIR(cmd) & _IOC_WRITE) - if (copy_from_user(parg, (void __user *)arg, _IOC_SIZE(cmd))) + if (copy_from_user(parg, (void __user *)arg, + _IOC_SIZE(cmd))) goto out; break; } @@ -312,10 +321,12 @@ static char *v4l2_field_names_FIXME[] = { #define prt_names(a,arr) (((a)>=0)&&((a)<ARRAY_SIZE(arr)))?arr[a]:"unknown" -static void dbgbuf(struct video_device *vfd, struct v4l2_buffer *p) { +static void dbgbuf(unsigned int cmd, struct video_device *vfd, + struct v4l2_buffer *p) +{ struct v4l2_timecode *tc=&p->timecode; - dbgarg ("%02ld:%02d:%02d.%08ld index=%d, type=%s, " + dbgarg (cmd, "%02ld:%02d:%02d.%08ld index=%d, type=%s, " "bytesused=%d, flags=0x%08d, " "field=%0d, sequence=%d, memory=%s, offset/userptr=0x%08lx\n", (p->timestamp.tv_sec/3600), @@ -328,22 +339,23 @@ static void dbgbuf(struct video_device *vfd, struct v4l2_buffer *p) { p->field,p->sequence, prt_names(p->memory,v4l2_memory_names), p->m.userptr); - dbgarg ("timecode= %02d:%02d:%02d type=%d, " + dbgarg2 ("timecode= %02d:%02d:%02d type=%d, " "flags=0x%08d, frames=%d, userbits=0x%08x\n", tc->hours,tc->minutes,tc->seconds, tc->type, tc->flags, tc->frames, (__u32) tc->userbits); } -static inline void dbgrect(struct video_device *vfd, char *s, struct v4l2_rect *r) +static inline void dbgrect(struct video_device *vfd, char *s, + struct v4l2_rect *r) { - dbgarg ("%sRect start at %dx%d, size= %dx%d", s, r->left, r->top, + dbgarg2 ("%sRect start at %dx%d, size= %dx%d\n", s, r->left, r->top, r->width, r->height); }; static inline void v4l_print_pix_fmt (struct video_device *vfd, struct v4l2_pix_format *fmt) { - dbgarg ("width=%d, height=%d, format=%d, field=%s, " + dbgarg2 ("width=%d, height=%d, format=%d, field=%s, " "bytesperline=%d sizeimage=%d, colorspace=%d\n", fmt->width,fmt->height,fmt->pixelformat, prt_names(fmt->field,v4l2_field_names_FIXME), @@ -393,12 +405,9 @@ static int check_fmt (struct video_device *vfd, enum v4l2_buf_type type) static int __video_do_ioctl(struct inode *inode, struct file *file, unsigned int cmd, void *arg) { - struct video_device *vfd; - void *fh; - int ret=-EINVAL; - - vfd = video_devdata(file); - fh = vfd->fh; + struct video_device *vfd = video_devdata(file); + void *fh = file->private_data; + int ret = -EINVAL; if ( (vfd->debug & V4L2_DEBUG_IOCTL) && !(vfd->debug | V4L2_DEBUG_IOCTL_ARG)) { @@ -412,14 +421,17 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, struct v4l2_capability *cap = (struct v4l2_capability*)arg; memset(cap, 0, sizeof(*cap)); - if (vfd->vidioc_querycap) { - ret=vfd->vidioc_querycap(file,fh, cap); - dbgarg ("driver=%s, card=%s, bus=%s, version=0x%08x, " - "capabilities=0x%08x\n", + if (!vfd->vidioc_querycap) + break; + + ret=vfd->vidioc_querycap(file, fh, cap); + if (!ret) + dbgarg (cmd, "driver=%s, card=%s, bus=%s, " + "version=0x%08x, " + "capabilities=0x%08x\n", cap->driver,cap->card,cap->bus_info, cap->version, cap->capabilities); - } break; } @@ -428,20 +440,21 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, { enum v4l2_priority *p=arg; - if (vfd->vidioc_g_priority) { - dbgarg("priority is %d\n", *p); - ret=vfd->vidioc_g_priority(file, fh, p); - } + if (!vfd->vidioc_g_priority) + break; + ret=vfd->vidioc_g_priority(file, fh, p); + if (!ret) + dbgarg(cmd, "priority is %d\n", *p); break; } case VIDIOC_S_PRIORITY: { enum v4l2_priority *p=arg; - if (vfd->vidioc_s_priority) { - ret=vfd->vidioc_s_priority(file, fh, *p); - dbgarg("priority is %d\n", *p); - } + if (!vfd->vidioc_s_priority) + break; + dbgarg(cmd, "setting priority to %d\n", *p); + ret=vfd->vidioc_s_priority(file, fh, *p); break; } @@ -473,29 +486,37 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, break; case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT: if (vfd->vidioc_enum_fmt_vbi_output) - ret=vfd->vidioc_enum_fmt_vbi_output(file, fh, f); + ret=vfd->vidioc_enum_fmt_vbi_output(file, + fh, f); break; case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE: if (vfd->vidioc_enum_fmt_vbi_capture) - ret=vfd->vidioc_enum_fmt_vbi_capture(file, fh, f); + ret=vfd->vidioc_enum_fmt_vbi_capture(file, + fh, f); break; case V4L2_BUF_TYPE_VIDEO_OUTPUT: if (vfd->vidioc_enum_fmt_video_output) - ret=vfd->vidioc_enum_fmt_video_output(file, fh, f); + ret=vfd->vidioc_enum_fmt_video_output(file, + fh, f); break; case V4L2_BUF_TYPE_VBI_OUTPUT: if (vfd->vidioc_enum_fmt_vbi_output) - ret=vfd->vidioc_enum_fmt_vbi_output(file, fh, f); + ret=vfd->vidioc_enum_fmt_vbi_output(file, + fh, f); break; case V4L2_BUF_TYPE_PRIVATE: if (vfd->vidioc_enum_fmt_type_private) - ret=vfd->vidioc_enum_fmt_type_private(file, fh, f); + ret=vfd->vidioc_enum_fmt_type_private(file, + fh, f); break; } - dbgarg ("index=%d, type=%d, flags=%d, description=%s," - " pixelformat=%d\n", - f->index, f->type, f->flags, f->description, - f->pixelformat); + if (!ret) + dbgarg (cmd, "index=%d, type=%d, flags=%d, " + "description=%s," + " pixelformat=%d\n", + f->index, f->type, f->flags, + f->description, + f->pixelformat); break; } @@ -507,6 +528,10 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, memset(&f->fmt.pix,0,sizeof(f->fmt.pix)); + /* FIXME: Should be one dump per type */ + dbgarg (cmd, "type=%s\n", prt_names(f->type, + v4l2_type_names_FIXME)); + switch (type) { case V4L2_BUF_TYPE_VIDEO_CAPTURE: if (vfd->vidioc_g_fmt_cap) @@ -530,7 +555,8 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, break; case V4L2_BUF_TYPE_VIDEO_OUTPUT: if (vfd->vidioc_g_fmt_video_output) - ret=vfd->vidioc_g_fmt_video_output(file, fh, f); + ret=vfd->vidioc_g_fmt_video_output(file, + fh, f); break; case V4L2_BUF_TYPE_VBI_OUTPUT: if (vfd->vidioc_g_fmt_vbi_output) @@ -538,24 +564,23 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, break; case V4L2_BUF_TYPE_PRIVATE: if (vfd->vidioc_g_fmt_type_private) - ret=vfd->vidioc_g_fmt_type_private(file, fh, f); + ret=vfd->vidioc_g_fmt_type_private(file, + fh, f); break; } - /* FIXME: Should be one dump per type */ - dbgarg ("type=%s\n", prt_names(f->type,v4l2_type_names_FIXME)); break; } case VIDIOC_S_FMT: { struct v4l2_format *f = (struct v4l2_format *)arg; - enum v4l2_buf_type type=f->type; memset(&f->fmt.pix,0,sizeof(f->fmt.pix)); /* FIXME: Should be one dump per type */ - dbgarg ("type=%s\n", prt_names(f->type,v4l2_type_names_FIXME)); + dbgarg (cmd, "type=%s\n", prt_names(f->type, + v4l2_type_names_FIXME)); switch (type) { case V4L2_BUF_TYPE_VIDEO_CAPTURE: @@ -580,15 +605,18 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, break; case V4L2_BUF_TYPE_VIDEO_OUTPUT: if (vfd->vidioc_s_fmt_video_output) - ret=vfd->vidioc_s_fmt_video_output(file, fh, f); + ret=vfd->vidioc_s_fmt_video_output(file, + fh, f); break; case V4L2_BUF_TYPE_VBI_OUTPUT: if (vfd->vidioc_s_fmt_vbi_output) - ret=vfd->vidioc_s_fmt_vbi_output(file, fh, f); + ret=vfd->vidioc_s_fmt_vbi_output(file, + fh, f); break; case V4L2_BUF_TYPE_PRIVATE: if (vfd->vidioc_s_fmt_type_private) - ret=vfd->vidioc_s_fmt_type_private(file, fh, f); + ret=vfd->vidioc_s_fmt_type_private(file, + fh, f); break; } break; @@ -600,6 +628,9 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, memset(&f->fmt.pix,0,sizeof(f->fmt.pix)); + /* FIXME: Should be one dump per type */ + dbgarg (cmd, "type=%s\n", prt_names(f->type, + v4l2_type_names_FIXME)); switch (type) { case V4L2_BUF_TYPE_VIDEO_CAPTURE: if (vfd->vidioc_try_fmt_cap) @@ -615,27 +646,30 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, break; case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT: if (vfd->vidioc_try_fmt_vbi_output) - ret=vfd->vidioc_try_fmt_vbi_output(file, fh, f); + ret=vfd->vidioc_try_fmt_vbi_output(file, + fh, f); break; case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE: if (vfd->vidioc_try_fmt_vbi_capture) - ret=vfd->vidioc_try_fmt_vbi_capture(file, fh, f); + ret=vfd->vidioc_try_fmt_vbi_capture(file, + fh, f); break; case V4L2_BUF_TYPE_VIDEO_OUTPUT: if (vfd->vidioc_try_fmt_video_output) - ret=vfd->vidioc_try_fmt_video_output(file, fh, f); + ret=vfd->vidioc_try_fmt_video_output(file, + fh, f); break; case V4L2_BUF_TYPE_VBI_OUTPUT: if (vfd->vidioc_try_fmt_vbi_output) - ret=vfd->vidioc_try_fmt_vbi_output(file, fh, f); + ret=vfd->vidioc_try_fmt_vbi_output(file, + fh, f); break; case V4L2_BUF_TYPE_PRIVATE: if (vfd->vidioc_try_fmt_type_private) - ret=vfd->vidioc_try_fmt_type_private(file, fh, f); + ret=vfd->vidioc_try_fmt_type_private(file, + fh, f); break; } - /* FIXME: Should be one dump per type */ - dbgarg ("type=%s\n", prt_names(f->type,v4l2_type_names_FIXME)); break; } @@ -647,68 +681,71 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, { struct v4l2_requestbuffers *p=arg; - if (vfd->vidioc_reqbufs) { - ret = check_fmt (vfd, p->type); - if (ret) - break; + if (!vfd->vidioc_reqbufs) + break; + ret = check_fmt (vfd, p->type); + if (ret) + break; - ret=vfd->vidioc_reqbufs(file, fh, p); - dbgarg ("count=%d, type=%s, memory=%s\n", - p->count, - prt_names(p->type,v4l2_type_names_FIXME), - prt_names(p->memory,v4l2_memory_names)); - } + ret=vfd->vidioc_reqbufs(file, fh, p); + dbgarg (cmd, "count=%d, type=%s, memory=%s\n", + p->count, + prt_names(p->type,v4l2_type_names_FIXME), + prt_names(p->memory,v4l2_memory_names)); break; } case VIDIOC_QUERYBUF: { struct v4l2_buffer *p=arg; - if (vfd->vidioc_querybuf) { - ret = check_fmt (vfd, p->type); - if (ret) - break; + if (!vfd->vidioc_querybuf) + break; + ret = check_fmt (vfd, p->type); + if (ret) + break; - ret=vfd->vidioc_querybuf(file, fh, p); - dbgbuf(vfd,p); - } + ret=vfd->vidioc_querybuf(file, fh, p); + if (!ret) + dbgbuf(cmd,vfd,p); break; } case VIDIOC_QBUF: { struct v4l2_buffer *p=arg; - if (vfd->vidioc_qbuf) { - ret = check_fmt (vfd, p->type); - if (ret) - break; + if (!vfd->vidioc_qbuf) + break; + ret = check_fmt (vfd, p->type); + if (ret) + break; - ret=vfd->vidioc_qbuf(file, fh, p); - dbgbuf(vfd,p); - } + ret=vfd->vidioc_qbuf(file, fh, p); + if (!ret) + dbgbuf(cmd,vfd,p); break; } case VIDIOC_DQBUF: { struct v4l2_buffer *p=arg; - if (vfd->vidioc_qbuf) { - ret = check_fmt (vfd, p->type); - if (ret) - break; + if (!vfd->vidioc_qbuf) + break; + ret = check_fmt (vfd, p->type); + if (ret) + break; - ret=vfd->vidioc_qbuf(file, fh, p); - dbgbuf(vfd,p); - } + ret=vfd->vidioc_qbuf(file, fh, p); + if (!ret) + dbgbuf(cmd,vfd,p); break; } case VIDIOC_OVERLAY: { int *i = arg; - if (vfd->vidioc_overlay) { - dbgarg ("value=%d\n",*i); - ret=vfd->vidioc_overlay(file, fh, *i); - } + if (!vfd->vidioc_overlay) + break; + dbgarg (cmd, "value=%d\n",*i); + ret=vfd->vidioc_overlay(file, fh, *i); break; } #ifdef HAVE_V4L1 @@ -719,22 +756,24 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, memset(&p,0,sizeof(p)); - if (vfd->vidiocgmbuf) { - ret=vfd->vidiocgmbuf(file, fh, p); - dbgarg ("size=%d, frames=%d, offsets=0x%08lx\n", - p->size, - p->frames, - (unsigned long)p->offsets); - } + if (!vfd->vidiocgmbuf) + break; + ret=vfd->vidiocgmbuf(file, fh, p); + if (!ret) + dbgarg (cmd, "size=%d, frames=%d, offsets=0x%08lx\n", + p->size, p->frames, + (unsigned long)p->offsets); break; } #endif case VIDIOC_G_FBUF: { struct v4l2_framebuffer *p=arg; - if (vfd->vidioc_g_fbuf) { - ret=vfd->vidioc_g_fbuf(file, fh, arg); - dbgarg ("capability=%d, flags=%d, base=0x%08lx\n", + if (!vfd->vidioc_g_fbuf) + break; + ret=vfd->vidioc_g_fbuf(file, fh, arg); + if (!ret) { + dbgarg (cmd, "capability=%d, flags=%d, base=0x%08lx\n", p->capability,p->flags, (unsigned long)p->base); v4l_print_pix_fmt (vfd, &p->fmt); @@ -744,30 +783,33 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, case VIDIOC_S_FBUF: { struct v4l2_framebuffer *p=arg; - dbgarg ("capability=%d, flags=%d, base=0x%08lx\n", + if (!vfd->vidioc_s_fbuf) + break; + + dbgarg (cmd, "capability=%d, flags=%d, base=0x%08lx\n", p->capability,p->flags,(unsigned long)p->base); v4l_print_pix_fmt (vfd, &p->fmt); - if (vfd->vidioc_s_fbuf) - ret=vfd->vidioc_s_fbuf(file, fh, arg); + ret=vfd->vidioc_s_fbuf(file, fh, arg); + break; } case VIDIOC_STREAMON: { enum v4l2_buf_type i = *(int *)arg; - if (vfd->vidioc_streamon) { - dbgarg ("type=%s\n", prt_names(i,v4l2_type_names_FIXME)); - ret=vfd->vidioc_streamon(file, fh,i); - } + if (!vfd->vidioc_streamon) + break; + dbgarg (cmd, "type=%s\n", prt_names(i,v4l2_type_names_FIXME)); + ret=vfd->vidioc_streamon(file, fh,i); break; } case VIDIOC_STREAMOFF: { enum v4l2_buf_type i = *(int *)arg; - if (vfd->vidioc_streamon){ - dbgarg ("type=%s\n", prt_names(i,v4l2_type_names_FIXME)); - ret=vfd->vidioc_streamoff(file, fh, i); - } + if (!vfd->vidioc_streamon) + break; + dbgarg (cmd, "type=%s\n", prt_names(i,v4l2_type_names_FIXME)); + ret=vfd->vidioc_streamoff(file, fh, i); break; } /* ---------- tv norms ---------- */ @@ -776,14 +818,22 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, struct v4l2_standard *p = arg; unsigned int index = p->index; - if (index<=0 || index >= vfd->tvnormsize) + if (!vfd->tvnormsize) { + printk (KERN_WARNING "%s: no TV norms defined!\n", + vfd->name); + break; + } + + if (index<=0 || index >= vfd->tvnormsize) { + ret=-EINVAL; break; + } v4l2_video_std_construct(p, vfd->tvnorms[p->index].id, vfd->tvnorms[p->index].name); p->index = index; - dbgarg ("index=%d, id=%Ld, name=%s, fps=%d/%d, " - "framelines=%d\n", p->index, + dbgarg (cmd, "index=%d, id=%Ld, name=%s, fps=%d/%d, " + "framelines=%d\n", p->index, (unsigned long long)p->id, p->name, p->frameperiod.numerator, p->frameperiod.denominator, @@ -798,7 +848,7 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, *id = vfd->current_norm; - dbgarg ("value=%Lu\n", (long long unsigned) *id); + dbgarg (cmd, "value=%Lu\n", (long long unsigned) *id); ret=0; break; @@ -808,9 +858,14 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, v4l2_std_id *id = arg; unsigned int i; - dbgarg ("value=%Lu\n", (long long unsigned) *id); + if (!vfd->tvnormsize) { + printk (KERN_WARNING "%s: no TV norms defined!\n", + vfd->name); + break; + } + + dbgarg (cmd, "value=%Lu\n", (long long unsigned) *id); - ret=0; /* First search for exact match */ for (i = 0; i < vfd->tvnormsize; i++) if (*id == vfd->tvnorms[i].id) @@ -820,8 +875,9 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, for (i = 0; i < vfd->tvnormsize; i++) if (*id & vfd->tvnorms[i].id) break; - if (i == vfd->tvnormsize) - return -EINVAL; + if (i == vfd->tvnormsize) { + break; + } /* Calls the specific handler */ if (vfd->vidioc_s_std) @@ -839,10 +895,12 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, { v4l2_std_id *p=arg; - if (vfd->vidioc_querystd) { - ret=vfd->vidioc_querystd(file, fh, arg); - dbgarg ("detected std=%Lu\n", (unsigned long long)*p); - } + if (!vfd->vidioc_querystd) + break; + ret=vfd->vidioc_querystd(file, fh, arg); + if (!ret) + dbgarg (cmd, "detected std=%Lu\n", + (unsigned long long)*p); break; } /* ------ input switching ---------- */ @@ -852,41 +910,41 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, struct v4l2_input *p=arg; int i=p->index; - if (vfd->vidioc_enum_input) { - - memset(p, 0, sizeof(*p)); - p->index=i; + if (!vfd->vidioc_enum_input) + break; + memset(p, 0, sizeof(*p)); + p->index=i; - ret=vfd->vidioc_enum_input(file, fh, p); - dbgarg ("index=%d, name=%s, type=%d, audioset=%d, " - "tuner=%d, std=%Ld, status=%d\n", + ret=vfd->vidioc_enum_input(file, fh, p); + if (!ret) + dbgarg (cmd, "index=%d, name=%s, type=%d, " + "audioset=%d, " + "tuner=%d, std=%Ld, status=%d\n", p->index,p->name,p->type,p->audioset, p->tuner, (unsigned long long)p->std, p->status); - } break; } case VIDIOC_G_INPUT: { unsigned int *i = arg; - if (vfd->vidioc_g_input) { - dbgarg ("value=%d\n",*i); - - ret=vfd->vidioc_g_input(file, fh, i); - } + if (!vfd->vidioc_g_input) + break; + ret=vfd->vidioc_g_input(file, fh, i); + if (!ret) + dbgarg (cmd, "value=%d\n",*i); break; } case VIDIOC_S_INPUT: { unsigned int *i = arg; - if (vfd->vidioc_s_input) { - ret=vfd->vidioc_s_input(file, fh, *i); - - dbgarg ("value=%d\n",*i); - } + if (!vfd->vidioc_s_input) + break; + dbgarg (cmd, "value=%d\n",*i); + ret=vfd->vidioc_s_input(file, fh, *i); break; } @@ -895,21 +953,21 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, { unsigned int *i = arg; - if (vfd->vidioc_g_output) { - ret=vfd->vidioc_g_output(file, fh, i); - dbgarg ("value=%d\n",*i); - } + if (!vfd->vidioc_g_output) + break; + ret=vfd->vidioc_g_output(file, fh, i); + if (!ret) + dbgarg (cmd, "value=%d\n",*i); break; } case VIDIOC_S_OUTPUT: { unsigned int *i = arg; - - if (vfd->vidioc_s_output) { - dbgarg ("value=%d\n",*i); - ret=vfd->vidioc_s_output(file, fh, *i); - } + if (!vfd->vidioc_s_output) + break; + dbgarg (cmd, "value=%d\n",*i); + ret=vfd->vidioc_s_output(file, fh, *i); break; } @@ -918,47 +976,52 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, { struct v4l2_queryctrl *p=arg; - if (vfd->vidioc_queryctrl) { - ret=vfd->vidioc_queryctrl(file, fh, p); + if (!vfd->vidioc_queryctrl) + break; + ret=vfd->vidioc_queryctrl(file, fh, p); - dbgarg ("id=%d, type=%d, name=%s, min/max=%d/%d," - " step=%d, default=%d, flags=0x%08x\n", - p->id,p->type,p->name,p->minimum,p->maximum, - p->step,p->default_value,p->flags); - } + if (!ret) + dbgarg (cmd, "id=%d, type=%d, name=%s, " + "min/max=%d/%d," + " step=%d, default=%d, flags=0x%08x\n", + p->id,p->type,p->name,p->minimum, + p->maximum,p->step,p->default_value, + p->flags); break; } case VIDIOC_G_CTRL: { struct v4l2_control *p = arg; - if (vfd->vidioc_g_ctrl) { - dbgarg("Enum for index=%d\n", p->id); + if (!vfd->vidioc_g_ctrl) + break; + dbgarg(cmd, "Enum for index=%d\n", p->id); - ret=vfd->vidioc_g_ctrl(file, fh, p); - dbgarg ("id=%d, value=%d\n", p->id, p->value); - } + ret=vfd->vidioc_g_ctrl(file, fh, p); + if (!ret) + dbgarg2 ( "id=%d, value=%d\n", p->id, p->value); break; } case VIDIOC_S_CTRL: { struct v4l2_control *p = arg; - if (vfd->vidioc_s_ctrl) { - dbgarg ("id=%d, value=%d\n", p->id, p->value); + if (!vfd->vidioc_s_ctrl) + break; + dbgarg (cmd, "id=%d, value=%d\n", p->id, p->value); - ret=vfd->vidioc_s_ctrl(file, fh, p); - } + ret=vfd->vidioc_s_ctrl(file, fh, p); break; } case VIDIOC_QUERYMENU: { struct v4l2_querymenu *p=arg; - if (vfd->vidioc_querymenu) { - dbgarg ("id=%d, index=%d, name=%s\n", - p->id,p->index,p->name); - ret=vfd->vidioc_querymenu(file, fh, p); - } + if (!vfd->vidioc_querymenu) + break; + ret=vfd->vidioc_querymenu(file, fh, p); + if (!ret) + dbgarg (cmd, "id=%d, index=%d, name=%s\n", + p->id,p->index,p->name); break; } /* --- audio ---------------------------------------------- */ @@ -966,103 +1029,118 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, { struct v4l2_audio *p=arg; - if (vfd->vidioc_enumaudio) { - dbgarg("Enum for index=%d\n", p->index); - ret=vfd->vidioc_enumaudio(file, fh, p); - dbgarg("index=%d, name=%s, capability=%d, mode=%d\n", - p->index, p->name,p->capability, p->mode); - } + if (!vfd->vidioc_enumaudio) + break; + dbgarg(cmd, "Enum for index=%d\n", p->index); + ret=vfd->vidioc_enumaudio(file, fh, p); + if (!ret) + dbgarg2("index=%d, name=%s, capability=%d, " + "mode=%d\n",p->index,p->name, + p->capability, p->mode); break; } case VIDIOC_G_AUDIO: { struct v4l2_audio *p=arg; - if (vfd->vidioc_g_audio) { - dbgarg("Get for index=%d\n", p->index); - ret=vfd->vidioc_g_audio(file, fh, p); - dbgarg("index=%d, name=%s, capability=%d, mode=%d\n", - p->index, p->name,p->capability, p->mode); - } + if (!vfd->vidioc_g_audio) + break; + dbgarg(cmd, "Get for index=%d\n", p->index); + ret=vfd->vidioc_g_audio(file, fh, p); + if (!ret) + dbgarg2("index=%d, name=%s, capability=%d, " + "mode=%d\n",p->index, + p->name,p->capability, p->mode); break; } case VIDIOC_S_AUDIO: { struct v4l2_audio *p=arg; - if (vfd->vidioc_s_audio) { - dbgarg("index=%d, name=%s, capability=%d, mode=%d\n", - p->index, p->name,p->capability, p->mode); - ret=vfd->vidioc_s_audio(file, fh, p); - } + if (!vfd->vidioc_s_audio) + break; + dbgarg(cmd, "index=%d, name=%s, capability=%d, " + "mode=%d\n", p->index, p->name, + p->capability, p->mode); + ret=vfd->vidioc_s_audio(file, fh, p); break; } case VIDIOC_ENUMAUDOUT: { struct v4l2_audioout *p=arg; - if (vfd->vidioc_enumaudout) { - dbgarg("Enum for index=%d\n", p->index); - ret=vfd->vidioc_enumaudout(file, fh, p); - dbgarg("index=%d, name=%s, capability=%d, mode=%d\n", - p->index, p->name, p->capability,p->mode); - } + if (!vfd->vidioc_enumaudout) + break; + dbgarg(cmd, "Enum for index=%d\n", p->index); + ret=vfd->vidioc_enumaudout(file, fh, p); + if (!ret) + dbgarg2("index=%d, name=%s, capability=%d, " + "mode=%d\n", p->index, p->name, + p->capability,p->mode); break; } case VIDIOC_G_AUDOUT: { struct v4l2_audioout *p=arg; - if (vfd->vidioc_g_audout) { - dbgarg("Enum for index=%d\n", p->index); - ret=vfd->vidioc_g_audout(file, fh, p); - dbgarg("index=%d, name=%s, capability=%d, mode=%d\n", - p->index, p->name, p->capability,p->mode); - } + if (!vfd->vidioc_g_audout) + break; + dbgarg(cmd, "Enum for index=%d\n", p->index); + ret=vfd->vidioc_g_audout(file, fh, p); + if (!ret) + dbgarg2("index=%d, name=%s, capability=%d, " + "mode=%d\n", p->index, p->name, + p->capability,p->mode); break; } case VIDIOC_S_AUDOUT: { struct v4l2_audioout *p=arg; - if (vfd->vidioc_s_audout) { - dbgarg("index=%d, name=%s, capability=%d, mode=%d\n", - p->index, p->name, p->capability,p->mode); + if (!vfd->vidioc_s_audout) + break; + dbgarg(cmd, "index=%d, name=%s, capability=%d, " + "mode=%d\n", p->index, p->name, + p->capability,p->mode); - ret=vfd->vidioc_s_audout(file, fh, p); - } + ret=vfd->vidioc_s_audout(file, fh, p); break; } case VIDIOC_G_MODULATOR: { struct v4l2_modulator *p=arg; - if (vfd->vidioc_g_modulator) { - ret=vfd->vidioc_g_modulator(file, fh, p); - dbgarg("index=%d, name=%s, capability=%d, rangelow=%d," - " rangehigh=%d, txsubchans=%d\n", - p->index, p->name,p->capability,p->rangelow, - p->rangehigh,p->txsubchans); - } + if (!vfd->vidioc_g_modulator) + break; + ret=vfd->vidioc_g_modulator(file, fh, p); + if (!ret) + dbgarg(cmd, "index=%d, name=%s, " + "capability=%d, rangelow=%d," + " rangehigh=%d, txsubchans=%d\n", + p->index, p->name,p->capability, + p->rangelow, p->rangehigh, + p->txsubchans); break; } case VIDIOC_S_MODULATOR: { struct v4l2_modulator *p=arg; - if (vfd->vidioc_s_modulator) { - dbgarg("index=%d, name=%s, capability=%d, rangelow=%d," - " rangehigh=%d, txsubchans=%d\n", + if (!vfd->vidioc_s_modulator) + break; + dbgarg(cmd, "index=%d, name=%s, capability=%d, " + "rangelow=%d, rangehigh=%d, txsubchans=%d\n", p->index, p->name,p->capability,p->rangelow, p->rangehigh,p->txsubchans); ret=vfd->vidioc_s_modulator(file, fh, p); - } break; } case VIDIOC_G_CROP: { struct v4l2_crop *p=arg; - if (vfd->vidioc_g_crop) { - ret=vfd->vidioc_g_crop(file, fh, p); - dbgarg("type=%d\n", p->type); + if (!vfd->vidioc_g_crop) + break; + ret=vfd->vidioc_g_crop(file, fh, p); + if (!ret) { + dbgarg(cmd, "type=%d\n", p->type); dbgrect(vfd, "", &p->c); } break; @@ -1070,50 +1148,54 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, case VIDIOC_S_CROP: { struct v4l2_crop *p=arg; - if (vfd->vidioc_s_crop) { - dbgarg("type=%d\n", p->type); - dbgrect(vfd, "", &p->c); - ret=vfd->vidioc_s_crop(file, fh, p); - } + if (!vfd->vidioc_s_crop) + break; + dbgarg(cmd, "type=%d\n", p->type); + dbgrect(vfd, "", &p->c); + ret=vfd->vidioc_s_crop(file, fh, p); break; } case VIDIOC_CROPCAP: { struct v4l2_cropcap *p=arg; /*FIXME: Should also show v4l2_fract pixelaspect */ - if (vfd->vidioc_cropcap) { - dbgarg("type=%d\n", p->type); - dbgrect(vfd, "bounds ", &p->bounds); - dbgrect(vfd, "defrect ", &p->defrect); - ret=vfd->vidioc_cropcap(file, fh, p); - } + if (!vfd->vidioc_cropcap) + break; + dbgarg(cmd, "type=%d\n", p->type); + dbgrect(vfd, "bounds ", &p->bounds); + dbgrect(vfd, "defrect ", &p->defrect); + ret=vfd->vidioc_cropcap(file, fh, p); break; } case VIDIOC_G_MPEGCOMP: { struct v4l2_mpeg_compression *p=arg; /*FIXME: Several fields not shown */ - if (vfd->vidioc_g_mpegcomp) { - ret=vfd->vidioc_g_mpegcomp(file, fh, p); - dbgarg ("ts_pid_pmt=%d, ts_pid_audio=%d, " - "ts_pid_video=%d, ts_pid_pcr=%d, ps_size=%d, " - "au_sample_rate=%d, au_pesid=%c, " - "vi_frame_rate=%d, vi_frames_per_gop=%d, " - "vi_bframes_count=%d, vi_pesid=%c\n", - p->ts_pid_pmt,p->ts_pid_audio, p->ts_pid_video, - p->ts_pid_pcr, p->ps_size, p->au_sample_rate, - p->au_pesid, p->vi_frame_rate, - p->vi_frames_per_gop, p->vi_bframes_count, - p->vi_pesid); - } + if (!vfd->vidioc_g_mpegcomp) + break; + ret=vfd->vidioc_g_mpegcomp(file, fh, p); + if (!ret) + dbgarg (cmd, "ts_pid_pmt=%d, ts_pid_audio=%d," + " ts_pid_video=%d, ts_pid_pcr=%d, " + "ps_size=%d, au_sample_rate=%d, " + "au_pesid=%c, vi_frame_rate=%d, " + "vi_frames_per_gop=%d, " + "vi_bframes_count=%d, vi_pesid=%c\n", + p->ts_pid_pmt,p->ts_pid_audio, + p->ts_pid_video,p->ts_pid_pcr, + p->ps_size, p->au_sample_rate, + p->au_pesid, p->vi_frame_rate, + p->vi_frames_per_gop, + p->vi_bframes_count, p->vi_pesid); break; } case VIDIOC_S_MPEGCOMP: { struct v4l2_mpeg_compression *p=arg; /*FIXME: Several fields not shown */ - if (vfd->vidioc_s_mpegcomp) { - dbgarg ("ts_pid_pmt=%d, ts_pid_audio=%d, " + if (!vfd->vidioc_s_mpegcomp) + break; + dbgarg (cmd, "ts_pid_pmt=%d, ts_pid_audio=%d, " "ts_pid_video=%d, ts_pid_pcr=%d, ps_size=%d, " "au_sample_rate=%d, au_pesid=%c, " "vi_frame_rate=%d, vi_frames_per_gop=%d, " @@ -1123,116 +1205,121 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, p->au_pesid, p->vi_frame_rate, p->vi_frames_per_gop, p->vi_bframes_count, p->vi_pesid); - ret=vfd->vidioc_s_mpegcomp(file, fh, p); - } + ret=vfd->vidioc_s_mpegcomp(file, fh, p); break; } case VIDIOC_G_JPEGCOMP: { struct v4l2_jpegcompression *p=arg; - if (vfd->vidioc_g_jpegcomp) { - dbgarg ("quality=%d, APPn=%d, APP_len=%d, COM_len=%d," - " jpeg_markers=%d\n", - p->quality,p->APPn,p->APP_len, - p->COM_len,p->jpeg_markers); - ret=vfd->vidioc_g_jpegcomp(file, fh, p); - } + if (!vfd->vidioc_g_jpegcomp) + break; + ret=vfd->vidioc_g_jpegcomp(file, fh, p); + if (!ret) + dbgarg (cmd, "quality=%d, APPn=%d, " + "APP_len=%d, COM_len=%d, " + "jpeg_markers=%d\n", + p->quality,p->APPn,p->APP_len, + p->COM_len,p->jpeg_markers); break; } case VIDIOC_S_JPEGCOMP: { struct v4l2_jpegcompression *p=arg; - if (vfd->vidioc_g_jpegcomp) { - ret=vfd->vidioc_s_jpegcomp(file, fh, p); - dbgarg ("quality=%d, APPn=%d, APP_len=%d, COM_len=%d," - " jpeg_markers=%d\n", + if (!vfd->vidioc_g_jpegcomp) + break; + dbgarg (cmd, "quality=%d, APPn=%d, APP_len=%d, " + "COM_len=%d, jpeg_markers=%d\n", p->quality,p->APPn,p->APP_len, p->COM_len,p->jpeg_markers); - } + ret=vfd->vidioc_s_jpegcomp(file, fh, p); break; } case VIDIOC_G_PARM: { struct v4l2_streamparm *p=arg; - if (vfd->vidioc_g_parm) { - dbgarg ("type=%d\n", p->type); - ret=vfd->vidioc_g_parm(file, fh, p); - } + if (!vfd->vidioc_g_parm) + break; + ret=vfd->vidioc_g_parm(file, fh, p); + dbgarg (cmd, "type=%d\n", p->type); break; } case VIDIOC_S_PARM: { struct v4l2_streamparm *p=arg; - if (vfd->vidioc_s_parm) { - ret=vfd->vidioc_s_parm(file, fh, p); - dbgarg ("type=%d\n", p->type); - } + if (!vfd->vidioc_s_parm) + break; + dbgarg (cmd, "type=%d\n", p->type); + ret=vfd->vidioc_s_parm(file, fh, p); break; } case VIDIOC_G_TUNER: { struct v4l2_tuner *p=arg; - if (vfd->vidioc_g_tuner) { - ret=vfd->vidioc_g_tuner(file, fh, p); - dbgarg ("index=%d, name=%s, type=%d, capability=%d, " - "rangelow=%d, rangehigh=%d, signal=%d, afc=%d, " - "rxsubchans=%d, audmode=%d\n", - p->index, p->name, p->type, - p->capability, p->rangelow,p->rangehigh, - p->rxsubchans, p->audmode, p->signal, - p->afc); - } + if (!vfd->vidioc_g_tuner) + break; + ret=vfd->vidioc_g_tuner(file, fh, p); + if (!ret) + dbgarg (cmd, "index=%d, name=%s, type=%d, " + "capability=%d, rangelow=%d, " + "rangehigh=%d, signal=%d, afc=%d, " + "rxsubchans=%d, audmode=%d\n", + p->index, p->name, p->type, + p->capability, p->rangelow, + p->rangehigh, p->rxsubchans, + p->audmode, p->signal, p->afc); break; } case VIDIOC_S_TUNER: { struct v4l2_tuner *p=arg; - if (vfd->vidioc_s_tuner) { - dbgarg ("index=%d, name=%s, type=%d, capability=%d, " - "rangelow=%d, rangehigh=%d, signal=%d, afc=%d, " - "rxsubchans=%d, audmode=%d\n", - p->index, p->name, p->type, + if (!vfd->vidioc_s_tuner) + break; + dbgarg (cmd, "index=%d, name=%s, type=%d, " + "capability=%d, rangelow=%d, rangehigh=%d, " + "signal=%d, afc=%d, rxsubchans=%d, " + "audmode=%d\n",p->index, p->name, p->type, p->capability, p->rangelow,p->rangehigh, p->rxsubchans, p->audmode, p->signal, p->afc); - ret=vfd->vidioc_s_tuner(file, fh, p); - } + ret=vfd->vidioc_s_tuner(file, fh, p); break; } case VIDIOC_G_FREQUENCY: { struct v4l2_frequency *p=arg; - if (vfd->vidioc_g_frequency) { - dbgarg ("tuner=%d, type=%d, frequency=%d\n", - p->tuner,p->type,p->frequency); - ret=vfd->vidioc_g_frequency(file, fh, p); - } + if (!vfd->vidioc_g_frequency) + break; + ret=vfd->vidioc_g_frequency(file, fh, p); + if (!ret) + dbgarg (cmd, "tuner=%d, type=%d, frequency=%d\n", + p->tuner,p->type,p->frequency); break; } case VIDIOC_S_FREQUENCY: { struct v4l2_frequency *p=arg; - if (vfd->vidioc_s_frequency) { - ret=vfd->vidioc_s_frequency(file, fh, p); - dbgarg ("tuner=%d, type=%d, frequency=%d\n", + if (!vfd->vidioc_s_frequency) + break; + dbgarg (cmd, "tuner=%d, type=%d, frequency=%d\n", p->tuner,p->type,p->frequency); - } + ret=vfd->vidioc_s_frequency(file, fh, p); break; } case VIDIOC_G_SLICED_VBI_CAP: { struct v4l2_sliced_vbi_cap *p=arg; - if (vfd->vidioc_g_sliced_vbi_cap) { - dbgarg ("service_set=%d\n", p->service_set); - ret=vfd->vidioc_g_sliced_vbi_cap(file, fh, p); - } + if (!vfd->vidioc_g_sliced_vbi_cap) + break; + ret=vfd->vidioc_g_sliced_vbi_cap(file, fh, p); + if (!ret) + dbgarg (cmd, "service_set=%d\n", p->service_set); break; } case VIDIOC_LOG_STATUS: { - if (vfd->vidioc_log_status) { - ret=vfd->vidioc_log_status(file, fh); - } + if (!vfd->vidioc_log_status) + break; + ret=vfd->vidioc_log_status(file, fh); break; } @@ -1244,8 +1331,8 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, if (vfd->debug & V4L2_DEBUG_IOCTL_ARG) { if (ret<0) { - printk ("%s", vfd->name); - v4l_print_ioctl("(err):", cmd); + printk ("%s: err:\n", vfd->name); + v4l_print_ioctl(vfd->name, cmd); } } |