From 311b3e4e15fd37ea2ab151edb8b8a468e93355fd Mon Sep 17 00:00:00 2001 From: Shawn Nematbakhsh Date: Thu, 24 Aug 2017 08:57:42 -0700 Subject: tcpm: fusb302: Round VNC and Rd thresholds to nearest step fusb302 determines attach / no-attach (and Rd / Ra) by comparing CC voltage against an MDAC output (42 mV steps). The previous 'floor' calculation was particularly bad for 3.0A Rp (2600 / 42 = 61, 61 * 42 = 2562 mV - 21 = 2551 mV actual threshold, ignoring other error sources). Reduce the chance of error by rounding our thresholds, which also matches the suggested thresholds in the datasheet. BUG=chromium:758608 BRANCH=gru TEST=Attach problematic dingdong, verify we don't enter an attach / detach loop. Signed-off-by: Shawn Nematbakhsh Change-Id: I9211782da0fdad8339246e272952ba1930b69851 Reviewed-on: https://chromium-review.googlesource.com/633276 Reviewed-by: Joe Bauman Reviewed-by: Vincent Palatin --- driver/tcpm/fusb302.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/driver/tcpm/fusb302.h b/driver/tcpm/fusb302.h index dc191bee5a..b0c8d061ad 100644 --- a/driver/tcpm/fusb302.h +++ b/driver/tcpm/fusb302.h @@ -50,7 +50,12 @@ #define TCPC_REG_MEASURE 0x04 #define TCPC_REG_MEASURE_VBUS (1<<6) -#define TCPC_REG_MEASURE_MDAC_MV(mv) (((mv)/42) & 0x3f) +/* + * MDAC reference voltage step size is 42 mV. Round our thresholds to reduce + * maximum error, which also matches suggested thresholds in datasheet + * (Table 3. Host Interrupt Summary). + */ +#define TCPC_REG_MEASURE_MDAC_MV(mv) (DIV_ROUND_NEAREST((mv), 42) & 0x3f) #define TCPC_REG_CONTROL0 0x06 #define TCPC_REG_CONTROL0_TX_FLUSH (1<<6) -- cgit v1.2.1