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 06/13] media: imx355: Set binning mode registers programmatically
Date: Thu, 7 May 2026 16:12:23 +0200 [thread overview]
Message-ID: <afydnNJzb0i6lu8D@zed> (raw)
In-Reply-To: <20260506-media-imx355-v1-6-660685030455@raspberrypi.com>
Hi Dave
On Wed, May 06, 2026 at 07:23:44PM +0100, Dave Stevenson wrote:
> Store the binning mode in the mode structure and set the registers
> based on that, rather than having the bare register writes spelled
> out for each mode.
Isn't it trivial to calculate this from the (analog crop / visible
size) ratios ?
>
> Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
> ---
> drivers/media/i2c/imx355.c | 73 ++++++++++++++++++++--------------------------
> 1 file changed, 31 insertions(+), 42 deletions(-)
>
> diff --git a/drivers/media/i2c/imx355.c b/drivers/media/i2c/imx355.c
> index 56a82f37709e..422454e529a7 100644
> --- a/drivers/media/i2c/imx355.c
> +++ b/drivers/media/i2c/imx355.c
> @@ -73,6 +73,10 @@
> #define IMX355_TEST_PATTERN_GRAY_COLOR_BARS 3
> #define IMX355_TEST_PATTERN_PN9 4
>
> +#define IMX355_REG_BINNING_MODE 0x0900
> +#define IMX355_REG_BINNING_TYPE 0x0901
> +#define IMX355_REG_BINNING_WEIGHTING 0x0902
> +
> /* Flip Control */
> #define IMX355_REG_ORIENTATION 0x0101
>
> @@ -117,6 +121,7 @@ struct imx355_mode {
> u16 y_add_start;
> u16 x_add_end;
> u16 y_add_end;
> + u8 binning_mode;
> };
>
> struct imx355_clk_params {
> @@ -269,113 +274,71 @@ static const struct imx355_reg_list imx355_global_setting = {
> };
>
> static const struct imx355_reg mode_3268x2448_regs[] = {
> - { 0x0900, 0x00 },
> - { 0x0901, 0x11 },
> - { 0x0902, 0x00 },
> { 0x0700, 0x00 },
> { 0x0701, 0x10 },
> };
>
> static const struct imx355_reg mode_3264x2448_regs[] = {
> - { 0x0900, 0x00 },
> - { 0x0901, 0x11 },
> - { 0x0902, 0x00 },
> { 0x0700, 0x00 },
> { 0x0701, 0x10 },
> };
>
> static const struct imx355_reg mode_3280x2464_regs[] = {
> - { 0x0900, 0x00 },
> - { 0x0901, 0x11 },
> - { 0x0902, 0x00 },
> { 0x0700, 0x00 },
> { 0x0701, 0x10 },
> };
>
> static const struct imx355_reg mode_1940x1096_regs[] = {
> - { 0x0900, 0x00 },
> - { 0x0901, 0x11 },
> - { 0x0902, 0x00 },
> { 0x0700, 0x00 },
> { 0x0701, 0x10 },
> };
>
> static const struct imx355_reg mode_1936x1096_regs[] = {
> - { 0x0900, 0x00 },
> - { 0x0901, 0x11 },
> - { 0x0902, 0x00 },
> { 0x0700, 0x00 },
> { 0x0701, 0x10 },
> };
>
> static const struct imx355_reg mode_1924x1080_regs[] = {
> - { 0x0900, 0x00 },
> - { 0x0901, 0x11 },
> - { 0x0902, 0x00 },
> { 0x0700, 0x00 },
> { 0x0701, 0x10 },
> };
>
> static const struct imx355_reg mode_1920x1080_regs[] = {
> - { 0x0900, 0x00 },
> - { 0x0901, 0x11 },
> - { 0x0902, 0x00 },
> { 0x0700, 0x00 },
> { 0x0701, 0x10 },
> };
>
> static const struct imx355_reg mode_1640x1232_regs[] = {
> - { 0x0900, 0x01 },
> - { 0x0901, 0x22 },
> - { 0x0902, 0x00 },
> { 0x0700, 0x00 },
> { 0x0701, 0x10 },
> };
>
> static const struct imx355_reg mode_1640x922_regs[] = {
> - { 0x0900, 0x01 },
> - { 0x0901, 0x22 },
> - { 0x0902, 0x00 },
> { 0x0700, 0x00 },
> { 0x0701, 0x10 },
> };
>
> static const struct imx355_reg mode_1300x736_regs[] = {
> - { 0x0900, 0x01 },
> - { 0x0901, 0x22 },
> - { 0x0902, 0x00 },
> { 0x0700, 0x00 },
> { 0x0701, 0x10 },
> };
>
> static const struct imx355_reg mode_1296x736_regs[] = {
> - { 0x0900, 0x01 },
> - { 0x0901, 0x22 },
> - { 0x0902, 0x00 },
> { 0x0700, 0x00 },
> { 0x0701, 0x10 },
> };
>
> static const struct imx355_reg mode_1284x720_regs[] = {
> - { 0x0900, 0x01 },
> - { 0x0901, 0x22 },
> - { 0x0902, 0x00 },
> { 0x0700, 0x00 },
> { 0x0701, 0x10 },
> };
>
> static const struct imx355_reg mode_1280x720_regs[] = {
> - { 0x0900, 0x01 },
> - { 0x0901, 0x22 },
> - { 0x0902, 0x00 },
> { 0x0700, 0x00 },
> { 0x0701, 0x10 },
> };
>
> static const struct imx355_reg mode_820x616_regs[] = {
> - { 0x0900, 0x01 },
> - { 0x0901, 0x44 },
> - { 0x0902, 0x00 },
> { 0x0700, 0x02 },
> { 0x0701, 0x78 },
> };
> @@ -413,6 +376,7 @@ static const struct imx355_mode supported_modes[] = {
> .y_add_start = 0x0000,
> .x_add_end = 0x0ccf,
> .y_add_end = 0x099f,
> + .binning_mode = 0x11,
> },
> {
> .width = 3268,
> @@ -429,6 +393,7 @@ static const struct imx355_mode supported_modes[] = {
> .y_add_start = 0x0008,
> .x_add_end = 0x0ccb,
> .y_add_end = 0x997,
> + .binning_mode = 0x11,
> },
> {
> .width = 3264,
> @@ -445,6 +410,7 @@ static const struct imx355_mode supported_modes[] = {
> .y_add_start = 0x0008,
> .x_add_end = 0x0cc7,
> .y_add_end = 0x0997,
> + .binning_mode = 0x11,
> },
> {
> .width = 1940,
> @@ -461,6 +427,7 @@ static const struct imx355_mode supported_modes[] = {
> .y_add_start = 0x02ac,
> .x_add_end = 0x0a33,
> .y_add_end = 0x06f3,
> + .binning_mode = 0x11,
> },
> {
> .width = 1936,
> @@ -477,6 +444,7 @@ static const struct imx355_mode supported_modes[] = {
> .y_add_start = 0x02ac,
> .x_add_end = 0x0a2f,
> .y_add_end = 0x06f3,
> + .binning_mode = 0x11,
> },
> {
> .width = 1924,
> @@ -493,6 +461,7 @@ static const struct imx355_mode supported_modes[] = {
> .y_add_start = 0x02b4,
> .x_add_end = 0x0a2b,
> .y_add_end = 0x06eb,
> + .binning_mode = 0x11,
> },
> {
> .width = 1920,
> @@ -509,6 +478,7 @@ static const struct imx355_mode supported_modes[] = {
> .y_add_start = 0x02b4,
> .x_add_end = 0x0a27,
> .y_add_end = 0x06eb,
> + .binning_mode = 0x11,
> },
> {
> .width = 1640,
> @@ -525,6 +495,7 @@ static const struct imx355_mode supported_modes[] = {
> .y_add_start = 0x0000,
> .x_add_end = 0x0ccf,
> .y_add_end = 0x099f,
> + .binning_mode = 0x22,
> },
> {
> .width = 1640,
> @@ -541,6 +512,7 @@ static const struct imx355_mode supported_modes[] = {
> .y_add_start = 0x0130,
> .x_add_end = 0x0ccf,
> .y_add_end = 0x0863,
> + .binning_mode = 0x22,
> },
> {
> .width = 1300,
> @@ -557,6 +529,7 @@ static const struct imx355_mode supported_modes[] = {
> .y_add_start = 0x01f0,
> .x_add_end = 0x0b7f,
> .y_add_end = 0x07af,
> + .binning_mode = 0x22,
> },
> {
> .width = 1296,
> @@ -573,6 +546,7 @@ static const struct imx355_mode supported_modes[] = {
> .y_add_start = 0x01f0,
> .x_add_end = 0x0b77,
> .y_add_end = 0x07af,
> + .binning_mode = 0x22,
> },
> {
> .width = 1284,
> @@ -589,6 +563,7 @@ static const struct imx355_mode supported_modes[] = {
> .y_add_start = 0x0200,
> .x_add_end = 0x0b6f,
> .y_add_end = 0x079f,
> + .binning_mode = 0x22,
> },
> {
> .width = 1280,
> @@ -605,6 +580,7 @@ static const struct imx355_mode supported_modes[] = {
> .y_add_start = 0x0200,
> .x_add_end = 0x0b67,
> .y_add_end = 0x079f,
> + .binning_mode = 0x22,
> },
> {
> .width = 820,
> @@ -621,6 +597,7 @@ static const struct imx355_mode supported_modes[] = {
> .y_add_start = 0x0000,
> .x_add_end = 0x0ccf,
> .y_add_end = 0x099f,
> + .binning_mode = 0x44,
> },
> };
>
> @@ -997,6 +974,18 @@ static int imx355_start_streaming(struct imx355 *imx355)
> if (ret)
> return ret;
>
> + ret = imx355_write_reg(imx355, IMX355_REG_BINNING_MODE, 1,
> + mode->binning_mode == 0x11 ? 0x00 : 0x01);
> + if (ret)
> + return ret;
> + ret = imx355_write_reg(imx355, IMX355_REG_BINNING_TYPE, 1,
> + mode->binning_mode);
> + if (ret)
> + return ret;
> + ret = imx355_write_reg(imx355, IMX355_REG_BINNING_WEIGHTING, 1, 0x00);
> + if (ret)
> + return ret;
> +
> /* Set PLL registers for the external clock frequency */
> ret = imx355_write_reg(imx355, IMX355_REG_EXTCLK_FREQ, 2,
> imx355->clk_params->extclk_freq);
>
> --
> 2.34.1
>
>
next prev parent reply other threads:[~2026-05-07 14:12 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 [this message]
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
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=afydnNJzb0i6lu8D@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.