[media] gspca: clear priv field and disable relevant ioctls
The v4l2_pix_format priv field must be 0, so zero it. Also disable ioctls that are not implemented by a subdriver. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
0cfe9de234
commit
ac3322b0d4
@ -1049,12 +1049,6 @@ static int vidioc_g_register(struct file *file, void *priv,
|
|||||||
{
|
{
|
||||||
struct gspca_dev *gspca_dev = video_drvdata(file);
|
struct gspca_dev *gspca_dev = video_drvdata(file);
|
||||||
|
|
||||||
if (!gspca_dev->sd_desc->get_chip_ident)
|
|
||||||
return -ENOTTY;
|
|
||||||
|
|
||||||
if (!gspca_dev->sd_desc->get_register)
|
|
||||||
return -ENOTTY;
|
|
||||||
|
|
||||||
gspca_dev->usb_err = 0;
|
gspca_dev->usb_err = 0;
|
||||||
return gspca_dev->sd_desc->get_register(gspca_dev, reg);
|
return gspca_dev->sd_desc->get_register(gspca_dev, reg);
|
||||||
}
|
}
|
||||||
@ -1064,12 +1058,6 @@ static int vidioc_s_register(struct file *file, void *priv,
|
|||||||
{
|
{
|
||||||
struct gspca_dev *gspca_dev = video_drvdata(file);
|
struct gspca_dev *gspca_dev = video_drvdata(file);
|
||||||
|
|
||||||
if (!gspca_dev->sd_desc->get_chip_ident)
|
|
||||||
return -ENOTTY;
|
|
||||||
|
|
||||||
if (!gspca_dev->sd_desc->set_register)
|
|
||||||
return -ENOTTY;
|
|
||||||
|
|
||||||
gspca_dev->usb_err = 0;
|
gspca_dev->usb_err = 0;
|
||||||
return gspca_dev->sd_desc->set_register(gspca_dev, reg);
|
return gspca_dev->sd_desc->set_register(gspca_dev, reg);
|
||||||
}
|
}
|
||||||
@ -1080,9 +1068,6 @@ static int vidioc_g_chip_ident(struct file *file, void *priv,
|
|||||||
{
|
{
|
||||||
struct gspca_dev *gspca_dev = video_drvdata(file);
|
struct gspca_dev *gspca_dev = video_drvdata(file);
|
||||||
|
|
||||||
if (!gspca_dev->sd_desc->get_chip_ident)
|
|
||||||
return -ENOTTY;
|
|
||||||
|
|
||||||
gspca_dev->usb_err = 0;
|
gspca_dev->usb_err = 0;
|
||||||
return gspca_dev->sd_desc->get_chip_ident(gspca_dev, chip);
|
return gspca_dev->sd_desc->get_chip_ident(gspca_dev, chip);
|
||||||
}
|
}
|
||||||
@ -1136,8 +1121,10 @@ static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
|
|||||||
int mode;
|
int mode;
|
||||||
|
|
||||||
mode = gspca_dev->curr_mode;
|
mode = gspca_dev->curr_mode;
|
||||||
memcpy(&fmt->fmt.pix, &gspca_dev->cam.cam_mode[mode],
|
fmt->fmt.pix = gspca_dev->cam.cam_mode[mode];
|
||||||
sizeof fmt->fmt.pix);
|
/* some drivers use priv internally, zero it before giving it to
|
||||||
|
userspace */
|
||||||
|
fmt->fmt.pix.priv = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1168,8 +1155,10 @@ static int try_fmt_vid_cap(struct gspca_dev *gspca_dev,
|
|||||||
/* else
|
/* else
|
||||||
; * no chance, return this mode */
|
; * no chance, return this mode */
|
||||||
}
|
}
|
||||||
memcpy(&fmt->fmt.pix, &gspca_dev->cam.cam_mode[mode],
|
fmt->fmt.pix = gspca_dev->cam.cam_mode[mode];
|
||||||
sizeof fmt->fmt.pix);
|
/* some drivers use priv internally, zero it before giving it to
|
||||||
|
userspace */
|
||||||
|
fmt->fmt.pix.priv = 0;
|
||||||
return mode; /* used when s_fmt */
|
return mode; /* used when s_fmt */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1694,8 +1683,6 @@ static int vidioc_g_jpegcomp(struct file *file, void *priv,
|
|||||||
{
|
{
|
||||||
struct gspca_dev *gspca_dev = video_drvdata(file);
|
struct gspca_dev *gspca_dev = video_drvdata(file);
|
||||||
|
|
||||||
if (!gspca_dev->sd_desc->get_jcomp)
|
|
||||||
return -ENOTTY;
|
|
||||||
gspca_dev->usb_err = 0;
|
gspca_dev->usb_err = 0;
|
||||||
return gspca_dev->sd_desc->get_jcomp(gspca_dev, jpegcomp);
|
return gspca_dev->sd_desc->get_jcomp(gspca_dev, jpegcomp);
|
||||||
}
|
}
|
||||||
@ -1705,8 +1692,6 @@ static int vidioc_s_jpegcomp(struct file *file, void *priv,
|
|||||||
{
|
{
|
||||||
struct gspca_dev *gspca_dev = video_drvdata(file);
|
struct gspca_dev *gspca_dev = video_drvdata(file);
|
||||||
|
|
||||||
if (!gspca_dev->sd_desc->set_jcomp)
|
|
||||||
return -ENOTTY;
|
|
||||||
gspca_dev->usb_err = 0;
|
gspca_dev->usb_err = 0;
|
||||||
return gspca_dev->sd_desc->set_jcomp(gspca_dev, jpegcomp);
|
return gspca_dev->sd_desc->set_jcomp(gspca_dev, jpegcomp);
|
||||||
}
|
}
|
||||||
@ -2290,6 +2275,20 @@ int gspca_dev_probe2(struct usb_interface *intf,
|
|||||||
v4l2_disable_ioctl_locking(&gspca_dev->vdev, VIDIOC_DQBUF);
|
v4l2_disable_ioctl_locking(&gspca_dev->vdev, VIDIOC_DQBUF);
|
||||||
v4l2_disable_ioctl_locking(&gspca_dev->vdev, VIDIOC_QBUF);
|
v4l2_disable_ioctl_locking(&gspca_dev->vdev, VIDIOC_QBUF);
|
||||||
v4l2_disable_ioctl_locking(&gspca_dev->vdev, VIDIOC_QUERYBUF);
|
v4l2_disable_ioctl_locking(&gspca_dev->vdev, VIDIOC_QUERYBUF);
|
||||||
|
if (!gspca_dev->sd_desc->get_chip_ident)
|
||||||
|
v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_DBG_G_CHIP_IDENT);
|
||||||
|
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||||
|
if (!gspca_dev->sd_desc->get_chip_ident ||
|
||||||
|
!gspca_dev->sd_desc->get_register)
|
||||||
|
v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_DBG_G_REGISTER);
|
||||||
|
if (!gspca_dev->sd_desc->get_chip_ident ||
|
||||||
|
!gspca_dev->sd_desc->set_register)
|
||||||
|
v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_DBG_S_REGISTER);
|
||||||
|
#endif
|
||||||
|
if (!gspca_dev->sd_desc->get_jcomp)
|
||||||
|
v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_G_JPEGCOMP);
|
||||||
|
if (!gspca_dev->sd_desc->set_jcomp)
|
||||||
|
v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_S_JPEGCOMP);
|
||||||
|
|
||||||
/* init video stuff */
|
/* init video stuff */
|
||||||
ret = video_register_device(&gspca_dev->vdev,
|
ret = video_register_device(&gspca_dev->vdev,
|
||||||
|
Loading…
Reference in New Issue
Block a user