aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHeikki Krogerus <heikki.krogerus@linux.intel.com>2021-03-01 16:42:19 +0200
committerLee Jones <lee.jones@linaro.org>2021-04-14 16:06:07 +0100
commit42e59982917a25ad254b74e6e8decee5e684763d (patch)
tree570c1f9847cb31046bf62b6b2a499a8a6660e810
parentmfd: da9063: Support SMBus and I2C mode (diff)
downloadlinux-dev-42e59982917a25ad254b74e6e8decee5e684763d.tar.xz
linux-dev-42e59982917a25ad254b74e6e8decee5e684763d.zip
mfd: core: Add support for software nodes
The old device property API is going to be removed and replaced with the newer software node API. This prepares MFD subsystem for the transition. Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Lee Jones <lee.jones@linaro.org>
-rw-r--r--drivers/mfd/mfd-core.c9
-rw-r--r--include/linux/mfd/core.h4
2 files changed, 13 insertions, 0 deletions
diff --git a/drivers/mfd/mfd-core.c b/drivers/mfd/mfd-core.c
index fc00aaccb5f7..e24008b94aac 100644
--- a/drivers/mfd/mfd-core.c
+++ b/drivers/mfd/mfd-core.c
@@ -244,6 +244,12 @@ static int mfd_add_device(struct device *parent, int id,
goto fail_of_entry;
}
+ if (cell->swnode) {
+ ret = device_add_software_node(&pdev->dev, cell->swnode);
+ if (ret)
+ goto fail_of_entry;
+ }
+
for (r = 0; r < cell->num_resources; r++) {
res[r].name = cell->resources[r].name;
res[r].flags = cell->resources[r].flags;
@@ -304,6 +310,7 @@ fail_of_entry:
list_del(&of_entry->list);
kfree(of_entry);
}
+ device_remove_software_node(&pdev->dev);
fail_alias:
regulator_bulk_unregister_supply_alias(&pdev->dev,
cell->parent_supplies,
@@ -372,6 +379,8 @@ static int mfd_remove_devices_fn(struct device *dev, void *data)
regulator_bulk_unregister_supply_alias(dev, cell->parent_supplies,
cell->num_parent_supplies);
+ device_remove_software_node(&pdev->dev);
+
platform_device_unregister(pdev);
return 0;
}
diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h
index 2009c4b936d9..9ec599167fe6 100644
--- a/include/linux/mfd/core.h
+++ b/include/linux/mfd/core.h
@@ -50,6 +50,7 @@
#define MFD_DEP_LEVEL_HIGH 1
struct irq_domain;
+struct software_node;
struct property_entry;
/* Matches ACPI PNP id, either _HID or _CID, or ACPI _ADR */
@@ -78,6 +79,9 @@ struct mfd_cell {
void *platform_data;
size_t pdata_size;
+ /* Software node for the device. */
+ const struct software_node *swnode;
+
/* device properties passed to the sub devices drivers */
const struct property_entry *properties;