diff options
author | Mian Yousaf Kaukab <mian.yousaf.kaukab@stericsson.com> | 2012-01-27 11:22:16 +0100 |
---|---|---|
committer | Philippe Langlais <philippe.langlais@stericsson.com> | 2012-05-22 11:01:35 +0200 |
commit | 7749ca5e2b52ed36d77a2d409b1a33327df09bd9 (patch) | |
tree | 814c451bba08e05a8b23af27532e9cd959a3c6a4 | |
parent | 2a033b8ca5b3c9df4d1971ae2a67874e68f4405b (diff) |
mfd: abx500: add api to dump all registers
Some drivers can detect sub system failures e.g. shared memory driver can detect
modem sub system failures. It would be helpful in analyzing these failures if AB
register dump is available at that point. This patch adds the API for the
drivers to dump AB registers in the kernel log.
ST-Ericsson Linux next: -
ST-Ericsson ID: 402239
ST-Ericsson FOSS-OUT ID: Trivial
Change-Id: I544e40b4e2f68a80a6aa73135d4a15c433ec6a8b
Signed-off-by: Mian Yousaf Kaukab <mian.yousaf.kaukab@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/46909
Reviewed-by: Linus WALLEIJ <linus.walleij@stericsson.com>
Reviewed-by: QABUILD
Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com>
-rw-r--r-- | drivers/mfd/abx500-core.c | 16 | ||||
-rw-r--r-- | include/linux/mfd/abx500.h | 2 |
2 files changed, 18 insertions, 0 deletions
diff --git a/drivers/mfd/abx500-core.c b/drivers/mfd/abx500-core.c index 7ce65f49480..9818afba251 100644 --- a/drivers/mfd/abx500-core.c +++ b/drivers/mfd/abx500-core.c @@ -153,6 +153,22 @@ int abx500_startup_irq_enabled(struct device *dev, unsigned int irq) } EXPORT_SYMBOL(abx500_startup_irq_enabled); +void abx500_dump_all_banks(void) +{ + struct abx500_ops *ops; + struct device dummy_child = {0}; + struct abx500_device_entry *dev_entry; + + list_for_each_entry(dev_entry, &abx500_list, list) { + dummy_child.parent = dev_entry->dev; + ops = &dev_entry->ops; + + if ((ops != NULL) && (ops->dump_all_banks != NULL)) + ops->dump_all_banks(&dummy_child); + } +} +EXPORT_SYMBOL(abx500_dump_all_banks); + MODULE_AUTHOR("Mattias Wallin <mattias.wallin@stericsson.com>"); MODULE_DESCRIPTION("ABX500 core driver"); MODULE_LICENSE("GPL"); diff --git a/include/linux/mfd/abx500.h b/include/linux/mfd/abx500.h index 33bf25b9e58..2cf7f7b1823 100644 --- a/include/linux/mfd/abx500.h +++ b/include/linux/mfd/abx500.h @@ -444,6 +444,7 @@ int abx500_mask_and_set_register_interruptible(struct device *dev, u8 bank, int abx500_get_chip_id(struct device *dev); int abx500_event_registers_startup_state_get(struct device *dev, u8 *event); int abx500_startup_irq_enabled(struct device *dev, unsigned int irq); +void abx500_dump_all_banks(void); #define abx500_get abx500_get_register_interruptible #define abx500_set abx500_set_register_interruptible @@ -460,6 +461,7 @@ struct abx500_ops { int (*mask_and_set_register) (struct device *, u8, u8, u8, u8); int (*event_registers_startup_state_get) (struct device *, u8 *); int (*startup_irq_enabled) (struct device *, unsigned int); + void (*dump_all_banks) (struct device *); }; int abx500_register_ops(struct device *core_dev, struct abx500_ops *ops); |