Linux Media Controller development
 help / color / mirror / Atom feed
From: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
To: Dave Stevenson <dave.stevenson@raspberrypi.com>
Cc: Tianshu Qiu <tian.shu.qiu@intel.com>,
	 Sakari Ailus <sakari.ailus@linux.intel.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	 linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
	David Heidelberg <david@ixit.cz>,
	 20260414-imx355-24mhz-v1-1-9ae77bc6e7ec@ixit.cz
Subject: Re: [PATCH 10/13] media: imx355: Add support for get_selection
Date: Thu, 7 May 2026 16:42:46 +0200	[thread overview]
Message-ID: <afyjZ-wSfwm4jgnH@zed> (raw)
In-Reply-To: <20260506-media-imx355-v1-10-660685030455@raspberrypi.com>

On Wed, May 06, 2026 at 07:23:48PM +0100, Dave Stevenson wrote:
> Provide all the cropping information via get_selection.

I think this could be simplified if the driver is ported to use the
active state.
See df3ef05b51e02ef9386346288c1e63f366372f5b

I'm afraid usage of the active state is warmly suggested nowadays,
especially if you're adding code that has to deal with ACTIVE/TRY or
initializes per-fh data in open().

Is it too much yak shaving to ask ?

>
> Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
> ---
>  drivers/media/i2c/imx355.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 58 insertions(+)
>
> diff --git a/drivers/media/i2c/imx355.c b/drivers/media/i2c/imx355.c
> index 5a3bfcd0f51c..d8d7cc0ceab9 100644
> --- a/drivers/media/i2c/imx355.c
> +++ b/drivers/media/i2c/imx355.c
> @@ -88,6 +88,11 @@
>  /* number of data lanes */
>  #define IMX355_DATA_LANES		4
>
> +#define IMX355_PIXEL_ARRAY_TOP		0
> +#define IMX355_PIXEL_ARRAY_LEFT		0
> +#define IMX355_PIXEL_ARRAY_WIDTH	3280
> +#define IMX355_PIXEL_ARRAY_HEIGHT	2464
> +
>  struct imx355_reg {
>  	u16 address;
>  	u8 val;
> @@ -671,6 +676,7 @@ static int imx355_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
>  	struct imx355 *imx355 = to_imx355(sd);
>  	struct v4l2_mbus_framefmt *try_fmt =
>  		v4l2_subdev_state_get_format(fh->state, 0);
> +	struct v4l2_rect *crop = v4l2_subdev_state_get_crop(fh->state, 0);
>
>  	mutex_lock(&imx355->mutex);
>
> @@ -680,6 +686,11 @@ static int imx355_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
>  	try_fmt->code = imx355_get_format_code(imx355);
>  	try_fmt->field = V4L2_FIELD_NONE;
>
> +	crop->left = imx355->cur_mode->x_add_start;
> +	crop->top = imx355->cur_mode->y_add_start;
> +	crop->width = imx355->cur_mode->width;
> +	crop->height = imx355->cur_mode->height;
> +
>  	mutex_unlock(&imx355->mutex);
>
>  	return 0;
> @@ -886,6 +897,52 @@ imx355_set_pad_format(struct v4l2_subdev *sd,
>  	return 0;
>  }
>
> +static void
> +__imx355_get_pad_crop(struct imx355 *imx355,
> +		      struct v4l2_subdev_state *sd_state, unsigned int pad,
> +		      enum v4l2_subdev_format_whence which, struct v4l2_rect *r)
> +{
> +	switch (which) {
> +	case V4L2_SUBDEV_FORMAT_TRY:
> +		*r = *v4l2_subdev_state_get_crop(sd_state, pad);
> +		break;
> +	case V4L2_SUBDEV_FORMAT_ACTIVE:
> +		r->left = imx355->cur_mode->x_add_start;
> +		r->top = imx355->cur_mode->y_add_start;
> +		r->width = imx355->cur_mode->width;
> +		r->height = imx355->cur_mode->height;
> +		break;
> +	}
> +}
> +
> +static int imx355_get_selection(struct v4l2_subdev *sd,
> +				struct v4l2_subdev_state *sd_state,
> +				struct v4l2_subdev_selection *sel)
> +{
> +	switch (sel->target) {
> +	case V4L2_SEL_TGT_CROP:
> +		struct imx355 *imx355 = to_imx355(sd);
> +
> +		mutex_lock(&imx355->mutex);
> +		__imx355_get_pad_crop(imx355, sd_state, sel->pad, sel->which,
> +				      &sel->r);
> +		mutex_unlock(&imx355->mutex);
> +
> +		return 0;
> +	case V4L2_SEL_TGT_CROP_DEFAULT:
> +	case V4L2_SEL_TGT_CROP_BOUNDS:
> +	case V4L2_SEL_TGT_NATIVE_SIZE:
> +		sel->r.top = IMX355_PIXEL_ARRAY_TOP;
> +		sel->r.left = IMX355_PIXEL_ARRAY_LEFT;
> +		sel->r.width = IMX355_PIXEL_ARRAY_WIDTH;
> +		sel->r.height = IMX355_PIXEL_ARRAY_HEIGHT;
> +
> +		return 0;
> +	}
> +
> +	return -EINVAL;
> +}
> +
>  /* Start streaming */
>  static int imx355_start_streaming(struct imx355 *imx355)
>  {
> @@ -1062,6 +1119,7 @@ static const struct v4l2_subdev_pad_ops imx355_pad_ops = {
>  	.get_fmt = imx355_get_pad_format,
>  	.set_fmt = imx355_set_pad_format,
>  	.enum_frame_size = imx355_enum_frame_size,
> +	.get_selection = imx355_get_selection,
>  };
>
>  static const struct v4l2_subdev_ops imx355_subdev_ops = {
>
> --
> 2.34.1
>
>

  reply	other threads:[~2026-05-07 14:42 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-06 18:23 [PATCH 00/13] media/imx355: General code cleanups, and adding support for 2 lane operation Dave Stevenson
2026-05-06 18:23 ` [PATCH 01/13] media: imx355: Remove duplicated registers from the mode tables Dave Stevenson
2026-05-07 13:41   ` Jacopo Mondi
2026-05-06 18:23 ` [PATCH 02/13] media: imx355: Remove setting FRM_LENGTH_LINES in the mode regs Dave Stevenson
2026-05-07 13:50   ` Jacopo Mondi
2026-05-06 18:23 ` [PATCH 03/13] media: imx355: Programmatically set the crop parameters for each mode Dave Stevenson
2026-05-07 14:00   ` Jacopo Mondi
2026-05-07 16:01     ` Dave Stevenson
2026-05-06 18:23 ` [PATCH 04/13] media: imx355: Remove the duplication between width/height and x/y_out_size Dave Stevenson
2026-05-06 18:23 ` [PATCH 05/13] media: imx355: Set register LINE_LENGTH_PCK programmatically Dave Stevenson
2026-05-07 14:09   ` Jacopo Mondi
2026-05-07 15:18     ` Dave Stevenson
2026-05-06 18:23 ` [PATCH 06/13] media: imx355: Set binning mode registers programmatically Dave Stevenson
2026-05-07 14:12   ` Jacopo Mondi
2026-05-06 18:23 ` [PATCH 07/13] media: imx355: Remove link_freq_index from each mode as ununsed Dave Stevenson
2026-05-07 14:12   ` Jacopo Mondi
2026-05-06 18:23 ` [PATCH 08/13] media: imx355: pixel_rate never changes, so don't recompute Dave Stevenson
2026-05-07 14:13   ` Jacopo Mondi
2026-05-06 18:23 ` [PATCH 09/13] media: imx355: Remove redundant fll_min, and implement fixed offset Dave Stevenson
2026-05-07 14:29   ` Jacopo Mondi
2026-05-07 15:21     ` Dave Stevenson
2026-05-06 18:23 ` [PATCH 10/13] media: imx355: Add support for get_selection Dave Stevenson
2026-05-07 14:42   ` Jacopo Mondi [this message]
2026-05-07 15:02     ` Dave Stevenson
2026-05-06 18:23 ` [PATCH 11/13] media: imx355: Use pm_runtime autosuspend_delay Dave Stevenson
2026-05-07 14:43   ` Jacopo Mondi
2026-05-06 18:23 ` [PATCH 12/13] media: imx355: Convert to new CCI register access helpers Dave Stevenson
2026-05-07 14:49   ` Jacopo Mondi
2026-05-06 18:23 ` [PATCH 13/13] media: imx355: Support 2 lane readout Dave Stevenson

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=afyjZ-wSfwm4jgnH@zed \
    --to=jacopo.mondi@ideasonboard.com \
    --cc=20260414-imx355-24mhz-v1-1-9ae77bc6e7ec@ixit.cz \
    --cc=dave.stevenson@raspberrypi.com \
    --cc=david@ixit.cz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=sakari.ailus@linux.intel.com \
    --cc=tian.shu.qiu@intel.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