diff options
author | Simon Glass <sjg@chromium.org> | 2011-12-20 14:59:35 -0800 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2012-01-05 19:27:43 -0800 |
commit | fe7814fabf738769d20491cbfa8c98b454bc621c (patch) | |
tree | 0edccdebfa6ee3eef4bcbb972071202c3332273e /drivers | |
parent | 8f5f2bf0c56bd1d024f11f872db09f02fb6ad03a (diff) |
slb9635_i2c: Do writes in one transaction
Since burst_length is now set up at init time, it can never be < 0, and
we don't need to write the last byte in a separate I2C transaction.
BUG=chromium-os:22938
TEST=build and boot on Kaen
Change-Id: I0050dd49ba151ee267f2790b550c0ffea4cd976f
Reviewed-on: https://gerrit.chromium.org/gerrit/13375
Commit-Ready: Simon Glass <sjg@chromium.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/tpm/slb9635_i2c/tpm_tis_i2c.c | 16 |
1 files changed, 3 insertions, 13 deletions
diff --git a/drivers/tpm/slb9635_i2c/tpm_tis_i2c.c b/drivers/tpm/slb9635_i2c/tpm_tis_i2c.c index aea3c264354..d07140f031d 100644 --- a/drivers/tpm/slb9635_i2c/tpm_tis_i2c.c +++ b/drivers/tpm/slb9635_i2c/tpm_tis_i2c.c @@ -336,10 +336,6 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count) while (size < count) { burstcnt = get_burstcount(chip); - /* burstcount < 0 = tpm is busy */ - if (burstcnt < 0) - return burstcnt; - /* limit received data to max. left */ if (burstcnt > (count - size)) burstcnt = count - size; @@ -430,13 +426,9 @@ static int tpm_tis_i2c_send(struct tpm_chip *chip, u8 *buf, size_t len) burstcnt = get_burstcount(chip); - /* burstcount < 0 = tpm is busy */ - if (burstcnt < 0) - return burstcnt; - - while (count < len - 1) { - if (burstcnt > (len-1-count)) - burstcnt = len-1-count; + while (count < len) { + if (burstcnt > (len - count)) + burstcnt = len - count; #ifdef CONFIG_TPM_I2C_BURST_LIMITATION if (retry && burstcnt > CONFIG_TPM_I2C_BURST_LIMITATION) @@ -460,8 +452,6 @@ static int tpm_tis_i2c_send(struct tpm_chip *chip, u8 *buf, size_t len) } - /* write last byte */ - iic_tpm_write(TPM_DATA_FIFO(chip->vendor.locality), &(buf[count]), 1); wait_for_stat(chip, TPM_STS_VALID, chip->vendor.timeout_c, &status); if ((status & TPM_STS_DATA_EXPECT) != 0) { rc = -EIO; |