drivers: handle I2C_TRANSFER return value consistently. Some I2C peripherals transfers return zero on success, others number of completed transfers. Make drivers robust against this.

This commit is contained in:
Juha Niskanen
2017-08-04 07:31:36 -06:00
committed by Gregory Nutt
parent 4cc13f8d94
commit 0113b0db95
15 changed files with 68 additions and 38 deletions
+3 -1
View File
@@ -71,6 +71,7 @@ int i2c_read(FAR struct i2c_master_s *dev,
{
struct i2c_msg_s msg;
unsigned int flags;
int ret;
/* 7- or 10-bit? */
@@ -86,5 +87,6 @@ int i2c_read(FAR struct i2c_master_s *dev,
/* Then perform the transfer. */
return I2C_TRANSFER(dev, &msg, 1);
ret = I2C_TRANSFER(dev, &msg, 1);
return (ret >= 0) ? OK : ret;
}
+3 -1
View File
@@ -71,6 +71,7 @@ int i2c_write(FAR struct i2c_master_s *dev,
FAR const uint8_t *buffer, int buflen)
{
struct i2c_msg_s msg;
int ret;
/* Setup for the transfer */
@@ -82,5 +83,6 @@ int i2c_write(FAR struct i2c_master_s *dev,
/* Then perform the transfer. */
return I2C_TRANSFER(dev, &msg, 1);
ret = I2C_TRANSFER(dev, &msg, 1);
return (ret >= 0) ? OK : ret;
}
+3 -1
View File
@@ -74,6 +74,7 @@ int i2c_writeread(FAR struct i2c_master_s *dev,
{
struct i2c_msg_s msg[2];
unsigned int flags;
int ret;
/* 7- or 10-bit address? */
@@ -109,6 +110,7 @@ int i2c_writeread(FAR struct i2c_master_s *dev,
/* Then perform the transfer. */
return I2C_TRANSFER(dev, msg, 2);
ret = I2C_TRANSFER(dev, msg, 2);
return (ret >= 0) ? OK : ret;
}