diff options
author | Peter De Schrijver <pdeschrijver@nvidia.com> | 2011-05-04 14:05:35 +0300 |
---|---|---|
committer | Niket Sirsi <nsirsi@nvidia.com> | 2011-05-23 17:21:44 -0700 |
commit | d3b16f930854b439f1d92765fa5353608e43a86f (patch) | |
tree | 0c8dccacc12da306452c2920eb3cf1014d4b7538 /drivers/regulator | |
parent | 5e628f151a5b09147c235bbc201ba6aa3802bf12 (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.c | 58 |
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(®ulator_list_mutex); + + list_for_each_entry(rdev, ®ulator_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(®ulator_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, + ®ulator_syncevent_fops); + + return 0; +} + +late_initcall(regulator_init_debugfs); +#endif + late_initcall(regulator_init_complete); |