Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit df95e82f authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab
Browse files

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: default avatarHans Verkuil <hans.verkuil@cisco.com>
Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent 0d5615d3
Loading
Loading
Loading
Loading
+16 −13
Original line number Original line Diff line number Diff line
@@ -1256,32 +1256,35 @@ static int vidioc_g_parm(struct file *filp, void *priv,
{
{
	struct gspca_dev *gspca_dev = video_drvdata(filp);
	struct gspca_dev *gspca_dev = video_drvdata(filp);


	parm->parm.capture.readbuffers = 2;
	parm->parm.capture.readbuffers = gspca_dev->queue.min_buffers_needed;


	if (gspca_dev->sd_desc->get_streamparm) {
	if (!gspca_dev->sd_desc->get_streamparm)
		return 0;

	parm->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
	gspca_dev->usb_err = 0;
	gspca_dev->usb_err = 0;
	gspca_dev->sd_desc->get_streamparm(gspca_dev, parm);
	gspca_dev->sd_desc->get_streamparm(gspca_dev, parm);
	return gspca_dev->usb_err;
	return gspca_dev->usb_err;
}
}
	return 0;
}


static int vidioc_s_parm(struct file *filp, void *priv,
static int vidioc_s_parm(struct file *filp, void *priv,
			struct v4l2_streamparm *parm)
			struct v4l2_streamparm *parm)
{
{
	struct gspca_dev *gspca_dev = video_drvdata(filp);
	struct gspca_dev *gspca_dev = video_drvdata(filp);


	parm->parm.capture.readbuffers = 2;
	parm->parm.capture.readbuffers = gspca_dev->queue.min_buffers_needed;


	if (gspca_dev->sd_desc->set_streamparm) {
	if (!gspca_dev->sd_desc->set_streamparm) {
		parm->parm.capture.capability = 0;
		return 0;
	}

	parm->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
	gspca_dev->usb_err = 0;
	gspca_dev->usb_err = 0;
	gspca_dev->sd_desc->set_streamparm(gspca_dev, parm);
	gspca_dev->sd_desc->set_streamparm(gspca_dev, parm);
	return gspca_dev->usb_err;
	return gspca_dev->usb_err;
}
}


	return 0;
}

static int gspca_queue_setup(struct vb2_queue *vq,
static int gspca_queue_setup(struct vb2_queue *vq,
			     unsigned int *nbuffers, unsigned int *nplanes,
			     unsigned int *nbuffers, unsigned int *nplanes,
			     unsigned int sizes[], struct device *alloc_devs[])
			     unsigned int sizes[], struct device *alloc_devs[])
+0 −1
Original line number Original line Diff line number Diff line
@@ -1476,7 +1476,6 @@ static void sd_get_streamparm(struct gspca_dev *gspca_dev,
	struct v4l2_fract *tpf = &cp->timeperframe;
	struct v4l2_fract *tpf = &cp->timeperframe;
	struct sd *sd = (struct sd *) gspca_dev;
	struct sd *sd = (struct sd *) gspca_dev;


	cp->capability |= V4L2_CAP_TIMEPERFRAME;
	tpf->numerator = 1;
	tpf->numerator = 1;
	tpf->denominator = sd->frame_rate;
	tpf->denominator = sd->frame_rate;
}
}
+0 −1
Original line number Original line Diff line number Diff line
@@ -4780,7 +4780,6 @@ static void sd_get_streamparm(struct gspca_dev *gspca_dev,
	struct v4l2_fract *tpf = &cp->timeperframe;
	struct v4l2_fract *tpf = &cp->timeperframe;
	int fr, i;
	int fr, i;


	cp->capability |= V4L2_CAP_TIMEPERFRAME;
	tpf->numerator = 1;
	tpf->numerator = 1;
	i = get_fr_idx(gspca_dev);
	i = get_fr_idx(gspca_dev);
	if (i & 0x80) {
	if (i & 0x80) {