浏览代码

[i2c] fix the i2c device return error code (#7035)

* [i2c] fix the i2c device return error code
Man, Jianting (Meco) 2 年之前
父节点
当前提交
0275b23638
共有 3 个文件被更改,包括 15 次插入13 次删除
  1. 2 2
      bsp/lpc54114-lite/drivers/drv_i2c.c
  2. 13 9
      components/drivers/i2c/i2c_core.c
  3. 0 2
      components/drivers/include/drivers/i2c.h

+ 2 - 2
bsp/lpc54114-lite/drivers/drv_i2c.c

@@ -84,12 +84,12 @@ static rt_ssize_t master_xfer(struct rt_i2c_bus_device *bus, struct rt_i2c_msg m
 
 static rt_ssize_t slave_xfer(struct rt_i2c_bus_device *bus, struct rt_i2c_msg msgs[], rt_uint32_t num)
 {
-    return 0;
+    return -RT_ENOSYS;
 }
 
 static rt_err_t i2c_bus_control(struct rt_i2c_bus_device *bus, rt_uint32_t cmd, rt_uint32_t arg)
 {
-    return RT_EOK;
+    return -RT_EINVAL;
 }
 
 static const struct rt_i2c_bus_device_ops ops =

+ 13 - 9
components/drivers/i2c/i2c_core.c

@@ -56,6 +56,7 @@ rt_ssize_t rt_i2c_transfer(struct rt_i2c_bus_device *bus,
                           rt_uint32_t               num)
 {
     rt_ssize_t ret;
+    rt_err_t err;
 
     if (bus->ops->master_xfer)
     {
@@ -67,18 +68,23 @@ rt_ssize_t rt_i2c_transfer(struct rt_i2c_bus_device *bus,
                   msgs[ret].addr, msgs[ret].len);
         }
 #endif
-
-        rt_mutex_take(&bus->lock, RT_WAITING_FOREVER);
+        err = rt_mutex_take(&bus->lock, RT_WAITING_FOREVER);
+        if (err != RT_EOK)
+        {
+            return (rt_ssize_t)err;
+        }
         ret = bus->ops->master_xfer(bus, msgs, num);
-        rt_mutex_release(&bus->lock);
-
+        err = rt_mutex_release(&bus->lock);
+        if (err != RT_EOK)
+        {
+            return (rt_ssize_t)err;
+        }
         return ret;
     }
     else
     {
         LOG_E("I2C bus operation not supported");
-
-        return -RT_ERROR;
+        return -RT_EINVAL;
     }
 }
 
@@ -91,14 +97,12 @@ rt_err_t rt_i2c_control(struct rt_i2c_bus_device *bus,
     if(bus->ops->i2c_bus_control)
     {
         ret = bus->ops->i2c_bus_control(bus, cmd, arg);
-
         return ret;
     }
     else
     {
         LOG_E("I2C bus operation not supported");
-
-        return -RT_ERROR;
+        return -RT_EINVAL;
     }
 }
 

+ 0 - 2
components/drivers/include/drivers/i2c.h

@@ -97,8 +97,6 @@ rt_inline rt_err_t rt_i2c_bus_unlock(struct rt_i2c_bus_device *bus)
     return rt_mutex_release(&bus->lock);
 }
 
-int rt_i2c_core_init(void);
-
 #ifdef __cplusplus
 }
 #endif