Linux Media Controller development
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Ezequiel Garcia <ezequiel@collabora.com>
Cc: linux-media@vger.kernel.org, Rui Miguel Silva <rmfrfs@gmail.com>,
	Steve Longerbeam <slongerbeam@gmail.com>,
	Philipp Zabel <p.zabel@pengutronix.de>
Subject: Re: [PATCH 31/75] media: imx: capture: Support creating immutable link to capture device
Date: Sat, 9 Jan 2021 02:48:38 +0200	[thread overview]
Message-ID: <X/j9ZtwmDkpjr7Ke@pendragon.ideasonboard.com> (raw)
In-Reply-To: <1d2eb33ad845e09313cd25e7d5fb35527f29b880.camel@collabora.com>

Hi Ezequiel,

On Fri, Jan 08, 2021 at 02:37:54PM -0300, Ezequiel Garcia wrote:
> Hi Laurent,
> 
> On Tue, 2021-01-05 at 17:28 +0200, Laurent Pinchart wrote:
> > When the subdevice connected to the capture device has a single possible
> > sink, there's no point in making the link mutable. Support creating
> > immutable links.
> 
> Does this apply to csi2_notify_bound as welll
> that is, is there any point in making the sensor link mutable?

We could have multiple sensors connected to the same CSI-2 receiver,
with all but one always in reset (not a recommended hardware design, but
it has been done and can work in some cases).

> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > ---
> >  drivers/staging/media/imx/imx-ic-prpencvf.c   | 2 +-
> >  drivers/staging/media/imx/imx-media-capture.c | 7 +++++--
> >  drivers/staging/media/imx/imx-media-csi.c     | 2 +-
> >  drivers/staging/media/imx/imx-media.h         | 3 ++-
> >  drivers/staging/media/imx/imx7-media-csi.c    | 2 +-
> >  5 files changed, 10 insertions(+), 6 deletions(-)
> > 
> > diff --git a/drivers/staging/media/imx/imx-ic-prpencvf.c b/drivers/staging/media/imx/imx-ic-prpencvf.c
> > index 88d69425e1b3..6c9c75ffb30c 100644
> > --- a/drivers/staging/media/imx/imx-ic-prpencvf.c
> > +++ b/drivers/staging/media/imx/imx-ic-prpencvf.c
> > @@ -1269,7 +1269,7 @@ static int prp_registered(struct v4l2_subdev *sd)
> >         if (IS_ERR(priv->vdev))
> >                 return PTR_ERR(priv->vdev);
> >  
> > -       ret = imx_media_capture_device_register(priv->vdev);
> > +       ret = imx_media_capture_device_register(priv->vdev, false);
> 
> Maybe it's just me, but I dislike this boolean parameter pattern,
> as opposed to passing the flags directly, or some other MUTABLE/IMMUTABLE
> enum value.

Something along these lines ?

diff --git a/drivers/staging/media/imx/imx-ic-prpencvf.c b/drivers/staging/media/imx/imx-ic-prpencvf.c
index 88d69425e1b3..d990553de87b 100644
--- a/drivers/staging/media/imx/imx-ic-prpencvf.c
+++ b/drivers/staging/media/imx/imx-ic-prpencvf.c
@@ -1269,7 +1269,7 @@ static int prp_registered(struct v4l2_subdev *sd)
 	if (IS_ERR(priv->vdev))
 		return PTR_ERR(priv->vdev);

-	ret = imx_media_capture_device_register(priv->vdev);
+	ret = imx_media_capture_device_register(priv->vdev, 0);
 	if (ret)
 		goto remove_vdev;

diff --git a/drivers/staging/media/imx/imx-media-capture.c b/drivers/staging/media/imx/imx-media-capture.c
index 04eb612ff1fa..a17e087a0d02 100644
--- a/drivers/staging/media/imx/imx-media-capture.c
+++ b/drivers/staging/media/imx/imx-media-capture.c
@@ -898,7 +898,9 @@ static int capture_init_format(struct capture_priv *priv)
 	return 0;
 }

-int imx_media_capture_device_register(struct imx_media_video_dev *vdev)
+int imx_media_capture_device_register(struct imx_media_video_dev *vdev,
+				      u32 link_flags)
+				      bool immutable)
 {
 	struct capture_priv *priv = to_capture_priv(vdev);
 	struct v4l2_subdev *sd = priv->src_sd;
@@ -927,8 +929,10 @@ int imx_media_capture_device_register(struct imx_media_video_dev *vdev)
 		 video_device_node_name(vfd));

 	/* Create the link from the src_sd devnode pad to device node. */
+	if (link_flags & MEDIA_LNK_FL_IMMUTABLE)
+		link_flags |= MEDIA_LNK_FL_ENABLED;
 	ret = media_create_pad_link(&sd->entity, priv->src_sd_pad,
-				    &vfd->entity, 0, 0);
+				    &vfd->entity, 0, link_flags);
 	if (ret) {
 		dev_err(priv->dev, "failed to create link to device node\n");
 		video_unregister_device(vfd);
diff --git a/drivers/staging/media/imx/imx-media-csi.c b/drivers/staging/media/imx/imx-media-csi.c
index cfad000d9352..ce64f3da81f7 100644
--- a/drivers/staging/media/imx/imx-media-csi.c
+++ b/drivers/staging/media/imx/imx-media-csi.c
@@ -1788,7 +1788,7 @@ static int csi_registered(struct v4l2_subdev *sd)
 		goto free_fim;
 	}

-	ret = imx_media_capture_device_register(priv->vdev);
+	ret = imx_media_capture_device_register(priv->vdev, 0);
 	if (ret)
 		goto remove_vdev;

diff --git a/drivers/staging/media/imx/imx-media.h b/drivers/staging/media/imx/imx-media.h
index 2ea2e62ddf86..492d9a64e704 100644
--- a/drivers/staging/media/imx/imx-media.h
+++ b/drivers/staging/media/imx/imx-media.h
@@ -288,7 +288,8 @@ struct imx_media_video_dev *
 imx_media_capture_device_init(struct device *dev, struct v4l2_subdev *src_sd,
 			      int pad, bool legacy_api);
 void imx_media_capture_device_remove(struct imx_media_video_dev *vdev);
-int imx_media_capture_device_register(struct imx_media_video_dev *vdev);
+int imx_media_capture_device_register(struct imx_media_video_dev *vdev,
+				      u32 link_flags);
 void imx_media_capture_device_unregister(struct imx_media_video_dev *vdev);
 struct imx_media_buffer *
 imx_media_capture_device_next_buf(struct imx_media_video_dev *vdev);
diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c
index afd1a7e35bfe..1b13347bd0a0 100644
--- a/drivers/staging/media/imx/imx7-media-csi.c
+++ b/drivers/staging/media/imx/imx7-media-csi.c
@@ -1093,7 +1093,7 @@ static int imx7_csi_registered(struct v4l2_subdev *sd)
 	if (IS_ERR(csi->vdev))
 		return PTR_ERR(csi->vdev);

-	ret = imx_media_capture_device_register(csi->vdev);
+	ret = imx_media_capture_device_register(csi->vdev, 0);
 	if (ret)
 		imx_media_capture_device_remove(csi->vdev);

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2021-01-09  0:50 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
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 [this message]
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=X/j9ZtwmDkpjr7Ke@pendragon.ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=ezequiel@collabora.com \
    --cc=linux-media@vger.kernel.org \
    --cc=p.zabel@pengutronix.de \
    --cc=rmfrfs@gmail.com \
    --cc=slongerbeam@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