Loading drivers/media/video/cx88/cx88-video.c +31 −1 Original line number Diff line number Diff line Loading @@ -1385,6 +1385,32 @@ static int vidioc_s_frequency (struct file *file, void *priv, cx88_set_freq (core,f); } #ifdef CONFIG_VIDEO_ADV_DEBUG static int vidioc_g_register (struct file *file, void *fh, struct v4l2_register *reg) { struct cx88_core *core = ((struct cx8800_fh*)fh)->dev->core; if (reg->i2c_id != 0) return -EINVAL; /* cx2388x has a 24-bit register space */ reg->val = cx_read(reg->reg&0xffffff); return 0; } static int vidioc_s_register (struct file *file, void *fh, struct v4l2_register *reg) { struct cx88_core *core = ((struct cx8800_fh*)fh)->dev->core; if (reg->i2c_id != 0) return -EINVAL; if (!capable(CAP_SYS_ADMIN)) return -EPERM; cx_write(reg->reg&0xffffff, reg->val); return 0; } #endif /* ----------------------------------------------------------- */ /* RADIO ESPECIFIC IOCTLS */ Loading Loading @@ -1656,6 +1682,10 @@ static struct video_device cx8800_video_template = .vidioc_s_tuner = vidioc_s_tuner, .vidioc_g_frequency = vidioc_g_frequency, .vidioc_s_frequency = vidioc_s_frequency, #ifdef CONFIG_VIDEO_ADV_DEBUG .vidioc_g_register = vidioc_g_register, .vidioc_s_register = vidioc_s_register, #endif .tvnorms = CX88_NORMS, .current_norm = V4L2_STD_NTSC_M, }; Loading drivers/media/video/videodev.c +16 −0 Original line number Diff line number Diff line Loading @@ -1453,6 +1453,22 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, ret=vfd->vidioc_log_status(file, fh); break; } #ifdef CONFIG_VIDEO_ADV_DEBUG case VIDIOC_INT_G_REGISTER: { struct v4l2_register *p=arg; if (vfd->vidioc_g_register) ret=vfd->vidioc_g_register(file, fh, p); break; } case VIDIOC_INT_S_REGISTER: { struct v4l2_register *p=arg; if (vfd->vidioc_s_register) ret=vfd->vidioc_s_register(file, fh, p); break; } #endif } /* switch */ if (vfd->debug & V4L2_DEBUG_IOCTL_ARG) { Loading include/media/v4l2-dev.h +12 −0 Original line number Diff line number Diff line Loading @@ -77,6 +77,9 @@ int v4l_compat_translate_ioctl(struct inode *inode, struct file *file, extern long v4l_compat_ioctl32(struct file *file, unsigned int cmd, unsigned long arg); /* Forward definition of v4l2-common.h defined structure */ struct v4l2_register; /* * Newer version of video_device, handled by videodev2.c * This version moves redundant code from video device code to Loading Loading @@ -296,6 +299,15 @@ struct video_device int (*vidioc_log_status) (struct file *file, void *fh); /* Debugging ioctls */ #ifdef CONFIG_VIDEO_ADV_DEBUG int (*vidioc_g_register) (struct file *file, void *fh, struct v4l2_register *reg); int (*vidioc_s_register) (struct file *file, void *fh, struct v4l2_register *reg); #endif #ifdef OBSOLETE_OWNER /* to be removed soon */ /* obsolete -- fops->owner is used instead */ struct module *owner; Loading Loading
drivers/media/video/cx88/cx88-video.c +31 −1 Original line number Diff line number Diff line Loading @@ -1385,6 +1385,32 @@ static int vidioc_s_frequency (struct file *file, void *priv, cx88_set_freq (core,f); } #ifdef CONFIG_VIDEO_ADV_DEBUG static int vidioc_g_register (struct file *file, void *fh, struct v4l2_register *reg) { struct cx88_core *core = ((struct cx8800_fh*)fh)->dev->core; if (reg->i2c_id != 0) return -EINVAL; /* cx2388x has a 24-bit register space */ reg->val = cx_read(reg->reg&0xffffff); return 0; } static int vidioc_s_register (struct file *file, void *fh, struct v4l2_register *reg) { struct cx88_core *core = ((struct cx8800_fh*)fh)->dev->core; if (reg->i2c_id != 0) return -EINVAL; if (!capable(CAP_SYS_ADMIN)) return -EPERM; cx_write(reg->reg&0xffffff, reg->val); return 0; } #endif /* ----------------------------------------------------------- */ /* RADIO ESPECIFIC IOCTLS */ Loading Loading @@ -1656,6 +1682,10 @@ static struct video_device cx8800_video_template = .vidioc_s_tuner = vidioc_s_tuner, .vidioc_g_frequency = vidioc_g_frequency, .vidioc_s_frequency = vidioc_s_frequency, #ifdef CONFIG_VIDEO_ADV_DEBUG .vidioc_g_register = vidioc_g_register, .vidioc_s_register = vidioc_s_register, #endif .tvnorms = CX88_NORMS, .current_norm = V4L2_STD_NTSC_M, }; Loading
drivers/media/video/videodev.c +16 −0 Original line number Diff line number Diff line Loading @@ -1453,6 +1453,22 @@ static int __video_do_ioctl(struct inode *inode, struct file *file, ret=vfd->vidioc_log_status(file, fh); break; } #ifdef CONFIG_VIDEO_ADV_DEBUG case VIDIOC_INT_G_REGISTER: { struct v4l2_register *p=arg; if (vfd->vidioc_g_register) ret=vfd->vidioc_g_register(file, fh, p); break; } case VIDIOC_INT_S_REGISTER: { struct v4l2_register *p=arg; if (vfd->vidioc_s_register) ret=vfd->vidioc_s_register(file, fh, p); break; } #endif } /* switch */ if (vfd->debug & V4L2_DEBUG_IOCTL_ARG) { Loading
include/media/v4l2-dev.h +12 −0 Original line number Diff line number Diff line Loading @@ -77,6 +77,9 @@ int v4l_compat_translate_ioctl(struct inode *inode, struct file *file, extern long v4l_compat_ioctl32(struct file *file, unsigned int cmd, unsigned long arg); /* Forward definition of v4l2-common.h defined structure */ struct v4l2_register; /* * Newer version of video_device, handled by videodev2.c * This version moves redundant code from video device code to Loading Loading @@ -296,6 +299,15 @@ struct video_device int (*vidioc_log_status) (struct file *file, void *fh); /* Debugging ioctls */ #ifdef CONFIG_VIDEO_ADV_DEBUG int (*vidioc_g_register) (struct file *file, void *fh, struct v4l2_register *reg); int (*vidioc_s_register) (struct file *file, void *fh, struct v4l2_register *reg); #endif #ifdef OBSOLETE_OWNER /* to be removed soon */ /* obsolete -- fops->owner is used instead */ struct module *owner; Loading