Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 266968
b: refs/heads/master
c: 449e384
h: refs/heads/master
v: v3
  • Loading branch information
Mark Brown committed Aug 14, 2011
1 parent c6dfb23 commit ecc9453
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 21f555445676e5c7d30bb9b3487cb183d02e45e3
refs/heads/master: 449e38427fe57a6120fecd1051981c89ee862b3d
72 changes: 71 additions & 1 deletion trunk/drivers/base/regmap/regmap-debugfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,73 @@ static const struct file_operations regmap_map_fops = {
.llseek = default_llseek,
};

static ssize_t regmap_access_read_file(struct file *file,
char __user *user_buf, size_t count,
loff_t *ppos)
{
int reg_len, tot_len;
size_t buf_pos = 0;
loff_t p = 0;
ssize_t ret;
int i;
struct regmap *map = file->private_data;
char *buf;

if (*ppos < 0 || !count)
return -EINVAL;

buf = kmalloc(count, GFP_KERNEL);
if (!buf)
return -ENOMEM;

/* Calculate the length of a fixed format */
reg_len = regmap_calc_reg_len(map->max_register, buf, count);
tot_len = reg_len + 10; /* ': R W V P\n' */

for (i = 0; i < map->max_register; i++) {
/* Ignore registers which are neither readable nor writable */
if (!regmap_readable(map, i) && !regmap_writeable(map, i))
continue;

/* If we're in the region the user is trying to read */
if (p >= *ppos) {
/* ...but not beyond it */
if (buf_pos >= count - 1 - tot_len)
break;

/* Format the register */
snprintf(buf + buf_pos, count - buf_pos,
"%.*x: %c %c %c %c\n",
reg_len, i,
regmap_readable(map, i) ? 'y' : 'n',
regmap_writeable(map, i) ? 'y' : 'n',
regmap_volatile(map, i) ? 'y' : 'n',
regmap_precious(map, i) ? 'y' : 'n');

buf_pos += tot_len;
}
p += tot_len;
}

ret = buf_pos;

if (copy_to_user(user_buf, buf, buf_pos)) {
ret = -EFAULT;
goto out;
}

*ppos += buf_pos;

out:
kfree(buf);
return ret;
}

static const struct file_operations regmap_access_fops = {
.open = regmap_open_file,
.read = regmap_access_read_file,
.llseek = default_llseek,
};

void regmap_debugfs_init(struct regmap *map)
{
Expand All @@ -119,9 +186,12 @@ void regmap_debugfs_init(struct regmap *map)
return;
}

if (map->max_register)
if (map->max_register) {
debugfs_create_file("registers", 0400, map->debugfs,
map, &regmap_map_fops);
debugfs_create_file("access", 0400, map->debugfs,
map, &regmap_access_fops);
}
}

void regmap_debugfs_exit(struct regmap *map)
Expand Down

0 comments on commit ecc9453

Please sign in to comment.