diff options
author | Peter De Schrijver <pdeschrijver@nvidia.com> | 2011-05-04 14:05:35 +0300 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:43:12 -0800 |
commit | 5af0b2d42074cc32b6dae09ffb21a18b21011055 (patch) | |
tree | ea585ff0d16e42706c8f396fc49e4cd170d91f91 /drivers/regulator/core.c | |
parent | e54b4706e5804055a04d68a5615bb197e79a9f83 (diff) |
regulator: generate status events for all regulators
Original-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>
Rebase-Id: R7f6a01f24db741f441c692bb95ccc2017b25344d
Diffstat (limited to 'drivers/regulator/core.c')
-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 d8e6a429e8ba..bd081d4ae292 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -31,6 +31,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" @@ -2988,4 +2991,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); |