diff options
| -rw-r--r-- | drivers/i2c/s3c24x0_i2c.c | 14 | 
1 files changed, 6 insertions, 8 deletions
| diff --git a/drivers/i2c/s3c24x0_i2c.c b/drivers/i2c/s3c24x0_i2c.c index 00308b522..46d25061e 100644 --- a/drivers/i2c/s3c24x0_i2c.c +++ b/drivers/i2c/s3c24x0_i2c.c @@ -324,7 +324,7 @@ static int i2c_transfer(struct s3c24x0_i2c *i2c,  			writel(I2C_MODE_MT | I2C_TXRX_ENA | I2C_START_STOP,  			       &i2c->iicstat);  			i = 0; -			while ((i < data_len) && (result = I2C_OK)) { +			while ((i < data_len) && (result == I2C_OK)) {  				result = WaitForXfer(i2c);  				writel(data[i], &i2c->iicds);  				ReadWriteByte(i2c); @@ -336,17 +336,16 @@ static int i2c_transfer(struct s3c24x0_i2c *i2c,  			result = WaitForXfer(i2c);  		/* send STOP */ -		writel(I2C_MODE_MR | I2C_TXRX_ENA, &i2c->iicstat); +		writel(I2C_MODE_MT | I2C_TXRX_ENA, &i2c->iicstat);  		ReadWriteByte(i2c);  		break;  	case I2C_READ:  		if (addr && addr_len) { -			writel(I2C_MODE_MT | I2C_TXRX_ENA, &i2c->iicstat);  			writel(chip, &i2c->iicds);  			/* send START */ -			writel(readl(&i2c->iicstat) | I2C_START_STOP, -			       &i2c->iicstat); +			writel(I2C_MODE_MT | I2C_TXRX_ENA | I2C_START_STOP, +				&i2c->iicstat);  			result = WaitForXfer(i2c);  			if (IsACK(i2c)) {  				i = 0; @@ -380,11 +379,10 @@ static int i2c_transfer(struct s3c24x0_i2c *i2c,  			}  		} else { -			writel(I2C_MODE_MR | I2C_TXRX_ENA, &i2c->iicstat);  			writel(chip, &i2c->iicds);  			/* send START */ -			writel(readl(&i2c->iicstat) | I2C_START_STOP, -			       &i2c->iicstat); +			writel(I2C_MODE_MR | I2C_TXRX_ENA | I2C_START_STOP, +				&i2c->iicstat);  			result = WaitForXfer(i2c);  			if (IsACK(i2c)) { |