Unverified Commit 2b0f61e2 authored by Mark Brown's avatar Mark Brown
Browse files

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

parents 11ba4688 299632e5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@
# subsystems should select the appropriate symbols.

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
	bool

+29 −23
Original line number Diff line number Diff line
@@ -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, cache_only);
	ssize_t result;
	bool was_enabled, require_sync = false;
	bool new_val, require_sync = false;
	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);
	if (result < 0) {
		map->unlock(map->lock_arg);
		return result;
	}
	map->lock(map->lock_arg);

	if (map->cache_only && !was_enabled) {
	if (new_val && !map->cache_only) {
		dev_warn(map->dev, "debugfs cache_only=Y forced\n");
		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");
		require_sync = true;
	}
	map->cache_only = new_val;

	map->unlock(map->lock_arg);
	debugfs_file_put(file->f_path.dentry);

	if (require_sync) {
		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);
	}

	return result;
	return count;
}

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, cache_bypass);
	ssize_t result;
	bool was_enabled;
	bool new_val;
	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);
	if (result < 0)
		goto out;
	map->lock(map->lock_arg);

	if (map->cache_bypass && !was_enabled) {
	if (new_val && !map->cache_bypass) {
		dev_warn(map->dev, "debugfs cache_bypass=Y forced\n");
		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");
	}
	map->cache_bypass = new_val;

out:
	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 = {
+1 −1
Original line number Diff line number Diff line
@@ -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 (data)
		return (*r)->name == data;
		return !strcmp((*r)->name, data);
	else
		return 1;
}