Hi all,
a customer is using the TPS65921 with the AM3703 and they are running into an I2C1 lockup issue when an external hosts resets (PWRONRESET) the AM3703 during an ongoing I2C1 transaction. The I2C1 from then on stays locked and cannot be used until the board is power cycled. This seems to be very similar failure mode as has been seen with the TPS65950. I was made aware of the following changes to the board.c file in order to fix this problem for the '950 in Linux.
static struct twl4030_ins wrst_seq[] __initdata = {
/*
* Reset twl4030.
* Reset VDD1 regulator.
* Reset VDD2 regulator.
* Reset VPLL1 regulator.
* Enable sysclk output.
* Reenable twl4030.
*/
{MSG_SINGULAR(DEV_GRP_NULL, RES_RESET, RES_STATE_OFF), 2}, //added
{MSG_SINGULAR(DEV_GRP_P1, RES_VDD1, RES_STATE_WRST), 15},
{MSG_SINGULAR(DEV_GRP_P1, RES_VDD2, RES_STATE_WRST), 15},
{MSG_SINGULAR(DEV_GRP_P1, RES_VPLL1, RES_STATE_WRST), 0x60},
{MSG_SINGULAR(DEV_GRP_P1, RES_HFCLKOUT, RES_STATE_ACTIVE), 2},
{MSG_SINGULAR(DEV_GRP_NULL, RES_RESET, RES_STATE_ACTIVE), 2}, //added
};
static struct twl4030_script wrst_script __initdata = {
.script = wrst_seq,
.size = ARRAY_SIZE(wrst_seq),
.flags = TRITON_WRST_SCRIPT,
};
Questions:
(1) Is this the correct (complete) workaround, or are there other things to consider?
(2) Does this TPS65950 workaround also apply to the TPS65921?
(3) How does the above sequence apply for the AM37xx PWRONRST, i.e. in the customer case an external host asserts the PWRONRST on the AM37xx to cause a reset. I want to make sure that the additional PMIC initialization is part of this reset sequence.
Thanks,
--Gunter