From: Dave Stevenson <dave.stevenson@raspberrypi.com>
To: Sakari Ailus <sakari.ailus@linux.intel.com>,
linux-media@vger.kernel.org, Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Conor Dooley <conor+dt@kernel.org>,
devicetree@vger.kernel.org
Cc: Dave Stevenson <dave.stevenson@raspberrypi.com>
Subject: [PATCH 02/21] media: i2c: imx258: Make image geometry meet sensor requirements
Date: Tue, 30 May 2023 18:29:41 +0100 [thread overview]
Message-ID: <20230530173000.3060865-3-dave.stevenson@raspberrypi.com> (raw)
In-Reply-To: <20230530173000.3060865-1-dave.stevenson@raspberrypi.com>
The output image is defined as being 4208x3118 pixels in size.
Y_ADD_STA register was set to 0, and Y_ADD_END to 3118, giving
3119 lines total.
The datasheet lists a requirement for Y_ADD_STA to be a multiple
of a power of 2 depending on binning/scaling mode (2 for full pixel,
4 for x2-bin/scale, 8 for (x2-bin)+(x2-subsample) or x4-bin, or 16
for (x4-bin)+(x2-subsample)).
(Y_ADD_END – Y_ADD_STA + 1) also has to be a similar power of 2.
The current configuration for the full res modes breaks that second
requirement, and we can't increase Y_ADD_STA to 1 to retain exactly
the same field of view as that then breaks the first requirement.
For the binned modes, they are worse off as 3118 is not a multiple of
4.
Increase the main mode to 4208x3120 so that it is the same FOV as the
binned modes, with Y_ADD_STA at 0.
Fix Y_ADD_STA and Y_ADD_END for the binned modes so that they meet the
sensor requirements.
This does change the Bayer order as the default configuration is for
H&V flips to be enabled, so readout is from Y_STA_END to Y_ADD_STA,
and this patch has changed Y_STA_END.
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
---
drivers/media/i2c/imx258.c | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/drivers/media/i2c/imx258.c b/drivers/media/i2c/imx258.c
index 6028579393b5..946b1a12971d 100644
--- a/drivers/media/i2c/imx258.c
+++ b/drivers/media/i2c/imx258.c
@@ -111,7 +111,7 @@ struct imx258_mode {
struct imx258_reg_list reg_list;
};
-/* 4208x3118 needs 1267Mbps/lane, 4 lanes */
+/* 4208x3120 needs 1267Mbps/lane, 4 lanes */
static const struct imx258_reg mipi_data_rate_1267mbps[] = {
{ 0x0301, 0x05 },
{ 0x0303, 0x02 },
@@ -148,7 +148,7 @@ static const struct imx258_reg mipi_data_rate_640mbps[] = {
{ 0x0823, 0x00 },
};
-static const struct imx258_reg mode_4208x3118_regs[] = {
+static const struct imx258_reg mode_4208x3120_regs[] = {
{ 0x0136, 0x13 },
{ 0x0137, 0x33 },
{ 0x3051, 0x00 },
@@ -210,7 +210,7 @@ static const struct imx258_reg mode_4208x3118_regs[] = {
{ 0x0348, 0x10 },
{ 0x0349, 0x6F },
{ 0x034A, 0x0C },
- { 0x034B, 0x2E },
+ { 0x034B, 0x2F },
{ 0x0381, 0x01 },
{ 0x0383, 0x01 },
{ 0x0385, 0x01 },
@@ -329,7 +329,7 @@ static const struct imx258_reg mode_2104_1560_regs[] = {
{ 0x0348, 0x10 },
{ 0x0349, 0x6F },
{ 0x034A, 0x0C },
- { 0x034B, 0x2E },
+ { 0x034B, 0x2F },
{ 0x0381, 0x01 },
{ 0x0383, 0x01 },
{ 0x0385, 0x01 },
@@ -448,7 +448,7 @@ static const struct imx258_reg mode_1048_780_regs[] = {
{ 0x0348, 0x10 },
{ 0x0349, 0x6F },
{ 0x034A, 0x0C },
- { 0x034B, 0x2E },
+ { 0x034B, 0x2F },
{ 0x0381, 0x01 },
{ 0x0383, 0x01 },
{ 0x0385, 0x01 },
@@ -562,12 +562,12 @@ static const struct imx258_link_freq_config link_freq_configs[] = {
static const struct imx258_mode supported_modes[] = {
{
.width = 4208,
- .height = 3118,
+ .height = 3120,
.vts_def = IMX258_VTS_30FPS,
.vts_min = IMX258_VTS_30FPS,
.reg_list = {
- .num_of_regs = ARRAY_SIZE(mode_4208x3118_regs),
- .regs = mode_4208x3118_regs,
+ .num_of_regs = ARRAY_SIZE(mode_4208x3120_regs),
+ .regs = mode_4208x3120_regs,
},
.link_freq_index = IMX258_LINK_FREQ_1267MBPS,
},
@@ -710,7 +710,7 @@ static int imx258_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
/* Initialize try_fmt */
try_fmt->width = supported_modes[0].width;
try_fmt->height = supported_modes[0].height;
- try_fmt->code = MEDIA_BUS_FMT_SGRBG10_1X10;
+ try_fmt->code = MEDIA_BUS_FMT_SBGGR10_1X10;
try_fmt->field = V4L2_FIELD_NONE;
return 0;
@@ -822,7 +822,7 @@ static int imx258_enum_mbus_code(struct v4l2_subdev *sd,
if (code->index > 0)
return -EINVAL;
- code->code = MEDIA_BUS_FMT_SGRBG10_1X10;
+ code->code = MEDIA_BUS_FMT_SBGGR10_1X10;
return 0;
}
@@ -834,7 +834,7 @@ static int imx258_enum_frame_size(struct v4l2_subdev *sd,
if (fse->index >= ARRAY_SIZE(supported_modes))
return -EINVAL;
- if (fse->code != MEDIA_BUS_FMT_SGRBG10_1X10)
+ if (fse->code != MEDIA_BUS_FMT_SBGGR10_1X10)
return -EINVAL;
fse->min_width = supported_modes[fse->index].width;
@@ -850,7 +850,7 @@ static void imx258_update_pad_format(const struct imx258_mode *mode,
{
fmt->format.width = mode->width;
fmt->format.height = mode->height;
- fmt->format.code = MEDIA_BUS_FMT_SGRBG10_1X10;
+ fmt->format.code = MEDIA_BUS_FMT_SBGGR10_1X10;
fmt->format.field = V4L2_FIELD_NONE;
}
@@ -898,7 +898,7 @@ static int imx258_set_pad_format(struct v4l2_subdev *sd,
mutex_lock(&imx258->mutex);
/* Only one raw bayer(GBRG) order is supported */
- fmt->format.code = MEDIA_BUS_FMT_SGRBG10_1X10;
+ fmt->format.code = MEDIA_BUS_FMT_SBGGR10_1X10;
mode = v4l2_find_nearest_size(supported_modes,
ARRAY_SIZE(supported_modes), width, height,
--
2.25.1
next prev parent reply other threads:[~2023-05-30 17:30 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-30 17:29 [PATCH 00/21] imx258 improvements series Dave Stevenson
2023-05-30 17:29 ` [PATCH 01/21] media: i2c: imx258: Remove unused defines Dave Stevenson
2023-05-31 15:08 ` Jacopo Mondi
2023-05-30 17:29 ` Dave Stevenson [this message]
2023-05-31 15:09 ` [PATCH 02/21] media: i2c: imx258: Make image geometry meet sensor requirements Jacopo Mondi
2023-05-30 17:29 ` [PATCH 03/21] media: i2c: imx258: Disable digital cropping on binned modes Dave Stevenson
2023-05-31 15:02 ` Jacopo Mondi
2023-05-30 17:29 ` [PATCH 04/21] media: i2c: imx258: Remove redundant I2C writes Dave Stevenson
2023-05-31 15:10 ` Jacopo Mondi
2023-05-30 17:29 ` [PATCH 05/21] media: i2c: imx258: Add regulator control Dave Stevenson
2023-05-31 15:11 ` Jacopo Mondi
2023-05-31 15:26 ` Dave Stevenson
2023-05-30 17:29 ` [PATCH 06/21] media: i2c: imx258: Make V4L2_CID_VBLANK configurable Dave Stevenson
2023-05-31 15:16 ` Jacopo Mondi
2023-05-31 15:33 ` Dave Stevenson
2023-05-30 17:29 ` [PATCH 07/21] media: i2c: imx258: Split out common registers from the mode based ones Dave Stevenson
2023-05-31 15:26 ` Jacopo Mondi
2023-05-30 17:29 ` [PATCH 08/21] media: i2c: imx258: Add support for 24MHz clock Dave Stevenson
2023-06-02 12:59 ` Jacopo Mondi
2023-05-30 17:29 ` [PATCH 09/21] media: i2c: imx258: Add support for running on 2 CSI data lanes Dave Stevenson
2023-05-30 17:37 ` Dave Stevenson
2023-05-31 8:07 ` kernel test robot
2023-06-02 13:23 ` Jacopo Mondi
2023-06-02 17:46 ` Dave Stevenson
2023-05-30 17:29 ` [PATCH 10/21] media: i2c: imx258: Follow normal V4L2 behaviours for clipping exposure Dave Stevenson
2023-05-31 15:27 ` Jacopo Mondi
2023-05-30 17:29 ` [PATCH 11/21] media: i2c: imx258: Add get_selection for pixel array information Dave Stevenson
2023-06-02 13:24 ` Jacopo Mondi
2023-05-30 17:29 ` [PATCH 12/21] media: i2c: imx258: Allow configuration of clock lane behaviour Dave Stevenson
2023-06-02 13:26 ` Jacopo Mondi
2023-06-02 15:18 ` Dave Stevenson
2023-05-30 17:29 ` [PATCH 13/21] media: i2c: imx258: Correct max FRM_LENGTH_LINES value Dave Stevenson
2023-06-02 13:33 ` Jacopo Mondi
2023-05-30 17:29 ` [PATCH 14/21] media: i2c: imx258: Add support for long exposure modes Dave Stevenson
2023-06-02 13:38 ` Jacopo Mondi
2023-06-02 17:12 ` Dave Stevenson
2023-05-30 17:29 ` [PATCH 15/21] media: i2c: imx258: Issue reset before starting streaming Dave Stevenson
2023-06-02 13:42 ` Jacopo Mondi
2023-05-30 17:29 ` [PATCH 16/21] media: i2c: imx258: Set pixel_rate range to the same as the value Dave Stevenson
2023-06-02 13:44 ` Jacopo Mondi
2023-05-30 17:29 ` [PATCH 17/21] media: i2c: imx258: Support faster pixel rate on binned modes Dave Stevenson
2023-05-30 17:29 ` [PATCH 18/21] dt-bindings: media: imx258: Rename to include vendor prefix Dave Stevenson
2023-05-30 17:35 ` Conor Dooley
2023-05-30 17:29 ` [PATCH 19/21] dt-bindings: media: imx258: Add alternate compatible strings Dave Stevenson
2023-05-30 17:38 ` Conor Dooley
2023-05-30 17:48 ` Dave Stevenson
2023-05-30 19:36 ` Conor Dooley
2023-05-30 17:29 ` [PATCH 20/21] media: i2c: imx258: Change register settings for variants of the sensor Dave Stevenson
2023-06-02 13:48 ` Jacopo Mondi
2023-06-02 14:30 ` Dave Stevenson
2023-05-30 17:30 ` [PATCH 21/21] media: i2c: imx258: Make HFLIP and VFLIP controls writable Dave Stevenson
2023-06-02 13:58 ` Jacopo Mondi
2023-06-02 14:42 ` Dave Stevenson
2023-07-18 12:08 ` [PATCH 00/21] imx258 improvements series Arnaud Ferraris
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=20230530173000.3060865-3-dave.stevenson@raspberrypi.com \
--to=dave.stevenson@raspberrypi.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-media@vger.kernel.org \
--cc=robh+dt@kernel.org \
--cc=sakari.ailus@linux.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;
as well as URLs for NNTP newsgroup(s).