mirror of
https://github.com/apache/nuttx.git
synced 2026-05-28 03:45:50 +08:00
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:
committed by
Gregory Nutt
parent
4cc13f8d94
commit
0113b0db95
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user