1dbbeaad4SFabio Estevam /* SPDX-License-Identifier: GPL-2.0 */ 243550821SXiubo Li /* 343550821SXiubo Li * Copyright 2012-2013 Freescale Semiconductor, Inc. 443550821SXiubo Li */ 543550821SXiubo Li 643550821SXiubo Li #ifndef __FSL_SAI_H 743550821SXiubo Li #define __FSL_SAI_H 843550821SXiubo Li 988630575SShengjiu Wang #include <linux/dma/imx-dma.h> 1043550821SXiubo Li #include <sound/dmaengine_pcm.h> 1143550821SXiubo Li 1243550821SXiubo Li #define FSL_SAI_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\ 1343550821SXiubo Li SNDRV_PCM_FMTBIT_S20_3LE |\ 149b7493d0SZidan Wang SNDRV_PCM_FMTBIT_S24_LE |\ 1546657704SShengjiu Wang SNDRV_PCM_FMTBIT_S32_LE |\ 1646657704SShengjiu Wang SNDRV_PCM_FMTBIT_DSD_U8 |\ 1746657704SShengjiu Wang SNDRV_PCM_FMTBIT_DSD_U16_LE |\ 1846657704SShengjiu Wang SNDRV_PCM_FMTBIT_DSD_U32_LE) 1943550821SXiubo Li 2078957fc3SXiubo Li /* SAI Register Map Register */ 210b2cbce6SShengjiu Wang #define FSL_SAI_VERID 0x00 /* SAI Version ID Register */ 220b2cbce6SShengjiu Wang #define FSL_SAI_PARAM 0x04 /* SAI Parameter Register */ 234f7a0728SDaniel Baluta #define FSL_SAI_TCSR(ofs) (0x00 + ofs) /* SAI Transmit Control */ 244f7a0728SDaniel Baluta #define FSL_SAI_TCR1(ofs) (0x04 + ofs) /* SAI Transmit Configuration 1 */ 254f7a0728SDaniel Baluta #define FSL_SAI_TCR2(ofs) (0x08 + ofs) /* SAI Transmit Configuration 2 */ 264f7a0728SDaniel Baluta #define FSL_SAI_TCR3(ofs) (0x0c + ofs) /* SAI Transmit Configuration 3 */ 274f7a0728SDaniel Baluta #define FSL_SAI_TCR4(ofs) (0x10 + ofs) /* SAI Transmit Configuration 4 */ 284f7a0728SDaniel Baluta #define FSL_SAI_TCR5(ofs) (0x14 + ofs) /* SAI Transmit Configuration 5 */ 295f0ac20eSDaniel Baluta #define FSL_SAI_TDR0 0x20 /* SAI Transmit Data 0 */ 305f0ac20eSDaniel Baluta #define FSL_SAI_TDR1 0x24 /* SAI Transmit Data 1 */ 315f0ac20eSDaniel Baluta #define FSL_SAI_TDR2 0x28 /* SAI Transmit Data 2 */ 325f0ac20eSDaniel Baluta #define FSL_SAI_TDR3 0x2C /* SAI Transmit Data 3 */ 335f0ac20eSDaniel Baluta #define FSL_SAI_TDR4 0x30 /* SAI Transmit Data 4 */ 345f0ac20eSDaniel Baluta #define FSL_SAI_TDR5 0x34 /* SAI Transmit Data 5 */ 355f0ac20eSDaniel Baluta #define FSL_SAI_TDR6 0x38 /* SAI Transmit Data 6 */ 365f0ac20eSDaniel Baluta #define FSL_SAI_TDR7 0x3C /* SAI Transmit Data 7 */ 375f0ac20eSDaniel Baluta #define FSL_SAI_TFR0 0x40 /* SAI Transmit FIFO 0 */ 385f0ac20eSDaniel Baluta #define FSL_SAI_TFR1 0x44 /* SAI Transmit FIFO 1 */ 395f0ac20eSDaniel Baluta #define FSL_SAI_TFR2 0x48 /* SAI Transmit FIFO 2 */ 405f0ac20eSDaniel Baluta #define FSL_SAI_TFR3 0x4C /* SAI Transmit FIFO 3 */ 415f0ac20eSDaniel Baluta #define FSL_SAI_TFR4 0x50 /* SAI Transmit FIFO 4 */ 425f0ac20eSDaniel Baluta #define FSL_SAI_TFR5 0x54 /* SAI Transmit FIFO 5 */ 435f0ac20eSDaniel Baluta #define FSL_SAI_TFR6 0x58 /* SAI Transmit FIFO 6 */ 445f0ac20eSDaniel Baluta #define FSL_SAI_TFR7 0x5C /* SAI Transmit FIFO 7 */ 4578957fc3SXiubo Li #define FSL_SAI_TMR 0x60 /* SAI Transmit Mask */ 460b2cbce6SShengjiu Wang #define FSL_SAI_TTCTL 0x70 /* SAI Transmit Timestamp Control Register */ 470b2cbce6SShengjiu Wang #define FSL_SAI_TTCTN 0x74 /* SAI Transmit Timestamp Counter Register */ 480b2cbce6SShengjiu Wang #define FSL_SAI_TBCTN 0x78 /* SAI Transmit Bit Counter Register */ 490b2cbce6SShengjiu Wang #define FSL_SAI_TTCAP 0x7C /* SAI Transmit Timestamp Capture */ 504f7a0728SDaniel Baluta #define FSL_SAI_RCSR(ofs) (0x80 + ofs) /* SAI Receive Control */ 514f7a0728SDaniel Baluta #define FSL_SAI_RCR1(ofs) (0x84 + ofs)/* SAI Receive Configuration 1 */ 524f7a0728SDaniel Baluta #define FSL_SAI_RCR2(ofs) (0x88 + ofs) /* SAI Receive Configuration 2 */ 534f7a0728SDaniel Baluta #define FSL_SAI_RCR3(ofs) (0x8c + ofs) /* SAI Receive Configuration 3 */ 544f7a0728SDaniel Baluta #define FSL_SAI_RCR4(ofs) (0x90 + ofs) /* SAI Receive Configuration 4 */ 554f7a0728SDaniel Baluta #define FSL_SAI_RCR5(ofs) (0x94 + ofs) /* SAI Receive Configuration 5 */ 565f0ac20eSDaniel Baluta #define FSL_SAI_RDR0 0xa0 /* SAI Receive Data 0 */ 575f0ac20eSDaniel Baluta #define FSL_SAI_RDR1 0xa4 /* SAI Receive Data 1 */ 585f0ac20eSDaniel Baluta #define FSL_SAI_RDR2 0xa8 /* SAI Receive Data 2 */ 595f0ac20eSDaniel Baluta #define FSL_SAI_RDR3 0xac /* SAI Receive Data 3 */ 605f0ac20eSDaniel Baluta #define FSL_SAI_RDR4 0xb0 /* SAI Receive Data 4 */ 615f0ac20eSDaniel Baluta #define FSL_SAI_RDR5 0xb4 /* SAI Receive Data 5 */ 625f0ac20eSDaniel Baluta #define FSL_SAI_RDR6 0xb8 /* SAI Receive Data 6 */ 635f0ac20eSDaniel Baluta #define FSL_SAI_RDR7 0xbc /* SAI Receive Data 7 */ 645f0ac20eSDaniel Baluta #define FSL_SAI_RFR0 0xc0 /* SAI Receive FIFO 0 */ 655f0ac20eSDaniel Baluta #define FSL_SAI_RFR1 0xc4 /* SAI Receive FIFO 1 */ 665f0ac20eSDaniel Baluta #define FSL_SAI_RFR2 0xc8 /* SAI Receive FIFO 2 */ 675f0ac20eSDaniel Baluta #define FSL_SAI_RFR3 0xcc /* SAI Receive FIFO 3 */ 685f0ac20eSDaniel Baluta #define FSL_SAI_RFR4 0xd0 /* SAI Receive FIFO 4 */ 695f0ac20eSDaniel Baluta #define FSL_SAI_RFR5 0xd4 /* SAI Receive FIFO 5 */ 705f0ac20eSDaniel Baluta #define FSL_SAI_RFR6 0xd8 /* SAI Receive FIFO 6 */ 715f0ac20eSDaniel Baluta #define FSL_SAI_RFR7 0xdc /* SAI Receive FIFO 7 */ 7278957fc3SXiubo Li #define FSL_SAI_RMR 0xe0 /* SAI Receive Mask */ 730b2cbce6SShengjiu Wang #define FSL_SAI_RTCTL 0xf0 /* SAI Receive Timestamp Control Register */ 740b2cbce6SShengjiu Wang #define FSL_SAI_RTCTN 0xf4 /* SAI Receive Timestamp Counter Register */ 750b2cbce6SShengjiu Wang #define FSL_SAI_RBCTN 0xf8 /* SAI Receive Bit Counter Register */ 760b2cbce6SShengjiu Wang #define FSL_SAI_RTCAP 0xfc /* SAI Receive Timestamp Capture */ 770b2cbce6SShengjiu Wang 780b2cbce6SShengjiu Wang #define FSL_SAI_MCTL 0x100 /* SAI MCLK Control Register */ 790b2cbce6SShengjiu Wang #define FSL_SAI_MDIV 0x104 /* SAI MCLK Divide Register */ 8078957fc3SXiubo Li 814f7a0728SDaniel Baluta #define FSL_SAI_xCSR(tx, ofs) (tx ? FSL_SAI_TCSR(ofs) : FSL_SAI_RCSR(ofs)) 824f7a0728SDaniel Baluta #define FSL_SAI_xCR1(tx, ofs) (tx ? FSL_SAI_TCR1(ofs) : FSL_SAI_RCR1(ofs)) 834f7a0728SDaniel Baluta #define FSL_SAI_xCR2(tx, ofs) (tx ? FSL_SAI_TCR2(ofs) : FSL_SAI_RCR2(ofs)) 844f7a0728SDaniel Baluta #define FSL_SAI_xCR3(tx, ofs) (tx ? FSL_SAI_TCR3(ofs) : FSL_SAI_RCR3(ofs)) 854f7a0728SDaniel Baluta #define FSL_SAI_xCR4(tx, ofs) (tx ? FSL_SAI_TCR4(ofs) : FSL_SAI_RCR4(ofs)) 864f7a0728SDaniel Baluta #define FSL_SAI_xCR5(tx, ofs) (tx ? FSL_SAI_TCR5(ofs) : FSL_SAI_RCR5(ofs)) 87e4dd748dSShengjiu Wang #define FSL_SAI_xDR0(tx) (tx ? FSL_SAI_TDR0 : FSL_SAI_RDR0) 88e4dd748dSShengjiu Wang #define FSL_SAI_xFR0(tx) (tx ? FSL_SAI_TFR0 : FSL_SAI_RFR0) 89e6b39846SNicolin Chen #define FSL_SAI_xMR(tx) (tx ? FSL_SAI_TMR : FSL_SAI_RMR) 90e6b39846SNicolin Chen 91dcfcf2c2SXiubo Li /* SAI Transmit/Receive Control Register */ 9243550821SXiubo Li #define FSL_SAI_CSR_TERE BIT(31) 930b2cbce6SShengjiu Wang #define FSL_SAI_CSR_SE BIT(30) 94269f399dSMatus Gajdos #define FSL_SAI_CSR_BCE BIT(28) 95e2681a1bSNicolin Chen #define FSL_SAI_CSR_FR BIT(25) 96376d1a92SNicolin Chen #define FSL_SAI_CSR_SR BIT(24) 97e2681a1bSNicolin Chen #define FSL_SAI_CSR_xF_SHIFT 16 98e2681a1bSNicolin Chen #define FSL_SAI_CSR_xF_W_SHIFT 18 99e2681a1bSNicolin Chen #define FSL_SAI_CSR_xF_MASK (0x1f << FSL_SAI_CSR_xF_SHIFT) 100e2681a1bSNicolin Chen #define FSL_SAI_CSR_xF_W_MASK (0x7 << FSL_SAI_CSR_xF_W_SHIFT) 101e2681a1bSNicolin Chen #define FSL_SAI_CSR_WSF BIT(20) 102e2681a1bSNicolin Chen #define FSL_SAI_CSR_SEF BIT(19) 103e2681a1bSNicolin Chen #define FSL_SAI_CSR_FEF BIT(18) 10443550821SXiubo Li #define FSL_SAI_CSR_FWF BIT(17) 105e2681a1bSNicolin Chen #define FSL_SAI_CSR_FRF BIT(16) 106e2681a1bSNicolin Chen #define FSL_SAI_CSR_xIE_SHIFT 8 1078abba5d6SNicolin Chen #define FSL_SAI_CSR_xIE_MASK (0x1f << FSL_SAI_CSR_xIE_SHIFT) 108e2681a1bSNicolin Chen #define FSL_SAI_CSR_WSIE BIT(12) 109e2681a1bSNicolin Chen #define FSL_SAI_CSR_SEIE BIT(11) 110e2681a1bSNicolin Chen #define FSL_SAI_CSR_FEIE BIT(10) 111e2681a1bSNicolin Chen #define FSL_SAI_CSR_FWIE BIT(9) 11243550821SXiubo Li #define FSL_SAI_CSR_FRIE BIT(8) 11343550821SXiubo Li #define FSL_SAI_CSR_FRDE BIT(0) 11443550821SXiubo Li 115dcfcf2c2SXiubo Li /* SAI Transmit and Receive Configuration 1 Register */ 1165aef1ff2SShengjiu Wang #define FSL_SAI_CR1_RFW_MASK(x) ((x) - 1) 11743550821SXiubo Li 118dcfcf2c2SXiubo Li /* SAI Transmit and Receive Configuration 2 Register */ 11943550821SXiubo Li #define FSL_SAI_CR2_SYNC BIT(30) 12032cf0046SChancel Liu #define FSL_SAI_CR2_BCI BIT(28) 121c3ecef21SZidan Wang #define FSL_SAI_CR2_MSEL_MASK (0x3 << 26) 12243550821SXiubo Li #define FSL_SAI_CR2_MSEL_BUS 0 12343550821SXiubo Li #define FSL_SAI_CR2_MSEL_MCLK1 BIT(26) 12443550821SXiubo Li #define FSL_SAI_CR2_MSEL_MCLK2 BIT(27) 12543550821SXiubo Li #define FSL_SAI_CR2_MSEL_MCLK3 (BIT(26) | BIT(27)) 126c3ecef21SZidan Wang #define FSL_SAI_CR2_MSEL(ID) ((ID) << 26) 12743550821SXiubo Li #define FSL_SAI_CR2_BCP BIT(25) 12843550821SXiubo Li #define FSL_SAI_CR2_BCD_MSTR BIT(24) 1290b2cbce6SShengjiu Wang #define FSL_SAI_CR2_BYP BIT(23) /* BCLK bypass */ 130c3ecef21SZidan Wang #define FSL_SAI_CR2_DIV_MASK 0xff 13143550821SXiubo Li 132dcfcf2c2SXiubo Li /* SAI Transmit and Receive Configuration 3 Register */ 133770f58d7SShengjiu Wang #define FSL_SAI_CR3_TRCE(x) ((x) << 16) 134b84f50b0SDaniel Baluta #define FSL_SAI_CR3_TRCE_MASK GENMASK(23, 16) 13543550821SXiubo Li #define FSL_SAI_CR3_WDFL(x) (x) 13643550821SXiubo Li #define FSL_SAI_CR3_WDFL_MASK 0x1f 13743550821SXiubo Li 138dcfcf2c2SXiubo Li /* SAI Transmit and Receive Configuration 4 Register */ 1390b2cbce6SShengjiu Wang 140*85e70dcdSShengjiu Wang #define FSL_SAI_CR4_FCONT_MASK BIT(28) 1410b2cbce6SShengjiu Wang #define FSL_SAI_CR4_FCONT BIT(28) 1420b2cbce6SShengjiu Wang #define FSL_SAI_CR4_FCOMB_SHIFT BIT(26) 1430b2cbce6SShengjiu Wang #define FSL_SAI_CR4_FCOMB_SOFT BIT(27) 1440b2cbce6SShengjiu Wang #define FSL_SAI_CR4_FCOMB_MASK (0x3 << 26) 1450b2cbce6SShengjiu Wang #define FSL_SAI_CR4_FPACK_8 (0x2 << 24) 1460b2cbce6SShengjiu Wang #define FSL_SAI_CR4_FPACK_16 (0x3 << 24) 14743550821SXiubo Li #define FSL_SAI_CR4_FRSZ(x) (((x) - 1) << 16) 14843550821SXiubo Li #define FSL_SAI_CR4_FRSZ_MASK (0x1f << 16) 14943550821SXiubo Li #define FSL_SAI_CR4_SYWD(x) (((x) - 1) << 8) 15043550821SXiubo Li #define FSL_SAI_CR4_SYWD_MASK (0x1f << 8) 151f4c4b1bbSShengjiu Wang #define FSL_SAI_CR4_CHMOD BIT(5) 152f4c4b1bbSShengjiu Wang #define FSL_SAI_CR4_CHMOD_MASK BIT(5) 15343550821SXiubo Li #define FSL_SAI_CR4_MF BIT(4) 15443550821SXiubo Li #define FSL_SAI_CR4_FSE BIT(3) 15543550821SXiubo Li #define FSL_SAI_CR4_FSP BIT(1) 15643550821SXiubo Li #define FSL_SAI_CR4_FSD_MSTR BIT(0) 15743550821SXiubo Li 158dcfcf2c2SXiubo Li /* SAI Transmit and Receive Configuration 5 Register */ 15943550821SXiubo Li #define FSL_SAI_CR5_WNW(x) (((x) - 1) << 24) 16043550821SXiubo Li #define FSL_SAI_CR5_WNW_MASK (0x1f << 24) 16143550821SXiubo Li #define FSL_SAI_CR5_W0W(x) (((x) - 1) << 16) 16243550821SXiubo Li #define FSL_SAI_CR5_W0W_MASK (0x1f << 16) 16343550821SXiubo Li #define FSL_SAI_CR5_FBT(x) ((x) << 8) 16443550821SXiubo Li #define FSL_SAI_CR5_FBT_MASK (0x1f << 8) 16543550821SXiubo Li 1660b2cbce6SShengjiu Wang /* SAI MCLK Control Register */ 1670b2cbce6SShengjiu Wang #define FSL_SAI_MCTL_MCLK_EN BIT(30) /* MCLK Enable */ 1680b2cbce6SShengjiu Wang #define FSL_SAI_MCTL_MSEL_MASK (0x3 << 24) 1690b2cbce6SShengjiu Wang #define FSL_SAI_MCTL_MSEL(ID) ((ID) << 24) 1700b2cbce6SShengjiu Wang #define FSL_SAI_MCTL_MSEL_BUS 0 1710b2cbce6SShengjiu Wang #define FSL_SAI_MCTL_MSEL_MCLK1 BIT(24) 1720b2cbce6SShengjiu Wang #define FSL_SAI_MCTL_MSEL_MCLK2 BIT(25) 1730b2cbce6SShengjiu Wang #define FSL_SAI_MCTL_MSEL_MCLK3 (BIT(24) | BIT(25)) 1740b2cbce6SShengjiu Wang #define FSL_SAI_MCTL_DIV_EN BIT(23) 1750b2cbce6SShengjiu Wang #define FSL_SAI_MCTL_DIV_MASK 0xFF 1760b2cbce6SShengjiu Wang 1770b2cbce6SShengjiu Wang /* SAI VERID Register */ 1780b2cbce6SShengjiu Wang #define FSL_SAI_VERID_MAJOR_SHIFT 24 1790b2cbce6SShengjiu Wang #define FSL_SAI_VERID_MAJOR_MASK GENMASK(31, 24) 1800b2cbce6SShengjiu Wang #define FSL_SAI_VERID_MINOR_SHIFT 16 1810b2cbce6SShengjiu Wang #define FSL_SAI_VERID_MINOR_MASK GENMASK(23, 16) 1820b2cbce6SShengjiu Wang #define FSL_SAI_VERID_FEATURE_SHIFT 0 1830b2cbce6SShengjiu Wang #define FSL_SAI_VERID_FEATURE_MASK GENMASK(15, 0) 1840b2cbce6SShengjiu Wang #define FSL_SAI_VERID_EFIFO_EN BIT(0) 1850b2cbce6SShengjiu Wang #define FSL_SAI_VERID_TSTMP_EN BIT(1) 1860b2cbce6SShengjiu Wang 1870b2cbce6SShengjiu Wang /* SAI PARAM Register */ 1880b2cbce6SShengjiu Wang #define FSL_SAI_PARAM_SPF_SHIFT 16 1890b2cbce6SShengjiu Wang #define FSL_SAI_PARAM_SPF_MASK GENMASK(19, 16) 1900b2cbce6SShengjiu Wang #define FSL_SAI_PARAM_WPF_SHIFT 8 1910b2cbce6SShengjiu Wang #define FSL_SAI_PARAM_WPF_MASK GENMASK(11, 8) 1920b2cbce6SShengjiu Wang #define FSL_SAI_PARAM_DLN_MASK GENMASK(3, 0) 1930b2cbce6SShengjiu Wang 1940b2cbce6SShengjiu Wang /* SAI MCLK Divide Register */ 1950b2cbce6SShengjiu Wang #define FSL_SAI_MDIV_MASK 0xFFFFF 1960b2cbce6SShengjiu Wang 1970b2cbce6SShengjiu Wang /* SAI timestamp and bitcounter */ 1980b2cbce6SShengjiu Wang #define FSL_SAI_xTCTL_TSEN BIT(0) 1990b2cbce6SShengjiu Wang #define FSL_SAI_xTCTL_TSINC BIT(1) 2000b2cbce6SShengjiu Wang #define FSL_SAI_xTCTL_RTSC BIT(8) 2010b2cbce6SShengjiu Wang #define FSL_SAI_xTCTL_RBC BIT(9) 2020b2cbce6SShengjiu Wang 20343550821SXiubo Li /* SAI type */ 20443550821SXiubo Li #define FSL_SAI_DMA BIT(0) 20543550821SXiubo Li #define FSL_SAI_USE_AC97 BIT(1) 20643550821SXiubo Li #define FSL_SAI_NET BIT(2) 20743550821SXiubo Li #define FSL_SAI_TRA_SYN BIT(3) 20843550821SXiubo Li #define FSL_SAI_REC_SYN BIT(4) 20943550821SXiubo Li #define FSL_SAI_USE_I2S_SLAVE BIT(5) 21043550821SXiubo Li 21143550821SXiubo Li /* SAI clock sources */ 21243550821SXiubo Li #define FSL_SAI_CLK_BUS 0 21343550821SXiubo Li #define FSL_SAI_CLK_MAST1 1 21443550821SXiubo Li #define FSL_SAI_CLK_MAST2 2 21543550821SXiubo Li #define FSL_SAI_CLK_MAST3 3 21643550821SXiubo Li 217c3ecef21SZidan Wang #define FSL_SAI_MCLK_MAX 4 218ca3e35c7SNicolin Chen 21943550821SXiubo Li /* SAI data transfer numbers per DMA request */ 22043550821SXiubo Li #define FSL_SAI_MAXBURST_TX 6 22143550821SXiubo Li #define FSL_SAI_MAXBURST_RX 6 22243550821SXiubo Li 223907e0cdeSShengjiu Wang #define PMQOS_CPU_LATENCY BIT(0) 224907e0cdeSShengjiu Wang 225e3f4e5b1SShengjiu Wang /* Max number of dataline */ 226e3f4e5b1SShengjiu Wang #define FSL_SAI_DL_NUM (8) 227e3f4e5b1SShengjiu Wang /* default dataline type is zero */ 228e3f4e5b1SShengjiu Wang #define FSL_SAI_DL_DEFAULT (0) 229e3f4e5b1SShengjiu Wang #define FSL_SAI_DL_I2S BIT(0) 230e3f4e5b1SShengjiu Wang #define FSL_SAI_DL_PDM BIT(1) 231e3f4e5b1SShengjiu Wang 23289c9679fSLucas Stach struct fsl_sai_soc_data { 23389c9679fSLucas Stach bool use_imx_pcm; 234e75f4940SMihai Serban bool use_edma; 23553233e40SShengjiu Wang bool mclk0_is_mclk1; 2363e4a8261SShengjiu Wang bool mclk_with_tere; 237bd517707SLucas Stach unsigned int fifo_depth; 238eba0f007SSascha Hauer unsigned int pins; 2394f7a0728SDaniel Baluta unsigned int reg_offset; 240907e0cdeSShengjiu Wang unsigned int flags; 2419e71bc33SShengjiu Wang unsigned int max_register; 242870b89d1SChancel Liu unsigned int max_burst[2]; 24389c9679fSLucas Stach }; 24489c9679fSLucas Stach 2451dc658b1SShengjiu Wang /** 2461dc658b1SShengjiu Wang * struct fsl_sai_verid - version id data 24799c1e74fSSascha Hauer * @version: version number 2481dc658b1SShengjiu Wang * @feature: feature specification number 2491dc658b1SShengjiu Wang * 0000000000000000b - Standard feature set 2501dc658b1SShengjiu Wang * 0000000000000000b - Standard feature set 2511dc658b1SShengjiu Wang */ 2521dc658b1SShengjiu Wang struct fsl_sai_verid { 25399c1e74fSSascha Hauer u32 version; 2541dc658b1SShengjiu Wang u32 feature; 2551dc658b1SShengjiu Wang }; 2561dc658b1SShengjiu Wang 2571dc658b1SShengjiu Wang /** 2581dc658b1SShengjiu Wang * struct fsl_sai_param - parameter data 2591dc658b1SShengjiu Wang * @slot_num: The maximum number of slots per frame 2601dc658b1SShengjiu Wang * @fifo_depth: The number of words in each FIFO (depth) 2611dc658b1SShengjiu Wang * @dataline: The number of datalines implemented 2621dc658b1SShengjiu Wang */ 2631dc658b1SShengjiu Wang struct fsl_sai_param { 2641dc658b1SShengjiu Wang u32 slot_num; 2651dc658b1SShengjiu Wang u32 fifo_depth; 2661dc658b1SShengjiu Wang u32 dataline; 2671dc658b1SShengjiu Wang }; 2681dc658b1SShengjiu Wang 269e3f4e5b1SShengjiu Wang struct fsl_sai_dl_cfg { 270e3f4e5b1SShengjiu Wang unsigned int type; 271e3f4e5b1SShengjiu Wang unsigned int pins[2]; 272e3f4e5b1SShengjiu Wang unsigned int mask[2]; 273e3f4e5b1SShengjiu Wang unsigned int start_off[2]; 274e3f4e5b1SShengjiu Wang unsigned int next_off[2]; 275e3f4e5b1SShengjiu Wang }; 276e3f4e5b1SShengjiu Wang 27743550821SXiubo Li struct fsl_sai { 278e2681a1bSNicolin Chen struct platform_device *pdev; 27978957fc3SXiubo Li struct regmap *regmap; 280ca3e35c7SNicolin Chen struct clk *bus_clk; 281ca3e35c7SNicolin Chen struct clk *mclk_clk[FSL_SAI_MCLK_MAX]; 2827cb7f07dSShengjiu Wang struct clk *pll8k_clk; 2837cb7f07dSShengjiu Wang struct clk *pll11k_clk; 284cd640ca2SShengjiu Wang struct resource *res; 28543550821SXiubo Li 286361284a4SMark Brown bool is_consumer_mode; 287eadb0019SXiubo Li bool is_lsb_first; 288a3f7dcc9SXiubo Li bool is_dsp_mode; 289c111c2ddSShengjiu Wang bool is_pdm_mode; 29088630575SShengjiu Wang bool is_multi_fifo_dma; 29108fdf65eSNicolin Chen bool synchronous[2]; 292e3f4e5b1SShengjiu Wang struct fsl_sai_dl_cfg *dl_cfg; 293e3f4e5b1SShengjiu Wang unsigned int dl_cfg_cnt; 2943e4a8261SShengjiu Wang bool mclk_direction_output; 29543550821SXiubo Li 296c3ecef21SZidan Wang unsigned int mclk_id[2]; 297c3ecef21SZidan Wang unsigned int mclk_streams; 298c1df2964SZidan Wang unsigned int slots; 299c1df2964SZidan Wang unsigned int slot_width; 30063d1a348SViorel Suman unsigned int bclk_ratio; 301c1df2964SZidan Wang 30289c9679fSLucas Stach const struct fsl_sai_soc_data *soc_data; 30322a16145SShengjiu Wang struct snd_soc_dai_driver cpu_dai_drv; 30443550821SXiubo Li struct snd_dmaengine_dai_dma_data dma_params_rx; 30543550821SXiubo Li struct snd_dmaengine_dai_dma_data dma_params_tx; 3061dc658b1SShengjiu Wang struct fsl_sai_verid verid; 3071dc658b1SShengjiu Wang struct fsl_sai_param param; 308907e0cdeSShengjiu Wang struct pm_qos_request pm_qos_req; 309b4ee8a91SShengjiu Wang struct pinctrl *pinctrl; 310b4ee8a91SShengjiu Wang struct pinctrl_state *pins_state; 31188630575SShengjiu Wang struct sdma_peripheral_config audio_config[2]; 31243550821SXiubo Li }; 31343550821SXiubo Li 31408fdf65eSNicolin Chen #define TX 1 31508fdf65eSNicolin Chen #define RX 0 31608fdf65eSNicolin Chen 31743550821SXiubo Li #endif /* __FSL_SAI_H */ 318