Linux Audio

Check our new training course

Loading...
v6.13.7
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 * fsl_esai.h - ALSA ESAI interface for the Freescale i.MX SoC
  4 *
  5 * Copyright (C) 2014 Freescale Semiconductor, Inc.
  6 *
  7 * Author: Nicolin Chen <Guangyu.Chen@freescale.com>
  8 */
  9
 10#ifndef _FSL_ESAI_DAI_H
 11#define _FSL_ESAI_DAI_H
 12
 13/* ESAI Register Map */
 14#define REG_ESAI_ETDR		0x00
 15#define REG_ESAI_ERDR		0x04
 16#define REG_ESAI_ECR		0x08
 17#define REG_ESAI_ESR		0x0C
 18#define REG_ESAI_TFCR		0x10
 19#define REG_ESAI_TFSR		0x14
 20#define REG_ESAI_RFCR		0x18
 21#define REG_ESAI_RFSR		0x1C
 22#define REG_ESAI_xFCR(tx)	(tx ? REG_ESAI_TFCR : REG_ESAI_RFCR)
 23#define REG_ESAI_xFSR(tx)	(tx ? REG_ESAI_TFSR : REG_ESAI_RFSR)
 24#define REG_ESAI_TX0		0x80
 25#define REG_ESAI_TX1		0x84
 26#define REG_ESAI_TX2		0x88
 27#define REG_ESAI_TX3		0x8C
 28#define REG_ESAI_TX4		0x90
 29#define REG_ESAI_TX5		0x94
 30#define REG_ESAI_TSR		0x98
 31#define REG_ESAI_RX0		0xA0
 32#define REG_ESAI_RX1		0xA4
 33#define REG_ESAI_RX2		0xA8
 34#define REG_ESAI_RX3		0xAC
 35#define REG_ESAI_SAISR		0xCC
 36#define REG_ESAI_SAICR		0xD0
 37#define REG_ESAI_TCR		0xD4
 38#define REG_ESAI_TCCR		0xD8
 39#define REG_ESAI_RCR		0xDC
 40#define REG_ESAI_RCCR		0xE0
 41#define REG_ESAI_xCR(tx)	(tx ? REG_ESAI_TCR : REG_ESAI_RCR)
 42#define REG_ESAI_xCCR(tx)	(tx ? REG_ESAI_TCCR : REG_ESAI_RCCR)
 43#define REG_ESAI_TSMA		0xE4
 44#define REG_ESAI_TSMB		0xE8
 45#define REG_ESAI_RSMA		0xEC
 46#define REG_ESAI_RSMB		0xF0
 47#define REG_ESAI_xSMA(tx)	(tx ? REG_ESAI_TSMA : REG_ESAI_RSMA)
 48#define REG_ESAI_xSMB(tx)	(tx ? REG_ESAI_TSMB : REG_ESAI_RSMB)
 49#define REG_ESAI_PRRC		0xF8
 50#define REG_ESAI_PCRC		0xFC
 51
 52/* ESAI Control Register -- REG_ESAI_ECR 0x8 */
 53#define ESAI_ECR_ETI_SHIFT	19
 54#define ESAI_ECR_ETI_MASK	(1 << ESAI_ECR_ETI_SHIFT)
 55#define ESAI_ECR_ETI		(1 << ESAI_ECR_ETI_SHIFT)
 56#define ESAI_ECR_ETO_SHIFT	18
 57#define ESAI_ECR_ETO_MASK	(1 << ESAI_ECR_ETO_SHIFT)
 58#define ESAI_ECR_ETO		(1 << ESAI_ECR_ETO_SHIFT)
 59#define ESAI_ECR_ERI_SHIFT	17
 60#define ESAI_ECR_ERI_MASK	(1 << ESAI_ECR_ERI_SHIFT)
 61#define ESAI_ECR_ERI		(1 << ESAI_ECR_ERI_SHIFT)
 62#define ESAI_ECR_ERO_SHIFT	16
 63#define ESAI_ECR_ERO_MASK	(1 << ESAI_ECR_ERO_SHIFT)
 64#define ESAI_ECR_ERO		(1 << ESAI_ECR_ERO_SHIFT)
 65#define ESAI_ECR_ERST_SHIFT	1
 66#define ESAI_ECR_ERST_MASK	(1 << ESAI_ECR_ERST_SHIFT)
 67#define ESAI_ECR_ERST		(1 << ESAI_ECR_ERST_SHIFT)
 68#define ESAI_ECR_ESAIEN_SHIFT	0
 69#define ESAI_ECR_ESAIEN_MASK	(1 << ESAI_ECR_ESAIEN_SHIFT)
 70#define ESAI_ECR_ESAIEN		(1 << ESAI_ECR_ESAIEN_SHIFT)
 71
 72/* ESAI Status Register -- REG_ESAI_ESR 0xC */
 73#define ESAI_ESR_TINIT_SHIFT	10
 74#define ESAI_ESR_TINIT_MASK	(1 << ESAI_ESR_TINIT_SHIFT)
 75#define ESAI_ESR_TINIT		(1 << ESAI_ESR_TINIT_SHIFT)
 76#define ESAI_ESR_RFF_SHIFT	9
 77#define ESAI_ESR_RFF_MASK	(1 << ESAI_ESR_RFF_SHIFT)
 78#define ESAI_ESR_RFF		(1 << ESAI_ESR_RFF_SHIFT)
 79#define ESAI_ESR_TFE_SHIFT	8
 80#define ESAI_ESR_TFE_MASK	(1 << ESAI_ESR_TFE_SHIFT)
 81#define ESAI_ESR_TFE		(1 << ESAI_ESR_TFE_SHIFT)
 82#define ESAI_ESR_TLS_SHIFT	7
 83#define ESAI_ESR_TLS_MASK	(1 << ESAI_ESR_TLS_SHIFT)
 84#define ESAI_ESR_TLS		(1 << ESAI_ESR_TLS_SHIFT)
 85#define ESAI_ESR_TDE_SHIFT	6
 86#define ESAI_ESR_TDE_MASK	(1 << ESAI_ESR_TDE_SHIFT)
 87#define ESAI_ESR_TDE		(1 << ESAI_ESR_TDE_SHIFT)
 88#define ESAI_ESR_TED_SHIFT	5
 89#define ESAI_ESR_TED_MASK	(1 << ESAI_ESR_TED_SHIFT)
 90#define ESAI_ESR_TED		(1 << ESAI_ESR_TED_SHIFT)
 91#define ESAI_ESR_TD_SHIFT	4
 92#define ESAI_ESR_TD_MASK	(1 << ESAI_ESR_TD_SHIFT)
 93#define ESAI_ESR_TD		(1 << ESAI_ESR_TD_SHIFT)
 94#define ESAI_ESR_RLS_SHIFT	3
 95#define ESAI_ESR_RLS_MASK	(1 << ESAI_ESR_RLS_SHIFT)
 96#define ESAI_ESR_RLS		(1 << ESAI_ESR_RLS_SHIFT)
 97#define ESAI_ESR_RDE_SHIFT	2
 98#define ESAI_ESR_RDE_MASK	(1 << ESAI_ESR_RDE_SHIFT)
 99#define ESAI_ESR_RDE		(1 << ESAI_ESR_RDE_SHIFT)
100#define ESAI_ESR_RED_SHIFT	1
101#define ESAI_ESR_RED_MASK	(1 << ESAI_ESR_RED_SHIFT)
102#define ESAI_ESR_RED		(1 << ESAI_ESR_RED_SHIFT)
103#define ESAI_ESR_RD_SHIFT	0
104#define ESAI_ESR_RD_MASK	(1 << ESAI_ESR_RD_SHIFT)
105#define ESAI_ESR_RD		(1 << ESAI_ESR_RD_SHIFT)
106
107/*
108 * Transmit FIFO Configuration Register -- REG_ESAI_TFCR 0x10
109 * Receive FIFO Configuration Register -- REG_ESAI_RFCR 0x18
110 */
111#define ESAI_xFCR_TIEN_SHIFT	19
112#define ESAI_xFCR_TIEN_MASK	(1 << ESAI_xFCR_TIEN_SHIFT)
113#define ESAI_xFCR_TIEN		(1 << ESAI_xFCR_TIEN_SHIFT)
114#define ESAI_xFCR_REXT_SHIFT	19
115#define ESAI_xFCR_REXT_MASK	(1 << ESAI_xFCR_REXT_SHIFT)
116#define ESAI_xFCR_REXT		(1 << ESAI_xFCR_REXT_SHIFT)
117#define ESAI_xFCR_xWA_SHIFT	16
118#define ESAI_xFCR_xWA_WIDTH	3
119#define ESAI_xFCR_xWA_MASK	(((1 << ESAI_xFCR_xWA_WIDTH) - 1) << ESAI_xFCR_xWA_SHIFT)
120#define ESAI_xFCR_xWA(v)	(((8 - ((v) >> 2)) << ESAI_xFCR_xWA_SHIFT) & ESAI_xFCR_xWA_MASK)
121#define ESAI_xFCR_xFWM_SHIFT	8
122#define ESAI_xFCR_xFWM_WIDTH	8
123#define ESAI_xFCR_xFWM_MASK	(((1 << ESAI_xFCR_xFWM_WIDTH) - 1) << ESAI_xFCR_xFWM_SHIFT)
124#define ESAI_xFCR_xFWM(v)	((((v) - 1) << ESAI_xFCR_xFWM_SHIFT) & ESAI_xFCR_xFWM_MASK)
125#define ESAI_xFCR_xE_SHIFT	2
126#define ESAI_xFCR_TE_WIDTH	6
127#define ESAI_xFCR_RE_WIDTH	4
128#define ESAI_xFCR_TE_MASK	(((1 << ESAI_xFCR_TE_WIDTH) - 1) << ESAI_xFCR_xE_SHIFT)
129#define ESAI_xFCR_RE_MASK	(((1 << ESAI_xFCR_RE_WIDTH) - 1) << ESAI_xFCR_xE_SHIFT)
130#define ESAI_xFCR_TE(x) 	((ESAI_xFCR_TE_MASK >> (ESAI_xFCR_TE_WIDTH - x)) & ESAI_xFCR_TE_MASK)
131#define ESAI_xFCR_RE(x) 	((ESAI_xFCR_RE_MASK >> (ESAI_xFCR_RE_WIDTH - x)) & ESAI_xFCR_RE_MASK)
132#define ESAI_xFCR_xFR_SHIFT	1
133#define ESAI_xFCR_xFR_MASK	(1 << ESAI_xFCR_xFR_SHIFT)
134#define ESAI_xFCR_xFR		(1 << ESAI_xFCR_xFR_SHIFT)
135#define ESAI_xFCR_xFEN_SHIFT	0
136#define ESAI_xFCR_xFEN_MASK	(1 << ESAI_xFCR_xFEN_SHIFT)
137#define ESAI_xFCR_xFEN		(1 << ESAI_xFCR_xFEN_SHIFT)
138
139/*
140 * Transmit FIFO Status Register -- REG_ESAI_TFSR 0x14
141 * Receive FIFO Status Register --REG_ESAI_RFSR 0x1C
142 */
143#define ESAI_xFSR_NTFO_SHIFT	12
144#define ESAI_xFSR_NRFI_SHIFT	12
145#define ESAI_xFSR_NTFI_SHIFT	8
146#define ESAI_xFSR_NRFO_SHIFT	8
147#define ESAI_xFSR_NTFx_WIDTH	3
148#define ESAI_xFSR_NRFx_WIDTH	2
149#define ESAI_xFSR_NTFO_MASK	(((1 << ESAI_xFSR_NTFx_WIDTH) - 1) << ESAI_xFSR_NTFO_SHIFT)
150#define ESAI_xFSR_NTFI_MASK	(((1 << ESAI_xFSR_NTFx_WIDTH) - 1) << ESAI_xFSR_NTFI_SHIFT)
151#define ESAI_xFSR_NRFO_MASK	(((1 << ESAI_xFSR_NRFx_WIDTH) - 1) << ESAI_xFSR_NRFO_SHIFT)
152#define ESAI_xFSR_NRFI_MASK	(((1 << ESAI_xFSR_NRFx_WIDTH) - 1) << ESAI_xFSR_NRFI_SHIFT)
153#define ESAI_xFSR_xFCNT_SHIFT	0
154#define ESAI_xFSR_xFCNT_WIDTH	8
155#define ESAI_xFSR_xFCNT_MASK	(((1 << ESAI_xFSR_xFCNT_WIDTH) - 1) << ESAI_xFSR_xFCNT_SHIFT)
156
157/* ESAI Transmit Slot Register -- REG_ESAI_TSR 0x98 */
158#define ESAI_TSR_SHIFT		0
159#define ESAI_TSR_WIDTH		24
160#define ESAI_TSR_MASK		(((1 << ESAI_TSR_WIDTH) - 1) << ESAI_TSR_SHIFT)
161
162/* Serial Audio Interface Status Register -- REG_ESAI_SAISR 0xCC */
163#define ESAI_SAISR_TODFE_SHIFT	17
164#define ESAI_SAISR_TODFE_MASK	(1 << ESAI_SAISR_TODFE_SHIFT)
165#define ESAI_SAISR_TODFE	(1 << ESAI_SAISR_TODFE_SHIFT)
166#define ESAI_SAISR_TEDE_SHIFT	16
167#define ESAI_SAISR_TEDE_MASK	(1 << ESAI_SAISR_TEDE_SHIFT)
168#define ESAI_SAISR_TEDE		(1 << ESAI_SAISR_TEDE_SHIFT)
169#define ESAI_SAISR_TDE_SHIFT	15
170#define ESAI_SAISR_TDE_MASK	(1 << ESAI_SAISR_TDE_SHIFT)
171#define ESAI_SAISR_TDE		(1 << ESAI_SAISR_TDE_SHIFT)
172#define ESAI_SAISR_TUE_SHIFT	14
173#define ESAI_SAISR_TUE_MASK	(1 << ESAI_SAISR_TUE_SHIFT)
174#define ESAI_SAISR_TUE		(1 << ESAI_SAISR_TUE_SHIFT)
175#define ESAI_SAISR_TFS_SHIFT	13
176#define ESAI_SAISR_TFS_MASK	(1 << ESAI_SAISR_TFS_SHIFT)
177#define ESAI_SAISR_TFS		(1 << ESAI_SAISR_TFS_SHIFT)
178#define ESAI_SAISR_RODF_SHIFT	10
179#define ESAI_SAISR_RODF_MASK	(1 << ESAI_SAISR_RODF_SHIFT)
180#define ESAI_SAISR_RODF		(1 << ESAI_SAISR_RODF_SHIFT)
181#define ESAI_SAISR_REDF_SHIFT	9
182#define ESAI_SAISR_REDF_MASK	(1 << ESAI_SAISR_REDF_SHIFT)
183#define ESAI_SAISR_REDF		(1 << ESAI_SAISR_REDF_SHIFT)
184#define ESAI_SAISR_RDF_SHIFT	8
185#define ESAI_SAISR_RDF_MASK	(1 << ESAI_SAISR_RDF_SHIFT)
186#define ESAI_SAISR_RDF		(1 << ESAI_SAISR_RDF_SHIFT)
187#define ESAI_SAISR_ROE_SHIFT	7
188#define ESAI_SAISR_ROE_MASK	(1 << ESAI_SAISR_ROE_SHIFT)
189#define ESAI_SAISR_ROE		(1 << ESAI_SAISR_ROE_SHIFT)
190#define ESAI_SAISR_RFS_SHIFT	6
191#define ESAI_SAISR_RFS_MASK	(1 << ESAI_SAISR_RFS_SHIFT)
192#define ESAI_SAISR_RFS		(1 << ESAI_SAISR_RFS_SHIFT)
193#define ESAI_SAISR_IF2_SHIFT	2
194#define ESAI_SAISR_IF2_MASK	(1 << ESAI_SAISR_IF2_SHIFT)
195#define ESAI_SAISR_IF2		(1 << ESAI_SAISR_IF2_SHIFT)
196#define ESAI_SAISR_IF1_SHIFT	1
197#define ESAI_SAISR_IF1_MASK	(1 << ESAI_SAISR_IF1_SHIFT)
198#define ESAI_SAISR_IF1		(1 << ESAI_SAISR_IF1_SHIFT)
199#define ESAI_SAISR_IF0_SHIFT	0
200#define ESAI_SAISR_IF0_MASK	(1 << ESAI_SAISR_IF0_SHIFT)
201#define ESAI_SAISR_IF0		(1 << ESAI_SAISR_IF0_SHIFT)
202
203/* Serial Audio Interface Control Register -- REG_ESAI_SAICR 0xD0 */
204#define ESAI_SAICR_ALC_SHIFT	8
205#define ESAI_SAICR_ALC_MASK	(1 << ESAI_SAICR_ALC_SHIFT)
206#define ESAI_SAICR_ALC		(1 << ESAI_SAICR_ALC_SHIFT)
207#define ESAI_SAICR_TEBE_SHIFT	7
208#define ESAI_SAICR_TEBE_MASK	(1 << ESAI_SAICR_TEBE_SHIFT)
209#define ESAI_SAICR_TEBE		(1 << ESAI_SAICR_TEBE_SHIFT)
210#define ESAI_SAICR_SYNC_SHIFT	6
211#define ESAI_SAICR_SYNC_MASK	(1 << ESAI_SAICR_SYNC_SHIFT)
212#define ESAI_SAICR_SYNC		(1 << ESAI_SAICR_SYNC_SHIFT)
213#define ESAI_SAICR_OF2_SHIFT	2
214#define ESAI_SAICR_OF2_MASK	(1 << ESAI_SAICR_OF2_SHIFT)
215#define ESAI_SAICR_OF2		(1 << ESAI_SAICR_OF2_SHIFT)
216#define ESAI_SAICR_OF1_SHIFT	1
217#define ESAI_SAICR_OF1_MASK	(1 << ESAI_SAICR_OF1_SHIFT)
218#define ESAI_SAICR_OF1		(1 << ESAI_SAICR_OF1_SHIFT)
219#define ESAI_SAICR_OF0_SHIFT	0
220#define ESAI_SAICR_OF0_MASK	(1 << ESAI_SAICR_OF0_SHIFT)
221#define ESAI_SAICR_OF0		(1 << ESAI_SAICR_OF0_SHIFT)
222
223/*
224 * Transmit Control Register -- REG_ESAI_TCR 0xD4
225 * Receive Control Register -- REG_ESAI_RCR 0xDC
226 */
227#define ESAI_xCR_xLIE_SHIFT	23
228#define ESAI_xCR_xLIE_MASK	(1 << ESAI_xCR_xLIE_SHIFT)
229#define ESAI_xCR_xLIE		(1 << ESAI_xCR_xLIE_SHIFT)
230#define ESAI_xCR_xIE_SHIFT	22
231#define ESAI_xCR_xIE_MASK	(1 << ESAI_xCR_xIE_SHIFT)
232#define ESAI_xCR_xIE		(1 << ESAI_xCR_xIE_SHIFT)
233#define ESAI_xCR_xEDIE_SHIFT	21
234#define ESAI_xCR_xEDIE_MASK	(1 << ESAI_xCR_xEDIE_SHIFT)
235#define ESAI_xCR_xEDIE		(1 << ESAI_xCR_xEDIE_SHIFT)
236#define ESAI_xCR_xEIE_SHIFT	20
237#define ESAI_xCR_xEIE_MASK	(1 << ESAI_xCR_xEIE_SHIFT)
238#define ESAI_xCR_xEIE		(1 << ESAI_xCR_xEIE_SHIFT)
239#define ESAI_xCR_xPR_SHIFT	19
240#define ESAI_xCR_xPR_MASK	(1 << ESAI_xCR_xPR_SHIFT)
241#define ESAI_xCR_xPR		(1 << ESAI_xCR_xPR_SHIFT)
242#define ESAI_xCR_PADC_SHIFT	17
243#define ESAI_xCR_PADC_MASK	(1 << ESAI_xCR_PADC_SHIFT)
244#define ESAI_xCR_PADC		(1 << ESAI_xCR_PADC_SHIFT)
245#define ESAI_xCR_xFSR_SHIFT	16
246#define ESAI_xCR_xFSR_MASK	(1 << ESAI_xCR_xFSR_SHIFT)
247#define ESAI_xCR_xFSR		(1 << ESAI_xCR_xFSR_SHIFT)
248#define ESAI_xCR_xFSL_SHIFT	15
249#define ESAI_xCR_xFSL_MASK	(1 << ESAI_xCR_xFSL_SHIFT)
250#define ESAI_xCR_xFSL		(1 << ESAI_xCR_xFSL_SHIFT)
251#define ESAI_xCR_xSWS_SHIFT	10
252#define ESAI_xCR_xSWS_WIDTH	5
253#define ESAI_xCR_xSWS_MASK	(((1 << ESAI_xCR_xSWS_WIDTH) - 1) << ESAI_xCR_xSWS_SHIFT)
254#define ESAI_xCR_xSWS(s, w)	((w < 24 ? (s - w + ((w - 8) >> 2)) : (s < 32 ? 0x1e : 0x1f)) << ESAI_xCR_xSWS_SHIFT)
255#define ESAI_xCR_xMOD_SHIFT	8
256#define ESAI_xCR_xMOD_WIDTH	2
257#define ESAI_xCR_xMOD_MASK	(((1 << ESAI_xCR_xMOD_WIDTH) - 1) << ESAI_xCR_xMOD_SHIFT)
258#define ESAI_xCR_xMOD_ONDEMAND	(0x1 << ESAI_xCR_xMOD_SHIFT)
259#define ESAI_xCR_xMOD_NETWORK	(0x1 << ESAI_xCR_xMOD_SHIFT)
260#define ESAI_xCR_xMOD_AC97	(0x3 << ESAI_xCR_xMOD_SHIFT)
261#define ESAI_xCR_xWA_SHIFT	7
262#define ESAI_xCR_xWA_MASK	(1 << ESAI_xCR_xWA_SHIFT)
263#define ESAI_xCR_xWA		(1 << ESAI_xCR_xWA_SHIFT)
264#define ESAI_xCR_xSHFD_SHIFT	6
265#define ESAI_xCR_xSHFD_MASK	(1 << ESAI_xCR_xSHFD_SHIFT)
266#define ESAI_xCR_xSHFD		(1 << ESAI_xCR_xSHFD_SHIFT)
267#define ESAI_xCR_xE_SHIFT	0
268#define ESAI_xCR_TE_WIDTH	6
269#define ESAI_xCR_RE_WIDTH	4
270#define ESAI_xCR_TE_MASK	(((1 << ESAI_xCR_TE_WIDTH) - 1) << ESAI_xCR_xE_SHIFT)
271#define ESAI_xCR_RE_MASK	(((1 << ESAI_xCR_RE_WIDTH) - 1) << ESAI_xCR_xE_SHIFT)
272#define ESAI_xCR_TE(x) 		((ESAI_xCR_TE_MASK >> (ESAI_xCR_TE_WIDTH - x)) & ESAI_xCR_TE_MASK)
273#define ESAI_xCR_RE(x) 		((ESAI_xCR_RE_MASK >> (ESAI_xCR_RE_WIDTH - x)) & ESAI_xCR_RE_MASK)
274
275/*
276 * Transmit Clock Control Register -- REG_ESAI_TCCR 0xD8
277 * Receive Clock Control Register -- REG_ESAI_RCCR 0xE0
278 */
279#define ESAI_xCCR_xHCKD_SHIFT	23
280#define ESAI_xCCR_xHCKD_MASK	(1 << ESAI_xCCR_xHCKD_SHIFT)
281#define ESAI_xCCR_xHCKD		(1 << ESAI_xCCR_xHCKD_SHIFT)
282#define ESAI_xCCR_xFSD_SHIFT	22
283#define ESAI_xCCR_xFSD_MASK	(1 << ESAI_xCCR_xFSD_SHIFT)
284#define ESAI_xCCR_xFSD		(1 << ESAI_xCCR_xFSD_SHIFT)
285#define ESAI_xCCR_xCKD_SHIFT	21
286#define ESAI_xCCR_xCKD_MASK	(1 << ESAI_xCCR_xCKD_SHIFT)
287#define ESAI_xCCR_xCKD		(1 << ESAI_xCCR_xCKD_SHIFT)
288#define ESAI_xCCR_xHCKP_SHIFT	20
289#define ESAI_xCCR_xHCKP_MASK	(1 << ESAI_xCCR_xHCKP_SHIFT)
290#define ESAI_xCCR_xHCKP		(1 << ESAI_xCCR_xHCKP_SHIFT)
291#define ESAI_xCCR_xFSP_SHIFT	19
292#define ESAI_xCCR_xFSP_MASK	(1 << ESAI_xCCR_xFSP_SHIFT)
293#define ESAI_xCCR_xFSP		(1 << ESAI_xCCR_xFSP_SHIFT)
294#define ESAI_xCCR_xCKP_SHIFT	18
295#define ESAI_xCCR_xCKP_MASK	(1 << ESAI_xCCR_xCKP_SHIFT)
296#define ESAI_xCCR_xCKP		(1 << ESAI_xCCR_xCKP_SHIFT)
297#define ESAI_xCCR_xFP_SHIFT	14
298#define ESAI_xCCR_xFP_WIDTH	4
299#define ESAI_xCCR_xFP_MASK	(((1 << ESAI_xCCR_xFP_WIDTH) - 1) << ESAI_xCCR_xFP_SHIFT)
300#define ESAI_xCCR_xFP(v)	((((v) - 1) << ESAI_xCCR_xFP_SHIFT) & ESAI_xCCR_xFP_MASK)
301#define ESAI_xCCR_xDC_SHIFT     9
302#define ESAI_xCCR_xDC_WIDTH	5
303#define ESAI_xCCR_xDC_MASK	(((1 << ESAI_xCCR_xDC_WIDTH) - 1) << ESAI_xCCR_xDC_SHIFT)
304#define ESAI_xCCR_xDC(v)	((((v) - 1) << ESAI_xCCR_xDC_SHIFT) & ESAI_xCCR_xDC_MASK)
305#define ESAI_xCCR_xPSR_SHIFT	8
306#define ESAI_xCCR_xPSR_MASK	(1 << ESAI_xCCR_xPSR_SHIFT)
307#define ESAI_xCCR_xPSR_BYPASS	(1 << ESAI_xCCR_xPSR_SHIFT)
308#define ESAI_xCCR_xPSR_DIV8	(0 << ESAI_xCCR_xPSR_SHIFT)
309#define ESAI_xCCR_xPM_SHIFT     0
310#define ESAI_xCCR_xPM_WIDTH     8
311#define ESAI_xCCR_xPM_MASK	(((1 << ESAI_xCCR_xPM_WIDTH) - 1) << ESAI_xCCR_xPM_SHIFT)
312#define ESAI_xCCR_xPM(v)	((((v) - 1) << ESAI_xCCR_xPM_SHIFT) & ESAI_xCCR_xPM_MASK)
313
314/* Transmit Slot Mask Register A/B -- REG_ESAI_TSMA/B 0xE4 ~ 0xF0 */
315#define ESAI_xSMA_xS_SHIFT	0
316#define ESAI_xSMA_xS_WIDTH	16
317#define ESAI_xSMA_xS_MASK	(((1 << ESAI_xSMA_xS_WIDTH) - 1) << ESAI_xSMA_xS_SHIFT)
318#define ESAI_xSMA_xS(v)		((v) & ESAI_xSMA_xS_MASK)
319#define ESAI_xSMB_xS_SHIFT	0
320#define ESAI_xSMB_xS_WIDTH	16
321#define ESAI_xSMB_xS_MASK	(((1 << ESAI_xSMB_xS_WIDTH) - 1) << ESAI_xSMB_xS_SHIFT)
322#define ESAI_xSMB_xS(v)		(((v) >> ESAI_xSMA_xS_WIDTH) & ESAI_xSMB_xS_MASK)
323
324/* Port C Direction Register -- REG_ESAI_PRRC 0xF8 */
325#define ESAI_PRRC_PDC_SHIFT	0
326#define ESAI_PRRC_PDC_WIDTH	12
327#define ESAI_PRRC_PDC_MASK	(((1 << ESAI_PRRC_PDC_WIDTH) - 1) << ESAI_PRRC_PDC_SHIFT)
328#define ESAI_PRRC_PDC(v)	((v) & ESAI_PRRC_PDC_MASK)
329
330/* Port C Control Register -- REG_ESAI_PCRC 0xFC */
331#define ESAI_PCRC_PC_SHIFT	0
332#define ESAI_PCRC_PC_WIDTH	12
333#define ESAI_PCRC_PC_MASK	(((1 << ESAI_PCRC_PC_WIDTH) - 1) << ESAI_PCRC_PC_SHIFT)
334#define ESAI_PCRC_PC(v)		((v) & ESAI_PCRC_PC_MASK)
335
336#define ESAI_GPIO		0xfff
337
338/* ESAI clock source */
339#define ESAI_HCKT_FSYS		0
340#define ESAI_HCKT_EXTAL		1
341#define ESAI_HCKR_FSYS		2
342#define ESAI_HCKR_EXTAL		3
343
344/* ESAI clock divider */
345#define ESAI_TX_DIV_PSR		0
346#define ESAI_TX_DIV_PM		1
347#define ESAI_TX_DIV_FP		2
348#define ESAI_RX_DIV_PSR		3
349#define ESAI_RX_DIV_PM		4
350#define ESAI_RX_DIV_FP		5
351#endif /* _FSL_ESAI_DAI_H */
v5.14.15
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 * fsl_esai.h - ALSA ESAI interface for the Freescale i.MX SoC
  4 *
  5 * Copyright (C) 2014 Freescale Semiconductor, Inc.
  6 *
  7 * Author: Nicolin Chen <Guangyu.Chen@freescale.com>
  8 */
  9
 10#ifndef _FSL_ESAI_DAI_H
 11#define _FSL_ESAI_DAI_H
 12
 13/* ESAI Register Map */
 14#define REG_ESAI_ETDR		0x00
 15#define REG_ESAI_ERDR		0x04
 16#define REG_ESAI_ECR		0x08
 17#define REG_ESAI_ESR		0x0C
 18#define REG_ESAI_TFCR		0x10
 19#define REG_ESAI_TFSR		0x14
 20#define REG_ESAI_RFCR		0x18
 21#define REG_ESAI_RFSR		0x1C
 22#define REG_ESAI_xFCR(tx)	(tx ? REG_ESAI_TFCR : REG_ESAI_RFCR)
 23#define REG_ESAI_xFSR(tx)	(tx ? REG_ESAI_TFSR : REG_ESAI_RFSR)
 24#define REG_ESAI_TX0		0x80
 25#define REG_ESAI_TX1		0x84
 26#define REG_ESAI_TX2		0x88
 27#define REG_ESAI_TX3		0x8C
 28#define REG_ESAI_TX4		0x90
 29#define REG_ESAI_TX5		0x94
 30#define REG_ESAI_TSR		0x98
 31#define REG_ESAI_RX0		0xA0
 32#define REG_ESAI_RX1		0xA4
 33#define REG_ESAI_RX2		0xA8
 34#define REG_ESAI_RX3		0xAC
 35#define REG_ESAI_SAISR		0xCC
 36#define REG_ESAI_SAICR		0xD0
 37#define REG_ESAI_TCR		0xD4
 38#define REG_ESAI_TCCR		0xD8
 39#define REG_ESAI_RCR		0xDC
 40#define REG_ESAI_RCCR		0xE0
 41#define REG_ESAI_xCR(tx)	(tx ? REG_ESAI_TCR : REG_ESAI_RCR)
 42#define REG_ESAI_xCCR(tx)	(tx ? REG_ESAI_TCCR : REG_ESAI_RCCR)
 43#define REG_ESAI_TSMA		0xE4
 44#define REG_ESAI_TSMB		0xE8
 45#define REG_ESAI_RSMA		0xEC
 46#define REG_ESAI_RSMB		0xF0
 47#define REG_ESAI_xSMA(tx)	(tx ? REG_ESAI_TSMA : REG_ESAI_RSMA)
 48#define REG_ESAI_xSMB(tx)	(tx ? REG_ESAI_TSMB : REG_ESAI_RSMB)
 49#define REG_ESAI_PRRC		0xF8
 50#define REG_ESAI_PCRC		0xFC
 51
 52/* ESAI Control Register -- REG_ESAI_ECR 0x8 */
 53#define ESAI_ECR_ETI_SHIFT	19
 54#define ESAI_ECR_ETI_MASK	(1 << ESAI_ECR_ETI_SHIFT)
 55#define ESAI_ECR_ETI		(1 << ESAI_ECR_ETI_SHIFT)
 56#define ESAI_ECR_ETO_SHIFT	18
 57#define ESAI_ECR_ETO_MASK	(1 << ESAI_ECR_ETO_SHIFT)
 58#define ESAI_ECR_ETO		(1 << ESAI_ECR_ETO_SHIFT)
 59#define ESAI_ECR_ERI_SHIFT	17
 60#define ESAI_ECR_ERI_MASK	(1 << ESAI_ECR_ERI_SHIFT)
 61#define ESAI_ECR_ERI		(1 << ESAI_ECR_ERI_SHIFT)
 62#define ESAI_ECR_ERO_SHIFT	16
 63#define ESAI_ECR_ERO_MASK	(1 << ESAI_ECR_ERO_SHIFT)
 64#define ESAI_ECR_ERO		(1 << ESAI_ECR_ERO_SHIFT)
 65#define ESAI_ECR_ERST_SHIFT	1
 66#define ESAI_ECR_ERST_MASK	(1 << ESAI_ECR_ERST_SHIFT)
 67#define ESAI_ECR_ERST		(1 << ESAI_ECR_ERST_SHIFT)
 68#define ESAI_ECR_ESAIEN_SHIFT	0
 69#define ESAI_ECR_ESAIEN_MASK	(1 << ESAI_ECR_ESAIEN_SHIFT)
 70#define ESAI_ECR_ESAIEN		(1 << ESAI_ECR_ESAIEN_SHIFT)
 71
 72/* ESAI Status Register -- REG_ESAI_ESR 0xC */
 73#define ESAI_ESR_TINIT_SHIFT	10
 74#define ESAI_ESR_TINIT_MASK	(1 << ESAI_ESR_TINIT_SHIFT)
 75#define ESAI_ESR_TINIT		(1 << ESAI_ESR_TINIT_SHIFT)
 76#define ESAI_ESR_RFF_SHIFT	9
 77#define ESAI_ESR_RFF_MASK	(1 << ESAI_ESR_RFF_SHIFT)
 78#define ESAI_ESR_RFF		(1 << ESAI_ESR_RFF_SHIFT)
 79#define ESAI_ESR_TFE_SHIFT	8
 80#define ESAI_ESR_TFE_MASK	(1 << ESAI_ESR_TFE_SHIFT)
 81#define ESAI_ESR_TFE		(1 << ESAI_ESR_TFE_SHIFT)
 82#define ESAI_ESR_TLS_SHIFT	7
 83#define ESAI_ESR_TLS_MASK	(1 << ESAI_ESR_TLS_SHIFT)
 84#define ESAI_ESR_TLS		(1 << ESAI_ESR_TLS_SHIFT)
 85#define ESAI_ESR_TDE_SHIFT	6
 86#define ESAI_ESR_TDE_MASK	(1 << ESAI_ESR_TDE_SHIFT)
 87#define ESAI_ESR_TDE		(1 << ESAI_ESR_TDE_SHIFT)
 88#define ESAI_ESR_TED_SHIFT	5
 89#define ESAI_ESR_TED_MASK	(1 << ESAI_ESR_TED_SHIFT)
 90#define ESAI_ESR_TED		(1 << ESAI_ESR_TED_SHIFT)
 91#define ESAI_ESR_TD_SHIFT	4
 92#define ESAI_ESR_TD_MASK	(1 << ESAI_ESR_TD_SHIFT)
 93#define ESAI_ESR_TD		(1 << ESAI_ESR_TD_SHIFT)
 94#define ESAI_ESR_RLS_SHIFT	3
 95#define ESAI_ESR_RLS_MASK	(1 << ESAI_ESR_RLS_SHIFT)
 96#define ESAI_ESR_RLS		(1 << ESAI_ESR_RLS_SHIFT)
 97#define ESAI_ESR_RDE_SHIFT	2
 98#define ESAI_ESR_RDE_MASK	(1 << ESAI_ESR_RDE_SHIFT)
 99#define ESAI_ESR_RDE		(1 << ESAI_ESR_RDE_SHIFT)
100#define ESAI_ESR_RED_SHIFT	1
101#define ESAI_ESR_RED_MASK	(1 << ESAI_ESR_RED_SHIFT)
102#define ESAI_ESR_RED		(1 << ESAI_ESR_RED_SHIFT)
103#define ESAI_ESR_RD_SHIFT	0
104#define ESAI_ESR_RD_MASK	(1 << ESAI_ESR_RD_SHIFT)
105#define ESAI_ESR_RD		(1 << ESAI_ESR_RD_SHIFT)
106
107/*
108 * Transmit FIFO Configuration Register -- REG_ESAI_TFCR 0x10
109 * Receive FIFO Configuration Register -- REG_ESAI_RFCR 0x18
110 */
111#define ESAI_xFCR_TIEN_SHIFT	19
112#define ESAI_xFCR_TIEN_MASK	(1 << ESAI_xFCR_TIEN_SHIFT)
113#define ESAI_xFCR_TIEN		(1 << ESAI_xFCR_TIEN_SHIFT)
114#define ESAI_xFCR_REXT_SHIFT	19
115#define ESAI_xFCR_REXT_MASK	(1 << ESAI_xFCR_REXT_SHIFT)
116#define ESAI_xFCR_REXT		(1 << ESAI_xFCR_REXT_SHIFT)
117#define ESAI_xFCR_xWA_SHIFT	16
118#define ESAI_xFCR_xWA_WIDTH	3
119#define ESAI_xFCR_xWA_MASK	(((1 << ESAI_xFCR_xWA_WIDTH) - 1) << ESAI_xFCR_xWA_SHIFT)
120#define ESAI_xFCR_xWA(v)	(((8 - ((v) >> 2)) << ESAI_xFCR_xWA_SHIFT) & ESAI_xFCR_xWA_MASK)
121#define ESAI_xFCR_xFWM_SHIFT	8
122#define ESAI_xFCR_xFWM_WIDTH	8
123#define ESAI_xFCR_xFWM_MASK	(((1 << ESAI_xFCR_xFWM_WIDTH) - 1) << ESAI_xFCR_xFWM_SHIFT)
124#define ESAI_xFCR_xFWM(v)	((((v) - 1) << ESAI_xFCR_xFWM_SHIFT) & ESAI_xFCR_xFWM_MASK)
125#define ESAI_xFCR_xE_SHIFT	2
126#define ESAI_xFCR_TE_WIDTH	6
127#define ESAI_xFCR_RE_WIDTH	4
128#define ESAI_xFCR_TE_MASK	(((1 << ESAI_xFCR_TE_WIDTH) - 1) << ESAI_xFCR_xE_SHIFT)
129#define ESAI_xFCR_RE_MASK	(((1 << ESAI_xFCR_RE_WIDTH) - 1) << ESAI_xFCR_xE_SHIFT)
130#define ESAI_xFCR_TE(x) 	((ESAI_xFCR_TE_MASK >> (ESAI_xFCR_TE_WIDTH - x)) & ESAI_xFCR_TE_MASK)
131#define ESAI_xFCR_RE(x) 	((ESAI_xFCR_RE_MASK >> (ESAI_xFCR_RE_WIDTH - x)) & ESAI_xFCR_RE_MASK)
132#define ESAI_xFCR_xFR_SHIFT	1
133#define ESAI_xFCR_xFR_MASK	(1 << ESAI_xFCR_xFR_SHIFT)
134#define ESAI_xFCR_xFR		(1 << ESAI_xFCR_xFR_SHIFT)
135#define ESAI_xFCR_xFEN_SHIFT	0
136#define ESAI_xFCR_xFEN_MASK	(1 << ESAI_xFCR_xFEN_SHIFT)
137#define ESAI_xFCR_xFEN		(1 << ESAI_xFCR_xFEN_SHIFT)
138
139/*
140 * Transmit FIFO Status Register -- REG_ESAI_TFSR 0x14
141 * Receive FIFO Status Register --REG_ESAI_RFSR 0x1C
142 */
143#define ESAI_xFSR_NTFO_SHIFT	12
144#define ESAI_xFSR_NRFI_SHIFT	12
145#define ESAI_xFSR_NTFI_SHIFT	8
146#define ESAI_xFSR_NRFO_SHIFT	8
147#define ESAI_xFSR_NTFx_WIDTH	3
148#define ESAI_xFSR_NRFx_WIDTH	2
149#define ESAI_xFSR_NTFO_MASK	(((1 << ESAI_xFSR_NTFx_WIDTH) - 1) << ESAI_xFSR_NTFO_SHIFT)
150#define ESAI_xFSR_NTFI_MASK	(((1 << ESAI_xFSR_NTFx_WIDTH) - 1) << ESAI_xFSR_NTFI_SHIFT)
151#define ESAI_xFSR_NRFO_MASK	(((1 << ESAI_xFSR_NRFx_WIDTH) - 1) << ESAI_xFSR_NRFO_SHIFT)
152#define ESAI_xFSR_NRFI_MASK	(((1 << ESAI_xFSR_NRFx_WIDTH) - 1) << ESAI_xFSR_NRFI_SHIFT)
153#define ESAI_xFSR_xFCNT_SHIFT	0
154#define ESAI_xFSR_xFCNT_WIDTH	8
155#define ESAI_xFSR_xFCNT_MASK	(((1 << ESAI_xFSR_xFCNT_WIDTH) - 1) << ESAI_xFSR_xFCNT_SHIFT)
156
157/* ESAI Transmit Slot Register -- REG_ESAI_TSR 0x98 */
158#define ESAI_TSR_SHIFT		0
159#define ESAI_TSR_WIDTH		24
160#define ESAI_TSR_MASK		(((1 << ESAI_TSR_WIDTH) - 1) << ESAI_TSR_SHIFT)
161
162/* Serial Audio Interface Status Register -- REG_ESAI_SAISR 0xCC */
163#define ESAI_SAISR_TODFE_SHIFT	17
164#define ESAI_SAISR_TODFE_MASK	(1 << ESAI_SAISR_TODFE_SHIFT)
165#define ESAI_SAISR_TODFE	(1 << ESAI_SAISR_TODFE_SHIFT)
166#define ESAI_SAISR_TEDE_SHIFT	16
167#define ESAI_SAISR_TEDE_MASK	(1 << ESAI_SAISR_TEDE_SHIFT)
168#define ESAI_SAISR_TEDE		(1 << ESAI_SAISR_TEDE_SHIFT)
169#define ESAI_SAISR_TDE_SHIFT	15
170#define ESAI_SAISR_TDE_MASK	(1 << ESAI_SAISR_TDE_SHIFT)
171#define ESAI_SAISR_TDE		(1 << ESAI_SAISR_TDE_SHIFT)
172#define ESAI_SAISR_TUE_SHIFT	14
173#define ESAI_SAISR_TUE_MASK	(1 << ESAI_SAISR_TUE_SHIFT)
174#define ESAI_SAISR_TUE		(1 << ESAI_SAISR_TUE_SHIFT)
175#define ESAI_SAISR_TFS_SHIFT	13
176#define ESAI_SAISR_TFS_MASK	(1 << ESAI_SAISR_TFS_SHIFT)
177#define ESAI_SAISR_TFS		(1 << ESAI_SAISR_TFS_SHIFT)
178#define ESAI_SAISR_RODF_SHIFT	10
179#define ESAI_SAISR_RODF_MASK	(1 << ESAI_SAISR_RODF_SHIFT)
180#define ESAI_SAISR_RODF		(1 << ESAI_SAISR_RODF_SHIFT)
181#define ESAI_SAISR_REDF_SHIFT	9
182#define ESAI_SAISR_REDF_MASK	(1 << ESAI_SAISR_REDF_SHIFT)
183#define ESAI_SAISR_REDF		(1 << ESAI_SAISR_REDF_SHIFT)
184#define ESAI_SAISR_RDF_SHIFT	8
185#define ESAI_SAISR_RDF_MASK	(1 << ESAI_SAISR_RDF_SHIFT)
186#define ESAI_SAISR_RDF		(1 << ESAI_SAISR_RDF_SHIFT)
187#define ESAI_SAISR_ROE_SHIFT	7
188#define ESAI_SAISR_ROE_MASK	(1 << ESAI_SAISR_ROE_SHIFT)
189#define ESAI_SAISR_ROE		(1 << ESAI_SAISR_ROE_SHIFT)
190#define ESAI_SAISR_RFS_SHIFT	6
191#define ESAI_SAISR_RFS_MASK	(1 << ESAI_SAISR_RFS_SHIFT)
192#define ESAI_SAISR_RFS		(1 << ESAI_SAISR_RFS_SHIFT)
193#define ESAI_SAISR_IF2_SHIFT	2
194#define ESAI_SAISR_IF2_MASK	(1 << ESAI_SAISR_IF2_SHIFT)
195#define ESAI_SAISR_IF2		(1 << ESAI_SAISR_IF2_SHIFT)
196#define ESAI_SAISR_IF1_SHIFT	1
197#define ESAI_SAISR_IF1_MASK	(1 << ESAI_SAISR_IF1_SHIFT)
198#define ESAI_SAISR_IF1		(1 << ESAI_SAISR_IF1_SHIFT)
199#define ESAI_SAISR_IF0_SHIFT	0
200#define ESAI_SAISR_IF0_MASK	(1 << ESAI_SAISR_IF0_SHIFT)
201#define ESAI_SAISR_IF0		(1 << ESAI_SAISR_IF0_SHIFT)
202
203/* Serial Audio Interface Control Register -- REG_ESAI_SAICR 0xD0 */
204#define ESAI_SAICR_ALC_SHIFT	8
205#define ESAI_SAICR_ALC_MASK	(1 << ESAI_SAICR_ALC_SHIFT)
206#define ESAI_SAICR_ALC		(1 << ESAI_SAICR_ALC_SHIFT)
207#define ESAI_SAICR_TEBE_SHIFT	7
208#define ESAI_SAICR_TEBE_MASK	(1 << ESAI_SAICR_TEBE_SHIFT)
209#define ESAI_SAICR_TEBE		(1 << ESAI_SAICR_TEBE_SHIFT)
210#define ESAI_SAICR_SYNC_SHIFT	6
211#define ESAI_SAICR_SYNC_MASK	(1 << ESAI_SAICR_SYNC_SHIFT)
212#define ESAI_SAICR_SYNC		(1 << ESAI_SAICR_SYNC_SHIFT)
213#define ESAI_SAICR_OF2_SHIFT	2
214#define ESAI_SAICR_OF2_MASK	(1 << ESAI_SAICR_OF2_SHIFT)
215#define ESAI_SAICR_OF2		(1 << ESAI_SAICR_OF2_SHIFT)
216#define ESAI_SAICR_OF1_SHIFT	1
217#define ESAI_SAICR_OF1_MASK	(1 << ESAI_SAICR_OF1_SHIFT)
218#define ESAI_SAICR_OF1		(1 << ESAI_SAICR_OF1_SHIFT)
219#define ESAI_SAICR_OF0_SHIFT	0
220#define ESAI_SAICR_OF0_MASK	(1 << ESAI_SAICR_OF0_SHIFT)
221#define ESAI_SAICR_OF0		(1 << ESAI_SAICR_OF0_SHIFT)
222
223/*
224 * Transmit Control Register -- REG_ESAI_TCR 0xD4
225 * Receive Control Register -- REG_ESAI_RCR 0xDC
226 */
227#define ESAI_xCR_xLIE_SHIFT	23
228#define ESAI_xCR_xLIE_MASK	(1 << ESAI_xCR_xLIE_SHIFT)
229#define ESAI_xCR_xLIE		(1 << ESAI_xCR_xLIE_SHIFT)
230#define ESAI_xCR_xIE_SHIFT	22
231#define ESAI_xCR_xIE_MASK	(1 << ESAI_xCR_xIE_SHIFT)
232#define ESAI_xCR_xIE		(1 << ESAI_xCR_xIE_SHIFT)
233#define ESAI_xCR_xEDIE_SHIFT	21
234#define ESAI_xCR_xEDIE_MASK	(1 << ESAI_xCR_xEDIE_SHIFT)
235#define ESAI_xCR_xEDIE		(1 << ESAI_xCR_xEDIE_SHIFT)
236#define ESAI_xCR_xEIE_SHIFT	20
237#define ESAI_xCR_xEIE_MASK	(1 << ESAI_xCR_xEIE_SHIFT)
238#define ESAI_xCR_xEIE		(1 << ESAI_xCR_xEIE_SHIFT)
239#define ESAI_xCR_xPR_SHIFT	19
240#define ESAI_xCR_xPR_MASK	(1 << ESAI_xCR_xPR_SHIFT)
241#define ESAI_xCR_xPR		(1 << ESAI_xCR_xPR_SHIFT)
242#define ESAI_xCR_PADC_SHIFT	17
243#define ESAI_xCR_PADC_MASK	(1 << ESAI_xCR_PADC_SHIFT)
244#define ESAI_xCR_PADC		(1 << ESAI_xCR_PADC_SHIFT)
245#define ESAI_xCR_xFSR_SHIFT	16
246#define ESAI_xCR_xFSR_MASK	(1 << ESAI_xCR_xFSR_SHIFT)
247#define ESAI_xCR_xFSR		(1 << ESAI_xCR_xFSR_SHIFT)
248#define ESAI_xCR_xFSL_SHIFT	15
249#define ESAI_xCR_xFSL_MASK	(1 << ESAI_xCR_xFSL_SHIFT)
250#define ESAI_xCR_xFSL		(1 << ESAI_xCR_xFSL_SHIFT)
251#define ESAI_xCR_xSWS_SHIFT	10
252#define ESAI_xCR_xSWS_WIDTH	5
253#define ESAI_xCR_xSWS_MASK	(((1 << ESAI_xCR_xSWS_WIDTH) - 1) << ESAI_xCR_xSWS_SHIFT)
254#define ESAI_xCR_xSWS(s, w)	((w < 24 ? (s - w + ((w - 8) >> 2)) : (s < 32 ? 0x1e : 0x1f)) << ESAI_xCR_xSWS_SHIFT)
255#define ESAI_xCR_xMOD_SHIFT	8
256#define ESAI_xCR_xMOD_WIDTH	2
257#define ESAI_xCR_xMOD_MASK	(((1 << ESAI_xCR_xMOD_WIDTH) - 1) << ESAI_xCR_xMOD_SHIFT)
258#define ESAI_xCR_xMOD_ONDEMAND	(0x1 << ESAI_xCR_xMOD_SHIFT)
259#define ESAI_xCR_xMOD_NETWORK	(0x1 << ESAI_xCR_xMOD_SHIFT)
260#define ESAI_xCR_xMOD_AC97	(0x3 << ESAI_xCR_xMOD_SHIFT)
261#define ESAI_xCR_xWA_SHIFT	7
262#define ESAI_xCR_xWA_MASK	(1 << ESAI_xCR_xWA_SHIFT)
263#define ESAI_xCR_xWA		(1 << ESAI_xCR_xWA_SHIFT)
264#define ESAI_xCR_xSHFD_SHIFT	6
265#define ESAI_xCR_xSHFD_MASK	(1 << ESAI_xCR_xSHFD_SHIFT)
266#define ESAI_xCR_xSHFD		(1 << ESAI_xCR_xSHFD_SHIFT)
267#define ESAI_xCR_xE_SHIFT	0
268#define ESAI_xCR_TE_WIDTH	6
269#define ESAI_xCR_RE_WIDTH	4
270#define ESAI_xCR_TE_MASK	(((1 << ESAI_xCR_TE_WIDTH) - 1) << ESAI_xCR_xE_SHIFT)
271#define ESAI_xCR_RE_MASK	(((1 << ESAI_xCR_RE_WIDTH) - 1) << ESAI_xCR_xE_SHIFT)
272#define ESAI_xCR_TE(x) 		((ESAI_xCR_TE_MASK >> (ESAI_xCR_TE_WIDTH - x)) & ESAI_xCR_TE_MASK)
273#define ESAI_xCR_RE(x) 		((ESAI_xCR_RE_MASK >> (ESAI_xCR_RE_WIDTH - x)) & ESAI_xCR_RE_MASK)
274
275/*
276 * Transmit Clock Control Register -- REG_ESAI_TCCR 0xD8
277 * Receive Clock Control Register -- REG_ESAI_RCCR 0xE0
278 */
279#define ESAI_xCCR_xHCKD_SHIFT	23
280#define ESAI_xCCR_xHCKD_MASK	(1 << ESAI_xCCR_xHCKD_SHIFT)
281#define ESAI_xCCR_xHCKD		(1 << ESAI_xCCR_xHCKD_SHIFT)
282#define ESAI_xCCR_xFSD_SHIFT	22
283#define ESAI_xCCR_xFSD_MASK	(1 << ESAI_xCCR_xFSD_SHIFT)
284#define ESAI_xCCR_xFSD		(1 << ESAI_xCCR_xFSD_SHIFT)
285#define ESAI_xCCR_xCKD_SHIFT	21
286#define ESAI_xCCR_xCKD_MASK	(1 << ESAI_xCCR_xCKD_SHIFT)
287#define ESAI_xCCR_xCKD		(1 << ESAI_xCCR_xCKD_SHIFT)
288#define ESAI_xCCR_xHCKP_SHIFT	20
289#define ESAI_xCCR_xHCKP_MASK	(1 << ESAI_xCCR_xHCKP_SHIFT)
290#define ESAI_xCCR_xHCKP		(1 << ESAI_xCCR_xHCKP_SHIFT)
291#define ESAI_xCCR_xFSP_SHIFT	19
292#define ESAI_xCCR_xFSP_MASK	(1 << ESAI_xCCR_xFSP_SHIFT)
293#define ESAI_xCCR_xFSP		(1 << ESAI_xCCR_xFSP_SHIFT)
294#define ESAI_xCCR_xCKP_SHIFT	18
295#define ESAI_xCCR_xCKP_MASK	(1 << ESAI_xCCR_xCKP_SHIFT)
296#define ESAI_xCCR_xCKP		(1 << ESAI_xCCR_xCKP_SHIFT)
297#define ESAI_xCCR_xFP_SHIFT	14
298#define ESAI_xCCR_xFP_WIDTH	4
299#define ESAI_xCCR_xFP_MASK	(((1 << ESAI_xCCR_xFP_WIDTH) - 1) << ESAI_xCCR_xFP_SHIFT)
300#define ESAI_xCCR_xFP(v)	((((v) - 1) << ESAI_xCCR_xFP_SHIFT) & ESAI_xCCR_xFP_MASK)
301#define ESAI_xCCR_xDC_SHIFT     9
302#define ESAI_xCCR_xDC_WIDTH	5
303#define ESAI_xCCR_xDC_MASK	(((1 << ESAI_xCCR_xDC_WIDTH) - 1) << ESAI_xCCR_xDC_SHIFT)
304#define ESAI_xCCR_xDC(v)	((((v) - 1) << ESAI_xCCR_xDC_SHIFT) & ESAI_xCCR_xDC_MASK)
305#define ESAI_xCCR_xPSR_SHIFT	8
306#define ESAI_xCCR_xPSR_MASK	(1 << ESAI_xCCR_xPSR_SHIFT)
307#define ESAI_xCCR_xPSR_BYPASS	(1 << ESAI_xCCR_xPSR_SHIFT)
308#define ESAI_xCCR_xPSR_DIV8	(0 << ESAI_xCCR_xPSR_SHIFT)
309#define ESAI_xCCR_xPM_SHIFT     0
310#define ESAI_xCCR_xPM_WIDTH     8
311#define ESAI_xCCR_xPM_MASK	(((1 << ESAI_xCCR_xPM_WIDTH) - 1) << ESAI_xCCR_xPM_SHIFT)
312#define ESAI_xCCR_xPM(v)	((((v) - 1) << ESAI_xCCR_xPM_SHIFT) & ESAI_xCCR_xPM_MASK)
313
314/* Transmit Slot Mask Register A/B -- REG_ESAI_TSMA/B 0xE4 ~ 0xF0 */
315#define ESAI_xSMA_xS_SHIFT	0
316#define ESAI_xSMA_xS_WIDTH	16
317#define ESAI_xSMA_xS_MASK	(((1 << ESAI_xSMA_xS_WIDTH) - 1) << ESAI_xSMA_xS_SHIFT)
318#define ESAI_xSMA_xS(v)		((v) & ESAI_xSMA_xS_MASK)
319#define ESAI_xSMB_xS_SHIFT	0
320#define ESAI_xSMB_xS_WIDTH	16
321#define ESAI_xSMB_xS_MASK	(((1 << ESAI_xSMB_xS_WIDTH) - 1) << ESAI_xSMB_xS_SHIFT)
322#define ESAI_xSMB_xS(v)		(((v) >> ESAI_xSMA_xS_WIDTH) & ESAI_xSMB_xS_MASK)
323
324/* Port C Direction Register -- REG_ESAI_PRRC 0xF8 */
325#define ESAI_PRRC_PDC_SHIFT	0
326#define ESAI_PRRC_PDC_WIDTH	12
327#define ESAI_PRRC_PDC_MASK	(((1 << ESAI_PRRC_PDC_WIDTH) - 1) << ESAI_PRRC_PDC_SHIFT)
328#define ESAI_PRRC_PDC(v)	((v) & ESAI_PRRC_PDC_MASK)
329
330/* Port C Control Register -- REG_ESAI_PCRC 0xFC */
331#define ESAI_PCRC_PC_SHIFT	0
332#define ESAI_PCRC_PC_WIDTH	12
333#define ESAI_PCRC_PC_MASK	(((1 << ESAI_PCRC_PC_WIDTH) - 1) << ESAI_PCRC_PC_SHIFT)
334#define ESAI_PCRC_PC(v)		((v) & ESAI_PCRC_PC_MASK)
335
336#define ESAI_GPIO		0xfff
337
338/* ESAI clock source */
339#define ESAI_HCKT_FSYS		0
340#define ESAI_HCKT_EXTAL		1
341#define ESAI_HCKR_FSYS		2
342#define ESAI_HCKR_EXTAL		3
343
344/* ESAI clock divider */
345#define ESAI_TX_DIV_PSR		0
346#define ESAI_TX_DIV_PM		1
347#define ESAI_TX_DIV_FP		2
348#define ESAI_RX_DIV_PSR		3
349#define ESAI_RX_DIV_PM		4
350#define ESAI_RX_DIV_FP		5
351#endif /* _FSL_ESAI_DAI_H */