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:
		
							parent
							
								
									401cabc287
								
							
						
					
					
						commit
						2feec4eafd
					
				|  | @ -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) { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue