summaryrefslogtreecommitdiff
path: root/driver/pi3usb9281.h
diff options
context:
space:
mode:
authorDominic Chen <ddchen@chromium.org>2014-07-15 17:05:35 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-08-13 13:21:00 +0000
commitfe1981a414384e30b9e2a197f893c6b281b9d49a (patch)
tree5907b0271e66b5c7d526fe360b3f461c5f684941 /driver/pi3usb9281.h
parent283fe98939fa56c61280529e2f933bedb122a52a (diff)
downloadchrome-ec-fe1981a414384e30b9e2a197f893c6b281b9d49a.tar.gz
pi3usb9281: Implement driver for Pericom USB switch
BRANCH=none BUG=none TEST=verify that usb switch funcitons Change-Id: Ie897a2ae94042abefbb349d30dfa183caaec9ed0 Signed-off-by: Dominic Chen <ddchen@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/209846 Reviewed-by: Vic Yang <victoryang@chromium.org>
Diffstat (limited to 'driver/pi3usb9281.h')
-rw-r--r--driver/pi3usb9281.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/driver/pi3usb9281.h b/driver/pi3usb9281.h
new file mode 100644
index 0000000000..ebcd333d80
--- /dev/null
+++ b/driver/pi3usb9281.h
@@ -0,0 +1,86 @@
+/* Copyright (c) 2014 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.
+ *
+ * Pericom PI3USB9281 USB port switch.
+ */
+
+#ifndef PI3USB9281_H
+#define PI3USB9281_H
+
+#define PI3USB9281_REG_DEV_ID 0x01
+#define PI3USB9281_REG_CONTROL 0x02
+#define PI3USB9281_REG_INT 0x03
+#define PI3USB9281_REG_INT_MASK 0x05
+#define PI3USB9281_REG_DEV_TYPE 0x0a
+#define PI3USB9281_REG_CHG_STATUS 0x0e
+#define PI3USB9281_REG_MANUAL 0x13
+#define PI3USB9281_REG_RESET 0x1b
+#define PI3USB9281_REG_VBUS 0x1d
+
+#define PI3USB9281_CTRL_INT_MASK (1 << 0)
+#define PI3USB9281_CTRL_AUTO (1 << 2)
+#define PI3USB9281_CTRL_SWITCH_AUTO (1 << 4)
+
+#define PI3USB9281_PIN_MANUAL_VBUS (3 << 0)
+#define PI3USB9281_PIN_MANUAL_DP (1 << 2)
+#define PI3USB9281_PIN_MANUAL_DM (1 << 5)
+
+#define PI3USB9281_INT_ATTACH (1 << 0)
+#define PI3USB9281_INT_DETACH (1 << 1)
+#define PI3USB9281_INT_OVP (1 << 5)
+#define PI3USB9281_INT_OCP (1 << 6)
+#define PI3USB9281_INT_OVP_OC (1 << 7)
+
+#define PI3USB9281_TYPE_NONE 0
+#define PI3USB9281_TYPE_MHL (1 << 0)
+#define PI3USB9281_TYPE_OTG (1 << 1)
+#define PI3USB9281_TYPE_SDP (1 << 2)
+#define PI3USB9281_TYPE_CAR (1 << 4)
+#define PI3USB9281_TYPE_CDP (1 << 5)
+#define PI3USB9281_TYPE_DCP (1 << 6)
+
+#define PI3USB9281_CHG_NONE 0
+#define PI3USB9281_CHG_CAR_TYPE1 (1 << 1)
+#define PI3USB9281_CHG_CAR_TYPE2 (3 << 0)
+#define PI3USB9281_CHG_APPLE_1A (1 << 2)
+#define PI3USB9281_CHG_APPLE_2A (1 << 3)
+#define PI3USB9281_CHG_APPLE_2_4A (1 << 4)
+
+/* Read PI3USB9281 register. */
+uint8_t pi3usb9281_read(uint8_t chip_idx, uint8_t reg);
+
+/* Write PI3USB9281 register. */
+int pi3usb9281_write(uint8_t chip_idx, uint8_t reg, uint8_t val);
+
+/* Enable interrupts. */
+int pi3usb9281_enable_interrupts(uint8_t chip_idx);
+
+/* Disable all interrupts. */
+int pi3usb9281_disable_interrupts(uint8_t chip_idx);
+
+/* Set interrupt mask. */
+int pi3usb9281_set_interrupt_mask(uint8_t chip_idx, uint8_t mask);
+
+/* Get and clear current interrupt status. */
+int pi3usb9281_get_interrupts(uint8_t chip_idx);
+
+/* Get but keep interrupt status. */
+int pi3usb9281_peek_interrupts(uint8_t chip_idx);
+
+/* Get attached device type. */
+int pi3usb9281_get_device_type(uint8_t chip_idx);
+
+/* Get attached charger status. */
+int pi3usb9281_get_charger_status(uint8_t chip_idx);
+
+/* Set switch configuration to manual. */
+int pi3usb9281_set_switch_manual(uint8_t chip_idx, int val);
+
+/* Set bits to enable pins in manual switch register */
+int pi3usb9281_set_pins(uint8_t chip_idx, uint8_t mask);
+
+/* Reset PI3USB9281. */
+int pi3usb9281_reset(uint8_t chip_idx);
+
+#endif /* PI3USB9281_H */