summaryrefslogtreecommitdiffstats
path: root/sys/arm/freescale/imx/imx51_ssireg.h
blob: 1a5b5b34df36c274fb7222c21ae40f8c27731ea0 (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
/*-
 * Copyright (c) 2012 The FreeBSD Foundation
 * All rights reserved.
 *
 * This software was developed by Oleksandr Rybalko under sponsorship
 * from the FreeBSD Foundation.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1.	Redistributions of source code must retain the above copyright
 *	notice, this list of conditions and the following disclaimer.
 * 2.	Redistributions in binary form must reproduce the above copyright
 *	notice, this list of conditions and the following disclaimer in the
 *	documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * $FreeBSD$
 */

/* Registers definition for Freescale i.MX515 Synchronous Serial Interface */

#define	IMX51_SSI_STX0_REG	0x0000 /* SSI TX Data Register 0 */
#define	IMX51_SSI_STX1_REG	0x0004 /* SSI TX Data Register 1 */
#define	IMX51_SSI_SRX0_REG	0x0008 /* SSI RX Data Register 0 */
#define	IMX51_SSI_SRX1_REG	0x000C /* SSI RX Data Register 1 */
#define	IMX51_SSI_SCR_REG	0x0010 /* SSI Control Register */
#define		SSI_SCR_RFR_CLK_DIS	(1 << 11) /* RX FC Disable */
#define		SSI_SCR_TFR_CLK_DIS	(1 << 10) /* TX FC Disable */
#define		SSI_SCR_CLK_IST		(1 << 9) /* Clock Idle */
#define		SSI_SCR_TCH_EN		(1 << 8) /* 2Chan Enable */
#define		SSI_SCR_SYS_CLK_EN	(1 << 7) /* System Clock En */
#define		SSI_SCR_MODE_NORMAL	(0 << 5)
#define		SSI_SCR_MODE_I2S_MASTER	(1 << 5)
#define		SSI_SCR_MODE_I2S_SLAVE	(2 << 5)
#define		SSI_SCR_MODE_MASK	(3 << 5)
#define		SSI_SCR_SYN		(1 << 4) /* Sync Mode */
#define		SSI_SCR_NET		(1 << 3) /* Network Mode */
#define		SSI_SCR_RE		(1 << 2) /* RX Enable */
#define		SSI_SCR_TE		(1 << 1) /* TX Enable */
#define		SSI_SCR_SSIEN		(1 << 0) /* SSI Enable */

#define	IMX51_SSI_SISR_REG	0x0014 /* SSI Interrupt Status Register */
#define		SSI_SISR_RFRC		(1 << 24) /* RX Frame Complete */
#define		SSI_SIR_TFRC		(1 << 23) /* TX Frame Complete */
#define		SSI_SIR_CMDAU		(1 << 18) /* Command Address Updated */
#define		SSI_SIR_CMDDU		(1 << 17) /* Command Data Updated */
#define		SSI_SIR_RXT		(1 << 16) /* RX Tag Updated */
#define		SSI_SIR_RDR1		(1 << 15) /* RX Data Ready 1 */
#define		SSI_SIR_RDR0		(1 << 14) /* RX Data Ready 0 */
#define		SSI_SIR_TDE1		(1 << 13) /* TX Data Reg Empty 1 */
#define		SSI_SIR_TDE0		(1 << 12) /* TX Data Reg Empty 0 */
#define		SSI_SIR_ROE1		(1 << 11) /* RXer Overrun Error 1 */
#define		SSI_SIR_ROE0		(1 << 10) /* RXer Overrun Error 0 */
#define		SSI_SIR_TUE1		(1 << 9) /* TXer Underrun Error 1 */
#define		SSI_SIR_TUE0		(1 << 8) /* TXer Underrun Error 0 */
#define		SSI_SIR_TFS		(1 << 7) /* TX Frame Sync */
#define		SSI_SIR_RFS		(1 << 6) /* RX Frame Sync */
#define		SSI_SIR_TLS		(1 << 5) /* TX Last Time Slot */
#define		SSI_SIR_RLS		(1 << 4) /* RX Last Time Slot */
#define		SSI_SIR_RFF1		(1 << 3) /* RX FIFO Full 1 */
#define		SSI_SIR_RFF0		(1 << 2) /* RX FIFO Full 0 */
#define		SSI_SIR_TFE1		(1 << 1) /* TX FIFO Empty 1 */
#define		SSI_SIR_TFE0		(1 << 0) /* TX FIFO Empty 0 */

#define	IMX51_SSI_SIER_REG	0x0018 /* SSI Interrupt Enable Register */
/* 24-23 Enable Bit	(See SISR) */
#define		SSI_SIER_RDMAE		(1 << 22) /* RX DMA Enable */
#define		SSI_SIER_RIE		(1 << 21) /* RX Interrupt Enable */
#define		SSI_SIER_TDMAE		(1 << 20) /* TX DMA Enable */
#define		SSI_SIER_TIE		(1 << 19) /* TX Interrupt Enable */
/* 18-0 Enable Bits	(See SISR) */

#define	IMX51_SSI_STCR_REG	0x001C /* SSI TX Configuration Register */
#define		SSI_STCR_TXBIT0		(1 << 9) /* TX Bit 0 */
#define		SSI_STCR_TFEN1		(1 << 8) /* TX FIFO Enable 1 */
#define		SSI_STCR_TFEN0		(1 << 7) /* TX FIFO Enable 0 */
#define		SSI_STCR_TFDIR		(1 << 6) /* TX Frame Direction */
#define		SSI_STCR_TXDIR		(1 << 5) /* TX Clock Direction */
#define		SSI_STCR_TSHFD		(1 << 4) /* TX Shift Direction */
#define		SSI_STCR_TSCKP		(1 << 3) /* TX Clock Polarity */
#define		SSI_STCR_TFSI		(1 << 2) /* TX Frame Sync Invert */
#define		SSI_STCR_TFSL		(1 << 1) /* TX Frame Sync Length */
#define		SSI_STCR_TEFS		(1 << 0) /* TX Early Frame Sync */

#define	IMX51_SSI_SRCR_REG	0x0020 /* SSI RX Configuration Register */
#define		SSI_SRCR_RXEXT		(1 << 10) /* RX Data Extension */
#define		SSI_SRCR_RXBIT0		(1 << 9) /* RX Bit 0 */
#define		SSI_SRCR_RFEN1		(1 << 8) /* RX FIFO Enable 1 */
#define		SSI_SRCR_RFEN0		(1 << 7) /* RX FIFO Enable 0 */
#define		SSI_SRCR_RFDIR		(1 << 6) /* RX Frame Direction */
#define		SSI_SRCR_RXDIR		(1 << 5) /* RX Clock Direction */
#define		SSI_SRCR_RSHFD		(1 << 4) /* RX Shift Direction */
#define		SSI_SRCR_RSCKP		(1 << 3) /* RX Clock Polarity */
#define		SSI_SRCR_RFSI		(1 << 2) /* RX Frame Sync Invert */
#define		SSI_SRCR_RFSL		(1 << 1) /* RX Frame Sync Length */
#define		SSI_SRCR_REFS		(1 << 0) /* RX Early Frame Sync */

#define	IMX51_SSI_STCCR_REG	0x0024 /* TX Clock Control */
#define	IMX51_SSI_SRCCR_REG	0x0028 /* RX Clock Control */
#define		SSI_SXCCR_DIV2		(1 << 18) /* Divide By 2 */
#define		SSI_SXCCR_PSR		(1 << 17) /* Prescaler Range */
#define		SSI_SXCCR_WL_MASK	0x0001e000
#define		SSI_SXCCR_WL_SHIFT	13 /* Word Length Control */
#define		SSI_SXCCR_DC_MASK	0x00001f00
#define		SSI_SXCCR_DC_SHIFT	8 /* Frame Rate Divider */
#define		SSI_SXCCR_PM_MASK	0x000000ff
#define		SSI_SXCCR_PM_SHIFT	0 /* Prescaler Modulus */

#define	IMX51_SSI_SFCSR_REG	0x002C /* SSI FIFO Control/Status Register */
#define		SSI_SFCSR_RFCNT1_MASK	0xf0000000
#define		SSI_SFCSR_RFCNT1_SHIFT	28 /* RX FIFO Counter 1 */
#define		SSI_SFCSR_TFCNT1_MASK	0x0f000000
#define		SSI_SFCSR_TFCNT1_SHIFT	24 /* TX FIFO Counter 1 */
#define		SSI_SFCSR_RFWM1_MASK	0x00f00000
#define		SSI_SFCSR_RFWM1_SHIFT	20 /* RX FIFO Full WaterMark 1 */
#define		SSI_SFCSR_TFWM1_MASK	0x000f0000
#define		SSI_SFCSR_TFWM1_SHIFT	16 /* TX FIFO Empty WaterMark 1 */
#define		SSI_SFCSR_RFCNT0_MASK	0x0000f000
#define		SSI_SFCSR_RFCNT0_SHIFT	12 /* RX FIFO Counter 0 */
#define		SSI_SFCSR_TFCNT0_MASK	0x00000f00
#define		SSI_SFCSR_TFCNT0_SHIFT	8 /* TX FIFO Counter 0 */
#define		SSI_SFCSR_RFWM0_MASK	0x000000f0
#define		SSI_SFCSR_RFWM0_SHIFT	4 /* RX FIFO Full WaterMark 0 */
#define		SSI_SFCSR_TFWM0_MASK	0x0000000f
#define		SSI_SFCSR_TFWM0_SHIFT	0 /* TX FIFO Empty WaterMark 0 */

#define	IMX51_SSI_STR_REG	0x0030 /* SSI Test Register1 */
#define		SSI_STR_TEST		(1 << 15) /* Test Mode */
#define		SSI_STR_RCK2TCK		(1 << 14) /* RX<->TX Clock Loop Back */
#define		SSI_STR_RFS2TFS		(1 << 13) /* RX<->TX Frame Loop Back */
#define		SSI_STR_RXSTATE_MASK	0x00001f00
#define		SSI_STR_RXSTATE_SHIFT	8 /* RXer State Machine Status */
#define		SSI_STR_TXD2RXD		(1 << 7) /* TX<->RX Data Loop Back */
#define		SSI_STR_TCK2RCK		(1 << 6) /* TX<->RX Clock Loop Back */
#define		SSI_STR_TFS2RFS		(1 << 5) /* TX<->RX Frame Loop Back */
#define		SSI_STR_TXSTATE_MASK	0x0000001f
#define		SSI_STR_TXSTATE_SHIFT	0 /* TXer State Machine Status */

#define	IMX51_SSI_SOR_REG	0x0034 /* SSI Option Register2 */
#define		SSI_SOR_CLKOFF		(1 << 6) /* Clock Off */
#define		SSI_SOR_RX_CLR		(1 << 5) /* RXer Clear */
#define		SSI_SOR_TX_CLR		(1 << 4) /* TXer Clear */
#define		SSI_SOR_INIT		(1 << 3) /* Initialize */
#define		SSI_SOR_WAIT_MASK	0x00000006
#define		SSI_SOR_INIT_SHIFT	1 /* Wait */
#define		SSI_SOR_SYNRST		(1 << 0) /* Frame Sync Reset */

#define	IMX51_SSI_SACNT_REG	0x0038 /* SSI AC97 Control Register */
#define		SSI_SACNT_FRDIV_MASK	0x000007e0
#define		SSI_SACNT_FRDIV_SHIFT	5 /* Frame Rate Divider */
#define		SSI_SACNT_WR		(1 << 4) /* Write Command */
#define		SSI_SACNT_RD		(1 << 3) /* Read Command */
#define		SSI_SACNT_TIF		(1 << 2) /* Tag in FIFO */
#define		SSI_SACNT_FV		(1 << 1) /* Fixed/Variable Operation */
#define		SSI_SACNT_AC97EN	(1 << 0) /* AC97 Mode Enable */

#define	IMX51_SSI_SACADD_REG	0x003C /* SSI AC97 Command Address Register */
#define		SSI_SACADD_MASK		0x0007ffff
#define	IMX51_SSI_SACDAT_REG	0x0040 /* SSI AC97 Command Data Register */
#define		SSI_SACDAT_MASK		0x000fffff
#define	IMX51_SSI_SATAG_REG	0x0044 /* SSI AC97 Tag Register */
#define		SSI_SATAG_MASK		0x0000ffff
#define	IMX51_SSI_STMSK_REG	0x0048 /* SSI TX Time Slot Mask Register */
#define	IMX51_SSI_SRMSK_REG	0x004C /* SSI RX Time Slot Mask Register */
#define	IMX51_SSI_SACCST_REG	0x0050 /* SSI AC97 Channel Status Register */
#define	IMX51_SSI_SACCEN_REG	0x0054 /* SSI AC97 Channel Enable Register */
#define	IMX51_SSI_SACCDIS_REG	0x0058 /* SSI AC97 Channel Disable Register */
#define		SSI_SAC_MASK		0x000003ff /* SACCST,SACCEN,SACCDIS */
OpenPOWER on IntegriCloud