Re: [PATCH v2] media: ov08x40: Add Signal Integration Adjustments for specific project

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Jason,

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.

> +};
> +
> +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,

Sakari Ailus




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux