[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20251211-dev-dt-warnings-all-v1-3-21b18b9ada77@codeconstruct.com.au>
Date: Thu, 11 Dec 2025 17:45:45 +0900
From: Andrew Jeffery <andrew@...econstruct.com.au>
To: Rob Herring <robh@...nel.org>, Krzysztof Kozlowski <krzk+dt@...nel.org>,
Conor Dooley <conor+dt@...nel.org>, Linus Walleij <linusw@...nel.org>
Cc: Joel Stanley <joel@....id.au>, linux-hwmon@...r.kernel.org,
devicetree@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
linux-aspeed@...ts.ozlabs.org, linux-kernel@...r.kernel.org,
openbmc@...ts.ozlabs.org, linux-gpio@...r.kernel.org,
linux-mmc@...r.kernel.org, linux-crypto@...r.kernel.org,
linux-iio@...r.kernel.org, Andrew Jeffery <andrew@...econstruct.com.au>
Subject: [PATCH RFC 03/16] pinctrl: aspeed: g5: Allow use of LPC node
instead of LPC host controller
There's currently a wart where the Aspeed LPC host controller has no
binding specified, but the pinctrl binding depends on referencing its
node.
Allow specification of a phandle to the parent LPC controller instead.
Fall back to testing for a compatible parent node if the provided
phandle doesn't directly resolve to the LPC controller node.
Signed-off-by: Andrew Jeffery <andrew@...econstruct.com.au>
---
drivers/pinctrl/aspeed/pinctrl-aspeed-g5.c | 30 ++++++++++++++++++++----------
1 file changed, 20 insertions(+), 10 deletions(-)
diff --git a/drivers/pinctrl/aspeed/pinctrl-aspeed-g5.c b/drivers/pinctrl/aspeed/pinctrl-aspeed-g5.c
index d4c364d19d64..7d818b4da1e3 100644
--- a/drivers/pinctrl/aspeed/pinctrl-aspeed-g5.c
+++ b/drivers/pinctrl/aspeed/pinctrl-aspeed-g5.c
@@ -2648,24 +2648,34 @@ static struct regmap *aspeed_g5_acquire_regmap(struct aspeed_pinmux_data *ctx,
}
if (ip == ASPEED_IP_LPC) {
- struct device_node *np;
+ struct device_node *np, *rnp;
struct regmap *map;
np = of_parse_phandle(ctx->dev->of_node,
"aspeed,external-nodes", 1);
- if (np) {
- if (!of_device_is_compatible(np->parent, "aspeed,ast2500-lpc-v2"))
- return ERR_PTR(-ENODEV);
-
- map = syscon_node_to_regmap(np->parent);
- of_node_put(np);
- if (IS_ERR(map))
- return map;
- } else
+ if (!np)
return ERR_PTR(-ENODEV);
+ if (of_device_is_compatible(np, "aspeed,ast2500-lpc-v2")) {
+ rnp = np;
+ } else if (of_device_is_compatible(np->parent, "aspeed,ast2500-lpc-v2")) {
+ /* Maintain compatibility with old aspeed,ast2500-lhc node */
+ rnp = np->parent;
+ } else {
+ map = ERR_PTR(-ENODEV);
+ goto put_external_node;
+ }
+
+ map = syscon_node_to_regmap(rnp);
+ if (IS_ERR(map))
+ goto put_external_node;
+
ctx->maps[ASPEED_IP_LPC] = map;
dev_dbg(ctx->dev, "Acquired LPC regmap");
+
+put_external_node:
+ of_node_put(np);
+
return map;
}
--
2.47.3
Powered by blists - more mailing lists