1 /*
2  * Copyright (C) 2015-2021 Alibaba Group Holding Limited
3  */
4 
5 #ifndef _IO_I2C_H_
6 #define _IO_I2C_H_
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 /** @defgroup i2c_device_api
13  *  @ingroup driver_api
14  * @{
15  */
16 
17  /* I2C VFS IOCTL CMD宏定义 */
18 #define IOC_I2C_BASE 'I'
19 #define IOC_I2C_SET_FREQ IOC_I2C_BASE + 1    /**< 设定I2C频率cmd宏定义 */
20 #define IOC_I2C_SET_CONFIG IOC_I2C_BASE + 2  /**< 设定除频率外其它I2C参数cmd宏定义 */
21 #define IOC_I2C_MASTER_RX IOC_I2C_BASE + 3   /**< 用master模式发起I2C接收操作cmd宏定义 */
22 #define IOC_I2C_MASTER_TX IOC_I2C_BASE + 4   /**< 用master模式发起I2C发送操作cmd宏定义 */
23 #define IOC_I2C_SLAVE_RX IOC_I2C_BASE + 5    /**< 用slave模式发起I2C接收操作cmd宏定义 - 暂不支持 */
24 #define IOC_I2C_SLAVE_TX IOC_I2C_BASE + 6    /**< 用slave模式发起I2C发送操作cmd宏定义 - 暂不支持 */
25 #define IOC_I2C_MEM_RX IOC_I2C_BASE + 7      /**< 用master模式发起I2C读取寄存器操作cmd宏定义 */
26 #define IOC_I2C_MEM_TX IOC_I2C_BASE + 8      /**< 用master模式发起I2C写入寄存器操作cmd宏定义 */
27 
28  /* 设定i2c参数所用结构体 */
29 typedef union {
30     struct {
31         unsigned int addr_width:2;  /**< 0:7-bit地址模式;1:10-bit地址模式 */
32         unsigned int role:1;        /**< 1:i2c主设备模式;0:i2c从设备模式,暂不支持从设备模式设定 */
33         unsigned int addr:16;       /**< i2c从设备地址 */
34     } c;
35     uint32_t freq;                  /**< i2c clk引脚时钟频率 */
36 } io_i2c_control_u;
37 
38  /* i2c数据收发操作所用结构体 */
39 typedef struct {
40     unsigned short addr;            /**< 此次读写操作对应的i2c送设备地址 */
41     unsigned short length;          /**< 此次读写操作要读写数据的长度 */
42     unsigned char *data;            /**< 写操作:指向要发送数据的首地址;读操作:指向接收数据存放内存块首地址 */
43     unsigned short maddr;           /**< 此次内存操作要读写的memory地址,只有在ioctl cmd id为IOC_I2C_MEM_TX/IOC_I2C_MEM_RX时有效 */
44     unsigned short mlength;         /**< 此次内存操作要读写的memory的长度,只有在ioctl cmd id为IOC_I2C_MEM_TX/IOC_I2C_MEM_RX时有效 */
45     unsigned int timeout;           /**< 此次操作的超时时间,单位:ms */
46 } io_i2c_data_t;
47 
48 /**
49  * @}
50  */
51 
52 #ifdef __cplusplus
53 }
54 #endif
55 #endif //_IO_I2C_H_
56