[components][i2c] 优化 controt 接口格式,增加可用命令 (#7806)
原来 rt_i2c_control 只能执行 RT_I2C_DEV_CTRL_CLK 单一命令,通过此修改可以支持更多可用命令
This commit is contained in:
parent
350626841a
commit
0ebec472e1
|
@ -96,7 +96,7 @@ static rt_size_t _slave_xfer(struct rt_i2c_bus_device *bus, struct rt_i2c_msg ms
|
||||||
return -RT_ENOSYS;
|
return -RT_ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static rt_err_t _i2c_bus_control(struct rt_i2c_bus_device *bus, rt_uint32_t cmd, rt_uint32_t arg)
|
static rt_err_t _i2c_bus_control(struct rt_i2c_bus_device *bus, int cmd, void *args)
|
||||||
{
|
{
|
||||||
return -RT_EINVAL;
|
return -RT_EINVAL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,8 +21,8 @@ static rt_ssize_t air105_i2c_slv_xfer(struct rt_i2c_bus_device *bus,
|
||||||
struct rt_i2c_msg msgs[],
|
struct rt_i2c_msg msgs[],
|
||||||
rt_uint32_t num);
|
rt_uint32_t num);
|
||||||
static rt_err_t air105_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t air105_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t,
|
int cmd,
|
||||||
rt_uint32_t);
|
void *args);
|
||||||
|
|
||||||
static const struct rt_i2c_bus_device_ops air105_i2c_ops =
|
static const struct rt_i2c_bus_device_ops air105_i2c_ops =
|
||||||
{
|
{
|
||||||
|
@ -88,8 +88,8 @@ static rt_ssize_t air105_i2c_slv_xfer(struct rt_i2c_bus_device *bus,
|
||||||
return -RT_ENOSYS;
|
return -RT_ENOSYS;
|
||||||
}
|
}
|
||||||
static rt_err_t air105_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t air105_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t cmd,
|
int cmd,
|
||||||
rt_uint32_t arg)
|
void *args)
|
||||||
{
|
{
|
||||||
|
|
||||||
RT_ASSERT(bus != RT_NULL);
|
RT_ASSERT(bus != RT_NULL);
|
||||||
|
@ -97,7 +97,7 @@ static rt_err_t air105_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
switch (cmd)
|
switch (cmd)
|
||||||
{
|
{
|
||||||
case RT_I2C_DEV_CTRL_CLK:
|
case RT_I2C_DEV_CTRL_CLK:
|
||||||
I2C_MasterSetup(i2c_id, arg);
|
I2C_MasterSetup(i2c_id, *(rt_uint32_t *)args);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -RT_EIO;
|
return -RT_EIO;
|
||||||
|
|
|
@ -90,11 +90,11 @@ rt_size_t rt_i2c_master_xfer(struct rt_i2c_bus_device *bus,
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_err_t rt_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
rt_err_t rt_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t cmd,
|
int cmd,
|
||||||
rt_uint32_t arg)
|
void *args)
|
||||||
{
|
{
|
||||||
struct am_i2c_bus * am_i2c_bus = (struct am_i2c_bus *)bus;
|
struct am_i2c_bus * am_i2c_bus = (struct am_i2c_bus *)bus;
|
||||||
//rt_uint32_t ctrl_arg = (rt_uint32_t)(arg);
|
//rt_uint32_t ctrl_arg = *(rt_uint32_t *)args;
|
||||||
|
|
||||||
RT_ASSERT(bus != RT_NULL);
|
RT_ASSERT(bus != RT_NULL);
|
||||||
am_i2c_bus = (struct am_i2c_bus *)bus->parent.user_data;
|
am_i2c_bus = (struct am_i2c_bus *)bus->parent.user_data;
|
||||||
|
|
|
@ -141,8 +141,8 @@ static rt_ssize_t imxrt_i2c_slv_xfer(struct rt_i2c_bus_device *bus,
|
||||||
struct rt_i2c_msg msgs[],
|
struct rt_i2c_msg msgs[],
|
||||||
rt_uint32_t num);
|
rt_uint32_t num);
|
||||||
static rt_err_t imxrt_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t imxrt_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t,
|
int cmd,
|
||||||
rt_uint32_t);
|
void *args);
|
||||||
|
|
||||||
static const struct rt_i2c_bus_device_ops imxrt_i2c_ops =
|
static const struct rt_i2c_bus_device_ops imxrt_i2c_ops =
|
||||||
{
|
{
|
||||||
|
@ -372,8 +372,8 @@ static rt_ssize_t imxrt_i2c_slv_xfer(struct rt_i2c_bus_device *bus,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static rt_err_t imxrt_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t imxrt_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t cmd,
|
int cmd,
|
||||||
rt_uint32_t arg)
|
void *args)
|
||||||
{
|
{
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,8 +57,8 @@ rt_size_t rt_i2c_master_xfer(struct rt_i2c_bus_device *bus,
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_err_t rt_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
rt_err_t rt_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t cmd,
|
int cmd,
|
||||||
rt_uint32_t arg)
|
void *args)
|
||||||
{
|
{
|
||||||
struct ls1c_i2c_bus * i2c_bus = (struct ls1c_i2c_bus *)bus;
|
struct ls1c_i2c_bus * i2c_bus = (struct ls1c_i2c_bus *)bus;
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ static rt_ssize_t slave_xfer(struct rt_i2c_bus_device *bus, struct rt_i2c_msg ms
|
||||||
return -RT_ENOSYS;
|
return -RT_ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static rt_err_t i2c_bus_control(struct rt_i2c_bus_device *bus, rt_uint32_t cmd, rt_uint32_t arg)
|
static rt_err_t i2c_bus_control(struct rt_i2c_bus_device *bus, int cmd, void *args)
|
||||||
{
|
{
|
||||||
return -RT_EINVAL;
|
return -RT_EINVAL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ static rt_ssize_t sam_i2c_slave_xfer(struct rt_i2c_bus_device *bus,
|
||||||
struct rt_i2c_msg msgs[],
|
struct rt_i2c_msg msgs[],
|
||||||
rt_uint32_t num);
|
rt_uint32_t num);
|
||||||
static rt_err_t sam_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t sam_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t, rt_uint32_t);
|
int cmd, void *args);
|
||||||
|
|
||||||
static const struct rt_i2c_bus_device_ops sam_i2c_ops =
|
static const struct rt_i2c_bus_device_ops sam_i2c_ops =
|
||||||
{
|
{
|
||||||
|
@ -90,8 +90,8 @@ static rt_ssize_t sam_i2c_slave_xfer(struct rt_i2c_bus_device *bus,
|
||||||
}
|
}
|
||||||
|
|
||||||
static rt_err_t sam_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t sam_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t cmd,
|
int cmd,
|
||||||
rt_uint32_t arg)
|
void *args)
|
||||||
{
|
{
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
struct sam_i2c_bus *sam_i2c = (struct sam_i2c_bus *)bus;
|
struct sam_i2c_bus *sam_i2c = (struct sam_i2c_bus *)bus;
|
||||||
|
@ -101,7 +101,7 @@ static rt_err_t sam_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
switch (cmd)
|
switch (cmd)
|
||||||
{
|
{
|
||||||
case RT_I2C_DEV_CTRL_CLK:
|
case RT_I2C_DEV_CTRL_CLK:
|
||||||
i2c_m_sync_set_baudrate(sam_i2c->i2c_desc, 0, arg);
|
i2c_m_sync_set_baudrate(sam_i2c->i2c_desc, 0, *(rt_uint32_t *)args);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -RT_EIO;
|
return -RT_EIO;
|
||||||
|
|
|
@ -73,8 +73,8 @@ static rt_ssize_t nu_i2c_mst_xfer(struct rt_i2c_bus_device *bus,
|
||||||
struct rt_i2c_msg msgs[],
|
struct rt_i2c_msg msgs[],
|
||||||
rt_uint32_t num);
|
rt_uint32_t num);
|
||||||
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t u32Cmd,
|
int cmd,
|
||||||
rt_uint32_t u32Value);
|
void *args);
|
||||||
|
|
||||||
static const struct rt_i2c_bus_device_ops nu_i2c_ops =
|
static const struct rt_i2c_bus_device_ops nu_i2c_ops =
|
||||||
{
|
{
|
||||||
|
@ -83,17 +83,17 @@ static const struct rt_i2c_bus_device_ops nu_i2c_ops =
|
||||||
.i2c_bus_control = nu_i2c_bus_control
|
.i2c_bus_control = nu_i2c_bus_control
|
||||||
};
|
};
|
||||||
|
|
||||||
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus, rt_uint32_t u32Cmd, rt_uint32_t u32Value)
|
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus, int cmd, void *args)
|
||||||
{
|
{
|
||||||
nu_i2c_bus_t *nu_i2c;
|
nu_i2c_bus_t *nu_i2c;
|
||||||
|
|
||||||
RT_ASSERT(bus != RT_NULL);
|
RT_ASSERT(bus != RT_NULL);
|
||||||
nu_i2c = (nu_i2c_bus_t *) bus;
|
nu_i2c = (nu_i2c_bus_t *) bus;
|
||||||
|
|
||||||
switch (u32Cmd)
|
switch (cmd)
|
||||||
{
|
{
|
||||||
case RT_I2C_DEV_CTRL_CLK:
|
case RT_I2C_DEV_CTRL_CLK:
|
||||||
I2C_SetBusClockFreq(nu_i2c->I2C, u32Value);
|
I2C_SetBusClockFreq(nu_i2c->I2C, *(rt_uint32_t *)args);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -RT_EIO;
|
return -RT_EIO;
|
||||||
|
|
|
@ -82,8 +82,8 @@ static rt_ssize_t nu_i2c_mst_xfer(struct rt_i2c_bus_device *bus,
|
||||||
struct rt_i2c_msg msgs[],
|
struct rt_i2c_msg msgs[],
|
||||||
rt_uint32_t num);
|
rt_uint32_t num);
|
||||||
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t u32Cmd,
|
int cmd,
|
||||||
rt_uint32_t u32Value);
|
void *args);
|
||||||
|
|
||||||
static const struct rt_i2c_bus_device_ops nu_i2c_ops =
|
static const struct rt_i2c_bus_device_ops nu_i2c_ops =
|
||||||
{
|
{
|
||||||
|
@ -92,17 +92,17 @@ static const struct rt_i2c_bus_device_ops nu_i2c_ops =
|
||||||
.i2c_bus_control = nu_i2c_bus_control
|
.i2c_bus_control = nu_i2c_bus_control
|
||||||
};
|
};
|
||||||
|
|
||||||
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus, rt_uint32_t u32Cmd, rt_uint32_t u32Value)
|
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus, int cmd, void *args)
|
||||||
{
|
{
|
||||||
nu_i2c_bus_t *nu_i2c;
|
nu_i2c_bus_t *nu_i2c;
|
||||||
|
|
||||||
RT_ASSERT(bus != RT_NULL);
|
RT_ASSERT(bus != RT_NULL);
|
||||||
nu_i2c = (nu_i2c_bus_t *) bus;
|
nu_i2c = (nu_i2c_bus_t *) bus;
|
||||||
|
|
||||||
switch (u32Cmd)
|
switch (cmd)
|
||||||
{
|
{
|
||||||
case RT_I2C_DEV_CTRL_CLK:
|
case RT_I2C_DEV_CTRL_CLK:
|
||||||
I2C_SetBusClockFreq(nu_i2c->I2C, u32Value);
|
I2C_SetBusClockFreq(nu_i2c->I2C, *(rt_uint32_t *)args);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -RT_EIO;
|
return -RT_EIO;
|
||||||
|
|
|
@ -94,8 +94,8 @@ static rt_ssize_t nu_i2c_mst_xfer(struct rt_i2c_bus_device *bus,
|
||||||
struct rt_i2c_msg msgs[],
|
struct rt_i2c_msg msgs[],
|
||||||
rt_uint32_t num);
|
rt_uint32_t num);
|
||||||
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t u32Cmd,
|
int cmd,
|
||||||
rt_uint32_t u32Value);
|
void *args);
|
||||||
|
|
||||||
static const struct rt_i2c_bus_device_ops nu_i2c_ops =
|
static const struct rt_i2c_bus_device_ops nu_i2c_ops =
|
||||||
{
|
{
|
||||||
|
@ -104,17 +104,17 @@ static const struct rt_i2c_bus_device_ops nu_i2c_ops =
|
||||||
.i2c_bus_control = nu_i2c_bus_control
|
.i2c_bus_control = nu_i2c_bus_control
|
||||||
};
|
};
|
||||||
|
|
||||||
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus, rt_uint32_t u32Cmd, rt_uint32_t u32Value)
|
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus, int cmd, void *args)
|
||||||
{
|
{
|
||||||
nu_i2c_bus_t nu_i2c;
|
nu_i2c_bus_t nu_i2c;
|
||||||
|
|
||||||
RT_ASSERT(bus);
|
RT_ASSERT(bus);
|
||||||
nu_i2c = (nu_i2c_bus_t) bus;
|
nu_i2c = (nu_i2c_bus_t) bus;
|
||||||
|
|
||||||
switch (u32Cmd)
|
switch (cmd)
|
||||||
{
|
{
|
||||||
case RT_I2C_DEV_CTRL_CLK:
|
case RT_I2C_DEV_CTRL_CLK:
|
||||||
I2C_SetBusClockFreq(nu_i2c->I2C, u32Value);
|
I2C_SetBusClockFreq(nu_i2c->I2C, *(rt_uint32_t *)args);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -RT_EIO;
|
return -RT_EIO;
|
||||||
|
|
|
@ -61,8 +61,8 @@ static rt_ssize_t nu_ui2c_mst_xfer(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t num);
|
rt_uint32_t num);
|
||||||
|
|
||||||
static rt_err_t nu_ui2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t nu_ui2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t u32Cmd,
|
int cmd,
|
||||||
rt_uint32_t u32Value);
|
void *args);
|
||||||
|
|
||||||
static const struct rt_i2c_bus_device_ops nu_ui2c_ops =
|
static const struct rt_i2c_bus_device_ops nu_ui2c_ops =
|
||||||
{
|
{
|
||||||
|
@ -71,17 +71,17 @@ static const struct rt_i2c_bus_device_ops nu_ui2c_ops =
|
||||||
.i2c_bus_control = nu_ui2c_bus_control,
|
.i2c_bus_control = nu_ui2c_bus_control,
|
||||||
};
|
};
|
||||||
|
|
||||||
static rt_err_t nu_ui2c_bus_control(struct rt_i2c_bus_device *bus, rt_uint32_t u32Cmd, rt_uint32_t u32Value)
|
static rt_err_t nu_ui2c_bus_control(struct rt_i2c_bus_device *bus, int cmd, void *args)
|
||||||
{
|
{
|
||||||
nu_ui2c_bus_t nu_ui2c;
|
nu_ui2c_bus_t nu_ui2c;
|
||||||
|
|
||||||
RT_ASSERT(bus);
|
RT_ASSERT(bus);
|
||||||
nu_ui2c = (nu_ui2c_bus_t) bus;
|
nu_ui2c = (nu_ui2c_bus_t) bus;
|
||||||
|
|
||||||
switch (u32Cmd)
|
switch (cmd)
|
||||||
{
|
{
|
||||||
case RT_I2C_DEV_CTRL_CLK:
|
case RT_I2C_DEV_CTRL_CLK:
|
||||||
UI2C_SetBusClockFreq(nu_ui2c->UI2C, u32Value);
|
UI2C_SetBusClockFreq(nu_ui2c->UI2C, *(rt_uint32_t *)args);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -RT_EIO;
|
return -RT_EIO;
|
||||||
|
|
|
@ -82,8 +82,8 @@ static rt_ssize_t nu_i2c_mst_xfer(struct rt_i2c_bus_device *bus,
|
||||||
struct rt_i2c_msg msgs[],
|
struct rt_i2c_msg msgs[],
|
||||||
rt_uint32_t num);
|
rt_uint32_t num);
|
||||||
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t u32Cmd,
|
int cmd,
|
||||||
rt_uint32_t u32Value);
|
void *args);
|
||||||
|
|
||||||
static const struct rt_i2c_bus_device_ops nu_i2c_ops =
|
static const struct rt_i2c_bus_device_ops nu_i2c_ops =
|
||||||
{
|
{
|
||||||
|
@ -92,17 +92,17 @@ static const struct rt_i2c_bus_device_ops nu_i2c_ops =
|
||||||
.i2c_bus_control = nu_i2c_bus_control
|
.i2c_bus_control = nu_i2c_bus_control
|
||||||
};
|
};
|
||||||
|
|
||||||
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus, rt_uint32_t u32Cmd, rt_uint32_t u32Value)
|
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus, int cmd, void *args)
|
||||||
{
|
{
|
||||||
nu_i2c_bus_t *nu_i2c;
|
nu_i2c_bus_t *nu_i2c;
|
||||||
|
|
||||||
RT_ASSERT(bus != RT_NULL);
|
RT_ASSERT(bus != RT_NULL);
|
||||||
nu_i2c = (nu_i2c_bus_t *) bus;
|
nu_i2c = (nu_i2c_bus_t *) bus;
|
||||||
|
|
||||||
switch (u32Cmd)
|
switch (cmd)
|
||||||
{
|
{
|
||||||
case RT_I2C_DEV_CTRL_CLK:
|
case RT_I2C_DEV_CTRL_CLK:
|
||||||
I2C_SetBusClockFreq(nu_i2c->I2C, u32Value);
|
I2C_SetBusClockFreq(nu_i2c->I2C, *(rt_uint32_t *)args);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -RT_EIO;
|
return -RT_EIO;
|
||||||
|
|
|
@ -103,8 +103,8 @@ static rt_ssize_t nu_i2c_mst_xfer(struct rt_i2c_bus_device *bus,
|
||||||
struct rt_i2c_msg msgs[],
|
struct rt_i2c_msg msgs[],
|
||||||
rt_uint32_t num);
|
rt_uint32_t num);
|
||||||
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t u32Cmd,
|
int cmd,
|
||||||
rt_uint32_t u32Value);
|
void *args);
|
||||||
|
|
||||||
static const struct rt_i2c_bus_device_ops nu_i2c_ops =
|
static const struct rt_i2c_bus_device_ops nu_i2c_ops =
|
||||||
{
|
{
|
||||||
|
@ -113,17 +113,17 @@ static const struct rt_i2c_bus_device_ops nu_i2c_ops =
|
||||||
.i2c_bus_control = nu_i2c_bus_control
|
.i2c_bus_control = nu_i2c_bus_control
|
||||||
};
|
};
|
||||||
|
|
||||||
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus, rt_uint32_t u32Cmd, rt_uint32_t u32Value)
|
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus, int u32Cmd, void *args)
|
||||||
{
|
{
|
||||||
nu_i2c_bus_t *nu_i2c;
|
nu_i2c_bus_t *nu_i2c;
|
||||||
|
|
||||||
RT_ASSERT(bus != RT_NULL);
|
RT_ASSERT(bus != RT_NULL);
|
||||||
nu_i2c = (nu_i2c_bus_t *) bus;
|
nu_i2c = (nu_i2c_bus_t *) bus;
|
||||||
|
|
||||||
switch (u32Cmd)
|
switch (cmd)
|
||||||
{
|
{
|
||||||
case RT_I2C_DEV_CTRL_CLK:
|
case RT_I2C_DEV_CTRL_CLK:
|
||||||
I2C_SetBusClockFreq(nu_i2c->I2C, u32Value);
|
I2C_SetBusClockFreq(nu_i2c->I2C, *(rt_uint32_t *)args);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -RT_EIO;
|
return -RT_EIO;
|
||||||
|
|
|
@ -506,7 +506,7 @@ static rt_ssize_t nu_i2c_mst_xfer(struct rt_i2c_bus_device *bus,
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus, rt_uint32_t u32Cmd, rt_uint32_t u32Value)
|
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus, int cmd, void *args)
|
||||||
{
|
{
|
||||||
nu_i2c_bus_t psNuI2cBus;
|
nu_i2c_bus_t psNuI2cBus;
|
||||||
nu_i2c_dev_t psNuI2cDev;
|
nu_i2c_dev_t psNuI2cDev;
|
||||||
|
@ -516,10 +516,10 @@ static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus, rt_uint32_t u3
|
||||||
psNuI2cBus = (nu_i2c_bus_t) bus;
|
psNuI2cBus = (nu_i2c_bus_t) bus;
|
||||||
psNuI2cDev = &psNuI2cBus->dev;
|
psNuI2cDev = &psNuI2cBus->dev;
|
||||||
|
|
||||||
switch (u32Cmd)
|
switch (cmd)
|
||||||
{
|
{
|
||||||
case RT_I2C_DEV_CTRL_CLK:
|
case RT_I2C_DEV_CTRL_CLK:
|
||||||
nu_i2c_set_speed(psNuI2cDev, (int32_t)u32Value);
|
nu_i2c_set_speed(psNuI2cDev, *(int32_t *)args);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -RT_EIO;
|
return -RT_EIO;
|
||||||
|
|
|
@ -101,8 +101,8 @@ static rt_ssize_t nu_i2c_mst_xfer(struct rt_i2c_bus_device *bus,
|
||||||
struct rt_i2c_msg msgs[],
|
struct rt_i2c_msg msgs[],
|
||||||
rt_uint32_t num);
|
rt_uint32_t num);
|
||||||
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t u32Cmd,
|
int cmd,
|
||||||
rt_uint32_t u32Value);
|
void *args);
|
||||||
|
|
||||||
static const struct rt_i2c_bus_device_ops nu_i2c_ops =
|
static const struct rt_i2c_bus_device_ops nu_i2c_ops =
|
||||||
{
|
{
|
||||||
|
@ -111,17 +111,17 @@ static const struct rt_i2c_bus_device_ops nu_i2c_ops =
|
||||||
.i2c_bus_control = nu_i2c_bus_control
|
.i2c_bus_control = nu_i2c_bus_control
|
||||||
};
|
};
|
||||||
|
|
||||||
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus, rt_uint32_t u32Cmd, rt_uint32_t u32Value)
|
static rt_err_t nu_i2c_bus_control(struct rt_i2c_bus_device *bus, int cmd, void *args)
|
||||||
{
|
{
|
||||||
nu_i2c_bus_t *nu_i2c;
|
nu_i2c_bus_t *nu_i2c;
|
||||||
|
|
||||||
RT_ASSERT(bus != RT_NULL);
|
RT_ASSERT(bus != RT_NULL);
|
||||||
nu_i2c = (nu_i2c_bus_t *) bus;
|
nu_i2c = (nu_i2c_bus_t *) bus;
|
||||||
|
|
||||||
switch (u32Cmd)
|
switch (cmd)
|
||||||
{
|
{
|
||||||
case RT_I2C_DEV_CTRL_CLK:
|
case RT_I2C_DEV_CTRL_CLK:
|
||||||
I2C_SetBusClockFreq(nu_i2c->I2C, u32Value);
|
I2C_SetBusClockFreq(nu_i2c->I2C, *(rt_uint32_t *)args);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -RT_EIO;
|
return -RT_EIO;
|
||||||
|
|
|
@ -110,8 +110,8 @@ static rt_ssize_t raspi_i2c_slv_xfer(struct rt_i2c_bus_device *bus,
|
||||||
struct rt_i2c_msg msgs[],
|
struct rt_i2c_msg msgs[],
|
||||||
rt_uint32_t num);
|
rt_uint32_t num);
|
||||||
static rt_err_t raspi_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t raspi_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t,
|
int cmd,
|
||||||
rt_uint32_t);
|
void *args);
|
||||||
|
|
||||||
static rt_uint32_t i2c_byte_wait_us = 0;
|
static rt_uint32_t i2c_byte_wait_us = 0;
|
||||||
static rt_ssize_t raspi_i2c_mst_xfer(struct rt_i2c_bus_device *bus,
|
static rt_ssize_t raspi_i2c_mst_xfer(struct rt_i2c_bus_device *bus,
|
||||||
|
@ -148,8 +148,8 @@ static rt_ssize_t raspi_i2c_slv_xfer(struct rt_i2c_bus_device *bus,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static rt_err_t raspi_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t raspi_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t cmd,
|
int cmd,
|
||||||
rt_uint32_t arg)
|
void *args)
|
||||||
{
|
{
|
||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,8 +115,8 @@ static rt_ssize_t raspi_i2c_slv_xfer(struct rt_i2c_bus_device *bus,
|
||||||
struct rt_i2c_msg msgs[],
|
struct rt_i2c_msg msgs[],
|
||||||
rt_uint32_t num);
|
rt_uint32_t num);
|
||||||
static rt_err_t raspi_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t raspi_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t,
|
int cmd,
|
||||||
rt_uint32_t);
|
void *args);
|
||||||
|
|
||||||
static rt_uint32_t i2c_byte_wait_us = 0;
|
static rt_uint32_t i2c_byte_wait_us = 0;
|
||||||
static rt_ssize_t raspi_i2c_mst_xfer(struct rt_i2c_bus_device *bus,
|
static rt_ssize_t raspi_i2c_mst_xfer(struct rt_i2c_bus_device *bus,
|
||||||
|
@ -153,8 +153,8 @@ static rt_ssize_t raspi_i2c_slv_xfer(struct rt_i2c_bus_device *bus,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static rt_err_t raspi_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t raspi_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t cmd,
|
int cmd,
|
||||||
rt_uint32_t arg)
|
void *args)
|
||||||
{
|
{
|
||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -162,8 +162,8 @@ static rt_ssize_t raspi_i2c_slv_xfer(struct rt_i2c_bus_device *bus,
|
||||||
}
|
}
|
||||||
|
|
||||||
static rt_err_t raspi_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t raspi_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t cmd,
|
int cmd,
|
||||||
rt_uint32_t arg)
|
void *args)
|
||||||
{
|
{
|
||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,8 +37,8 @@ static rt_ssize_t wm_i2c_slv_xfer(struct rt_i2c_bus_device *bus,
|
||||||
struct rt_i2c_msg msgs[],
|
struct rt_i2c_msg msgs[],
|
||||||
rt_uint32_t num);
|
rt_uint32_t num);
|
||||||
static rt_err_t wm_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t wm_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t,
|
int cmd,
|
||||||
rt_uint32_t);
|
void *args);
|
||||||
|
|
||||||
static const struct rt_i2c_bus_device_ops wm_i2c_ops =
|
static const struct rt_i2c_bus_device_ops wm_i2c_ops =
|
||||||
{
|
{
|
||||||
|
@ -132,8 +132,8 @@ static rt_ssize_t wm_i2c_slv_xfer(struct rt_i2c_bus_device *bus,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static rt_err_t wm_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
static rt_err_t wm_i2c_bus_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t cmd,
|
int cmd,
|
||||||
rt_uint32_t arg)
|
void *args)
|
||||||
{
|
{
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,14 +89,14 @@ rt_ssize_t rt_i2c_transfer(struct rt_i2c_bus_device *bus,
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_err_t rt_i2c_control(struct rt_i2c_bus_device *bus,
|
rt_err_t rt_i2c_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t cmd,
|
int cmd,
|
||||||
rt_uint32_t arg)
|
void *args)
|
||||||
{
|
{
|
||||||
rt_err_t ret;
|
rt_err_t ret;
|
||||||
|
|
||||||
if(bus->ops->i2c_bus_control)
|
if(bus->ops->i2c_bus_control)
|
||||||
{
|
{
|
||||||
ret = bus->ops->i2c_bus_control(bus, cmd, arg);
|
ret = bus->ops->i2c_bus_control(bus, cmd, args);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -67,7 +67,6 @@ static rt_err_t i2c_bus_device_control(rt_device_t dev,
|
||||||
rt_err_t ret;
|
rt_err_t ret;
|
||||||
struct rt_i2c_priv_data *priv_data;
|
struct rt_i2c_priv_data *priv_data;
|
||||||
struct rt_i2c_bus_device *bus = (struct rt_i2c_bus_device *)dev->user_data;
|
struct rt_i2c_bus_device *bus = (struct rt_i2c_bus_device *)dev->user_data;
|
||||||
rt_uint32_t bus_clock;
|
|
||||||
|
|
||||||
RT_ASSERT(bus != RT_NULL);
|
RT_ASSERT(bus != RT_NULL);
|
||||||
|
|
||||||
|
@ -88,16 +87,8 @@ static rt_err_t i2c_bus_device_control(rt_device_t dev,
|
||||||
return -RT_EIO;
|
return -RT_EIO;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RT_I2C_DEV_CTRL_CLK:
|
|
||||||
bus_clock = *(rt_uint32_t *)args;
|
|
||||||
ret = rt_i2c_control(bus, cmd, bus_clock);
|
|
||||||
if (ret < 0)
|
|
||||||
{
|
|
||||||
return -RT_EIO;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
return rt_i2c_control(bus, cmd, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
return RT_EOK;
|
return RT_EOK;
|
||||||
|
|
|
@ -45,8 +45,8 @@ struct rt_i2c_bus_device_ops
|
||||||
struct rt_i2c_msg msgs[],
|
struct rt_i2c_msg msgs[],
|
||||||
rt_uint32_t num);
|
rt_uint32_t num);
|
||||||
rt_err_t (*i2c_bus_control)(struct rt_i2c_bus_device *bus,
|
rt_err_t (*i2c_bus_control)(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t,
|
int cmd,
|
||||||
rt_uint32_t);
|
void *args);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*for i2c bus driver*/
|
/*for i2c bus driver*/
|
||||||
|
@ -74,8 +74,8 @@ rt_ssize_t rt_i2c_transfer(struct rt_i2c_bus_device *bus,
|
||||||
struct rt_i2c_msg msgs[],
|
struct rt_i2c_msg msgs[],
|
||||||
rt_uint32_t num);
|
rt_uint32_t num);
|
||||||
rt_err_t rt_i2c_control(struct rt_i2c_bus_device *bus,
|
rt_err_t rt_i2c_control(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint32_t cmd,
|
int cmd,
|
||||||
rt_uint32_t arg);
|
void *args);
|
||||||
rt_ssize_t rt_i2c_master_send(struct rt_i2c_bus_device *bus,
|
rt_ssize_t rt_i2c_master_send(struct rt_i2c_bus_device *bus,
|
||||||
rt_uint16_t addr,
|
rt_uint16_t addr,
|
||||||
rt_uint16_t flags,
|
rt_uint16_t flags,
|
||||||
|
|
|
@ -23,6 +23,10 @@ extern "C" {
|
||||||
#define RT_I2C_DEV_CTRL_TIMEOUT (RT_DEVICE_CTRL_BASE(I2CBUS) + 0x03)
|
#define RT_I2C_DEV_CTRL_TIMEOUT (RT_DEVICE_CTRL_BASE(I2CBUS) + 0x03)
|
||||||
#define RT_I2C_DEV_CTRL_RW (RT_DEVICE_CTRL_BASE(I2CBUS) + 0x04)
|
#define RT_I2C_DEV_CTRL_RW (RT_DEVICE_CTRL_BASE(I2CBUS) + 0x04)
|
||||||
#define RT_I2C_DEV_CTRL_CLK (RT_DEVICE_CTRL_BASE(I2CBUS) + 0x05)
|
#define RT_I2C_DEV_CTRL_CLK (RT_DEVICE_CTRL_BASE(I2CBUS) + 0x05)
|
||||||
|
#define RT_I2C_DEV_CTRL_UNLOCK (RT_DEVICE_CTRL_BASE(I2CBUS) + 0x06)
|
||||||
|
#define RT_I2C_DEV_CTRL_GET_STATE (RT_DEVICE_CTRL_BASE(I2CBUS) + 0x07)
|
||||||
|
#define RT_I2C_DEV_CTRL_GET_MODE (RT_DEVICE_CTRL_BASE(I2CBUS) + 0x08)
|
||||||
|
#define RT_I2C_DEV_CTRL_GET_ERROR (RT_DEVICE_CTRL_BASE(I2CBUS) + 0x09)
|
||||||
|
|
||||||
struct rt_i2c_priv_data
|
struct rt_i2c_priv_data
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue