summaryrefslogtreecommitdiff
path: root/driver
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2017-01-27 10:34:38 -0800
committerchrome-bot <chrome-bot@chromium.org>2017-02-07 20:14:35 -0800
commit8e4bcd49c05cc9859a10d170477e240403718979 (patch)
tree2fcfb10df2ba4409c8b92a9e5f06740560231e70 /driver
parent3b997a8d16179bbd8770f38337c531222c597638 (diff)
downloadchrome-ec-8e4bcd49c05cc9859a10d170477e240403718979.tar.gz
tcpm: it83xx: Add support for TYPEC_CC_OPEN
BUG=chrome-os-partner:62281 BRANCH=None TEST=Verify compilation on it83xx w/ IT83XX_PD_EVB = 1. Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Change-Id: Id82387e7d4782ed1a5e07f7968475988ff6da9d5 Reviewed-on: https://chromium-review.googlesource.com/434077 Commit-Ready: Shawn N <shawnn@chromium.org> Tested-by: Shawn N <shawnn@chromium.org> Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
Diffstat (limited to 'driver')
-rw-r--r--driver/tcpm/it83xx.c33
1 files changed, 27 insertions, 6 deletions
diff --git a/driver/tcpm/it83xx.c b/driver/tcpm/it83xx.c
index 4c24a84b13..3991de5fff 100644
--- a/driver/tcpm/it83xx.c
+++ b/driver/tcpm/it83xx.c
@@ -234,6 +234,14 @@ static void it83xx_enable_vconn(enum usbpd_port port, int enabled)
}
}
+static void it83xx_enable_cc(enum usbpd_port port, int enable)
+{
+ if (enable)
+ CLEAR_MASK(IT83XX_USBPD_CCGCR(port), (1 << 4));
+ else
+ SET_MASK(IT83XX_USBPD_CCGCR(port), (1 << 4));
+}
+
static void it83xx_set_power_role(enum usbpd_port port, int power_role)
{
/* PD_ROLE_SINK 0, PD_ROLE_SOURCE 1 */
@@ -310,12 +318,27 @@ static void it83xx_select_polarity(enum usbpd_port port,
CLEAR_MASK(IT83XX_USBPD_CCGCR(port), (1 << 0));
}
-static void it83xx_set_cc(enum usbpd_port port, int pull)
+static int it83xx_set_cc(enum usbpd_port port, int pull)
{
- if (pull == TYPEC_CC_RD)
+ int enable_cc = 1;
+
+ switch (pull) {
+ case TYPEC_CC_RD:
it83xx_set_power_role(port, PD_ROLE_SINK);
- else if (pull == TYPEC_CC_RP)
+ break;
+ case TYPEC_CC_RP:
it83xx_set_power_role(port, PD_ROLE_SOURCE);
+ break;
+ case TYPEC_CC_OPEN:
+ /* Power-down CC1 & CC2 to remove Rp/Rd */
+ enable_cc = 0;
+ break;
+ default:
+ return EC_ERROR_UNIMPLEMENTED;
+ }
+
+ it83xx_enable_cc(port, enable_cc);
+ return EC_SUCCESS;
}
static int it83xx_tcpm_init(int port)
@@ -363,9 +386,7 @@ static int it83xx_tcpm_select_rp_value(int port, int rp_sel)
static int it83xx_tcpm_set_cc(int port, int pull)
{
- it83xx_set_cc(port, pull);
-
- return EC_SUCCESS;
+ return it83xx_set_cc(port, pull);
}
static int it83xx_tcpm_set_polarity(int port, int polarity)