summaryrefslogtreecommitdiffstats
path: root/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas
diff options
context:
space:
mode:
authorAndrey Gusakov <andrey.gusakov@cogentembedded.com>2018-03-26 15:11:28 +0300
committerAndrey Gusakov <andrey.gusakov@cogentembedded.com>2018-03-26 15:11:51 +0300
commit3ff7e5c8369180d3e399a67a2170700fe902d5a5 (patch)
tree68b38daef415f86e333345a102d065e6a0d1aff2 /meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas
parentfacc465f679b7058c2afd953ccdaaec959c832ab (diff)
VB2: fix can2 and can3 coldstart probe fail
Reset pins of external mcp251x can adapters are driven by i2c gpio extender pins which is probed later than mcp251x. So at probe time reset pins are low causing probe fail. Add reset-gpio support to driver. Adjust VB2 dtb.
Diffstat (limited to 'meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas')
-rw-r--r--meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0040-arm64-dts-renesas-add-ADAS-boards.patch38
-rw-r--r--meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0108-can-mcp251x-add-reset-gpio-support.patch72
2 files changed, 86 insertions, 24 deletions
diff --git a/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0040-arm64-dts-renesas-add-ADAS-boards.patch b/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0040-arm64-dts-renesas-add-ADAS-boards.patch
index c45344b..bd872ac 100644
--- a/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0040-arm64-dts-renesas-add-ADAS-boards.patch
+++ b/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0040-arm64-dts-renesas-add-ADAS-boards.patch
@@ -1,4 +1,4 @@
-From ed78d27af12a2637fe9ae17e96a9af35a046d486 Mon Sep 17 00:00:00 2001
+From fbc9403a97c602447751b49aa9d4d9cea56fef4c Mon Sep 17 00:00:00 2001
From: Vladimir Barinov <vladimir.barinov@cogentembedded.com>
Date: Fri, 14 Jul 2017 15:05:42 +0300
Subject: [PATCH] arm64: dts: renesas: add ADAS boards
@@ -78,24 +78,24 @@ Signed-off-by: Vladimir Barinov <vladimir.barinov@cogentembedded.com>
arch/arm64/boot/dts/renesas/r8a7797-es1-v3msk.dts | 17 +
arch/arm64/boot/dts/renesas/r8a7797-es1.dtsi | 116 ++
arch/arm64/boot/dts/renesas/r8a7797-v3msk-kf.dts | 520 ++++++
- .../boot/dts/renesas/r8a7797-v3msk-vbm-v2.dts | 82 +
+ .../boot/dts/renesas/r8a7797-v3msk-vbm-v2.dts | 81 +
arch/arm64/boot/dts/renesas/r8a7797-v3msk-vbm.dts | 507 ++++++
arch/arm64/boot/dts/renesas/r8a7797-v3msk-view.dts | 297 ++++
arch/arm64/boot/dts/renesas/r8a7797-v3msk.dts | 345 ++++
arch/arm64/boot/dts/renesas/r8a7797-v3mzf.dts | 462 ++++++
arch/arm64/boot/dts/renesas/r8a7798-condor.dts | 963 ++++++++++++
- .../boot/dts/renesas/r8a7798-v3hsk-vbm-v2.dts | 73 +
+ .../boot/dts/renesas/r8a7798-v3hsk-vbm-v2.dts | 72 +
arch/arm64/boot/dts/renesas/r8a7798-v3hsk-vbm.dts | 505 ++++++
arch/arm64/boot/dts/renesas/r8a7798-v3hsk.dts | 358 +++++
arch/arm64/boot/dts/renesas/ulcb-kf-cn11.dtsi | 462 ++++++
arch/arm64/boot/dts/renesas/ulcb-kf-most.dtsi | 30 +
arch/arm64/boot/dts/renesas/ulcb-kf-sd3.dtsi | 46 +
- arch/arm64/boot/dts/renesas/ulcb-kf.dtsi | 1458 +++++++++++++++++
+ arch/arm64/boot/dts/renesas/ulcb-kf.dtsi | 1456 +++++++++++++++++
arch/arm64/boot/dts/renesas/ulcb-vb-cn12.dtsi | 459 ++++++
arch/arm64/boot/dts/renesas/ulcb-vb.dtsi | 1610 +++++++++++++++++++
- arch/arm64/boot/dts/renesas/ulcb-vb2.dtsi | 1660 ++++++++++++++++++++
+ arch/arm64/boot/dts/renesas/ulcb-vb2.dtsi | 1650 ++++++++++++++++++++
arch/arm64/boot/dts/renesas/ulcb-vbm.dtsi | 543 +++++++
- 60 files changed, 21143 insertions(+)
+ 60 files changed, 21129 insertions(+)
create mode 100644 arch/arm64/boot/dts/renesas/legacy/Makefile
create mode 100644 arch/arm64/boot/dts/renesas/legacy/r8a7795-es1-h3ulcb-kf-v0.dts
create mode 100644 arch/arm64/boot/dts/renesas/legacy/r8a7795-es1-h3ulcb-kf-v1.dts
@@ -11703,7 +11703,7 @@ index 0000000..862236f
+};
diff --git a/arch/arm64/boot/dts/renesas/r8a7797-v3msk-vbm-v2.dts b/arch/arm64/boot/dts/renesas/r8a7797-v3msk-vbm-v2.dts
new file mode 100644
-index 0000000..dbbd3d2
+index 0000000..74a3df6
--- /dev/null
+++ b/arch/arm64/boot/dts/renesas/r8a7797-v3msk-vbm-v2.dts
@@ -0,0 +1,81 @@
@@ -12957,7 +12957,7 @@ index 0000000..33c6c0d
+};
diff --git a/arch/arm64/boot/dts/renesas/r8a7797-v3mzf.dts b/arch/arm64/boot/dts/renesas/r8a7797-v3mzf.dts
new file mode 100644
-index 0000000..246e71d
+index 0000000..71d7bad
--- /dev/null
+++ b/arch/arm64/boot/dts/renesas/r8a7797-v3mzf.dts
@@ -0,0 +1,462 @@
@@ -14394,7 +14394,7 @@ index 0000000..4dd7a28
+};
diff --git a/arch/arm64/boot/dts/renesas/r8a7798-v3hsk-vbm-v2.dts b/arch/arm64/boot/dts/renesas/r8a7798-v3hsk-vbm-v2.dts
new file mode 100644
-index 0000000..56d4253
+index 0000000..7bf1d6f
--- /dev/null
+++ b/arch/arm64/boot/dts/renesas/r8a7798-v3hsk-vbm-v2.dts
@@ -0,0 +1,72 @@
@@ -15903,7 +15903,7 @@ index 0000000..b854216
+};
diff --git a/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi b/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi
new file mode 100644
-index 0000000..447cfc3
+index 0000000..0a927e2
--- /dev/null
+++ b/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi
@@ -0,0 +1,1456 @@
@@ -19446,10 +19446,10 @@ index 0000000..0185e46
+//#include "ulcb-vb-cn12.dtsi"
diff --git a/arch/arm64/boot/dts/renesas/ulcb-vb2.dtsi b/arch/arm64/boot/dts/renesas/ulcb-vb2.dtsi
new file mode 100644
-index 0000000..280c3b7
+index 0000000..509c7f3
--- /dev/null
+++ b/arch/arm64/boot/dts/renesas/ulcb-vb2.dtsi
-@@ -0,0 +1,1660 @@
+@@ -0,0 +1,1650 @@
+/*
+ * Device Tree Source for the ULCB Videobox V2 board
+ *
@@ -19654,6 +19654,7 @@ index 0000000..280c3b7
+ spican0: spidev@0 {
+ compatible = "microchip,mcp2515";
+ reg = <0>;
++ reset-gpios = <&gpio_ext_pwr 8 GPIO_ACTIVE_HIGH>;
+ clocks = <&excan_ref_clk>;
+ interrupt-parent = <&gpio0>;
+ interrupts = <15 GPIO_ACTIVE_LOW>;
@@ -19662,6 +19663,7 @@ index 0000000..280c3b7
+ spican1: spidev@1 {
+ compatible = "microchip,mcp2515";
+ reg = <1>;
++ reset-gpios = <&gpio_ext_pwr 9 GPIO_ACTIVE_HIGH>;
+ clocks = <&excan_ref_clk>;
+ interrupt-parent = <&gpio1>;
+ interrupts = <5 GPIO_ACTIVE_LOW>;
@@ -20618,12 +20620,6 @@ index 0000000..280c3b7
+ output-high;
+ line-name = "can2_120R_load";
+ };
-+ can2_rst {
-+ gpio-hog;
-+ gpios = <8 GPIO_ACTIVE_HIGH>;
-+ output-high;
-+ line-name = "can2_rst";
-+ };
+ /* CAN3 */
+ can3_stby {
+ gpio-hog;
@@ -20637,12 +20633,6 @@ index 0000000..280c3b7
+ output-high;
+ line-name = "can3_120R_load";
+ };
-+ can3_rst {
-+ gpio-hog;
-+ gpios = <9 GPIO_ACTIVE_HIGH>;
-+ output-high;
-+ line-name = "can3_rst";
-+ };
+ };
+ };
+
diff --git a/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0108-can-mcp251x-add-reset-gpio-support.patch b/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0108-can-mcp251x-add-reset-gpio-support.patch
new file mode 100644
index 0000000..646aa0c
--- /dev/null
+++ b/meta-rcar-gen3-adas/recipes-kernel/linux/linux-renesas/0108-can-mcp251x-add-reset-gpio-support.patch
@@ -0,0 +1,72 @@
+From b69e3fdc91fbc88cc32eb6794872e1f058681b04 Mon Sep 17 00:00:00 2001
+From: Andrey Gusakov <andrey.gusakov@cogentembedded.com>
+Date: Mon, 26 Mar 2018 13:51:49 +0300
+Subject: [PATCH] can: mcp251x: add reset gpio support
+
+Signed-off-by: Andrey Gusakov <andrey.gusakov@cogentembedded.com>
+---
+ drivers/net/can/spi/mcp251x.c | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+diff --git a/drivers/net/can/spi/mcp251x.c b/drivers/net/can/spi/mcp251x.c
+index f3f05fe..ac78ce3 100644
+--- a/drivers/net/can/spi/mcp251x.c
++++ b/drivers/net/can/spi/mcp251x.c
+@@ -71,6 +71,7 @@
+ #include <linux/netdevice.h>
+ #include <linux/of.h>
+ #include <linux/of_device.h>
++#include <linux/of_gpio.h>
+ #include <linux/platform_device.h>
+ #include <linux/slab.h>
+ #include <linux/spi/spi.h>
+@@ -270,6 +271,7 @@ struct mcp251x_priv {
+ struct regulator *power;
+ struct regulator *transceiver;
+ struct clk *clk;
++ struct gpio_desc *rst;
+ };
+
+ #define MCP251X_IS(_model) \
+@@ -1031,9 +1033,21 @@ static int mcp251x_can_probe(struct spi_device *spi)
+ struct mcp251x_platform_data *pdata = dev_get_platdata(&spi->dev);
+ struct net_device *net;
+ struct mcp251x_priv *priv;
++ struct gpio_desc *reset_gpio;
+ struct clk *clk;
+ int freq, ret;
+
++ reset_gpio = devm_gpiod_get(&spi->dev, "reset", GPIOD_OUT_HIGH);
++ if (IS_ERR(reset_gpio)) {
++ if (PTR_ERR(reset_gpio) == -EPROBE_DEFER)
++ return -EPROBE_DEFER;
++ dev_err(&spi->dev, "cannot get reset-gpios %ld\n",
++ PTR_ERR(reset_gpio));
++ reset_gpio = NULL;
++ } else {
++ gpiod_set_value_cansleep(reset_gpio, 1);
++ }
++
+ clk = devm_clk_get(&spi->dev, NULL);
+ if (IS_ERR(clk)) {
+ if (pdata)
+@@ -1074,6 +1088,7 @@ static int mcp251x_can_probe(struct spi_device *spi)
+ priv->model = spi_get_device_id(spi)->driver_data;
+ priv->net = net;
+ priv->clk = clk;
++ priv->rst = reset_gpio;
+
+ spi_set_drvdata(spi, priv);
+
+@@ -1185,6 +1200,8 @@ static int mcp251x_can_remove(struct spi_device *spi)
+
+ mcp251x_power_enable(priv->power, 0);
+
++ gpiod_set_value_cansleep(priv->rst, 0);
++
+ if (!IS_ERR(priv->clk))
+ clk_disable_unprepare(priv->clk);
+
+--
+1.9.1
+