diff mbox series

[3/4] media: i2c: imx415: Add missing CSI configurations

Message ID 20250219094637.607615-3-eagle.alexander923@gmail.com
State New
Headers show
Series [1/4] media: i2c: imx415: Add get_mbus_config() pad operation support | expand

Commit Message

Alexander Shiyan Feb. 19, 2025, 9:46 a.m. UTC
Currently, not all variants for different lane rates are handled in the driver.
This patch fills in the remaining possible CSI configurations for 2-lane mode.

Signed-off-by: Alexander Shiyan <eagle.alexander923@gmail.com>
---
 drivers/media/i2c/imx415.c | 97 +++++++++++++++++++++++++++++++-------
 1 file changed, 80 insertions(+), 17 deletions(-)

Comments

Dave Stevenson Feb. 20, 2025, 4:57 p.m. UTC | #1
Hi Alexander

On Wed, 19 Feb 2025 at 09:56, Alexander Shiyan
<eagle.alexander923@gmail.com> wrote:
>
> Currently, not all variants for different lane rates are handled in the driver.
> This patch fills in the remaining possible CSI configurations for 2-lane mode.

This patch fills in the remaining CSI configurations supported in both
2 and 4 lane modes.

Otherwise I've checked the register settings against the datasheet I
have, and they all appear to match.

Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>

>
> Signed-off-by: Alexander Shiyan <eagle.alexander923@gmail.com>
> ---
>  drivers/media/i2c/imx415.c | 97 +++++++++++++++++++++++++++++++-------
>  1 file changed, 80 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/media/i2c/imx415.c b/drivers/media/i2c/imx415.c
> index c5beba4da18b..83b7929455b2 100644
> --- a/drivers/media/i2c/imx415.c
> +++ b/drivers/media/i2c/imx415.c
> @@ -109,8 +109,8 @@ static const char *const imx415_supply_names[] = {
>   * and converts them to link frequencies by a factor of two when needed.
>   */
>  static const s64 link_freq_menu_items[] = {
> -       594000000 / 2,  720000000 / 2,  891000000 / 2,
> -       1440000000 / 2, 1485000000 / 2,
> +       594000000 / 2,  720000000 / 2,  891000000 / 2,  1440000000 / 2,
> +       1485000000 / 2, 1782000000 / 2, 2079000000 / 2, 2376000000 / 2,
>  };
>
>  struct imx415_clk_params {
> @@ -453,6 +453,19 @@ static const struct imx415_clk_params imx415_clk_params[] = {
>         },
>  };
>
> +/* 594 Mbps CSI configuration */
> +static const struct cci_reg_sequence imx415_linkrate_594mbps[] = {
> +       { IMX415_TCLKPOST, 0x0067 },
> +       { IMX415_TCLKPREPARE, 0x0027 },
> +       { IMX415_TCLKTRAIL, 0x0027 },
> +       { IMX415_TCLKZERO, 0x00B7 },
> +       { IMX415_THSPREPARE, 0x002F },
> +       { IMX415_THSZERO, 0x004F },
> +       { IMX415_THSTRAIL, 0x002F },
> +       { IMX415_THSEXIT, 0x0047 },
> +       { IMX415_TLPX, 0x0027 },
> +};
> +
>  /* 720 Mbps CSI configuration */
>  static const struct cci_reg_sequence imx415_linkrate_720mbps[] = {
>         { IMX415_TCLKPOST, 0x006F },
> @@ -466,6 +479,19 @@ static const struct cci_reg_sequence imx415_linkrate_720mbps[] = {
>         { IMX415_TLPX, 0x0027 },
>  };
>
> +/* 891 Mbps CSI configuration */
> +static const struct cci_reg_sequence imx415_linkrate_891mbps[] = {
> +       { IMX415_TCLKPOST, 0x007F },
> +       { IMX415_TCLKPREPARE, 0x0037 },
> +       { IMX415_TCLKTRAIL, 0x0037 },
> +       { IMX415_TCLKZERO, 0x00F7 },
> +       { IMX415_THSPREPARE, 0x003F },
> +       { IMX415_THSZERO, 0x006F },
> +       { IMX415_THSTRAIL, 0x003F },
> +       { IMX415_THSEXIT, 0x005F },
> +       { IMX415_TLPX, 0x002F },
> +};
> +
>  /* 1440 Mbps CSI configuration */
>  static const struct cci_reg_sequence imx415_linkrate_1440mbps[] = {
>         { IMX415_TCLKPOST, 0x009F },
> @@ -479,17 +505,30 @@ static const struct cci_reg_sequence imx415_linkrate_1440mbps[] = {
>         { IMX415_TLPX, 0x004F },
>  };
>
> -/* 891 Mbps CSI configuration */
> -static const struct cci_reg_sequence imx415_linkrate_891mbps[] = {
> -       { IMX415_TCLKPOST, 0x007F },
> -       { IMX415_TCLKPREPARE, 0x0037 },
> -       { IMX415_TCLKTRAIL, 0x0037 },
> -       { IMX415_TCLKZERO, 0x00F7 },
> -       { IMX415_THSPREPARE, 0x003F },
> -       { IMX415_THSZERO, 0x006F },
> -       { IMX415_THSTRAIL, 0x003F },
> -       { IMX415_THSEXIT, 0x005F },
> -       { IMX415_TLPX, 0x002F },
> +/* 1782 Mbps CSI configuration */
> +static const struct cci_reg_sequence imx415_linkrate_1782mbps[] = {
> +       { IMX415_TCLKPOST, 0x00B7 },
> +       { IMX415_TCLKPREPARE, 0x0067 },
> +       { IMX415_TCLKTRAIL, 0x006F },
> +       { IMX415_TCLKZERO, 0x01DF },
> +       { IMX415_THSPREPARE, 0x006F },
> +       { IMX415_THSZERO, 0x00CF },
> +       { IMX415_THSTRAIL, 0x006F },
> +       { IMX415_THSEXIT, 0x00B7 },
> +       { IMX415_TLPX, 0x005F },
> +};
> +
> +/* 2079 Mbps CSI configuration */
> +static const struct cci_reg_sequence imx415_linkrate_2079mbps[] = {
> +       { IMX415_TCLKPOST, 0x00D7 },
> +       { IMX415_TCLKPREPARE, 0x007F },
> +       { IMX415_TCLKTRAIL, 0x007F },
> +       { IMX415_TCLKZERO, 0x0237 },
> +       { IMX415_THSPREPARE, 0x0087 },
> +       { IMX415_THSZERO, 0x00EF },
> +       { IMX415_THSTRAIL, 0x0087 },
> +       { IMX415_THSEXIT, 0x00DF },
> +       { IMX415_TLPX, 0x006F },
>  };
>
>  struct imx415_mode_reg_list {
> @@ -505,6 +544,14 @@ struct imx415_mode {
>
>  /* mode configs */
>  static const struct imx415_mode supported_modes[] = {
> +       {
> +               .lane_rate = 594000000,
> +               .hmax_min = { 3300, 1320 },
> +               .reg_list = {
> +                       .num_of_regs = ARRAY_SIZE(imx415_linkrate_594mbps),
> +                       .regs = imx415_linkrate_594mbps,
> +               },
> +       },
>         {
>                 .lane_rate = 720000000,
>                 .hmax_min = { 2032, 1066 },
> @@ -513,6 +560,14 @@ static const struct imx415_mode supported_modes[] = {
>                         .regs = imx415_linkrate_720mbps,
>                 },
>         },
> +       {
> +               .lane_rate = 891000000,
> +               .hmax_min = { 2200, 1100 },
> +               .reg_list = {
> +                       .num_of_regs = ARRAY_SIZE(imx415_linkrate_891mbps),
> +                       .regs = imx415_linkrate_891mbps,
> +               },
> +       },
>         {
>                 .lane_rate = 1440000000,
>                 .hmax_min = { 1066, 533 },
> @@ -522,11 +577,19 @@ static const struct imx415_mode supported_modes[] = {
>                 },
>         },
>         {
> -               .lane_rate = 891000000,
> -               .hmax_min = { 2200, 1100 },
> +               .lane_rate = 1782000000,
> +               .hmax_min = { 1100, 550 },
>                 .reg_list = {
> -                       .num_of_regs = ARRAY_SIZE(imx415_linkrate_891mbps),
> -                       .regs = imx415_linkrate_891mbps,
> +                       .num_of_regs = ARRAY_SIZE(imx415_linkrate_1782mbps),
> +                       .regs = imx415_linkrate_1782mbps,
> +               },
> +       },
> +       {
> +               .lane_rate = 2079000000,
> +               .hmax_min = { 1100, 550 },
> +               .reg_list = {
> +                       .num_of_regs = ARRAY_SIZE(imx415_linkrate_2079mbps),
> +                       .regs = imx415_linkrate_2079mbps,
>                 },
>         },
>  };
> --
> 2.39.1
>
>
diff mbox series

Patch

diff --git a/drivers/media/i2c/imx415.c b/drivers/media/i2c/imx415.c
index c5beba4da18b..83b7929455b2 100644
--- a/drivers/media/i2c/imx415.c
+++ b/drivers/media/i2c/imx415.c
@@ -109,8 +109,8 @@  static const char *const imx415_supply_names[] = {
  * and converts them to link frequencies by a factor of two when needed.
  */
 static const s64 link_freq_menu_items[] = {
-	594000000 / 2,	720000000 / 2,	891000000 / 2,
-	1440000000 / 2, 1485000000 / 2,
+	594000000 / 2,	720000000 / 2,	891000000 / 2,	1440000000 / 2,
+	1485000000 / 2,	1782000000 / 2,	2079000000 / 2,	2376000000 / 2,
 };
 
 struct imx415_clk_params {
@@ -453,6 +453,19 @@  static const struct imx415_clk_params imx415_clk_params[] = {
 	},
 };
 
+/* 594 Mbps CSI configuration */
+static const struct cci_reg_sequence imx415_linkrate_594mbps[] = {
+	{ IMX415_TCLKPOST, 0x0067 },
+	{ IMX415_TCLKPREPARE, 0x0027 },
+	{ IMX415_TCLKTRAIL, 0x0027 },
+	{ IMX415_TCLKZERO, 0x00B7 },
+	{ IMX415_THSPREPARE, 0x002F },
+	{ IMX415_THSZERO, 0x004F },
+	{ IMX415_THSTRAIL, 0x002F },
+	{ IMX415_THSEXIT, 0x0047 },
+	{ IMX415_TLPX, 0x0027 },
+};
+
 /* 720 Mbps CSI configuration */
 static const struct cci_reg_sequence imx415_linkrate_720mbps[] = {
 	{ IMX415_TCLKPOST, 0x006F },
@@ -466,6 +479,19 @@  static const struct cci_reg_sequence imx415_linkrate_720mbps[] = {
 	{ IMX415_TLPX, 0x0027 },
 };
 
+/* 891 Mbps CSI configuration */
+static const struct cci_reg_sequence imx415_linkrate_891mbps[] = {
+	{ IMX415_TCLKPOST, 0x007F },
+	{ IMX415_TCLKPREPARE, 0x0037 },
+	{ IMX415_TCLKTRAIL, 0x0037 },
+	{ IMX415_TCLKZERO, 0x00F7 },
+	{ IMX415_THSPREPARE, 0x003F },
+	{ IMX415_THSZERO, 0x006F },
+	{ IMX415_THSTRAIL, 0x003F },
+	{ IMX415_THSEXIT, 0x005F },
+	{ IMX415_TLPX, 0x002F },
+};
+
 /* 1440 Mbps CSI configuration */
 static const struct cci_reg_sequence imx415_linkrate_1440mbps[] = {
 	{ IMX415_TCLKPOST, 0x009F },
@@ -479,17 +505,30 @@  static const struct cci_reg_sequence imx415_linkrate_1440mbps[] = {
 	{ IMX415_TLPX, 0x004F },
 };
 
-/* 891 Mbps CSI configuration */
-static const struct cci_reg_sequence imx415_linkrate_891mbps[] = {
-	{ IMX415_TCLKPOST, 0x007F },
-	{ IMX415_TCLKPREPARE, 0x0037 },
-	{ IMX415_TCLKTRAIL, 0x0037 },
-	{ IMX415_TCLKZERO, 0x00F7 },
-	{ IMX415_THSPREPARE, 0x003F },
-	{ IMX415_THSZERO, 0x006F },
-	{ IMX415_THSTRAIL, 0x003F },
-	{ IMX415_THSEXIT, 0x005F },
-	{ IMX415_TLPX, 0x002F },
+/* 1782 Mbps CSI configuration */
+static const struct cci_reg_sequence imx415_linkrate_1782mbps[] = {
+	{ IMX415_TCLKPOST, 0x00B7 },
+	{ IMX415_TCLKPREPARE, 0x0067 },
+	{ IMX415_TCLKTRAIL, 0x006F },
+	{ IMX415_TCLKZERO, 0x01DF },
+	{ IMX415_THSPREPARE, 0x006F },
+	{ IMX415_THSZERO, 0x00CF },
+	{ IMX415_THSTRAIL, 0x006F },
+	{ IMX415_THSEXIT, 0x00B7 },
+	{ IMX415_TLPX, 0x005F },
+};
+
+/* 2079 Mbps CSI configuration */
+static const struct cci_reg_sequence imx415_linkrate_2079mbps[] = {
+	{ IMX415_TCLKPOST, 0x00D7 },
+	{ IMX415_TCLKPREPARE, 0x007F },
+	{ IMX415_TCLKTRAIL, 0x007F },
+	{ IMX415_TCLKZERO, 0x0237 },
+	{ IMX415_THSPREPARE, 0x0087 },
+	{ IMX415_THSZERO, 0x00EF },
+	{ IMX415_THSTRAIL, 0x0087 },
+	{ IMX415_THSEXIT, 0x00DF },
+	{ IMX415_TLPX, 0x006F },
 };
 
 struct imx415_mode_reg_list {
@@ -505,6 +544,14 @@  struct imx415_mode {
 
 /* mode configs */
 static const struct imx415_mode supported_modes[] = {
+	{
+		.lane_rate = 594000000,
+		.hmax_min = { 3300, 1320 },
+		.reg_list = {
+			.num_of_regs = ARRAY_SIZE(imx415_linkrate_594mbps),
+			.regs = imx415_linkrate_594mbps,
+		},
+	},
 	{
 		.lane_rate = 720000000,
 		.hmax_min = { 2032, 1066 },
@@ -513,6 +560,14 @@  static const struct imx415_mode supported_modes[] = {
 			.regs = imx415_linkrate_720mbps,
 		},
 	},
+	{
+		.lane_rate = 891000000,
+		.hmax_min = { 2200, 1100 },
+		.reg_list = {
+			.num_of_regs = ARRAY_SIZE(imx415_linkrate_891mbps),
+			.regs = imx415_linkrate_891mbps,
+		},
+	},
 	{
 		.lane_rate = 1440000000,
 		.hmax_min = { 1066, 533 },
@@ -522,11 +577,19 @@  static const struct imx415_mode supported_modes[] = {
 		},
 	},
 	{
-		.lane_rate = 891000000,
-		.hmax_min = { 2200, 1100 },
+		.lane_rate = 1782000000,
+		.hmax_min = { 1100, 550 },
 		.reg_list = {
-			.num_of_regs = ARRAY_SIZE(imx415_linkrate_891mbps),
-			.regs = imx415_linkrate_891mbps,
+			.num_of_regs = ARRAY_SIZE(imx415_linkrate_1782mbps),
+			.regs = imx415_linkrate_1782mbps,
+		},
+	},
+	{
+		.lane_rate = 2079000000,
+		.hmax_min = { 1100, 550 },
+		.reg_list = {
+			.num_of_regs = ARRAY_SIZE(imx415_linkrate_2079mbps),
+			.regs = imx415_linkrate_2079mbps,
 		},
 	},
 };