i2c-eg20t : Support Combined R/W transfer mode
[pandora-kernel.git] / drivers / i2c / busses / i2c-eg20t.c
index 8abfa4a..9b072fd 100644 (file)
@@ -673,25 +673,26 @@ static s32 pch_i2c_xfer(struct i2c_adapter *i2c_adap,
        /* transfer not completed */
        adap->pch_i2c_xfer_in_progress = true;
 
-       pmsg = &msgs[0];
-       pmsg->flags |= adap->pch_buff_mode_en;
-       status = pmsg->flags;
-       pch_dbg(adap,
-               "After invoking I2C_MODE_SEL :flag= 0x%x\n", status);
-       /* calculate sub address length and message length */
-       /* these are applicable only for buffer mode */
-       subaddrlen = pmsg->buf[0];
-       /* calculate actual message length excluding
-        * the sub address fields */
-       msglen = (pmsg->len) - (subaddrlen + 1);
-       if (status & (I2C_M_RD)) {
-               pch_dbg(adap, "invoking pch_i2c_readbytes\n");
-               ret = pch_i2c_readbytes(i2c_adap, pmsg, (i + 1 == num),
-                                  (i == 0));
-       } else {
-               pch_dbg(adap, "invoking pch_i2c_writebytes\n");
-               ret = pch_i2c_writebytes(i2c_adap, pmsg, (i + 1 == num),
-                                   (i == 0));
+       for (i = 0; i < num; i++) {
+               pmsg = &msgs[i];
+               pmsg->flags |= adap->pch_buff_mode_en;
+               status = pmsg->flags;
+               pch_dbg(adap,
+                       "After invoking I2C_MODE_SEL :flag= 0x%x\n", status);
+               /* calculate sub address length and message length */
+               /* these are applicable only for buffer mode */
+               subaddrlen = pmsg->buf[0];
+               /* calculate actual message length excluding
+                * the sub address fields */
+               msglen = (pmsg->len) - (subaddrlen + 1);
+
+               if ((status & (I2C_M_RD)) != false) {
+                       ret = pch_i2c_readbytes(i2c_adap, pmsg, (i + 1 == num),
+                                               (i == 0));
+               } else {
+                       ret = pch_i2c_writebytes(i2c_adap, pmsg, (i + 1 == num),
+                                                (i == 0));
+               }
        }
 
        adap->pch_i2c_xfer_in_progress = false; /* transfer completed */