summaryrefslogtreecommitdiff
path: root/drivers/regulator
diff options
context:
space:
mode:
authorPeter De Schrijver <pdeschrijver@nvidia.com>2011-05-04 14:05:35 +0300
committerNiket Sirsi <nsirsi@nvidia.com>2011-05-23 17:21:44 -0700
commitd3b16f930854b439f1d92765fa5353608e43a86f (patch)
tree0c8dccacc12da306452c2920eb3cf1014d4b7538 /drivers/regulator
parent5e628f151a5b09147c235bbc201ba6aa3802bf12 (diff)
regulator: generate status events for all regulators
Change-Id: I6aba475047e0f1e1186bff88dfe9aedaf6a8b415 Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com> Reviewed-on: http://git-master/r/31532 Reviewed-by: Niket Sirsi <nsirsi@nvidia.com> Tested-by: Niket Sirsi <nsirsi@nvidia.com>
Diffstat (limited to 'drivers/regulator')
-rw-r--r--drivers/regulator/core.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 1a6582f22186..d3aec469434a 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -28,6 +28,9 @@
#define CREATE_TRACE_POINTS
#include <trace/events/regulator.h>
+#include <linux/debugfs.h>
+#include <linux/seq_file.h>
+#include <linux/uaccess.h>
#include "dummy.h"
@@ -2734,4 +2737,59 @@ unlock:
return 0;
}
+
+#ifdef CONFIG_DEBUG_FS
+static int regulator_syncevent(struct file *file, const char __user *user_buf,
+ size_t count, loff_t *ppos)
+{
+ struct regulator_dev *rdev;
+ char buffer[40];
+ int buf_size;
+
+ memset(buffer, 0, sizeof(buffer));
+ buf_size = min(count, (sizeof(buffer)-1));
+
+ if (copy_from_user(buffer, user_buf, buf_size))
+ return -EFAULT;
+
+ if (!strnicmp("all", buffer, 3)) {
+
+ mutex_lock(&regulator_list_mutex);
+
+ list_for_each_entry(rdev, &regulator_list, list) {
+ mutex_lock(&rdev->mutex);
+
+ if (_regulator_is_enabled(rdev))
+ trace_regulator_enable(rdev_get_name(rdev));
+ else
+ trace_regulator_disable(rdev_get_name(rdev));
+
+ trace_regulator_set_voltage(rdev_get_name(rdev),
+ _regulator_get_voltage(rdev),
+ _regulator_get_voltage(rdev));
+
+ mutex_unlock(&rdev->mutex);
+ }
+ }
+
+ mutex_unlock(&regulator_list_mutex);
+
+ return count;
+}
+
+static const struct file_operations regulator_syncevent_fops = {
+ .write = regulator_syncevent,
+};
+
+static int __init regulator_init_debugfs(void)
+{
+ debugfs_create_file("syncevent_regulators", S_IWUGO, NULL, NULL,
+ &regulator_syncevent_fops);
+
+ return 0;
+}
+
+late_initcall(regulator_init_debugfs);
+#endif
+
late_initcall(regulator_init_complete);