1 /* 2 * Copyright (c) 2006-2022, RT-Thread Development Team 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Change Logs: 7 * Date Author Notes 8 * 2022-11-26 GuEe-GUI first version 9 */ 10 11 #ifndef __DEV_I2C_DM_H__ 12 #define __DEV_I2C_DM_H__ 13 14 #include <rthw.h> 15 #include <rtthread.h> 16 #include <drivers/core/bus.h> 17 18 /* I2C Frequency Modes */ 19 #define I2C_MAX_STANDARD_MODE_FREQ 100000 20 #define I2C_MAX_FAST_MODE_FREQ 400000 21 #define I2C_MAX_FAST_MODE_PLUS_FREQ 1000000 22 #define I2C_MAX_TURBO_MODE_FREQ 1400000 23 #define I2C_MAX_HIGH_SPEED_MODE_FREQ 3400000 24 #define I2C_MAX_ULTRA_FAST_MODE_FREQ 5000000 25 26 struct i2c_timings 27 { 28 rt_uint32_t bus_freq_hz; /* the bus frequency in Hz */ 29 rt_uint32_t scl_rise_ns; /* time SCL signal takes to rise in ns; t(r) in the I2C specification */ 30 rt_uint32_t scl_fall_ns; /* time SCL signal takes to fall in ns; t(f) in the I2C specification */ 31 rt_uint32_t scl_int_delay_ns; /* time IP core additionally needs to setup SCL in ns */ 32 rt_uint32_t sda_fall_ns; /* time SDA signal takes to fall in ns; t(f) in the I2C specification */ 33 rt_uint32_t sda_hold_ns; /* time IP core additionally needs to hold SDA in ns */ 34 rt_uint32_t digital_filter_width_ns; /* width in ns of spikes on i2c lines that the IP core digital filter can filter out */ 35 rt_uint32_t analog_filter_cutoff_freq_hz; /* threshold frequency for the low pass IP core analog filter */ 36 }; 37 38 #ifdef RT_USING_OFW 39 rt_err_t i2c_timings_ofw_parse(struct rt_ofw_node *dev_np, struct i2c_timings *timings, 40 rt_bool_t use_defaults); 41 #else i2c_timings_ofw_parse(struct rt_ofw_node * dev_np,struct i2c_timings * timings,rt_bool_t use_defaults)42rt_inline rt_err_t i2c_timings_ofw_parse(struct rt_ofw_node *dev_np, struct i2c_timings *timings, 43 rt_bool_t use_defaults) 44 { 45 return RT_EOK; 46 } 47 #endif /* RT_USING_OFW */ 48 49 void i2c_bus_scan_clients(struct rt_i2c_bus_device *bus); 50 51 #endif /* __DEV_I2C_DM_H__ */ 52