V4L/DVB (5144): Restore VIDIOC_INT_[SG]_REGISTER calls
Add support for these ioctls to the video_ioctl2 system and the cx88 driver. Signed-off-by: Trent Piepho <xyzzy@speakeasy.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
758117c25b
commit
dbbff48f39
|
@ -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 */
|
||||
|
@ -1656,8 +1682,12 @@ 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,
|
||||
.current_norm = V4L2_STD_NTSC_M,
|
||||
};
|
||||
|
||||
static const struct file_operations radio_fops =
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
@ -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…
Reference in New Issue