tpm: atmel_twi: Make compatible with DM I2C busses
authormario.six@gdsys.cc <mario.six@gdsys.cc>
Mon, 18 Jul 2016 11:47:45 +0000 (13:47 +0200)
committerAndreas Bießmann <andreas@biessmann.org>
Mon, 15 Aug 2016 20:12:00 +0000 (22:12 +0200)
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>
drivers/tpm/Kconfig
drivers/tpm/tpm_atmel_twi.c

index 9a7b7f5..7ab34ce 100644 (file)
@@ -15,7 +15,7 @@ config TPM_TIS_SANDBOX
 
 config TPM_ATMEL_TWI
        bool "Enable Atmel TWI TPM device driver"
-       depends on TPM && DM_I2C
+       depends on TPM
        help
          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
index 2aa9381..eba654b 100644 (file)
@@ -81,14 +81,23 @@ static int tpm_atmel_twi_xfer(struct udevice *dev,
        print_buffer(0, (void *)sendbuf, 1, send_size, 0);
 #endif
 
+#ifndef CONFIG_DM_I2C
        res = i2c_write(0x29, 0, 0, (uchar *)sendbuf, send_size);
+#else
+       res = dm_i2c_write(dev, 0, sendbuf, send_size);
+#endif
        if (res) {
                printf("i2c_write returned %d\n", res);
                return -1;
        }
 
        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 */
                if (get_timer(start) > ATMEL_TPM_TIMEOUT_MS) {
                        puts("tpm timed out\n");
@@ -99,7 +108,11 @@ static int tpm_atmel_twi_xfer(struct udevice *dev,
        if (!res) {
                *recv_len = get_unaligned_be32(recvbuf + 2);
                if (*recv_len > 10)
+#ifndef CONFIG_DM_I2C
                        res = i2c_read(0x29, 0, 0, recvbuf, *recv_len);
+#else
+                       res = dm_i2c_read(dev, 0, recvbuf, *recv_len);
+#endif
        }
        if (res) {
                printf("i2c_read returned %d (rlen=%d)\n", res, *recv_len);