18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * fsl_esai.h - ALSA ESAI interface for the Freescale i.MX SoC
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2014 Freescale Semiconductor, Inc.
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * Author: Nicolin Chen <Guangyu.Chen@freescale.com>
88c2ecf20Sopenharmony_ci */
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#ifndef _FSL_ESAI_DAI_H
118c2ecf20Sopenharmony_ci#define _FSL_ESAI_DAI_H
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci/* ESAI Register Map */
148c2ecf20Sopenharmony_ci#define REG_ESAI_ETDR		0x00
158c2ecf20Sopenharmony_ci#define REG_ESAI_ERDR		0x04
168c2ecf20Sopenharmony_ci#define REG_ESAI_ECR		0x08
178c2ecf20Sopenharmony_ci#define REG_ESAI_ESR		0x0C
188c2ecf20Sopenharmony_ci#define REG_ESAI_TFCR		0x10
198c2ecf20Sopenharmony_ci#define REG_ESAI_TFSR		0x14
208c2ecf20Sopenharmony_ci#define REG_ESAI_RFCR		0x18
218c2ecf20Sopenharmony_ci#define REG_ESAI_RFSR		0x1C
228c2ecf20Sopenharmony_ci#define REG_ESAI_xFCR(tx)	(tx ? REG_ESAI_TFCR : REG_ESAI_RFCR)
238c2ecf20Sopenharmony_ci#define REG_ESAI_xFSR(tx)	(tx ? REG_ESAI_TFSR : REG_ESAI_RFSR)
248c2ecf20Sopenharmony_ci#define REG_ESAI_TX0		0x80
258c2ecf20Sopenharmony_ci#define REG_ESAI_TX1		0x84
268c2ecf20Sopenharmony_ci#define REG_ESAI_TX2		0x88
278c2ecf20Sopenharmony_ci#define REG_ESAI_TX3		0x8C
288c2ecf20Sopenharmony_ci#define REG_ESAI_TX4		0x90
298c2ecf20Sopenharmony_ci#define REG_ESAI_TX5		0x94
308c2ecf20Sopenharmony_ci#define REG_ESAI_TSR		0x98
318c2ecf20Sopenharmony_ci#define REG_ESAI_RX0		0xA0
328c2ecf20Sopenharmony_ci#define REG_ESAI_RX1		0xA4
338c2ecf20Sopenharmony_ci#define REG_ESAI_RX2		0xA8
348c2ecf20Sopenharmony_ci#define REG_ESAI_RX3		0xAC
358c2ecf20Sopenharmony_ci#define REG_ESAI_SAISR		0xCC
368c2ecf20Sopenharmony_ci#define REG_ESAI_SAICR		0xD0
378c2ecf20Sopenharmony_ci#define REG_ESAI_TCR		0xD4
388c2ecf20Sopenharmony_ci#define REG_ESAI_TCCR		0xD8
398c2ecf20Sopenharmony_ci#define REG_ESAI_RCR		0xDC
408c2ecf20Sopenharmony_ci#define REG_ESAI_RCCR		0xE0
418c2ecf20Sopenharmony_ci#define REG_ESAI_xCR(tx)	(tx ? REG_ESAI_TCR : REG_ESAI_RCR)
428c2ecf20Sopenharmony_ci#define REG_ESAI_xCCR(tx)	(tx ? REG_ESAI_TCCR : REG_ESAI_RCCR)
438c2ecf20Sopenharmony_ci#define REG_ESAI_TSMA		0xE4
448c2ecf20Sopenharmony_ci#define REG_ESAI_TSMB		0xE8
458c2ecf20Sopenharmony_ci#define REG_ESAI_RSMA		0xEC
468c2ecf20Sopenharmony_ci#define REG_ESAI_RSMB		0xF0
478c2ecf20Sopenharmony_ci#define REG_ESAI_xSMA(tx)	(tx ? REG_ESAI_TSMA : REG_ESAI_RSMA)
488c2ecf20Sopenharmony_ci#define REG_ESAI_xSMB(tx)	(tx ? REG_ESAI_TSMB : REG_ESAI_RSMB)
498c2ecf20Sopenharmony_ci#define REG_ESAI_PRRC		0xF8
508c2ecf20Sopenharmony_ci#define REG_ESAI_PCRC		0xFC
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci/* ESAI Control Register -- REG_ESAI_ECR 0x8 */
538c2ecf20Sopenharmony_ci#define ESAI_ECR_ETI_SHIFT	19
548c2ecf20Sopenharmony_ci#define ESAI_ECR_ETI_MASK	(1 << ESAI_ECR_ETI_SHIFT)
558c2ecf20Sopenharmony_ci#define ESAI_ECR_ETI		(1 << ESAI_ECR_ETI_SHIFT)
568c2ecf20Sopenharmony_ci#define ESAI_ECR_ETO_SHIFT	18
578c2ecf20Sopenharmony_ci#define ESAI_ECR_ETO_MASK	(1 << ESAI_ECR_ETO_SHIFT)
588c2ecf20Sopenharmony_ci#define ESAI_ECR_ETO		(1 << ESAI_ECR_ETO_SHIFT)
598c2ecf20Sopenharmony_ci#define ESAI_ECR_ERI_SHIFT	17
608c2ecf20Sopenharmony_ci#define ESAI_ECR_ERI_MASK	(1 << ESAI_ECR_ERI_SHIFT)
618c2ecf20Sopenharmony_ci#define ESAI_ECR_ERI		(1 << ESAI_ECR_ERI_SHIFT)
628c2ecf20Sopenharmony_ci#define ESAI_ECR_ERO_SHIFT	16
638c2ecf20Sopenharmony_ci#define ESAI_ECR_ERO_MASK	(1 << ESAI_ECR_ERO_SHIFT)
648c2ecf20Sopenharmony_ci#define ESAI_ECR_ERO		(1 << ESAI_ECR_ERO_SHIFT)
658c2ecf20Sopenharmony_ci#define ESAI_ECR_ERST_SHIFT	1
668c2ecf20Sopenharmony_ci#define ESAI_ECR_ERST_MASK	(1 << ESAI_ECR_ERST_SHIFT)
678c2ecf20Sopenharmony_ci#define ESAI_ECR_ERST		(1 << ESAI_ECR_ERST_SHIFT)
688c2ecf20Sopenharmony_ci#define ESAI_ECR_ESAIEN_SHIFT	0
698c2ecf20Sopenharmony_ci#define ESAI_ECR_ESAIEN_MASK	(1 << ESAI_ECR_ESAIEN_SHIFT)
708c2ecf20Sopenharmony_ci#define ESAI_ECR_ESAIEN		(1 << ESAI_ECR_ESAIEN_SHIFT)
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_ci/* ESAI Status Register -- REG_ESAI_ESR 0xC */
738c2ecf20Sopenharmony_ci#define ESAI_ESR_TINIT_SHIFT	10
748c2ecf20Sopenharmony_ci#define ESAI_ESR_TINIT_MASK	(1 << ESAI_ESR_TINIT_SHIFT)
758c2ecf20Sopenharmony_ci#define ESAI_ESR_TINIT		(1 << ESAI_ESR_TINIT_SHIFT)
768c2ecf20Sopenharmony_ci#define ESAI_ESR_RFF_SHIFT	9
778c2ecf20Sopenharmony_ci#define ESAI_ESR_RFF_MASK	(1 << ESAI_ESR_RFF_SHIFT)
788c2ecf20Sopenharmony_ci#define ESAI_ESR_RFF		(1 << ESAI_ESR_RFF_SHIFT)
798c2ecf20Sopenharmony_ci#define ESAI_ESR_TFE_SHIFT	8
808c2ecf20Sopenharmony_ci#define ESAI_ESR_TFE_MASK	(1 << ESAI_ESR_TFE_SHIFT)
818c2ecf20Sopenharmony_ci#define ESAI_ESR_TFE		(1 << ESAI_ESR_TFE_SHIFT)
828c2ecf20Sopenharmony_ci#define ESAI_ESR_TLS_SHIFT	7
838c2ecf20Sopenharmony_ci#define ESAI_ESR_TLS_MASK	(1 << ESAI_ESR_TLS_SHIFT)
848c2ecf20Sopenharmony_ci#define ESAI_ESR_TLS		(1 << ESAI_ESR_TLS_SHIFT)
858c2ecf20Sopenharmony_ci#define ESAI_ESR_TDE_SHIFT	6
868c2ecf20Sopenharmony_ci#define ESAI_ESR_TDE_MASK	(1 << ESAI_ESR_TDE_SHIFT)
878c2ecf20Sopenharmony_ci#define ESAI_ESR_TDE		(1 << ESAI_ESR_TDE_SHIFT)
888c2ecf20Sopenharmony_ci#define ESAI_ESR_TED_SHIFT	5
898c2ecf20Sopenharmony_ci#define ESAI_ESR_TED_MASK	(1 << ESAI_ESR_TED_SHIFT)
908c2ecf20Sopenharmony_ci#define ESAI_ESR_TED		(1 << ESAI_ESR_TED_SHIFT)
918c2ecf20Sopenharmony_ci#define ESAI_ESR_TD_SHIFT	4
928c2ecf20Sopenharmony_ci#define ESAI_ESR_TD_MASK	(1 << ESAI_ESR_TD_SHIFT)
938c2ecf20Sopenharmony_ci#define ESAI_ESR_TD		(1 << ESAI_ESR_TD_SHIFT)
948c2ecf20Sopenharmony_ci#define ESAI_ESR_RLS_SHIFT	3
958c2ecf20Sopenharmony_ci#define ESAI_ESR_RLS_MASK	(1 << ESAI_ESR_RLS_SHIFT)
968c2ecf20Sopenharmony_ci#define ESAI_ESR_RLS		(1 << ESAI_ESR_RLS_SHIFT)
978c2ecf20Sopenharmony_ci#define ESAI_ESR_RDE_SHIFT	2
988c2ecf20Sopenharmony_ci#define ESAI_ESR_RDE_MASK	(1 << ESAI_ESR_RDE_SHIFT)
998c2ecf20Sopenharmony_ci#define ESAI_ESR_RDE		(1 << ESAI_ESR_RDE_SHIFT)
1008c2ecf20Sopenharmony_ci#define ESAI_ESR_RED_SHIFT	1
1018c2ecf20Sopenharmony_ci#define ESAI_ESR_RED_MASK	(1 << ESAI_ESR_RED_SHIFT)
1028c2ecf20Sopenharmony_ci#define ESAI_ESR_RED		(1 << ESAI_ESR_RED_SHIFT)
1038c2ecf20Sopenharmony_ci#define ESAI_ESR_RD_SHIFT	0
1048c2ecf20Sopenharmony_ci#define ESAI_ESR_RD_MASK	(1 << ESAI_ESR_RD_SHIFT)
1058c2ecf20Sopenharmony_ci#define ESAI_ESR_RD		(1 << ESAI_ESR_RD_SHIFT)
1068c2ecf20Sopenharmony_ci
1078c2ecf20Sopenharmony_ci/*
1088c2ecf20Sopenharmony_ci * Transmit FIFO Configuration Register -- REG_ESAI_TFCR 0x10
1098c2ecf20Sopenharmony_ci * Receive FIFO Configuration Register -- REG_ESAI_RFCR 0x18
1108c2ecf20Sopenharmony_ci */
1118c2ecf20Sopenharmony_ci#define ESAI_xFCR_TIEN_SHIFT	19
1128c2ecf20Sopenharmony_ci#define ESAI_xFCR_TIEN_MASK	(1 << ESAI_xFCR_TIEN_SHIFT)
1138c2ecf20Sopenharmony_ci#define ESAI_xFCR_TIEN		(1 << ESAI_xFCR_TIEN_SHIFT)
1148c2ecf20Sopenharmony_ci#define ESAI_xFCR_REXT_SHIFT	19
1158c2ecf20Sopenharmony_ci#define ESAI_xFCR_REXT_MASK	(1 << ESAI_xFCR_REXT_SHIFT)
1168c2ecf20Sopenharmony_ci#define ESAI_xFCR_REXT		(1 << ESAI_xFCR_REXT_SHIFT)
1178c2ecf20Sopenharmony_ci#define ESAI_xFCR_xWA_SHIFT	16
1188c2ecf20Sopenharmony_ci#define ESAI_xFCR_xWA_WIDTH	3
1198c2ecf20Sopenharmony_ci#define ESAI_xFCR_xWA_MASK	(((1 << ESAI_xFCR_xWA_WIDTH) - 1) << ESAI_xFCR_xWA_SHIFT)
1208c2ecf20Sopenharmony_ci#define ESAI_xFCR_xWA(v)	(((8 - ((v) >> 2)) << ESAI_xFCR_xWA_SHIFT) & ESAI_xFCR_xWA_MASK)
1218c2ecf20Sopenharmony_ci#define ESAI_xFCR_xFWM_SHIFT	8
1228c2ecf20Sopenharmony_ci#define ESAI_xFCR_xFWM_WIDTH	8
1238c2ecf20Sopenharmony_ci#define ESAI_xFCR_xFWM_MASK	(((1 << ESAI_xFCR_xFWM_WIDTH) - 1) << ESAI_xFCR_xFWM_SHIFT)
1248c2ecf20Sopenharmony_ci#define ESAI_xFCR_xFWM(v)	((((v) - 1) << ESAI_xFCR_xFWM_SHIFT) & ESAI_xFCR_xFWM_MASK)
1258c2ecf20Sopenharmony_ci#define ESAI_xFCR_xE_SHIFT	2
1268c2ecf20Sopenharmony_ci#define ESAI_xFCR_TE_WIDTH	6
1278c2ecf20Sopenharmony_ci#define ESAI_xFCR_RE_WIDTH	4
1288c2ecf20Sopenharmony_ci#define ESAI_xFCR_TE_MASK	(((1 << ESAI_xFCR_TE_WIDTH) - 1) << ESAI_xFCR_xE_SHIFT)
1298c2ecf20Sopenharmony_ci#define ESAI_xFCR_RE_MASK	(((1 << ESAI_xFCR_RE_WIDTH) - 1) << ESAI_xFCR_xE_SHIFT)
1308c2ecf20Sopenharmony_ci#define ESAI_xFCR_TE(x) 	((ESAI_xFCR_TE_MASK >> (ESAI_xFCR_TE_WIDTH - x)) & ESAI_xFCR_TE_MASK)
1318c2ecf20Sopenharmony_ci#define ESAI_xFCR_RE(x) 	((ESAI_xFCR_RE_MASK >> (ESAI_xFCR_RE_WIDTH - x)) & ESAI_xFCR_RE_MASK)
1328c2ecf20Sopenharmony_ci#define ESAI_xFCR_xFR_SHIFT	1
1338c2ecf20Sopenharmony_ci#define ESAI_xFCR_xFR_MASK	(1 << ESAI_xFCR_xFR_SHIFT)
1348c2ecf20Sopenharmony_ci#define ESAI_xFCR_xFR		(1 << ESAI_xFCR_xFR_SHIFT)
1358c2ecf20Sopenharmony_ci#define ESAI_xFCR_xFEN_SHIFT	0
1368c2ecf20Sopenharmony_ci#define ESAI_xFCR_xFEN_MASK	(1 << ESAI_xFCR_xFEN_SHIFT)
1378c2ecf20Sopenharmony_ci#define ESAI_xFCR_xFEN		(1 << ESAI_xFCR_xFEN_SHIFT)
1388c2ecf20Sopenharmony_ci
1398c2ecf20Sopenharmony_ci/*
1408c2ecf20Sopenharmony_ci * Transmit FIFO Status Register -- REG_ESAI_TFSR 0x14
1418c2ecf20Sopenharmony_ci * Receive FIFO Status Register --REG_ESAI_RFSR 0x1C
1428c2ecf20Sopenharmony_ci */
1438c2ecf20Sopenharmony_ci#define ESAI_xFSR_NTFO_SHIFT	12
1448c2ecf20Sopenharmony_ci#define ESAI_xFSR_NRFI_SHIFT	12
1458c2ecf20Sopenharmony_ci#define ESAI_xFSR_NTFI_SHIFT	8
1468c2ecf20Sopenharmony_ci#define ESAI_xFSR_NRFO_SHIFT	8
1478c2ecf20Sopenharmony_ci#define ESAI_xFSR_NTFx_WIDTH	3
1488c2ecf20Sopenharmony_ci#define ESAI_xFSR_NRFx_WIDTH	2
1498c2ecf20Sopenharmony_ci#define ESAI_xFSR_NTFO_MASK	(((1 << ESAI_xFSR_NTFx_WIDTH) - 1) << ESAI_xFSR_NTFO_SHIFT)
1508c2ecf20Sopenharmony_ci#define ESAI_xFSR_NTFI_MASK	(((1 << ESAI_xFSR_NTFx_WIDTH) - 1) << ESAI_xFSR_NTFI_SHIFT)
1518c2ecf20Sopenharmony_ci#define ESAI_xFSR_NRFO_MASK	(((1 << ESAI_xFSR_NRFx_WIDTH) - 1) << ESAI_xFSR_NRFO_SHIFT)
1528c2ecf20Sopenharmony_ci#define ESAI_xFSR_NRFI_MASK	(((1 << ESAI_xFSR_NRFx_WIDTH) - 1) << ESAI_xFSR_NRFI_SHIFT)
1538c2ecf20Sopenharmony_ci#define ESAI_xFSR_xFCNT_SHIFT	0
1548c2ecf20Sopenharmony_ci#define ESAI_xFSR_xFCNT_WIDTH	8
1558c2ecf20Sopenharmony_ci#define ESAI_xFSR_xFCNT_MASK	(((1 << ESAI_xFSR_xFCNT_WIDTH) - 1) << ESAI_xFSR_xFCNT_SHIFT)
1568c2ecf20Sopenharmony_ci
1578c2ecf20Sopenharmony_ci/* ESAI Transmit Slot Register -- REG_ESAI_TSR 0x98 */
1588c2ecf20Sopenharmony_ci#define ESAI_TSR_SHIFT		0
1598c2ecf20Sopenharmony_ci#define ESAI_TSR_WIDTH		24
1608c2ecf20Sopenharmony_ci#define ESAI_TSR_MASK		(((1 << ESAI_TSR_WIDTH) - 1) << ESAI_TSR_SHIFT)
1618c2ecf20Sopenharmony_ci
1628c2ecf20Sopenharmony_ci/* Serial Audio Interface Status Register -- REG_ESAI_SAISR 0xCC */
1638c2ecf20Sopenharmony_ci#define ESAI_SAISR_TODFE_SHIFT	17
1648c2ecf20Sopenharmony_ci#define ESAI_SAISR_TODFE_MASK	(1 << ESAI_SAISR_TODFE_SHIFT)
1658c2ecf20Sopenharmony_ci#define ESAI_SAISR_TODFE	(1 << ESAI_SAISR_TODFE_SHIFT)
1668c2ecf20Sopenharmony_ci#define ESAI_SAISR_TEDE_SHIFT	16
1678c2ecf20Sopenharmony_ci#define ESAI_SAISR_TEDE_MASK	(1 << ESAI_SAISR_TEDE_SHIFT)
1688c2ecf20Sopenharmony_ci#define ESAI_SAISR_TEDE		(1 << ESAI_SAISR_TEDE_SHIFT)
1698c2ecf20Sopenharmony_ci#define ESAI_SAISR_TDE_SHIFT	15
1708c2ecf20Sopenharmony_ci#define ESAI_SAISR_TDE_MASK	(1 << ESAI_SAISR_TDE_SHIFT)
1718c2ecf20Sopenharmony_ci#define ESAI_SAISR_TDE		(1 << ESAI_SAISR_TDE_SHIFT)
1728c2ecf20Sopenharmony_ci#define ESAI_SAISR_TUE_SHIFT	14
1738c2ecf20Sopenharmony_ci#define ESAI_SAISR_TUE_MASK	(1 << ESAI_SAISR_TUE_SHIFT)
1748c2ecf20Sopenharmony_ci#define ESAI_SAISR_TUE		(1 << ESAI_SAISR_TUE_SHIFT)
1758c2ecf20Sopenharmony_ci#define ESAI_SAISR_TFS_SHIFT	13
1768c2ecf20Sopenharmony_ci#define ESAI_SAISR_TFS_MASK	(1 << ESAI_SAISR_TFS_SHIFT)
1778c2ecf20Sopenharmony_ci#define ESAI_SAISR_TFS		(1 << ESAI_SAISR_TFS_SHIFT)
1788c2ecf20Sopenharmony_ci#define ESAI_SAISR_RODF_SHIFT	10
1798c2ecf20Sopenharmony_ci#define ESAI_SAISR_RODF_MASK	(1 << ESAI_SAISR_RODF_SHIFT)
1808c2ecf20Sopenharmony_ci#define ESAI_SAISR_RODF		(1 << ESAI_SAISR_RODF_SHIFT)
1818c2ecf20Sopenharmony_ci#define ESAI_SAISR_REDF_SHIFT	9
1828c2ecf20Sopenharmony_ci#define ESAI_SAISR_REDF_MASK	(1 << ESAI_SAISR_REDF_SHIFT)
1838c2ecf20Sopenharmony_ci#define ESAI_SAISR_REDF		(1 << ESAI_SAISR_REDF_SHIFT)
1848c2ecf20Sopenharmony_ci#define ESAI_SAISR_RDF_SHIFT	8
1858c2ecf20Sopenharmony_ci#define ESAI_SAISR_RDF_MASK	(1 << ESAI_SAISR_RDF_SHIFT)
1868c2ecf20Sopenharmony_ci#define ESAI_SAISR_RDF		(1 << ESAI_SAISR_RDF_SHIFT)
1878c2ecf20Sopenharmony_ci#define ESAI_SAISR_ROE_SHIFT	7
1888c2ecf20Sopenharmony_ci#define ESAI_SAISR_ROE_MASK	(1 << ESAI_SAISR_ROE_SHIFT)
1898c2ecf20Sopenharmony_ci#define ESAI_SAISR_ROE		(1 << ESAI_SAISR_ROE_SHIFT)
1908c2ecf20Sopenharmony_ci#define ESAI_SAISR_RFS_SHIFT	6
1918c2ecf20Sopenharmony_ci#define ESAI_SAISR_RFS_MASK	(1 << ESAI_SAISR_RFS_SHIFT)
1928c2ecf20Sopenharmony_ci#define ESAI_SAISR_RFS		(1 << ESAI_SAISR_RFS_SHIFT)
1938c2ecf20Sopenharmony_ci#define ESAI_SAISR_IF2_SHIFT	2
1948c2ecf20Sopenharmony_ci#define ESAI_SAISR_IF2_MASK	(1 << ESAI_SAISR_IF2_SHIFT)
1958c2ecf20Sopenharmony_ci#define ESAI_SAISR_IF2		(1 << ESAI_SAISR_IF2_SHIFT)
1968c2ecf20Sopenharmony_ci#define ESAI_SAISR_IF1_SHIFT	1
1978c2ecf20Sopenharmony_ci#define ESAI_SAISR_IF1_MASK	(1 << ESAI_SAISR_IF1_SHIFT)
1988c2ecf20Sopenharmony_ci#define ESAI_SAISR_IF1		(1 << ESAI_SAISR_IF1_SHIFT)
1998c2ecf20Sopenharmony_ci#define ESAI_SAISR_IF0_SHIFT	0
2008c2ecf20Sopenharmony_ci#define ESAI_SAISR_IF0_MASK	(1 << ESAI_SAISR_IF0_SHIFT)
2018c2ecf20Sopenharmony_ci#define ESAI_SAISR_IF0		(1 << ESAI_SAISR_IF0_SHIFT)
2028c2ecf20Sopenharmony_ci
2038c2ecf20Sopenharmony_ci/* Serial Audio Interface Control Register -- REG_ESAI_SAICR 0xD0 */
2048c2ecf20Sopenharmony_ci#define ESAI_SAICR_ALC_SHIFT	8
2058c2ecf20Sopenharmony_ci#define ESAI_SAICR_ALC_MASK	(1 << ESAI_SAICR_ALC_SHIFT)
2068c2ecf20Sopenharmony_ci#define ESAI_SAICR_ALC		(1 << ESAI_SAICR_ALC_SHIFT)
2078c2ecf20Sopenharmony_ci#define ESAI_SAICR_TEBE_SHIFT	7
2088c2ecf20Sopenharmony_ci#define ESAI_SAICR_TEBE_MASK	(1 << ESAI_SAICR_TEBE_SHIFT)
2098c2ecf20Sopenharmony_ci#define ESAI_SAICR_TEBE		(1 << ESAI_SAICR_TEBE_SHIFT)
2108c2ecf20Sopenharmony_ci#define ESAI_SAICR_SYNC_SHIFT	6
2118c2ecf20Sopenharmony_ci#define ESAI_SAICR_SYNC_MASK	(1 << ESAI_SAICR_SYNC_SHIFT)
2128c2ecf20Sopenharmony_ci#define ESAI_SAICR_SYNC		(1 << ESAI_SAICR_SYNC_SHIFT)
2138c2ecf20Sopenharmony_ci#define ESAI_SAICR_OF2_SHIFT	2
2148c2ecf20Sopenharmony_ci#define ESAI_SAICR_OF2_MASK	(1 << ESAI_SAICR_OF2_SHIFT)
2158c2ecf20Sopenharmony_ci#define ESAI_SAICR_OF2		(1 << ESAI_SAICR_OF2_SHIFT)
2168c2ecf20Sopenharmony_ci#define ESAI_SAICR_OF1_SHIFT	1
2178c2ecf20Sopenharmony_ci#define ESAI_SAICR_OF1_MASK	(1 << ESAI_SAICR_OF1_SHIFT)
2188c2ecf20Sopenharmony_ci#define ESAI_SAICR_OF1		(1 << ESAI_SAICR_OF1_SHIFT)
2198c2ecf20Sopenharmony_ci#define ESAI_SAICR_OF0_SHIFT	0
2208c2ecf20Sopenharmony_ci#define ESAI_SAICR_OF0_MASK	(1 << ESAI_SAICR_OF0_SHIFT)
2218c2ecf20Sopenharmony_ci#define ESAI_SAICR_OF0		(1 << ESAI_SAICR_OF0_SHIFT)
2228c2ecf20Sopenharmony_ci
2238c2ecf20Sopenharmony_ci/*
2248c2ecf20Sopenharmony_ci * Transmit Control Register -- REG_ESAI_TCR 0xD4
2258c2ecf20Sopenharmony_ci * Receive Control Register -- REG_ESAI_RCR 0xDC
2268c2ecf20Sopenharmony_ci */
2278c2ecf20Sopenharmony_ci#define ESAI_xCR_xLIE_SHIFT	23
2288c2ecf20Sopenharmony_ci#define ESAI_xCR_xLIE_MASK	(1 << ESAI_xCR_xLIE_SHIFT)
2298c2ecf20Sopenharmony_ci#define ESAI_xCR_xLIE		(1 << ESAI_xCR_xLIE_SHIFT)
2308c2ecf20Sopenharmony_ci#define ESAI_xCR_xIE_SHIFT	22
2318c2ecf20Sopenharmony_ci#define ESAI_xCR_xIE_MASK	(1 << ESAI_xCR_xIE_SHIFT)
2328c2ecf20Sopenharmony_ci#define ESAI_xCR_xIE		(1 << ESAI_xCR_xIE_SHIFT)
2338c2ecf20Sopenharmony_ci#define ESAI_xCR_xEDIE_SHIFT	21
2348c2ecf20Sopenharmony_ci#define ESAI_xCR_xEDIE_MASK	(1 << ESAI_xCR_xEDIE_SHIFT)
2358c2ecf20Sopenharmony_ci#define ESAI_xCR_xEDIE		(1 << ESAI_xCR_xEDIE_SHIFT)
2368c2ecf20Sopenharmony_ci#define ESAI_xCR_xEIE_SHIFT	20
2378c2ecf20Sopenharmony_ci#define ESAI_xCR_xEIE_MASK	(1 << ESAI_xCR_xEIE_SHIFT)
2388c2ecf20Sopenharmony_ci#define ESAI_xCR_xEIE		(1 << ESAI_xCR_xEIE_SHIFT)
2398c2ecf20Sopenharmony_ci#define ESAI_xCR_xPR_SHIFT	19
2408c2ecf20Sopenharmony_ci#define ESAI_xCR_xPR_MASK	(1 << ESAI_xCR_xPR_SHIFT)
2418c2ecf20Sopenharmony_ci#define ESAI_xCR_xPR		(1 << ESAI_xCR_xPR_SHIFT)
2428c2ecf20Sopenharmony_ci#define ESAI_xCR_PADC_SHIFT	17
2438c2ecf20Sopenharmony_ci#define ESAI_xCR_PADC_MASK	(1 << ESAI_xCR_PADC_SHIFT)
2448c2ecf20Sopenharmony_ci#define ESAI_xCR_PADC		(1 << ESAI_xCR_PADC_SHIFT)
2458c2ecf20Sopenharmony_ci#define ESAI_xCR_xFSR_SHIFT	16
2468c2ecf20Sopenharmony_ci#define ESAI_xCR_xFSR_MASK	(1 << ESAI_xCR_xFSR_SHIFT)
2478c2ecf20Sopenharmony_ci#define ESAI_xCR_xFSR		(1 << ESAI_xCR_xFSR_SHIFT)
2488c2ecf20Sopenharmony_ci#define ESAI_xCR_xFSL_SHIFT	15
2498c2ecf20Sopenharmony_ci#define ESAI_xCR_xFSL_MASK	(1 << ESAI_xCR_xFSL_SHIFT)
2508c2ecf20Sopenharmony_ci#define ESAI_xCR_xFSL		(1 << ESAI_xCR_xFSL_SHIFT)
2518c2ecf20Sopenharmony_ci#define ESAI_xCR_xSWS_SHIFT	10
2528c2ecf20Sopenharmony_ci#define ESAI_xCR_xSWS_WIDTH	5
2538c2ecf20Sopenharmony_ci#define ESAI_xCR_xSWS_MASK	(((1 << ESAI_xCR_xSWS_WIDTH) - 1) << ESAI_xCR_xSWS_SHIFT)
2548c2ecf20Sopenharmony_ci#define ESAI_xCR_xSWS(s, w)	((w < 24 ? (s - w + ((w - 8) >> 2)) : (s < 32 ? 0x1e : 0x1f)) << ESAI_xCR_xSWS_SHIFT)
2558c2ecf20Sopenharmony_ci#define ESAI_xCR_xMOD_SHIFT	8
2568c2ecf20Sopenharmony_ci#define ESAI_xCR_xMOD_WIDTH	2
2578c2ecf20Sopenharmony_ci#define ESAI_xCR_xMOD_MASK	(((1 << ESAI_xCR_xMOD_WIDTH) - 1) << ESAI_xCR_xMOD_SHIFT)
2588c2ecf20Sopenharmony_ci#define ESAI_xCR_xMOD_ONDEMAND	(0x1 << ESAI_xCR_xMOD_SHIFT)
2598c2ecf20Sopenharmony_ci#define ESAI_xCR_xMOD_NETWORK	(0x1 << ESAI_xCR_xMOD_SHIFT)
2608c2ecf20Sopenharmony_ci#define ESAI_xCR_xMOD_AC97	(0x3 << ESAI_xCR_xMOD_SHIFT)
2618c2ecf20Sopenharmony_ci#define ESAI_xCR_xWA_SHIFT	7
2628c2ecf20Sopenharmony_ci#define ESAI_xCR_xWA_MASK	(1 << ESAI_xCR_xWA_SHIFT)
2638c2ecf20Sopenharmony_ci#define ESAI_xCR_xWA		(1 << ESAI_xCR_xWA_SHIFT)
2648c2ecf20Sopenharmony_ci#define ESAI_xCR_xSHFD_SHIFT	6
2658c2ecf20Sopenharmony_ci#define ESAI_xCR_xSHFD_MASK	(1 << ESAI_xCR_xSHFD_SHIFT)
2668c2ecf20Sopenharmony_ci#define ESAI_xCR_xSHFD		(1 << ESAI_xCR_xSHFD_SHIFT)
2678c2ecf20Sopenharmony_ci#define ESAI_xCR_xE_SHIFT	0
2688c2ecf20Sopenharmony_ci#define ESAI_xCR_TE_WIDTH	6
2698c2ecf20Sopenharmony_ci#define ESAI_xCR_RE_WIDTH	4
2708c2ecf20Sopenharmony_ci#define ESAI_xCR_TE_MASK	(((1 << ESAI_xCR_TE_WIDTH) - 1) << ESAI_xCR_xE_SHIFT)
2718c2ecf20Sopenharmony_ci#define ESAI_xCR_RE_MASK	(((1 << ESAI_xCR_RE_WIDTH) - 1) << ESAI_xCR_xE_SHIFT)
2728c2ecf20Sopenharmony_ci#define ESAI_xCR_TE(x) 		((ESAI_xCR_TE_MASK >> (ESAI_xCR_TE_WIDTH - x)) & ESAI_xCR_TE_MASK)
2738c2ecf20Sopenharmony_ci#define ESAI_xCR_RE(x) 		((ESAI_xCR_RE_MASK >> (ESAI_xCR_RE_WIDTH - x)) & ESAI_xCR_RE_MASK)
2748c2ecf20Sopenharmony_ci
2758c2ecf20Sopenharmony_ci/*
2768c2ecf20Sopenharmony_ci * Transmit Clock Control Register -- REG_ESAI_TCCR 0xD8
2778c2ecf20Sopenharmony_ci * Receive Clock Control Register -- REG_ESAI_RCCR 0xE0
2788c2ecf20Sopenharmony_ci */
2798c2ecf20Sopenharmony_ci#define ESAI_xCCR_xHCKD_SHIFT	23
2808c2ecf20Sopenharmony_ci#define ESAI_xCCR_xHCKD_MASK	(1 << ESAI_xCCR_xHCKD_SHIFT)
2818c2ecf20Sopenharmony_ci#define ESAI_xCCR_xHCKD		(1 << ESAI_xCCR_xHCKD_SHIFT)
2828c2ecf20Sopenharmony_ci#define ESAI_xCCR_xFSD_SHIFT	22
2838c2ecf20Sopenharmony_ci#define ESAI_xCCR_xFSD_MASK	(1 << ESAI_xCCR_xFSD_SHIFT)
2848c2ecf20Sopenharmony_ci#define ESAI_xCCR_xFSD		(1 << ESAI_xCCR_xFSD_SHIFT)
2858c2ecf20Sopenharmony_ci#define ESAI_xCCR_xCKD_SHIFT	21
2868c2ecf20Sopenharmony_ci#define ESAI_xCCR_xCKD_MASK	(1 << ESAI_xCCR_xCKD_SHIFT)
2878c2ecf20Sopenharmony_ci#define ESAI_xCCR_xCKD		(1 << ESAI_xCCR_xCKD_SHIFT)
2888c2ecf20Sopenharmony_ci#define ESAI_xCCR_xHCKP_SHIFT	20
2898c2ecf20Sopenharmony_ci#define ESAI_xCCR_xHCKP_MASK	(1 << ESAI_xCCR_xHCKP_SHIFT)
2908c2ecf20Sopenharmony_ci#define ESAI_xCCR_xHCKP		(1 << ESAI_xCCR_xHCKP_SHIFT)
2918c2ecf20Sopenharmony_ci#define ESAI_xCCR_xFSP_SHIFT	19
2928c2ecf20Sopenharmony_ci#define ESAI_xCCR_xFSP_MASK	(1 << ESAI_xCCR_xFSP_SHIFT)
2938c2ecf20Sopenharmony_ci#define ESAI_xCCR_xFSP		(1 << ESAI_xCCR_xFSP_SHIFT)
2948c2ecf20Sopenharmony_ci#define ESAI_xCCR_xCKP_SHIFT	18
2958c2ecf20Sopenharmony_ci#define ESAI_xCCR_xCKP_MASK	(1 << ESAI_xCCR_xCKP_SHIFT)
2968c2ecf20Sopenharmony_ci#define ESAI_xCCR_xCKP		(1 << ESAI_xCCR_xCKP_SHIFT)
2978c2ecf20Sopenharmony_ci#define ESAI_xCCR_xFP_SHIFT	14
2988c2ecf20Sopenharmony_ci#define ESAI_xCCR_xFP_WIDTH	4
2998c2ecf20Sopenharmony_ci#define ESAI_xCCR_xFP_MASK	(((1 << ESAI_xCCR_xFP_WIDTH) - 1) << ESAI_xCCR_xFP_SHIFT)
3008c2ecf20Sopenharmony_ci#define ESAI_xCCR_xFP(v)	((((v) - 1) << ESAI_xCCR_xFP_SHIFT) & ESAI_xCCR_xFP_MASK)
3018c2ecf20Sopenharmony_ci#define ESAI_xCCR_xDC_SHIFT     9
3028c2ecf20Sopenharmony_ci#define ESAI_xCCR_xDC_WIDTH	5
3038c2ecf20Sopenharmony_ci#define ESAI_xCCR_xDC_MASK	(((1 << ESAI_xCCR_xDC_WIDTH) - 1) << ESAI_xCCR_xDC_SHIFT)
3048c2ecf20Sopenharmony_ci#define ESAI_xCCR_xDC(v)	((((v) - 1) << ESAI_xCCR_xDC_SHIFT) & ESAI_xCCR_xDC_MASK)
3058c2ecf20Sopenharmony_ci#define ESAI_xCCR_xPSR_SHIFT	8
3068c2ecf20Sopenharmony_ci#define ESAI_xCCR_xPSR_MASK	(1 << ESAI_xCCR_xPSR_SHIFT)
3078c2ecf20Sopenharmony_ci#define ESAI_xCCR_xPSR_BYPASS	(1 << ESAI_xCCR_xPSR_SHIFT)
3088c2ecf20Sopenharmony_ci#define ESAI_xCCR_xPSR_DIV8	(0 << ESAI_xCCR_xPSR_SHIFT)
3098c2ecf20Sopenharmony_ci#define ESAI_xCCR_xPM_SHIFT     0
3108c2ecf20Sopenharmony_ci#define ESAI_xCCR_xPM_WIDTH     8
3118c2ecf20Sopenharmony_ci#define ESAI_xCCR_xPM_MASK	(((1 << ESAI_xCCR_xPM_WIDTH) - 1) << ESAI_xCCR_xPM_SHIFT)
3128c2ecf20Sopenharmony_ci#define ESAI_xCCR_xPM(v)	((((v) - 1) << ESAI_xCCR_xPM_SHIFT) & ESAI_xCCR_xPM_MASK)
3138c2ecf20Sopenharmony_ci
3148c2ecf20Sopenharmony_ci/* Transmit Slot Mask Register A/B -- REG_ESAI_TSMA/B 0xE4 ~ 0xF0 */
3158c2ecf20Sopenharmony_ci#define ESAI_xSMA_xS_SHIFT	0
3168c2ecf20Sopenharmony_ci#define ESAI_xSMA_xS_WIDTH	16
3178c2ecf20Sopenharmony_ci#define ESAI_xSMA_xS_MASK	(((1 << ESAI_xSMA_xS_WIDTH) - 1) << ESAI_xSMA_xS_SHIFT)
3188c2ecf20Sopenharmony_ci#define ESAI_xSMA_xS(v)		((v) & ESAI_xSMA_xS_MASK)
3198c2ecf20Sopenharmony_ci#define ESAI_xSMB_xS_SHIFT	0
3208c2ecf20Sopenharmony_ci#define ESAI_xSMB_xS_WIDTH	16
3218c2ecf20Sopenharmony_ci#define ESAI_xSMB_xS_MASK	(((1 << ESAI_xSMB_xS_WIDTH) - 1) << ESAI_xSMB_xS_SHIFT)
3228c2ecf20Sopenharmony_ci#define ESAI_xSMB_xS(v)		(((v) >> ESAI_xSMA_xS_WIDTH) & ESAI_xSMB_xS_MASK)
3238c2ecf20Sopenharmony_ci
3248c2ecf20Sopenharmony_ci/* Port C Direction Register -- REG_ESAI_PRRC 0xF8 */
3258c2ecf20Sopenharmony_ci#define ESAI_PRRC_PDC_SHIFT	0
3268c2ecf20Sopenharmony_ci#define ESAI_PRRC_PDC_WIDTH	12
3278c2ecf20Sopenharmony_ci#define ESAI_PRRC_PDC_MASK	(((1 << ESAI_PRRC_PDC_WIDTH) - 1) << ESAI_PRRC_PDC_SHIFT)
3288c2ecf20Sopenharmony_ci#define ESAI_PRRC_PDC(v)	((v) & ESAI_PRRC_PDC_MASK)
3298c2ecf20Sopenharmony_ci
3308c2ecf20Sopenharmony_ci/* Port C Control Register -- REG_ESAI_PCRC 0xFC */
3318c2ecf20Sopenharmony_ci#define ESAI_PCRC_PC_SHIFT	0
3328c2ecf20Sopenharmony_ci#define ESAI_PCRC_PC_WIDTH	12
3338c2ecf20Sopenharmony_ci#define ESAI_PCRC_PC_MASK	(((1 << ESAI_PCRC_PC_WIDTH) - 1) << ESAI_PCRC_PC_SHIFT)
3348c2ecf20Sopenharmony_ci#define ESAI_PCRC_PC(v)		((v) & ESAI_PCRC_PC_MASK)
3358c2ecf20Sopenharmony_ci
3368c2ecf20Sopenharmony_ci#define ESAI_GPIO		0xfff
3378c2ecf20Sopenharmony_ci
3388c2ecf20Sopenharmony_ci/* ESAI clock source */
3398c2ecf20Sopenharmony_ci#define ESAI_HCKT_FSYS		0
3408c2ecf20Sopenharmony_ci#define ESAI_HCKT_EXTAL		1
3418c2ecf20Sopenharmony_ci#define ESAI_HCKR_FSYS		2
3428c2ecf20Sopenharmony_ci#define ESAI_HCKR_EXTAL		3
3438c2ecf20Sopenharmony_ci
3448c2ecf20Sopenharmony_ci/* ESAI clock divider */
3458c2ecf20Sopenharmony_ci#define ESAI_TX_DIV_PSR		0
3468c2ecf20Sopenharmony_ci#define ESAI_TX_DIV_PM		1
3478c2ecf20Sopenharmony_ci#define ESAI_TX_DIV_FP		2
3488c2ecf20Sopenharmony_ci#define ESAI_RX_DIV_PSR		3
3498c2ecf20Sopenharmony_ci#define ESAI_RX_DIV_PM		4
3508c2ecf20Sopenharmony_ci#define ESAI_RX_DIV_FP		5
3518c2ecf20Sopenharmony_ci#endif /* _FSL_ESAI_DAI_H */
352