On Mon, Jan 22, 2024 at 01:06:20PM +0000, Sakari Ailus wrote: > On Mon, Jan 22, 2024 at 11:02:20AM +0800, Chen, Jason Z wrote: > > From: Jason Chen <jason.z.chen@xxxxxxxxx> > > > > Due to certain MIPI hardware designs using overly long cables, there > > is a loss of signal strength, resulting in failed signal integration. > > The patch includes changes to adjust the driving strength in the register > > settings for a specific project. > > > > Signed-off-by: Jason Chen <jason.z.chen@xxxxxxxxx> > > --- > > drivers/media/i2c/ov08x40.c | 15 +++++++++++++++ > > 1 file changed, 15 insertions(+) > > > > diff --git a/drivers/media/i2c/ov08x40.c b/drivers/media/i2c/ov08x40.c > > index 520ccd4aecf..ddcb4b6848b 100644 > > --- a/drivers/media/i2c/ov08x40.c > > +++ b/drivers/media/i2c/ov08x40.c > > @@ -160,6 +160,18 @@ static const struct ov08x40_reg mipi_data_rate_800mbps[] = { > > {0x6002, 0x2e}, > > }; > > > > +static const struct ov08x40_reg mipi_si_changed_regs[] = { > > + {0x481b, 0x2c}, /* HS Exit: Data Tx TEOT - reducing 8ns */ > > + {0x4826, 0x42}, /* HS Entry: Data Tx TREOT - raising 8ns */ > > + {0x4829, 0x54}, /* HS Exit: Data Tx TREOT - reducing 8ns */ > > + {0x4885, 0x1f}, /* driving strength change */ > > We need a better say to control these: if you need to change this to make > it work on one board, another board may well need different settings. > > Probably the easiest way would be to figure out canonical, hardware > independent configuration parameters and define them in DT bindings > (Documentation/devicetree/bindings/media/video-interfaces.yaml), and add > support for those in this driver. > > DMI as such could be how you figure out which settings you need, but it > should not be the task of a the sensor driver to do that. > > Cc Laurent. Agreed. > > +}; > > + > > +struct ov08x40_reg_list si_regs = { > > + .regs = mipi_si_changed_regs, > > + .num_of_regs = ARRAY_SIZE(mipi_si_changed_regs), > > +}; > > + > > static const struct ov08x40_reg mode_3856x2416_regs[] = { > > {0x5000, 0x5d}, > > {0x5001, 0x20}, > > @@ -2913,6 +2925,9 @@ static int ov08x40_start_streaming(struct ov08x40 *ov08x) > > return ret; > > } > > > > + /* Apply SI change to current project */ > > + ov08x40_write_reg_list(ov08x, &si_regs); > > + > > /* Apply default values of current mode */ > > reg_list = &ov08x->cur_mode->reg_list; > > ret = ov08x40_write_reg_list(ov08x, reg_list); -- Regards, Laurent Pinchart