summaryrefslogtreecommitdiff
path: root/drivers/mfd/axp20x.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mfd/axp20x.c')
-rw-r--r--drivers/mfd/axp20x.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
index 96102753847f..b8324f5dc078 100644
--- a/drivers/mfd/axp20x.c
+++ b/drivers/mfd/axp20x.c
@@ -28,9 +28,11 @@
#include <linux/mfd/core.h>
#include <linux/of_device.h>
#include <linux/acpi.h>
-
#define AXP20X_OFF 0x80
+static DEFINE_SPINLOCK(axp20x_list_slock);
+static LIST_HEAD(axp20x_list);
+
static const char * const axp20x_model_names[] = {
"AXP152",
"AXP202",
@@ -821,6 +823,27 @@ int axp20x_match_device(struct axp20x_dev *axp20x)
}
EXPORT_SYMBOL(axp20x_match_device);
+struct regmap *axp20x_node_to_regmap(struct device_node *np)
+{
+ struct axp20x_dev *entry, *axp20x = NULL;
+
+ spin_lock(&axp20x_list_slock);
+
+ list_for_each_entry(entry, &axp20x_list, list)
+ if (entry->dev && entry->dev->of_node == np) {
+ axp20x = entry;
+ break;
+ }
+
+ spin_unlock(&axp20x_list_slock);
+
+ if (axp20x)
+ return axp20x->regmap;
+
+ return NULL;
+}
+EXPORT_SYMBOL_GPL(syscon_node_to_regmap);
+
int axp20x_device_probe(struct axp20x_dev *axp20x)
{
int ret;
@@ -848,6 +871,10 @@ int axp20x_device_probe(struct axp20x_dev *axp20x)
pm_power_off = axp20x_power_off;
}
+ spin_lock(&axp20x_list_slock);
+ list_add_tail(&axp20x->list, &axp20x_list);
+ spin_unlock(&axp20x_list_slock);
+
dev_info(axp20x->dev, "AXP20X driver loaded\n");
return 0;