xref: /openbmc/linux/sound/soc/fsl/fsl_esai.h (revision 3eb66e91a25497065c5322b1268cbc3953642227)
1*3b5af9f1SFabio Estevam /* SPDX-License-Identifier: GPL-2.0 */
243d24e76SNicolin Chen /*
343d24e76SNicolin Chen  * fsl_esai.h - ALSA ESAI interface for the Freescale i.MX SoC
443d24e76SNicolin Chen  *
543d24e76SNicolin Chen  * Copyright (C) 2014 Freescale Semiconductor, Inc.
643d24e76SNicolin Chen  *
743d24e76SNicolin Chen  * Author: Nicolin Chen <Guangyu.Chen@freescale.com>
843d24e76SNicolin Chen  */
943d24e76SNicolin Chen 
1043d24e76SNicolin Chen #ifndef _FSL_ESAI_DAI_H
1143d24e76SNicolin Chen #define _FSL_ESAI_DAI_H
1243d24e76SNicolin Chen 
1343d24e76SNicolin Chen /* ESAI Register Map */
1443d24e76SNicolin Chen #define REG_ESAI_ETDR		0x00
1543d24e76SNicolin Chen #define REG_ESAI_ERDR		0x04
1643d24e76SNicolin Chen #define REG_ESAI_ECR		0x08
1743d24e76SNicolin Chen #define REG_ESAI_ESR		0x0C
1843d24e76SNicolin Chen #define REG_ESAI_TFCR		0x10
1943d24e76SNicolin Chen #define REG_ESAI_TFSR		0x14
2043d24e76SNicolin Chen #define REG_ESAI_RFCR		0x18
2143d24e76SNicolin Chen #define REG_ESAI_RFSR		0x1C
2243d24e76SNicolin Chen #define REG_ESAI_xFCR(tx)	(tx ? REG_ESAI_TFCR : REG_ESAI_RFCR)
2343d24e76SNicolin Chen #define REG_ESAI_xFSR(tx)	(tx ? REG_ESAI_TFSR : REG_ESAI_RFSR)
2443d24e76SNicolin Chen #define REG_ESAI_TX0		0x80
2543d24e76SNicolin Chen #define REG_ESAI_TX1		0x84
2643d24e76SNicolin Chen #define REG_ESAI_TX2		0x88
2743d24e76SNicolin Chen #define REG_ESAI_TX3		0x8C
2843d24e76SNicolin Chen #define REG_ESAI_TX4		0x90
2943d24e76SNicolin Chen #define REG_ESAI_TX5		0x94
3043d24e76SNicolin Chen #define REG_ESAI_TSR		0x98
3143d24e76SNicolin Chen #define REG_ESAI_RX0		0xA0
3243d24e76SNicolin Chen #define REG_ESAI_RX1		0xA4
3343d24e76SNicolin Chen #define REG_ESAI_RX2		0xA8
3443d24e76SNicolin Chen #define REG_ESAI_RX3		0xAC
3543d24e76SNicolin Chen #define REG_ESAI_SAISR		0xCC
3643d24e76SNicolin Chen #define REG_ESAI_SAICR		0xD0
3743d24e76SNicolin Chen #define REG_ESAI_TCR		0xD4
3843d24e76SNicolin Chen #define REG_ESAI_TCCR		0xD8
3943d24e76SNicolin Chen #define REG_ESAI_RCR		0xDC
4043d24e76SNicolin Chen #define REG_ESAI_RCCR		0xE0
4143d24e76SNicolin Chen #define REG_ESAI_xCR(tx)	(tx ? REG_ESAI_TCR : REG_ESAI_RCR)
4243d24e76SNicolin Chen #define REG_ESAI_xCCR(tx)	(tx ? REG_ESAI_TCCR : REG_ESAI_RCCR)
4343d24e76SNicolin Chen #define REG_ESAI_TSMA		0xE4
4443d24e76SNicolin Chen #define REG_ESAI_TSMB		0xE8
4543d24e76SNicolin Chen #define REG_ESAI_RSMA		0xEC
4643d24e76SNicolin Chen #define REG_ESAI_RSMB		0xF0
4743d24e76SNicolin Chen #define REG_ESAI_xSMA(tx)	(tx ? REG_ESAI_TSMA : REG_ESAI_RSMA)
4843d24e76SNicolin Chen #define REG_ESAI_xSMB(tx)	(tx ? REG_ESAI_TSMB : REG_ESAI_RSMB)
4943d24e76SNicolin Chen #define REG_ESAI_PRRC		0xF8
5043d24e76SNicolin Chen #define REG_ESAI_PCRC		0xFC
5143d24e76SNicolin Chen 
5243d24e76SNicolin Chen /* ESAI Control Register -- REG_ESAI_ECR 0x8 */
5343d24e76SNicolin Chen #define ESAI_ECR_ETI_SHIFT	19
5443d24e76SNicolin Chen #define ESAI_ECR_ETI_MASK	(1 << ESAI_ECR_ETI_SHIFT)
5543d24e76SNicolin Chen #define ESAI_ECR_ETI		(1 << ESAI_ECR_ETI_SHIFT)
5643d24e76SNicolin Chen #define ESAI_ECR_ETO_SHIFT	18
5743d24e76SNicolin Chen #define ESAI_ECR_ETO_MASK	(1 << ESAI_ECR_ETO_SHIFT)
5843d24e76SNicolin Chen #define ESAI_ECR_ETO		(1 << ESAI_ECR_ETO_SHIFT)
5943d24e76SNicolin Chen #define ESAI_ECR_ERI_SHIFT	17
6043d24e76SNicolin Chen #define ESAI_ECR_ERI_MASK	(1 << ESAI_ECR_ERI_SHIFT)
6143d24e76SNicolin Chen #define ESAI_ECR_ERI		(1 << ESAI_ECR_ERI_SHIFT)
6243d24e76SNicolin Chen #define ESAI_ECR_ERO_SHIFT	16
6343d24e76SNicolin Chen #define ESAI_ECR_ERO_MASK	(1 << ESAI_ECR_ERO_SHIFT)
6443d24e76SNicolin Chen #define ESAI_ECR_ERO		(1 << ESAI_ECR_ERO_SHIFT)
6543d24e76SNicolin Chen #define ESAI_ECR_ERST_SHIFT	1
6643d24e76SNicolin Chen #define ESAI_ECR_ERST_MASK	(1 << ESAI_ECR_ERST_SHIFT)
6743d24e76SNicolin Chen #define ESAI_ECR_ERST		(1 << ESAI_ECR_ERST_SHIFT)
6843d24e76SNicolin Chen #define ESAI_ECR_ESAIEN_SHIFT	0
6943d24e76SNicolin Chen #define ESAI_ECR_ESAIEN_MASK	(1 << ESAI_ECR_ESAIEN_SHIFT)
7043d24e76SNicolin Chen #define ESAI_ECR_ESAIEN		(1 << ESAI_ECR_ESAIEN_SHIFT)
7143d24e76SNicolin Chen 
7243d24e76SNicolin Chen /* ESAI Status Register -- REG_ESAI_ESR 0xC */
7343d24e76SNicolin Chen #define ESAI_ESR_TINIT_SHIFT	10
7443d24e76SNicolin Chen #define ESAI_ESR_TINIT_MASK	(1 << ESAI_ESR_TINIT_SHIFT)
7543d24e76SNicolin Chen #define ESAI_ESR_TINIT		(1 << ESAI_ESR_TINIT_SHIFT)
7643d24e76SNicolin Chen #define ESAI_ESR_RFF_SHIFT	9
7743d24e76SNicolin Chen #define ESAI_ESR_RFF_MASK	(1 << ESAI_ESR_RFF_SHIFT)
7843d24e76SNicolin Chen #define ESAI_ESR_RFF		(1 << ESAI_ESR_RFF_SHIFT)
7943d24e76SNicolin Chen #define ESAI_ESR_TFE_SHIFT	8
8043d24e76SNicolin Chen #define ESAI_ESR_TFE_MASK	(1 << ESAI_ESR_TFE_SHIFT)
8143d24e76SNicolin Chen #define ESAI_ESR_TFE		(1 << ESAI_ESR_TFE_SHIFT)
8243d24e76SNicolin Chen #define ESAI_ESR_TLS_SHIFT	7
8343d24e76SNicolin Chen #define ESAI_ESR_TLS_MASK	(1 << ESAI_ESR_TLS_SHIFT)
8443d24e76SNicolin Chen #define ESAI_ESR_TLS		(1 << ESAI_ESR_TLS_SHIFT)
8543d24e76SNicolin Chen #define ESAI_ESR_TDE_SHIFT	6
8643d24e76SNicolin Chen #define ESAI_ESR_TDE_MASK	(1 << ESAI_ESR_TDE_SHIFT)
8743d24e76SNicolin Chen #define ESAI_ESR_TDE		(1 << ESAI_ESR_TDE_SHIFT)
8843d24e76SNicolin Chen #define ESAI_ESR_TED_SHIFT	5
8943d24e76SNicolin Chen #define ESAI_ESR_TED_MASK	(1 << ESAI_ESR_TED_SHIFT)
9043d24e76SNicolin Chen #define ESAI_ESR_TED		(1 << ESAI_ESR_TED_SHIFT)
9143d24e76SNicolin Chen #define ESAI_ESR_TD_SHIFT	4
9243d24e76SNicolin Chen #define ESAI_ESR_TD_MASK	(1 << ESAI_ESR_TD_SHIFT)
9343d24e76SNicolin Chen #define ESAI_ESR_TD		(1 << ESAI_ESR_TD_SHIFT)
9443d24e76SNicolin Chen #define ESAI_ESR_RLS_SHIFT	3
9543d24e76SNicolin Chen #define ESAI_ESR_RLS_MASK	(1 << ESAI_ESR_RLS_SHIFT)
9643d24e76SNicolin Chen #define ESAI_ESR_RLS		(1 << ESAI_ESR_RLS_SHIFT)
9743d24e76SNicolin Chen #define ESAI_ESR_RDE_SHIFT	2
9843d24e76SNicolin Chen #define ESAI_ESR_RDE_MASK	(1 << ESAI_ESR_RDE_SHIFT)
9943d24e76SNicolin Chen #define ESAI_ESR_RDE		(1 << ESAI_ESR_RDE_SHIFT)
10043d24e76SNicolin Chen #define ESAI_ESR_RED_SHIFT	1
10143d24e76SNicolin Chen #define ESAI_ESR_RED_MASK	(1 << ESAI_ESR_RED_SHIFT)
10243d24e76SNicolin Chen #define ESAI_ESR_RED		(1 << ESAI_ESR_RED_SHIFT)
10343d24e76SNicolin Chen #define ESAI_ESR_RD_SHIFT	0
10443d24e76SNicolin Chen #define ESAI_ESR_RD_MASK	(1 << ESAI_ESR_RD_SHIFT)
10543d24e76SNicolin Chen #define ESAI_ESR_RD		(1 << ESAI_ESR_RD_SHIFT)
10643d24e76SNicolin Chen 
10743d24e76SNicolin Chen /*
10843d24e76SNicolin Chen  * Transmit FIFO Configuration Register -- REG_ESAI_TFCR 0x10
10943d24e76SNicolin Chen  * Receive FIFO Configuration Register -- REG_ESAI_RFCR 0x18
11043d24e76SNicolin Chen  */
11143d24e76SNicolin Chen #define ESAI_xFCR_TIEN_SHIFT	19
11243d24e76SNicolin Chen #define ESAI_xFCR_TIEN_MASK	(1 << ESAI_xFCR_TIEN_SHIFT)
11343d24e76SNicolin Chen #define ESAI_xFCR_TIEN		(1 << ESAI_xFCR_TIEN_SHIFT)
11443d24e76SNicolin Chen #define ESAI_xFCR_REXT_SHIFT	19
11543d24e76SNicolin Chen #define ESAI_xFCR_REXT_MASK	(1 << ESAI_xFCR_REXT_SHIFT)
11643d24e76SNicolin Chen #define ESAI_xFCR_REXT		(1 << ESAI_xFCR_REXT_SHIFT)
11743d24e76SNicolin Chen #define ESAI_xFCR_xWA_SHIFT	16
11843d24e76SNicolin Chen #define ESAI_xFCR_xWA_WIDTH	3
11943d24e76SNicolin Chen #define ESAI_xFCR_xWA_MASK	(((1 << ESAI_xFCR_xWA_WIDTH) - 1) << ESAI_xFCR_xWA_SHIFT)
12043d24e76SNicolin Chen #define ESAI_xFCR_xWA(v)	(((8 - ((v) >> 2)) << ESAI_xFCR_xWA_SHIFT) & ESAI_xFCR_xWA_MASK)
12143d24e76SNicolin Chen #define ESAI_xFCR_xFWM_SHIFT	8
12243d24e76SNicolin Chen #define ESAI_xFCR_xFWM_WIDTH	8
12343d24e76SNicolin Chen #define ESAI_xFCR_xFWM_MASK	(((1 << ESAI_xFCR_xFWM_WIDTH) - 1) << ESAI_xFCR_xFWM_SHIFT)
12443d24e76SNicolin Chen #define ESAI_xFCR_xFWM(v)	((((v) - 1) << ESAI_xFCR_xFWM_SHIFT) & ESAI_xFCR_xFWM_MASK)
12543d24e76SNicolin Chen #define ESAI_xFCR_xE_SHIFT	2
12643d24e76SNicolin Chen #define ESAI_xFCR_TE_WIDTH	6
12743d24e76SNicolin Chen #define ESAI_xFCR_RE_WIDTH	4
12843d24e76SNicolin Chen #define ESAI_xFCR_TE_MASK	(((1 << ESAI_xFCR_TE_WIDTH) - 1) << ESAI_xFCR_xE_SHIFT)
12943d24e76SNicolin Chen #define ESAI_xFCR_RE_MASK	(((1 << ESAI_xFCR_RE_WIDTH) - 1) << ESAI_xFCR_xE_SHIFT)
130de0d712aSShengjiu Wang #define ESAI_xFCR_TE(x) 	((ESAI_xFCR_TE_MASK >> (ESAI_xFCR_TE_WIDTH - x)) & ESAI_xFCR_TE_MASK)
131de0d712aSShengjiu Wang #define ESAI_xFCR_RE(x) 	((ESAI_xFCR_RE_MASK >> (ESAI_xFCR_RE_WIDTH - x)) & ESAI_xFCR_RE_MASK)
13243d24e76SNicolin Chen #define ESAI_xFCR_xFR_SHIFT	1
13343d24e76SNicolin Chen #define ESAI_xFCR_xFR_MASK	(1 << ESAI_xFCR_xFR_SHIFT)
13443d24e76SNicolin Chen #define ESAI_xFCR_xFR		(1 << ESAI_xFCR_xFR_SHIFT)
13543d24e76SNicolin Chen #define ESAI_xFCR_xFEN_SHIFT	0
13643d24e76SNicolin Chen #define ESAI_xFCR_xFEN_MASK	(1 << ESAI_xFCR_xFEN_SHIFT)
13743d24e76SNicolin Chen #define ESAI_xFCR_xFEN		(1 << ESAI_xFCR_xFEN_SHIFT)
13843d24e76SNicolin Chen 
13943d24e76SNicolin Chen /*
14043d24e76SNicolin Chen  * Transmit FIFO Status Register -- REG_ESAI_TFSR 0x14
14143d24e76SNicolin Chen  * Receive FIFO Status Register --REG_ESAI_RFSR 0x1C
14243d24e76SNicolin Chen  */
14343d24e76SNicolin Chen #define ESAI_xFSR_NTFO_SHIFT	12
14443d24e76SNicolin Chen #define ESAI_xFSR_NRFI_SHIFT	12
14543d24e76SNicolin Chen #define ESAI_xFSR_NTFI_SHIFT	8
14643d24e76SNicolin Chen #define ESAI_xFSR_NRFO_SHIFT	8
14743d24e76SNicolin Chen #define ESAI_xFSR_NTFx_WIDTH	3
14843d24e76SNicolin Chen #define ESAI_xFSR_NRFx_WIDTH	2
14943d24e76SNicolin Chen #define ESAI_xFSR_NTFO_MASK	(((1 << ESAI_xFSR_NTFx_WIDTH) - 1) << ESAI_xFSR_NTFO_SHIFT)
15043d24e76SNicolin Chen #define ESAI_xFSR_NTFI_MASK	(((1 << ESAI_xFSR_NTFx_WIDTH) - 1) << ESAI_xFSR_NTFI_SHIFT)
15143d24e76SNicolin Chen #define ESAI_xFSR_NRFO_MASK	(((1 << ESAI_xFSR_NRFx_WIDTH) - 1) << ESAI_xFSR_NRFO_SHIFT)
15243d24e76SNicolin Chen #define ESAI_xFSR_NRFI_MASK	(((1 << ESAI_xFSR_NRFx_WIDTH) - 1) << ESAI_xFSR_NRFI_SHIFT)
15343d24e76SNicolin Chen #define ESAI_xFSR_xFCNT_SHIFT	0
15443d24e76SNicolin Chen #define ESAI_xFSR_xFCNT_WIDTH	8
15543d24e76SNicolin Chen #define ESAI_xFSR_xFCNT_MASK	(((1 << ESAI_xFSR_xFCNT_WIDTH) - 1) << ESAI_xFSR_xFCNT_SHIFT)
15643d24e76SNicolin Chen 
15743d24e76SNicolin Chen /* ESAI Transmit Slot Register -- REG_ESAI_TSR 0x98 */
15843d24e76SNicolin Chen #define ESAI_TSR_SHIFT		0
15943d24e76SNicolin Chen #define ESAI_TSR_WIDTH		24
16043d24e76SNicolin Chen #define ESAI_TSR_MASK		(((1 << ESAI_TSR_WIDTH) - 1) << ESAI_TSR_SHIFT)
16143d24e76SNicolin Chen 
16243d24e76SNicolin Chen /* Serial Audio Interface Status Register -- REG_ESAI_SAISR 0xCC */
16343d24e76SNicolin Chen #define ESAI_SAISR_TODFE_SHIFT	17
16443d24e76SNicolin Chen #define ESAI_SAISR_TODFE_MASK	(1 << ESAI_SAISR_TODFE_SHIFT)
16543d24e76SNicolin Chen #define ESAI_SAISR_TODFE	(1 << ESAI_SAISR_TODFE_SHIFT)
16643d24e76SNicolin Chen #define ESAI_SAISR_TEDE_SHIFT	16
16743d24e76SNicolin Chen #define ESAI_SAISR_TEDE_MASK	(1 << ESAI_SAISR_TEDE_SHIFT)
16843d24e76SNicolin Chen #define ESAI_SAISR_TEDE		(1 << ESAI_SAISR_TEDE_SHIFT)
16943d24e76SNicolin Chen #define ESAI_SAISR_TDE_SHIFT	15
17043d24e76SNicolin Chen #define ESAI_SAISR_TDE_MASK	(1 << ESAI_SAISR_TDE_SHIFT)
17143d24e76SNicolin Chen #define ESAI_SAISR_TDE		(1 << ESAI_SAISR_TDE_SHIFT)
17243d24e76SNicolin Chen #define ESAI_SAISR_TUE_SHIFT	14
17343d24e76SNicolin Chen #define ESAI_SAISR_TUE_MASK	(1 << ESAI_SAISR_TUE_SHIFT)
17443d24e76SNicolin Chen #define ESAI_SAISR_TUE		(1 << ESAI_SAISR_TUE_SHIFT)
17543d24e76SNicolin Chen #define ESAI_SAISR_TFS_SHIFT	13
17643d24e76SNicolin Chen #define ESAI_SAISR_TFS_MASK	(1 << ESAI_SAISR_TFS_SHIFT)
17743d24e76SNicolin Chen #define ESAI_SAISR_TFS		(1 << ESAI_SAISR_TFS_SHIFT)
17843d24e76SNicolin Chen #define ESAI_SAISR_RODF_SHIFT	10
17943d24e76SNicolin Chen #define ESAI_SAISR_RODF_MASK	(1 << ESAI_SAISR_RODF_SHIFT)
18043d24e76SNicolin Chen #define ESAI_SAISR_RODF		(1 << ESAI_SAISR_RODF_SHIFT)
18143d24e76SNicolin Chen #define ESAI_SAISR_REDF_SHIFT	9
18243d24e76SNicolin Chen #define ESAI_SAISR_REDF_MASK	(1 << ESAI_SAISR_REDF_SHIFT)
18343d24e76SNicolin Chen #define ESAI_SAISR_REDF		(1 << ESAI_SAISR_REDF_SHIFT)
18443d24e76SNicolin Chen #define ESAI_SAISR_RDF_SHIFT	8
18543d24e76SNicolin Chen #define ESAI_SAISR_RDF_MASK	(1 << ESAI_SAISR_RDF_SHIFT)
18643d24e76SNicolin Chen #define ESAI_SAISR_RDF		(1 << ESAI_SAISR_RDF_SHIFT)
18743d24e76SNicolin Chen #define ESAI_SAISR_ROE_SHIFT	7
18843d24e76SNicolin Chen #define ESAI_SAISR_ROE_MASK	(1 << ESAI_SAISR_ROE_SHIFT)
18943d24e76SNicolin Chen #define ESAI_SAISR_ROE		(1 << ESAI_SAISR_ROE_SHIFT)
19043d24e76SNicolin Chen #define ESAI_SAISR_RFS_SHIFT	6
19143d24e76SNicolin Chen #define ESAI_SAISR_RFS_MASK	(1 << ESAI_SAISR_RFS_SHIFT)
19243d24e76SNicolin Chen #define ESAI_SAISR_RFS		(1 << ESAI_SAISR_RFS_SHIFT)
19343d24e76SNicolin Chen #define ESAI_SAISR_IF2_SHIFT	2
19443d24e76SNicolin Chen #define ESAI_SAISR_IF2_MASK	(1 << ESAI_SAISR_IF2_SHIFT)
19543d24e76SNicolin Chen #define ESAI_SAISR_IF2		(1 << ESAI_SAISR_IF2_SHIFT)
19643d24e76SNicolin Chen #define ESAI_SAISR_IF1_SHIFT	1
19743d24e76SNicolin Chen #define ESAI_SAISR_IF1_MASK	(1 << ESAI_SAISR_IF1_SHIFT)
19843d24e76SNicolin Chen #define ESAI_SAISR_IF1		(1 << ESAI_SAISR_IF1_SHIFT)
19943d24e76SNicolin Chen #define ESAI_SAISR_IF0_SHIFT	0
20043d24e76SNicolin Chen #define ESAI_SAISR_IF0_MASK	(1 << ESAI_SAISR_IF0_SHIFT)
20143d24e76SNicolin Chen #define ESAI_SAISR_IF0		(1 << ESAI_SAISR_IF0_SHIFT)
20243d24e76SNicolin Chen 
20343d24e76SNicolin Chen /* Serial Audio Interface Control Register -- REG_ESAI_SAICR 0xD0 */
20443d24e76SNicolin Chen #define ESAI_SAICR_ALC_SHIFT	8
20543d24e76SNicolin Chen #define ESAI_SAICR_ALC_MASK	(1 << ESAI_SAICR_ALC_SHIFT)
20643d24e76SNicolin Chen #define ESAI_SAICR_ALC		(1 << ESAI_SAICR_ALC_SHIFT)
20743d24e76SNicolin Chen #define ESAI_SAICR_TEBE_SHIFT	7
20843d24e76SNicolin Chen #define ESAI_SAICR_TEBE_MASK	(1 << ESAI_SAICR_TEBE_SHIFT)
20943d24e76SNicolin Chen #define ESAI_SAICR_TEBE		(1 << ESAI_SAICR_TEBE_SHIFT)
21043d24e76SNicolin Chen #define ESAI_SAICR_SYNC_SHIFT	6
21143d24e76SNicolin Chen #define ESAI_SAICR_SYNC_MASK	(1 << ESAI_SAICR_SYNC_SHIFT)
21243d24e76SNicolin Chen #define ESAI_SAICR_SYNC		(1 << ESAI_SAICR_SYNC_SHIFT)
21343d24e76SNicolin Chen #define ESAI_SAICR_OF2_SHIFT	2
21443d24e76SNicolin Chen #define ESAI_SAICR_OF2_MASK	(1 << ESAI_SAICR_OF2_SHIFT)
21543d24e76SNicolin Chen #define ESAI_SAICR_OF2		(1 << ESAI_SAICR_OF2_SHIFT)
21643d24e76SNicolin Chen #define ESAI_SAICR_OF1_SHIFT	1
21743d24e76SNicolin Chen #define ESAI_SAICR_OF1_MASK	(1 << ESAI_SAICR_OF1_SHIFT)
21843d24e76SNicolin Chen #define ESAI_SAICR_OF1		(1 << ESAI_SAICR_OF1_SHIFT)
21943d24e76SNicolin Chen #define ESAI_SAICR_OF0_SHIFT	0
22043d24e76SNicolin Chen #define ESAI_SAICR_OF0_MASK	(1 << ESAI_SAICR_OF0_SHIFT)
22143d24e76SNicolin Chen #define ESAI_SAICR_OF0		(1 << ESAI_SAICR_OF0_SHIFT)
22243d24e76SNicolin Chen 
22343d24e76SNicolin Chen /*
22443d24e76SNicolin Chen  * Transmit Control Register -- REG_ESAI_TCR 0xD4
22543d24e76SNicolin Chen  * Receive Control Register -- REG_ESAI_RCR 0xDC
22643d24e76SNicolin Chen  */
22743d24e76SNicolin Chen #define ESAI_xCR_xLIE_SHIFT	23
22843d24e76SNicolin Chen #define ESAI_xCR_xLIE_MASK	(1 << ESAI_xCR_xLIE_SHIFT)
22943d24e76SNicolin Chen #define ESAI_xCR_xLIE		(1 << ESAI_xCR_xLIE_SHIFT)
23043d24e76SNicolin Chen #define ESAI_xCR_xIE_SHIFT	22
23143d24e76SNicolin Chen #define ESAI_xCR_xIE_MASK	(1 << ESAI_xCR_xIE_SHIFT)
23243d24e76SNicolin Chen #define ESAI_xCR_xIE		(1 << ESAI_xCR_xIE_SHIFT)
23343d24e76SNicolin Chen #define ESAI_xCR_xEDIE_SHIFT	21
23443d24e76SNicolin Chen #define ESAI_xCR_xEDIE_MASK	(1 << ESAI_xCR_xEDIE_SHIFT)
23543d24e76SNicolin Chen #define ESAI_xCR_xEDIE		(1 << ESAI_xCR_xEDIE_SHIFT)
23643d24e76SNicolin Chen #define ESAI_xCR_xEIE_SHIFT	20
23743d24e76SNicolin Chen #define ESAI_xCR_xEIE_MASK	(1 << ESAI_xCR_xEIE_SHIFT)
23843d24e76SNicolin Chen #define ESAI_xCR_xEIE		(1 << ESAI_xCR_xEIE_SHIFT)
23943d24e76SNicolin Chen #define ESAI_xCR_xPR_SHIFT	19
24043d24e76SNicolin Chen #define ESAI_xCR_xPR_MASK	(1 << ESAI_xCR_xPR_SHIFT)
24143d24e76SNicolin Chen #define ESAI_xCR_xPR		(1 << ESAI_xCR_xPR_SHIFT)
24243d24e76SNicolin Chen #define ESAI_xCR_PADC_SHIFT	17
24343d24e76SNicolin Chen #define ESAI_xCR_PADC_MASK	(1 << ESAI_xCR_PADC_SHIFT)
24443d24e76SNicolin Chen #define ESAI_xCR_PADC		(1 << ESAI_xCR_PADC_SHIFT)
24543d24e76SNicolin Chen #define ESAI_xCR_xFSR_SHIFT	16
24643d24e76SNicolin Chen #define ESAI_xCR_xFSR_MASK	(1 << ESAI_xCR_xFSR_SHIFT)
24743d24e76SNicolin Chen #define ESAI_xCR_xFSR		(1 << ESAI_xCR_xFSR_SHIFT)
24843d24e76SNicolin Chen #define ESAI_xCR_xFSL_SHIFT	15
24943d24e76SNicolin Chen #define ESAI_xCR_xFSL_MASK	(1 << ESAI_xCR_xFSL_SHIFT)
25043d24e76SNicolin Chen #define ESAI_xCR_xFSL		(1 << ESAI_xCR_xFSL_SHIFT)
25143d24e76SNicolin Chen #define ESAI_xCR_xSWS_SHIFT	10
25243d24e76SNicolin Chen #define ESAI_xCR_xSWS_WIDTH	5
25343d24e76SNicolin Chen #define ESAI_xCR_xSWS_MASK	(((1 << ESAI_xCR_xSWS_WIDTH) - 1) << ESAI_xCR_xSWS_SHIFT)
25443d24e76SNicolin Chen #define ESAI_xCR_xSWS(s, w)	((w < 24 ? (s - w + ((w - 8) >> 2)) : (s < 32 ? 0x1e : 0x1f)) << ESAI_xCR_xSWS_SHIFT)
25543d24e76SNicolin Chen #define ESAI_xCR_xMOD_SHIFT	8
25643d24e76SNicolin Chen #define ESAI_xCR_xMOD_WIDTH	2
25743d24e76SNicolin Chen #define ESAI_xCR_xMOD_MASK	(((1 << ESAI_xCR_xMOD_WIDTH) - 1) << ESAI_xCR_xMOD_SHIFT)
25843d24e76SNicolin Chen #define ESAI_xCR_xMOD_ONDEMAND	(0x1 << ESAI_xCR_xMOD_SHIFT)
25943d24e76SNicolin Chen #define ESAI_xCR_xMOD_NETWORK	(0x1 << ESAI_xCR_xMOD_SHIFT)
26043d24e76SNicolin Chen #define ESAI_xCR_xMOD_AC97	(0x3 << ESAI_xCR_xMOD_SHIFT)
26143d24e76SNicolin Chen #define ESAI_xCR_xWA_SHIFT	7
26243d24e76SNicolin Chen #define ESAI_xCR_xWA_MASK	(1 << ESAI_xCR_xWA_SHIFT)
26343d24e76SNicolin Chen #define ESAI_xCR_xWA		(1 << ESAI_xCR_xWA_SHIFT)
26443d24e76SNicolin Chen #define ESAI_xCR_xSHFD_SHIFT	6
26543d24e76SNicolin Chen #define ESAI_xCR_xSHFD_MASK	(1 << ESAI_xCR_xSHFD_SHIFT)
26643d24e76SNicolin Chen #define ESAI_xCR_xSHFD		(1 << ESAI_xCR_xSHFD_SHIFT)
26743d24e76SNicolin Chen #define ESAI_xCR_xE_SHIFT	0
26843d24e76SNicolin Chen #define ESAI_xCR_TE_WIDTH	6
26943d24e76SNicolin Chen #define ESAI_xCR_RE_WIDTH	4
27043d24e76SNicolin Chen #define ESAI_xCR_TE_MASK	(((1 << ESAI_xCR_TE_WIDTH) - 1) << ESAI_xCR_xE_SHIFT)
27143d24e76SNicolin Chen #define ESAI_xCR_RE_MASK	(((1 << ESAI_xCR_RE_WIDTH) - 1) << ESAI_xCR_xE_SHIFT)
272de0d712aSShengjiu Wang #define ESAI_xCR_TE(x) 		((ESAI_xCR_TE_MASK >> (ESAI_xCR_TE_WIDTH - x)) & ESAI_xCR_TE_MASK)
273de0d712aSShengjiu Wang #define ESAI_xCR_RE(x) 		((ESAI_xCR_RE_MASK >> (ESAI_xCR_RE_WIDTH - x)) & ESAI_xCR_RE_MASK)
27443d24e76SNicolin Chen 
27543d24e76SNicolin Chen /*
27643d24e76SNicolin Chen  * Transmit Clock Control Register -- REG_ESAI_TCCR 0xD8
27743d24e76SNicolin Chen  * Receive Clock Control Register -- REG_ESAI_RCCR 0xE0
27843d24e76SNicolin Chen  */
27943d24e76SNicolin Chen #define ESAI_xCCR_xHCKD_SHIFT	23
28043d24e76SNicolin Chen #define ESAI_xCCR_xHCKD_MASK	(1 << ESAI_xCCR_xHCKD_SHIFT)
28143d24e76SNicolin Chen #define ESAI_xCCR_xHCKD		(1 << ESAI_xCCR_xHCKD_SHIFT)
28243d24e76SNicolin Chen #define ESAI_xCCR_xFSD_SHIFT	22
28343d24e76SNicolin Chen #define ESAI_xCCR_xFSD_MASK	(1 << ESAI_xCCR_xFSD_SHIFT)
28443d24e76SNicolin Chen #define ESAI_xCCR_xFSD		(1 << ESAI_xCCR_xFSD_SHIFT)
28543d24e76SNicolin Chen #define ESAI_xCCR_xCKD_SHIFT	21
28643d24e76SNicolin Chen #define ESAI_xCCR_xCKD_MASK	(1 << ESAI_xCCR_xCKD_SHIFT)
28743d24e76SNicolin Chen #define ESAI_xCCR_xCKD		(1 << ESAI_xCCR_xCKD_SHIFT)
28843d24e76SNicolin Chen #define ESAI_xCCR_xHCKP_SHIFT	20
28943d24e76SNicolin Chen #define ESAI_xCCR_xHCKP_MASK	(1 << ESAI_xCCR_xHCKP_SHIFT)
29043d24e76SNicolin Chen #define ESAI_xCCR_xHCKP		(1 << ESAI_xCCR_xHCKP_SHIFT)
29143d24e76SNicolin Chen #define ESAI_xCCR_xFSP_SHIFT	19
29243d24e76SNicolin Chen #define ESAI_xCCR_xFSP_MASK	(1 << ESAI_xCCR_xFSP_SHIFT)
29343d24e76SNicolin Chen #define ESAI_xCCR_xFSP		(1 << ESAI_xCCR_xFSP_SHIFT)
29443d24e76SNicolin Chen #define ESAI_xCCR_xCKP_SHIFT	18
29543d24e76SNicolin Chen #define ESAI_xCCR_xCKP_MASK	(1 << ESAI_xCCR_xCKP_SHIFT)
29643d24e76SNicolin Chen #define ESAI_xCCR_xCKP		(1 << ESAI_xCCR_xCKP_SHIFT)
29743d24e76SNicolin Chen #define ESAI_xCCR_xFP_SHIFT	14
29843d24e76SNicolin Chen #define ESAI_xCCR_xFP_WIDTH	4
29943d24e76SNicolin Chen #define ESAI_xCCR_xFP_MASK	(((1 << ESAI_xCCR_xFP_WIDTH) - 1) << ESAI_xCCR_xFP_SHIFT)
30043d24e76SNicolin Chen #define ESAI_xCCR_xFP(v)	((((v) - 1) << ESAI_xCCR_xFP_SHIFT) & ESAI_xCCR_xFP_MASK)
30143d24e76SNicolin Chen #define ESAI_xCCR_xDC_SHIFT     9
302adc60298SAurelien BOUIN #define ESAI_xCCR_xDC_WIDTH	5
30343d24e76SNicolin Chen #define ESAI_xCCR_xDC_MASK	(((1 << ESAI_xCCR_xDC_WIDTH) - 1) << ESAI_xCCR_xDC_SHIFT)
30443d24e76SNicolin Chen #define ESAI_xCCR_xDC(v)	((((v) - 1) << ESAI_xCCR_xDC_SHIFT) & ESAI_xCCR_xDC_MASK)
30543d24e76SNicolin Chen #define ESAI_xCCR_xPSR_SHIFT	8
30643d24e76SNicolin Chen #define ESAI_xCCR_xPSR_MASK	(1 << ESAI_xCCR_xPSR_SHIFT)
30743d24e76SNicolin Chen #define ESAI_xCCR_xPSR_BYPASS	(1 << ESAI_xCCR_xPSR_SHIFT)
30843d24e76SNicolin Chen #define ESAI_xCCR_xPSR_DIV8	(0 << ESAI_xCCR_xPSR_SHIFT)
30943d24e76SNicolin Chen #define ESAI_xCCR_xPM_SHIFT     0
31043d24e76SNicolin Chen #define ESAI_xCCR_xPM_WIDTH     8
31143d24e76SNicolin Chen #define ESAI_xCCR_xPM_MASK	(((1 << ESAI_xCCR_xPM_WIDTH) - 1) << ESAI_xCCR_xPM_SHIFT)
31243d24e76SNicolin Chen #define ESAI_xCCR_xPM(v)	((((v) - 1) << ESAI_xCCR_xPM_SHIFT) & ESAI_xCCR_xPM_MASK)
31343d24e76SNicolin Chen 
31443d24e76SNicolin Chen /* Transmit Slot Mask Register A/B -- REG_ESAI_TSMA/B 0xE4 ~ 0xF0 */
31543d24e76SNicolin Chen #define ESAI_xSMA_xS_SHIFT	0
31643d24e76SNicolin Chen #define ESAI_xSMA_xS_WIDTH	16
31743d24e76SNicolin Chen #define ESAI_xSMA_xS_MASK	(((1 << ESAI_xSMA_xS_WIDTH) - 1) << ESAI_xSMA_xS_SHIFT)
31843d24e76SNicolin Chen #define ESAI_xSMA_xS(v)		((v) & ESAI_xSMA_xS_MASK)
31943d24e76SNicolin Chen #define ESAI_xSMB_xS_SHIFT	0
32043d24e76SNicolin Chen #define ESAI_xSMB_xS_WIDTH	16
32143d24e76SNicolin Chen #define ESAI_xSMB_xS_MASK	(((1 << ESAI_xSMB_xS_WIDTH) - 1) << ESAI_xSMB_xS_SHIFT)
322236014acSXiubo Li #define ESAI_xSMB_xS(v)		(((v) >> ESAI_xSMA_xS_WIDTH) & ESAI_xSMB_xS_MASK)
32343d24e76SNicolin Chen 
32443d24e76SNicolin Chen /* Port C Direction Register -- REG_ESAI_PRRC 0xF8 */
32543d24e76SNicolin Chen #define ESAI_PRRC_PDC_SHIFT	0
32643d24e76SNicolin Chen #define ESAI_PRRC_PDC_WIDTH	12
32743d24e76SNicolin Chen #define ESAI_PRRC_PDC_MASK	(((1 << ESAI_PRRC_PDC_WIDTH) - 1) << ESAI_PRRC_PDC_SHIFT)
32843d24e76SNicolin Chen #define ESAI_PRRC_PDC(v)	((v) & ESAI_PRRC_PDC_MASK)
32943d24e76SNicolin Chen 
33043d24e76SNicolin Chen /* Port C Control Register -- REG_ESAI_PCRC 0xFC */
33143d24e76SNicolin Chen #define ESAI_PCRC_PC_SHIFT	0
33243d24e76SNicolin Chen #define ESAI_PCRC_PC_WIDTH	12
33343d24e76SNicolin Chen #define ESAI_PCRC_PC_MASK	(((1 << ESAI_PCRC_PC_WIDTH) - 1) << ESAI_PCRC_PC_SHIFT)
33443d24e76SNicolin Chen #define ESAI_PCRC_PC(v)		((v) & ESAI_PCRC_PC_MASK)
33543d24e76SNicolin Chen 
33643d24e76SNicolin Chen #define ESAI_GPIO		0xfff
33743d24e76SNicolin Chen 
33843d24e76SNicolin Chen /* ESAI clock source */
33943d24e76SNicolin Chen #define ESAI_HCKT_FSYS		0
34043d24e76SNicolin Chen #define ESAI_HCKT_EXTAL		1
34143d24e76SNicolin Chen #define ESAI_HCKR_FSYS		2
34243d24e76SNicolin Chen #define ESAI_HCKR_EXTAL		3
34343d24e76SNicolin Chen 
34443d24e76SNicolin Chen /* ESAI clock divider */
34543d24e76SNicolin Chen #define ESAI_TX_DIV_PSR		0
34643d24e76SNicolin Chen #define ESAI_TX_DIV_PM		1
34743d24e76SNicolin Chen #define ESAI_TX_DIV_FP		2
34843d24e76SNicolin Chen #define ESAI_RX_DIV_PSR		3
34943d24e76SNicolin Chen #define ESAI_RX_DIV_PM		4
35043d24e76SNicolin Chen #define ESAI_RX_DIV_FP		5
35143d24e76SNicolin Chen #endif /* _FSL_ESAI_DAI_H */
352