Browse Source

mfd: core: propagate device properties to sub devices drivers

In the similar way like we do for the platform data we propagate the device
properties. For example, in case of Intel LPSS drivers we may provide a
specific property to tell the actual device driver an additional information
such as platform name.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Andy Shevchenko 9 years ago
parent
commit
4d215cabc7
2 changed files with 12 additions and 0 deletions
  1. 7 0
      drivers/mfd/mfd-core.c
  2. 5 0
      include/linux/mfd/core.h

+ 7 - 0
drivers/mfd/mfd-core.c

@@ -14,6 +14,7 @@
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/platform_device.h>
 #include <linux/platform_device.h>
 #include <linux/acpi.h>
 #include <linux/acpi.h>
+#include <linux/property.h>
 #include <linux/mfd/core.h>
 #include <linux/mfd/core.h>
 #include <linux/pm_runtime.h>
 #include <linux/pm_runtime.h>
 #include <linux/slab.h>
 #include <linux/slab.h>
@@ -192,6 +193,12 @@ static int mfd_add_device(struct device *parent, int id,
 			goto fail_alias;
 			goto fail_alias;
 	}
 	}
 
 
+	if (cell->pset) {
+		ret = platform_device_add_properties(pdev, cell->pset);
+		if (ret)
+			goto fail_alias;
+	}
+
 	ret = mfd_platform_add_cell(pdev, cell, usage_count);
 	ret = mfd_platform_add_cell(pdev, cell, usage_count);
 	if (ret)
 	if (ret)
 		goto fail_alias;
 		goto fail_alias;

+ 5 - 0
include/linux/mfd/core.h

@@ -17,6 +17,7 @@
 #include <linux/platform_device.h>
 #include <linux/platform_device.h>
 
 
 struct irq_domain;
 struct irq_domain;
+struct property_set;
 
 
 /* Matches ACPI PNP id, either _HID or _CID, or ACPI _ADR */
 /* Matches ACPI PNP id, either _HID or _CID, or ACPI _ADR */
 struct mfd_cell_acpi_match {
 struct mfd_cell_acpi_match {
@@ -44,6 +45,10 @@ struct mfd_cell {
 	/* platform data passed to the sub devices drivers */
 	/* platform data passed to the sub devices drivers */
 	void			*platform_data;
 	void			*platform_data;
 	size_t			pdata_size;
 	size_t			pdata_size;
+
+	/* device properties passed to the sub devices drivers */
+	const struct property_set *pset;
+
 	/*
 	/*
 	 * Device Tree compatible string
 	 * Device Tree compatible string
 	 * See: Documentation/devicetree/usage-model.txt Chapter 2.2 for details
 	 * See: Documentation/devicetree/usage-model.txt Chapter 2.2 for details