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:
Trent Piepho 2007-01-22 23:31:53 -03:00 committed by Mauro Carvalho Chehab
parent 758117c25b
commit dbbff48f39
3 changed files with 59 additions and 1 deletions

View File

@ -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 =

View File

@ -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) {

View File

@ -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;