blob: d062b5be24bc0a9f24e1a82679f84dd027d43c29 (
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
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
195
196
197
198
199
200
201
202
203
204
205
206
207
|
/*
* Freescale i.MX28 I2C Register Definitions
*
* Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
* on behalf of DENX Software Engineering GmbH
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#ifndef __MX28_REGS_I2C_H__
#define __MX28_REGS_I2C_H__
#include <asm/imx-common/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__ */
|