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: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
Родитель
db04328c16
Коммит
afab2f7b21
|
@ -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;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче