summaryrefslogtreecommitdiff
path: root/bsp/nxp/imx/imx6ull-smart/drivers/drv_i2c.h
blob: 5431cf7c8f99feb8239a1221cdf0cc3c9bcfd0df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
 * Copyright (c) 2006-2023, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2021-01-13     Lyons        first version
 * 2021-06-23     RiceChen     refactor
 */

#ifndef __DRV_I2C_H__
#define __DRV_I2C_H__

#include <board.h>
#include "drv_common.h"

#include "fsl_iomuxc.h"
#include "fsl_clock.h"
#include "fsl_i2c.h"

#define IMX_I2C_IRQ_MODE

struct imx6ull_i2c_config
{
    void *hw_base;  /* hardware physical address base */
    I2C_Type *I2C;
    char *name;
    rt_uint32_t baud_rate;
    rt_uint32_t clk_ip_name;
    rt_uint32_t irq_num;

    struct imx6ull_iomuxc scl_gpio;
    struct imx6ull_iomuxc sda_gpio;

    i2c_master_handle_t master_handle;
};

struct imx6ull_i2c_bus
{
    struct rt_i2c_bus_device parent;
    struct imx6ull_i2c_config *config;
};

#ifdef BSP_USING_I2C1
#define I2C1_BUS_CONFIG                                             \
    {                                                               \
        .I2C         = I2C1,                                        \
        .name        = "i2c1",                                      \
        .clk_ip_name = kCLOCK_I2c1S,                                \
        .baud_rate   = I2C1_BAUD_RATE,                              \
        .irq_num = IMX_INT_I2C1,                                    \
        .scl_gpio    = {IOMUXC_UART4_TX_DATA_I2C1_SCL, 1, 0x70B0},  \
        .sda_gpio    = {IOMUXC_UART4_RX_DATA_I2C1_SDA, 1, 0x70B0},  \
    }
#endif /* BSP_USING_I2C1 */

#ifdef BSP_USING_I2C2
#define I2C2_BUS_CONFIG                                             \
    {                                                               \
        .I2C         = I2C2,                                        \
        .name        = "i2c2",                                      \
        .clk_ip_name = kCLOCK_I2c2S,                                \
        .baud_rate   = I2C2_BAUD_RATE,                              \
        .irq_num = IMX_INT_I2C2,                                    \
        .scl_gpio    = {IOMUXC_UART5_TX_DATA_I2C2_SCL, 1, 0x70B0},  \
        .sda_gpio    = {IOMUXC_UART5_RX_DATA_I2C2_SDA, 1, 0x70B0},  \
    }
#endif /* BSP_USING_I2C2 */

#ifdef BSP_USING_I2C3
#define I2C3_BUS_CONFIG                                             \
    {                                                               \
        .I2C         = I2C3,                                        \
        .name        = "i2c3",                                      \
        .clk_ip_name = kCLOCK_I2c3S,                                \
        .baud_rate   = I2C3_BAUD_RATE,                              \
        .irq_num = IMX_INT_I2C3,                                    \
        .scl_gpio    = {IOMUXC_ENET2_RX_DATA0_I2C3_SCL, 1, 0x70B0}, \
        .sda_gpio    = {IOMUXC_ENET2_RX_DATA1_I2C3_SDA, 1, 0x70B0}, \
    }
#endif /* BSP_USING_I2C3 */

#ifdef BSP_USING_I2C4
#define I2C4_BUS_CONFIG                                             \
    {                                                               \
        .I2C         = I2C4,                                        \
        .name        = "i2c4",                                      \
        .clk_ip_name = kCLOCK_I2c4S,                                \
        .baud_rate   = I2C4_BAUD_RATE,                              \
        .irq_num = IMX_INT_I2C4,                                    \
        .scl_gpio    = {IOMUXC_UART2_TX_DATA_I2C4_SCL, 1, 0x70B0},  \
        .sda_gpio    = {IOMUXC_UART2_RX_DATA_I2C4_SDA, 1, 0x70B0},  \
    }
#endif /* BSP_USING_I2C4 */

#endif