From 1c7d6584a7811b7785ae5c1e378f14b5ba0971cf Mon Sep 17 00:00:00 2001 From: takeshi_hoshina Date: Mon, 2 Nov 2020 11:07:33 +0900 Subject: basesystem-jj recipes --- .../0514-media-i2c-gmsl2-add-fsync-support.patch | 102 +++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0514-media-i2c-gmsl2-add-fsync-support.patch (limited to 'bsp/meta-rcar/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0514-media-i2c-gmsl2-add-fsync-support.patch') 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 +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 +--- + 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 + -- cgit 1.2.3-korg