All of lore.kernel.org
 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 09/13] media: imx355: Remove redundant fll_min, and implement fixed offset
Date: Thu, 7 May 2026 16:29:30 +0200	[thread overview]
Message-ID: <afyhY2WmfjZ2OxrY@zed> (raw)
In-Reply-To: <20260506-media-imx355-v1-9-660685030455@raspberrypi.com>

Hi Dave

On Wed, May 06, 2026 at 07:23:47PM +0100, Dave Stevenson wrote:
> fll_min (Frame Length Lines) is set to the same value as fll_def
> for all modes, which makes it redundant.
>
> The actual value is also erroneous as sensor works in all the
> defined modes with FLL set at the mode height + 20 lines, so
> set the vblank control minimum to 20 rather than varying it.
> This also improves the maximum frame rate achievable.
>
> Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
> ---
>  drivers/media/i2c/imx355.c | 27 +++++----------------------
>  1 file changed, 5 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/media/i2c/imx355.c b/drivers/media/i2c/imx355.c
> index 12005bc40f36..5a3bfcd0f51c 100644
> --- a/drivers/media/i2c/imx355.c
> +++ b/drivers/media/i2c/imx355.c
> @@ -33,6 +33,8 @@
>  /* V_TIMING internal */
>  #define IMX355_REG_FLL			0x0340
>  #define IMX355_FLL_MAX			0xffff
> +/* Number of lines above frame height that are required. */
> +#define IMX355_FLL_OFFSET		20

I would have called it FFL_MIN, but it's probably just a matter of
taste
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>

>
>  #define IMX355_REG_LLP			0x0342
>  #define IMX355_LLP_MAX			0xffff
> @@ -105,7 +107,6 @@ struct imx355_mode {
>
>  	/* V-timing */
>  	u32 fll_def;
> -	u32 fll_min;
>
>  	/* H-timing */
>  	u32 llp;
> @@ -360,7 +361,6 @@ static const struct imx355_mode supported_modes[] = {
>  		.width = 3280,
>  		.height = 2464,
>  		.fll_def = 2615,
> -		.fll_min = 2615,
>  		.llp = 3672,
>  		.reg_list = {
>  			.num_of_regs = ARRAY_SIZE(mode_3280x2464_regs),
> @@ -376,7 +376,6 @@ static const struct imx355_mode supported_modes[] = {
>  		.width = 3268,
>  		.height = 2448,
>  		.fll_def = 2615,
> -		.fll_min = 2615,
>  		.llp = 3672,
>  		.reg_list = {
>  			.num_of_regs = ARRAY_SIZE(mode_3268x2448_regs),
> @@ -392,7 +391,6 @@ static const struct imx355_mode supported_modes[] = {
>  		.width = 3264,
>  		.height = 2448,
>  		.fll_def = 2615,
> -		.fll_min = 2615,
>  		.llp = 3672,
>  		.reg_list = {
>  			.num_of_regs = ARRAY_SIZE(mode_3264x2448_regs),
> @@ -408,7 +406,6 @@ static const struct imx355_mode supported_modes[] = {
>  		.width = 1940,
>  		.height = 1096,
>  		.fll_def = 1306,
> -		.fll_min = 1306,
>  		.llp = 3672,
>  		.reg_list = {
>  			.num_of_regs = ARRAY_SIZE(mode_1940x1096_regs),
> @@ -424,7 +421,6 @@ static const struct imx355_mode supported_modes[] = {
>  		.width = 1936,
>  		.height = 1096,
>  		.fll_def = 1306,
> -		.fll_min = 1306,
>  		.llp = 3672,
>  		.reg_list = {
>  			.num_of_regs = ARRAY_SIZE(mode_1936x1096_regs),
> @@ -440,7 +436,6 @@ static const struct imx355_mode supported_modes[] = {
>  		.width = 1924,
>  		.height = 1080,
>  		.fll_def = 1306,
> -		.fll_min = 1306,
>  		.llp = 3672,
>  		.reg_list = {
>  			.num_of_regs = ARRAY_SIZE(mode_1924x1080_regs),
> @@ -456,7 +451,6 @@ static const struct imx355_mode supported_modes[] = {
>  		.width = 1920,
>  		.height = 1080,
>  		.fll_def = 1306,
> -		.fll_min = 1306,
>  		.llp = 3672,
>  		.reg_list = {
>  			.num_of_regs = ARRAY_SIZE(mode_1920x1080_regs),
> @@ -472,7 +466,6 @@ static const struct imx355_mode supported_modes[] = {
>  		.width = 1640,
>  		.height = 1232,
>  		.fll_def = 1306,
> -		.fll_min = 1306,
>  		.llp = 1836,
>  		.reg_list = {
>  			.num_of_regs = ARRAY_SIZE(mode_1640x1232_regs),
> @@ -488,7 +481,6 @@ static const struct imx355_mode supported_modes[] = {
>  		.width = 1640,
>  		.height = 922,
>  		.fll_def = 1306,
> -		.fll_min = 1306,
>  		.llp = 1836,
>  		.reg_list = {
>  			.num_of_regs = ARRAY_SIZE(mode_1640x922_regs),
> @@ -504,7 +496,6 @@ static const struct imx355_mode supported_modes[] = {
>  		.width = 1300,
>  		.height = 736,
>  		.fll_def = 1306,
> -		.fll_min = 1306,
>  		.llp = 1836,
>  		.reg_list = {
>  			.num_of_regs = ARRAY_SIZE(mode_1300x736_regs),
> @@ -520,7 +511,6 @@ static const struct imx355_mode supported_modes[] = {
>  		.width = 1296,
>  		.height = 736,
>  		.fll_def = 1306,
> -		.fll_min = 1306,
>  		.llp = 1836,
>  		.reg_list = {
>  			.num_of_regs = ARRAY_SIZE(mode_1296x736_regs),
> @@ -536,7 +526,6 @@ static const struct imx355_mode supported_modes[] = {
>  		.width = 1284,
>  		.height = 720,
>  		.fll_def = 1306,
> -		.fll_min = 1306,
>  		.llp = 1836,
>  		.reg_list = {
>  			.num_of_regs = ARRAY_SIZE(mode_1284x720_regs),
> @@ -552,7 +541,6 @@ static const struct imx355_mode supported_modes[] = {
>  		.width = 1280,
>  		.height = 720,
>  		.fll_def = 1306,
> -		.fll_min = 1306,
>  		.llp = 1836,
>  		.reg_list = {
>  			.num_of_regs = ARRAY_SIZE(mode_1280x720_regs),
> @@ -568,7 +556,6 @@ static const struct imx355_mode supported_modes[] = {
>  		.width = 820,
>  		.height = 616,
>  		.fll_def = 652,
> -		.fll_min = 652,
>  		.llp = 3672,
>  		.reg_list = {
>  			.num_of_regs = ARRAY_SIZE(mode_820x616_regs),
> @@ -857,7 +844,6 @@ imx355_set_pad_format(struct v4l2_subdev *sd,
>  	const struct imx355_mode *mode;
>  	struct v4l2_mbus_framefmt *framefmt;
>  	s32 vblank_def;
> -	s32 vblank_min;
>  	s64 h_blank;
>  	u32 height;
>
> @@ -882,10 +868,9 @@ imx355_set_pad_format(struct v4l2_subdev *sd,
>  		/* Update limits and set FPS to default */
>  		height = imx355->cur_mode->height;
>  		vblank_def = imx355->cur_mode->fll_def - height;
> -		vblank_min = imx355->cur_mode->fll_min - height;
>  		height = IMX355_FLL_MAX - height;

re-using 'height' here is not nice, but I understand it was there
already

> -		__v4l2_ctrl_modify_range(imx355->vblank, vblank_min, height, 1,
> -					 vblank_def);
> +		__v4l2_ctrl_modify_range(imx355->vblank, IMX355_FLL_OFFSET,
> +					 height, 1, vblank_def);
>  		__v4l2_ctrl_s_ctrl(imx355->vblank, vblank_def);
>  		h_blank = mode->llp - imx355->cur_mode->width;
>  		/*
> @@ -1146,7 +1131,6 @@ static int imx355_init_controls(struct imx355 *imx355)
>  	struct v4l2_ctrl_handler *ctrl_hdlr;
>  	s64 exposure_max;
>  	s64 vblank_def;
> -	s64 vblank_min;
>  	s64 hblank;
>  	u64 pixel_rate;
>  	const struct imx355_mode *mode;
> @@ -1176,9 +1160,8 @@ static int imx355_init_controls(struct imx355 *imx355)
>  	/* Initialize vblank/hblank/exposure parameters based on current mode */
>  	mode = imx355->cur_mode;
>  	vblank_def = mode->fll_def - mode->height;
> -	vblank_min = mode->fll_min - mode->height;
>  	imx355->vblank = v4l2_ctrl_new_std(ctrl_hdlr, &imx355_ctrl_ops,
> -					   V4L2_CID_VBLANK, vblank_min,
> +					   V4L2_CID_VBLANK, IMX355_FLL_OFFSET,
>  					   IMX355_FLL_MAX - mode->height,
>  					   1, vblank_def);
>
>
> --
> 2.34.1
>
>

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

Thread overview: 31+ 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 [this message]
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
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
2026-05-13 18:33   ` Richard Acayan
2026-05-14 10:37     ` 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=afyhY2WmfjZ2OxrY@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 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.