media: Revert "media: camss: Make use of V4L2_CAP_IO_MC"
This reverts commit c90f1178dcac30dee5ddd29ec0513e7589aa866e. 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: Andrey Konovalov <andrey.konovalov@linaro.org> Reviewed-by: Robert Foss <robert.foss@linaro.org> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
6b94c09f82
commit
a3d412d4b9
@ -535,16 +535,17 @@ static int video_querycap(struct file *file, void *fh,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
static int video_enum_fmt(struct file *file, void *fh, struct v4l2_fmtdesc *f)
|
||||||
* 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)
|
|
||||||
{
|
{
|
||||||
|
struct camss_video *video = video_drvdata(file);
|
||||||
int i, j, k;
|
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 */
|
/* find index "i" of "k"th unique pixelformat in formats array */
|
||||||
k = -1;
|
k = -1;
|
||||||
for (i = 0; i < video->nformats; i++) {
|
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)
|
if (j == i)
|
||||||
k++;
|
k++;
|
||||||
|
|
||||||
if (k == ndx)
|
if (k == f->index)
|
||||||
return i;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -EINVAL;
|
if (k < f->index)
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 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 (i < 0)
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
f->pixelformat = video->formats[i].pixelformat;
|
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->fops = &msm_vid_fops;
|
||||||
vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_STREAMING
|
vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_STREAMING |
|
||||||
| V4L2_CAP_READWRITE | V4L2_CAP_IO_MC;
|
V4L2_CAP_READWRITE;
|
||||||
vdev->ioctl_ops = &msm_vid_ioctl_ops;
|
vdev->ioctl_ops = &msm_vid_ioctl_ops;
|
||||||
vdev->release = msm_video_release;
|
vdev->release = msm_video_release;
|
||||||
vdev->v4l2_dev = v4l2_dev;
|
vdev->v4l2_dev = v4l2_dev;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user