diff options
Diffstat (limited to 'driver')
-rw-r--r-- | driver/build.mk | 3 | ||||
-rw-r--r-- | driver/retimer/tdp142.c | 42 | ||||
-rw-r--r-- | driver/retimer/tdp142.h | 38 |
3 files changed, 83 insertions, 0 deletions
diff --git a/driver/build.mk b/driver/build.mk index 72bbd46a89..93536b76f7 100644 --- a/driver/build.mk +++ b/driver/build.mk @@ -75,6 +75,9 @@ driver-$(CONFIG_CHARGER_RT9467)+=charger/rt946x.o driver-$(CONFIG_CHARGER_SY21612)+=charger/sy21612.o driver-$(CONFIG_CHARGER_SM5803)+=charger/sm5803.o +# DP Redrivers +driver-$(CONFIG_DP_REDRIVER_TDP142)+=retimer/tdp142.o + # Fingerprint Sensors include $(_driver_cur_dir)fingerprint/build.mk diff --git a/driver/retimer/tdp142.c b/driver/retimer/tdp142.c new file mode 100644 index 0000000000..e1632150d0 --- /dev/null +++ b/driver/retimer/tdp142.c @@ -0,0 +1,42 @@ +/* Copyright 2021 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. + * + * Texas Instruments TDP142 DisplayPort Linear Redriver + */ + +#include "common.h" +#include "ec_commands.h" +#include "i2c.h" +#include "tdp142.h" + +static enum ec_error_list tdp142_write(int offset, int data) +{ + return i2c_write8(TDP142_I2C_PORT, + TDP142_I2C_ADDR, + offset, data); + +} + +static enum ec_error_list tdp142_read(int offset, int *regval) +{ + return i2c_read8(TDP142_I2C_PORT, + TDP142_I2C_ADDR, + offset, regval); + +} + +enum ec_error_list tdp142_set_ctlsel(enum tdp142_ctlsel selection) +{ + int regval; + enum ec_error_list rv; + + rv = tdp142_read(TDP142_REG_GENERAL, ®val); + if (rv) + return rv; + + regval &= ~TDP142_GENERAL_CTLSEL; + regval |= selection; + + return tdp142_write(TDP142_REG_GENERAL, regval); +} diff --git a/driver/retimer/tdp142.h b/driver/retimer/tdp142.h new file mode 100644 index 0000000000..8346a233a5 --- /dev/null +++ b/driver/retimer/tdp142.h @@ -0,0 +1,38 @@ +/* Copyright 2021 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. + * + * Texas Instruments TDP142 DisplayPort Linear Redriver + */ + +#ifndef __CROS_EC_REDRIVER_TDP142_H +#define __CROS_EC_REDRIVER_TDP142_H + +#include "compile_time_macros.h" + +/* + * Note: Since DP redrivers do not have a standard EC structure, define a + * TDP142_I2C_PORT and TDP142_I2C_ADDR in board.h + */ +#define TDP142_I2C_ADDR0 0x44 +#define TDP142_I2C_ADDR1 0x47 +#define TDP142_I2C_ADDR2 0x0C +#define TDP142_I2C_ADDR3 0x0F + +/* Registers */ +#define TDP142_REG_GENERAL 0x0A +#define TDP142_GENERAL_CTLSEL GENMASK(1, 0) +#define TDP142_GENERAL_HPDIN_OVRRIDE BIT(3) +#define TDP142_GENERAL_EQ_OVERRIDE BIT(4) +#define TDP142_GENERAL_SWAP_HPDIN BIT(5) + +enum tdp142_ctlsel { + TDP142_CTLSEL_SHUTDOWN, + TDP142_CTLSEL_DISABLED, + TDP142_CTLSEL_ENABLED, +}; + +/* Control redriver enable */ +enum ec_error_list tdp142_set_ctlsel(enum tdp142_ctlsel selection); + +#endif /* __CROS_EC_REDRIVER_TDP142_H */ |