From: Hyun Kwon <hyun.kwon@xilinx.com>
To: Satish Kumar Nagireddy <satish.nagireddy.nagireddy@xilinx.com>
Cc: "linux-media@vger.kernel.org" <linux-media@vger.kernel.org>,
"laurent.pinchart@ideasonboard.com"
<laurent.pinchart@ideasonboard.com>,
"michal.simek@xilinx.com" <michal.simek@xilinx.com>,
Hyun Kwon <hyunk@xilinx.com>,
Satish Kumar Nagireddy <SATISHNA@xilinx.com>
Subject: Re: [PATCH v4 09/10] v4l: xilinx: dma: Add multi-planar support
Date: Tue, 1 May 2018 14:24:51 -0700 [thread overview]
Message-ID: <20180501212450.GE9872@smtp.xilinx.com> (raw)
In-Reply-To: <f34ba3d4f7f2863be496f10562ceac45c68e0ddb.1524955156.git.satish.nagireddy.nagireddy@xilinx.com>
On Mon, 2018-04-30 at 18:35:12 -0700, Satish Kumar Nagireddy wrote:
> The current v4l driver supports single plane formats. This patch
> adds support to handle multi-planar formats. Driver can handle
> both single and multi-planar formats.
>
> Signed-off-by: Satish Kumar Nagireddy <satish.nagireddy.nagireddy@xilinx.com>
> ---
> drivers/media/platform/xilinx/xilinx-dma.c | 159 ++++++++++++++++++----------
> drivers/media/platform/xilinx/xilinx-dma.h | 4 +-
> drivers/media/platform/xilinx/xilinx-vipp.c | 16 +--
> 3 files changed, 111 insertions(+), 68 deletions(-)
>
> diff --git a/drivers/media/platform/xilinx/xilinx-dma.c b/drivers/media/platform/xilinx/xilinx-dma.c
> index 658586e..a714057 100644
> --- a/drivers/media/platform/xilinx/xilinx-dma.c
> +++ b/drivers/media/platform/xilinx/xilinx-dma.c
> @@ -74,8 +74,8 @@ static int xvip_dma_verify_format(struct xvip_dma *dma)
> return ret == -ENOIOCTLCMD ? -EINVAL : ret;
>
> if (dma->fmtinfo->code != fmt.format.code ||
> - dma->format.height != fmt.format.height ||
> - dma->format.width != fmt.format.width)
> + dma->format.fmt.pix_mp.width != fmt.format.width ||
> + dma->format.fmt.pix_mp.height != fmt.format.height)
> return -EINVAL;
>
> return 0;
> @@ -310,7 +310,8 @@ static void xvip_dma_complete(void *param)
> buf->buf.field = V4L2_FIELD_NONE;
> buf->buf.sequence = dma->sequence++;
> buf->buf.vb2_buf.timestamp = ktime_get_ns();
> - vb2_set_plane_payload(&buf->buf.vb2_buf, 0, dma->format.sizeimage);
> + vb2_set_plane_payload(&buf->buf.vb2_buf, 0,
> + dma->format.fmt.pix_mp.plane_fmt[0].sizeimage);
> vb2_buffer_done(&buf->buf.vb2_buf, VB2_BUF_STATE_DONE);
> }
>
> @@ -320,13 +321,15 @@ xvip_dma_queue_setup(struct vb2_queue *vq,
> unsigned int sizes[], struct device *alloc_devs[])
> {
> struct xvip_dma *dma = vb2_get_drv_priv(vq);
> + s32 sizeimage;
u32?
>
> /* Make sure the image size is large enough. */
> + sizeimage = dma->format.fmt.pix_mp.plane_fmt[0].sizeimage;
I'm a little confused again. :-) This doesn't seem handling nplanes > 1,
while there are such formats in the format table. is my understanding
correct?
> if (*nplanes)
> - return sizes[0] < dma->format.sizeimage ? -EINVAL : 0;
> + return sizes[0] < sizeimage ? -EINVAL : 0;
>
> *nplanes = 1;
> - sizes[0] = dma->format.sizeimage;
> + sizes[0] = sizeimage;
>
> return 0;
> }
> @@ -350,14 +353,15 @@ static void xvip_dma_buffer_queue(struct vb2_buffer *vb)
> struct dma_async_tx_descriptor *desc;
> dma_addr_t addr = vb2_dma_contig_plane_dma_addr(vb, 0);
> u32 flags;
> + struct v4l2_pix_format_mplane *pix_mp = &dma->format.fmt.pix_mp;
>
> - if (dma->queue.type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
> + if (dma->queue.type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {
> flags = DMA_PREP_INTERRUPT | DMA_CTRL_ACK;
> dma->xt.dir = DMA_DEV_TO_MEM;
> dma->xt.src_sgl = false;
> dma->xt.dst_sgl = true;
> dma->xt.dst_start = addr;
> - } else {
> + } else if (dma->queue.type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) {
I'd do 'else' even if any other value is not possible at this point.
> flags = DMA_PREP_INTERRUPT | DMA_CTRL_ACK;
> dma->xt.dir = DMA_MEM_TO_DEV;
> dma->xt.src_sgl = true;
> @@ -365,10 +369,11 @@ static void xvip_dma_buffer_queue(struct vb2_buffer *vb)
> dma->xt.src_start = addr;
> }
>
> - dma->xt.frame_size = 1;
> - dma->sgl[0].size = dma->format.width * dma->fmtinfo->bpp[0];
> - dma->sgl[0].icg = dma->format.bytesperline - dma->sgl[0].size;
> - dma->xt.numf = dma->format.height;
> + dma->xt.frame_size = dma->fmtinfo->num_planes;
> + dma->sgl[0].size = pix_mp->width * dma->fmtinfo->bpp[0];
> + dma->sgl[0].icg = pix_mp->plane_fmt[0].bytesperline - dma->sgl[0].size;
> + dma->xt.numf = pix_mp->height;
> + dma->sgl[0].dst_icg = 0;
>
> desc = dmaengine_prep_interleaved_dma(dma->dma, &dma->xt, flags);
> if (!desc) {
> @@ -497,10 +502,15 @@ xvip_dma_querycap(struct file *file, void *fh, struct v4l2_capability *cap)
> cap->capabilities = V4L2_CAP_DEVICE_CAPS | V4L2_CAP_STREAMING
> | dma->xdev->v4l2_caps;
>
> - if (dma->queue.type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
> - cap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
> - else
> - cap->device_caps = V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING;
> + cap->device_caps = V4L2_CAP_STREAMING;
> + switch (dma->queue.type) {
> + case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
> + cap->device_caps |= V4L2_CAP_VIDEO_CAPTURE_MPLANE;
> + break;
> + case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
> + cap->device_caps |= V4L2_CAP_VIDEO_OUTPUT_MPLANE;
> + break;
> + }
I'd keep if - else rather than switch - case.
>
> strlcpy(cap->driver, "xilinx-vipp", sizeof(cap->driver));
> strlcpy(cap->card, dma->video.name, sizeof(cap->card));
> @@ -524,7 +534,7 @@ xvip_dma_enum_format(struct file *file, void *fh, struct v4l2_fmtdesc *f)
> if (f->index > 0)
> return -EINVAL;
>
> - f->pixelformat = dma->format.pixelformat;
> + f->pixelformat = dma->format.fmt.pix_mp.pixelformat;
> strlcpy(f->description, dma->fmtinfo->description,
> sizeof(f->description));
>
> @@ -537,13 +547,14 @@ xvip_dma_get_format(struct file *file, void *fh, struct v4l2_format *format)
> struct v4l2_fh *vfh = file->private_data;
> struct xvip_dma *dma = to_xvip_dma(vfh->vdev);
>
> - format->fmt.pix = dma->format;
> + format->fmt.pix_mp = dma->format.fmt.pix_mp;
>
> return 0;
> }
>
> static void
> -__xvip_dma_try_format(struct xvip_dma *dma, struct v4l2_pix_format *pix,
> +__xvip_dma_try_format(struct xvip_dma *dma,
> + struct v4l2_format *format,
> const struct xvip_video_format **fmtinfo)
> {
> const struct xvip_video_format *info;
> @@ -551,19 +562,21 @@ __xvip_dma_try_format(struct xvip_dma *dma, struct v4l2_pix_format *pix,
> unsigned int max_width;
> unsigned int min_bpl;
> unsigned int max_bpl;
> - unsigned int width;
> + unsigned int width, height;
> unsigned int align;
> unsigned int bpl;
> + unsigned int i;
> + struct v4l2_pix_format_mplane *pix_mp = &format->fmt.pix_mp;
> + struct v4l2_plane_pix_format *plane_fmt = pix_mp->plane_fmt;
>
> /* Retrieve format information and select the default format if the
> * requested format isn't supported.
> */
> - info = xvip_get_format_by_fourcc(pix->pixelformat);
> + info = xvip_get_format_by_fourcc(pix_mp->pixelformat);
> if (IS_ERR(info))
> info = xvip_get_format_by_fourcc(XVIP_DMA_DEF_FORMAT);
>
> - pix->pixelformat = info->fourcc;
> - pix->field = V4L2_FIELD_NONE;
> + pix_mp->field = V4L2_FIELD_NONE;
>
> /* The transfer alignment requirements are expressed in bytes. Compute
> * the minimum and maximum values, clamp the requested width and convert
> @@ -572,22 +585,38 @@ __xvip_dma_try_format(struct xvip_dma *dma, struct v4l2_pix_format *pix,
> align = lcm(dma->align, info->bpp[0]);
> min_width = roundup(XVIP_DMA_MIN_WIDTH, align);
> max_width = rounddown(XVIP_DMA_MAX_WIDTH, align);
> - width = rounddown(pix->width * info->bpp[0], align);
> -
> - pix->width = clamp(width, min_width, max_width) / info->bpp[0];
> - pix->height = clamp(pix->height, XVIP_DMA_MIN_HEIGHT,
> - XVIP_DMA_MAX_HEIGHT);
> + pix_mp->width = clamp(pix_mp->width, min_width, max_width);
> + pix_mp->height = clamp(pix_mp->height, XVIP_DMA_MIN_HEIGHT,
> + XVIP_DMA_MAX_HEIGHT);
>
> - /* Clamp the requested bytes per line value. If the maximum bytes per
> - * line value is zero, the module doesn't support user configurable line
> - * sizes. Override the requested value with the minimum in that case.
> + /*
> + * Clamp the requested bytes per line value. If the maximum
> + * bytes per line value is zero, the module doesn't support
> + * user configurable line sizes. Override the requested value
> + * with the minimum in that case.
> */
> - min_bpl = pix->width * info->bpp[0];
> - max_bpl = rounddown(XVIP_DMA_MAX_WIDTH, dma->align);
> - bpl = rounddown(pix->bytesperline, dma->align);
> -
> - pix->bytesperline = clamp(bpl, min_bpl, max_bpl);
> - pix->sizeimage = pix->bytesperline * pix->height;
> + max_bpl = rounddown(XVIP_DMA_MAX_WIDTH, align);
> + min_bpl = pix_mp->width * info->bpp[0];
> + min_bpl = roundup(min_bpl, align);
> + bpl = roundup(plane_fmt[0].bytesperline, align);
> + plane_fmt[0].bytesperline = clamp(bpl, min_bpl, max_bpl);
> +
> + if (info->num_planes == 1) {
> + /* Single plane formats */
> + plane_fmt[0].sizeimage = plane_fmt[0].bytesperline *
> + pix_mp->height;
> + } else {
> + /* Supports Multi plane formats in a contiguous buffer,
> + * so we need only one buffer
> + */
Please use multiline comment style.
> + plane_fmt[0].sizeimage = 0;
You can declare 'i' here.
> + for (i = 0; i < info->num_planes; i++) {
> + width = plane_fmt[0].bytesperline /
> + (i ? info->hsub : 1);
> + height = pix_mp->height / (i ? info->vsub : 1);
> + plane_fmt[0].sizeimage += width * info->bpp[i] * height;
Just to clarify, only contiguous formats are supported, which is aligned with
the comment above on nplane > 1, correct?
> + }
> + }
>
> if (fmtinfo)
> *fmtinfo = info;
> @@ -599,7 +628,7 @@ xvip_dma_try_format(struct file *file, void *fh, struct v4l2_format *format)
> struct v4l2_fh *vfh = file->private_data;
> struct xvip_dma *dma = to_xvip_dma(vfh->vdev);
>
> - __xvip_dma_try_format(dma, &format->fmt.pix, NULL);
> + __xvip_dma_try_format(dma, format, NULL);
> return 0;
> }
>
> @@ -610,12 +639,13 @@ xvip_dma_set_format(struct file *file, void *fh, struct v4l2_format *format)
> struct xvip_dma *dma = to_xvip_dma(vfh->vdev);
> const struct xvip_video_format *info;
>
> - __xvip_dma_try_format(dma, &format->fmt.pix, &info);
> + __xvip_dma_try_format(dma, format, &info);
>
> if (vb2_is_busy(&dma->queue))
> return -EBUSY;
>
> - dma->format = format->fmt.pix;
> + dma->format.fmt.pix_mp = format->fmt.pix_mp;
> +
> dma->fmtinfo = info;
>
> return 0;
> @@ -623,13 +653,14 @@ xvip_dma_set_format(struct file *file, void *fh, struct v4l2_format *format)
>
> static const struct v4l2_ioctl_ops xvip_dma_ioctl_ops = {
> .vidioc_querycap = xvip_dma_querycap,
> - .vidioc_enum_fmt_vid_cap = xvip_dma_enum_format,
> - .vidioc_g_fmt_vid_cap = xvip_dma_get_format,
> - .vidioc_g_fmt_vid_out = xvip_dma_get_format,
> - .vidioc_s_fmt_vid_cap = xvip_dma_set_format,
> - .vidioc_s_fmt_vid_out = xvip_dma_set_format,
> - .vidioc_try_fmt_vid_cap = xvip_dma_try_format,
> - .vidioc_try_fmt_vid_out = xvip_dma_try_format,
> + .vidioc_enum_fmt_vid_cap_mplane = xvip_dma_enum_format,
> + .vidioc_enum_fmt_vid_out_mplane = xvip_dma_enum_format,
> + .vidioc_g_fmt_vid_cap_mplane = xvip_dma_get_format,
> + .vidioc_g_fmt_vid_out_mplane = xvip_dma_get_format,
> + .vidioc_s_fmt_vid_cap_mplane = xvip_dma_set_format,
> + .vidioc_s_fmt_vid_out_mplane = xvip_dma_set_format,
> + .vidioc_try_fmt_vid_cap_mplane = xvip_dma_try_format,
> + .vidioc_try_fmt_vid_out_mplane = xvip_dma_try_format,
> .vidioc_reqbufs = vb2_ioctl_reqbufs,
> .vidioc_querybuf = vb2_ioctl_querybuf,
> .vidioc_qbuf = vb2_ioctl_qbuf,
> @@ -662,6 +693,7 @@ int xvip_dma_init(struct xvip_composite_device *xdev, struct xvip_dma *dma,
> {
> char name[16];
> int ret;
> + struct v4l2_pix_format_mplane *pix_mp;
>
> dma->xdev = xdev;
> dma->port = port;
> @@ -671,17 +703,23 @@ int xvip_dma_init(struct xvip_composite_device *xdev, struct xvip_dma *dma,
> spin_lock_init(&dma->queued_lock);
>
> dma->fmtinfo = xvip_get_format_by_fourcc(XVIP_DMA_DEF_FORMAT);
> - dma->format.pixelformat = dma->fmtinfo->fourcc;
> - dma->format.colorspace = V4L2_COLORSPACE_SRGB;
> - dma->format.field = V4L2_FIELD_NONE;
> - dma->format.width = XVIP_DMA_DEF_WIDTH;
> - dma->format.height = XVIP_DMA_DEF_HEIGHT;
> - dma->format.bytesperline = dma->format.width * dma->fmtinfo->bpp[0];
> - dma->format.sizeimage = dma->format.bytesperline * dma->format.height;
> + dma->format.type = type;
> +
> + pix_mp = &dma->format.fmt.pix_mp;
> + pix_mp->pixelformat = dma->fmtinfo->fourcc;
> + pix_mp->colorspace = V4L2_COLORSPACE_SRGB;
> + pix_mp->field = V4L2_FIELD_NONE;
> + pix_mp->width = XVIP_DMA_DEF_WIDTH;
> + pix_mp->plane_fmt[0].bytesperline = pix_mp->width *
> + dma->fmtinfo->bpp[0];
> + pix_mp->plane_fmt[0].sizeimage = pix_mp->plane_fmt[0].bytesperline *
> + pix_mp->height;
>
> /* Initialize the media entity... */
> - dma->pad.flags = type == V4L2_BUF_TYPE_VIDEO_CAPTURE
> - ? MEDIA_PAD_FL_SINK : MEDIA_PAD_FL_SOURCE;
> + if (type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
> + dma->pad.flags = MEDIA_PAD_FL_SINK;
> + else if (type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
> + dma->pad.flags = MEDIA_PAD_FL_SOURCE;
I'd use 'else' or stick to the previous line just changing to MPLANE.
>
> ret = media_entity_pads_init(&dma->video.entity, 1, &dma->pad);
> if (ret < 0)
> @@ -693,11 +731,16 @@ int xvip_dma_init(struct xvip_composite_device *xdev, struct xvip_dma *dma,
> dma->video.queue = &dma->queue;
> snprintf(dma->video.name, sizeof(dma->video.name), "%s %s %u",
> xdev->dev->of_node->name,
> - type == V4L2_BUF_TYPE_VIDEO_CAPTURE ? "output" : "input",
> + type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE
> + ? "output" : "input",
> port);
> +
> dma->video.vfl_type = VFL_TYPE_GRABBER;
> - dma->video.vfl_dir = type == V4L2_BUF_TYPE_VIDEO_CAPTURE
> - ? VFL_DIR_RX : VFL_DIR_TX;
> + if (type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
> + dma->video.vfl_dir = VFL_DIR_RX;
> + else if (type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
> + dma->video.vfl_dir = VFL_DIR_TX;
Ditto.
Thanks,
-hyun
> +
> dma->video.release = video_device_release_empty;
> dma->video.ioctl_ops = &xvip_dma_ioctl_ops;
> dma->video.lock = &dma->lock;
> diff --git a/drivers/media/platform/xilinx/xilinx-dma.h b/drivers/media/platform/xilinx/xilinx-dma.h
> index e95d136..96933ed 100644
> --- a/drivers/media/platform/xilinx/xilinx-dma.h
> +++ b/drivers/media/platform/xilinx/xilinx-dma.h
> @@ -62,7 +62,7 @@ static inline struct xvip_pipeline *to_xvip_pipeline(struct media_entity *e)
> * @pipe: pipeline belonging to the DMA channel
> * @port: composite device DT node port number for the DMA channel
> * @lock: protects the @format, @fmtinfo and @queue fields
> - * @format: active V4L2 pixel format
> + * @format: V4L2 format
> * @fmtinfo: format information corresponding to the active @format
> * @queue: vb2 buffers queue
> * @sequence: V4L2 buffers sequence number
> @@ -83,7 +83,7 @@ struct xvip_dma {
> unsigned int port;
>
> struct mutex lock;
> - struct v4l2_pix_format format;
> + struct v4l2_format format;
> const struct xvip_video_format *fmtinfo;
>
> struct vb2_queue queue;
> diff --git a/drivers/media/platform/xilinx/xilinx-vipp.c b/drivers/media/platform/xilinx/xilinx-vipp.c
> index 6bb28cd..509b50f 100644
> --- a/drivers/media/platform/xilinx/xilinx-vipp.c
> +++ b/drivers/media/platform/xilinx/xilinx-vipp.c
> @@ -433,12 +433,15 @@ static int xvip_graph_dma_init_one(struct xvip_composite_device *xdev,
> if (ret < 0)
> return ret;
>
> - if (strcmp(direction, "input") == 0)
> - type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
> - else if (strcmp(direction, "output") == 0)
> - type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
> - else
> + if (strcmp(direction, "input") == 0) {
> + type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
> + xdev->v4l2_caps |= V4L2_CAP_VIDEO_CAPTURE_MPLANE;
> + } else if (strcmp(direction, "output") == 0) {
> + type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
> + xdev->v4l2_caps |= V4L2_CAP_VIDEO_OUTPUT_MPLANE;
> + } else {
> return -EINVAL;
> + }
>
> of_property_read_u32(node, "reg", &index);
>
> @@ -454,9 +457,6 @@ static int xvip_graph_dma_init_one(struct xvip_composite_device *xdev,
>
> list_add_tail(&dma->list, &xdev->dmas);
>
> - xdev->v4l2_caps |= type == V4L2_BUF_TYPE_VIDEO_CAPTURE
> - ? V4L2_CAP_VIDEO_CAPTURE : V4L2_CAP_VIDEO_OUTPUT;
> -
> return 0;
> }
>
> --
> 2.1.1
>
next prev parent reply other threads:[~2018-05-01 21:25 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-01 1:35 [PATCH v4 00/10] Add support for multi-planar formats and 10 bit formats Satish Kumar Nagireddy
2018-05-01 1:35 ` [PATCH v4 01/10] v4l: xilinx: dma: Remove colorspace check in xvip_dma_verify_format Satish Kumar Nagireddy
2018-05-01 1:35 ` [PATCH v4 02/10] xilinx: v4l: dma: Use the dmaengine_terminate_all() wrapper Satish Kumar Nagireddy
2018-05-01 21:21 ` Hyun Kwon
2018-05-01 1:35 ` [PATCH v4 03/10] xilinx: v4l: dma: Update driver to allow for probe defer Satish Kumar Nagireddy
2018-05-01 1:35 ` [PATCH v4 04/10] Documentation: uapi: media: v4l: New pixel format Satish Kumar Nagireddy
2018-05-01 1:35 ` [PATCH v4 05/10] uapi: media: New fourcc codes needed by Xilinx Video IP Satish Kumar Nagireddy
2018-05-01 21:21 ` Hyun Kwon
2018-05-01 1:35 ` [PATCH v4 06/10] media-bus: uapi: Add YCrCb 420 media bus format Satish Kumar Nagireddy
2018-05-01 1:35 ` [PATCH v4 07/10] media: Add new dt-bindings/vf_codes for supported formats Satish Kumar Nagireddy
2018-05-01 21:22 ` Hyun Kwon
2018-05-01 1:35 ` [PATCH v4 08/10] v4l: xilinx: dma: Update video format descriptor Satish Kumar Nagireddy
2018-05-01 21:23 ` Hyun Kwon
2018-05-01 1:35 ` [PATCH v4 09/10] v4l: xilinx: dma: Add multi-planar support Satish Kumar Nagireddy
2018-05-01 6:44 ` Ian Arkver
2018-05-02 0:07 ` Satish Kumar Nagireddy
2018-05-01 21:24 ` Hyun Kwon [this message]
2018-05-02 0:18 ` Satish Kumar Nagireddy
2018-05-01 1:35 ` [PATCH v4 10/10] v4l: xilinx: dma: Add support for 10 bit formats Satish Kumar Nagireddy
2018-05-01 21:25 ` Hyun Kwon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180501212450.GE9872@smtp.xilinx.com \
--to=hyun.kwon@xilinx.com \
--cc=SATISHNA@xilinx.com \
--cc=hyunk@xilinx.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=michal.simek@xilinx.com \
--cc=satish.nagireddy.nagireddy@xilinx.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox