aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2012-05-23 16:17:12 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-07-30 17:37:04 -0400
commitac3322b0d400fdbab410ab80f26a501c2e169e5d (patch)
tree5e20dd11d99d1c6db253a17226e0b336f449c5af
parent0cfe9de234f4e3eb5b5d83a924e9284bdc81b822 (diff)
[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>
-rw-r--r--drivers/media/video/gspca/gspca.c45
1 files changed, 22 insertions, 23 deletions
diff --git a/drivers/media/video/gspca/gspca.c b/drivers/media/video/gspca/gspca.c
index 31721eadc597..b4fd548ada76 100644
--- a/drivers/media/video/gspca/gspca.c
+++ b/drivers/media/video/gspca/gspca.c
@@ -1049,12 +1049,6 @@ static int vidioc_g_register(struct file *file, void *priv,
1049{ 1049{
1050 struct gspca_dev *gspca_dev = video_drvdata(file); 1050 struct gspca_dev *gspca_dev = video_drvdata(file);
1051 1051
1052 if (!gspca_dev->sd_desc->get_chip_ident)
1053 return -ENOTTY;
1054
1055 if (!gspca_dev->sd_desc->get_register)
1056 return -ENOTTY;
1057
1058 gspca_dev->usb_err = 0; 1052 gspca_dev->usb_err = 0;
1059 return gspca_dev->sd_desc->get_register(gspca_dev, reg); 1053 return gspca_dev->sd_desc->get_register(gspca_dev, reg);
1060} 1054}
@@ -1064,12 +1058,6 @@ static int vidioc_s_register(struct file *file, void *priv,
1064{ 1058{
1065 struct gspca_dev *gspca_dev = video_drvdata(file); 1059 struct gspca_dev *gspca_dev = video_drvdata(file);
1066 1060
1067 if (!gspca_dev->sd_desc->get_chip_ident)
1068 return -ENOTTY;
1069
1070 if (!gspca_dev->sd_desc->set_register)
1071 return -ENOTTY;
1072
1073 gspca_dev->usb_err = 0; 1061 gspca_dev->usb_err = 0;
1074 return gspca_dev->sd_desc->set_register(gspca_dev, reg); 1062 return gspca_dev->sd_desc->set_register(gspca_dev, reg);
1075} 1063}
@@ -1080,9 +1068,6 @@ static int vidioc_g_chip_ident(struct file *file, void *priv,
1080{ 1068{
1081 struct gspca_dev *gspca_dev = video_drvdata(file); 1069 struct gspca_dev *gspca_dev = video_drvdata(file);
1082 1070
1083 if (!gspca_dev->sd_desc->get_chip_ident)
1084 return -ENOTTY;
1085
1086 gspca_dev->usb_err = 0; 1071 gspca_dev->usb_err = 0;
1087 return gspca_dev->sd_desc->get_chip_ident(gspca_dev, chip); 1072 return gspca_dev->sd_desc->get_chip_ident(gspca_dev, chip);
1088} 1073}
@@ -1136,8 +1121,10 @@ static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
1136 int mode; 1121 int mode;
1137 1122
1138 mode = gspca_dev->curr_mode; 1123 mode = gspca_dev->curr_mode;
1139 memcpy(&fmt->fmt.pix, &gspca_dev->cam.cam_mode[mode], 1124 fmt->fmt.pix = gspca_dev->cam.cam_mode[mode];
1140 sizeof fmt->fmt.pix); 1125 /* some drivers use priv internally, zero it before giving it to
1126 userspace */
1127 fmt->fmt.pix.priv = 0;
1141 return 0; 1128 return 0;
1142} 1129}
1143 1130
@@ -1168,8 +1155,10 @@ static int try_fmt_vid_cap(struct gspca_dev *gspca_dev,
1168/* else 1155/* else
1169 ; * no chance, return this mode */ 1156 ; * no chance, return this mode */
1170 } 1157 }
1171 memcpy(&fmt->fmt.pix, &gspca_dev->cam.cam_mode[mode], 1158 fmt->fmt.pix = gspca_dev->cam.cam_mode[mode];
1172 sizeof fmt->fmt.pix); 1159 /* some drivers use priv internally, zero it before giving it to
1160 userspace */
1161 fmt->fmt.pix.priv = 0;
1173 return mode; /* used when s_fmt */ 1162 return mode; /* used when s_fmt */
1174} 1163}
1175 1164
@@ -1694,8 +1683,6 @@ static int vidioc_g_jpegcomp(struct file *file, void *priv,
1694{ 1683{
1695 struct gspca_dev *gspca_dev = video_drvdata(file); 1684 struct gspca_dev *gspca_dev = video_drvdata(file);
1696 1685
1697 if (!gspca_dev->sd_desc->get_jcomp)
1698 return -ENOTTY;
1699 gspca_dev->usb_err = 0; 1686 gspca_dev->usb_err = 0;
1700 return gspca_dev->sd_desc->get_jcomp(gspca_dev, jpegcomp); 1687 return gspca_dev->sd_desc->get_jcomp(gspca_dev, jpegcomp);
1701} 1688}
@@ -1705,8 +1692,6 @@ static int vidioc_s_jpegcomp(struct file *file, void *priv,
1705{ 1692{
1706 struct gspca_dev *gspca_dev = video_drvdata(file); 1693 struct gspca_dev *gspca_dev = video_drvdata(file);
1707 1694
1708 if (!gspca_dev->sd_desc->set_jcomp)
1709 return -ENOTTY;
1710 gspca_dev->usb_err = 0; 1695 gspca_dev->usb_err = 0;
1711 return gspca_dev->sd_desc->set_jcomp(gspca_dev, jpegcomp); 1696 return gspca_dev->sd_desc->set_jcomp(gspca_dev, jpegcomp);
1712} 1697}
@@ -2290,6 +2275,20 @@ int gspca_dev_probe2(struct usb_interface *intf,
2290 v4l2_disable_ioctl_locking(&gspca_dev->vdev, VIDIOC_DQBUF); 2275 v4l2_disable_ioctl_locking(&gspca_dev->vdev, VIDIOC_DQBUF);
2291 v4l2_disable_ioctl_locking(&gspca_dev->vdev, VIDIOC_QBUF); 2276 v4l2_disable_ioctl_locking(&gspca_dev->vdev, VIDIOC_QBUF);
2292 v4l2_disable_ioctl_locking(&gspca_dev->vdev, VIDIOC_QUERYBUF); 2277 v4l2_disable_ioctl_locking(&gspca_dev->vdev, VIDIOC_QUERYBUF);
2278 if (!gspca_dev->sd_desc->get_chip_ident)
2279 v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_DBG_G_CHIP_IDENT);
2280#ifdef CONFIG_VIDEO_ADV_DEBUG
2281 if (!gspca_dev->sd_desc->get_chip_ident ||
2282 !gspca_dev->sd_desc->get_register)
2283 v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_DBG_G_REGISTER);
2284 if (!gspca_dev->sd_desc->get_chip_ident ||
2285 !gspca_dev->sd_desc->set_register)
2286 v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_DBG_S_REGISTER);
2287#endif
2288 if (!gspca_dev->sd_desc->get_jcomp)
2289 v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_G_JPEGCOMP);
2290 if (!gspca_dev->sd_desc->set_jcomp)
2291 v4l2_disable_ioctl(&gspca_dev->vdev, VIDIOC_S_JPEGCOMP);
2293 2292
2294 /* init video stuff */ 2293 /* init video stuff */
2295 ret = video_register_device(&gspca_dev->vdev, 2294 ret = video_register_device(&gspca_dev->vdev,