mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-26 07:35:44 +08:00
mfd: ab8500-debug: Add support for ab8505 and ab9540
Make it possible to dump all registers in ab8505 and ab9540. Signed-off-by: Lee Jones <lee.jones@linaro.org> Acked-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
e436ddff57
commit
9581ae39de
@ -156,7 +156,9 @@ static struct hwreg_cfg hwreg_cfg = {
|
||||
|
||||
#define AB8500_REV_REG 0x80
|
||||
|
||||
static struct ab8500_prcmu_ranges debug_ranges[AB8500_NUM_BANKS] = {
|
||||
static struct ab8500_prcmu_ranges *debug_ranges;
|
||||
|
||||
struct ab8500_prcmu_ranges ab8500_debug_ranges[AB8500_NUM_BANKS] = {
|
||||
[0x0] = {
|
||||
.num_ranges = 0,
|
||||
.range = NULL,
|
||||
@ -360,7 +362,7 @@ static struct ab8500_prcmu_ranges debug_ranges[AB8500_NUM_BANKS] = {
|
||||
},
|
||||
{
|
||||
.first = 0xf5,
|
||||
.last = 0xf6,
|
||||
.last = 0xf6,
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -485,6 +487,365 @@ static struct ab8500_prcmu_ranges debug_ranges[AB8500_NUM_BANKS] = {
|
||||
},
|
||||
};
|
||||
|
||||
struct ab8500_prcmu_ranges ab8505_debug_ranges[AB8500_NUM_BANKS] = {
|
||||
[0x0] = {
|
||||
.num_ranges = 0,
|
||||
.range = NULL,
|
||||
},
|
||||
[AB8500_SYS_CTRL1_BLOCK] = {
|
||||
.num_ranges = 5,
|
||||
.range = (struct ab8500_reg_range[]) {
|
||||
{
|
||||
.first = 0x00,
|
||||
.last = 0x04,
|
||||
},
|
||||
{
|
||||
.first = 0x42,
|
||||
.last = 0x42,
|
||||
},
|
||||
{
|
||||
.first = 0x52,
|
||||
.last = 0x52,
|
||||
},
|
||||
{
|
||||
.first = 0x54,
|
||||
.last = 0x57,
|
||||
},
|
||||
{
|
||||
.first = 0x80,
|
||||
.last = 0x83,
|
||||
},
|
||||
},
|
||||
},
|
||||
[AB8500_SYS_CTRL2_BLOCK] = {
|
||||
.num_ranges = 5,
|
||||
.range = (struct ab8500_reg_range[]) {
|
||||
{
|
||||
.first = 0x00,
|
||||
.last = 0x0D,
|
||||
},
|
||||
{
|
||||
.first = 0x0F,
|
||||
.last = 0x17,
|
||||
},
|
||||
{
|
||||
.first = 0x20,
|
||||
.last = 0x20,
|
||||
},
|
||||
{
|
||||
.first = 0x30,
|
||||
.last = 0x30,
|
||||
},
|
||||
{
|
||||
.first = 0x32,
|
||||
.last = 0x3A,
|
||||
},
|
||||
},
|
||||
},
|
||||
[AB8500_REGU_CTRL1] = {
|
||||
.num_ranges = 3,
|
||||
.range = (struct ab8500_reg_range[]) {
|
||||
{
|
||||
.first = 0x00,
|
||||
.last = 0x00,
|
||||
},
|
||||
{
|
||||
.first = 0x03,
|
||||
.last = 0x11,
|
||||
},
|
||||
{
|
||||
.first = 0x80,
|
||||
.last = 0x86,
|
||||
},
|
||||
},
|
||||
},
|
||||
[AB8500_REGU_CTRL2] = {
|
||||
.num_ranges = 6,
|
||||
.range = (struct ab8500_reg_range[]) {
|
||||
{
|
||||
.first = 0x00,
|
||||
.last = 0x06,
|
||||
},
|
||||
{
|
||||
.first = 0x08,
|
||||
.last = 0x15,
|
||||
},
|
||||
{
|
||||
.first = 0x17,
|
||||
.last = 0x19,
|
||||
},
|
||||
{
|
||||
.first = 0x1B,
|
||||
.last = 0x1D,
|
||||
},
|
||||
{
|
||||
.first = 0x1F,
|
||||
.last = 0x30,
|
||||
},
|
||||
{
|
||||
.first = 0x40,
|
||||
.last = 0x48,
|
||||
},
|
||||
/* 0x80-0x8B is SIM registers and should
|
||||
* not be accessed from here */
|
||||
},
|
||||
},
|
||||
[AB8500_USB] = {
|
||||
.num_ranges = 3,
|
||||
.range = (struct ab8500_reg_range[]) {
|
||||
{
|
||||
.first = 0x80,
|
||||
.last = 0x83,
|
||||
},
|
||||
{
|
||||
.first = 0x87,
|
||||
.last = 0x8A,
|
||||
},
|
||||
{
|
||||
.first = 0x91,
|
||||
.last = 0x94,
|
||||
},
|
||||
},
|
||||
},
|
||||
[AB8500_TVOUT] = {
|
||||
.num_ranges = 0,
|
||||
.range = NULL,
|
||||
},
|
||||
[AB8500_DBI] = {
|
||||
.num_ranges = 0,
|
||||
.range = NULL,
|
||||
},
|
||||
[AB8500_ECI_AV_ACC] = {
|
||||
.num_ranges = 1,
|
||||
.range = (struct ab8500_reg_range[]) {
|
||||
{
|
||||
.first = 0x80,
|
||||
.last = 0x82,
|
||||
},
|
||||
},
|
||||
},
|
||||
[AB8500_RESERVED] = {
|
||||
.num_ranges = 0,
|
||||
.range = NULL,
|
||||
},
|
||||
[AB8500_GPADC] = {
|
||||
.num_ranges = 1,
|
||||
.range = (struct ab8500_reg_range[]) {
|
||||
{
|
||||
.first = 0x00,
|
||||
.last = 0x08,
|
||||
},
|
||||
},
|
||||
},
|
||||
[AB8500_CHARGER] = {
|
||||
.num_ranges = 9,
|
||||
.range = (struct ab8500_reg_range[]) {
|
||||
{
|
||||
.first = 0x02,
|
||||
.last = 0x03,
|
||||
},
|
||||
{
|
||||
.first = 0x05,
|
||||
.last = 0x05,
|
||||
},
|
||||
{
|
||||
.first = 0x40,
|
||||
.last = 0x44,
|
||||
},
|
||||
{
|
||||
.first = 0x50,
|
||||
.last = 0x57,
|
||||
},
|
||||
{
|
||||
.first = 0x60,
|
||||
.last = 0x60,
|
||||
},
|
||||
{
|
||||
.first = 0xA0,
|
||||
.last = 0xA7,
|
||||
},
|
||||
{
|
||||
.first = 0xAF,
|
||||
.last = 0xB2,
|
||||
},
|
||||
{
|
||||
.first = 0xC0,
|
||||
.last = 0xC2,
|
||||
},
|
||||
{
|
||||
.first = 0xF5,
|
||||
.last = 0xF5,
|
||||
},
|
||||
},
|
||||
},
|
||||
[AB8500_GAS_GAUGE] = {
|
||||
.num_ranges = 3,
|
||||
.range = (struct ab8500_reg_range[]) {
|
||||
{
|
||||
.first = 0x00,
|
||||
.last = 0x00,
|
||||
},
|
||||
{
|
||||
.first = 0x07,
|
||||
.last = 0x0A,
|
||||
},
|
||||
{
|
||||
.first = 0x10,
|
||||
.last = 0x14,
|
||||
},
|
||||
},
|
||||
},
|
||||
[AB8500_AUDIO] = {
|
||||
.num_ranges = 1,
|
||||
.range = (struct ab8500_reg_range[]) {
|
||||
{
|
||||
.first = 0x00,
|
||||
.last = 0x83,
|
||||
},
|
||||
},
|
||||
},
|
||||
[AB8500_INTERRUPT] = {
|
||||
.num_ranges = 11,
|
||||
.range = (struct ab8500_reg_range[]) {
|
||||
{
|
||||
.first = 0x00,
|
||||
.last = 0x04,
|
||||
},
|
||||
{
|
||||
.first = 0x06,
|
||||
.last = 0x07,
|
||||
},
|
||||
{
|
||||
.first = 0x09,
|
||||
.last = 0x09,
|
||||
},
|
||||
{
|
||||
.first = 0x0B,
|
||||
.last = 0x0C,
|
||||
},
|
||||
{
|
||||
.first = 0x12,
|
||||
.last = 0x15,
|
||||
},
|
||||
{
|
||||
.first = 0x18,
|
||||
.last = 0x18,
|
||||
},
|
||||
/* Latch registers should not be read here */
|
||||
{
|
||||
.first = 0x40,
|
||||
.last = 0x44,
|
||||
},
|
||||
{
|
||||
.first = 0x46,
|
||||
.last = 0x49,
|
||||
},
|
||||
{
|
||||
.first = 0x4B,
|
||||
.last = 0x4D,
|
||||
},
|
||||
{
|
||||
.first = 0x52,
|
||||
.last = 0x55,
|
||||
},
|
||||
{
|
||||
.first = 0x58,
|
||||
.last = 0x58,
|
||||
},
|
||||
/* LatchHier registers should not be read here */
|
||||
},
|
||||
},
|
||||
[AB8500_RTC] = {
|
||||
.num_ranges = 2,
|
||||
.range = (struct ab8500_reg_range[]) {
|
||||
{
|
||||
.first = 0x00,
|
||||
.last = 0x14,
|
||||
},
|
||||
{
|
||||
.first = 0x16,
|
||||
.last = 0x17,
|
||||
},
|
||||
},
|
||||
},
|
||||
[AB8500_MISC] = {
|
||||
.num_ranges = 8,
|
||||
.range = (struct ab8500_reg_range[]) {
|
||||
{
|
||||
.first = 0x00,
|
||||
.last = 0x06,
|
||||
},
|
||||
{
|
||||
.first = 0x10,
|
||||
.last = 0x16,
|
||||
},
|
||||
{
|
||||
.first = 0x20,
|
||||
.last = 0x26,
|
||||
},
|
||||
{
|
||||
.first = 0x30,
|
||||
.last = 0x36,
|
||||
},
|
||||
{
|
||||
.first = 0x40,
|
||||
.last = 0x46,
|
||||
},
|
||||
{
|
||||
.first = 0x50,
|
||||
.last = 0x50,
|
||||
},
|
||||
{
|
||||
.first = 0x60,
|
||||
.last = 0x6B,
|
||||
},
|
||||
{
|
||||
.first = 0x80,
|
||||
.last = 0x82,
|
||||
},
|
||||
},
|
||||
},
|
||||
[AB8500_DEVELOPMENT] = {
|
||||
.num_ranges = 2,
|
||||
.range = (struct ab8500_reg_range[]) {
|
||||
{
|
||||
.first = 0x00,
|
||||
.last = 0x00,
|
||||
},
|
||||
{
|
||||
.first = 0x05,
|
||||
.last = 0x05,
|
||||
},
|
||||
},
|
||||
},
|
||||
[AB8500_DEBUG] = {
|
||||
.num_ranges = 1,
|
||||
.range = (struct ab8500_reg_range[]) {
|
||||
{
|
||||
.first = 0x05,
|
||||
.last = 0x07,
|
||||
},
|
||||
},
|
||||
},
|
||||
[AB8500_PROD_TEST] = {
|
||||
.num_ranges = 0,
|
||||
.range = NULL,
|
||||
},
|
||||
[AB8500_STE_TEST] = {
|
||||
.num_ranges = 0,
|
||||
.range = NULL,
|
||||
},
|
||||
[AB8500_OTP_EMUL] = {
|
||||
.num_ranges = 1,
|
||||
.range = (struct ab8500_reg_range[]) {
|
||||
{
|
||||
.first = 0x01,
|
||||
.last = 0x15,
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
static irqreturn_t ab8500_debug_handler(int irq, void *data)
|
||||
{
|
||||
char buf[16];
|
||||
@ -529,9 +890,6 @@ static int ab8500_registers_print(struct device *dev, u32 bank,
|
||||
err = seq_printf(s, " [0x%02X/0x%02X]: 0x%02X\n",
|
||||
bank, reg, value);
|
||||
if (err < 0) {
|
||||
dev_err(dev,
|
||||
"seq_printf overflow bank=0x%02X reg=0x%02X\n",
|
||||
bank, reg);
|
||||
/* Error is not returned here since
|
||||
* the output is wanted in any case */
|
||||
return 0;
|
||||
@ -581,8 +939,6 @@ static int ab8500_print_all_banks(struct seq_file *s, void *p)
|
||||
|
||||
for (i = 1; i < AB8500_NUM_BANKS; i++) {
|
||||
err = seq_printf(s, " bank 0x%02X:\n", i);
|
||||
if (err < 0)
|
||||
dev_err(dev, "seq_printf overflow, bank=0x%02X\n", i);
|
||||
|
||||
ab8500_registers_print(dev, i, s);
|
||||
}
|
||||
@ -1937,14 +2293,19 @@ static int ab8500_debug_probe(struct platform_device *plf)
|
||||
if (!file)
|
||||
goto err;
|
||||
|
||||
if (is_ab8500(ab8500))
|
||||
if (is_ab8500(ab8500)) {
|
||||
debug_ranges = ab8500_debug_ranges;
|
||||
num_interrupt_lines = AB8500_NR_IRQS;
|
||||
else if (is_ab8505(ab8500))
|
||||
} else if (is_ab8505(ab8500)) {
|
||||
debug_ranges = ab8505_debug_ranges;
|
||||
num_interrupt_lines = AB8505_NR_IRQS;
|
||||
else if (is_ab9540(ab8500))
|
||||
} else if (is_ab9540(ab8500)) {
|
||||
debug_ranges = ab8505_debug_ranges;
|
||||
num_interrupt_lines = AB9540_NR_IRQS;
|
||||
else if (is_ab8540(ab8500))
|
||||
} else if (is_ab8540(ab8500)) {
|
||||
debug_ranges = ab8505_debug_ranges;
|
||||
num_interrupt_lines = AB8540_NR_IRQS;
|
||||
}
|
||||
|
||||
file = debugfs_create_file("interrupts", (S_IRUGO),
|
||||
ab8500_dir, &plf->dev, &ab8500_interrupts_fops);
|
||||
|
Loading…
Reference in New Issue
Block a user