bcm63xx: 5.4: add removed helper syscon_regmap_lookup_by_pdevname
authorAdrian Schmutzler <freifunk@adrianschmutzler.de>
Fri, 3 Apr 2020 18:21:20 +0000 (20:21 +0200)
committerAdrian Schmutzler <freifunk@adrianschmutzler.de>
Sun, 12 Apr 2020 10:44:57 +0000 (12:44 +0200)
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 <freifunk@adrianschmutzler.de>
target/linux/bcm63xx/patches-5.4/144-add-removed-syscon_regmap_lookup_by_pdevname.patch [new file with mode: 0644]

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 (file)
index 0000000..ef246fa
--- /dev/null
@@ -0,0 +1,64 @@
+From: Adrian Schmutzler <freifunk@adrianschmutzler.de>
+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 <freifunk@adrianschmutzler.de>
+
+--- 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,