diff options
author | Miquel Raynal <miquel.raynal@bootlin.com> | 2023-04-04 18:21:18 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2023-04-05 19:41:10 +0200 |
commit | e6506f06d5e82765666902ccf9e9162f3e31d518 (patch) | |
tree | 952da5554535f3fbeb3082863a20edb9a1cbd7a6 /drivers/of/module.c | |
parent | bd7a7ed774afd1a4174df34227626c95573be517 (diff) | |
download | linux-stable-e6506f06d5e82765666902ccf9e9162f3e31d518.tar.gz linux-stable-e6506f06d5e82765666902ccf9e9162f3e31d518.tar.bz2 linux-stable-e6506f06d5e82765666902ccf9e9162f3e31d518.zip |
of: Move the request module helper logic to module.c
Depending on device.c for pure OF handling is considered
backwards. Let's extract the content of of_device_request_module() to
have the real logic under module.c.
The next step will be to convert users of of_device_request_module() to
use the new helper.
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Rob Herring <robh@kernel.org>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20230404172148.82422-11-srinivas.kandagatla@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/of/module.c')
-rw-r--r-- | drivers/of/module.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/drivers/of/module.c b/drivers/of/module.c index 4c59752bc8d6..0e8aa974f0f2 100644 --- a/drivers/of/module.c +++ b/drivers/of/module.c @@ -4,6 +4,7 @@ */ #include <linux/of.h> +#include <linux/module.h> #include <linux/slab.h> #include <linux/string.h> @@ -42,3 +43,32 @@ ssize_t of_modalias(const struct device_node *np, char *str, ssize_t len) return tsize; } + +int of_request_module(const struct device_node *np) +{ + char *str; + ssize_t size; + int ret; + + if (!np) + return -ENODEV; + + size = of_modalias(np, NULL, 0); + if (size < 0) + return size; + + /* Reserve an additional byte for the trailing '\0' */ + size++; + + str = kmalloc(size, GFP_KERNEL); + if (!str) + return -ENOMEM; + + of_modalias(np, str, size); + str[size - 1] = '\0'; + ret = request_module(str); + kfree(str); + + return ret; +} +EXPORT_SYMBOL_GPL(of_request_module); |