summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Brockus <dbrockus@chromium.org>2019-11-27 11:08:04 -0700
committerCommit Bot <commit-bot@chromium.org>2019-12-04 19:57:57 +0000
commit7e672869de0142a0af9c90875a732600e9fb5d87 (patch)
treebece30812dc8bc4be3b6885963edde4b31929b0f
parentb4f8858cef8105edee5a049beb8c93b102186bc3 (diff)
downloadchrome-ec-7e672869de0142a0af9c90875a732600e9fb5d87.tar.gz
tcpci: restructure fault fetch and clearing
Changed the code to not be as indented by using functions instead of nesting deeper and deeper in conditions. The intent would be to add tcpci_handle_fault(port, fault) if we ever decide to generically handle faults. For now it just prints the fault. BUG=b:144126745 BRANCH=none TEST=if any console FAULT output verify properly handled Change-Id: Ie406302c4a824e7d14ca0832cf7bfca7432680f6 Signed-off-by: Denis Brockus <dbrockus@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1940778 Commit-Queue: Edward Hill <ecgh@chromium.org> Reviewed-by: Edward Hill <ecgh@chromium.org>
-rw-r--r--driver/tcpm/tcpci.c50
-rw-r--r--driver/tcpm/tcpci.h8
2 files changed, 41 insertions, 17 deletions
diff --git a/driver/tcpm/tcpci.c b/driver/tcpm/tcpci.c
index 001a7ee579..9a0e45f1df 100644
--- a/driver/tcpm/tcpci.c
+++ b/driver/tcpm/tcpci.c
@@ -622,6 +622,34 @@ static int register_mask_reset(int port)
}
#endif
+static int tcpci_get_fault(int port, int *fault)
+{
+ int rv;
+
+ rv = tcpc_read(port, TCPC_REG_FAULT_STATUS, fault);
+ if (rv)
+ CPRINTS("C%d Reading FAULT failed, rv=%d", port, rv);
+
+ return rv;
+}
+
+static int tcpci_handle_fault(int port, int fault)
+{
+ CPRINTS("C%d FAULT 0x%02X detected", port, fault);
+ return EC_SUCCESS;
+}
+
+static int tcpci_clear_fault(int port, int fault)
+{
+ int rv;
+
+ rv = tcpc_write(port, TCPC_REG_FAULT_STATUS, fault);
+ if (rv)
+ CPRINTS("C%d Writing FAULT failed, rv=%d", port, rv);
+
+ return rv;
+}
+
/*
* Don't let the TCPC try to pull from the RX buffer forever. We typical only
* have 1 or 2 messages waiting.
@@ -645,23 +673,11 @@ void tcpci_tcpc_alert(int port)
/* Clear any pending faults */
if (status & TCPC_REG_ALERT_FAULT) {
int fault;
- int fault_rv;
-
- fault_rv = tcpc_read(port, TCPC_REG_FAULT_STATUS, &fault);
- if (!fault_rv) {
- CPRINTS("C%d FAULT=0x%02X", port, fault);
-
- /* Clear any faults that are set */
- fault_rv = tcpc_write(port,
- TCPC_REG_FAULT_STATUS,
- fault);
- if (fault_rv)
- CPRINTS("C%d Writing FAULT failed, rv=%d",
- port, fault_rv);
- } else {
- CPRINTS("C%d Reading FAULT failed, rv=%d",
- port, fault_rv);
- }
+
+ if (tcpci_get_fault(port, &fault) == EC_SUCCESS &&
+ tcpci_handle_fault(port, fault) == EC_SUCCESS &&
+ tcpci_clear_fault(port, fault) == EC_SUCCESS)
+ CPRINTS("C%d FAULT 0x%02X handled", port, fault);
}
/*
diff --git a/driver/tcpm/tcpci.h b/driver/tcpm/tcpci.h
index 930bfd6d70..81baba83bb 100644
--- a/driver/tcpm/tcpci.h
+++ b/driver/tcpm/tcpci.h
@@ -89,6 +89,14 @@
#define TCPC_REG_POWER_STATUS_VBUS_PRES BIT(2)
#define TCPC_REG_FAULT_STATUS 0x1f
+#define TCPC_REG_FAULT_STATUS_ALL_REGS_RESET BIT(7)
+#define TCPC_REG_FAULT_STATUS_FORCE_OFF_VBUS BIT(6)
+#define TCPC_REG_FAULT_STATUS_AUTO_DISCHARGE_FAIL BIT(5)
+#define TCPC_REG_FAULT_STATUS_FORCE_DISCHARGE_FAIL BIT(4)
+#define TCPC_REG_FAULT_STATUS_VBUS_OVER_CURRENT BIT(3)
+#define TCPC_REG_FAULT_STATUS_VBUS_OVER_VOLTAGE BIT(2)
+#define TCPC_REG_FAULT_STATUS_VCONN_OVER_CURRENT BIT(1)
+#define TCPC_REG_FAULT_STATUS_I2C_INTERFACE_ERR BIT(0)
#define TCPC_REG_ALERT_EXT 0x21
#define TCPC_REG_ALERT_EXT_TIMER_EXPIRED BIT(2)