summaryrefslogtreecommitdiff
path: root/driver
diff options
context:
space:
mode:
authorAseda Aboagye <aaboagye@google.com>2017-07-07 17:01:43 -0700
committerchrome-bot <chrome-bot@chromium.org>2017-07-11 13:13:03 -0700
commit993a0991d62d9e9f243dc1db1ddc2d37ec2f3be0 (patch)
tree76604f8f99cda20fb9ac67277eebeeac008c1304 /driver
parent7903342436bfef4941b20a3c839f14b5398b9119 (diff)
downloadchrome-ec-993a0991d62d9e9f243dc1db1ddc2d37ec2f3be0.tar.gz
driver: tcpm: ps8xxx: Add support for PS8805.
This commit adds support for the PS8805, another Parade Tech TCPC with integrated superspeed muxes. This also creates a generic Parade Tech TCPC driver which supports the PS8xxx series. The current supported TCPCs are: - PS8751 - PS8805 BUG=b:63508740 BRANCH=None TEST=`make -j buildall` Change-Id: I78383af414996e0e8d6220985d286f95267136f8 Signed-off-by: Aseda Aboagye <aaboagye@google.com> Reviewed-on: https://chromium-review.googlesource.com/564799 Commit-Ready: Aseda Aboagye <aaboagye@chromium.org> Tested-by: Aseda Aboagye <aaboagye@chromium.org> Reviewed-by: Shawn N <shawnn@chromium.org>
Diffstat (limited to 'driver')
-rw-r--r--driver/build.mk3
-rw-r--r--driver/tcpm/ps8751.h33
-rw-r--r--driver/tcpm/ps8xxx.c (renamed from driver/tcpm/ps8751.c)49
-rw-r--r--driver/tcpm/ps8xxx.h43
-rw-r--r--driver/tcpm/tcpci.c9
5 files changed, 80 insertions, 57 deletions
diff --git a/driver/build.mk b/driver/build.mk
index 8634aadf5b..074fa9e1e9 100644
--- a/driver/build.mk
+++ b/driver/build.mk
@@ -86,7 +86,8 @@ driver-$(CONFIG_USB_PD_TCPM_FUSB302)+=tcpm/fusb302.o
driver-$(CONFIG_USB_PD_TCPM_ITE83XX)+=tcpm/it83xx.o
driver-$(CONFIG_USB_PD_TCPM_ANX74XX)+=tcpm/anx74xx.o
driver-$(CONFIG_USB_PD_TCPM_ANX7688)+=tcpm/anx7688.o
-driver-$(CONFIG_USB_PD_TCPM_PS8751)+=tcpm/ps8751.o
+driver-$(CONFIG_USB_PD_TCPM_PS8751)+=tcpm/ps8xxx.o
+driver-$(CONFIG_USB_PD_TCPM_PS8805)+=tcpm/ps8xxx.o
# USB switches
driver-$(CONFIG_USB_SWITCH_PI3USB9281)+=usb_switch_pi3usb9281.o
diff --git a/driver/tcpm/ps8751.h b/driver/tcpm/ps8751.h
deleted file mode 100644
index 9dd922208a..0000000000
--- a/driver/tcpm/ps8751.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Copyright 2016 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-/* Parade Tech Type-C controller vendor specific APIs*/
-
-#ifndef __CROS_EC_USB_PD_TCPM_PS8751_H
-#define __CROS_EC_USB_PD_TCPM_PS8751_H
-
-/* Vendor defined registers */
-#define PS8751_VENDOR_ID 0x1DA0
-#define PS8751_PRODUCT_ID 0x8751
-
-#define PS8751_REG_VERSION 0x90
-#define PS8751_REG_VENDOR_ID_L 0x00
-#define PS8751_REG_VENDOR_ID_H 0x01
-#define PS8751_REG_CTRL_1 0xD0
-#define PS8751_REG_CTRL_1_HPD (1 << 0)
-#define PS8751_REG_CTRL_1_IRQ (1 << 1)
-#define PS8751_REG_MUX_DP_EQ_CONFIGURATION 0xD3
-#define PS8751_REG_MUX_USB_C2SS_EQ 0xe7
-#define PS8751_REG_MUX_USB_C2SS_HS_THRESHOLD 0xe8
-
-void ps8751_tcpc_update_hpd_status(int port, int hpd_lvl, int hpd_irq);
-int ps8751_tcpc_get_fw_version(int port, int *version);
-
-#ifdef CONFIG_CMD_I2C_STRESS_TEST_TCPC
-extern struct i2c_stress_test_dev ps8751_i2c_stress_test_dev;
-#endif
-
-#endif /* __CROS_EC_USB_PD_TCPM_PS8751_H */
-
diff --git a/driver/tcpm/ps8751.c b/driver/tcpm/ps8xxx.c
index 1fb1660407..e2a3d8b5df 100644
--- a/driver/tcpm/ps8751.c
+++ b/driver/tcpm/ps8xxx.c
@@ -1,21 +1,32 @@
-/* Copyright 2016 The Chromium OS Authors. All rights reserved.
+/* Copyright 2017 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
-/* Type-C port manager for Parade PS8751 with integrated superspeed muxes */
+/*
+ * Type-C port manager for Parade PS8XXX with integrated superspeed muxes.
+ *
+ * Supported TCPCs:
+ * - PS8751
+ * - PS8805
+ */
#include "common.h"
-#include "ps8751.h"
+#include "ps8xxx.h"
#include "tcpm.h"
#include "timer.h"
#include "usb_pd.h"
+#if !defined(CONFIG_USB_PD_TCPM_PS8751) && \
+ !defined(CONFIG_USB_PD_TCPM_PS8805)
+#error "Unsupported PS8xxx TCPC."
+#endif
+
#if !defined(CONFIG_USB_PD_TCPM_TCPCI) || \
!defined(CONFIG_USB_PD_TCPM_MUX) || \
!defined(CONFIG_USBC_SS_MUX)
-#error "PS8751 is using a standard TCPCI interface with integrated mux control"
+#error "PS8XXX is using a standard TCPCI interface with integrated mux control"
#error "Please upgrade your board configuration"
#endif
@@ -31,14 +42,14 @@ static int dp_set_hpd(int port, int enable)
int reg;
int rv;
- rv = tcpc_read(port, PS8751_REG_CTRL_1, &reg);
+ rv = tcpc_read(port, MUX_IN_HPD_ASSERTION_REG, &reg);
if (rv)
return rv;
if (enable)
- reg |= PS8751_REG_CTRL_1_HPD;
+ reg |= IN_HPD;
else
- reg &= ~PS8751_REG_CTRL_1_HPD;
- return tcpc_write(port, PS8751_REG_CTRL_1, reg);
+ reg &= ~IN_HPD;
+ return tcpc_write(port, MUX_IN_HPD_ASSERTION_REG, reg);
}
static int dp_set_irq(int port, int enable)
@@ -47,17 +58,17 @@ static int dp_set_irq(int port, int enable)
int reg;
int rv;
- rv = tcpc_read(port, PS8751_REG_CTRL_1, &reg);
+ rv = tcpc_read(port, MUX_IN_HPD_ASSERTION_REG, &reg);
if (rv)
return rv;
if (enable)
- reg |= PS8751_REG_CTRL_1_IRQ;
+ reg |= HPD_IRQ;
else
- reg &= ~PS8751_REG_CTRL_1_IRQ;
- return tcpc_write(port, PS8751_REG_CTRL_1, reg);
+ reg &= ~HPD_IRQ;
+ return tcpc_write(port, MUX_IN_HPD_ASSERTION_REG, reg);
}
-void ps8751_tcpc_update_hpd_status(int port, int hpd_lvl, int hpd_irq)
+void ps8xxx_tcpc_update_hpd_status(int port, int hpd_lvl, int hpd_irq)
{
dp_set_hpd(port, hpd_lvl);
@@ -75,17 +86,17 @@ void ps8751_tcpc_update_hpd_status(int port, int hpd_lvl, int hpd_irq)
hpd_deadline[port] = get_time().val + HPD_USTREAM_DEBOUNCE_LVL;
}
-int ps8751_tcpc_get_fw_version(int port, int *version)
+int ps8xxx_tcpc_get_fw_version(int port, int *version)
{
- return tcpc_read(port, PS8751_REG_VERSION, version);
+ return tcpc_read(port, FW_VER_REG, version);
}
#ifdef CONFIG_CMD_I2C_STRESS_TEST_TCPC
-struct i2c_stress_test_dev ps8751_i2c_stress_test_dev = {
+struct i2c_stress_test_dev ps8xxx_i2c_stress_test_dev = {
.reg_info = {
- .read_reg = PS8751_REG_VENDOR_ID_L,
- .read_val = PS8751_VENDOR_ID & 0xFF,
- .write_reg = PS8751_REG_CTRL_1,
+ .read_reg = PS8XXX_REG_VENDOR_ID_L,
+ .read_val = PS8XXX_VENDOR_ID & 0xFF,
+ .write_reg = MUX_IN_HPD_ASSERTION_REG,
},
.i2c_read = &tcpc_i2c_read,
.i2c_write = &tcpc_i2c_write,
diff --git a/driver/tcpm/ps8xxx.h b/driver/tcpm/ps8xxx.h
new file mode 100644
index 0000000000..f0ca91b4d3
--- /dev/null
+++ b/driver/tcpm/ps8xxx.h
@@ -0,0 +1,43 @@
+/* Copyright 2017 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Parade Tech Type-C port controller */
+
+#ifndef __CROS_EC_USB_PD_TCPM_PS8XXX_H
+#define __CROS_EC_USB_PD_TCPM_PS8XXX_H
+
+#define PS8XXX_VENDOR_ID 0x1DA0
+
+#if defined(CONFIG_USB_PD_TCPM_PS8751)
+/* Vendor defined registers */
+#define PS8XXX_PRODUCT_ID 0x8751
+
+#define FW_VER_REG 0x90
+#define PS8XXX_REG_VENDOR_ID_L 0x00
+#define PS8XXX_REG_VENDOR_ID_H 0x01
+#define MUX_IN_HPD_ASSERTION_REG 0xD0
+#define IN_HPD (1 << 0)
+#define HPD_IRQ (1 << 1)
+#define PS8XXX_REG_MUX_DP_EQ_CONFIGURATION 0xD3
+#define PS8XXX_REG_MUX_USB_C2SS_EQ 0xE7
+#define PS8XXX_REG_MUX_USB_C2SS_HS_THRESHOLD 0xE8
+
+#elif defined(CONFIG_USB_PD_TCPM_PS8805)
+/* Vendor defined registers */
+#define PS8XXX_PRODUCT_ID 0x8805
+
+#define FW_VER_REG 0x82
+#define MUX_IN_HPD_ASSERTION_REG 0xD0
+#define IN_HPD (1 << 0)
+#define HPD_IRQ (1 << 1)
+
+#endif
+
+void ps8xxx_tcpc_update_hpd_status(int port, int hpd_lvl, int hpd_irq);
+int ps8xxx_tcpc_get_fw_version(int port, int *version);
+#ifdef CONFIG_CMD_I2C_STRESS_TEST_TCPC
+extern struct i2c_stress_test_dev ps8xxx_i2c_stress_test_dev;
+#endif /* defined(CONFIG_CMD_I2C_STRESS_TEST_TCPC) */
+#endif /* defined(__CROS_EC_USB_PD_TCPM_PS8XXX_H) */
diff --git a/driver/tcpm/tcpci.c b/driver/tcpm/tcpci.c
index c7cdad4390..a8abfc5689 100644
--- a/driver/tcpm/tcpci.c
+++ b/driver/tcpm/tcpci.c
@@ -7,7 +7,7 @@
#include "anx74xx.h"
#include "ec_commands.h"
-#include "ps8751.h"
+#include "ps8xxx.h"
#include "task.h"
#include "tcpci.h"
#include "tcpm.h"
@@ -385,9 +385,10 @@ int tcpci_get_chip_info(int port, int renew,
error = anx74xx_tcpc_get_fw_version(port, &val);
break;
#endif
-#ifdef CONFIG_USB_PD_TCPM_PS8751
- case PS8751_VENDOR_ID:
- error = ps8751_tcpc_get_fw_version(port, &val);
+#if defined(CONFIG_USB_PD_TCPM_PS8751) || defined(CONFIG_USB_PD_TCPM_PS8805)
+ /* The PS8751 and PS8805 share the same vendor ID. */
+ case PS8XXX_VENDOR_ID:
+ error = ps8xxx_tcpc_get_fw_version(port, &val);
break;
#endif
default: