regmap: Add support for writing to regmap `registers'
Subsystems (2)
PATCH 2/3 regmap: Add support for writing to regmap `registers'
To enable writing to the regmap `registers' file, users will need to modify the source directly and #define REGMAP_ALLOW_WRITE_DEBUGFS. The reason for this is that it is dangerous to expose this functionality in general where clients could potentially be PMICs.
--- drivers/base/regmap/regmap-debugfs.c | 39 ++++++++++++++++++++++++++++++++++ 1 files changed, 39 insertions(+), 0 deletions(-)
drivers/base/regmap/regmap-debugfs.c +39 -0
@@ -103,9 +103,48 @@ out:return ret; } +#undef REGMAP_ALLOW_WRITE_DEBUGFS +#ifdef REGMAP_ALLOW_WRITE_DEBUGFS +/* This can be dangerous especially when we have clients such as +* PMICs, therefore don't provide any real compile time configuration option +* for this feature, people who want to use this will need to modify +* the source code directly. */ +static ssize_t regmap_map_write_file (struct file *file,const char __user *user_buf, +size_t count,loff_t *ppos) +{ +char buf[32 ]; +size_t buf_size; +char *start = buf; +unsigned long reg, value; +struct regmap *map = file->private_data; + + buf_size =min (count, (sizeof (buf)-1 )); +if (copy_from_user (buf, user_buf, buf_size)) +return -EFAULT ; + buf[buf_size] =0 ; + +while (*start ==' ' ) + start++; + reg =simple_strtoul (start, &start,16 ); +while (*start ==' ' ) + start++; +if (strict_strtoul (start,16 , &value)) +return -EINVAL ; + +/* Userspace has been fiddling around behind the kernel's back */ +add_taint (TAINT_USER ); + +regmap_write (map, reg, value); +return buf_size; +} +#endif +static const struct file_operations regmap_map_fops = { .open = regmap_open_file, .read = regmap_map_read_file, +#ifdef REGMAP_ALLOW_WRITE_DEBUGFS + .write = regmap_map_write_file, +#endif .llseek = default_llseek, };
Signature · 1 line
1.7.9.1
Quoted 4 lines · Dimitris Papastamos
To enable writing to the regmap `registers' file, users will need to modify the source directly and #define
REGMAP_ALLOW_WRITE_DEBUGFS. The reason for this is that it is dangerous to expose this functionality in general where clients could potentially be PMICs.
Applied but...
drivers/base/regmap/regmap-debugfs.c out: · line 113
Quoted 2 lines
drivers/base/regmap/regmap-debugfs.c +2
-0+static ssize_t regmap_map_write_file (struct file *file,const char __user *user_buf, +size_t count,loff_t *ppos)
...with this wrapped into 80 columns.
drivers/base/regmap/regmap-debugfs.c out: · line 147
Quoted 6 lines
static const struct
file_operationsregmap_map_fops= {drivers/base/regmap/regmap-debugfs.c +3
-0.open = regmap_open_file, .read = regmap_map_read_file, +#ifdef REGMAP_ALLOW_WRITE_DEBUGFS + .write = regmap_map_write_file, +#endif
It's also a bit more idiomatic to have an #else #define function NULL in the main ifdef for stuff like this; I'll fix that up as well.
Quoted 6 lines · Mark Brown
Quoted 5 lines · Dimitris Papastamos
To enable writing to the regmap `registers' file, users will need to modify the source directly and #define
REGMAP_ALLOW_WRITE_DEBUGFS. The reason for this is that it is dangerous to expose this functionality in general where clients could potentially be PMICs.
Quoted 9 lines
drivers/base/regmap/regmap-debugfs.c out: · line 147
Quoted 6 lines
static const struct
file_operationsregmap_map_fops= {drivers/base/regmap/regmap-debugfs.c +3
-0.open = regmap_open_file, .read = regmap_map_read_file, +#ifdef REGMAP_ALLOW_WRITE_DEBUGFS + .write = regmap_map_write_file, +#endif It's also a bit more idiomatic to have an #else #define function NULL in the main ifdef for stuff like this; I'll fix that up as well.
Oops yea, that makes sense.
Thanks,
Dimitris