hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
/*
 * Freescale i.MX28 I2C Register Definitions
 *
 * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
 * on behalf of DENX Software Engineering GmbH
 *
 * SPDX-License-Identifier:    GPL-2.0+
 */
 
#ifndef __MX28_REGS_I2C_H__
#define __MX28_REGS_I2C_H__
 
#include <asm/mach-imx/regs-common.h>
 
#ifndef    __ASSEMBLY__
struct mxs_i2c_regs {
   mxs_reg_32(hw_i2c_ctrl0)
   mxs_reg_32(hw_i2c_timing0)
   mxs_reg_32(hw_i2c_timing1)
   mxs_reg_32(hw_i2c_timing2)
   mxs_reg_32(hw_i2c_ctrl1)
   mxs_reg_32(hw_i2c_stat)
   mxs_reg_32(hw_i2c_queuectrl)
   mxs_reg_32(hw_i2c_queuestat)
   mxs_reg_32(hw_i2c_queuecmd)
   mxs_reg_32(hw_i2c_queuedata)
   mxs_reg_32(hw_i2c_data)
   mxs_reg_32(hw_i2c_debug0)
   mxs_reg_32(hw_i2c_debug1)
   mxs_reg_32(hw_i2c_version)
};
#endif
 
#define    I2C_CTRL_SFTRST                (1 << 31)
#define    I2C_CTRL_CLKGATE            (1 << 30)
#define    I2C_CTRL_RUN                (1 << 29)
#define    I2C_CTRL_PREACK                (1 << 27)
#define    I2C_CTRL_ACKNOWLEDGE            (1 << 26)
#define    I2C_CTRL_SEND_NAK_ON_LAST        (1 << 25)
#define    I2C_CTRL_MULTI_MASTER            (1 << 23)
#define    I2C_CTRL_CLOCK_HELD            (1 << 22)
#define    I2C_CTRL_RETAIN_CLOCK            (1 << 21)
#define    I2C_CTRL_POST_SEND_STOP            (1 << 20)
#define    I2C_CTRL_PRE_SEND_START            (1 << 19)
#define    I2C_CTRL_SLAVE_ADDRESS_ENABLE        (1 << 18)
#define    I2C_CTRL_MASTER_MODE            (1 << 17)
#define    I2C_CTRL_DIRECTION            (1 << 16)
#define    I2C_CTRL_XFER_COUNT_MASK        0xffff
#define    I2C_CTRL_XFER_COUNT_OFFSET        0
 
#define    I2C_TIMING0_HIGH_COUNT_MASK        (0x3ff << 16)
#define    I2C_TIMING0_HIGH_COUNT_OFFSET        16
#define    I2C_TIMING0_RCV_COUNT_MASK        0x3ff
#define    I2C_TIMING0_RCV_COUNT_OFFSET        0
 
#define    I2C_TIMING1_LOW_COUNT_MASK        (0x3ff << 16)
#define    I2C_TIMING1_LOW_COUNT_OFFSET        16
#define    I2C_TIMING1_XMIT_COUNT_MASK        0x3ff
#define    I2C_TIMING1_XMIT_COUNT_OFFSET        0
 
#define    I2C_TIMING2_BUS_FREE_MASK        (0x3ff << 16)
#define    I2C_TIMING2_BUS_FREE_OFFSET        16
#define    I2C_TIMING2_LEADIN_COUNT_MASK        0x3ff
#define    I2C_TIMING2_LEADIN_COUNT_OFFSET        0
 
#define    I2C_CTRL1_RD_QUEUE_IRQ            (1 << 30)
#define    I2C_CTRL1_WR_QUEUE_IRQ            (1 << 29)
#define    I2C_CTRL1_CLR_GOT_A_NAK            (1 << 28)
#define    I2C_CTRL1_ACK_MODE            (1 << 27)
#define    I2C_CTRL1_FORCE_DATA_IDLE        (1 << 26)
#define    I2C_CTRL1_FORCE_CLK_IDLE        (1 << 25)
#define    I2C_CTRL1_BCAST_SLAVE_EN        (1 << 24)
#define    I2C_CTRL1_SLAVE_ADDRESS_BYTE_MASK    (0xff << 16)
#define    I2C_CTRL1_SLAVE_ADDRESS_BYTE_OFFSET    16
#define    I2C_CTRL1_BUS_FREE_IRQ_EN        (1 << 15)
#define    I2C_CTRL1_DATA_ENGINE_CMPLT_IRQ_EN    (1 << 14)
#define    I2C_CTRL1_NO_SLAVE_ACK_IRQ_EN        (1 << 13)
#define    I2C_CTRL1_OVERSIZE_XFER_TERM_IRQ_EN    (1 << 12)
#define    I2C_CTRL1_EARLY_TERM_IRQ_EN        (1 << 11)
#define    I2C_CTRL1_MASTER_LOSS_IRQ_EN        (1 << 10)
#define    I2C_CTRL1_SLAVE_STOP_IRQ_EN        (1 << 9)
#define    I2C_CTRL1_SLAVE_IRQ_EN            (1 << 8)
#define    I2C_CTRL1_BUS_FREE_IRQ            (1 << 7)
#define    I2C_CTRL1_DATA_ENGINE_CMPLT_IRQ        (1 << 6)
#define    I2C_CTRL1_NO_SLAVE_ACK_IRQ        (1 << 5)
#define    I2C_CTRL1_OVERSIZE_XFER_TERM_IRQ    (1 << 4)
#define    I2C_CTRL1_EARLY_TERM_IRQ        (1 << 3)
#define    I2C_CTRL1_MASTER_LOSS_IRQ        (1 << 2)
#define    I2C_CTRL1_SLAVE_STOP_IRQ        (1 << 1)
#define    I2C_CTRL1_SLAVE_IRQ            (1 << 0)
 
#define    I2C_STAT_MASTER_PRESENT            (1 << 31)
#define    I2C_STAT_SLAVE_PRESENT            (1 << 30)
#define    I2C_STAT_ANY_ENABLED_IRQ        (1 << 29)
#define    I2C_STAT_GOT_A_NAK            (1 << 28)
#define    I2C_STAT_RCVD_SLAVE_ADDR_MASK        (0xff << 16)
#define    I2C_STAT_RCVD_SLAVE_ADDR_OFFSET        16
#define    I2C_STAT_SLAVE_ADDR_EQ_ZERO        (1 << 15)
#define    I2C_STAT_SLAVE_FOUND            (1 << 14)
#define    I2C_STAT_SLAVE_SEARCHING        (1 << 13)
#define    I2C_STAT_DATA_ENGING_DMA_WAIT        (1 << 12)
#define    I2C_STAT_BUS_BUSY            (1 << 11)
#define    I2C_STAT_CLK_GEN_BUSY            (1 << 10)
#define    I2C_STAT_DATA_ENGINE_BUSY        (1 << 9)
#define    I2C_STAT_SLAVE_BUSY            (1 << 8)
#define    I2C_STAT_BUS_FREE_IRQ_SUMMARY        (1 << 7)
#define    I2C_STAT_DATA_ENGINE_CMPLT_IRQ_SUMMARY    (1 << 6)
#define    I2C_STAT_NO_SLAVE_ACK_IRQ_SUMMARY    (1 << 5)
#define    I2C_STAT_OVERSIZE_XFER_TERM_IRQ_SUMMARY    (1 << 4)
#define    I2C_STAT_EARLY_TERM_IRQ_SUMMARY        (1 << 3)
#define    I2C_STAT_MASTER_LOSS_IRQ_SUMMARY    (1 << 2)
#define    I2C_STAT_SLAVE_STOP_IRQ_SUMMARY        (1 << 1)
#define    I2C_STAT_SLAVE_IRQ_SUMMARY        (1 << 0)
 
#define    I2C_QUEUECTRL_RD_THRESH_MASK        (0x1f << 16)
#define    I2C_QUEUECTRL_RD_THRESH_OFFSET        16
#define    I2C_QUEUECTRL_WR_THRESH_MASK        (0x1f << 8)
#define    I2C_QUEUECTRL_WR_THRESH_OFFSET        8
#define    I2C_QUEUECTRL_QUEUE_RUN            (1 << 5)
#define    I2C_QUEUECTRL_RD_CLEAR            (1 << 4)
#define    I2C_QUEUECTRL_WR_CLEAR            (1 << 3)
#define    I2C_QUEUECTRL_PIO_QUEUE_MODE        (1 << 2)
#define    I2C_QUEUECTRL_RD_QUEUE_IRQ_EN        (1 << 1)
#define    I2C_QUEUECTRL_WR_QUEUE_IRQ_EN        (1 << 0)
 
#define    I2C_QUEUESTAT_RD_QUEUE_FULL        (1 << 14)
#define    I2C_QUEUESTAT_RD_QUEUE_EMPTY        (1 << 13)
#define    I2C_QUEUESTAT_RD_QUEUE_CNT_MASK        (0x1f << 8)
#define    I2C_QUEUESTAT_RD_QUEUE_CNT_OFFSET    8
#define    I2C_QUEUESTAT_WR_QUEUE_FULL        (1 << 6)
#define    I2C_QUEUESTAT_WR_QUEUE_EMPTY        (1 << 5)
#define    I2C_QUEUESTAT_WR_QUEUE_CNT_MASK        0x1f
#define    I2C_QUEUESTAT_WR_QUEUE_CNT_OFFSET    0
 
#define    I2C_QUEUECMD_PREACK            (1 << 27)
#define    I2C_QUEUECMD_ACKNOWLEDGE        (1 << 26)
#define    I2C_QUEUECMD_SEND_NAK_ON_LAST        (1 << 25)
#define    I2C_QUEUECMD_MULTI_MASTER        (1 << 23)
#define    I2C_QUEUECMD_CLOCK_HELD            (1 << 22)
#define    I2C_QUEUECMD_RETAIN_CLOCK        (1 << 21)
#define    I2C_QUEUECMD_POST_SEND_STOP        (1 << 20)
#define    I2C_QUEUECMD_PRE_SEND_START        (1 << 19)
#define    I2C_QUEUECMD_SLAVE_ADDRESS_ENABLE    (1 << 18)
#define    I2C_QUEUECMD_MASTER_MODE        (1 << 17)
#define    I2C_QUEUECMD_DIRECTION            (1 << 16)
#define    I2C_QUEUECMD_XFER_COUNT_MASK        0xffff
#define    I2C_QUEUECMD_XFER_COUNT_OFFSET        0
 
#define    I2C_QUEUEDATA_DATA_MASK            0xffffffff
#define    I2C_QUEUEDATA_DATA_OFFSET        0
 
#define    I2C_DATA_DATA_MASK            0xffffffff
#define    I2C_DATA_DATA_OFFSET            0
 
#define    I2C_DEBUG0_DMAREQ            (1 << 31)
#define    I2C_DEBUG0_DMAENDCMD            (1 << 30)
#define    I2C_DEBUG0_DMAKICK            (1 << 29)
#define    I2C_DEBUG0_DMATERMINATE            (1 << 28)
#define    I2C_DEBUG0_STATE_VALUE_MASK        (0x3 << 26)
#define    I2C_DEBUG0_STATE_VALUE_OFFSET        26
#define    I2C_DEBUG0_DMA_STATE_MASK        (0x3ff << 16)
#define    I2C_DEBUG0_DMA_STATE_OFFSET        16
#define    I2C_DEBUG0_START_TOGGLE            (1 << 15)
#define    I2C_DEBUG0_STOP_TOGGLE            (1 << 14)
#define    I2C_DEBUG0_GRAB_TOGGLE            (1 << 13)
#define    I2C_DEBUG0_CHANGE_TOGGLE        (1 << 12)
#define    I2C_DEBUG0_STATE_LATCH            (1 << 11)
#define    I2C_DEBUG0_SLAVE_HOLD_CLK        (1 << 10)
#define    I2C_DEBUG0_STATE_STATE_MASK        0x3ff
#define    I2C_DEBUG0_STATE_STATE_OFFSET        0
 
#define    I2C_DEBUG1_I2C_CLK_IN            (1 << 31)
#define    I2C_DEBUG1_I2C_DATA_IN            (1 << 30)
#define    I2C_DEBUG1_DMA_BYTE_ENABLES_MASK    (0xf << 24)
#define    I2C_DEBUG1_DMA_BYTE_ENABLES_OFFSET    24
#define    I2C_DEBUG1_CLK_GEN_STATE_MASK        (0xff << 16)
#define    I2C_DEBUG1_CLK_GEN_STATE_OFFSET        16
#define    I2C_DEBUG1_LST_MODE_MASK        (0x3 << 9)
#define    I2C_DEBUG1_LST_MODE_OFFSET        9
#define    I2C_DEBUG1_LOCAL_SLAVE_TEST        (1 << 8)
#define    I2C_DEBUG1_FORCE_CLK_ON            (1 << 4)
#define    I2C_DEBUG1_FORCE_ABR_LOSS        (1 << 3)
#define    I2C_DEBUG1_FORCE_RCV_ACK        (1 << 2)
#define    I2C_DEBUG1_FORCE_I2C_DATA_OE        (1 << 1)
#define    I2C_DEBUG1_FORCE_I2C_CLK_OE        (1 << 0)
 
#define    I2C_VERSION_MAJOR_MASK            (0xff << 24)
#define    I2C_VERSION_MAJOR_OFFSET        24
#define    I2C_VERSION_MINOR_MASK            (0xff << 16)
#define    I2C_VERSION_MINOR_OFFSET        16
#define    I2C_VERSION_STEP_MASK            0xffff
#define    I2C_VERSION_STEP_OFFSET            0
 
#endif    /* __MX28_REGS_I2C_H__ */