From da478f114093ac399d9ec4808034e1de3435865f Mon Sep 17 00:00:00 2001 From: Zhou weixin Date: Wed, 4 Jan 2017 10:28:59 +0800 Subject: [PATCH] mfd: fusb302: fix connect adapter failed when reboot with adapter The fusb PD should be reset to sync adapter PD signal after fusb sent hard reset cmd. Change-Id: Iad5f27cf4c017639c24000e73dc831a36dbb55ec Signed-off-by: Zhou weixin --- drivers/mfd/fusb302.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/drivers/mfd/fusb302.c b/drivers/mfd/fusb302.c index 3201a17fa53d..96b3344b4bdf 100644 --- a/drivers/mfd/fusb302.c +++ b/drivers/mfd/fusb302.c @@ -715,6 +715,7 @@ static void tcpc_alert(struct fusb30x_chip *chip, int *evt) { int interrupt, interrupta, interruptb; u32 val; + static int retry; regmap_read(chip->regmap, FUSB_REG_INTERRUPT, &interrupt); regmap_read(chip->regmap, FUSB_REG_INTERRUPTA, &interrupta); @@ -774,9 +775,21 @@ static void tcpc_alert(struct fusb30x_chip *chip, int *evt) } if (interrupta & INTERRUPTA_HARDSENT) { - chip->tx_state = tx_success; - chip->timer_state = T_DISABLED; - *evt |= EVENT_TX; + /* + * The fusb PD should be reset once to sync adapter PD + * signal after fusb sent hard reset cmd.This is not PD + * device if reset failed. + */ + if (!retry) { + retry = 1; + fusb302_pd_reset(chip); + pd_execute_hard_reset(chip); + } else { + retry = 0; + chip->tx_state = tx_success; + chip->timer_state = T_DISABLED; + *evt |= EVENT_TX; + } } } -- 2.34.1