summaryrefslogtreecommitdiffstats
path: root/bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0514-media-i2c-gmsl2-add-fsync-support.patch
diff options
context:
space:
mode:
Diffstat (limited to 'bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0514-media-i2c-gmsl2-add-fsync-support.patch')
-rw-r--r--bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0514-media-i2c-gmsl2-add-fsync-support.patch102
1 files changed, 102 insertions, 0 deletions
diff --git a/bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0514-media-i2c-gmsl2-add-fsync-support.patch b/bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0514-media-i2c-gmsl2-add-fsync-support.patch
new file mode 100644
index 00000000..49b66489
--- /dev/null
+++ b/bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0514-media-i2c-gmsl2-add-fsync-support.patch
@@ -0,0 +1,102 @@
+From 848b902979b3d10b6104bdae5a73285351b98a3a Mon Sep 17 00:00:00 2001
+From: Vladimir Barinov <vladimir.barinov@cogentembedded.com>
+Date: Tue, 5 May 2020 00:31:31 +0300
+Subject: [PATCH 1/3] media: i2c: gmsl2: add fsync support
+
+This add FSYNC support on GMSL2 serializers
+
+Signed-off-by: Vladimir Barinov <vladimir.barinov@cogentembedded.com>
+---
+ drivers/media/i2c/soc_camera/gmsl/max9296.c | 12 ++++++++++--
+ drivers/media/i2c/soc_camera/gmsl/max9296.h | 1 +
+ drivers/media/i2c/soc_camera/gmsl/max96712.c | 12 ++++++++++--
+ drivers/media/i2c/soc_camera/gmsl/max96712.h | 1 +
+ 4 files changed, 22 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/media/i2c/soc_camera/gmsl/max9296.c b/drivers/media/i2c/soc_camera/gmsl/max9296.c
+index 85b45ca..daa2201 100644
+--- a/drivers/media/i2c/soc_camera/gmsl/max9296.c
++++ b/drivers/media/i2c/soc_camera/gmsl/max9296.c
+@@ -840,7 +840,7 @@ static int max9296_gmsl2_link_serializer_setup(struct max9296_priv *priv, int li
+ if (priv->gpio[i] == 2) {
+ /* GPIO FSIN */
+ ser_write(MAX9295_GPIO_A(i), 0x84); /* 1MOm, GMSL2 RX from deserializer */
+- ser_write(MAX9295_GPIO_C(i), 0x01); /* pull-none, GPIO stream ID=1 */
++ ser_write(MAX9295_GPIO_C(i), 0x08); /* pull-none, GPIO ID=8 assosiated with FSYNC transmission */
+ }
+ if (priv->gpio[i] == 3) {
+ /* GPIO Interrupt */
+@@ -919,7 +919,15 @@ static void max9296_gmsl2_link_crossbar_setup(struct max9296_priv *priv, int lin
+
+ static void max9296_gmsl2_fsync_setup(struct max9296_priv *priv)
+ {
+- /* TODO */
++ des_write(MAX9296_FSYNC_5, priv->fsync_period & 0xff); /* Fsync Period L */
++ des_write(MAX9296_FSYNC_6, (priv->fsync_period >> 8) & 0xff);/* Fsync Period M */
++ des_write(MAX9296_FSYNC_7, priv->fsync_period >> 16); /* Fsync Period H */
++ des_write(MAX9296_FSYNC_10, 0x00); /* Disable Overlap */
++ des_write(MAX9296_FSYNC_11, 0x00);
++
++ des_write(MAX9296_FSYNC_0, 0x00); /* Manual method, Internal GMSL2 generator mode */
++ des_write(MAX9296_FSYNC_15, 0x9f); /* GMSL2 Type Fsync, Enable all pipes */
++ des_write(MAX9296_FSYNC_17, 8 << 3); /* GPIO ID=8 assosiated with FSYNC transmission */
+ }
+
+ /* -----------------------------------------------------------------------------
+diff --git a/drivers/media/i2c/soc_camera/gmsl/max9296.h b/drivers/media/i2c/soc_camera/gmsl/max9296.h
+index 985b77e..87fa05ee 100644
+--- a/drivers/media/i2c/soc_camera/gmsl/max9296.h
++++ b/drivers/media/i2c/soc_camera/gmsl/max9296.h
+@@ -153,6 +153,7 @@ struct max9296_priv {
+ #define MAX9296_FSYNC_10 0x3aa
+ #define MAX9296_FSYNC_11 0x3ab
+ #define MAX9296_FSYNC_15 0x3af
++#define MAX9296_FSYNC_17 0x3b1
+
+ #define MAX_MIPI_PHY_BASE 0x8a0
+ #define MAX_MIPI_PHY0 (MAX_MIPI_PHY_BASE + 0x00)
+diff --git a/drivers/media/i2c/soc_camera/gmsl/max96712.c b/drivers/media/i2c/soc_camera/gmsl/max96712.c
+index c4cdf0e..17eed0b 100644
+--- a/drivers/media/i2c/soc_camera/gmsl/max96712.c
++++ b/drivers/media/i2c/soc_camera/gmsl/max96712.c
+@@ -836,7 +836,7 @@ static int max96712_gmsl2_link_serializer_setup(struct max96712_priv *priv, int
+ if (priv->gpio[i] == 2) {
+ /* GPIO FSIN */
+ ser_write(MAX9295_GPIO_A(i), 0x84); /* 1MOm, GMSL2 RX from deserializer */
+- ser_write(MAX9295_GPIO_C(i), 0x01); /* pull-none, GPIO stream ID=1 */
++ ser_write(MAX9295_GPIO_C(i), 0x08); /* pull-none, GPIO ID=8 assosiated with FSYNC transmission */
+ }
+ if (priv->gpio[i] == 3) {
+ /* GPIO Interrupt */
+@@ -918,7 +918,15 @@ static void max96712_gmsl2_link_crossbar_setup(struct max96712_priv *priv, int l
+
+ static void max96712_gmsl2_fsync_setup(struct max96712_priv *priv)
+ {
+- /* TODO */
++ des_write(MAX96712_FSYNC_5, priv->fsync_period & 0xff); /* Fsync Period L */
++ des_write(MAX96712_FSYNC_6, (priv->fsync_period >> 8) & 0xff);/* Fsync Period M */
++ des_write(MAX96712_FSYNC_7, priv->fsync_period >> 16); /* Fsync Period H */
++ des_write(MAX96712_FSYNC_10, 0x00); /* Disable Overlap */
++ des_write(MAX96712_FSYNC_11, 0x00);
++
++ des_write(MAX96712_FSYNC_0, 0x00); /* Manual method, Internal GMSL2 generator mode */
++ des_write(MAX96712_FSYNC_15, 0x9f); /* GMSL2 Type Fsync, Enable all pipes */
++ des_write(MAX96712_FSYNC_17, 8 << 3); /* GPIO ID=8 assosiated with FSYNC transmission */
+ }
+
+ /* -----------------------------------------------------------------------------
+diff --git a/drivers/media/i2c/soc_camera/gmsl/max96712.h b/drivers/media/i2c/soc_camera/gmsl/max96712.h
+index b648bdc..609da2f 100644
+--- a/drivers/media/i2c/soc_camera/gmsl/max96712.h
++++ b/drivers/media/i2c/soc_camera/gmsl/max96712.h
+@@ -135,6 +135,7 @@ struct max96712_priv {
+ #define MAX96712_FSYNC_10 0x4aa
+ #define MAX96712_FSYNC_11 0x4ab
+ #define MAX96712_FSYNC_15 0x4af
++#define MAX96712_FSYNC_17 0x4b1
+
+ #define MAX_MIPI_PHY_BASE 0x8a0
+ #define MAX_MIPI_PHY0 (MAX_MIPI_PHY_BASE + 0x00)
+--
+2.7.4
+