imx: mxc_i2c: tweak the i2c transfer method

Tweak the i2c transfer to work for devices that want to read data
without addressing a register.

Signed-off-by: Nandor Han <nandor.han@ge.com>
Signed-off-by: Martyn Welch <martyn.welch@collabora.co.uk>
Acked-by: Heiko Schocher <hs@denx.de>
Cc: Heiko Schocher <hs@denx.de>
Cc: Stefano Babic <sbabic@denx.de>
This commit is contained in:
Nandor Han 2017-11-08 15:35:09 +00:00 committed by Stefano Babic
parent 401cabc287
commit 2feec4eafd

View File

@ -317,16 +317,19 @@ static int i2c_init_transfer_(struct mxc_i2c_bus *i2c_bus, u8 chip,
temp |= I2CR_MTX | I2CR_TX_NO_AK; temp |= I2CR_MTX | I2CR_TX_NO_AK;
writeb(temp, base + (I2CR << reg_shift)); writeb(temp, base + (I2CR << reg_shift));
/* write slave address */ if (alen >= 0) {
ret = tx_byte(i2c_bus, chip << 1); /* write slave address */
if (ret < 0) ret = tx_byte(i2c_bus, chip << 1);
return ret;
while (alen--) {
ret = tx_byte(i2c_bus, (addr >> (alen * 8)) & 0xff);
if (ret < 0) if (ret < 0)
return ret; return ret;
while (alen--) {
ret = tx_byte(i2c_bus, (addr >> (alen * 8)) & 0xff);
if (ret < 0)
return ret;
}
} }
return 0; return 0;
} }
@ -537,9 +540,11 @@ static int bus_i2c_read(struct mxc_i2c_bus *i2c_bus, u8 chip, u32 addr,
if (ret < 0) if (ret < 0)
return ret; return ret;
temp = readb(base + (I2CR << reg_shift)); if (alen >= 0) {
temp |= I2CR_RSTA; temp = readb(base + (I2CR << reg_shift));
writeb(temp, base + (I2CR << reg_shift)); temp |= I2CR_RSTA;
writeb(temp, base + (I2CR << reg_shift));
}
ret = tx_byte(i2c_bus, (chip << 1) | 1); ret = tx_byte(i2c_bus, (chip << 1) | 1);
if (ret < 0) { if (ret < 0) {