Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

media: gspca: fix g/s_parm handling

Fix v4l2-compliance error: s_parm never set V4L2_CAP_TIMEPERFRAME.
Also various g/s_parm-related cleanups.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>

authored by

Hans Verkuil and committed by
Mauro Carvalho Chehab
df95e82f 0d5615d3

+16 -15
+16 -13
drivers/media/usb/gspca/gspca.c
··· 1256 1256 { 1257 1257 struct gspca_dev *gspca_dev = video_drvdata(filp); 1258 1258 1259 - parm->parm.capture.readbuffers = 2; 1259 + parm->parm.capture.readbuffers = gspca_dev->queue.min_buffers_needed; 1260 1260 1261 - if (gspca_dev->sd_desc->get_streamparm) { 1262 - gspca_dev->usb_err = 0; 1263 - gspca_dev->sd_desc->get_streamparm(gspca_dev, parm); 1264 - return gspca_dev->usb_err; 1265 - } 1266 - return 0; 1261 + if (!gspca_dev->sd_desc->get_streamparm) 1262 + return 0; 1263 + 1264 + parm->parm.capture.capability = V4L2_CAP_TIMEPERFRAME; 1265 + gspca_dev->usb_err = 0; 1266 + gspca_dev->sd_desc->get_streamparm(gspca_dev, parm); 1267 + return gspca_dev->usb_err; 1267 1268 } 1268 1269 1269 1270 static int vidioc_s_parm(struct file *filp, void *priv, ··· 1272 1271 { 1273 1272 struct gspca_dev *gspca_dev = video_drvdata(filp); 1274 1273 1275 - parm->parm.capture.readbuffers = 2; 1274 + parm->parm.capture.readbuffers = gspca_dev->queue.min_buffers_needed; 1276 1275 1277 - if (gspca_dev->sd_desc->set_streamparm) { 1278 - gspca_dev->usb_err = 0; 1279 - gspca_dev->sd_desc->set_streamparm(gspca_dev, parm); 1280 - return gspca_dev->usb_err; 1276 + if (!gspca_dev->sd_desc->set_streamparm) { 1277 + parm->parm.capture.capability = 0; 1278 + return 0; 1281 1279 } 1282 1280 1283 - return 0; 1281 + parm->parm.capture.capability = V4L2_CAP_TIMEPERFRAME; 1282 + gspca_dev->usb_err = 0; 1283 + gspca_dev->sd_desc->set_streamparm(gspca_dev, parm); 1284 + return gspca_dev->usb_err; 1284 1285 } 1285 1286 1286 1287 static int gspca_queue_setup(struct vb2_queue *vq,
-1
drivers/media/usb/gspca/ov534.c
··· 1476 1476 struct v4l2_fract *tpf = &cp->timeperframe; 1477 1477 struct sd *sd = (struct sd *) gspca_dev; 1478 1478 1479 - cp->capability |= V4L2_CAP_TIMEPERFRAME; 1480 1479 tpf->numerator = 1; 1481 1480 tpf->denominator = sd->frame_rate; 1482 1481 }
-1
drivers/media/usb/gspca/topro.c
··· 4780 4780 struct v4l2_fract *tpf = &cp->timeperframe; 4781 4781 int fr, i; 4782 4782 4783 - cp->capability |= V4L2_CAP_TIMEPERFRAME; 4784 4783 tpf->numerator = 1; 4785 4784 i = get_fr_idx(gspca_dev); 4786 4785 if (i & 0x80) {