All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Arash Golgol <arash.golgol@gmail.com>
Cc: linux-media@vger.kernel.org, paulk@sys-base.io,
	mchehab@kernel.org, wens@kernel.org, jernej.skrabec@gmail.com,
	samuel@sholland.org, linux-sunxi@lists.linux.dev
Subject: Re: [PATCH] media: sun6i-mipi-csi2: Propagate format to source pad in TRY mode
Date: Wed, 4 Feb 2026 02:02:28 +0200	[thread overview]
Message-ID: <20260204000228.GA154910@killaraus> (raw)
In-Reply-To: <20260126102149.39563-1-arash.golgol@gmail.com>

Hello Arash,

Thank you for the patch.

On Mon, Jan 26, 2026 at 01:51:49PM +0330, Arash Golgol wrote:
> sun6i-mipi-csi2 does not support any format conversion. So the format
> on sink and source pad must always match. This limitation is handled for
> ACTIVE state via mbus_format member of bridge private structure.

It's not even handled correctly though, the sun6i_mipi_csi2_set_fmt()
function will accept setting the ACTIVE format on the source pad, when
it shouldn't. You also fix this in your patch. This should be explained
in the commit message.

> To enforce this limitation in TRY state, user space should only be able
> to set format on sink pad. The sink format must be propagated to source
> pad to ensure consistent behavior.
> 
> This also aligns the driver with userspace relying on media controller
> based format negotiation.
> 
> Signed-off-by: Arash Golgol <arash.golgol@gmail.com>
> ---
>  .../sunxi/sun6i-mipi-csi2/sun6i_mipi_csi2.c   | 19 +++++++++++++++----
>  1 file changed, 15 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/media/platform/sunxi/sun6i-mipi-csi2/sun6i_mipi_csi2.c b/drivers/media/platform/sunxi/sun6i-mipi-csi2/sun6i_mipi_csi2.c
> index b06cb73015cd..6ee0f6685663 100644
> --- a/drivers/media/platform/sunxi/sun6i-mipi-csi2/sun6i_mipi_csi2.c
> +++ b/drivers/media/platform/sunxi/sun6i-mipi-csi2/sun6i_mipi_csi2.c
> @@ -369,15 +369,26 @@ static int sun6i_mipi_csi2_set_fmt(struct v4l2_subdev *subdev,
>  	struct v4l2_mbus_framefmt *mbus_format = &format->format;
>  	struct mutex *lock = &csi2_dev->bridge.lock;
>  
> +	/* The format on the source pad always matches the sink pad. */
> +	if (format->pad != SUN6I_MIPI_CSI2_PAD_SINK)
> +		return v4l2_subdev_get_fmt(subdev, state, format);
> +
>  	mutex_lock(lock);
>  
>  	sun6i_mipi_csi2_mbus_format_prepare(mbus_format);
>  
> -	if (format->which == V4L2_SUBDEV_FORMAT_TRY)
> -		*v4l2_subdev_state_get_format(state, format->pad) =
> -			*mbus_format;
> -	else
> +	if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
> +		struct v4l2_mbus_framefmt *fmt;
> +
> +		fmt = v4l2_subdev_state_get_format(state, format->pad);
> +		*fmt = *mbus_format;
> +
> +		/* Propagate the format to the source pad. */
> +		fmt = v4l2_subdev_state_get_format(state, SUN6I_MIPI_CSI2_PAD_SOURCE);
> +		*fmt = *mbus_format;
> +	} else {
>  		csi2_dev->bridge.mbus_format = *mbus_format;
> +	}

If you have a bit more time, could I ask you to take it one step further
and convert the driver to framework-managed V4L2 subdev active ? This
will simplify the implementation by dropping bridge.mbus_format.

You can find an example of the conversion in commit a2514b9a634a
("media: i2c: imx290: Use V4L2 subdev active state"). In a nutshell, you
need to

- Call v4l2_subdev_init_finalize() at probe time and
  v4l2_subdev_cleanup() at remove time
- Drop the mutex (locking is now handled by the framework)
- Use v4l2_subdev_get_fmt() as the .get_fmt() handler
- Drop bridge.mbus_format and always use v4l2_subdev_get_pad_format() on
  the state passed to the subdev functions (which will be the ACTIVE or
  TRY state depending on the .which argument passed by userspace)
- In .s_stream(), access the state with
  v4l2_subdev_lock_and_get_active_state() as it's the only subdev
  operation that doesn't get the state as a parameter

You can ignore the control handler changes in commit a2514b9a634a, and
you can leave subdev.state_lock NULL (the framework will then use an
internal lock).

>  
>  	mutex_unlock(lock);
>  

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2026-02-04  0:02 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-26 10:21 [PATCH] media: sun6i-mipi-csi2: Propagate format to source pad in TRY mode Arash Golgol
2026-02-04  0:02 ` Laurent Pinchart [this message]
2026-02-04  6:15   ` arash golgol

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=20260204000228.GA154910@killaraus \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=arash.golgol@gmail.com \
    --cc=jernej.skrabec@gmail.com \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-sunxi@lists.linux.dev \
    --cc=mchehab@kernel.org \
    --cc=paulk@sys-base.io \
    --cc=samuel@sholland.org \
    --cc=wens@kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.