Re: [PATCH] mfd: twl4030: Driver for twl4030 madc module

From: Michael Trimarchi
Date: Mon Jul 19 2010 - 14:24:49 EST


Hi all

Janakiram Sistla wrote:
On Mon, Jul 19, 2010 at 10:46 AM, Michael Trimarchi <
michael@xxxxxxxxxxxxxxxxxxxxxxx> wrote:
Janakiram Sistla wrote:
drivers/mfd/Kconfig | 21 ++
drivers/mfd/Makefile | 3 +-
drivers/mfd/twl4030-madc.c | 548
++++++++++++++++++++++++++++++++++++++
include/linux/i2c/twl4030-madc.h | 126 +++++++++
4 files changed, 697 insertions(+), 1 deletions(-)
create mode 100644 drivers/mfd/twl4030-madc.c
create mode 100644 include/linux/i2c/twl4030-madc.h

We have just tried to adopt this driver to our custom OMAP3 board, but
were unable to get any interrupts.
Any ideas on what is missing? We've checked whole TRM and found
nothing wrong yet :(

we tried the same driver for Omap zoom platform ,I too dont see any
interrupts from this driver.I also observe that duing bluetooth file
transfer i see the below crash from twl4030-madc driver.

Once i disable the madc driver in kernel configuration my Bluetooth
works fine,while Bluetooth has nothing to do with i2c or madc driver.A
similar crash is also observed during GFX operation

Regards,
Ram.

here is the log:
i2c_omap i2c_omap.1: controller timed out waiting for start condition to
finish
twl: i2c_write failed to transfer all messages
Unable to handle kernel NULL pointer dereference at virtual address
00000044
pgd = c0004000
[00000044] *pgd=00000000
Internal error: Oops: 17 [#1] PREEMPT
last sysfs file: /sys/devices/platform/kim/firmware/kim/loading
Modules linked in: bt_drv st_drv
CPU: 0 Not tainted (2.6.32-14922-g86eec44 #1)
PC is at dev_driver_string+0x0/0x38
LR is at twl4030_madc_write+0x2c/0x4c
pc : [<c01f2bc0>] lr : [<c01fede0>] psr: a0000013
sp : cf02bf08 ip : 0000738f fp : 00000000
r10: cf002cc8 r9 : c038a839 r8 : 00000000
r7 : cf02bf3c r6 : c04edff8 r5 : 00000007 r4 : cf227a00
r3 : 00000007 r2 : 02070002 r1 : 00000007 r0 : 00000000
Flags: NzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
Control: 10c5387d Table: 8d23c019 DAC: 00000017
Process events/0 (pid: 5, stack limit = 0xcf02a2e8)
Stack: (0xcf02bf08 to 0xcf02c000)
bf00: 00000006 00000002 c04edff8 c01fef6c cf179680
cf179680
bf20: cf02a000 cf002cc0 c028a5a8 00000000 cf002cc8 c028a5dc 00000000
00000200
bf40: cf020001 00000000 cf020d40 00000017 cf0213c0 c007f1dc 00000000
cd277e40
bf60: cf02bf94 c036e58c cd0bac9c cf020ed4 60000013 cf002cc0 cf002cbc
cf02a000
bf80: cf002cc0 c01dcc00 cf002cc0 00000000 cf179684 c0076ff4 cf02bfcc
00000000
bfa0: cf020d40 c007a660 cf02bfa8 cf02bfa8 cf023f60 cf02bfd4 cf023f60
cf002cc0
bfc0: c0076e8c 00000000 00000000 c007a334 00000000 00000000 cf02bfd8
cf02bfd8
bfe0: 00000000 00000000 00000000 00000000 00000000 c0035f80 00000000
00000000
[<c01f2bc0>] (dev_driver_string+0x0/0x38) from [<c01fede0>]
(twl4030_madc_write+
0x2c/0x4c)
[<c01fede0>] (twl4030_madc_write+0x2c/0x4c) from [<c01fef6c>]
(twl4030_madc_conv
ersion+0x74/0x288)
[<c01fef6c>] (twl4030_madc_conversion+0x74/0x288) from [<c028a5dc>]
(twl4030_bk_
bci_battery_work+0x34/0x60)
[<c028a5dc>] (twl4030_bk_bci_battery_work+0x34/0x60) from [<c0076ff4>]
(worker_t
hread+0x168/0x214)
[<c0076ff4>] (worker_thread+0x168/0x214) from [<c007a334>]
(kthread+0x7c/0x84)
[<c007a334>] (kthread+0x7c/0x84) from [<c0035f80>]
(kernel_thread_exit+0x0/0x8)
Code: c04edd3c c04eddcc c042bef5 c040d709 (e5903044)
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/mfd/twl4030-madc.c b/drivers/mfd/twl4030-madc.c
index 2d2aa87..e12ac1a 100644
--- a/drivers/mfd/twl4030-madc.c
+++ b/drivers/mfd/twl4030-madc.c
@@ -478,6 +478,7 @@ static int __init twl4030_madc_probe(struct
platform_device
madc->imr = (pdata->irq_line == 1) ? TWL4030_MADC_IMR1 :
TWL4030_MADC_IM
madc->isr = (pdata->irq_line == 1) ? TWL4030_MADC_ISR1 :
TWL4030_MADC_IS
+ madc->dev = &pdev->dev;

ret = misc_register(&twl4030_madc_device);
if (ret) {

This is the reason of the crash

Michael Trimarchi





I think its fixed already.. ..


I'm testing in overo and I have notice varius issue:

+#if 0
if (dev->rev <= OMAP_I2C_REV_ON_3430) {
while (!(stat & OMAP_I2C_STAT_XU
if (stat & (OMAP_I2C_STA
@@ -826,7 +826,7 @@ complete:
stat = omap_i2c_read_reg
}
}
-
+#endif

I need to comment out this code, because it loop and it doesn't have an exit condition. This couse
the kernel to stuck, but after comment out this I have every 5sec/10 seconds some error on i2c bus
during write

Michael

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/