summaryrefslogtreecommitdiff
path: root/meta-openbmc-mods/meta-wht/recipes-kernel/linux/linux-aspeed/0001-Enable-GPIOE0-and-GPIOE2-pass-through-by-default.patch
blob: 143cccdba71acfdd7ed1f9331987ca5f3627523b (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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
From a60792bba4fb67a1a181b6e1b488d3ca7b98b305 Mon Sep 17 00:00:00 2001
From: "Jason M. Bills" <jason.m.bills@linux.intel.com>
Date: Mon, 6 May 2019 14:18:27 -0700
Subject: [PATCH] Enable GPIOE0 and GPIOE2 pass-through by default

This change sets the gpio DT pinctrl default configuration to
enable GPIOE0 and GPIOE2 pass-through.  Since this causes
pinctrl_get_select_default() to be called automatically for
the gpio driver to claim the GPIO pins in those groups, we
also need to call pinctrl_put() to release claim on the
pass-through GPIOs so they can be requested at runtime.

Tested:
Disabled pass-through in uboot and confirmed that after booting
Linux, pass-through is enabled and 'cat /sys/kernel/debug/pinctrl/
1e6e2000.syscon\:pinctrl-aspeed-g5-pinctrl/pinmux-pins' shows that
the pass-through GPIOs are UNCLAIMED.

Signed-off-by: Jason M. Bills <jason.m.bills@linux.intel.com>
---
 arch/arm/boot/dts/aspeed-bmc-intel-ast2500.dts |  4 ++++
 drivers/gpio/gpio-aspeed.c                     | 10 ++++++++++
 2 files changed, 14 insertions(+)

diff --git a/arch/arm/boot/dts/aspeed-bmc-intel-ast2500.dts b/arch/arm/boot/dts/aspeed-bmc-intel-ast2500.dts
index 7d0b65bde369..f99cbef971b4 100644
--- a/arch/arm/boot/dts/aspeed-bmc-intel-ast2500.dts
+++ b/arch/arm/boot/dts/aspeed-bmc-intel-ast2500.dts
@@ -194,6 +194,10 @@
 
 &gpio {
 	status = "okay";
+	/* Enable GPIOE0 and GPIOE2 pass-through by default */
+	pinctrl-names = "pass-through";
+	pinctrl-0 = <&pinctrl_gpie0_default
+			&pinctrl_gpie2_default>;
 	gpio-line-names =
 	/*A0-A7*/	"","","","","","","","",
 	/*B0-B7*/	"FM_BMC_BOARD_SKU_ID0_N","FM_BMC_BOARD_SKU_ID1_N","FM_BMC_BOARD_SKU_ID2_N","FM_BMC_BOARD_SKU_ID3_N","FM_BMC_BOARD_SKU_ID4_N","","","",
diff --git a/drivers/gpio/gpio-aspeed.c b/drivers/gpio/gpio-aspeed.c
index b966f5e28ebf..ac2282f72de6 100644
--- a/drivers/gpio/gpio-aspeed.c
+++ b/drivers/gpio/gpio-aspeed.c
@@ -1140,6 +1140,7 @@ static int __init aspeed_gpio_probe(struct platform_device *pdev)
 {
 	const struct of_device_id *gpio_id;
 	struct aspeed_gpio *gpio;
+	struct pinctrl *pinctrl;
 	int rc, i, banks, err;
 	u32 ngpio;
 
@@ -1189,6 +1190,15 @@ static int __init aspeed_gpio_probe(struct platform_device *pdev)
 	if (!gpio->dcache)
 		return -ENOMEM;
 
+	/*
+	 * Select the pass-through pinctrl config to enable the pass-through
+	 * mux for GPIOs marked as pass-through. Then call pinctrl_put() to
+	 * release claim of the GPIO pins, so they can be requested at runtime.
+	 */
+	pinctrl = pinctrl_get_select(&pdev->dev, "pass-through");
+	if (!IS_ERR(pinctrl))
+		pinctrl_put(pinctrl);
+
 	/*
 	 * Populate it with initial values read from the HW and switch
 	 * all command sources to the ARM by default
-- 
2.17.1