[RFC v5 net-next 07/13] mfd: ocelot: enable the external switch interface

Colin Foster
2021-12-18T21:50:24Z

Add the ocelot-ext child device to the MFD. This will enable device-tree
configuration of the MFD to include the external switch, if desired.

Signed-off-by: Colin Foster <colin.foster@in-advantage.com>
---
drivers/mfd/ocelot-core.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/mfd/ocelot-core.c b/drivers/mfd/ocelot-core.c
index 09132ea52760..52aa7b824d02 100644
--- a/drivers/mfd/ocelot-core.c
+++ b/drivers/mfd/ocelot-core.c
@@ -6,6 +6,7 @@
#include <asm/byteorder.h>
#include <linux/spi/spi.h>
#include <linux/kconfig.h>
+#include <linux/mfd/core.h>
#include <linux/module.h>
#include <linux/regmap.h>

@@ -103,6 +104,13 @@ struct regmap *ocelot_mfd_get_regmap_from_resource(struct device *dev,
}
EXPORT_SYMBOL(ocelot_mfd_get_regmap_from_resource);

+static const struct mfd_cell vsc7512_devs[] = {
+ {
+ .name = "ocelot-ext-switch",
+ .of_compatible = "mscc,vsc7512-ext-switch",
+ },
+};
+
int ocelot_mfd_init(struct ocelot_mfd_config *config)
{
struct device *dev = config->dev;
@@ -139,7 +147,10 @@ int ocelot_mfd_init(struct ocelot_mfd_config *config)
return ret;
}

- /* Create and loop over all child devices here */
+ ret = mfd_add_devices(dev, PLATFORM_DEVID_NONE, vsc7512_devs,
+ ARRAY_SIZE(vsc7512_devs), NULL, 0, NULL);
+
+ dev_info(dev, "ocelot mfd core setup complete\n");

return 0;
}
@@ -147,7 +158,7 @@ EXPORT_SYMBOL(ocelot_mfd_init);

int ocelot_mfd_remove(struct ocelot_mfd_config *config)
{
- /* Loop over all children and remove them */
+ mfd_remove_devices(config->dev);

return 0;
}
--
2.25.1