Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 367443
b: refs/heads/master
c: c7ebaee
h: refs/heads/master
i:
  367441: 22264a6
  367439: 629b106
v: v3
  • Loading branch information
Lee Jones committed Mar 7, 2013
1 parent a5072a3 commit f4ea3a8
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c55355221e259bc4d6c1dc3ebe0852afce644a40
refs/heads/master: c7ebaee292fb0f935752d50ef9bad1db74efde6e
78 changes: 78 additions & 0 deletions trunk/drivers/mfd/ab8500-debugfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -1244,6 +1244,79 @@ static int ab8500_hwreg_open(struct inode *inode, struct file *file)
return single_open(file, ab8500_hwreg_print, inode->i_private);
}

#define AB8500_SUPPLY_CONTROL_CONFIG_1 0x01
#define AB8500_SUPPLY_CONTROL_REG 0x00
#define AB8500_FIRST_SIM_REG 0x80
#define AB8500_LAST_SIM_REG 0x8B
#define AB8505_LAST_SIM_REG 0x8C

static int ab8500_print_modem_registers(struct seq_file *s, void *p)
{
struct device *dev = s->private;
struct ab8500 *ab8500;
int err;
u8 value;
u8 orig_value;
u32 bank = AB8500_REGU_CTRL2;
u32 last_sim_reg = AB8500_LAST_SIM_REG;
u32 reg;

ab8500 = dev_get_drvdata(dev->parent);
dev_warn(dev, "WARNING! This operation can interfer with modem side\n"
"and should only be done with care\n");

err = abx500_get_register_interruptible(dev,
AB8500_REGU_CTRL1, AB8500_SUPPLY_CONTROL_REG, &orig_value);
if (err < 0) {
dev_err(dev, "ab->read fail %d\n", err);
return err;
}
/* Config 1 will allow APE side to read SIM registers */
err = abx500_set_register_interruptible(dev,
AB8500_REGU_CTRL1, AB8500_SUPPLY_CONTROL_REG,
AB8500_SUPPLY_CONTROL_CONFIG_1);
if (err < 0) {
dev_err(dev, "ab->write fail %d\n", err);
return err;
}

seq_printf(s, " bank 0x%02X:\n", bank);

if (is_ab9540(ab8500) || is_ab8505(ab8500))
last_sim_reg = AB8505_LAST_SIM_REG;

for (reg = AB8500_FIRST_SIM_REG; reg <= last_sim_reg; reg++) {
err = abx500_get_register_interruptible(dev,
bank, reg, &value);
if (err < 0) {
dev_err(dev, "ab->read fail %d\n", err);
return err;
}
err = seq_printf(s, " [0x%02X/0x%02X]: 0x%02X\n",
bank, reg, value);
}
err = abx500_set_register_interruptible(dev,
AB8500_REGU_CTRL1, AB8500_SUPPLY_CONTROL_REG, orig_value);
if (err < 0) {
dev_err(dev, "ab->write fail %d\n", err);
return err;
}
return 0;
}

static int ab8500_modem_open(struct inode *inode, struct file *file)
{
return single_open(file, ab8500_print_modem_registers, inode->i_private);
}

static const struct file_operations ab8500_modem_fops = {
.open = ab8500_modem_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
.owner = THIS_MODULE,
};

static int ab8500_gpadc_bat_ctrl_print(struct seq_file *s, void *p)
{
int bat_ctrl_raw;
Expand Down Expand Up @@ -2570,6 +2643,11 @@ static int ab8500_debug_probe(struct platform_device *plf)
if (!file)
goto err;

file = debugfs_create_file("all-modem-registers", (S_IRUGO | S_IWUGO),
ab8500_dir, &plf->dev, &ab8500_modem_fops);
if (!file)
goto err;

file = debugfs_create_file("bat_ctrl", (S_IRUGO | S_IWUSR),
ab8500_gpadc_dir, &plf->dev, &ab8500_gpadc_bat_ctrl_fops);
if (!file)
Expand Down

0 comments on commit f4ea3a8

Please sign in to comment.