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;
next prev parent 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