[PATCH 3/7] pinctrl: airoha: make the chip SCU optional
From: John Crispin
Date: Tue Nov 10 2026 - 13:28:12 EST
A SoC that muxes every pin through the IOMUX block and describes no
pin configuration has no use for the chip SCU. Skip the lookup when
the match data names no chip SCU compatible, instead of handing a
NULL compatible to syscon_regmap_lookup_by_compatible().
No functional change for the existing SoCs, which all name one.
Signed-off-by: John Crispin <john@xxxxxxxxxxx>
---
drivers/pinctrl/airoha/pinctrl-airoha.c | 25 +++++++++++++++++++------
1 file changed, 19 insertions(+), 6 deletions(-)
diff --git a/drivers/pinctrl/airoha/pinctrl-airoha.c b/drivers/pinctrl/airoha/pinctrl-airoha.c
index f9ae4020b764..9116d3ded258 100644
--- a/drivers/pinctrl/airoha/pinctrl-airoha.c
+++ b/drivers/pinctrl/airoha/pinctrl-airoha.c
@@ -833,6 +833,22 @@ static const struct pinctrl_ops airoha_pctlops = {
.dt_free_map = pinconf_generic_dt_free_map,
};
+static struct regmap *
+airoha_pinctrl_chip_scu(struct device *dev,
+ const struct airoha_pinctrl_match_data *data)
+{
+ struct regmap *map;
+
+ if (!data->chip_scu_compatible)
+ return NULL;
+
+ map = syscon_regmap_lookup_by_phandle(dev->of_node, "airoha,chip-scu");
+ if (!IS_ERR_OR_NULL(map))
+ return map;
+
+ return syscon_regmap_lookup_by_compatible(data->chip_scu_compatible);
+}
+
int airoha_pinctrl_probe(struct platform_device *pdev)
{
const struct airoha_pinctrl_match_data *data;
@@ -853,12 +869,9 @@ int airoha_pinctrl_probe(struct platform_device *pdev)
if (IS_ERR(pinctrl->regmap))
return PTR_ERR(pinctrl->regmap);
- map = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, "airoha,chip-scu");
- if (IS_ERR_OR_NULL(map)) {
- map = syscon_regmap_lookup_by_compatible(data->chip_scu_compatible);
- if (IS_ERR(map))
- return PTR_ERR(map);
- }
+ map = airoha_pinctrl_chip_scu(dev, data);
+ if (IS_ERR(map))
+ return PTR_ERR(map);
pinctrl->chip_scu = map;
--
2.34.1