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 |
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 --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, }, }, };
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(-)