summaryrefslogtreecommitdiff
path: root/driver/retimer/ps8818.c
diff options
context:
space:
mode:
Diffstat (limited to 'driver/retimer/ps8818.c')
-rw-r--r--driver/retimer/ps8818.c102
1 files changed, 40 insertions, 62 deletions
diff --git a/driver/retimer/ps8818.c b/driver/retimer/ps8818.c
index 2f8e353099..dff1b33a64 100644
--- a/driver/retimer/ps8818.c
+++ b/driver/retimer/ps8818.c
@@ -1,4 +1,4 @@
-/* Copyright 2019 The Chromium OS Authors. All rights reserved.
+/* Copyright 2019 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*
@@ -8,10 +8,10 @@
#include "chipset.h"
#include "common.h"
#include "console.h"
+#include "driver/retimer/ps8818_public.h"
#include "gpio.h"
#include "i2c.h"
#include "ioexpander.h"
-#include "ps8818.h"
#include "usb_mux.h"
#define PS8818_DEBUG 0
@@ -20,15 +20,12 @@ int ps8818_i2c_read(const struct usb_mux *me, int page, int offset, int *data)
{
int rv;
- rv = i2c_read8(me->i2c_port,
- me->i2c_addr_flags + page,
- offset, data);
+ rv = i2c_read8(me->i2c_port, me->i2c_addr_flags + page, offset, data);
if (PS8818_DEBUG)
ccprintf("%s(%d:0x%02X, 0x%02X) =>0x%02X\n", __func__,
- me->usb_port,
- me->i2c_addr_flags + page,
- offset, *data);
+ me->usb_port, me->i2c_addr_flags + page, offset,
+ *data);
return rv;
}
@@ -39,26 +36,19 @@ int ps8818_i2c_write(const struct usb_mux *me, int page, int offset, int data)
int pre_val, post_val;
if (PS8818_DEBUG)
- i2c_read8(me->i2c_port,
- me->i2c_addr_flags + page,
- offset, &pre_val);
+ i2c_read8(me->i2c_port, me->i2c_addr_flags + page, offset,
+ &pre_val);
- rv = i2c_write8(me->i2c_port,
- me->i2c_addr_flags + page,
- offset, data);
+ rv = i2c_write8(me->i2c_port, me->i2c_addr_flags + page, offset, data);
if (PS8818_DEBUG) {
- i2c_read8(me->i2c_port,
- me->i2c_addr_flags + page,
- offset, &post_val);
+ i2c_read8(me->i2c_port, me->i2c_addr_flags + page, offset,
+ &post_val);
ccprintf("%s(%d:0x%02X, 0x%02X, 0x%02X) "
- "0x%02X=>0x%02X\n",
- __func__,
- me->usb_port,
- me->i2c_addr_flags + page,
- offset, data,
- pre_val, post_val);
+ "0x%02X=>0x%02X\n",
+ __func__, me->usb_port, me->i2c_addr_flags + page,
+ offset, data, pre_val, post_val);
}
return rv;
@@ -71,28 +61,20 @@ int ps8818_i2c_field_update8(const struct usb_mux *me, int page, int offset,
int pre_val, post_val;
if (PS8818_DEBUG)
- i2c_read8(me->i2c_port,
- me->i2c_addr_flags + page,
- offset, &pre_val);
+ i2c_read8(me->i2c_port, me->i2c_addr_flags + page, offset,
+ &pre_val);
- rv = i2c_field_update8(me->i2c_port,
- me->i2c_addr_flags + page,
- offset,
- field_mask,
- set_value);
+ rv = i2c_field_update8(me->i2c_port, me->i2c_addr_flags + page, offset,
+ field_mask, set_value);
if (PS8818_DEBUG) {
- i2c_read8(me->i2c_port,
- me->i2c_addr_flags + page,
- offset, &post_val);
+ i2c_read8(me->i2c_port, me->i2c_addr_flags + page, offset,
+ &post_val);
ccprintf("%s(%d:0x%02X, 0x%02X, 0x%02X, 0x%02X) "
"0x%02X=>0x%02X\n",
- __func__,
- me->usb_port,
- me->i2c_addr_flags + page,
- offset, field_mask, set_value,
- pre_val, post_val);
+ __func__, me->usb_port, me->i2c_addr_flags + page,
+ offset, field_mask, set_value, pre_val, post_val);
}
return rv;
@@ -107,17 +89,21 @@ static int ps8818_set_mux(const struct usb_mux *me, mux_state_t mux_state,
/* This driver does not use host command ACKs */
*ack_required = false;
+ /* This driver treats safe mode as none */
+ if (mux_state == USB_PD_MUX_SAFE_MODE)
+ mux_state = USB_PD_MUX_NONE;
+
if (chipset_in_state(CHIPSET_STATE_HARD_OFF))
- return (mux_state == USB_PD_MUX_NONE) ? EC_SUCCESS
- : EC_ERROR_NOT_POWERED;
+ return (mux_state == USB_PD_MUX_NONE) ? EC_SUCCESS :
+ EC_ERROR_NOT_POWERED;
if (PS8818_DEBUG)
- ccprintf("%s(%d, 0x%02X) %s %s %s\n",
- __func__, me->usb_port, mux_state,
- (mux_state & USB_PD_MUX_USB_ENABLED) ? "USB" : "",
- (mux_state & USB_PD_MUX_DP_ENABLED) ? "DP" : "",
- (mux_state & USB_PD_MUX_POLARITY_INVERTED)
- ? "FLIP" : "");
+ ccprintf("%s(%d, 0x%02X) %s %s %s\n", __func__, me->usb_port,
+ mux_state,
+ (mux_state & USB_PD_MUX_USB_ENABLED) ? "USB" : "",
+ (mux_state & USB_PD_MUX_DP_ENABLED) ? "DP" : "",
+ (mux_state & USB_PD_MUX_POLARITY_INVERTED) ? "FLIP" :
+ "");
/* Set the mode */
if (mux_state & USB_PD_MUX_USB_ENABLED)
@@ -125,11 +111,8 @@ static int ps8818_set_mux(const struct usb_mux *me, mux_state_t mux_state,
if (mux_state & USB_PD_MUX_DP_ENABLED)
val |= PS8818_MODE_DP_ENABLE;
- rv = ps8818_i2c_field_update8(me,
- PS8818_REG_PAGE0,
- PS8818_REG0_MODE,
- PS8818_MODE_NON_RESERVED_MASK,
- val);
+ rv = ps8818_i2c_field_update8(me, PS8818_REG_PAGE0, PS8818_REG0_MODE,
+ PS8818_MODE_NON_RESERVED_MASK, val);
if (rv)
return rv;
@@ -138,11 +121,8 @@ static int ps8818_set_mux(const struct usb_mux *me, mux_state_t mux_state,
if (mux_state & USB_PD_MUX_POLARITY_INVERTED)
val |= PS8818_FLIP_CONFIG;
- rv = ps8818_i2c_field_update8(me,
- PS8818_REG_PAGE0,
- PS8818_REG0_FLIP,
- PS8818_FLIP_NON_RESERVED_MASK,
- val);
+ rv = ps8818_i2c_field_update8(me, PS8818_REG_PAGE0, PS8818_REG0_FLIP,
+ PS8818_FLIP_NON_RESERVED_MASK, val);
if (rv)
return rv;
@@ -151,11 +131,9 @@ static int ps8818_set_mux(const struct usb_mux *me, mux_state_t mux_state,
if (mux_state & USB_PD_MUX_DP_ENABLED)
val |= PS8818_DPHPD_PLUGGED;
- rv = ps8818_i2c_field_update8(me,
- PS8818_REG_PAGE0,
- PS8818_REG0_DPHPD_CONFIG,
- PS8818_DPHPD_NON_RESERVED_MASK,
- val);
+ rv = ps8818_i2c_field_update8(me, PS8818_REG_PAGE0,
+ PS8818_REG0_DPHPD_CONFIG,
+ PS8818_DPHPD_NON_RESERVED_MASK, val);
return rv;
}