i2c-c2k: Fix i2c_c2k_xfer() to support multi-message transfers

i2c_c2k_xfer() only processed the last message in a list of multiple
messages, without even generating a warning about that. Add proper
support for multiple message transfers. Tested with a hacked TPM
driver with 4 messages.

This change also does a general cleanup of i2c_c2k_xfer(). There is no
need to call i2c_start/stop() here, these functions are called from
i2c_read/write().

Change-Id: Ic3ac48c5983f713081a97d3c07190a1a9fab14dd
diff --git a/drivers/i2c/busses/i2c-c2k.c b/drivers/i2c/busses/i2c-c2k.c
index 1253b36..c2ff781 100644
--- a/drivers/i2c/busses/i2c-c2k.c
+++ b/drivers/i2c/busses/i2c-c2k.c
@@ -359,27 +359,20 @@
 
 static int i2c_c2k_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int num)
 {
-        unsigned int i;
+        int i;
         int result;
 
-        /* Start I2C transfer */
-        result = i2c_start(adapter->dev);
-        if (result)
-		goto fail0;
+	for (i = 0; i < num; i++) {
+		if (msgs[i].flags & I2C_M_RD)
+			result = i2c_read(adapter->dev, msgs[i].addr,
+					msgs[i].buf, msgs[i].len);
+		else
+			result = i2c_write(adapter->dev, msgs[i].addr,
+					msgs[i].buf, msgs[i].len);
 
-        /* read/write data */
-	i = num-1;
-        if (msgs[i].flags & I2C_M_RD)
-		result = i2c_read(adapter->dev, msgs[i].addr, msgs[i].buf, msgs[i].len);
-        else
-		result = i2c_write(adapter->dev, msgs->addr, msgs->buf, msgs->len);
-
-	if (result)
-                goto fail0;
-
-fail0:
-        /* Stop I2C transfer */
-	i2c_stop(adapter->dev);
+		if (result)
+			break;
+	}
 
 	return (result < 0) ? result : num;
 }