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 9a7b7f535fbbb07ab9aa79c1301a1c7235444133..7ab34ce863542904527acf710cbec9c5620e99b6 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 2aa9381b11a5816d4e6178280a8b4c7df6052f25..eba654b15dcad4d85fa06e9396be4147888ea1c4 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);