Merge pull request #4631 from rtthread-bot/rtt_bot

[update] RT-Thread Robot automatic submission
This commit is contained in:
Bernard Xiong 2021-04-25 20:06:24 +08:00 committed by GitHub
commit 75e13c6866
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 37 additions and 0 deletions

View File

@ -6,6 +6,7 @@
* Change Logs: * Change Logs:
* Date Author Notes * Date Author Notes
* 2012-04-25 weety first version * 2012-04-25 weety first version
* 2021-04-20 RiceChen added support for bus control api
*/ */
#include <rtdevice.h> #include <rtdevice.h>
@ -81,6 +82,26 @@ rt_size_t rt_i2c_transfer(struct rt_i2c_bus_device *bus,
} }
} }
rt_err_t rt_i2c_control(struct rt_i2c_bus_device *bus,
rt_uint32_t cmd,
rt_uint32_t arg)
{
rt_err_t ret;
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 0;
}
}
rt_size_t rt_i2c_master_send(struct rt_i2c_bus_device *bus, rt_size_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,

View File

@ -7,6 +7,7 @@
* Date Author Notes * Date Author Notes
* 2012-04-25 weety first version * 2012-04-25 weety first version
* 2014-08-03 bernard fix some compiling warning * 2014-08-03 bernard fix some compiling warning
* 2021-04-20 RiceChen added support for bus clock control
*/ */
#include <rtdevice.h> #include <rtdevice.h>
@ -66,6 +67,7 @@ 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);
@ -89,6 +91,14 @@ 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; break;
} }

View File

@ -6,6 +6,7 @@
* Change Logs: * Change Logs:
* Date Author Notes * Date Author Notes
* 2012-04-25 weety first version * 2012-04-25 weety first version
* 2021-04-20 RiceChen added support for bus control api
*/ */
#ifndef __I2C_H__ #ifndef __I2C_H__
@ -74,6 +75,9 @@ struct rt_i2c_bus_device *rt_i2c_bus_device_find(const char *bus_name);
rt_size_t rt_i2c_transfer(struct rt_i2c_bus_device *bus, rt_size_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_uint32_t cmd,
rt_uint32_t arg);
rt_size_t rt_i2c_master_send(struct rt_i2c_bus_device *bus, rt_size_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,

View File

@ -6,6 +6,7 @@
* Change Logs: * Change Logs:
* Date Author Notes * Date Author Notes
* 2012-04-25 weety first version * 2012-04-25 weety first version
* 2021-04-20 RiceChen added bus clock command
*/ */
#ifndef __I2C_DEV_H__ #ifndef __I2C_DEV_H__
@ -21,6 +22,7 @@ extern "C" {
#define RT_I2C_DEV_CTRL_ADDR 0x21 #define RT_I2C_DEV_CTRL_ADDR 0x21
#define RT_I2C_DEV_CTRL_TIMEOUT 0x22 #define RT_I2C_DEV_CTRL_TIMEOUT 0x22
#define RT_I2C_DEV_CTRL_RW 0x23 #define RT_I2C_DEV_CTRL_RW 0x23
#define RT_I2C_DEV_CTRL_CLK 0x24
struct rt_i2c_priv_data struct rt_i2c_priv_data
{ {