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

Commit 06daa1af authored by Guennadi Liakhovetski's avatar Guennadi Liakhovetski Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (10090): soc-camera: let drivers decide upon supported field values



sh_mobile_ceu_camera.c is already prepared to support interlaced format, this
patch moves the choice of a field type down to host and / or camera drivers.

Signed-off-by: default avatarGuennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent ccab8a29
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -1215,6 +1215,7 @@ static int pxa_camera_try_fmt(struct soc_camera_device *icd,
	const struct soc_camera_format_xlate *xlate;
	struct v4l2_pix_format *pix = &f->fmt.pix;
	__u32 pixfmt = pix->pixelformat;
	enum v4l2_field field;
	int ret;

	xlate = soc_camera_xlate_by_fourcc(icd, pixfmt);
@@ -1244,6 +1245,15 @@ static int pxa_camera_try_fmt(struct soc_camera_device *icd,
	ret = icd->ops->try_fmt(icd, f);
	pix->pixelformat = xlate->host_fmt->fourcc;

	field = pix->field;

	if (field == V4L2_FIELD_ANY) {
		pix->field = V4L2_FIELD_NONE;
	} else if (field != V4L2_FIELD_NONE) {
		dev_err(&icd->dev, "Field type %d unsupported.\n", field);
		return -EINVAL;
	}

	return ret;
}

+1 −18
Original line number Diff line number Diff line
@@ -98,28 +98,11 @@ static int soc_camera_try_fmt_vid_cap(struct file *file, void *priv,
	struct soc_camera_file *icf = file->private_data;
	struct soc_camera_device *icd = icf->icd;
	struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
	enum v4l2_field field;
	int ret;

	WARN_ON(priv != file->private_data);

	/*
	 * TODO: this might also have to migrate to host-drivers, if anyone
	 * wishes to support other fields
	 */
	field = f->fmt.pix.field;

	if (field == V4L2_FIELD_ANY) {
		f->fmt.pix.field = V4L2_FIELD_NONE;
	} else if (field != V4L2_FIELD_NONE) {
		dev_err(&icd->dev, "Field type invalid.\n");
		return -EINVAL;
	}

	/* limit format to hardware capabilities */
	ret = ici->ops->try_fmt(icd, f);

	return ret;
	return ici->ops->try_fmt(icd, f);
}

static int soc_camera_enum_input(struct file *file, void *priv,