18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright 2012-2013 Freescale Semiconductor, Inc.
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#ifndef __FSL_SAI_H
78c2ecf20Sopenharmony_ci#define __FSL_SAI_H
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#include <sound/dmaengine_pcm.h>
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#define FSL_SAI_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
128c2ecf20Sopenharmony_ci			 SNDRV_PCM_FMTBIT_S20_3LE |\
138c2ecf20Sopenharmony_ci			 SNDRV_PCM_FMTBIT_S24_LE |\
148c2ecf20Sopenharmony_ci			 SNDRV_PCM_FMTBIT_S32_LE)
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci/* SAI Register Map Register */
178c2ecf20Sopenharmony_ci#define FSL_SAI_VERID	0x00 /* SAI Version ID Register */
188c2ecf20Sopenharmony_ci#define FSL_SAI_PARAM	0x04 /* SAI Parameter Register */
198c2ecf20Sopenharmony_ci#define FSL_SAI_TCSR(ofs)	(0x00 + ofs) /* SAI Transmit Control */
208c2ecf20Sopenharmony_ci#define FSL_SAI_TCR1(ofs)	(0x04 + ofs) /* SAI Transmit Configuration 1 */
218c2ecf20Sopenharmony_ci#define FSL_SAI_TCR2(ofs)	(0x08 + ofs) /* SAI Transmit Configuration 2 */
228c2ecf20Sopenharmony_ci#define FSL_SAI_TCR3(ofs)	(0x0c + ofs) /* SAI Transmit Configuration 3 */
238c2ecf20Sopenharmony_ci#define FSL_SAI_TCR4(ofs)	(0x10 + ofs) /* SAI Transmit Configuration 4 */
248c2ecf20Sopenharmony_ci#define FSL_SAI_TCR5(ofs)	(0x14 + ofs) /* SAI Transmit Configuration 5 */
258c2ecf20Sopenharmony_ci#define FSL_SAI_TDR0	0x20 /* SAI Transmit Data 0 */
268c2ecf20Sopenharmony_ci#define FSL_SAI_TDR1	0x24 /* SAI Transmit Data 1 */
278c2ecf20Sopenharmony_ci#define FSL_SAI_TDR2	0x28 /* SAI Transmit Data 2 */
288c2ecf20Sopenharmony_ci#define FSL_SAI_TDR3	0x2C /* SAI Transmit Data 3 */
298c2ecf20Sopenharmony_ci#define FSL_SAI_TDR4	0x30 /* SAI Transmit Data 4 */
308c2ecf20Sopenharmony_ci#define FSL_SAI_TDR5	0x34 /* SAI Transmit Data 5 */
318c2ecf20Sopenharmony_ci#define FSL_SAI_TDR6	0x38 /* SAI Transmit Data 6 */
328c2ecf20Sopenharmony_ci#define FSL_SAI_TDR7	0x3C /* SAI Transmit Data 7 */
338c2ecf20Sopenharmony_ci#define FSL_SAI_TFR0	0x40 /* SAI Transmit FIFO 0 */
348c2ecf20Sopenharmony_ci#define FSL_SAI_TFR1	0x44 /* SAI Transmit FIFO 1 */
358c2ecf20Sopenharmony_ci#define FSL_SAI_TFR2	0x48 /* SAI Transmit FIFO 2 */
368c2ecf20Sopenharmony_ci#define FSL_SAI_TFR3	0x4C /* SAI Transmit FIFO 3 */
378c2ecf20Sopenharmony_ci#define FSL_SAI_TFR4	0x50 /* SAI Transmit FIFO 4 */
388c2ecf20Sopenharmony_ci#define FSL_SAI_TFR5	0x54 /* SAI Transmit FIFO 5 */
398c2ecf20Sopenharmony_ci#define FSL_SAI_TFR6	0x58 /* SAI Transmit FIFO 6 */
408c2ecf20Sopenharmony_ci#define FSL_SAI_TFR7	0x5C /* SAI Transmit FIFO 7 */
418c2ecf20Sopenharmony_ci#define FSL_SAI_TMR	0x60 /* SAI Transmit Mask */
428c2ecf20Sopenharmony_ci#define FSL_SAI_TTCTL	0x70 /* SAI Transmit Timestamp Control Register */
438c2ecf20Sopenharmony_ci#define FSL_SAI_TTCTN	0x74 /* SAI Transmit Timestamp Counter Register */
448c2ecf20Sopenharmony_ci#define FSL_SAI_TBCTN	0x78 /* SAI Transmit Bit Counter Register */
458c2ecf20Sopenharmony_ci#define FSL_SAI_TTCAP	0x7C /* SAI Transmit Timestamp Capture */
468c2ecf20Sopenharmony_ci#define FSL_SAI_RCSR(ofs)	(0x80 + ofs) /* SAI Receive Control */
478c2ecf20Sopenharmony_ci#define FSL_SAI_RCR1(ofs)	(0x84 + ofs)/* SAI Receive Configuration 1 */
488c2ecf20Sopenharmony_ci#define FSL_SAI_RCR2(ofs)	(0x88 + ofs) /* SAI Receive Configuration 2 */
498c2ecf20Sopenharmony_ci#define FSL_SAI_RCR3(ofs)	(0x8c + ofs) /* SAI Receive Configuration 3 */
508c2ecf20Sopenharmony_ci#define FSL_SAI_RCR4(ofs)	(0x90 + ofs) /* SAI Receive Configuration 4 */
518c2ecf20Sopenharmony_ci#define FSL_SAI_RCR5(ofs)	(0x94 + ofs) /* SAI Receive Configuration 5 */
528c2ecf20Sopenharmony_ci#define FSL_SAI_RDR0	0xa0 /* SAI Receive Data 0 */
538c2ecf20Sopenharmony_ci#define FSL_SAI_RDR1	0xa4 /* SAI Receive Data 1 */
548c2ecf20Sopenharmony_ci#define FSL_SAI_RDR2	0xa8 /* SAI Receive Data 2 */
558c2ecf20Sopenharmony_ci#define FSL_SAI_RDR3	0xac /* SAI Receive Data 3 */
568c2ecf20Sopenharmony_ci#define FSL_SAI_RDR4	0xb0 /* SAI Receive Data 4 */
578c2ecf20Sopenharmony_ci#define FSL_SAI_RDR5	0xb4 /* SAI Receive Data 5 */
588c2ecf20Sopenharmony_ci#define FSL_SAI_RDR6	0xb8 /* SAI Receive Data 6 */
598c2ecf20Sopenharmony_ci#define FSL_SAI_RDR7	0xbc /* SAI Receive Data 7 */
608c2ecf20Sopenharmony_ci#define FSL_SAI_RFR0	0xc0 /* SAI Receive FIFO 0 */
618c2ecf20Sopenharmony_ci#define FSL_SAI_RFR1	0xc4 /* SAI Receive FIFO 1 */
628c2ecf20Sopenharmony_ci#define FSL_SAI_RFR2	0xc8 /* SAI Receive FIFO 2 */
638c2ecf20Sopenharmony_ci#define FSL_SAI_RFR3	0xcc /* SAI Receive FIFO 3 */
648c2ecf20Sopenharmony_ci#define FSL_SAI_RFR4	0xd0 /* SAI Receive FIFO 4 */
658c2ecf20Sopenharmony_ci#define FSL_SAI_RFR5	0xd4 /* SAI Receive FIFO 5 */
668c2ecf20Sopenharmony_ci#define FSL_SAI_RFR6	0xd8 /* SAI Receive FIFO 6 */
678c2ecf20Sopenharmony_ci#define FSL_SAI_RFR7	0xdc /* SAI Receive FIFO 7 */
688c2ecf20Sopenharmony_ci#define FSL_SAI_RMR	0xe0 /* SAI Receive Mask */
698c2ecf20Sopenharmony_ci#define FSL_SAI_RTCTL	0xf0 /* SAI Receive Timestamp Control Register */
708c2ecf20Sopenharmony_ci#define FSL_SAI_RTCTN	0xf4 /* SAI Receive Timestamp Counter Register */
718c2ecf20Sopenharmony_ci#define FSL_SAI_RBCTN	0xf8 /* SAI Receive Bit Counter Register */
728c2ecf20Sopenharmony_ci#define FSL_SAI_RTCAP	0xfc /* SAI Receive Timestamp Capture */
738c2ecf20Sopenharmony_ci
748c2ecf20Sopenharmony_ci#define FSL_SAI_MCTL	0x100 /* SAI MCLK Control Register */
758c2ecf20Sopenharmony_ci#define FSL_SAI_MDIV	0x104 /* SAI MCLK Divide Register */
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ci#define FSL_SAI_xCSR(tx, ofs)	(tx ? FSL_SAI_TCSR(ofs) : FSL_SAI_RCSR(ofs))
788c2ecf20Sopenharmony_ci#define FSL_SAI_xCR1(tx, ofs)	(tx ? FSL_SAI_TCR1(ofs) : FSL_SAI_RCR1(ofs))
798c2ecf20Sopenharmony_ci#define FSL_SAI_xCR2(tx, ofs)	(tx ? FSL_SAI_TCR2(ofs) : FSL_SAI_RCR2(ofs))
808c2ecf20Sopenharmony_ci#define FSL_SAI_xCR3(tx, ofs)	(tx ? FSL_SAI_TCR3(ofs) : FSL_SAI_RCR3(ofs))
818c2ecf20Sopenharmony_ci#define FSL_SAI_xCR4(tx, ofs)	(tx ? FSL_SAI_TCR4(ofs) : FSL_SAI_RCR4(ofs))
828c2ecf20Sopenharmony_ci#define FSL_SAI_xCR5(tx, ofs)	(tx ? FSL_SAI_TCR5(ofs) : FSL_SAI_RCR5(ofs))
838c2ecf20Sopenharmony_ci#define FSL_SAI_xDR0(tx)	(tx ? FSL_SAI_TDR0 : FSL_SAI_RDR0)
848c2ecf20Sopenharmony_ci#define FSL_SAI_xFR0(tx)	(tx ? FSL_SAI_TFR0 : FSL_SAI_RFR0)
858c2ecf20Sopenharmony_ci#define FSL_SAI_xMR(tx)		(tx ? FSL_SAI_TMR : FSL_SAI_RMR)
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_ci/* SAI Transmit/Receive Control Register */
888c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_TERE	BIT(31)
898c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_SE		BIT(30)
908c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_BCE		BIT(28)
918c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_FR		BIT(25)
928c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_SR		BIT(24)
938c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_xF_SHIFT	16
948c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_xF_W_SHIFT	18
958c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_xF_MASK	(0x1f << FSL_SAI_CSR_xF_SHIFT)
968c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_xF_W_MASK	(0x7 << FSL_SAI_CSR_xF_W_SHIFT)
978c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_WSF		BIT(20)
988c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_SEF		BIT(19)
998c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_FEF		BIT(18)
1008c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_FWF		BIT(17)
1018c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_FRF		BIT(16)
1028c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_xIE_SHIFT	8
1038c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_xIE_MASK	(0x1f << FSL_SAI_CSR_xIE_SHIFT)
1048c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_WSIE	BIT(12)
1058c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_SEIE	BIT(11)
1068c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_FEIE	BIT(10)
1078c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_FWIE	BIT(9)
1088c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_FRIE	BIT(8)
1098c2ecf20Sopenharmony_ci#define FSL_SAI_CSR_FRDE	BIT(0)
1108c2ecf20Sopenharmony_ci
1118c2ecf20Sopenharmony_ci/* SAI Transmit and Receive Configuration 1 Register */
1128c2ecf20Sopenharmony_ci#define FSL_SAI_CR1_RFW_MASK(x)	((x) - 1)
1138c2ecf20Sopenharmony_ci
1148c2ecf20Sopenharmony_ci/* SAI Transmit and Receive Configuration 2 Register */
1158c2ecf20Sopenharmony_ci#define FSL_SAI_CR2_SYNC	BIT(30)
1168c2ecf20Sopenharmony_ci#define FSL_SAI_CR2_MSEL_MASK	(0x3 << 26)
1178c2ecf20Sopenharmony_ci#define FSL_SAI_CR2_MSEL_BUS	0
1188c2ecf20Sopenharmony_ci#define FSL_SAI_CR2_MSEL_MCLK1	BIT(26)
1198c2ecf20Sopenharmony_ci#define FSL_SAI_CR2_MSEL_MCLK2	BIT(27)
1208c2ecf20Sopenharmony_ci#define FSL_SAI_CR2_MSEL_MCLK3	(BIT(26) | BIT(27))
1218c2ecf20Sopenharmony_ci#define FSL_SAI_CR2_MSEL(ID)	((ID) << 26)
1228c2ecf20Sopenharmony_ci#define FSL_SAI_CR2_BCP		BIT(25)
1238c2ecf20Sopenharmony_ci#define FSL_SAI_CR2_BCD_MSTR	BIT(24)
1248c2ecf20Sopenharmony_ci#define FSL_SAI_CR2_BYP		BIT(23) /* BCLK bypass */
1258c2ecf20Sopenharmony_ci#define FSL_SAI_CR2_DIV_MASK	0xff
1268c2ecf20Sopenharmony_ci
1278c2ecf20Sopenharmony_ci/* SAI Transmit and Receive Configuration 3 Register */
1288c2ecf20Sopenharmony_ci#define FSL_SAI_CR3_TRCE(x)     ((x) << 16)
1298c2ecf20Sopenharmony_ci#define FSL_SAI_CR3_TRCE_MASK	GENMASK(23, 16)
1308c2ecf20Sopenharmony_ci#define FSL_SAI_CR3_WDFL(x)	(x)
1318c2ecf20Sopenharmony_ci#define FSL_SAI_CR3_WDFL_MASK	0x1f
1328c2ecf20Sopenharmony_ci
1338c2ecf20Sopenharmony_ci/* SAI Transmit and Receive Configuration 4 Register */
1348c2ecf20Sopenharmony_ci
1358c2ecf20Sopenharmony_ci#define FSL_SAI_CR4_FCONT	BIT(28)
1368c2ecf20Sopenharmony_ci#define FSL_SAI_CR4_FCOMB_SHIFT BIT(26)
1378c2ecf20Sopenharmony_ci#define FSL_SAI_CR4_FCOMB_SOFT  BIT(27)
1388c2ecf20Sopenharmony_ci#define FSL_SAI_CR4_FCOMB_MASK  (0x3 << 26)
1398c2ecf20Sopenharmony_ci#define FSL_SAI_CR4_FPACK_8     (0x2 << 24)
1408c2ecf20Sopenharmony_ci#define FSL_SAI_CR4_FPACK_16    (0x3 << 24)
1418c2ecf20Sopenharmony_ci#define FSL_SAI_CR4_FRSZ(x)	(((x) - 1) << 16)
1428c2ecf20Sopenharmony_ci#define FSL_SAI_CR4_FRSZ_MASK	(0x1f << 16)
1438c2ecf20Sopenharmony_ci#define FSL_SAI_CR4_SYWD(x)	(((x) - 1) << 8)
1448c2ecf20Sopenharmony_ci#define FSL_SAI_CR4_SYWD_MASK	(0x1f << 8)
1458c2ecf20Sopenharmony_ci#define FSL_SAI_CR4_CHMOD       BIT(5)
1468c2ecf20Sopenharmony_ci#define FSL_SAI_CR4_CHMOD_MASK  BIT(5)
1478c2ecf20Sopenharmony_ci#define FSL_SAI_CR4_MF		BIT(4)
1488c2ecf20Sopenharmony_ci#define FSL_SAI_CR4_FSE		BIT(3)
1498c2ecf20Sopenharmony_ci#define FSL_SAI_CR4_FSP		BIT(1)
1508c2ecf20Sopenharmony_ci#define FSL_SAI_CR4_FSD_MSTR	BIT(0)
1518c2ecf20Sopenharmony_ci
1528c2ecf20Sopenharmony_ci/* SAI Transmit and Receive Configuration 5 Register */
1538c2ecf20Sopenharmony_ci#define FSL_SAI_CR5_WNW(x)	(((x) - 1) << 24)
1548c2ecf20Sopenharmony_ci#define FSL_SAI_CR5_WNW_MASK	(0x1f << 24)
1558c2ecf20Sopenharmony_ci#define FSL_SAI_CR5_W0W(x)	(((x) - 1) << 16)
1568c2ecf20Sopenharmony_ci#define FSL_SAI_CR5_W0W_MASK	(0x1f << 16)
1578c2ecf20Sopenharmony_ci#define FSL_SAI_CR5_FBT(x)	((x) << 8)
1588c2ecf20Sopenharmony_ci#define FSL_SAI_CR5_FBT_MASK	(0x1f << 8)
1598c2ecf20Sopenharmony_ci
1608c2ecf20Sopenharmony_ci/* SAI MCLK Control Register */
1618c2ecf20Sopenharmony_ci#define FSL_SAI_MCTL_MCLK_EN	BIT(30)	/* MCLK Enable */
1628c2ecf20Sopenharmony_ci#define FSL_SAI_MCTL_MSEL_MASK	(0x3 << 24)
1638c2ecf20Sopenharmony_ci#define FSL_SAI_MCTL_MSEL(ID)   ((ID) << 24)
1648c2ecf20Sopenharmony_ci#define FSL_SAI_MCTL_MSEL_BUS	0
1658c2ecf20Sopenharmony_ci#define FSL_SAI_MCTL_MSEL_MCLK1	BIT(24)
1668c2ecf20Sopenharmony_ci#define FSL_SAI_MCTL_MSEL_MCLK2	BIT(25)
1678c2ecf20Sopenharmony_ci#define FSL_SAI_MCTL_MSEL_MCLK3	(BIT(24) | BIT(25))
1688c2ecf20Sopenharmony_ci#define FSL_SAI_MCTL_DIV_EN	BIT(23)
1698c2ecf20Sopenharmony_ci#define FSL_SAI_MCTL_DIV_MASK	0xFF
1708c2ecf20Sopenharmony_ci
1718c2ecf20Sopenharmony_ci/* SAI VERID Register */
1728c2ecf20Sopenharmony_ci#define FSL_SAI_VERID_MAJOR_SHIFT   24
1738c2ecf20Sopenharmony_ci#define FSL_SAI_VERID_MAJOR_MASK    GENMASK(31, 24)
1748c2ecf20Sopenharmony_ci#define FSL_SAI_VERID_MINOR_SHIFT   16
1758c2ecf20Sopenharmony_ci#define FSL_SAI_VERID_MINOR_MASK    GENMASK(23, 16)
1768c2ecf20Sopenharmony_ci#define FSL_SAI_VERID_FEATURE_SHIFT 0
1778c2ecf20Sopenharmony_ci#define FSL_SAI_VERID_FEATURE_MASK  GENMASK(15, 0)
1788c2ecf20Sopenharmony_ci#define FSL_SAI_VERID_EFIFO_EN	    BIT(0)
1798c2ecf20Sopenharmony_ci#define FSL_SAI_VERID_TSTMP_EN	    BIT(1)
1808c2ecf20Sopenharmony_ci
1818c2ecf20Sopenharmony_ci/* SAI PARAM Register */
1828c2ecf20Sopenharmony_ci#define FSL_SAI_PARAM_SPF_SHIFT	    16
1838c2ecf20Sopenharmony_ci#define FSL_SAI_PARAM_SPF_MASK	    GENMASK(19, 16)
1848c2ecf20Sopenharmony_ci#define FSL_SAI_PARAM_WPF_SHIFT	    8
1858c2ecf20Sopenharmony_ci#define FSL_SAI_PARAM_WPF_MASK	    GENMASK(11, 8)
1868c2ecf20Sopenharmony_ci#define FSL_SAI_PARAM_DLN_MASK	    GENMASK(3, 0)
1878c2ecf20Sopenharmony_ci
1888c2ecf20Sopenharmony_ci/* SAI MCLK Divide Register */
1898c2ecf20Sopenharmony_ci#define FSL_SAI_MDIV_MASK	    0xFFFFF
1908c2ecf20Sopenharmony_ci
1918c2ecf20Sopenharmony_ci/* SAI timestamp and bitcounter */
1928c2ecf20Sopenharmony_ci#define FSL_SAI_xTCTL_TSEN         BIT(0)
1938c2ecf20Sopenharmony_ci#define FSL_SAI_xTCTL_TSINC        BIT(1)
1948c2ecf20Sopenharmony_ci#define FSL_SAI_xTCTL_RTSC         BIT(8)
1958c2ecf20Sopenharmony_ci#define FSL_SAI_xTCTL_RBC          BIT(9)
1968c2ecf20Sopenharmony_ci
1978c2ecf20Sopenharmony_ci/* SAI type */
1988c2ecf20Sopenharmony_ci#define FSL_SAI_DMA		BIT(0)
1998c2ecf20Sopenharmony_ci#define FSL_SAI_USE_AC97	BIT(1)
2008c2ecf20Sopenharmony_ci#define FSL_SAI_NET		BIT(2)
2018c2ecf20Sopenharmony_ci#define FSL_SAI_TRA_SYN		BIT(3)
2028c2ecf20Sopenharmony_ci#define FSL_SAI_REC_SYN		BIT(4)
2038c2ecf20Sopenharmony_ci#define FSL_SAI_USE_I2S_SLAVE	BIT(5)
2048c2ecf20Sopenharmony_ci
2058c2ecf20Sopenharmony_ci#define FSL_FMT_TRANSMITTER	0
2068c2ecf20Sopenharmony_ci#define FSL_FMT_RECEIVER	1
2078c2ecf20Sopenharmony_ci
2088c2ecf20Sopenharmony_ci/* SAI clock sources */
2098c2ecf20Sopenharmony_ci#define FSL_SAI_CLK_BUS		0
2108c2ecf20Sopenharmony_ci#define FSL_SAI_CLK_MAST1	1
2118c2ecf20Sopenharmony_ci#define FSL_SAI_CLK_MAST2	2
2128c2ecf20Sopenharmony_ci#define FSL_SAI_CLK_MAST3	3
2138c2ecf20Sopenharmony_ci
2148c2ecf20Sopenharmony_ci#define FSL_SAI_MCLK_MAX	4
2158c2ecf20Sopenharmony_ci
2168c2ecf20Sopenharmony_ci/* SAI data transfer numbers per DMA request */
2178c2ecf20Sopenharmony_ci#define FSL_SAI_MAXBURST_TX 6
2188c2ecf20Sopenharmony_ci#define FSL_SAI_MAXBURST_RX 6
2198c2ecf20Sopenharmony_ci
2208c2ecf20Sopenharmony_cistruct fsl_sai_soc_data {
2218c2ecf20Sopenharmony_ci	bool use_imx_pcm;
2228c2ecf20Sopenharmony_ci	bool use_edma;
2238c2ecf20Sopenharmony_ci	unsigned int fifo_depth;
2248c2ecf20Sopenharmony_ci	unsigned int reg_offset;
2258c2ecf20Sopenharmony_ci};
2268c2ecf20Sopenharmony_ci
2278c2ecf20Sopenharmony_ci/**
2288c2ecf20Sopenharmony_ci * struct fsl_sai_verid - version id data
2298c2ecf20Sopenharmony_ci * @major: major version number
2308c2ecf20Sopenharmony_ci * @minor: minor version number
2318c2ecf20Sopenharmony_ci * @feature: feature specification number
2328c2ecf20Sopenharmony_ci *           0000000000000000b - Standard feature set
2338c2ecf20Sopenharmony_ci *           0000000000000000b - Standard feature set
2348c2ecf20Sopenharmony_ci */
2358c2ecf20Sopenharmony_cistruct fsl_sai_verid {
2368c2ecf20Sopenharmony_ci	u32 major;
2378c2ecf20Sopenharmony_ci	u32 minor;
2388c2ecf20Sopenharmony_ci	u32 feature;
2398c2ecf20Sopenharmony_ci};
2408c2ecf20Sopenharmony_ci
2418c2ecf20Sopenharmony_ci/**
2428c2ecf20Sopenharmony_ci * struct fsl_sai_param - parameter data
2438c2ecf20Sopenharmony_ci * @slot_num: The maximum number of slots per frame
2448c2ecf20Sopenharmony_ci * @fifo_depth: The number of words in each FIFO (depth)
2458c2ecf20Sopenharmony_ci * @dataline: The number of datalines implemented
2468c2ecf20Sopenharmony_ci */
2478c2ecf20Sopenharmony_cistruct fsl_sai_param {
2488c2ecf20Sopenharmony_ci	u32 slot_num;
2498c2ecf20Sopenharmony_ci	u32 fifo_depth;
2508c2ecf20Sopenharmony_ci	u32 dataline;
2518c2ecf20Sopenharmony_ci};
2528c2ecf20Sopenharmony_ci
2538c2ecf20Sopenharmony_cistruct fsl_sai {
2548c2ecf20Sopenharmony_ci	struct platform_device *pdev;
2558c2ecf20Sopenharmony_ci	struct regmap *regmap;
2568c2ecf20Sopenharmony_ci	struct clk *bus_clk;
2578c2ecf20Sopenharmony_ci	struct clk *mclk_clk[FSL_SAI_MCLK_MAX];
2588c2ecf20Sopenharmony_ci
2598c2ecf20Sopenharmony_ci	bool is_slave_mode;
2608c2ecf20Sopenharmony_ci	bool is_lsb_first;
2618c2ecf20Sopenharmony_ci	bool is_dsp_mode;
2628c2ecf20Sopenharmony_ci	bool synchronous[2];
2638c2ecf20Sopenharmony_ci
2648c2ecf20Sopenharmony_ci	unsigned int mclk_id[2];
2658c2ecf20Sopenharmony_ci	unsigned int mclk_streams;
2668c2ecf20Sopenharmony_ci	unsigned int slots;
2678c2ecf20Sopenharmony_ci	unsigned int slot_width;
2688c2ecf20Sopenharmony_ci	unsigned int bclk_ratio;
2698c2ecf20Sopenharmony_ci
2708c2ecf20Sopenharmony_ci	const struct fsl_sai_soc_data *soc_data;
2718c2ecf20Sopenharmony_ci	struct snd_soc_dai_driver cpu_dai_drv;
2728c2ecf20Sopenharmony_ci	struct snd_dmaengine_dai_dma_data dma_params_rx;
2738c2ecf20Sopenharmony_ci	struct snd_dmaengine_dai_dma_data dma_params_tx;
2748c2ecf20Sopenharmony_ci	struct fsl_sai_verid verid;
2758c2ecf20Sopenharmony_ci	struct fsl_sai_param param;
2768c2ecf20Sopenharmony_ci};
2778c2ecf20Sopenharmony_ci
2788c2ecf20Sopenharmony_ci#define TX 1
2798c2ecf20Sopenharmony_ci#define RX 0
2808c2ecf20Sopenharmony_ci
2818c2ecf20Sopenharmony_ci#endif /* __FSL_SAI_H */
282