tpm: atmel_twi: Make compatible with DM I2C busses

Commit 302c5db ("dm: tpm: Add Driver Model support for tpm_atmel_twi
driver") converted the Atmel TWI TPM driver itself to driver model, but
kept the legacy-style i2c_write/i2c_read calls.

Commit 3e7d940 ("dm: tpm: Every TPM drivers should depends on DM_TPM")
then made DM_I2C a dependency of the driver, effectively forcing users
to turn on CONFIG_DM_I2C_COMPAT to get it to work.

This patch adds the necessary dm_i2c_write/dm_i2c_read calls to make the
driver compatible with DM, but also keeps the legacy calls in ifdefs, so
that the driver is now compatible with both DM and non-DM setups.

Signed-off-by: Mario Six <mario.six@gdsys.cc>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Andreas Bießmann <andreas@biessmann.org>
master
mario.six@gdsys.cc 8 years ago committed by Andreas Bießmann
parent e3b7599be7
commit 03dcd410d7
  1. 2
      drivers/tpm/Kconfig
  2. 15
      drivers/tpm/tpm_atmel_twi.c

@ -15,7 +15,7 @@ config TPM_TIS_SANDBOX
config TPM_ATMEL_TWI config TPM_ATMEL_TWI
bool "Enable Atmel TWI TPM device driver" bool "Enable Atmel TWI TPM device driver"
depends on TPM && DM_I2C depends on TPM
help help
This driver supports an Atmel TPM device connected on the I2C bus. This driver supports an Atmel TPM device connected on the I2C bus.
The usual tpm operations and the 'tpm' command can be used to talk The usual tpm operations and the 'tpm' command can be used to talk

@ -81,14 +81,23 @@ static int tpm_atmel_twi_xfer(struct udevice *dev,
print_buffer(0, (void *)sendbuf, 1, send_size, 0); print_buffer(0, (void *)sendbuf, 1, send_size, 0);
#endif #endif
#ifndef CONFIG_DM_I2C
res = i2c_write(0x29, 0, 0, (uchar *)sendbuf, send_size); res = i2c_write(0x29, 0, 0, (uchar *)sendbuf, send_size);
#else
res = dm_i2c_write(dev, 0, sendbuf, send_size);
#endif
if (res) { if (res) {
printf("i2c_write returned %d\n", res); printf("i2c_write returned %d\n", res);
return -1; return -1;
} }
start = get_timer(0); start = get_timer(0);
while ((res = i2c_read(0x29, 0, 0, recvbuf, 10))) { #ifndef CONFIG_DM_I2C
while ((res = i2c_read(0x29, 0, 0, recvbuf, 10)))
#else
while ((res = dm_i2c_read(dev, 0, recvbuf, 10)))
#endif
{
/* TODO Use TIS_TIMEOUT from tpm_tis_infineon.h */ /* TODO Use TIS_TIMEOUT from tpm_tis_infineon.h */
if (get_timer(start) > ATMEL_TPM_TIMEOUT_MS) { if (get_timer(start) > ATMEL_TPM_TIMEOUT_MS) {
puts("tpm timed out\n"); puts("tpm timed out\n");
@ -99,7 +108,11 @@ static int tpm_atmel_twi_xfer(struct udevice *dev,
if (!res) { if (!res) {
*recv_len = get_unaligned_be32(recvbuf + 2); *recv_len = get_unaligned_be32(recvbuf + 2);
if (*recv_len > 10) if (*recv_len > 10)
#ifndef CONFIG_DM_I2C
res = i2c_read(0x29, 0, 0, recvbuf, *recv_len); res = i2c_read(0x29, 0, 0, recvbuf, *recv_len);
#else
res = dm_i2c_read(dev, 0, recvbuf, *recv_len);
#endif
} }
if (res) { if (res) {
printf("i2c_read returned %d (rlen=%d)\n", res, *recv_len); printf("i2c_read returned %d (rlen=%d)\n", res, *recv_len);

Loading…
Cancel
Save