Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit afab2f7b authored by Mark Brown's avatar Mark Brown
Browse files

regmap: debugfs: Factor out initial seek



In preparation for doing things a bit more quickly than a linear scan
factor out the initial seek from the debugfs register dump.

Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent db04328c
Loading
Loading
Loading
Loading
+36 −3
Original line number Diff line number Diff line
@@ -56,16 +56,46 @@ static const struct file_operations regmap_name_fops = {
	.llseek = default_llseek,
};

/*
 * Work out where the start offset maps into register numbers, bearing
 * in mind that we suppress hidden registers.
 */
static unsigned int regmap_debugfs_get_dump_start(struct regmap *map,
						  unsigned int base,
						  loff_t from,
						  loff_t *pos)
{
	loff_t p = *pos;
	unsigned int i;

	for (i = base; i <= map->max_register; i += map->reg_stride) {
		if (!regmap_readable(map, i))
			continue;

		if (regmap_precious(map, i))
			continue;

		if (i >= from) {
			*pos = p;
			return i;
		}

		p += map->debugfs_tot_len;
	}

	return base;
}

static ssize_t regmap_read_debugfs(struct regmap *map, unsigned int from,
				   unsigned int to, char __user *user_buf,
				   size_t count, loff_t *ppos)
{
	size_t buf_pos = 0;
	loff_t p = 0;
	loff_t p = *ppos;
	ssize_t ret;
	int i;
	char *buf;
	unsigned int val;
	unsigned int val, start_reg;

	if (*ppos < 0 || !count)
		return -EINVAL;
@@ -83,7 +113,10 @@ static ssize_t regmap_read_debugfs(struct regmap *map, unsigned int from,
			map->debugfs_val_len + 3;      /* : \n */
	}

	for (i = from; i <= to; i += map->reg_stride) {
	/* Work out which register we're starting at */
	start_reg = regmap_debugfs_get_dump_start(map, from, *ppos, &p);

	for (i = start_reg; i <= to; i += map->reg_stride) {
		if (!regmap_readable(map, i))
			continue;