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