123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- From bd7a7ed774afd1a4174df34227626c95573be517 Mon Sep 17 00:00:00 2001
- From: Miquel Raynal <[email protected]>
- Date: Tue, 4 Apr 2023 18:21:17 +0100
- Subject: [PATCH] of: Move of_modalias() to module.c
- Create a specific .c file for OF related module handling.
- Move of_modalias() inside as a first step.
- The helper is exposed through of.h even though it is only used by core
- files because the users from device.c will soon be split into an OF-only
- helper in module.c as well as a device-oriented inline helper in
- of_device.h. Putting this helper in of_private.h would require to
- include of_private.h from of_device.h, which is not acceptable.
- Suggested-by: Rob Herring <[email protected]>
- Signed-off-by: Miquel Raynal <[email protected]>
- Reviewed-by: Rob Herring <[email protected]>
- Signed-off-by: Srinivas Kandagatla <[email protected]>
- Link: https://lore.kernel.org/r/[email protected]
- Signed-off-by: Greg Kroah-Hartman <[email protected]>
- ---
- drivers/of/Makefile | 2 +-
- drivers/of/device.c | 37 -------------------------------------
- drivers/of/module.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
- include/linux/of.h | 9 +++++++++
- 4 files changed, 54 insertions(+), 38 deletions(-)
- create mode 100644 drivers/of/module.c
- --- a/drivers/of/Makefile
- +++ b/drivers/of/Makefile
- @@ -1,5 +1,5 @@
- # SPDX-License-Identifier: GPL-2.0
- -obj-y = base.o device.o platform.o property.o
- +obj-y = base.o device.o module.o platform.o property.o
- obj-$(CONFIG_OF_KOBJ) += kobj.o
- obj-$(CONFIG_OF_DYNAMIC) += dynamic.o
- obj-$(CONFIG_OF_FLATTREE) += fdt.o
- --- a/drivers/of/device.c
- +++ b/drivers/of/device.c
- @@ -1,5 +1,4 @@
- // SPDX-License-Identifier: GPL-2.0
- -#include <linux/string.h>
- #include <linux/kernel.h>
- #include <linux/of.h>
- #include <linux/of_device.h>
- @@ -241,42 +240,6 @@ const void *of_device_get_match_data(con
- }
- EXPORT_SYMBOL(of_device_get_match_data);
-
- -static ssize_t of_modalias(const struct device_node *np, char *str, ssize_t len)
- -{
- - const char *compat;
- - char *c;
- - struct property *p;
- - ssize_t csize;
- - ssize_t tsize;
- -
- - /* Name & Type */
- - /* %p eats all alphanum characters, so %c must be used here */
- - csize = snprintf(str, len, "of:N%pOFn%c%s", np, 'T',
- - of_node_get_device_type(np));
- - tsize = csize;
- - len -= csize;
- - if (str)
- - str += csize;
- -
- - of_property_for_each_string(np, "compatible", p, compat) {
- - csize = strlen(compat) + 1;
- - tsize += csize;
- - if (csize > len)
- - continue;
- -
- - csize = snprintf(str, len, "C%s", compat);
- - for (c = str; c; ) {
- - c = strchr(c, ' ');
- - if (c)
- - *c++ = '_';
- - }
- - len -= csize;
- - str += csize;
- - }
- -
- - return tsize;
- -}
- -
- int of_device_request_module(struct device *dev)
- {
- char *str;
- --- /dev/null
- +++ b/drivers/of/module.c
- @@ -0,0 +1,44 @@
- +// SPDX-License-Identifier: GPL-2.0
- +/*
- + * Linux kernel module helpers.
- + */
- +
- +#include <linux/of.h>
- +#include <linux/slab.h>
- +#include <linux/string.h>
- +
- +ssize_t of_modalias(const struct device_node *np, char *str, ssize_t len)
- +{
- + const char *compat;
- + char *c;
- + struct property *p;
- + ssize_t csize;
- + ssize_t tsize;
- +
- + /* Name & Type */
- + /* %p eats all alphanum characters, so %c must be used here */
- + csize = snprintf(str, len, "of:N%pOFn%c%s", np, 'T',
- + of_node_get_device_type(np));
- + tsize = csize;
- + len -= csize;
- + if (str)
- + str += csize;
- +
- + of_property_for_each_string(np, "compatible", p, compat) {
- + csize = strlen(compat) + 1;
- + tsize += csize;
- + if (csize > len)
- + continue;
- +
- + csize = snprintf(str, len, "C%s", compat);
- + for (c = str; c; ) {
- + c = strchr(c, ' ');
- + if (c)
- + *c++ = '_';
- + }
- + len -= csize;
- + str += csize;
- + }
- +
- + return tsize;
- +}
- --- a/include/linux/of.h
- +++ b/include/linux/of.h
- @@ -373,6 +373,9 @@ extern int of_parse_phandle_with_args_ma
- extern int of_count_phandle_with_args(const struct device_node *np,
- const char *list_name, const char *cells_name);
-
- +/* module functions */
- +extern ssize_t of_modalias(const struct device_node *np, char *str, ssize_t len);
- +
- /* phandle iterator functions */
- extern int of_phandle_iterator_init(struct of_phandle_iterator *it,
- const struct device_node *np,
- @@ -735,6 +738,12 @@ static inline int of_count_phandle_with_
- return -ENOSYS;
- }
-
- +static inline ssize_t of_modalias(const struct device_node *np, char *str,
- + ssize_t len)
- +{
- + return -ENODEV;
- +}
- +
- static inline int of_phandle_iterator_init(struct of_phandle_iterator *it,
- const struct device_node *np,
- const char *list_name,
|