Function to enable and register a disabled device. The devices can be registered using the device node with of_register_disabled_device() or with the device node name/path by using the of_register_disabled_device_by_name() function.
Signed-off-by: Teresa Gámez <t.ga...@phytec.de> --- drivers/of/platform.c | 43 +++++++++++++++++++++++++++++++++++++++++++ include/of.h | 14 ++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/drivers/of/platform.c b/drivers/of/platform.c index c417cfd..e4a3042 100644 --- a/drivers/of/platform.c +++ b/drivers/of/platform.c @@ -197,6 +197,49 @@ static struct device_d *of_platform_device_create(struct device_node *np, return NULL; } +/** + * of_register_disabled_device - Enable and register device + * @np: pointer to node to enable create device for + * + * Returns pointer to created platform device, or NULL if a device was not + * registered. Unavailable devices will not get registered. + */ +struct device_d *of_register_disabled_device(struct device_node *np) +{ + struct device_d *dev; + + of_device_enable(np); + + dev = of_platform_device_create(np, NULL); + if (!dev) + return NULL; + + return dev; +} +EXPORT_SYMBOL(of_register_disabled_device); + +/** + * of_register_disabled_device - Enable and register device by name + * @name: name or path of the device node + * + * Returns pointer to created platform device, or NULL if a device was not + * registered. Unavailable devices will not get registered. + */ +struct device_d *of_register_disabled_device_by_name(const char *name) +{ + struct device_node *node; + + node = of_find_node_by_name(NULL, name); + if (!node) + node = of_find_node_by_path(name); + + if (!node) + return NULL; + + return of_register_disabled_device(node); +} +EXPORT_SYMBOL(of_register_disabled_device_by_name); + #ifdef CONFIG_ARM_AMBA static struct device_d *of_amba_device_create(struct device_node *np) { diff --git a/include/of.h b/include/of.h index 29694a9..67b1937 100644 --- a/include/of.h +++ b/include/of.h @@ -227,6 +227,8 @@ extern int of_platform_populate(struct device_node *root, const struct of_device_id *matches, struct device_d *parent); extern struct device_d *of_find_device_by_node(struct device_node *np); +extern struct device_d *of_register_disabled_device(struct device_node *np); +extern struct device_d *of_register_disabled_device_by_name(const char *name); struct cdev *of_parse_partition(struct cdev *cdev, struct device_node *node); int of_parse_partitions(struct cdev *cdev, struct device_node *node); @@ -582,6 +584,18 @@ static inline struct device_d *of_find_device_by_node(struct device_node *np) { return NULL; } + +static inline struct device_d *of_register_disabled_device( + struct device_node *np) +{ + return NULL; +} + +static inline struct device_d *of_register_disabled_device_by_name( + const char *name) +{ + return NULL; +} #endif #define for_each_node_by_name(dn, name) \ -- 1.9.1 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox