aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmit Kucheria <amit.kucheria@verdurent.com>2009-12-11 07:21:45 -0500
committerSamuel Ortiz <sameo@linux.intel.com>2009-12-13 13:22:00 -0500
commit147e084792f22b52df65a3d9d0e8b2a9233e0aa8 (patch)
treeb5598f79a70eaddce240fca1dfd2434544d1fb4e
parentab4abe056d8828341d2a7d6463b13eafaf210181 (diff)
mfd: Clarify twl4030 return value for read and write
We should be checking if all the messages were tranferred. If not, then we should propagate the i2c core error code or EIO. Currently we return success (0) even if none of messages were transferred successfully. Signed-off-by: Amit Kucheria <amit.kucheria@verdurent.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
-rw-r--r--drivers/mfd/twl4030-core.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/drivers/mfd/twl4030-core.c b/drivers/mfd/twl4030-core.c
index e4a5d489b8e7..7c2ec0aa9d87 100644
--- a/drivers/mfd/twl4030-core.c
+++ b/drivers/mfd/twl4030-core.c
@@ -306,10 +306,17 @@ int twl4030_i2c_write(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes)
306 ret = i2c_transfer(twl->client->adapter, twl->xfer_msg, 1); 306 ret = i2c_transfer(twl->client->adapter, twl->xfer_msg, 1);
307 mutex_unlock(&twl->xfer_lock); 307 mutex_unlock(&twl->xfer_lock);
308 308
309 /* i2cTransfer returns num messages.translate it pls.. */ 309 /* i2c_transfer returns number of messages transferred */
310 if (ret >= 0) 310 if (ret != 1) {
311 ret = 0; 311 pr_err("%s: i2c_write failed to transfer all messages\n",
312 return ret; 312 DRIVER_NAME);
313 if (ret < 0)
314 return ret;
315 else
316 return -EIO;
317 } else {
318 return 0;
319 }
313} 320}
314EXPORT_SYMBOL(twl4030_i2c_write); 321EXPORT_SYMBOL(twl4030_i2c_write);
315 322
@@ -358,10 +365,17 @@ int twl4030_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes)
358 ret = i2c_transfer(twl->client->adapter, twl->xfer_msg, 2); 365 ret = i2c_transfer(twl->client->adapter, twl->xfer_msg, 2);
359 mutex_unlock(&twl->xfer_lock); 366 mutex_unlock(&twl->xfer_lock);
360 367
361 /* i2cTransfer returns num messages.translate it pls.. */ 368 /* i2c_transfer returns number of messages transferred */
362 if (ret >= 0) 369 if (ret != 2) {
363 ret = 0; 370 pr_err("%s: i2c_read failed to transfer all messages\n",
364 return ret; 371 DRIVER_NAME);
372 if (ret < 0)
373 return ret;
374 else
375 return -EIO;
376 } else {
377 return 0;
378 }
365} 379}
366EXPORT_SYMBOL(twl4030_i2c_read); 380EXPORT_SYMBOL(twl4030_i2c_read);
367 381