Linux Media Controller development
 help / color / mirror / Atom feed
From: Steve Longerbeam <slongerbeam@gmail.com>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	linux-media@vger.kernel.org
Cc: Rui Miguel Silva <rmfrfs@gmail.com>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	Ezequiel Garcia <ezequiel@collabora.com>
Subject: Re: [PATCH 20/75] media: imx: capture: Rename ioctl operations with legacy prefix
Date: Wed, 6 Jan 2021 09:51:22 -0800	[thread overview]
Message-ID: <e47bf3ba-6d9a-52cf-f232-ce4b02a46e2e@gmail.com> (raw)
In-Reply-To: <20210105152852.5733-21-laurent.pinchart@ideasonboard.com>

Hi Laurent,

I guess I have fallen behind the times with v4l2, but I wasn't aware 
that the /dev/video nodes and VIDIOC_* APIs are now considered legacy!

Steve

On 1/5/21 7:27 AM, Laurent Pinchart wrote:
> The i.MX media drivers implement a legacy video node API, where the
> format of the video node is influenced by the active format of the
> connected subdev (both for enumeration and for the get, set and try
> format ioctls), and where controls exposed by the subdevs in the
> pipeline are inherited by the video node.
>
> At the same time, the drivers implement the media controller API and
> expose subdev video nodes to userspace. Those two modes of operation are
> incompatible and should not be exposed together. Furthermore, the legacy
> API gets in the way of proper enumeration of pixel formats on the video
> node, as it prevents compliance with the V4L2 specification.
>
> As a first step towards fixing this, rename all V4L2 video node ioctl
> handlers with a legacy prefix. This will allow implementing a new set of
> ioctls in parallel and gradually switching drivers. Add a task to the
> TODO file for the removal of the legacy API.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
>   drivers/staging/media/imx/TODO                |   9 +-
>   drivers/staging/media/imx/imx-media-capture.c | 210 +++++++++---------
>   2 files changed, 116 insertions(+), 103 deletions(-)
>
> diff --git a/drivers/staging/media/imx/TODO b/drivers/staging/media/imx/TODO
> index 9cfc1c1e78dc..2384f4c6b09d 100644
> --- a/drivers/staging/media/imx/TODO
> +++ b/drivers/staging/media/imx/TODO
> @@ -17,9 +17,12 @@
>   - This media driver supports inheriting V4L2 controls to the
>     video capture devices, from the subdevices in the capture device's
>     pipeline. The controls for each capture device are updated in the
> -  link_notify callback when the pipeline is modified. It should be
> -  decided whether this feature is useful enough to make it generally
> -  available by exporting to v4l2-core.
> +  link_notify callback when the pipeline is modified. This feature should be
> +  removed, userspace should use the subdev-based userspace API instead.
> +
> +- Similarly to the legacy control handling, legacy format handling where
> +  formats on the video nodes are influenced by the active format of the
> +  connected subdev should be removed.
>   
>   - i.MX7: all of the above, since it uses the imx media core
>   
> diff --git a/drivers/staging/media/imx/imx-media-capture.c b/drivers/staging/media/imx/imx-media-capture.c
> index db1f551b86ea..0775e60ad894 100644
> --- a/drivers/staging/media/imx/imx-media-capture.c
> +++ b/drivers/staging/media/imx/imx-media-capture.c
> @@ -52,8 +52,8 @@ struct capture_priv {
>   /* In bytes, per queue */
>   #define VID_MEM_LIMIT	SZ_64M
>   
> -/*
> - * Video ioctls follow
> +/* -----------------------------------------------------------------------------
> + * Common Video IOCTLs
>    */
>   
>   static int capture_querycap(struct file *file, void *fh,
> @@ -69,8 +69,52 @@ static int capture_querycap(struct file *file, void *fh,
>   	return 0;
>   }
>   
> -static int capture_enum_framesizes(struct file *file, void *fh,
> -				   struct v4l2_frmsizeenum *fsize)
> +static int capture_g_fmt_vid_cap(struct file *file, void *fh,
> +				 struct v4l2_format *f)
> +{
> +	struct capture_priv *priv = video_drvdata(file);
> +
> +	f->fmt.pix = priv->vdev.fmt;
> +
> +	return 0;
> +}
> +
> +static int capture_g_selection(struct file *file, void *fh,
> +			       struct v4l2_selection *s)
> +{
> +	struct capture_priv *priv = video_drvdata(file);
> +
> +	switch (s->target) {
> +	case V4L2_SEL_TGT_COMPOSE:
> +	case V4L2_SEL_TGT_COMPOSE_DEFAULT:
> +	case V4L2_SEL_TGT_COMPOSE_BOUNDS:
> +		/* The compose rectangle is fixed to the source format. */
> +		s->r = priv->vdev.compose;
> +		break;
> +	case V4L2_SEL_TGT_COMPOSE_PADDED:
> +		/*
> +		 * The hardware writes with a configurable but fixed DMA burst
> +		 * size. If the source format width is not burst size aligned,
> +		 * the written frame contains padding to the right.
> +		 */
> +		s->r.left = 0;
> +		s->r.top = 0;
> +		s->r.width = priv->vdev.fmt.width;
> +		s->r.height = priv->vdev.fmt.height;
> +		break;
> +	default:
> +		return -EINVAL;
> +	}
> +
> +	return 0;
> +}
> +
> +/* -----------------------------------------------------------------------------
> + * Legacy Video IOCTLs
> + */
> +
> +static int capture_legacy_enum_framesizes(struct file *file, void *fh,
> +					  struct v4l2_frmsizeenum *fsize)
>   {
>   	struct capture_priv *priv = video_drvdata(file);
>   	const struct imx_media_pixfmt *cc;
> @@ -109,8 +153,8 @@ static int capture_enum_framesizes(struct file *file, void *fh,
>   	return 0;
>   }
>   
> -static int capture_enum_frameintervals(struct file *file, void *fh,
> -				       struct v4l2_frmivalenum *fival)
> +static int capture_legacy_enum_frameintervals(struct file *file, void *fh,
> +					      struct v4l2_frmivalenum *fival)
>   {
>   	struct capture_priv *priv = video_drvdata(file);
>   	const struct imx_media_pixfmt *cc;
> @@ -140,8 +184,8 @@ static int capture_enum_frameintervals(struct file *file, void *fh,
>   	return 0;
>   }
>   
> -static int capture_enum_fmt_vid_cap(struct file *file, void *fh,
> -				    struct v4l2_fmtdesc *f)
> +static int capture_legacy_enum_fmt_vid_cap(struct file *file, void *fh,
> +					   struct v4l2_fmtdesc *f)
>   {
>   	struct capture_priv *priv = video_drvdata(file);
>   	const struct imx_media_pixfmt *cc_src;
> @@ -184,21 +228,11 @@ static int capture_enum_fmt_vid_cap(struct file *file, void *fh,
>   	return 0;
>   }
>   
> -static int capture_g_fmt_vid_cap(struct file *file, void *fh,
> -				 struct v4l2_format *f)
> -{
> -	struct capture_priv *priv = video_drvdata(file);
> -
> -	f->fmt.pix = priv->vdev.fmt;
> -
> -	return 0;
> -}
> -
> -static int __capture_try_fmt_vid_cap(struct capture_priv *priv,
> -				     struct v4l2_subdev_format *fmt_src,
> -				     struct v4l2_format *f,
> -				     const struct imx_media_pixfmt **retcc,
> -				     struct v4l2_rect *compose)
> +static int __capture_legacy_try_fmt(struct capture_priv *priv,
> +				    struct v4l2_subdev_format *fmt_src,
> +				    struct v4l2_format *f,
> +				    const struct imx_media_pixfmt **retcc,
> +				    struct v4l2_rect *compose)
>   {
>   	const struct imx_media_pixfmt *cc, *cc_src;
>   
> @@ -255,8 +289,8 @@ static int __capture_try_fmt_vid_cap(struct capture_priv *priv,
>   	return 0;
>   }
>   
> -static int capture_try_fmt_vid_cap(struct file *file, void *fh,
> -				   struct v4l2_format *f)
> +static int capture_legacy_try_fmt_vid_cap(struct file *file, void *fh,
> +					  struct v4l2_format *f)
>   {
>   	struct capture_priv *priv = video_drvdata(file);
>   	struct v4l2_subdev_format fmt_src;
> @@ -268,11 +302,11 @@ static int capture_try_fmt_vid_cap(struct file *file, void *fh,
>   	if (ret)
>   		return ret;
>   
> -	return __capture_try_fmt_vid_cap(priv, &fmt_src, f, NULL, NULL);
> +	return __capture_legacy_try_fmt(priv, &fmt_src, f, NULL, NULL);
>   }
>   
> -static int capture_s_fmt_vid_cap(struct file *file, void *fh,
> -				 struct v4l2_format *f)
> +static int capture_legacy_s_fmt_vid_cap(struct file *file, void *fh,
> +					struct v4l2_format *f)
>   {
>   	struct capture_priv *priv = video_drvdata(file);
>   	struct v4l2_subdev_format fmt_src;
> @@ -289,8 +323,8 @@ static int capture_s_fmt_vid_cap(struct file *file, void *fh,
>   	if (ret)
>   		return ret;
>   
> -	ret = __capture_try_fmt_vid_cap(priv, &fmt_src, f, &priv->vdev.cc,
> -					&priv->vdev.compose);
> +	ret = __capture_legacy_try_fmt(priv, &fmt_src, f, &priv->vdev.cc,
> +				       &priv->vdev.compose);
>   	if (ret)
>   		return ret;
>   
> @@ -299,21 +333,22 @@ static int capture_s_fmt_vid_cap(struct file *file, void *fh,
>   	return 0;
>   }
>   
> -static int capture_querystd(struct file *file, void *fh, v4l2_std_id *std)
> +static int capture_legacy_querystd(struct file *file, void *fh,
> +				   v4l2_std_id *std)
>   {
>   	struct capture_priv *priv = video_drvdata(file);
>   
>   	return v4l2_subdev_call(priv->src_sd, video, querystd, std);
>   }
>   
> -static int capture_g_std(struct file *file, void *fh, v4l2_std_id *std)
> +static int capture_legacy_g_std(struct file *file, void *fh, v4l2_std_id *std)
>   {
>   	struct capture_priv *priv = video_drvdata(file);
>   
>   	return v4l2_subdev_call(priv->src_sd, video, g_std, std);
>   }
>   
> -static int capture_s_std(struct file *file, void *fh, v4l2_std_id std)
> +static int capture_legacy_s_std(struct file *file, void *fh, v4l2_std_id std)
>   {
>   	struct capture_priv *priv = video_drvdata(file);
>   
> @@ -323,38 +358,8 @@ static int capture_s_std(struct file *file, void *fh, v4l2_std_id std)
>   	return v4l2_subdev_call(priv->src_sd, video, s_std, std);
>   }
>   
> -static int capture_g_selection(struct file *file, void *fh,
> -			       struct v4l2_selection *s)
> -{
> -	struct capture_priv *priv = video_drvdata(file);
> -
> -	switch (s->target) {
> -	case V4L2_SEL_TGT_COMPOSE:
> -	case V4L2_SEL_TGT_COMPOSE_DEFAULT:
> -	case V4L2_SEL_TGT_COMPOSE_BOUNDS:
> -		/* The compose rectangle is fixed to the source format. */
> -		s->r = priv->vdev.compose;
> -		break;
> -	case V4L2_SEL_TGT_COMPOSE_PADDED:
> -		/*
> -		 * The hardware writes with a configurable but fixed DMA burst
> -		 * size. If the source format width is not burst size aligned,
> -		 * the written frame contains padding to the right.
> -		 */
> -		s->r.left = 0;
> -		s->r.top = 0;
> -		s->r.width = priv->vdev.fmt.width;
> -		s->r.height = priv->vdev.fmt.height;
> -		break;
> -	default:
> -		return -EINVAL;
> -	}
> -
> -	return 0;
> -}
> -
> -static int capture_g_parm(struct file *file, void *fh,
> -			  struct v4l2_streamparm *a)
> +static int capture_legacy_g_parm(struct file *file, void *fh,
> +				 struct v4l2_streamparm *a)
>   {
>   	struct capture_priv *priv = video_drvdata(file);
>   	struct v4l2_subdev_frame_interval fi;
> @@ -375,8 +380,8 @@ static int capture_g_parm(struct file *file, void *fh,
>   	return 0;
>   }
>   
> -static int capture_s_parm(struct file *file, void *fh,
> -			  struct v4l2_streamparm *a)
> +static int capture_legacy_s_parm(struct file *file, void *fh,
> +				 struct v4l2_streamparm *a)
>   {
>   	struct capture_priv *priv = video_drvdata(file);
>   	struct v4l2_subdev_frame_interval fi;
> @@ -398,8 +403,8 @@ static int capture_s_parm(struct file *file, void *fh,
>   	return 0;
>   }
>   
> -static int capture_subscribe_event(struct v4l2_fh *fh,
> -				   const struct v4l2_event_subscription *sub)
> +static int capture_legacy_subscribe_event(struct v4l2_fh *fh,
> +					  const struct v4l2_event_subscription *sub)
>   {
>   	switch (sub->type) {
>   	case V4L2_EVENT_IMX_FRAME_INTERVAL_ERROR:
> @@ -413,42 +418,42 @@ static int capture_subscribe_event(struct v4l2_fh *fh,
>   	}
>   }
>   
> -static const struct v4l2_ioctl_ops capture_ioctl_ops = {
> -	.vidioc_querycap	= capture_querycap,
> +static const struct v4l2_ioctl_ops capture_legacy_ioctl_ops = {
> +	.vidioc_querycap		= capture_querycap,
>   
> -	.vidioc_enum_framesizes = capture_enum_framesizes,
> -	.vidioc_enum_frameintervals = capture_enum_frameintervals,
> +	.vidioc_enum_framesizes		= capture_legacy_enum_framesizes,
> +	.vidioc_enum_frameintervals	= capture_legacy_enum_frameintervals,
>   
> -	.vidioc_enum_fmt_vid_cap        = capture_enum_fmt_vid_cap,
> -	.vidioc_g_fmt_vid_cap           = capture_g_fmt_vid_cap,
> -	.vidioc_try_fmt_vid_cap         = capture_try_fmt_vid_cap,
> -	.vidioc_s_fmt_vid_cap           = capture_s_fmt_vid_cap,
> +	.vidioc_enum_fmt_vid_cap	= capture_legacy_enum_fmt_vid_cap,
> +	.vidioc_g_fmt_vid_cap		= capture_g_fmt_vid_cap,
> +	.vidioc_try_fmt_vid_cap		= capture_legacy_try_fmt_vid_cap,
> +	.vidioc_s_fmt_vid_cap		= capture_legacy_s_fmt_vid_cap,
>   
> -	.vidioc_querystd        = capture_querystd,
> -	.vidioc_g_std           = capture_g_std,
> -	.vidioc_s_std           = capture_s_std,
> +	.vidioc_querystd		= capture_legacy_querystd,
> +	.vidioc_g_std			= capture_legacy_g_std,
> +	.vidioc_s_std			= capture_legacy_s_std,
>   
> -	.vidioc_g_selection	= capture_g_selection,
> +	.vidioc_g_selection		= capture_g_selection,
>   
> -	.vidioc_g_parm          = capture_g_parm,
> -	.vidioc_s_parm          = capture_s_parm,
> +	.vidioc_g_parm			= capture_legacy_g_parm,
> +	.vidioc_s_parm			= capture_legacy_s_parm,
>   
> -	.vidioc_reqbufs		= vb2_ioctl_reqbufs,
> -	.vidioc_create_bufs     = vb2_ioctl_create_bufs,
> -	.vidioc_prepare_buf     = vb2_ioctl_prepare_buf,
> -	.vidioc_querybuf	= vb2_ioctl_querybuf,
> -	.vidioc_qbuf		= vb2_ioctl_qbuf,
> -	.vidioc_dqbuf		= vb2_ioctl_dqbuf,
> -	.vidioc_expbuf		= vb2_ioctl_expbuf,
> -	.vidioc_streamon	= vb2_ioctl_streamon,
> -	.vidioc_streamoff	= vb2_ioctl_streamoff,
> +	.vidioc_reqbufs			= vb2_ioctl_reqbufs,
> +	.vidioc_create_bufs		= vb2_ioctl_create_bufs,
> +	.vidioc_prepare_buf		= vb2_ioctl_prepare_buf,
> +	.vidioc_querybuf		= vb2_ioctl_querybuf,
> +	.vidioc_qbuf			= vb2_ioctl_qbuf,
> +	.vidioc_dqbuf			= vb2_ioctl_dqbuf,
> +	.vidioc_expbuf			= vb2_ioctl_expbuf,
> +	.vidioc_streamon		= vb2_ioctl_streamon,
> +	.vidioc_streamoff		= vb2_ioctl_streamoff,
>   
> -	.vidioc_subscribe_event = capture_subscribe_event,
> -	.vidioc_unsubscribe_event = v4l2_event_unsubscribe,
> +	.vidioc_subscribe_event		= capture_legacy_subscribe_event,
> +	.vidioc_unsubscribe_event	= v4l2_event_unsubscribe,
>   };
>   
> -/*
> - * Queue operations
> +/* -----------------------------------------------------------------------------
> + * Queue Operations
>    */
>   
>   static int capture_queue_setup(struct vb2_queue *vq,
> @@ -540,7 +545,7 @@ static int capture_validate_fmt(struct capture_priv *priv)
>   
>   	v4l2_fill_pix_format(&f.fmt.pix, &fmt_src.format);
>   
> -	ret = __capture_try_fmt_vid_cap(priv, &fmt_src, &f, &cc, &compose);
> +	ret = __capture_legacy_try_fmt(priv, &fmt_src, &f, &cc, &compose);
>   	if (ret)
>   		return ret;
>   
> @@ -616,9 +621,10 @@ static const struct vb2_ops capture_qops = {
>   	.stop_streaming  = capture_stop_streaming,
>   };
>   
> -/*
> - * File operations
> +/* -----------------------------------------------------------------------------
> + * File Operations
>    */
> +
>   static int capture_open(struct file *file)
>   {
>   	struct capture_priv *priv = video_drvdata(file);
> @@ -672,6 +678,10 @@ static const struct v4l2_file_operations capture_fops = {
>   	.mmap		= vb2_fop_mmap,
>   };
>   
> +/* -----------------------------------------------------------------------------
> + * Public API
> + */
> +
>   struct imx_media_buffer *
>   imx_media_capture_device_next_buf(struct imx_media_video_dev *vdev)
>   {
> @@ -821,7 +831,7 @@ imx_media_capture_device_init(struct device *dev, struct v4l2_subdev *src_sd,
>   		return ERR_PTR(-ENOMEM);
>   
>   	vfd->fops = &capture_fops;
> -	vfd->ioctl_ops = &capture_ioctl_ops;
> +	vfd->ioctl_ops = &capture_legacy_ioctl_ops;
>   	vfd->minor = -1;
>   	vfd->release = video_device_release;
>   	vfd->vfl_dir = VFL_DIR_RX;


  reply	other threads:[~2021-01-06 17:52 UTC|newest]

Thread overview: 121+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-05 15:27 [PATCH 00/75] media: imx: Miscellaneous fixes and cleanups for i.MX7 Laurent Pinchart
2021-01-05 15:27 ` [PATCH 01/75] media: imx: Drop dependency on I2C Laurent Pinchart
2021-01-06 14:21   ` Philipp Zabel
2021-01-05 15:27 ` [PATCH 02/75] media: imx: Move dependency on VIDEO_DEV to common Kconfig symbol Laurent Pinchart
2021-01-06 14:21   ` Philipp Zabel
2021-01-05 15:27 ` [PATCH 03/75] media: imx: Drop manual dependency on VIDEO_IMX_MEDIA Laurent Pinchart
2021-01-06 14:22   ` Philipp Zabel
2021-01-05 15:27 ` [PATCH 04/75] media: imx: Move IMX_IPUV3_CORE dependency to VIDEO_IMX_CSI Laurent Pinchart
2021-01-06 14:24   ` Philipp Zabel
2021-01-06 15:42     ` Laurent Pinchart
2021-01-05 15:27 ` [PATCH 05/75] media: imx: Compile imx6-media-objs only for CONFIG_VIDEO_IMX_CSI Laurent Pinchart
2021-01-08 17:42   ` Ezequiel Garcia
2021-01-08 17:47     ` Laurent Pinchart
2021-01-08 18:05       ` Ezequiel Garcia
2021-01-05 15:27 ` [PATCH 06/75] media: imx: Set default sizes through macros in all drivers Laurent Pinchart
2021-01-05 15:27 ` [PATCH 07/75] media: imx: utils: Add ability to filter pixel formats by mbus code Laurent Pinchart
2021-01-05 15:27 ` [PATCH 08/75] media: imx: capture: Use dev_* instead of v4l2_* to log messages Laurent Pinchart
2021-01-06 14:25   ` Philipp Zabel
2021-01-05 15:27 ` [PATCH 09/75] media: imx: capture: Use device name to construct bus_info Laurent Pinchart
2021-01-06 14:26   ` Philipp Zabel
2021-01-05 15:27 ` [PATCH 10/75] media: imx: capture: Remove forward declaration of capture_qops Laurent Pinchart
2021-01-06 14:26   ` Philipp Zabel
2021-01-05 15:27 ` [PATCH 11/75] media: imx: capture: Handle errors from v4l2_fh_open() Laurent Pinchart
2021-01-06 14:27   ` Philipp Zabel
2021-01-05 15:27 ` [PATCH 12/75] media: imx: capture: Clean up capture_priv structure Laurent Pinchart
2021-01-05 15:27 ` [PATCH 13/75] media: imx: capture: Remove capture_priv stop field Laurent Pinchart
2021-01-06 14:29   ` Philipp Zabel
2021-01-05 15:27 ` [PATCH 14/75] media: imx: capture: Move queue and ctrl handler init to init function Laurent Pinchart
2021-01-06 14:30   ` Philipp Zabel
2021-01-05 15:27 ` [PATCH 15/75] media: imx: capture: Initialize video_device programmatically Laurent Pinchart
2021-01-06 14:31   ` Philipp Zabel
2021-01-05 15:27 ` [PATCH 16/75] media: imx: capture: Register the video device after completing init Laurent Pinchart
2021-01-05 15:27 ` [PATCH 17/75] media: imx: capture: Store v4l2_pix_format in imx_media_video_dev Laurent Pinchart
2021-01-06 14:33   ` Philipp Zabel
2021-01-05 15:27 ` [PATCH 18/75] media: imx: capture: Move default format init to a separate function Laurent Pinchart
2021-01-05 15:27 ` [PATCH 19/75] media: imx: capture: Rename querycap handler to capture_querycap Laurent Pinchart
2021-01-06 17:45   ` Steve Longerbeam
2021-01-05 15:27 ` [PATCH 20/75] media: imx: capture: Rename ioctl operations with legacy prefix Laurent Pinchart
2021-01-06 17:51   ` Steve Longerbeam [this message]
2021-01-07 10:52     ` Philipp Zabel
2021-01-08  0:03       ` Fabio Estevam
2021-01-09  1:09       ` Laurent Pinchart
2021-01-11  8:40         ` Philipp Zabel
2021-02-14 21:33           ` Laurent Pinchart
2021-01-05 15:27 ` [PATCH 21/75] media: imx: capture: Add a mechanism to disable control inheritance Laurent Pinchart
2021-01-05 15:27 ` [PATCH 22/75] media: imx: capture: Remove unneeded variable in __capture_legacy_try_fmt Laurent Pinchart
2021-01-06 17:55   ` Steve Longerbeam
2021-01-05 15:28 ` [PATCH 23/75] media: imx: capture: Pass v4l2_pix_format to __capture_legacy_try_fmt() Laurent Pinchart
2021-01-06 17:57   ` Steve Longerbeam
2021-01-05 15:28 ` [PATCH 24/75] media: imx: capture: Return -EPIPE from __capture_legacy_try_fmt() Laurent Pinchart
2021-01-05 15:28 ` [PATCH 25/75] media: imx: capture: Extract format lookup from __capture_legacy_try_fmt Laurent Pinchart
2021-01-05 15:28 ` [PATCH 26/75] media: imx: capture: Simplify capture_validate_fmt() implementation Laurent Pinchart
2021-01-05 15:28 ` [PATCH 27/75] media: imx: capture: Simplify __capture_legacy_try_fmt() Laurent Pinchart
2021-01-06 17:59   ` Steve Longerbeam
2021-01-05 15:28 ` [PATCH 28/75] media: imx: capture: Decouple video node from source with MC-centric API Laurent Pinchart
2021-01-05 15:28 ` [PATCH 29/75] media: imx: capture: Expose V4L2_CAP_IO_MC for the " Laurent Pinchart
2021-01-05 15:28 ` [PATCH 30/75] media: imx: imx7-media-csi: Disable legacy video node API Laurent Pinchart
2021-01-05 15:28 ` [PATCH 31/75] media: imx: capture: Support creating immutable link to capture device Laurent Pinchart
2021-01-06 17:44   ` Steve Longerbeam
2021-01-09  0:41     ` Laurent Pinchart
2021-01-08 17:37   ` Ezequiel Garcia
2021-01-09  0:48     ` Laurent Pinchart
2021-01-05 15:28 ` [PATCH 32/75] media: imx: imx7-media-csi: Remove control handler Laurent Pinchart
2021-01-05 15:28 ` [PATCH 33/75] media: imx: imx7-media-csi: Move (de)init from link setup to .s_stream() Laurent Pinchart
2021-01-05 15:28 ` [PATCH 34/75] media: imx: imx7-media-csi: Create immutable link to capture device Laurent Pinchart
2021-01-05 15:28 ` [PATCH 35/75] media: imx: imx7-media-csi: Replace CSICR*_RESET_VAL with values Laurent Pinchart
2021-01-05 15:28 ` [PATCH 36/75] media: imx: imx7-media-csi: Tidy up register fields macros Laurent Pinchart
2021-01-05 15:28 ` [PATCH 37/75] media: imx: imx7-media-csi: Reorganize code in sections Laurent Pinchart
2021-01-05 15:28 ` [PATCH 38/75] media: imx: imx7-media-csi: Validate capture format in .link_validate() Laurent Pinchart
2021-01-05 15:28 ` [PATCH 39/75] media: imx: imx7-media-csi: Rename imx7_csi_dma_start() to *_setup() Laurent Pinchart
2021-01-05 15:28 ` [PATCH 40/75] media: imx: imx7-media-csi: Split imx7_csi_dma_stop() Laurent Pinchart
2021-01-05 15:28 ` [PATCH 41/75] media: imx: imx7-media-csi: Move CSI configuration before source start Laurent Pinchart
2021-01-05 15:28 ` [PATCH 42/75] media: imx: imx7-media-csi: Merge streaming_start() with csi_enable() Laurent Pinchart
2021-01-05 15:28 ` [PATCH 43/75] media: imx: imx7-media-csi: Merge hw_reset() with init_interface() Laurent Pinchart
2021-01-05 15:28 ` [PATCH 44/75] media: imx: imx7-media-csi: Set the MIPI data type based on the bus code Laurent Pinchart
2021-01-05 15:28 ` [PATCH 45/75] media: imx: imx7-media-csi: Don't set the buffer stride when disabling Laurent Pinchart
2021-01-05 15:28 ` [PATCH 46/75] media: imx: imx7-media-csi: Merge all config in imx7_csi_configure() Laurent Pinchart
2021-01-05 15:28 ` [PATCH 47/75] media: imx: imx7-media-csi: Clear all configurable CSICR18 fields Laurent Pinchart
2021-01-05 15:28 ` [PATCH 48/75] media: imx: imx7-media-csi: Set RFF burst type in imx7_csi_configure() Laurent Pinchart
2021-01-05 15:28 ` [PATCH 49/75] media: imx: imx7-media-csi: Simplify imx7_csi_rx_fifo_clear() Laurent Pinchart
2021-01-05 15:28 ` [PATCH 50/75] media: imx: imx7-media-csi: Don't double-enable the CSI Laurent Pinchart
2021-01-05 15:28 ` [PATCH 51/75] media: imx: imx7-media-csi: Don't double-enable the RxFIFO Laurent Pinchart
2021-01-05 15:28 ` [PATCH 52/75] media: imx: imx7-media-csi: Remove double reflash of DMA controller Laurent Pinchart
2021-01-05 15:28 ` [PATCH 53/75] media: imx: imx7-media-csi: Don't enable SOF and EOF interrupts Laurent Pinchart
2021-01-05 15:28 ` [PATCH 54/75] media: imx: imx7_media-csi: Add support for additional Bayer patterns Laurent Pinchart
2021-01-05 15:28 ` [PATCH 55/75] media: v4l2-mc: Add link flags to v4l2_create_fwnode_links_to_pad() Laurent Pinchart
2021-01-05 15:28 ` [PATCH 56/75] media: imx: imx7_media-csi: Create immutable link to source device Laurent Pinchart
2021-01-05 15:28 ` [PATCH 57/75] dt-bindings: media: Convert i.MX7 MIPI CSI-2 receiver binding to YAML Laurent Pinchart
2021-01-05 15:43   ` Laurent Pinchart
2021-01-05 15:28 ` [PATCH 58/75] dt-bindings: media: fsl,imx7-mipi-csi2: Drop the reset-names property Laurent Pinchart
2021-01-05 15:28 ` [PATCH 59/75] dt-bindings: media: fsl,imx7-mipi-csi2: Drop fsl,csis-hs-settle property Laurent Pinchart
2021-01-06 22:49   ` Sakari Ailus
2021-01-06 22:53     ` Sakari Ailus
2021-01-05 15:28 ` [PATCH 60/75] media: imx: imx7_mipi_csis: Acquire reset control without naming it Laurent Pinchart
2021-01-05 15:28 ` [PATCH 61/75] media: imx: imx7_mipi_csis: Fix input size alignment Laurent Pinchart
2021-01-05 15:28 ` [PATCH 62/75] media: imx: imx7_mipi_csis: Make source .s_power() optional Laurent Pinchart
2021-01-05 15:28 ` [PATCH 63/75] media: imx: imx7_mipi_csis: Avoid double get of wrap clock Laurent Pinchart
2021-01-05 15:28 ` [PATCH 64/75] media: imx: imx7_mipi_csis: Drop 10-bit YUV support Laurent Pinchart
2021-01-05 15:28 ` [PATCH 65/75] media: imx: imx7_mipi_csis: Fix UYVY8 media bus format Laurent Pinchart
2021-01-05 15:28 ` [PATCH 66/75] media: imx: imx7_mipi_csis: Inline mipi_csis_set_hsync_settle() Laurent Pinchart
2021-01-05 15:28 ` [PATCH 67/75] media: imx: imx7_mipi_csis: Move link setup check out of locked section Laurent Pinchart
2021-01-05 15:28 ` [PATCH 68/75] media: imx: imx7_mipi_csis: Calculate Ths_settle from source pixel rate Laurent Pinchart
2021-01-06 22:59   ` Sakari Ailus
2021-01-09  0:52     ` Laurent Pinchart
2021-01-11  9:39   ` Rui Miguel Silva
2021-01-05 15:28 ` [PATCH 69/75] media: imx: imx7_mipi_csis: Turn register access macros into functions Laurent Pinchart
2021-01-05 15:28 ` [PATCH 70/75] media: imx: imx7_mipi_csis: Fully initialize MIPI_CSIS_DPHYCTRL register Laurent Pinchart
2021-01-05 15:28 ` [PATCH 71/75] media: imx: imx7_mipi_csis: Define macros for DPHY_BCTRL_L fields Laurent Pinchart
2021-01-05 15:28 ` [PATCH 72/75] media: imx: imx7_mipi_csis: Make ISP registers macros take channel ID Laurent Pinchart
2021-01-05 15:28 ` [PATCH 73/75] media: imx: imx7_mipi_csis: Rename register macros to match datasheet Laurent Pinchart
2021-01-05 15:28 ` [PATCH 74/75] media: imx: imx7_mipi_csis: Use register macros in mipi_csis_dump_regs() Laurent Pinchart
2021-01-05 15:28 ` [PATCH 75/75] media: imx: imx7_mipi_csis: Print shadow registers " Laurent Pinchart
2021-01-05 17:45 ` [PATCH 00/75] media: imx: Miscellaneous fixes and cleanups for i.MX7 Fabio Estevam
2021-01-05 19:00   ` Fabio Estevam
2021-01-06 15:41   ` Laurent Pinchart
2021-01-06 21:10     ` Fabio Estevam
2021-01-09  1:10       ` Laurent Pinchart
2021-01-09  1:47         ` Fabio Estevam
2021-02-15  0:23           ` Laurent Pinchart
2021-01-05 19:29 ` Rui Miguel Silva
2021-01-11  9:53 ` Rui Miguel Silva

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=e47bf3ba-6d9a-52cf-f232-ce4b02a46e2e@gmail.com \
    --to=slongerbeam@gmail.com \
    --cc=ezequiel@collabora.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-media@vger.kernel.org \
    --cc=p.zabel@pengutronix.de \
    --cc=rmfrfs@gmail.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