diff options
| author | Nandor Han <nandor.han@ge.com> | 2017-11-08 15:35:09 +0000 | 
|---|---|---|
| committer | Stefano Babic <sbabic@denx.de> | 2017-11-20 09:58:31 +0100 | 
| commit | 2feec4eafd40b4b121a0f7d7f602e25a39d9d403 (patch) | |
| tree | 65b0b4b19d1ff349beabd0228ae5d6272e191e73 /drivers/i2c/mxc_i2c.c | |
| parent | 401cabc287a26f71900153049ce54987bb184a4a (diff) | |
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>
Diffstat (limited to 'drivers/i2c/mxc_i2c.c')
| -rw-r--r-- | drivers/i2c/mxc_i2c.c | 25 | 
1 files changed, 15 insertions, 10 deletions
| diff --git a/drivers/i2c/mxc_i2c.c b/drivers/i2c/mxc_i2c.c index abf1da2ae3e..205274e9476 100644 --- a/drivers/i2c/mxc_i2c.c +++ b/drivers/i2c/mxc_i2c.c @@ -317,16 +317,19 @@ static int i2c_init_transfer_(struct mxc_i2c_bus *i2c_bus, u8 chip,  	temp |= I2CR_MTX | I2CR_TX_NO_AK;  	writeb(temp, base + (I2CR << reg_shift)); -	/* write slave address */ -	ret = tx_byte(i2c_bus, chip << 1); -	if (ret < 0) -		return ret; - -	while (alen--) { -		ret = tx_byte(i2c_bus, (addr >> (alen * 8)) & 0xff); +	if (alen >= 0)	{ +		/* write slave address */ +		ret = tx_byte(i2c_bus, chip << 1);  		if (ret < 0)  			return ret; + +		while (alen--) { +			ret = tx_byte(i2c_bus, (addr >> (alen * 8)) & 0xff); +			if (ret < 0) +				return ret; +		}  	} +  	return 0;  } @@ -537,9 +540,11 @@ static int bus_i2c_read(struct mxc_i2c_bus *i2c_bus, u8 chip, u32 addr,  	if (ret < 0)  		return ret; -	temp = readb(base + (I2CR << reg_shift)); -	temp |= I2CR_RSTA; -	writeb(temp, base + (I2CR << reg_shift)); +	if (alen >= 0) { +		temp = readb(base + (I2CR << reg_shift)); +		temp |= I2CR_RSTA; +		writeb(temp, base + (I2CR << reg_shift)); +	}  	ret = tx_byte(i2c_bus, (chip << 1) | 1);  	if (ret < 0) { | 
