mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 13:11:40 +00:00
Merge remote-tracking branch 'regmap/for-5.8' into regmap-linus
This commit is contained in:
commit
2b0f61e27f
@ -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,
|
|||||||
{
|
{
|
||||||
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;
|
||||||
|
|
||||||
|
err = kstrtobool_from_user(user_buf, count, &new_val);
|
||||||
|
/* Ignore malforned data like debugfs_write_file_bool() */
|
||||||
|
if (err)
|
||||||
|
return count;
|
||||||
|
|
||||||
|
err = debugfs_file_get(file->f_path.dentry);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
map->lock(map->lock_arg);
|
map->lock(map->lock_arg);
|
||||||
|
|
||||||
was_enabled = map->cache_only;
|
if (new_val && !map->cache_only) {
|
||||||
|
|
||||||
result = debugfs_write_file_bool(file, user_buf, count, ppos);
|
|
||||||
if (result < 0) {
|
|
||||||
map->unlock(map->lock_arg);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (map->cache_only && !was_enabled) {
|
|
||||||
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,
|
|||||||
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,
|
|||||||
{
|
{
|
||||||
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;
|
||||||
|
|
||||||
|
err = kstrtobool_from_user(user_buf, count, &new_val);
|
||||||
|
/* Ignore malforned data like debugfs_write_file_bool() */
|
||||||
|
if (err)
|
||||||
|
return count;
|
||||||
|
|
||||||
|
err = debugfs_file_get(file->f_path.dentry);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
map->lock(map->lock_arg);
|
map->lock(map->lock_arg);
|
||||||
|
|
||||||
was_enabled = map->cache_bypass;
|
if (new_val && !map->cache_bypass) {
|
||||||
|
|
||||||
result = debugfs_write_file_bool(file, user_buf, count, ppos);
|
|
||||||
if (result < 0)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
if (map->cache_bypass && !was_enabled) {
|
|
||||||
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)
|
|||||||
|
|
||||||
/* 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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user