diff options
author | Hans Verkuil <hans.verkuil@cisco.com> | 2012-05-23 16:17:12 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-07-30 17:37:04 -0400 |
commit | ac3322b0d400fdbab410ab80f26a501c2e169e5d (patch) | |
tree | 5e20dd11d99d1c6db253a17226e0b336f449c5af | |
parent | 0cfe9de234f4e3eb5b5d83a924e9284bdc81b822 (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.c | 45 |
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, |