diff options
author | Diana Z <dzigterman@chromium.org> | 2021-05-24 14:15:17 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-05-25 19:43:02 +0000 |
commit | 4d34f8f2180b0dd671219154eab2e420dcf96734 (patch) | |
tree | b8f9a78d14a4656b2bebbd646b425969c1fc2a4e /driver/retimer | |
parent | 3bc00128c407e78b55adc0b6f2d1cf5dcb3050e4 (diff) | |
download | chrome-ec-4d34f8f2180b0dd671219154eab2e420dcf96734.tar.gz |
TDP142: Initial driver
Initial driver for the TDP142, a DisplayPort redriver chip. The initial
implementation simply provides access to the chip's control selection
since it must be explicitly enabled after the chip powers on.
BRANCH=None
BUG=b:187856682
TEST=make -j buildall
Signed-off-by: Diana Z <dzigterman@chromium.org>
Change-Id: I4afe4b0453ef49154b766166f608bd3d0fb8848f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2915823
Reviewed-by: Rob Barnes <robbarnes@google.com>
Diffstat (limited to 'driver/retimer')
-rw-r--r-- | driver/retimer/tdp142.c | 42 | ||||
-rw-r--r-- | driver/retimer/tdp142.h | 38 |
2 files changed, 80 insertions, 0 deletions
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 */ |