From: Adrian Schmutzler Date: Fri, 3 Apr 2020 18:21:20 +0000 (+0200) Subject: bcm63xx: 5.4: add removed helper syscon_regmap_lookup_by_pdevname X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=8a2118e1b44fd2f385d621683927fdf3ae713379;p=openwrt%2Fstaging%2Faparcar.git bcm63xx: 5.4: add removed helper syscon_regmap_lookup_by_pdevname The helper syscon_regmap_lookup_by_pdevname has been removed in kernel patch 29d14b668d2f ("mfd: Remove unused helper syscon_regmap_lookup_by_pdevname") due to lack of users. However, we use this function in our local pinctrl drivers for BCM6358 and BCM6368. Thus, we have to add it locally. Signed-off-by: Adrian Schmutzler --- diff --git a/target/linux/bcm63xx/patches-5.4/144-add-removed-syscon_regmap_lookup_by_pdevname.patch b/target/linux/bcm63xx/patches-5.4/144-add-removed-syscon_regmap_lookup_by_pdevname.patch new file mode 100644 index 0000000000..ef246fafd4 --- /dev/null +++ b/target/linux/bcm63xx/patches-5.4/144-add-removed-syscon_regmap_lookup_by_pdevname.patch @@ -0,0 +1,64 @@ +From: Adrian Schmutzler +Date: Fri, 03 Apr 2020 19:50:03 +0200 +Subject: add removed helper syscon_regmap_lookup_by_pdevname + +The helper syscon_regmap_lookup_by_pdevname has been removed in 29d14b668d2f +("mfd: Remove unused helper syscon_regmap_lookup_by_pdevname") due to lack +of users. + +Thus, we have to maintain it locally. + +Signed-off-by: Adrian Schmutzler + +--- a/drivers/mfd/syscon.c ++++ b/drivers/mfd/syscon.c +@@ -204,6 +204,27 @@ struct regmap *syscon_regmap_lookup_by_c + } + EXPORT_SYMBOL_GPL(syscon_regmap_lookup_by_compatible); + ++static int syscon_match_pdevname(struct device *dev, void *data) ++{ ++ return !strcmp(dev_name(dev), (const char *)data); ++} ++ ++struct regmap *syscon_regmap_lookup_by_pdevname(const char *s) ++{ ++ struct device *dev; ++ struct syscon *syscon; ++ ++ dev = driver_find_device(&syscon_driver.driver, NULL, (void *)s, ++ syscon_match_pdevname); ++ if (!dev) ++ return ERR_PTR(-EPROBE_DEFER); ++ ++ syscon = dev_get_drvdata(dev); ++ ++ return syscon->regmap; ++} ++EXPORT_SYMBOL_GPL(syscon_regmap_lookup_by_pdevname); ++ + struct regmap *syscon_regmap_lookup_by_phandle(struct device_node *np, + const char *property) + { +--- a/include/linux/mfd/syscon.h ++++ b/include/linux/mfd/syscon.h +@@ -20,6 +20,7 @@ struct device_node; + 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_pdevname(const char *s); + extern struct regmap *syscon_regmap_lookup_by_phandle( + struct device_node *np, + const char *property); +@@ -38,6 +39,11 @@ static inline struct regmap *syscon_regm + { + return ERR_PTR(-ENOTSUPP); + } ++ ++static inline struct regmap *syscon_regmap_lookup_by_pdevname(const char *s) ++{ ++ return ERR_PTR(-ENOTSUPP); ++} + + static inline struct regmap *syscon_regmap_lookup_by_phandle( + struct device_node *np,