Merge tag 'fbdev-4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux
[linux-2.6-block.git] / drivers / base / platform.c
index 73e399466c6edfe0dbd4b704e925dab5bff19904..8dcbb266643b8773e212bc29f3b2137c3060e059 100644 (file)
@@ -26,6 +26,7 @@
 #include <linux/acpi.h>
 #include <linux/clk/clk-conf.h>
 #include <linux/limits.h>
+#include <linux/property.h>
 
 #include "base.h"
 #include "power/power.h"
@@ -318,6 +319,22 @@ int platform_device_add_data(struct platform_device *pdev, const void *data,
 }
 EXPORT_SYMBOL_GPL(platform_device_add_data);
 
+/**
+ * platform_device_add_properties - add built-in properties to a platform device
+ * @pdev: platform device to add properties to
+ * @pset: properties to add
+ *
+ * The function will take deep copy of the properties in @pset and attach
+ * the copy to the platform device. The memory associated with properties
+ * will be freed when the platform device is released.
+ */
+int platform_device_add_properties(struct platform_device *pdev,
+                                  const struct property_set *pset)
+{
+       return device_add_property_set(&pdev->dev, pset);
+}
+EXPORT_SYMBOL_GPL(platform_device_add_properties);
+
 /**
  * platform_device_add - add a platform device to device hierarchy
  * @pdev: platform device we're adding
@@ -429,6 +446,8 @@ void platform_device_del(struct platform_device *pdev)
                        if (r->parent)
                                release_resource(r);
                }
+
+               device_remove_property_set(&pdev->dev);
        }
 }
 EXPORT_SYMBOL_GPL(platform_device_del);
@@ -507,6 +526,12 @@ struct platform_device *platform_device_register_full(
        if (ret)
                goto err;
 
+       if (pdevinfo->pset) {
+               ret = platform_device_add_properties(pdev, pdevinfo->pset);
+               if (ret)
+                       goto err;
+       }
+
        ret = platform_device_add(pdev);
        if (ret) {
 err: