1 /*
2  * Copyright (c) 2006-2025, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  */
7 
8 #ifndef __DRV_HW_I2C_H__
9 #define __DRV_HW_I2C_H__
10 
11 #include <rtthread.h>
12 #include <rthw.h>
13 #include <rtdevice.h>
14 #include <board.h>
15 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19 
20 /* I2C hardware configuration */
21 struct gd32_i2c_config
22 {
23     rt_uint32_t i2c_periph;     /* I2C peripheral base address */
24     rcu_periph_enum periph_clk; /* I2C peripheral clock */
25 
26     rcu_periph_enum scl_clk;    /* SCL pin clock */
27     rt_uint32_t scl_port;       /* SCL pin port */
28     rt_uint32_t scl_pin;        /* SCL pin */
29     rt_uint32_t scl_af;         /* SCL pin alternate function */
30 
31     rcu_periph_enum sda_clk;    /* SDA pin clock */
32     rt_uint32_t sda_port;       /* SDA pin port */
33     rt_uint32_t sda_pin;        /* SDA pin */
34     rt_uint32_t sda_af;         /* SDA pin alternate function */
35 
36     IRQn_Type ev_irq_type;      /* Event IRQn */
37     IRQn_Type er_irq_type;      /* Error IRQn */
38 
39     rt_uint32_t i2c_clock_hz;        /* I2C clock speed in Hz, e.g., 100000 for 100kHz */
40 
41     const char *device_name;    /* Device name */
42 };
43 
44 /* I2C runtime context */
45 struct gd32_i2c
46 {
47     struct rt_i2c_bus_device parent;
48     const struct gd32_i2c_config *config;
49 
50     struct rt_mutex bus_mutex;
51     struct rt_completion sync_sem;
52     uint32_t dev_config;
53     uint16_t addr1;
54     uint16_t addr2;
55     uint32_t xfer_len;
56     struct rt_i2c_msg *current;
57     uint8_t errs;
58     rt_bool_t is_restart;
59 };
60 
61 int rt_hw_i2c_init(void);
62 
63 #ifdef __cplusplus
64 }
65 #endif
66 
67 #endif /* __DRV_HW_I2C_H__ */
68 
69