diff options
Diffstat (limited to 'driver/retimer/ps8818.c')
-rw-r--r-- | driver/retimer/ps8818.c | 102 |
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; } |