diff options
author | Jonas Aaberg <jonas.aberg@stericsson.com> | 2012-06-18 04:35:28 -0400 |
---|---|---|
committer | Lee Jones <lee.jones@linaro.org> | 2013-03-06 23:27:52 -0500 |
commit | 222460cb4b2fe1c1e84f3302a8d8dbc4a94f6837 (patch) | |
tree | f2abb5061e2e4c4ba8aade141cb8ddae35ca4811 /drivers/mfd/ab8500-debugfs.c | |
parent | 3e1a498f2728476535571d270081a17fdfceaf26 (diff) |
mfd: ab8500-debug: Better error handling on crash
Stop trying to read i2c registers if one fail.
Signed-off-by: Jonas Aaberg <jonas.aberg@stericsson.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Reviewed-by: Mattias WALLIN <mattias.wallin@stericsson.com>
Acked-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/mfd/ab8500-debugfs.c')
-rw-r--r-- | drivers/mfd/ab8500-debugfs.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/mfd/ab8500-debugfs.c b/drivers/mfd/ab8500-debugfs.c index 7febf171e755..1e76a2f35066 100644 --- a/drivers/mfd/ab8500-debugfs.c +++ b/drivers/mfd/ab8500-debugfs.c | |||
@@ -608,7 +608,6 @@ struct ab8500_register_dump | |||
608 | u8 bank; | 608 | u8 bank; |
609 | u8 reg; | 609 | u8 reg; |
610 | u8 value; | 610 | u8 value; |
611 | int ret; | ||
612 | } ab8500_complete_register_dump[DUMP_MAX_REGS]; | 611 | } ab8500_complete_register_dump[DUMP_MAX_REGS]; |
613 | 612 | ||
614 | extern int prcmu_abb_read(u8 slave, u8 reg, u8 *value, u8 size); | 613 | extern int prcmu_abb_read(u8 slave, u8 reg, u8 *value, u8 size); |
@@ -618,6 +617,7 @@ void ab8500_dump_all_banks_to_mem(void) | |||
618 | { | 617 | { |
619 | int i, r = 0; | 618 | int i, r = 0; |
620 | u8 bank; | 619 | u8 bank; |
620 | int err = 0; | ||
621 | 621 | ||
622 | pr_info("Saving all ABB registers at \"ab8500_complete_register_dump\" " | 622 | pr_info("Saving all ABB registers at \"ab8500_complete_register_dump\" " |
623 | "for crash analyze.\n"); | 623 | "for crash analyze.\n"); |
@@ -630,11 +630,12 @@ void ab8500_dump_all_banks_to_mem(void) | |||
630 | reg <= debug_ranges[bank].range[i].last; | 630 | reg <= debug_ranges[bank].range[i].last; |
631 | reg++) { | 631 | reg++) { |
632 | u8 value; | 632 | u8 value; |
633 | int err; | ||
634 | 633 | ||
635 | err = prcmu_abb_read(bank, reg, &value, 1); | 634 | err = prcmu_abb_read(bank, reg, &value, 1); |
636 | 635 | ||
637 | ab8500_complete_register_dump[r].ret = err; | 636 | if (err < 0) |
637 | goto out; | ||
638 | |||
638 | ab8500_complete_register_dump[r].bank = bank; | 639 | ab8500_complete_register_dump[r].bank = bank; |
639 | ab8500_complete_register_dump[r].reg = reg; | 640 | ab8500_complete_register_dump[r].reg = reg; |
640 | ab8500_complete_register_dump[r].value = value; | 641 | ab8500_complete_register_dump[r].value = value; |
@@ -644,11 +645,17 @@ void ab8500_dump_all_banks_to_mem(void) | |||
644 | if (r >= DUMP_MAX_REGS) { | 645 | if (r >= DUMP_MAX_REGS) { |
645 | pr_err("%s: too many register to dump!\n", | 646 | pr_err("%s: too many register to dump!\n", |
646 | __func__); | 647 | __func__); |
647 | return; | 648 | err = -EINVAL; |
649 | goto out; | ||
648 | } | 650 | } |
649 | } | 651 | } |
650 | } | 652 | } |
651 | } | 653 | } |
654 | out: | ||
655 | if (err >= 0) | ||
656 | pr_info("Saved all ABB registers.\n"); | ||
657 | else | ||
658 | pr_info("Failed to save all ABB registers.\n"); | ||
652 | } | 659 | } |
653 | 660 | ||
654 | static int ab8500_all_banks_open(struct inode *inode, struct file *file) | 661 | static int ab8500_all_banks_open(struct inode *inode, struct file *file) |