diff mbox series

[v5,net-next,07/13] net: dsa: felix: add support for MFD configurations

Message ID 20230127193559.1001051-8-colin.foster@in-advantage.com
State Accepted
Commit dc454fa4b764ab75038e822dfc9a1b2526757a63
Headers show
Series add support for the the vsc7512 internal copper phys | expand

Commit Message

Colin Foster Jan. 27, 2023, 7:35 p.m. UTC
The architecture around the VSC7512 differs from existing felix drivers. In
order to add support for all the chip's features (pinctrl, MDIO, gpio) the
device had to be laid out as a multi-function device (MFD).

One difference between an MFD and a standard platform device is that the
regmaps are allocated to the parent device before the child devices are
probed. As such, there is no need for felix to initialize new regmaps in
these configurations, they can simply be requested from the parent device.

Add support for MFD configurations by performing this request from the
parent device.

Signed-off-by: Colin Foster <colin.foster@in-advantage.com>
---

v5
    * No changes

v4
    * New patch

---
 drivers/net/dsa/ocelot/felix.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Florian Fainelli Jan. 27, 2023, 7:40 p.m. UTC | #1
On 1/27/2023 11:35 AM, Colin Foster wrote:
> The architecture around the VSC7512 differs from existing felix drivers. In
> order to add support for all the chip's features (pinctrl, MDIO, gpio) the
> device had to be laid out as a multi-function device (MFD).
> 
> One difference between an MFD and a standard platform device is that the
> regmaps are allocated to the parent device before the child devices are
> probed. As such, there is no need for felix to initialize new regmaps in
> these configurations, they can simply be requested from the parent device.
> 
> Add support for MFD configurations by performing this request from the
> parent device.
> 
> Signed-off-by: Colin Foster <colin.foster@in-advantage.com>

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
diff mbox series

Patch

diff --git a/drivers/net/dsa/ocelot/felix.c b/drivers/net/dsa/ocelot/felix.c
index 462a1a683996..d3ff6e8a82e9 100644
--- a/drivers/net/dsa/ocelot/felix.c
+++ b/drivers/net/dsa/ocelot/felix.c
@@ -1315,6 +1315,13 @@  static struct regmap *felix_request_regmap_by_name(struct felix *felix,
 	struct resource res;
 	int i;
 
+	/* In an MFD configuration, regmaps are registered directly to the
+	 * parent device before the child devices are probed, so there is no
+	 * need to initialize a new one.
+	 */
+	if (!felix->info->resources)
+		return dev_get_regmap(ocelot->dev->parent, resource_name);
+
 	for (i = 0; i < felix->info->num_resources; i++) {
 		if (strcmp(resource_name, felix->info->resources[i].name))
 			continue;