Messages in this thread Patch in this message | | | From | Paul Cercueil <> | Subject | [PATCH] mfd/syscon: Add device_node_to_regmap() | Date | Tue, 23 Jul 2019 14:55:35 -0400 |
| |
device_node_to_regmap() is exactly like syscon_node_to_regmap(), but it does not check that the node is compatible with "syscon".
The rationale behind this, is that one device node with a standard compatible string "foo,bar" can be covered by multiple drivers sharing a regmap, or by a single driver doing all the job without a regmap, but these are implementation details which shouldn't reflect on the devicetree.
Signed-off-by: Paul Cercueil <paul@crapouillou.net> --- drivers/mfd/syscon.c | 14 ++++++++++---- include/linux/mfd/syscon.h | 6 ++++++ 2 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/drivers/mfd/syscon.c b/drivers/mfd/syscon.c index b65e585fc8c6..3dcb56d4688d 100644 --- a/drivers/mfd/syscon.c +++ b/drivers/mfd/syscon.c @@ -51,9 +51,6 @@ static struct syscon *of_syscon_register(struct device_node *np) struct regmap_config syscon_config = syscon_regmap_config; struct resource res; - if (!of_device_is_compatible(np, "syscon")) - return ERR_PTR(-EINVAL); - syscon = kzalloc(sizeof(*syscon), GFP_KERNEL); if (!syscon) return ERR_PTR(-ENOMEM); @@ -150,7 +147,7 @@ static struct syscon *of_syscon_register(struct device_node *np) return ERR_PTR(ret); } -struct regmap *syscon_node_to_regmap(struct device_node *np) +struct regmap *device_node_to_regmap(struct device_node *np) { struct syscon *entry, *syscon = NULL; @@ -172,6 +169,15 @@ struct regmap *syscon_node_to_regmap(struct device_node *np) return syscon->regmap; } +EXPORT_SYMBOL_GPL(device_node_to_regmap); + +struct regmap *syscon_node_to_regmap(struct device_node *np) +{ + if (!of_device_is_compatible(np, "syscon")) + return ERR_PTR(-EINVAL); + + return device_node_to_regmap(np); +} EXPORT_SYMBOL_GPL(syscon_node_to_regmap); struct regmap *syscon_regmap_lookup_by_compatible(const char *s) diff --git a/include/linux/mfd/syscon.h b/include/linux/mfd/syscon.h index 8cfda0554381..112dc66262cc 100644 --- a/include/linux/mfd/syscon.h +++ b/include/linux/mfd/syscon.h @@ -17,12 +17,18 @@ struct device_node; #ifdef CONFIG_MFD_SYSCON +extern struct regmap *device_node_to_regmap(struct device_node *np); extern struct regmap *syscon_node_to_regmap(struct device_node *np); extern struct regmap *syscon_regmap_lookup_by_compatible(const char *s); extern struct regmap *syscon_regmap_lookup_by_phandle( struct device_node *np, const char *property); #else +static inline struct regmap *device_node_to_regmap(struct device_node *np) +{ + return ERR_PTR(-ENOTSUPP); +} + static inline struct regmap *syscon_node_to_regmap(struct device_node *np) { return ERR_PTR(-ENOTSUPP); -- 2.21.0.593.g511ec345e18
| |