[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20190327151743.18528-16-andrealmeid@collabora.com>
Date: Wed, 27 Mar 2019 12:17:43 -0300
From: André Almeida <andrealmeid@...labora.com>
To: linux-media@...r.kernel.org
Cc: mchehab@...nel.org, hverkuil@...all.nl, helen.koike@...labora.com,
lucmaga@...il.com, linux-kernel@...r.kernel.org,
kernel@...labora.com, lkcamp@...ts.libreplanetbr.org
Subject: [PATCH v2 15/15] media: vimc: Create multiplanar parameter
Create multiplanar kernel module parameter to define if the driver is
running in single planar or in multiplanar mode. Define the device
capabilities according to the multiplanar kernel parameter. A device can't
support both CAP_VIDEO_CAPTURE and CAP_VIDEO_CAPTURE_MPLANAR at the
same time.
Signed-off-by: André Almeida <andrealmeid@...labora.com>
---
Change in v2:
- Squash commits to create multiplanar module parameter and to define
the device capabilities
- Move the creation of the multiplanar parameter to the end of
history, so it's only added when all required changes are applied
drivers/media/platform/vimc/vimc-capture.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/media/platform/vimc/vimc-capture.c b/drivers/media/platform/vimc/vimc-capture.c
index f5bfb36a145c..3666fcca6812 100644
--- a/drivers/media/platform/vimc/vimc-capture.c
+++ b/drivers/media/platform/vimc/vimc-capture.c
@@ -28,6 +28,10 @@
#define VIMC_CAP_DRV_NAME "vimc-capture"
+static unsigned int multiplanar;
+module_param(multiplanar, uint, 0000);
+MODULE_PARM_DESC(multiplanar, "0 (default) creates a single planar device, 1 creates a multiplanar device.");
+
/* Checks if the device supports multiplanar capture */
#define IS_MULTIPLANAR(vcap) \
(vcap->vdev.device_caps & V4L2_CAP_VIDEO_CAPTURE_MPLANE)
@@ -681,7 +685,9 @@ static int vimc_cap_comp_bind(struct device *comp, struct device *master,
/* Initialize the vb2 queue */
q = &vcap->queue;
- q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ q->type = multiplanar ?
+ V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE :
+ V4L2_BUF_TYPE_VIDEO_CAPTURE;
q->io_modes = VB2_MMAP | VB2_DMABUF | VB2_USERPTR;
q->drv_priv = vcap;
q->buf_struct_size = sizeof(struct vimc_cap_buffer);
@@ -709,9 +715,12 @@ static int vimc_cap_comp_bind(struct device *comp, struct device *master,
dev_set_drvdata(comp, &vcap->ved);
vcap->dev = comp;
+
/* Initialize the video_device struct */
vdev = &vcap->vdev;
- vdev->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
+ vdev->device_caps = (multiplanar ?
+ V4L2_CAP_VIDEO_CAPTURE_MPLANE :
+ V4L2_BUF_TYPE_VIDEO_CAPTURE) | V4L2_CAP_STREAMING;
vdev->entity.ops = &vimc_cap_mops;
vdev->release = vimc_cap_release;
vdev->fops = &vimc_cap_fops;
--
2.21.0
Powered by blists - more mailing lists