From: Shravan Chippa <[email protected]>
There are some missing reset reg_mode values for the 3840x2160@60
resolution. The camera sensor still works in 3840x2160@60 resolution mode
because of the register reset values. This is an issue when we change the
modes dynamically. As an example, when we change the mode from 1920x1080@30
resolution to 3840x2160@60 resoultion then the mode values will be written
to the registers from the array mode_3840x2160_regs[] which gives the wrong
output which is incorrect resolution.
So add the missing reset values to the mode_3840x2160_regs[].
Signed-off-by: Shravan Chippa <[email protected]>
---
drivers/media/i2c/imx334.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c
index ebacba3059b3..a4549d194cae 100644
--- a/drivers/media/i2c/imx334.c
+++ b/drivers/media/i2c/imx334.c
@@ -166,6 +166,7 @@ static const struct imx334_reg mode_3840x2160_regs[] = {
{0x3288, 0x21},
{0x328a, 0x02},
{0x302c, 0x3c},
+ {0x302d, 0x00},
{0x302e, 0x00},
{0x302f, 0x0f},
{0x3076, 0x70},
@@ -240,7 +241,26 @@ static const struct imx334_reg mode_3840x2160_regs[] = {
{0x3794, 0x7a},
{0x3796, 0xa1},
{0x3e04, 0x0e},
+ {0x319e, 0x00},
{0x3a00, 0x01},
+ {0x3A18, 0xBF},
+ {0x3A19, 0x00},
+ {0x3A1A, 0x67},
+ {0x3A1B, 0x00},
+ {0x3A1C, 0x6F},
+ {0x3A1D, 0x00},
+ {0x3A1E, 0xD7},
+ {0x3A1F, 0x01},
+ {0x3A20, 0x6F},
+ {0x3A21, 0x00},
+ {0x3A22, 0xCF},
+ {0x3A23, 0x00},
+ {0x3A24, 0x6F},
+ {0x3A25, 0x00},
+ {0x3A26, 0xB7},
+ {0x3A27, 0x00},
+ {0x3A28, 0x5F},
+ {0x3A29, 0x00},
};
/* Supported sensor mode configurations */
--
2.34.1
Hi Shravan
On Fri, Jan 06, 2023 at 12:59:29PM +0530, shravan kumar wrote:
> From: Shravan Chippa <[email protected]>
>
> There are some missing reset reg_mode values for the 3840x2160@60
> resolution. The camera sensor still works in 3840x2160@60 resolution mode
> because of the register reset values. This is an issue when we change the
> modes dynamically. As an example, when we change the mode from 1920x1080@30
> resolution to 3840x2160@60 resoultion then the mode values will be written
^ rogue space
> to the registers from the array mode_3840x2160_regs[] which gives the wrong
> output which is incorrect resolution.
>
> So add the missing reset values to the mode_3840x2160_regs[].
>
Are you resetting the registers to their default values, or are they
actually tuned for 3840x2160 operations ?
> Signed-off-by: Shravan Chippa <[email protected]>
> ---
> drivers/media/i2c/imx334.c | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
> diff --git a/drivers/media/i2c/imx334.c b/drivers/media/i2c/imx334.c
> index ebacba3059b3..a4549d194cae 100644
> --- a/drivers/media/i2c/imx334.c
> +++ b/drivers/media/i2c/imx334.c
> @@ -166,6 +166,7 @@ static const struct imx334_reg mode_3840x2160_regs[] = {
> {0x3288, 0x21},
> {0x328a, 0x02},
> {0x302c, 0x3c},
> + {0x302d, 0x00},
> {0x302e, 0x00},
> {0x302f, 0x0f},
> {0x3076, 0x70},
> @@ -240,7 +241,26 @@ static const struct imx334_reg mode_3840x2160_regs[] = {
> {0x3794, 0x7a},
> {0x3796, 0xa1},
> {0x3e04, 0x0e},
> + {0x319e, 0x00},
> {0x3a00, 0x01},
> + {0x3A18, 0xBF},
> + {0x3A19, 0x00},
> + {0x3A1A, 0x67},
> + {0x3A1B, 0x00},
> + {0x3A1C, 0x6F},
> + {0x3A1D, 0x00},
> + {0x3A1E, 0xD7},
> + {0x3A1F, 0x01},
> + {0x3A20, 0x6F},
> + {0x3A21, 0x00},
> + {0x3A22, 0xCF},
> + {0x3A23, 0x00},
> + {0x3A24, 0x6F},
> + {0x3A25, 0x00},
> + {0x3A26, 0xB7},
> + {0x3A27, 0x00},
> + {0x3A28, 0x5F},
> + {0x3A29, 0x00},
Nit: this is a small bunch of registers, and all the rest of the table
uses lowercase. Please do the same for sake of consistency.
Thanks
j
> };
>
> /* Supported sensor mode configurations */
> --
> 2.34.1
>