forked from luck/tmp_suning_uos_patched
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:
parent
db04328c16
commit
afab2f7b21
@ -56,16 +56,46 @@ static const struct file_operations regmap_name_fops = {
|
|||||||
.llseek = default_llseek,
|
.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,
|
static ssize_t regmap_read_debugfs(struct regmap *map, unsigned int from,
|
||||||
unsigned int to, char __user *user_buf,
|
unsigned int to, char __user *user_buf,
|
||||||
size_t count, loff_t *ppos)
|
size_t count, loff_t *ppos)
|
||||||
{
|
{
|
||||||
size_t buf_pos = 0;
|
size_t buf_pos = 0;
|
||||||
loff_t p = 0;
|
loff_t p = *ppos;
|
||||||
ssize_t ret;
|
ssize_t ret;
|
||||||
int i;
|
int i;
|
||||||
char *buf;
|
char *buf;
|
||||||
unsigned int val;
|
unsigned int val, start_reg;
|
||||||
|
|
||||||
if (*ppos < 0 || !count)
|
if (*ppos < 0 || !count)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -83,7 +113,10 @@ static ssize_t regmap_read_debugfs(struct regmap *map, unsigned int from,
|
|||||||
map->debugfs_val_len + 3; /* : \n */
|
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))
|
if (!regmap_readable(map, i))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user