From 06fa4eabd9b493c38d4799c486055ed705459503 Mon Sep 17 00:00:00 2001 From: Li Jun Date: Thu, 27 Jul 2017 00:39:37 +0800 Subject: [PATCH] MLK-16013-14: staging: typec: tcpci: handle fault event We need clear any fault alerts to make tcpci controller to recover from fault. Reviewed-by: Peter Chen Signed-off-by: Li Jun --- drivers/staging/typec/tcpci.c | 12 +++++++++++- drivers/staging/typec/tcpci.h | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/staging/typec/tcpci.c b/drivers/staging/typec/tcpci.c index 0e0db86b7ec2..2b6937a2cece 100644 --- a/drivers/staging/typec/tcpci.c +++ b/drivers/staging/typec/tcpci.c @@ -357,6 +357,9 @@ static int tcpci_init(struct tcpc_dev *tcpc) if (ret < 0) return ret; + /* Clear fault condition */ + regmap_write(tcpci->regmap, TCPC_FAULT_STATUS, 0x80); + if (tcpci->controls_vbus) reg = TCPC_POWER_STATUS_VBUS_PRES; else @@ -368,7 +371,7 @@ static int tcpci_init(struct tcpc_dev *tcpc) reg = TCPC_ALERT_TX_SUCCESS | TCPC_ALERT_TX_FAILED | TCPC_ALERT_TX_DISCARDED | TCPC_ALERT_RX_STATUS | TCPC_ALERT_RX_HARD_RST | TCPC_ALERT_CC_STATUS | - TCPC_ALERT_RX_BUF_OVF; + TCPC_ALERT_RX_BUF_OVF | TCPC_ALERT_FAULT; if (tcpci->controls_vbus) reg |= TCPC_ALERT_POWER_STATUS; tcpci->irq_mask = reg; @@ -433,6 +436,13 @@ static irqreturn_t tcpci_irq(int irq, void *dev_id) tcpci_write16(tcpci, TCPC_ALERT, TCPC_ALERT_RX_BUF_OVF | TCPC_ALERT_RX_STATUS); + /* Clear the fault status anyway */ + if (status & TCPC_ALERT_FAULT) { + regmap_read(tcpci->regmap, TCPC_FAULT_STATUS, ®); + regmap_write(tcpci->regmap, TCPC_FAULT_STATUS, + reg | TCPC_FAULT_STATUS_CLEAR); + } + if (status & TCPC_ALERT_RX_HARD_RST) tcpm_pd_hard_reset(tcpci->port); diff --git a/drivers/staging/typec/tcpci.h b/drivers/staging/typec/tcpci.h index 10b04c8723da..2f4da3dfa4a0 100644 --- a/drivers/staging/typec/tcpci.h +++ b/drivers/staging/typec/tcpci.h @@ -41,6 +41,7 @@ #define TCPC_ALERT_MASK 0x12 #define TCPC_POWER_STATUS_MASK 0x14 #define TCPC_FAULT_STATUS_MASK 0x15 +#define TCPC_FAULT_STATUS_CLEAR BIT(7) #define TCPC_CONFIG_STD_OUTPUT 0x18 #define TCPC_TCPC_CTRL 0x19 -- 2.17.1