Commit 2b0f61e2 authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branch 'regmap/for-5.8' into regmap-linus

parents 11ba4688 299632e5
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# subsystems should select the appropriate symbols. # subsystems should select the appropriate symbols.
config REGMAP config REGMAP
default y if (REGMAP_I2C || REGMAP_SPI || REGMAP_SPMI || REGMAP_W1 || REGMAP_AC97 || REGMAP_MMIO || REGMAP_IRQ || REGMAP_SCCB || REGMAP_I3C) default y if (REGMAP_I2C || REGMAP_SPI || REGMAP_SPMI || REGMAP_W1 || REGMAP_AC97 || REGMAP_MMIO || REGMAP_IRQ || REGMAP_SOUNDWIRE || REGMAP_SCCB || REGMAP_I3C)
select IRQ_DOMAIN if REGMAP_IRQ select IRQ_DOMAIN if REGMAP_IRQ
bool bool
......
...@@ -463,29 +463,31 @@ static ssize_t regmap_cache_only_write_file(struct file *file, ...@@ -463,29 +463,31 @@ static ssize_t regmap_cache_only_write_file(struct file *file,
{ {
struct regmap *map = container_of(file->private_data, struct regmap *map = container_of(file->private_data,
struct regmap, cache_only); struct regmap, cache_only);
ssize_t result; bool new_val, require_sync = false;
bool was_enabled, require_sync = false;
int err; int err;
map->lock(map->lock_arg); err = kstrtobool_from_user(user_buf, count, &new_val);
/* Ignore malforned data like debugfs_write_file_bool() */
if (err)
return count;
was_enabled = map->cache_only; err = debugfs_file_get(file->f_path.dentry);
if (err)
return err;
result = debugfs_write_file_bool(file, user_buf, count, ppos); map->lock(map->lock_arg);
if (result < 0) {
map->unlock(map->lock_arg);
return result;
}
if (map->cache_only && !was_enabled) { if (new_val && !map->cache_only) {
dev_warn(map->dev, "debugfs cache_only=Y forced\n"); dev_warn(map->dev, "debugfs cache_only=Y forced\n");
add_taint(TAINT_USER, LOCKDEP_STILL_OK); add_taint(TAINT_USER, LOCKDEP_STILL_OK);
} else if (!map->cache_only && was_enabled) { } else if (!new_val && map->cache_only) {
dev_warn(map->dev, "debugfs cache_only=N forced: syncing cache\n"); dev_warn(map->dev, "debugfs cache_only=N forced: syncing cache\n");
require_sync = true; require_sync = true;
} }
map->cache_only = new_val;
map->unlock(map->lock_arg); map->unlock(map->lock_arg);
debugfs_file_put(file->f_path.dentry);
if (require_sync) { if (require_sync) {
err = regcache_sync(map); err = regcache_sync(map);
...@@ -493,7 +495,7 @@ static ssize_t regmap_cache_only_write_file(struct file *file, ...@@ -493,7 +495,7 @@ static ssize_t regmap_cache_only_write_file(struct file *file,
dev_err(map->dev, "Failed to sync cache %d\n", err); dev_err(map->dev, "Failed to sync cache %d\n", err);
} }
return result; return count;
} }
static const struct file_operations regmap_cache_only_fops = { static const struct file_operations regmap_cache_only_fops = {
...@@ -508,28 +510,32 @@ static ssize_t regmap_cache_bypass_write_file(struct file *file, ...@@ -508,28 +510,32 @@ static ssize_t regmap_cache_bypass_write_file(struct file *file,
{ {
struct regmap *map = container_of(file->private_data, struct regmap *map = container_of(file->private_data,
struct regmap, cache_bypass); struct regmap, cache_bypass);
ssize_t result; bool new_val;
bool was_enabled; int err;
map->lock(map->lock_arg); err = kstrtobool_from_user(user_buf, count, &new_val);
/* Ignore malforned data like debugfs_write_file_bool() */
if (err)
return count;
was_enabled = map->cache_bypass; err = debugfs_file_get(file->f_path.dentry);
if (err)
return err;
result = debugfs_write_file_bool(file, user_buf, count, ppos); map->lock(map->lock_arg);
if (result < 0)
goto out;
if (map->cache_bypass && !was_enabled) { if (new_val && !map->cache_bypass) {
dev_warn(map->dev, "debugfs cache_bypass=Y forced\n"); dev_warn(map->dev, "debugfs cache_bypass=Y forced\n");
add_taint(TAINT_USER, LOCKDEP_STILL_OK); add_taint(TAINT_USER, LOCKDEP_STILL_OK);
} else if (!map->cache_bypass && was_enabled) { } else if (!new_val && map->cache_bypass) {
dev_warn(map->dev, "debugfs cache_bypass=N forced\n"); dev_warn(map->dev, "debugfs cache_bypass=N forced\n");
} }
map->cache_bypass = new_val;
out:
map->unlock(map->lock_arg); map->unlock(map->lock_arg);
debugfs_file_put(file->f_path.dentry);
return result; return count;
} }
static const struct file_operations regmap_cache_bypass_fops = { static const struct file_operations regmap_cache_bypass_fops = {
......
...@@ -1364,7 +1364,7 @@ static int dev_get_regmap_match(struct device *dev, void *res, void *data) ...@@ -1364,7 +1364,7 @@ static int dev_get_regmap_match(struct device *dev, void *res, void *data)
/* If the user didn't specify a name match any */ /* If the user didn't specify a name match any */
if (data) if (data)
return (*r)->name == data; return !strcmp((*r)->name, data);
else else
return 1; return 1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment