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
next prev parent 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox