This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM335x booting kernel failed without connect i2c0 to tps65217

Other Parts Discussed in Thread: TPS65217, TPS65910

Dear:

We made a custom board based on the BeagleBone datasheet, made some modification.

we disable i2c0 and change i2c1 to connect tps65217.

When the kernel stage, it can't probe power information data sush as DCDC and LED voltage.

here is the debug information as following:

--------------------------------------------------------------------------------------------------------------------------

Uncompressing Linux... done, booting the kernel.
[    0.208770] tps65910 1-002d: could not be detected
[    0.299468] Could not set LED4 to fully on
[    0.407501] tps65217 1-0024: Failed to read revision register: -121
[    0.414398] Unable to handle kernel NULL pointer dereference at virtual address 00000104
[    0.423034] pgd = c0004000
[    0.425903] [00000104] *pgd=00000000
[    0.429718] Internal error: Oops: 5 [#1]
[    0.433898] Modules linked in:
[    0.437164] CPU: 0    Tainted: G        W     (3.2.0 #15)
[    0.442962] PC is at tps65217_reg_read+0xc/0x18
[    0.447814] LR is at tps65217_init+0x5c/0xf8
[    0.452362] pc : [<c0226c94>]    lr : [<c002be10>]    psr: a0000013
[    0.452362] sp : df02dd78  ip : df02dd88  fp : df02dd84
[    0.464569] r10: c0457060  r9 : c02243f8  r8 : 00000006
[    0.470123] r7 : c04f91f4  r6 : df1c3800  r5 : df08a840  r4 : df045608
[    0.477081] r3 : 00000000  r2 : df02dd8c  r1 : 0000000a  r0 : 00000000

-------------------------------------------------------------------------------------------------

However, we need to skip it or modified it  to finish load kernel. 

I want to know that how to disable to checking/reading/diable tps65217 at the kernel stage .

I have no idea about this problem.

Thank you everyone if you have any idea or suggestion.

BRs, Joe.

  • Hi Joe,

    This is because by default linux kenrel configures I2C0 to be the communication interface between AM335x device & PMIC. Changing all that requires quite an effort.

    I suggest to start with the device tree files in arch/arm/boot/dts check: am33xx.dtsi & am335x.dts. Change the appropriate device nodes to reference the i2c you use.

    Then check:
      drivers/cpufreq/cpufreq-cpu0.c

      drivers/power/opp/omap-opp-modifier.c

      arch/arm/mach-omap2/cpuidle33xx.c

      arch/arm/mach-omap2/pm33xx.c

      arch/arm/mach-omap2/sleep33xx.S and arch/arm/mach-omap2/sleep43xx.S

      kernel/power/suspend.c

      drivers/base/power/main.c

      arch/arm/mach-omap2/omap_hwmod.c and arch/arm/mach-omap2/omap_device.c

    For references to i2c0 (which as you will notice is aliased as I2C1 in am33xx.dtsi) and change accordingly.

    The following wiki article could be useful to you:  http://processors.wiki.ti.com/index.php/AM335x_Linux_Power_Management_User_Guide

    Hope this helps.


    Best Regards,

    Yordan