Commit a3d412d4 authored by Andrey Konovalov's avatar Andrey Konovalov Committed by Mauro Carvalho Chehab
Browse files

media: Revert "media: camss: Make use of V4L2_CAP_IO_MC"



This reverts commit c90f1178.

The assumption of "Each entry in formats[] table has unique mbus_code"
is valid for the RDI entities, but not for the PIX ones.

Reverting this patch and creating a new one which handles the PIX entities
correctly results in smaller and more straightforward patch than doing the
changes on top of the current version.

Signed-off-by: default avatarAndrey Konovalov <andrey.konovalov@linaro.org>
Reviewed-by: default avatarRobert Foss <robert.foss@linaro.org>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 6b94c09f
Loading
Loading
Loading
Loading
+13 −54
Original line number Diff line number Diff line
@@ -535,16 +535,17 @@ static int video_querycap(struct file *file, void *fh,
	return 0;
}

/*
 *  Returns the index in the video->formats[] array of the element which
 *  has the "ndx"th unique value of pixelformat field.
 *  If not found (no more unique pixelformat's) returns -EINVAL.
 */
static int video_get_unique_pixelformat_by_index(struct camss_video *video,
						 int ndx)
static int video_enum_fmt(struct file *file, void *fh, struct v4l2_fmtdesc *f)
{
	struct camss_video *video = video_drvdata(file);
	int i, j, k;

	if (f->type != video->type)
		return -EINVAL;

	if (f->index >= video->nformats)
		return -EINVAL;

	/* find index "i" of "k"th unique pixelformat in formats array */
	k = -1;
	for (i = 0; i < video->nformats; i++) {
@@ -557,53 +558,11 @@ static int video_get_unique_pixelformat_by_index(struct camss_video *video,
		if (j == i)
			k++;

		if (k == ndx)
			return i;
	}

	return -EINVAL;
}

/*
 *  Returns the index in the video->formats[] array of the element which
 *  has code equal to mcode.
 *  If not found returns -EINVAL.
 */
static int video_get_pixelformat_by_mbus_code(struct camss_video *video,
					      u32 mcode)
{
	int i;

	for (i = 0; i < video->nformats; i++) {
		if (video->formats[i].code == mcode)
			return i;
	}

	return -EINVAL;
}

static int video_enum_fmt(struct file *file, void *fh, struct v4l2_fmtdesc *f)
{
	struct camss_video *video = video_drvdata(file);
	int i;

	if (f->type != video->type)
		return -EINVAL;

	if (f->index >= video->nformats)
		return -EINVAL;

	if (f->mbus_code) {
		/* Each entry in formats[] table has unique mbus_code */
		if (f->index > 0)
			return -EINVAL;

		i = video_get_pixelformat_by_mbus_code(video, f->mbus_code);
	} else {
		i = video_get_unique_pixelformat_by_index(video, f->index);
		if (k == f->index)
			break;
	}

	if (i < 0)
	if (k < f->index)
		return -EINVAL;

	f->pixelformat = video->formats[i].pixelformat;
@@ -990,8 +949,8 @@ int msm_video_register(struct camss_video *video, struct v4l2_device *v4l2_dev,
	}

	vdev->fops = &msm_vid_fops;
	vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_STREAMING
			  | V4L2_CAP_READWRITE | V4L2_CAP_IO_MC;
	vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_STREAMING |
							V4L2_CAP_READWRITE;
	vdev->ioctl_ops = &msm_vid_ioctl_ops;
	vdev->release = msm_video_release;
	vdev->v4l2_dev = v4l2_dev;