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