summaryrefslogtreecommitdiffstats
path: root/bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0454-media-i2c-imx390-fix-refclk.patch
blob: af31b486e6b8b602d256052b52c5e00e72219a69 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
From 602dbaa9bc1794fe50d522dbef5a2ffde9eea202 Mon Sep 17 00:00:00 2001
From: Vladimir Barinov <vladimir.barinov@cogentembedded.com>
Date: Wed, 25 Dec 2019 17:02:13 +0300
Subject: [PATCH] media: i2c: imx390: fix refclk

The rflck for IMX390 must be ether 24MHz or 27Mhz
The deserializer  on Cogent ECU provides 23Mhz, hence use
serizlizer PLL to adjust refclk to 24MHz

Signed-off-by: Vladimir Barinov <vladimir.barinov@cogentembedded.com>
---
 drivers/media/i2c/soc_camera/imx390.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/media/i2c/soc_camera/imx390.c b/drivers/media/i2c/soc_camera/imx390.c
index b1df1ba..c1e5680 100644
--- a/drivers/media/i2c/soc_camera/imx390.c
+++ b/drivers/media/i2c/soc_camera/imx390.c
@@ -428,17 +428,18 @@ static int imx390_initialize(struct i2c_client *client)
 		goto err;
 	}
 
-#if 0
-	/* setup XCLK */
 	tmp_addr = client->addr;
 	if (priv->ti9x4_addr) {
-		/* CLK_OUT=22.5792*160*M/N/CLKDIV -> CLK_OUT=25MHz: CLKDIV=4, M=7, N=253: 22.5792*160/4*7/253=24.989MHz=CLK_OUT */
-		client->addr = priv->ti9x3_addr;			/* Serializer I2C address */
-		reg8_write(client, 0x06, 0x47);				/* Set CLKDIV and M */
-		reg8_write(client, 0x07, 0xfd);				/* Set N */
+		/* Setup XCLK:
+		    CLK_OUT=23MHz*160*M/N/CLKDIV
+		    CLK_OUT=24MHz (desired), CLKDIV=4, M=6, N=230
+		    23*160/4*6/230 = 24MHz = CLK_OUT
+		*/
+		client->addr = priv->ti9x3_addr;
+		reg8_write(client, 0x06, 0x46);	/* Set CLKDIV and M */
+		reg8_write(client, 0x07, 0xe6);	/* Set N */
 	}
 	client->addr = tmp_addr;
-#endif
 
 	/* Read OTP IDs */
 	imx390_otp_id_read(client);
-- 
2.7.4