public inbox for cip-dev@lists.cip-project.org
 help / color / mirror / Atom feed
From: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
To: cip-dev@lists.cip-project.org,
	Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp>,
	Pavel Machek <pavel@denx.de>
Cc: Biju Das <biju.das.jz@bp.renesas.com>, tomm.merciai@gmail.com
Subject: Re: [PATCH 6.1.y-cip 49/55] media: v4l2-subdev: Refactor events
Date: Fri, 22 Aug 2025 17:36:11 +0200	[thread overview]
Message-ID: <aKiOa-Bv4-IsEjP7@tom-desktop> (raw)
In-Reply-To: <20250820160413.801341-50-tommaso.merciai.xr@bp.renesas.com>

Hi Pavel,

On Wed, Aug 20, 2025 at 06:04:05PM +0200, Tommaso Merciai wrote:
> From: Tommaso Merciai <tomm.merciai@gmail.com>
> 
> commit e7724e23196ab1b4bc843aa60e917967d95697e4 upstream.
> 
> Controls can be exposed to userspace via a v4l-subdevX device, and
> userspace has to be able to subscribe to control events so that it is
> notified when the control changes value. If a control handler is set for
> the subdev then set the HAS_EVENTS flag automatically into
> v4l2_subdev_init_finalize() and use v4l2_ctrl_subdev_subscribe_event() and
> v4l2_event_subdev_unsubscribe() as default if subdev don't have
> .(un)subscribe control operations. This simplifies subdev drivers by
> avoiding the need to set the V4L2_SUBDEV_FL_HAS_EVENTS flag and plug the
> event handlers, and ensures consistency of the API exposed to userspace.
> 
> Signed-off-by: Tommaso Merciai <tomm.merciai@gmail.com>
> Suggested-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
> Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
> ---
>  drivers/media/v4l2-core/v4l2-subdev.c | 22 ++++++++++++++++++++--
>  1 file changed, 20 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/media/v4l2-core/v4l2-subdev.c b/drivers/media/v4l2-core/v4l2-subdev.c
> index 5c27bac772ea..423e9663d149 100644
> --- a/drivers/media/v4l2-core/v4l2-subdev.c
> +++ b/drivers/media/v4l2-core/v4l2-subdev.c
> @@ -502,10 +502,25 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg,
>  		return v4l2_event_dequeue(vfh, arg, file->f_flags & O_NONBLOCK);
>  
>  	case VIDIOC_SUBSCRIBE_EVENT:
> -		return v4l2_subdev_call(sd, core, subscribe_event, vfh, arg);
> +		if (v4l2_subdev_has_op(sd, core, subscribe_event))
> +			return v4l2_subdev_call(sd, core, subscribe_event,
> +						vfh, arg);
> +
> +		if ((sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS) &&
> +		    vfh->ctrl_handler)
> +			return v4l2_ctrl_subdev_subscribe_event(sd, vfh, arg);
> +
> +		return -ENOIOCTLCMD;
>  
>  	case VIDIOC_UNSUBSCRIBE_EVENT:
> -		return v4l2_subdev_call(sd, core, unsubscribe_event, vfh, arg);
> +		if (v4l2_subdev_has_op(sd, core, unsubscribe_event))
> +			return v4l2_subdev_call(sd, core, unsubscribe_event,
> +						vfh, arg);
> +
> +		if (sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS)
> +			return v4l2_event_subdev_unsubscribe(sd, vfh, arg);
> +
> +		return -ENOIOCTLCMD;
>  
>  #ifdef CONFIG_VIDEO_ADV_DEBUG
>  	case VIDIOC_DBG_G_REGISTER:
> @@ -1023,6 +1038,9 @@ int __v4l2_subdev_init_finalize(struct v4l2_subdev *sd, const char *name,
>  {
>  	struct v4l2_subdev_state *state;
>  
> +	if (sd->ctrl_handler)
> +		sd->flags |= V4L2_SUBDEV_FL_HAS_EVENTS;
> +
>  	state = __v4l2_subdev_state_alloc(sd, name, key);
>  	if (IS_ERR(state))
>  		return PTR_ERR(state);
> -- 
> 2.43.0
> 

With OV5645 part can we gently drop also this one?
Thanks for your work!


Regards
Tommaso


  reply	other threads:[~2025-08-22 15:36 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-20 16:03 [PATCH 6.1.y-cip 00/55] Add support for CRU/CSI2 on Renesas RZ/G3E Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 01/55] media: dt-bindings: renesas,rzg2l-csi2: Document Renesas RZ/V2H(P) SoC Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 02/55] media: dt-bindings: renesas,rzg2l-csi2: Document Renesas RZ/G3E CSI-2 block Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 03/55] media: dt-bindings: renesas,rzg2l-cru: Document Renesas RZ/G3E SoC Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 04/55] media: platform: rzg2l-cru: rzg2l-video: Move request_irq() to probe() Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 05/55] media: platform: rzg2l-cru: rzg2l-video: Set AXI burst max length Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 06/55] media: rzg2l-cru: Use RZG2L_CRU_IP_SINK/SOURCE enum entries Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 07/55] media: rzg2l-cru: Mark sink and source pad with MUST_CONNECT flag Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 08/55] media: rzg2l-cru: csi2: " Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 09/55] media: rzg2l-cru: csi2: Use ARRAY_SIZE() in media_entity_pads_init() Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 10/55] media: rzg2l-cru: csi2: Implement .get_frame_desc() Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 11/55] media: rzg2l-cru: Retrieve virtual channel information Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 12/55] media: rzg2l-cru: Remove `channel` member from `struct rzg2l_cru_csi` Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 13/55] media: rzg2l-cru: Use MIPI CSI-2 data types for ICnMC_INF definitions Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 14/55] media: rzg2l-cru: Remove unused fields from rzg2l_cru_ip_format struct Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 15/55] media: rzg2l-cru: Remove unnecessary WARN_ON check in format func Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 16/55] media: rzg2l-cru: Simplify configuring input format for image processing Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 17/55] media: rzg2l-cru: Inline calculating image size Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 18/55] media: rzg2l-cru: Simplify handling of supported formats Tommaso Merciai
2025-08-22 11:29   ` Pavel Machek
2025-08-20 16:03 ` [PATCH 6.1.y-cip 19/55] media: rzg2l-cru: Inline calculating bytesperline Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 20/55] media: rzg2l-cru: Make use of v4l2_format_info() helpers Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 21/55] media: rzg2l-cru: Use `rzg2l_cru_ip_formats` array in enum_frame_size Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 22/55] media: rzg2l-cru: csi2: Remove unused field from rzg2l_csi2_format Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 23/55] media: rzg2l-cru: video: Implement .link_validate() callback Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 24/55] media: rzg2l-cru: csi2: Use rzg2l_csi2_formats array in enum_frame_size Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 25/55] media: rzg2l-cru: Refactor ICnDMR register configuration Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 26/55] media: rzg2l-cru: Add support to capture 8bit raw sRGB Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 27/55] media: rzg2l-cru: Move register definitions to a separate file Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 28/55] media: renesas: rzg2l-cru: Add 'yuv' flag to IP format structure Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 29/55] media: platform: rzg2l-cru: rzg2l-video: Fix the comment in rzg2l_cru_start_streaming_vq() Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 30/55] media: rzg2l-cru: csi2: Use local variable for struct device in rzg2l_csi2_probe() Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 31/55] media: rzg2l-cru: csi2: Use devm_pm_runtime_enable() Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 32/55] media: rzg2l-cru: rzg2l-core: Use local variable for struct device in rzg2l_cru_probe() Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 33/55] media: rzg2l-cru: rzg2l-core: Use devm_pm_runtime_enable() Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 34/55] media: rzg2l-cru: csi2: Introduce SoC-specific D-PHY handling Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 35/55] media: rzg2l-cru: csi2: Skip system clock for RZ/V2H(P) SoC Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 36/55] media: rzg2l-cru: csi2: Add support " Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 37/55] media: rzg2l-cru: Add register mapping support Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 38/55] media: rzg2l-cru: Pass resolution limits via OF data Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 39/55] media: rzg2l-cru: Add image_conv offset to " Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 40/55] media: rzg2l-cru: Add IRQ handler " Tommaso Merciai
2025-08-22 11:32   ` Pavel Machek
2025-08-20 16:03 ` [PATCH 6.1.y-cip 41/55] media: rzg2l-cru: Add function pointer to check if FIFO is empty Tommaso Merciai
2025-08-22 11:33   ` Pavel Machek
2025-08-20 16:03 ` [PATCH 6.1.y-cip 42/55] media: rzg2l-cru: Add function pointer to configure CSI Tommaso Merciai
2025-08-20 16:03 ` [PATCH 6.1.y-cip 43/55] media: rzg2l-cru: Add support for RZ/G3E SoC Tommaso Merciai
2025-08-20 16:04 ` [PATCH 6.1.y-cip 44/55] media: rzg2l-cru: Add vidioc_enum_framesizes() Tommaso Merciai
2025-08-20 16:04 ` [PATCH 6.1.y-cip 45/55] arm64: dts: renesas: r9a09g047: Add CRU, CSI2 nodes Tommaso Merciai
2025-08-20 16:04 ` [PATCH 6.1.y-cip 46/55] arm64: dts: renesas: r9a09g047e57-smarc: Add I2C0 pincontrol Tommaso Merciai
2025-08-20 16:04 ` [PATCH 6.1.y-cip 47/55] arm64: dts: renesas: renesas-smarc2: Enable I2C0 node Tommaso Merciai
2025-08-20 16:04 ` [PATCH 6.1.y-cip 48/55] arm64: dts: renesas: r9a09g047e57-smarc: Enable CRU, CSI support Tommaso Merciai
2025-08-20 16:04 ` [PATCH 6.1.y-cip 49/55] media: v4l2-subdev: Refactor events Tommaso Merciai
2025-08-22 15:36   ` Tommaso Merciai [this message]
2025-08-20 16:04 ` [PATCH 6.1.y-cip 50/55] media: i2c: ov5645: Refactor ov5645_set_power_off() Tommaso Merciai
2025-08-22 11:35   ` Pavel Machek
2025-08-20 16:04 ` [PATCH 6.1.y-cip 51/55] media: i2c: ov5645: Use local `dev` pointer for subdev device assignment Tommaso Merciai
2025-08-20 16:04 ` [PATCH 6.1.y-cip 52/55] media: i2c: ov5645: Replace dev_err with dev_err_probe in probe function Tommaso Merciai
2025-08-20 16:04 ` [PATCH 6.1.y-cip 53/55] media: i2c: ov5645: Use v4l2_async_register_subdev_sensor() Tommaso Merciai
2025-08-20 16:04 ` [PATCH 6.1.y-cip 54/55] media: i2c: ov5645: Drop `power_lock` mutex Tommaso Merciai
2025-08-20 16:04 ` [PATCH 6.1.y-cip 55/55] media: i2c: ov5645: Set V4L2_SUBDEV_FL_HAS_EVENTS flag Tommaso Merciai
2025-08-22 11:36   ` Pavel Machek
2025-08-25  6:50     ` Tommaso Merciai
2025-08-26  7:38       ` Pavel Machek
2025-08-22 11:37 ` [PATCH 6.1.y-cip 00/55] Add support for CRU/CSI2 on Renesas RZ/G3E Pavel Machek
2025-08-22 15:08   ` Tommaso Merciai
2025-09-04 19:35 ` Pavel Machek

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=aKiOa-Bv4-IsEjP7@tom-desktop \
    --to=tommaso.merciai.xr@bp.renesas.com \
    --cc=biju.das.jz@bp.renesas.com \
    --cc=cip-dev@lists.cip-project.org \
    --cc=nobuhiro1.iwamatsu@toshiba.co.jp \
    --cc=pavel@denx.de \
    --cc=tomm.merciai@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