Skip to contentSkip to conversation

mux: mmio: use reg property when parent device is not a syscon

PATCH Superseded Andrew Davis 3 participants 4 messages Jun 5, 2023 – Aug 8, 2023 Multiplexer

v2 of 6 Superseded Latest is v6 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 mux: mmio: use reg property when parent device is not a syscon

The DT binding for the reg-mux compatible states it can be used when the "parent device of mux controller is not syscon device". It also allows for a reg property. When the reg property is provided, use that to identify the address space for this mux. If not provided fallback to using the parent device as a regmap provider.

---

Changes from v1:
- Flip logic as suggested in v1[0]

[0] https://lore.kernel.org/lkml/[email protected]/T/

 drivers/mux/mmio.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)
drivers/mux/mmio.c +6 -3
index 44a7a0e885b8d..2c9e4df9d6f2c 100644
@@ -44,10 +44,13 @@ static int mux_mmio_probe(struct platform_device *pdev)
 	int ret;
 	int i;
 
-	if (of_device_is_compatible(np, "mmio-mux"))
+	if (of_device_is_compatible(np, "mmio-mux")) {
 		regmap = syscon_node_to_regmap(np->parent);
-	else
-		regmap = dev_get_regmap(dev->parent, NULL) ?: ERR_PTR(-ENODEV);
+	} else {
+		regmap = device_node_to_regmap(np);
+		if (IS_ERR(regmap))
+			regmap = dev_get_regmap(dev->parent, NULL) ?: ERR_PTR(-ENODEV);
+	}
 	if (IS_ERR(regmap)) {
 		ret = PTR_ERR(regmap);
 		dev_err(dev, "failed to get regmap: %d\n", ret);
Signature · 1 line
2.39.2
#1 lore raw
Quoted 8 lines · Andrew Davis

The DT binding for the reg-mux compatible states it can be used when the "parent device of mux controller is not syscon device". It also allows for a reg property. When the reg property is provided, use that to identify the address space for this mux. If not provided fallback to using the parent device as a regmap provider.

---

Ping, still needed and applies cleanly on v6.5-rc1.

Andrew

Quoted 30 lines

Changes from v1:
- Flip logic as suggested in v1[0]

[0] https://lore.kernel.org/lkml/[email protected]/T/

  drivers/mux/mmio.c | 9 ++++++---
  1 file changed, 6 insertions(+), 3 deletions(-)
drivers/mux/mmio.c +6 -3
index 44a7a0e885b8d..2c9e4df9d6f2c 100644
@@ -44,10 +44,13 @@ static int mux_mmio_probe(struct platform_device *pdev)
  	int ret;
  	int i;
 
-	if (of_device_is_compatible(np, "mmio-mux"))
+	if (of_device_is_compatible(np, "mmio-mux")) {
  		regmap = syscon_node_to_regmap(np->parent);
-	else
-		regmap = dev_get_regmap(dev->parent, NULL) ?: ERR_PTR(-ENODEV);
+	} else {
+		regmap = device_node_to_regmap(np);
+		if (IS_ERR(regmap))
+			regmap = dev_get_regmap(dev->parent, NULL) ?: ERR_PTR(-ENODEV);
+	}
  	if (IS_ERR(regmap)) {
  		ret = PTR_ERR(regmap);
  		dev_err(dev, "failed to get regmap: %d\n", ret);
Reviewed-by
#2 lore raw
Quoted 7 lines · Andrew Davis
Quoted 6 lines · Andrew Davis

The DT binding for the reg-mux compatible states it can be used when the "parent device of mux controller is not syscon device". It also allows for a reg property. When the reg property is provided, use that to identify the address space for this mux. If not provided fallback to using the parent device as a regmap provider.

Quoted 15 lines
Quoted 2 lines

---

Ping, still needed and applies cleanly on v6.5-rc1.

Andrew

Quoted 8 lines

Changes from v1:
- Flip logic as suggested in v1[0]

[0] https://lore.kernel.org/lkml/[email protected]/T/

  drivers/mux/mmio.c | 9 ++++++---
  1 file changed, 6 insertions(+), 3 deletions(-)

Greg: looks like you were missed in CC

Peter/Greg: Any chance of Looking at this? This is a basic corner stone for us to clean up much of the mess we have created up in the device tree syscon nodes and trying to transition those into simple-bus.

Quoted 21 lines
Quoted 21 lines
drivers/mux/mmio.c +6 -3
index 44a7a0e885b8d..2c9e4df9d6f2c 100644
@@ -44,10 +44,13 @@ static int mux_mmio_probe(struct platform_device *pdev)
  	int ret;
  	int i;
-	if (of_device_is_compatible(np, "mmio-mux"))
+	if (of_device_is_compatible(np, "mmio-mux")) {
  		regmap = syscon_node_to_regmap(np->parent);
-	else
-		regmap = dev_get_regmap(dev->parent, NULL) ?: ERR_PTR(-ENODEV);
+	} else {
+		regmap = device_node_to_regmap(np);
+		if (IS_ERR(regmap))
+			regmap = dev_get_regmap(dev->parent, NULL) ?: ERR_PTR(-ENODEV);
+	}
  	if (IS_ERR(regmap)) {
  		ret = PTR_ERR(regmap);
  		dev_err(dev, "failed to get regmap: %d\n", ret);
Signature · 3 lines
Regards,
Nishanth Menon
Key (0xDDB5849D1736249D) / Fingerprint: F8A2 8693 54EB 8232 17A3  1A34 DDB5 849D 1736 249D
#3 lore raw
Quoted 46 lines · Nishanth Menon
Quoted 7 lines · Andrew Davis
Quoted 6 lines · Andrew Davis

The DT binding for the reg-mux compatible states it can be used when the "parent device of mux controller is not syscon device". It also allows for a reg property. When the reg property is provided, use that to identify the address space for this mux. If not provided fallback to using the parent device as a regmap provider.

Quoted 15 lines
Quoted 2 lines

---

Ping, still needed and applies cleanly on v6.5-rc1.

Andrew

Quoted 8 lines

Changes from v1:
- Flip logic as suggested in v1[0]

[0] https://lore.kernel.org/lkml/[email protected]/T/

  drivers/mux/mmio.c | 9 ++++++---
  1 file changed, 6 insertions(+), 3 deletions(-)

Greg: looks like you were missed in CC

Peter/Greg: Any chance of Looking at this? This is a basic corner stone for us to clean up much of the mess we have created up in the device tree syscon nodes and trying to transition those into simple-bus.

Quoted 13 lines
Quoted 13 lines
drivers/mux/mmio.c +1 -3
index 44a7a0e885b8d..2c9e4df9d6f2c 100644
@@ -44,10 +44,13 @@ static int mux_mmio_probe(struct platform_device *pdev)
  	int ret;
  	int i;
-	if (of_device_is_compatible(np, "mmio-mux"))
+	if (of_device_is_compatible(np, "mmio-mux")) {
  		regmap = syscon_node_to_regmap(np->parent);
-	else
-		regmap = dev_get_regmap(dev->parent, NULL) ?: ERR_PTR(-ENODEV);
Quoted 8 lines
Quoted 8 lines

drivers/mux/mmio.c static int mux_mmio_probe(struct platform_device *pdev) · line 56

Quoted 8 lines
drivers/mux/mmio.c +5 -0
+	} else {
+		regmap = device_node_to_regmap(np);
+		if (IS_ERR(regmap))
+			regmap = dev_get_regmap(dev->parent, NULL) ?: ERR_PTR(-ENODEV);
+	}
  	if (IS_ERR(regmap)) {
  		ret = PTR_ERR(regmap);
  		dev_err(dev, "failed to get regmap: %d\n", ret);

I'm not the maintainer here, it's up to Peter.