18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (C) 2019 NXP
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#ifndef _FSL_EASRC_H
78c2ecf20Sopenharmony_ci#define _FSL_EASRC_H
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#include <sound/asound.h>
108c2ecf20Sopenharmony_ci#include <linux/platform_data/dma-imx.h>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#include "fsl_asrc_common.h"
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci/* EASRC Register Map */
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci/* ASRC Input Write FIFO */
178c2ecf20Sopenharmony_ci#define REG_EASRC_WRFIFO(ctx)		(0x000 + 4 * (ctx))
188c2ecf20Sopenharmony_ci/* ASRC Output Read FIFO */
198c2ecf20Sopenharmony_ci#define REG_EASRC_RDFIFO(ctx)		(0x010 + 4 * (ctx))
208c2ecf20Sopenharmony_ci/* ASRC Context Control */
218c2ecf20Sopenharmony_ci#define REG_EASRC_CC(ctx)		(0x020 + 4 * (ctx))
228c2ecf20Sopenharmony_ci/* ASRC Context Control Extended 1 */
238c2ecf20Sopenharmony_ci#define REG_EASRC_CCE1(ctx)		(0x030 + 4 * (ctx))
248c2ecf20Sopenharmony_ci/* ASRC Context Control Extended 2 */
258c2ecf20Sopenharmony_ci#define REG_EASRC_CCE2(ctx)		(0x040 + 4 * (ctx))
268c2ecf20Sopenharmony_ci/* ASRC Control Input Access */
278c2ecf20Sopenharmony_ci#define REG_EASRC_CIA(ctx)		(0x050 + 4 * (ctx))
288c2ecf20Sopenharmony_ci/* ASRC Datapath Processor Control Slot0 */
298c2ecf20Sopenharmony_ci#define REG_EASRC_DPCS0R0(ctx)		(0x060 + 4 * (ctx))
308c2ecf20Sopenharmony_ci#define REG_EASRC_DPCS0R1(ctx)		(0x070 + 4 * (ctx))
318c2ecf20Sopenharmony_ci#define REG_EASRC_DPCS0R2(ctx)		(0x080 + 4 * (ctx))
328c2ecf20Sopenharmony_ci#define REG_EASRC_DPCS0R3(ctx)		(0x090 + 4 * (ctx))
338c2ecf20Sopenharmony_ci/* ASRC Datapath Processor Control Slot1 */
348c2ecf20Sopenharmony_ci#define REG_EASRC_DPCS1R0(ctx)		(0x0A0 + 4 * (ctx))
358c2ecf20Sopenharmony_ci#define REG_EASRC_DPCS1R1(ctx)		(0x0B0 + 4 * (ctx))
368c2ecf20Sopenharmony_ci#define REG_EASRC_DPCS1R2(ctx)		(0x0C0 + 4 * (ctx))
378c2ecf20Sopenharmony_ci#define REG_EASRC_DPCS1R3(ctx)		(0x0D0 + 4 * (ctx))
388c2ecf20Sopenharmony_ci/* ASRC Context Output Control */
398c2ecf20Sopenharmony_ci#define REG_EASRC_COC(ctx)		(0x0E0 + 4 * (ctx))
408c2ecf20Sopenharmony_ci/* ASRC Control Output Access */
418c2ecf20Sopenharmony_ci#define REG_EASRC_COA(ctx)		(0x0F0 + 4 * (ctx))
428c2ecf20Sopenharmony_ci/* ASRC Sample FIFO Status */
438c2ecf20Sopenharmony_ci#define REG_EASRC_SFS(ctx)		(0x100 + 4 * (ctx))
448c2ecf20Sopenharmony_ci/* ASRC Resampling Ratio Low */
458c2ecf20Sopenharmony_ci#define REG_EASRC_RRL(ctx)		(0x110 + 8 * (ctx))
468c2ecf20Sopenharmony_ci/* ASRC Resampling Ratio High */
478c2ecf20Sopenharmony_ci#define REG_EASRC_RRH(ctx)		(0x114 + 8 * (ctx))
488c2ecf20Sopenharmony_ci/* ASRC Resampling Ratio Update Control */
498c2ecf20Sopenharmony_ci#define REG_EASRC_RUC(ctx)		(0x130 + 4 * (ctx))
508c2ecf20Sopenharmony_ci/* ASRC Resampling Ratio Update Rate */
518c2ecf20Sopenharmony_ci#define REG_EASRC_RUR(ctx)		(0x140 + 4 * (ctx))
528c2ecf20Sopenharmony_ci/* ASRC Resampling Center Tap Coefficient Low */
538c2ecf20Sopenharmony_ci#define REG_EASRC_RCTCL			(0x150)
548c2ecf20Sopenharmony_ci/* ASRC Resampling Center Tap Coefficient High */
558c2ecf20Sopenharmony_ci#define REG_EASRC_RCTCH			(0x154)
568c2ecf20Sopenharmony_ci/* ASRC Prefilter Coefficient FIFO */
578c2ecf20Sopenharmony_ci#define REG_EASRC_PCF(ctx)		(0x160 + 4 * (ctx))
588c2ecf20Sopenharmony_ci/* ASRC Context Resampling Coefficient Memory */
598c2ecf20Sopenharmony_ci#define REG_EASRC_CRCM			0x170
608c2ecf20Sopenharmony_ci/* ASRC Context Resampling Coefficient Control*/
618c2ecf20Sopenharmony_ci#define REG_EASRC_CRCC			0x174
628c2ecf20Sopenharmony_ci/* ASRC Interrupt Control */
638c2ecf20Sopenharmony_ci#define REG_EASRC_IRQC			0x178
648c2ecf20Sopenharmony_ci/* ASRC Interrupt Status Flags */
658c2ecf20Sopenharmony_ci#define REG_EASRC_IRQF			0x17C
668c2ecf20Sopenharmony_ci/* ASRC Channel Status 0 */
678c2ecf20Sopenharmony_ci#define REG_EASRC_CS0(ctx)		(0x180 + 4 * (ctx))
688c2ecf20Sopenharmony_ci/* ASRC Channel Status 1 */
698c2ecf20Sopenharmony_ci#define REG_EASRC_CS1(ctx)		(0x190 + 4 * (ctx))
708c2ecf20Sopenharmony_ci/* ASRC Channel Status 2 */
718c2ecf20Sopenharmony_ci#define REG_EASRC_CS2(ctx)		(0x1A0 + 4 * (ctx))
728c2ecf20Sopenharmony_ci/* ASRC Channel Status 3 */
738c2ecf20Sopenharmony_ci#define REG_EASRC_CS3(ctx)		(0x1B0 + 4 * (ctx))
748c2ecf20Sopenharmony_ci/* ASRC Channel Status 4 */
758c2ecf20Sopenharmony_ci#define REG_EASRC_CS4(ctx)		(0x1C0 + 4 * (ctx))
768c2ecf20Sopenharmony_ci/* ASRC Channel Status 5 */
778c2ecf20Sopenharmony_ci#define REG_EASRC_CS5(ctx)		(0x1D0 + 4 * (ctx))
788c2ecf20Sopenharmony_ci/* ASRC Debug Control Register */
798c2ecf20Sopenharmony_ci#define REG_EASRC_DBGC			0x1E0
808c2ecf20Sopenharmony_ci/* ASRC Debug Status Register */
818c2ecf20Sopenharmony_ci#define REG_EASRC_DBGS			0x1E4
828c2ecf20Sopenharmony_ci
838c2ecf20Sopenharmony_ci#define REG_EASRC_FIFO(x, ctx)		(x == IN ? REG_EASRC_WRFIFO(ctx) \
848c2ecf20Sopenharmony_ci						: REG_EASRC_RDFIFO(ctx))
858c2ecf20Sopenharmony_ci
868c2ecf20Sopenharmony_ci/* ASRC Context Control (CC) */
878c2ecf20Sopenharmony_ci#define EASRC_CC_EN_SHIFT		31
888c2ecf20Sopenharmony_ci#define EASRC_CC_EN_MASK		BIT(EASRC_CC_EN_SHIFT)
898c2ecf20Sopenharmony_ci#define EASRC_CC_EN			BIT(EASRC_CC_EN_SHIFT)
908c2ecf20Sopenharmony_ci#define EASRC_CC_STOP_SHIFT		29
918c2ecf20Sopenharmony_ci#define EASRC_CC_STOP_MASK		BIT(EASRC_CC_STOP_SHIFT)
928c2ecf20Sopenharmony_ci#define EASRC_CC_STOP			BIT(EASRC_CC_STOP_SHIFT)
938c2ecf20Sopenharmony_ci#define EASRC_CC_FWMDE_SHIFT		28
948c2ecf20Sopenharmony_ci#define EASRC_CC_FWMDE_MASK		BIT(EASRC_CC_FWMDE_SHIFT)
958c2ecf20Sopenharmony_ci#define EASRC_CC_FWMDE			BIT(EASRC_CC_FWMDE_SHIFT)
968c2ecf20Sopenharmony_ci#define EASRC_CC_FIFO_WTMK_SHIFT	16
978c2ecf20Sopenharmony_ci#define EASRC_CC_FIFO_WTMK_WIDTH	7
988c2ecf20Sopenharmony_ci#define EASRC_CC_FIFO_WTMK_MASK		((BIT(EASRC_CC_FIFO_WTMK_WIDTH) - 1) \
998c2ecf20Sopenharmony_ci					 << EASRC_CC_FIFO_WTMK_SHIFT)
1008c2ecf20Sopenharmony_ci#define EASRC_CC_FIFO_WTMK(v)		(((v) << EASRC_CC_FIFO_WTMK_SHIFT) \
1018c2ecf20Sopenharmony_ci					 & EASRC_CC_FIFO_WTMK_MASK)
1028c2ecf20Sopenharmony_ci#define EASRC_CC_SAMPLE_POS_SHIFT	11
1038c2ecf20Sopenharmony_ci#define EASRC_CC_SAMPLE_POS_WIDTH	5
1048c2ecf20Sopenharmony_ci#define EASRC_CC_SAMPLE_POS_MASK	((BIT(EASRC_CC_SAMPLE_POS_WIDTH) - 1) \
1058c2ecf20Sopenharmony_ci					 << EASRC_CC_SAMPLE_POS_SHIFT)
1068c2ecf20Sopenharmony_ci#define EASRC_CC_SAMPLE_POS(v)		(((v) << EASRC_CC_SAMPLE_POS_SHIFT) \
1078c2ecf20Sopenharmony_ci					 & EASRC_CC_SAMPLE_POS_MASK)
1088c2ecf20Sopenharmony_ci#define EASRC_CC_ENDIANNESS_SHIFT	10
1098c2ecf20Sopenharmony_ci#define EASRC_CC_ENDIANNESS_MASK	BIT(EASRC_CC_ENDIANNESS_SHIFT)
1108c2ecf20Sopenharmony_ci#define EASRC_CC_ENDIANNESS		BIT(EASRC_CC_ENDIANNESS_SHIFT)
1118c2ecf20Sopenharmony_ci#define EASRC_CC_BPS_SHIFT		8
1128c2ecf20Sopenharmony_ci#define EASRC_CC_BPS_WIDTH		2
1138c2ecf20Sopenharmony_ci#define EASRC_CC_BPS_MASK		((BIT(EASRC_CC_BPS_WIDTH) - 1) \
1148c2ecf20Sopenharmony_ci					 << EASRC_CC_BPS_SHIFT)
1158c2ecf20Sopenharmony_ci#define EASRC_CC_BPS(v)			(((v) << EASRC_CC_BPS_SHIFT) \
1168c2ecf20Sopenharmony_ci					 & EASRC_CC_BPS_MASK)
1178c2ecf20Sopenharmony_ci#define EASRC_CC_FMT_SHIFT		7
1188c2ecf20Sopenharmony_ci#define EASRC_CC_FMT_MASK		BIT(EASRC_CC_FMT_SHIFT)
1198c2ecf20Sopenharmony_ci#define EASRC_CC_FMT			BIT(EASRC_CC_FMT_SHIFT)
1208c2ecf20Sopenharmony_ci#define EASRC_CC_INSIGN_SHIFT		6
1218c2ecf20Sopenharmony_ci#define EASRC_CC_INSIGN_MASK		BIT(EASRC_CC_INSIGN_SHIFT)
1228c2ecf20Sopenharmony_ci#define EASRC_CC_INSIGN			BIT(EASRC_CC_INSIGN_SHIFT)
1238c2ecf20Sopenharmony_ci#define EASRC_CC_CHEN_SHIFT		0
1248c2ecf20Sopenharmony_ci#define EASRC_CC_CHEN_WIDTH		5
1258c2ecf20Sopenharmony_ci#define EASRC_CC_CHEN_MASK		((BIT(EASRC_CC_CHEN_WIDTH) - 1) \
1268c2ecf20Sopenharmony_ci					 << EASRC_CC_CHEN_SHIFT)
1278c2ecf20Sopenharmony_ci#define EASRC_CC_CHEN(v)		(((v) << EASRC_CC_CHEN_SHIFT) \
1288c2ecf20Sopenharmony_ci					 & EASRC_CC_CHEN_MASK)
1298c2ecf20Sopenharmony_ci
1308c2ecf20Sopenharmony_ci/* ASRC Context Control Extended 1 (CCE1) */
1318c2ecf20Sopenharmony_ci#define EASRC_CCE1_COEF_WS_SHIFT	25
1328c2ecf20Sopenharmony_ci#define EASRC_CCE1_COEF_WS_MASK		BIT(EASRC_CCE1_COEF_WS_SHIFT)
1338c2ecf20Sopenharmony_ci#define EASRC_CCE1_COEF_WS		BIT(EASRC_CCE1_COEF_WS_SHIFT)
1348c2ecf20Sopenharmony_ci#define EASRC_CCE1_COEF_MEM_RST_SHIFT	24
1358c2ecf20Sopenharmony_ci#define EASRC_CCE1_COEF_MEM_RST_MASK	BIT(EASRC_CCE1_COEF_MEM_RST_SHIFT)
1368c2ecf20Sopenharmony_ci#define EASRC_CCE1_COEF_MEM_RST		BIT(EASRC_CCE1_COEF_MEM_RST_SHIFT)
1378c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_EXP_SHIFT		16
1388c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_EXP_WIDTH		8
1398c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_EXP_MASK		((BIT(EASRC_CCE1_PF_EXP_WIDTH) - 1) \
1408c2ecf20Sopenharmony_ci					 << EASRC_CCE1_PF_EXP_SHIFT)
1418c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_EXP(v)		(((v) << EASRC_CCE1_PF_EXP_SHIFT) \
1428c2ecf20Sopenharmony_ci					 & EASRC_CCE1_PF_EXP_MASK)
1438c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_ST1_WBFP_SHIFT	9
1448c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_ST1_WBFP_MASK	BIT(EASRC_CCE1_PF_ST1_WBFP_SHIFT)
1458c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_ST1_WBFP		BIT(EASRC_CCE1_PF_ST1_WBFP_SHIFT)
1468c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_TSEN_SHIFT	8
1478c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_TSEN_MASK		BIT(EASRC_CCE1_PF_TSEN_SHIFT)
1488c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_TSEN		BIT(EASRC_CCE1_PF_TSEN_SHIFT)
1498c2ecf20Sopenharmony_ci#define EASRC_CCE1_RS_BYPASS_SHIFT	7
1508c2ecf20Sopenharmony_ci#define EASRC_CCE1_RS_BYPASS_MASK	BIT(EASRC_CCE1_RS_BYPASS_SHIFT)
1518c2ecf20Sopenharmony_ci#define EASRC_CCE1_RS_BYPASS		BIT(EASRC_CCE1_RS_BYPASS_SHIFT)
1528c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_BYPASS_SHIFT	6
1538c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_BYPASS_MASK	BIT(EASRC_CCE1_PF_BYPASS_SHIFT)
1548c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_BYPASS		BIT(EASRC_CCE1_PF_BYPASS_SHIFT)
1558c2ecf20Sopenharmony_ci#define EASRC_CCE1_RS_STOP_SHIFT	5
1568c2ecf20Sopenharmony_ci#define EASRC_CCE1_RS_STOP_MASK		BIT(EASRC_CCE1_RS_STOP_SHIFT)
1578c2ecf20Sopenharmony_ci#define EASRC_CCE1_RS_STOP		BIT(EASRC_CCE1_RS_STOP_SHIFT)
1588c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_STOP_SHIFT	4
1598c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_STOP_MASK		BIT(EASRC_CCE1_PF_STOP_SHIFT)
1608c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_STOP		BIT(EASRC_CCE1_PF_STOP_SHIFT)
1618c2ecf20Sopenharmony_ci#define EASRC_CCE1_RS_INIT_SHIFT	2
1628c2ecf20Sopenharmony_ci#define EASRC_CCE1_RS_INIT_WIDTH	2
1638c2ecf20Sopenharmony_ci#define EASRC_CCE1_RS_INIT_MASK		((BIT(EASRC_CCE1_RS_INIT_WIDTH) - 1) \
1648c2ecf20Sopenharmony_ci					 << EASRC_CCE1_RS_INIT_SHIFT)
1658c2ecf20Sopenharmony_ci#define EASRC_CCE1_RS_INIT(v)		(((v) << EASRC_CCE1_RS_INIT_SHIFT) \
1668c2ecf20Sopenharmony_ci					 & EASRC_CCE1_RS_INIT_MASK)
1678c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_INIT_SHIFT	0
1688c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_INIT_WIDTH	2
1698c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_INIT_MASK		((BIT(EASRC_CCE1_PF_INIT_WIDTH) - 1) \
1708c2ecf20Sopenharmony_ci					 << EASRC_CCE1_PF_INIT_SHIFT)
1718c2ecf20Sopenharmony_ci#define EASRC_CCE1_PF_INIT(v)		(((v) << EASRC_CCE1_PF_INIT_SHIFT) \
1728c2ecf20Sopenharmony_ci					 & EASRC_CCE1_PF_INIT_MASK)
1738c2ecf20Sopenharmony_ci
1748c2ecf20Sopenharmony_ci/* ASRC Context Control Extended 2 (CCE2) */
1758c2ecf20Sopenharmony_ci#define EASRC_CCE2_ST2_TAPS_SHIFT	16
1768c2ecf20Sopenharmony_ci#define EASRC_CCE2_ST2_TAPS_WIDTH	9
1778c2ecf20Sopenharmony_ci#define EASRC_CCE2_ST2_TAPS_MASK	((BIT(EASRC_CCE2_ST2_TAPS_WIDTH) - 1) \
1788c2ecf20Sopenharmony_ci					 << EASRC_CCE2_ST2_TAPS_SHIFT)
1798c2ecf20Sopenharmony_ci#define EASRC_CCE2_ST2_TAPS(v)		(((v) << EASRC_CCE2_ST2_TAPS_SHIFT) \
1808c2ecf20Sopenharmony_ci					 & EASRC_CCE2_ST2_TAPS_MASK)
1818c2ecf20Sopenharmony_ci#define EASRC_CCE2_ST1_TAPS_SHIFT	0
1828c2ecf20Sopenharmony_ci#define EASRC_CCE2_ST1_TAPS_WIDTH	9
1838c2ecf20Sopenharmony_ci#define EASRC_CCE2_ST1_TAPS_MASK	((BIT(EASRC_CCE2_ST1_TAPS_WIDTH) - 1) \
1848c2ecf20Sopenharmony_ci					 << EASRC_CCE2_ST1_TAPS_SHIFT)
1858c2ecf20Sopenharmony_ci#define EASRC_CCE2_ST1_TAPS(v)		(((v) << EASRC_CCE2_ST1_TAPS_SHIFT) \
1868c2ecf20Sopenharmony_ci					 & EASRC_CCE2_ST1_TAPS_MASK)
1878c2ecf20Sopenharmony_ci
1888c2ecf20Sopenharmony_ci/* ASRC Control Input Access (CIA) */
1898c2ecf20Sopenharmony_ci#define EASRC_CIA_ITER_SHIFT		16
1908c2ecf20Sopenharmony_ci#define EASRC_CIA_ITER_WIDTH		6
1918c2ecf20Sopenharmony_ci#define EASRC_CIA_ITER_MASK		((BIT(EASRC_CIA_ITER_WIDTH) - 1) \
1928c2ecf20Sopenharmony_ci					 << EASRC_CIA_ITER_SHIFT)
1938c2ecf20Sopenharmony_ci#define EASRC_CIA_ITER(v)		(((v) << EASRC_CIA_ITER_SHIFT) \
1948c2ecf20Sopenharmony_ci					 & EASRC_CIA_ITER_MASK)
1958c2ecf20Sopenharmony_ci#define EASRC_CIA_GRLEN_SHIFT		8
1968c2ecf20Sopenharmony_ci#define EASRC_CIA_GRLEN_WIDTH		6
1978c2ecf20Sopenharmony_ci#define EASRC_CIA_GRLEN_MASK		((BIT(EASRC_CIA_GRLEN_WIDTH) - 1) \
1988c2ecf20Sopenharmony_ci					 << EASRC_CIA_GRLEN_SHIFT)
1998c2ecf20Sopenharmony_ci#define EASRC_CIA_GRLEN(v)		(((v) << EASRC_CIA_GRLEN_SHIFT) \
2008c2ecf20Sopenharmony_ci					 & EASRC_CIA_GRLEN_MASK)
2018c2ecf20Sopenharmony_ci#define EASRC_CIA_ACCLEN_SHIFT		0
2028c2ecf20Sopenharmony_ci#define EASRC_CIA_ACCLEN_WIDTH		6
2038c2ecf20Sopenharmony_ci#define EASRC_CIA_ACCLEN_MASK		((BIT(EASRC_CIA_ACCLEN_WIDTH) - 1) \
2048c2ecf20Sopenharmony_ci					 << EASRC_CIA_ACCLEN_SHIFT)
2058c2ecf20Sopenharmony_ci#define EASRC_CIA_ACCLEN(v)		(((v) << EASRC_CIA_ACCLEN_SHIFT) \
2068c2ecf20Sopenharmony_ci					 & EASRC_CIA_ACCLEN_MASK)
2078c2ecf20Sopenharmony_ci
2088c2ecf20Sopenharmony_ci/* ASRC Datapath Processor Control Slot0 Register0 (DPCS0R0) */
2098c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_MAXCH_SHIFT	24
2108c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_MAXCH_WIDTH	5
2118c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_MAXCH_MASK	((BIT(EASRC_DPCS0R0_MAXCH_WIDTH) - 1) \
2128c2ecf20Sopenharmony_ci					 << EASRC_DPCS0R0_MAXCH_SHIFT)
2138c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_MAXCH(v)		(((v) << EASRC_DPCS0R0_MAXCH_SHIFT) \
2148c2ecf20Sopenharmony_ci					 & EASRC_DPCS0R0_MAXCH_MASK)
2158c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_MINCH_SHIFT	16
2168c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_MINCH_WIDTH	5
2178c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_MINCH_MASK	((BIT(EASRC_DPCS0R0_MINCH_WIDTH) - 1) \
2188c2ecf20Sopenharmony_ci					 << EASRC_DPCS0R0_MINCH_SHIFT)
2198c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_MINCH(v)		(((v) << EASRC_DPCS0R0_MINCH_SHIFT) \
2208c2ecf20Sopenharmony_ci					 & EASRC_DPCS0R0_MINCH_MASK)
2218c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_NUMCH_SHIFT	8
2228c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_NUMCH_WIDTH	5
2238c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_NUMCH_MASK	((BIT(EASRC_DPCS0R0_NUMCH_WIDTH) - 1) \
2248c2ecf20Sopenharmony_ci					 << EASRC_DPCS0R0_NUMCH_SHIFT)
2258c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_NUMCH(v)		(((v) << EASRC_DPCS0R0_NUMCH_SHIFT) \
2268c2ecf20Sopenharmony_ci					 & EASRC_DPCS0R0_NUMCH_MASK)
2278c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_CTXNUM_SHIFT	1
2288c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_CTXNUM_WIDTH	2
2298c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_CTXNUM_MASK	((BIT(EASRC_DPCS0R0_CTXNUM_WIDTH) - 1) \
2308c2ecf20Sopenharmony_ci					 << EASRC_DPCS0R0_CTXNUM_SHIFT)
2318c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_CTXNUM(v)		(((v) << EASRC_DPCS0R0_CTXNUM_SHIFT) \
2328c2ecf20Sopenharmony_ci					 & EASRC_DPCS0R0_CTXNUM_MASK)
2338c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_EN_SHIFT		0
2348c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_EN_MASK		BIT(EASRC_DPCS0R0_EN_SHIFT)
2358c2ecf20Sopenharmony_ci#define EASRC_DPCS0R0_EN		BIT(EASRC_DPCS0R0_EN_SHIFT)
2368c2ecf20Sopenharmony_ci
2378c2ecf20Sopenharmony_ci/* ASRC Datapath Processor Control Slot0 Register1 (DPCS0R1) */
2388c2ecf20Sopenharmony_ci#define EASRC_DPCS0R1_ST1_EXP_SHIFT	0
2398c2ecf20Sopenharmony_ci#define EASRC_DPCS0R1_ST1_EXP_WIDTH	13
2408c2ecf20Sopenharmony_ci#define EASRC_DPCS0R1_ST1_EXP_MASK	((BIT(EASRC_DPCS0R1_ST1_EXP_WIDTH) - 1) \
2418c2ecf20Sopenharmony_ci					 << EASRC_DPCS0R1_ST1_EXP_SHIFT)
2428c2ecf20Sopenharmony_ci#define EASRC_DPCS0R1_ST1_EXP(v)	(((v) << EASRC_DPCS0R1_ST1_EXP_SHIFT) \
2438c2ecf20Sopenharmony_ci					 & EASRC_DPCS0R1_ST1_EXP_MASK)
2448c2ecf20Sopenharmony_ci
2458c2ecf20Sopenharmony_ci/* ASRC Datapath Processor Control Slot0 Register2 (DPCS0R2) */
2468c2ecf20Sopenharmony_ci#define EASRC_DPCS0R2_ST1_MA_SHIFT	16
2478c2ecf20Sopenharmony_ci#define EASRC_DPCS0R2_ST1_MA_WIDTH	13
2488c2ecf20Sopenharmony_ci#define EASRC_DPCS0R2_ST1_MA_MASK	((BIT(EASRC_DPCS0R2_ST1_MA_WIDTH) - 1) \
2498c2ecf20Sopenharmony_ci					 << EASRC_DPCS0R2_ST1_MA_SHIFT)
2508c2ecf20Sopenharmony_ci#define EASRC_DPCS0R2_ST1_MA(v)		(((v) << EASRC_DPCS0R2_ST1_MA_SHIFT) \
2518c2ecf20Sopenharmony_ci					 & EASRC_DPCS0R2_ST1_MA_MASK)
2528c2ecf20Sopenharmony_ci#define EASRC_DPCS0R2_ST1_SA_SHIFT	0
2538c2ecf20Sopenharmony_ci#define EASRC_DPCS0R2_ST1_SA_WIDTH	13
2548c2ecf20Sopenharmony_ci#define EASRC_DPCS0R2_ST1_SA_MASK	((BIT(EASRC_DPCS0R2_ST1_SA_WIDTH) - 1) \
2558c2ecf20Sopenharmony_ci					 << EASRC_DPCS0R2_ST1_SA_SHIFT)
2568c2ecf20Sopenharmony_ci#define EASRC_DPCS0R2_ST1_SA(v)		(((v) << EASRC_DPCS0R2_ST1_SA_SHIFT) \
2578c2ecf20Sopenharmony_ci					 & EASRC_DPCS0R2_ST1_SA_MASK)
2588c2ecf20Sopenharmony_ci
2598c2ecf20Sopenharmony_ci/* ASRC Datapath Processor Control Slot0 Register3 (DPCS0R3) */
2608c2ecf20Sopenharmony_ci#define EASRC_DPCS0R3_ST2_MA_SHIFT	16
2618c2ecf20Sopenharmony_ci#define EASRC_DPCS0R3_ST2_MA_WIDTH	13
2628c2ecf20Sopenharmony_ci#define EASRC_DPCS0R3_ST2_MA_MASK	((BIT(EASRC_DPCS0R3_ST2_MA_WIDTH) - 1) \
2638c2ecf20Sopenharmony_ci					 << EASRC_DPCS0R3_ST2_MA_SHIFT)
2648c2ecf20Sopenharmony_ci#define EASRC_DPCS0R3_ST2_MA(v)		(((v) << EASRC_DPCS0R3_ST2_MA_SHIFT) \
2658c2ecf20Sopenharmony_ci					 & EASRC_DPCS0R3_ST2_MA_MASK)
2668c2ecf20Sopenharmony_ci#define EASRC_DPCS0R3_ST2_SA_SHIFT	0
2678c2ecf20Sopenharmony_ci#define EASRC_DPCS0R3_ST2_SA_WIDTH	13
2688c2ecf20Sopenharmony_ci#define EASRC_DPCS0R3_ST2_SA_MASK	((BIT(EASRC_DPCS0R3_ST2_SA_WIDTH) - 1) \
2698c2ecf20Sopenharmony_ci					 << EASRC_DPCS0R3_ST2_SA_SHIFT)
2708c2ecf20Sopenharmony_ci#define EASRC_DPCS0R3_ST2_SA(v)		(((v) << EASRC_DPCS0R3_ST2_SA_SHIFT) \
2718c2ecf20Sopenharmony_ci						 & EASRC_DPCS0R3_ST2_SA_MASK)
2728c2ecf20Sopenharmony_ci
2738c2ecf20Sopenharmony_ci/* ASRC Context Output Control (COC) */
2748c2ecf20Sopenharmony_ci#define EASRC_COC_FWMDE_SHIFT		28
2758c2ecf20Sopenharmony_ci#define EASRC_COC_FWMDE_MASK		BIT(EASRC_COC_FWMDE_SHIFT)
2768c2ecf20Sopenharmony_ci#define EASRC_COC_FWMDE			BIT(EASRC_COC_FWMDE_SHIFT)
2778c2ecf20Sopenharmony_ci#define EASRC_COC_FIFO_WTMK_SHIFT	16
2788c2ecf20Sopenharmony_ci#define EASRC_COC_FIFO_WTMK_WIDTH	7
2798c2ecf20Sopenharmony_ci#define EASRC_COC_FIFO_WTMK_MASK	((BIT(EASRC_COC_FIFO_WTMK_WIDTH) - 1) \
2808c2ecf20Sopenharmony_ci					 << EASRC_COC_FIFO_WTMK_SHIFT)
2818c2ecf20Sopenharmony_ci#define EASRC_COC_FIFO_WTMK(v)		(((v) << EASRC_COC_FIFO_WTMK_SHIFT) \
2828c2ecf20Sopenharmony_ci					 & EASRC_COC_FIFO_WTMK_MASK)
2838c2ecf20Sopenharmony_ci#define EASRC_COC_SAMPLE_POS_SHIFT	11
2848c2ecf20Sopenharmony_ci#define EASRC_COC_SAMPLE_POS_WIDTH	5
2858c2ecf20Sopenharmony_ci#define EASRC_COC_SAMPLE_POS_MASK	((BIT(EASRC_COC_SAMPLE_POS_WIDTH) - 1) \
2868c2ecf20Sopenharmony_ci					 << EASRC_COC_SAMPLE_POS_SHIFT)
2878c2ecf20Sopenharmony_ci#define EASRC_COC_SAMPLE_POS(v)		(((v) << EASRC_COC_SAMPLE_POS_SHIFT) \
2888c2ecf20Sopenharmony_ci					 & EASRC_COC_SAMPLE_POS_MASK)
2898c2ecf20Sopenharmony_ci#define EASRC_COC_ENDIANNESS_SHIFT	10
2908c2ecf20Sopenharmony_ci#define EASRC_COC_ENDIANNESS_MASK	BIT(EASRC_COC_ENDIANNESS_SHIFT)
2918c2ecf20Sopenharmony_ci#define EASRC_COC_ENDIANNESS		BIT(EASRC_COC_ENDIANNESS_SHIFT)
2928c2ecf20Sopenharmony_ci#define EASRC_COC_BPS_SHIFT		8
2938c2ecf20Sopenharmony_ci#define EASRC_COC_BPS_WIDTH		2
2948c2ecf20Sopenharmony_ci#define EASRC_COC_BPS_MASK		((BIT(EASRC_COC_BPS_WIDTH) - 1) \
2958c2ecf20Sopenharmony_ci					 << EASRC_COC_BPS_SHIFT)
2968c2ecf20Sopenharmony_ci#define EASRC_COC_BPS(v)		(((v) << EASRC_COC_BPS_SHIFT) \
2978c2ecf20Sopenharmony_ci					 & EASRC_COC_BPS_MASK)
2988c2ecf20Sopenharmony_ci#define EASRC_COC_FMT_SHIFT		7
2998c2ecf20Sopenharmony_ci#define EASRC_COC_FMT_MASK		BIT(EASRC_COC_FMT_SHIFT)
3008c2ecf20Sopenharmony_ci#define EASRC_COC_FMT			BIT(EASRC_COC_FMT_SHIFT)
3018c2ecf20Sopenharmony_ci#define EASRC_COC_OUTSIGN_SHIFT		6
3028c2ecf20Sopenharmony_ci#define EASRC_COC_OUTSIGN_MASK		BIT(EASRC_COC_OUTSIGN_SHIFT)
3038c2ecf20Sopenharmony_ci#define EASRC_COC_OUTSIGN_OUT		BIT(EASRC_COC_OUTSIGN_SHIFT)
3048c2ecf20Sopenharmony_ci#define EASRC_COC_IEC_VDATA_SHIFT	2
3058c2ecf20Sopenharmony_ci#define EASRC_COC_IEC_VDATA_MASK	BIT(EASRC_COC_IEC_VDATA_SHIFT)
3068c2ecf20Sopenharmony_ci#define EASRC_COC_IEC_VDATA		BIT(EASRC_COC_IEC_VDATA_SHIFT)
3078c2ecf20Sopenharmony_ci#define EASRC_COC_IEC_EN_SHIFT		1
3088c2ecf20Sopenharmony_ci#define EASRC_COC_IEC_EN_MASK		BIT(EASRC_COC_IEC_EN_SHIFT)
3098c2ecf20Sopenharmony_ci#define EASRC_COC_IEC_EN		BIT(EASRC_COC_IEC_EN_SHIFT)
3108c2ecf20Sopenharmony_ci#define EASRC_COC_DITHER_EN_SHIFT	0
3118c2ecf20Sopenharmony_ci#define EASRC_COC_DITHER_EN_MASK	BIT(EASRC_COC_DITHER_EN_SHIFT)
3128c2ecf20Sopenharmony_ci#define EASRC_COC_DITHER_EN		BIT(EASRC_COC_DITHER_EN_SHIFT)
3138c2ecf20Sopenharmony_ci
3148c2ecf20Sopenharmony_ci/* ASRC Control Output Access (COA) */
3158c2ecf20Sopenharmony_ci#define EASRC_COA_ITER_SHIFT		16
3168c2ecf20Sopenharmony_ci#define EASRC_COA_ITER_WIDTH		6
3178c2ecf20Sopenharmony_ci#define EASRC_COA_ITER_MASK		((BIT(EASRC_COA_ITER_WIDTH) - 1) \
3188c2ecf20Sopenharmony_ci					 << EASRC_COA_ITER_SHIFT)
3198c2ecf20Sopenharmony_ci#define EASRC_COA_ITER(v)		(((v) << EASRC_COA_ITER_SHIFT) \
3208c2ecf20Sopenharmony_ci					 & EASRC_COA_ITER_MASK)
3218c2ecf20Sopenharmony_ci#define EASRC_COA_GRLEN_SHIFT		8
3228c2ecf20Sopenharmony_ci#define EASRC_COA_GRLEN_WIDTH		6
3238c2ecf20Sopenharmony_ci#define EASRC_COA_GRLEN_MASK		((BIT(EASRC_COA_GRLEN_WIDTH) - 1) \
3248c2ecf20Sopenharmony_ci					 << EASRC_COA_GRLEN_SHIFT)
3258c2ecf20Sopenharmony_ci#define EASRC_COA_GRLEN(v)		(((v) << EASRC_COA_GRLEN_SHIFT) \
3268c2ecf20Sopenharmony_ci					 & EASRC_COA_GRLEN_MASK)
3278c2ecf20Sopenharmony_ci#define EASRC_COA_ACCLEN_SHIFT		0
3288c2ecf20Sopenharmony_ci#define EASRC_COA_ACCLEN_WIDTH		6
3298c2ecf20Sopenharmony_ci#define EASRC_COA_ACCLEN_MASK		((BIT(EASRC_COA_ACCLEN_WIDTH) - 1) \
3308c2ecf20Sopenharmony_ci					 << EASRC_COA_ACCLEN_SHIFT)
3318c2ecf20Sopenharmony_ci#define EASRC_COA_ACCLEN(v)		(((v) << EASRC_COA_ACCLEN_SHIFT) \
3328c2ecf20Sopenharmony_ci					 & EASRC_COA_ACCLEN_MASK)
3338c2ecf20Sopenharmony_ci
3348c2ecf20Sopenharmony_ci/* ASRC Sample FIFO Status (SFS) */
3358c2ecf20Sopenharmony_ci#define EASRC_SFS_IWTMK_SHIFT		23
3368c2ecf20Sopenharmony_ci#define EASRC_SFS_IWTMK_MASK		BIT(EASRC_SFS_IWTMK_SHIFT)
3378c2ecf20Sopenharmony_ci#define EASRC_SFS_IWTMK			BIT(EASRC_SFS_IWTMK_SHIFT)
3388c2ecf20Sopenharmony_ci#define EASRC_SFS_NSGI_SHIFT		16
3398c2ecf20Sopenharmony_ci#define EASRC_SFS_NSGI_WIDTH		7
3408c2ecf20Sopenharmony_ci#define EASRC_SFS_NSGI_MASK		((BIT(EASRC_SFS_NSGI_WIDTH) - 1) \
3418c2ecf20Sopenharmony_ci					 << EASRC_SFS_NSGI_SHIFT)
3428c2ecf20Sopenharmony_ci#define EASRC_SFS_NSGI(v)		(((v) << EASRC_SFS_NSGI_SHIFT) \
3438c2ecf20Sopenharmony_ci					 & EASRC_SFS_NSGI_MASK)
3448c2ecf20Sopenharmony_ci#define EASRC_SFS_OWTMK_SHIFT		7
3458c2ecf20Sopenharmony_ci#define EASRC_SFS_OWTMK_MASK		BIT(EASRC_SFS_OWTMK_SHIFT)
3468c2ecf20Sopenharmony_ci#define EASRC_SFS_OWTMK			BIT(EASRC_SFS_OWTMK_SHIFT)
3478c2ecf20Sopenharmony_ci#define EASRC_SFS_NSGO_SHIFT		0
3488c2ecf20Sopenharmony_ci#define EASRC_SFS_NSGO_WIDTH		7
3498c2ecf20Sopenharmony_ci#define EASRC_SFS_NSGO_MASK		((BIT(EASRC_SFS_NSGO_WIDTH) - 1) \
3508c2ecf20Sopenharmony_ci					 << EASRC_SFS_NSGO_SHIFT)
3518c2ecf20Sopenharmony_ci#define EASRC_SFS_NSGO(v)		(((v) << EASRC_SFS_NSGO_SHIFT) \
3528c2ecf20Sopenharmony_ci					 & EASRC_SFS_NSGO_MASK)
3538c2ecf20Sopenharmony_ci
3548c2ecf20Sopenharmony_ci/* ASRC Resampling Ratio Low (RRL) */
3558c2ecf20Sopenharmony_ci#define EASRC_RRL_RS_RL_SHIFT		0
3568c2ecf20Sopenharmony_ci#define EASRC_RRL_RS_RL_WIDTH		32
3578c2ecf20Sopenharmony_ci#define EASRC_RRL_RS_RL(v)		((v) << EASRC_RRL_RS_RL_SHIFT)
3588c2ecf20Sopenharmony_ci
3598c2ecf20Sopenharmony_ci/* ASRC Resampling Ratio High (RRH) */
3608c2ecf20Sopenharmony_ci#define EASRC_RRH_RS_VLD_SHIFT		31
3618c2ecf20Sopenharmony_ci#define EASRC_RRH_RS_VLD_MASK		BIT(EASRC_RRH_RS_VLD_SHIFT)
3628c2ecf20Sopenharmony_ci#define EASRC_RRH_RS_VLD		BIT(EASRC_RRH_RS_VLD_SHIFT)
3638c2ecf20Sopenharmony_ci#define EASRC_RRH_RS_RH_SHIFT		0
3648c2ecf20Sopenharmony_ci#define EASRC_RRH_RS_RH_WIDTH		12
3658c2ecf20Sopenharmony_ci#define EASRC_RRH_RS_RH_MASK		((BIT(EASRC_RRH_RS_RH_WIDTH) - 1) \
3668c2ecf20Sopenharmony_ci					 << EASRC_RRH_RS_RH_SHIFT)
3678c2ecf20Sopenharmony_ci#define EASRC_RRH_RS_RH(v)		(((v) << EASRC_RRH_RS_RH_SHIFT) \
3688c2ecf20Sopenharmony_ci					 & EASRC_RRH_RS_RH_MASK)
3698c2ecf20Sopenharmony_ci
3708c2ecf20Sopenharmony_ci/* ASRC Resampling Ratio Update Control (RSUC) */
3718c2ecf20Sopenharmony_ci#define EASRC_RSUC_RS_RM_SHIFT		0
3728c2ecf20Sopenharmony_ci#define EASRC_RSUC_RS_RM_WIDTH		32
3738c2ecf20Sopenharmony_ci#define EASRC_RSUC_RS_RM(v)		((v) << EASRC_RSUC_RS_RM_SHIFT)
3748c2ecf20Sopenharmony_ci
3758c2ecf20Sopenharmony_ci/* ASRC Resampling Ratio Update Rate (RRUR) */
3768c2ecf20Sopenharmony_ci#define EASRC_RRUR_RRR_SHIFT		0
3778c2ecf20Sopenharmony_ci#define EASRC_RRUR_RRR_WIDTH		31
3788c2ecf20Sopenharmony_ci#define EASRC_RRUR_RRR_MASK		((BIT(EASRC_RRUR_RRR_WIDTH) - 1) \
3798c2ecf20Sopenharmony_ci					 << EASRC_RRUR_RRR_SHIFT)
3808c2ecf20Sopenharmony_ci#define EASRC_RRUR_RRR(v)		(((v) << EASRC_RRUR_RRR_SHIFT) \
3818c2ecf20Sopenharmony_ci					 & EASRC_RRUR_RRR_MASK)
3828c2ecf20Sopenharmony_ci
3838c2ecf20Sopenharmony_ci/* ASRC Resampling Center Tap Coefficient Low (RCTCL) */
3848c2ecf20Sopenharmony_ci#define EASRC_RCTCL_RS_CL_SHIFT		0
3858c2ecf20Sopenharmony_ci#define EASRC_RCTCL_RS_CL_WIDTH		32
3868c2ecf20Sopenharmony_ci#define EASRC_RCTCL_RS_CL(v)		((v) << EASRC_RCTCL_RS_CL_SHIFT)
3878c2ecf20Sopenharmony_ci
3888c2ecf20Sopenharmony_ci/* ASRC Resampling Center Tap Coefficient High (RCTCH) */
3898c2ecf20Sopenharmony_ci#define EASRC_RCTCH_RS_CH_SHIFT		0
3908c2ecf20Sopenharmony_ci#define EASRC_RCTCH_RS_CH_WIDTH		32
3918c2ecf20Sopenharmony_ci#define EASRC_RCTCH_RS_CH(v)		((v) << EASRC_RCTCH_RS_CH_SHIFT)
3928c2ecf20Sopenharmony_ci
3938c2ecf20Sopenharmony_ci/* ASRC Prefilter Coefficient FIFO (PCF) */
3948c2ecf20Sopenharmony_ci#define EASRC_PCF_CD_SHIFT		0
3958c2ecf20Sopenharmony_ci#define EASRC_PCF_CD_WIDTH		32
3968c2ecf20Sopenharmony_ci#define EASRC_PCF_CD(v)			((v) << EASRC_PCF_CD_SHIFT)
3978c2ecf20Sopenharmony_ci
3988c2ecf20Sopenharmony_ci/* ASRC Context Resampling Coefficient Memory (CRCM) */
3998c2ecf20Sopenharmony_ci#define EASRC_CRCM_RS_CWD_SHIFT		0
4008c2ecf20Sopenharmony_ci#define EASRC_CRCM_RS_CWD_WIDTH		32
4018c2ecf20Sopenharmony_ci#define EASRC_CRCM_RS_CWD(v)		((v) << EASRC_CRCM_RS_CWD_SHIFT)
4028c2ecf20Sopenharmony_ci
4038c2ecf20Sopenharmony_ci/* ASRC Context Resampling Coefficient Control (CRCC) */
4048c2ecf20Sopenharmony_ci#define EASRC_CRCC_RS_CA_SHIFT		16
4058c2ecf20Sopenharmony_ci#define EASRC_CRCC_RS_CA_WIDTH		11
4068c2ecf20Sopenharmony_ci#define EASRC_CRCC_RS_CA_MASK		((BIT(EASRC_CRCC_RS_CA_WIDTH) - 1) \
4078c2ecf20Sopenharmony_ci					 << EASRC_CRCC_RS_CA_SHIFT)
4088c2ecf20Sopenharmony_ci#define EASRC_CRCC_RS_CA(v)		(((v) << EASRC_CRCC_RS_CA_SHIFT) \
4098c2ecf20Sopenharmony_ci					 & EASRC_CRCC_RS_CA_MASK)
4108c2ecf20Sopenharmony_ci#define EASRC_CRCC_RS_TAPS_SHIFT	1
4118c2ecf20Sopenharmony_ci#define EASRC_CRCC_RS_TAPS_WIDTH	2
4128c2ecf20Sopenharmony_ci#define EASRC_CRCC_RS_TAPS_MASK		((BIT(EASRC_CRCC_RS_TAPS_WIDTH) - 1) \
4138c2ecf20Sopenharmony_ci					 << EASRC_CRCC_RS_TAPS_SHIFT)
4148c2ecf20Sopenharmony_ci#define EASRC_CRCC_RS_TAPS(v)		(((v) << EASRC_CRCC_RS_TAPS_SHIFT) \
4158c2ecf20Sopenharmony_ci					 & EASRC_CRCC_RS_TAPS_MASK)
4168c2ecf20Sopenharmony_ci#define EASRC_CRCC_RS_CPR_SHIFT		0
4178c2ecf20Sopenharmony_ci#define EASRC_CRCC_RS_CPR_MASK		BIT(EASRC_CRCC_RS_CPR_SHIFT)
4188c2ecf20Sopenharmony_ci#define EASRC_CRCC_RS_CPR		BIT(EASRC_CRCC_RS_CPR_SHIFT)
4198c2ecf20Sopenharmony_ci
4208c2ecf20Sopenharmony_ci/* ASRC Interrupt_Control (IC) */
4218c2ecf20Sopenharmony_ci#define EASRC_IRQC_RSDM_SHIFT		8
4228c2ecf20Sopenharmony_ci#define EASRC_IRQC_RSDM_WIDTH		4
4238c2ecf20Sopenharmony_ci#define EASRC_IRQC_RSDM_MASK		((BIT(EASRC_IRQC_RSDM_WIDTH) - 1) \
4248c2ecf20Sopenharmony_ci					 << EASRC_IRQC_RSDM_SHIFT)
4258c2ecf20Sopenharmony_ci#define EASRC_IRQC_RSDM(v)		(((v) << EASRC_IRQC_RSDM_SHIFT) \
4268c2ecf20Sopenharmony_ci					 & EASRC_IRQC_RSDM_MASK)
4278c2ecf20Sopenharmony_ci#define EASRC_IRQC_OERM_SHIFT		4
4288c2ecf20Sopenharmony_ci#define EASRC_IRQC_OERM_WIDTH		4
4298c2ecf20Sopenharmony_ci#define EASRC_IRQC_OERM_MASK		((BIT(EASRC_IRQC_OERM_WIDTH) - 1) \
4308c2ecf20Sopenharmony_ci					 << EASRC_IRQC_OERM_SHIFT)
4318c2ecf20Sopenharmony_ci#define EASRC_IRQC_OERM(v)		(((v) << EASRC_IRQC_OERM_SHIFT) \
4328c2ecf20Sopenharmony_ci					 & EASRC_IEQC_OERM_MASK)
4338c2ecf20Sopenharmony_ci#define EASRC_IRQC_IOM_SHIFT		0
4348c2ecf20Sopenharmony_ci#define EASRC_IRQC_IOM_WIDTH		4
4358c2ecf20Sopenharmony_ci#define EASRC_IRQC_IOM_MASK		((BIT(EASRC_IRQC_IOM_WIDTH) - 1) \
4368c2ecf20Sopenharmony_ci					 << EASRC_IRQC_IOM_SHIFT)
4378c2ecf20Sopenharmony_ci#define EASRC_IRQC_IOM(v)		(((v) << EASRC_IRQC_IOM_SHIFT) \
4388c2ecf20Sopenharmony_ci					 & EASRC_IRQC_IOM_MASK)
4398c2ecf20Sopenharmony_ci
4408c2ecf20Sopenharmony_ci/* ASRC Interrupt Status Flags (ISF) */
4418c2ecf20Sopenharmony_ci#define EASRC_IRQF_RSD_SHIFT		8
4428c2ecf20Sopenharmony_ci#define EASRC_IRQF_RSD_WIDTH		4
4438c2ecf20Sopenharmony_ci#define EASRC_IRQF_RSD_MASK		((BIT(EASRC_IRQF_RSD_WIDTH) - 1) \
4448c2ecf20Sopenharmony_ci					 << EASRC_IRQF_RSD_SHIFT)
4458c2ecf20Sopenharmony_ci#define EASRC_IRQF_RSD(v)		(((v) << EASRC_IRQF_RSD_SHIFT) \
4468c2ecf20Sopenharmony_ci					 & EASRC_IRQF_RSD_MASK)
4478c2ecf20Sopenharmony_ci#define EASRC_IRQF_OER_SHIFT		4
4488c2ecf20Sopenharmony_ci#define EASRC_IRQF_OER_WIDTH		4
4498c2ecf20Sopenharmony_ci#define EASRC_IRQF_OER_MASK		((BIT(EASRC_IRQF_OER_WIDTH) - 1) \
4508c2ecf20Sopenharmony_ci					 << EASRC_IRQF_OER_SHIFT)
4518c2ecf20Sopenharmony_ci#define EASRC_IRQF_OER(v)		(((v) << EASRC_IRQF_OER_SHIFT) \
4528c2ecf20Sopenharmony_ci					 & EASRC_IRQF_OER_MASK)
4538c2ecf20Sopenharmony_ci#define EASRC_IRQF_IFO_SHIFT		0
4548c2ecf20Sopenharmony_ci#define EASRC_IRQF_IFO_WIDTH		4
4558c2ecf20Sopenharmony_ci#define EASRC_IRQF_IFO_MASK		((BIT(EASRC_IRQF_IFO_WIDTH) - 1) \
4568c2ecf20Sopenharmony_ci					 << EASRC_IRQF_IFO_SHIFT)
4578c2ecf20Sopenharmony_ci#define EASRC_IRQF_IFO(v)		(((v) << EASRC_IRQF_IFO_SHIFT) \
4588c2ecf20Sopenharmony_ci					 & EASRC_IRQF_IFO_MASK)
4598c2ecf20Sopenharmony_ci
4608c2ecf20Sopenharmony_ci/* ASRC Context Channel STAT */
4618c2ecf20Sopenharmony_ci#define EASRC_CSx_CSx_SHIFT		0
4628c2ecf20Sopenharmony_ci#define EASRC_CSx_CSx_WIDTH		32
4638c2ecf20Sopenharmony_ci#define EASRC_CSx_CSx(v)		((v) << EASRC_CSx_CSx_SHIFT)
4648c2ecf20Sopenharmony_ci
4658c2ecf20Sopenharmony_ci/* ASRC Debug Control Register */
4668c2ecf20Sopenharmony_ci#define EASRC_DBGC_DMS_SHIFT		0
4678c2ecf20Sopenharmony_ci#define EASRC_DBGC_DMS_WIDTH		6
4688c2ecf20Sopenharmony_ci#define EASRC_DBGC_DMS_MASK		((BIT(EASRC_DBGC_DMS_WIDTH) - 1) \
4698c2ecf20Sopenharmony_ci					 << EASRC_DBGC_DMS_SHIFT)
4708c2ecf20Sopenharmony_ci#define EASRC_DBGC_DMS(v)		(((v) << EASRC_DBGC_DMS_SHIFT) \
4718c2ecf20Sopenharmony_ci					 & EASRC_DBGC_DMS_MASK)
4728c2ecf20Sopenharmony_ci
4738c2ecf20Sopenharmony_ci/* ASRC Debug Status Register */
4748c2ecf20Sopenharmony_ci#define EASRC_DBGS_DS_SHIFT		0
4758c2ecf20Sopenharmony_ci#define EASRC_DBGS_DS_WIDTH		32
4768c2ecf20Sopenharmony_ci#define EASRC_DBGS_DS(v)		((v) << EASRC_DBGS_DS_SHIFT)
4778c2ecf20Sopenharmony_ci
4788c2ecf20Sopenharmony_ci/* General Constants */
4798c2ecf20Sopenharmony_ci#define EASRC_CTX_MAX_NUM		4
4808c2ecf20Sopenharmony_ci#define EASRC_RS_COEFF_MEM		0
4818c2ecf20Sopenharmony_ci#define EASRC_PF_COEFF_MEM		1
4828c2ecf20Sopenharmony_ci
4838c2ecf20Sopenharmony_ci/* Prefilter constants */
4848c2ecf20Sopenharmony_ci#define EASRC_PF_ST1_ONLY		0
4858c2ecf20Sopenharmony_ci#define EASRC_PF_TWO_STAGE_MODE		1
4868c2ecf20Sopenharmony_ci#define EASRC_PF_ST1_COEFF_WR		0
4878c2ecf20Sopenharmony_ci#define EASRC_PF_ST2_COEFF_WR		1
4888c2ecf20Sopenharmony_ci#define EASRC_MAX_PF_TAPS		384
4898c2ecf20Sopenharmony_ci
4908c2ecf20Sopenharmony_ci/* Resampling constants */
4918c2ecf20Sopenharmony_ci#define EASRC_RS_32_TAPS		0
4928c2ecf20Sopenharmony_ci#define EASRC_RS_64_TAPS		1
4938c2ecf20Sopenharmony_ci#define EASRC_RS_128_TAPS		2
4948c2ecf20Sopenharmony_ci
4958c2ecf20Sopenharmony_ci/* Initialization mode */
4968c2ecf20Sopenharmony_ci#define EASRC_INIT_MODE_SW_CONTROL	0
4978c2ecf20Sopenharmony_ci#define EASRC_INIT_MODE_REPLICATE	1
4988c2ecf20Sopenharmony_ci#define EASRC_INIT_MODE_ZERO_FILL	2
4998c2ecf20Sopenharmony_ci
5008c2ecf20Sopenharmony_ci/* FIFO watermarks */
5018c2ecf20Sopenharmony_ci#define FSL_EASRC_INPUTFIFO_WML		0x4
5028c2ecf20Sopenharmony_ci#define FSL_EASRC_OUTPUTFIFO_WML	0x1
5038c2ecf20Sopenharmony_ci
5048c2ecf20Sopenharmony_ci#define EASRC_INPUTFIFO_THRESHOLD_MIN	0
5058c2ecf20Sopenharmony_ci#define EASRC_INPUTFIFO_THRESHOLD_MAX	127
5068c2ecf20Sopenharmony_ci#define EASRC_OUTPUTFIFO_THRESHOLD_MIN	0
5078c2ecf20Sopenharmony_ci#define EASRC_OUTPUTFIFO_THRESHOLD_MAX	63
5088c2ecf20Sopenharmony_ci
5098c2ecf20Sopenharmony_ci#define EASRC_DMA_BUFFER_SIZE		(1024 * 48 * 9)
5108c2ecf20Sopenharmony_ci#define EASRC_MAX_BUFFER_SIZE		(1024 * 48)
5118c2ecf20Sopenharmony_ci
5128c2ecf20Sopenharmony_ci#define FIRMWARE_MAGIC			0xDEAD
5138c2ecf20Sopenharmony_ci#define FIRMWARE_VERSION		1
5148c2ecf20Sopenharmony_ci
5158c2ecf20Sopenharmony_ci#define PREFILTER_MEM_LEN		0x1800
5168c2ecf20Sopenharmony_ci
5178c2ecf20Sopenharmony_cienum easrc_word_width {
5188c2ecf20Sopenharmony_ci	EASRC_WIDTH_16_BIT = 0,
5198c2ecf20Sopenharmony_ci	EASRC_WIDTH_20_BIT = 1,
5208c2ecf20Sopenharmony_ci	EASRC_WIDTH_24_BIT = 2,
5218c2ecf20Sopenharmony_ci	EASRC_WIDTH_32_BIT = 3,
5228c2ecf20Sopenharmony_ci};
5238c2ecf20Sopenharmony_ci
5248c2ecf20Sopenharmony_cistruct __attribute__((__packed__))  asrc_firmware_hdr {
5258c2ecf20Sopenharmony_ci	u32 magic;
5268c2ecf20Sopenharmony_ci	u32 interp_scen;
5278c2ecf20Sopenharmony_ci	u32 prefil_scen;
5288c2ecf20Sopenharmony_ci	u32 firmware_version;
5298c2ecf20Sopenharmony_ci};
5308c2ecf20Sopenharmony_ci
5318c2ecf20Sopenharmony_cistruct __attribute__((__packed__)) interp_params {
5328c2ecf20Sopenharmony_ci	u32 magic;
5338c2ecf20Sopenharmony_ci	u32 num_taps;
5348c2ecf20Sopenharmony_ci	u32 num_phases;
5358c2ecf20Sopenharmony_ci	u64 center_tap;
5368c2ecf20Sopenharmony_ci	u64 coeff[8192];
5378c2ecf20Sopenharmony_ci};
5388c2ecf20Sopenharmony_ci
5398c2ecf20Sopenharmony_cistruct __attribute__((__packed__)) prefil_params {
5408c2ecf20Sopenharmony_ci	u32 magic;
5418c2ecf20Sopenharmony_ci	u32 insr;
5428c2ecf20Sopenharmony_ci	u32 outsr;
5438c2ecf20Sopenharmony_ci	u32 st1_taps;
5448c2ecf20Sopenharmony_ci	u32 st2_taps;
5458c2ecf20Sopenharmony_ci	u32 st1_exp;
5468c2ecf20Sopenharmony_ci	u64 coeff[256];
5478c2ecf20Sopenharmony_ci};
5488c2ecf20Sopenharmony_ci
5498c2ecf20Sopenharmony_cistruct dma_block {
5508c2ecf20Sopenharmony_ci	void *dma_vaddr;
5518c2ecf20Sopenharmony_ci	unsigned int length;
5528c2ecf20Sopenharmony_ci	unsigned int max_buf_size;
5538c2ecf20Sopenharmony_ci};
5548c2ecf20Sopenharmony_ci
5558c2ecf20Sopenharmony_cistruct fsl_easrc_data_fmt {
5568c2ecf20Sopenharmony_ci	unsigned int width : 2;
5578c2ecf20Sopenharmony_ci	unsigned int endianness : 1;
5588c2ecf20Sopenharmony_ci	unsigned int unsign : 1;
5598c2ecf20Sopenharmony_ci	unsigned int floating_point : 1;
5608c2ecf20Sopenharmony_ci	unsigned int iec958: 1;
5618c2ecf20Sopenharmony_ci	unsigned int sample_pos: 5;
5628c2ecf20Sopenharmony_ci	unsigned int addexp;
5638c2ecf20Sopenharmony_ci};
5648c2ecf20Sopenharmony_ci
5658c2ecf20Sopenharmony_cistruct fsl_easrc_io_params {
5668c2ecf20Sopenharmony_ci	struct fsl_easrc_data_fmt fmt;
5678c2ecf20Sopenharmony_ci	unsigned int group_len;
5688c2ecf20Sopenharmony_ci	unsigned int iterations;
5698c2ecf20Sopenharmony_ci	unsigned int access_len;
5708c2ecf20Sopenharmony_ci	unsigned int fifo_wtmk;
5718c2ecf20Sopenharmony_ci	unsigned int sample_rate;
5728c2ecf20Sopenharmony_ci	snd_pcm_format_t sample_format;
5738c2ecf20Sopenharmony_ci	unsigned int norm_rate;
5748c2ecf20Sopenharmony_ci};
5758c2ecf20Sopenharmony_ci
5768c2ecf20Sopenharmony_cistruct fsl_easrc_slot {
5778c2ecf20Sopenharmony_ci	bool busy;
5788c2ecf20Sopenharmony_ci	int ctx_index;
5798c2ecf20Sopenharmony_ci	int slot_index;
5808c2ecf20Sopenharmony_ci	int num_channel;  /* maximum is 8 */
5818c2ecf20Sopenharmony_ci	int min_channel;
5828c2ecf20Sopenharmony_ci	int max_channel;
5838c2ecf20Sopenharmony_ci	int pf_mem_used;
5848c2ecf20Sopenharmony_ci};
5858c2ecf20Sopenharmony_ci
5868c2ecf20Sopenharmony_ci/**
5878c2ecf20Sopenharmony_ci * fsl_easrc_ctx_priv: EASRC context private data
5888c2ecf20Sopenharmony_ci *
5898c2ecf20Sopenharmony_ci * @in_params: input parameter
5908c2ecf20Sopenharmony_ci * @out_params:  output parameter
5918c2ecf20Sopenharmony_ci * @st1_num_taps: tap number of stage 1
5928c2ecf20Sopenharmony_ci * @st2_num_taps: tap number of stage 2
5938c2ecf20Sopenharmony_ci * @st1_num_exp: exponent number of stage 1
5948c2ecf20Sopenharmony_ci * @pf_init_mode: prefilter init mode
5958c2ecf20Sopenharmony_ci * @rs_init_mode:  resample filter init mode
5968c2ecf20Sopenharmony_ci * @ctx_streams: stream flag of ctx
5978c2ecf20Sopenharmony_ci * @rs_ratio: resampler ratio
5988c2ecf20Sopenharmony_ci * @st1_coeff: pointer of stage 1 coeff
5998c2ecf20Sopenharmony_ci * @st2_coeff: pointer of stage 2 coeff
6008c2ecf20Sopenharmony_ci * @in_filled_sample: input filled sample
6018c2ecf20Sopenharmony_ci * @out_missed_sample: sample missed in output
6028c2ecf20Sopenharmony_ci * @st1_addexp: exponent added for stage1
6038c2ecf20Sopenharmony_ci * @st2_addexp: exponent added for stage2
6048c2ecf20Sopenharmony_ci */
6058c2ecf20Sopenharmony_cistruct fsl_easrc_ctx_priv {
6068c2ecf20Sopenharmony_ci	struct fsl_easrc_io_params in_params;
6078c2ecf20Sopenharmony_ci	struct fsl_easrc_io_params out_params;
6088c2ecf20Sopenharmony_ci	unsigned int st1_num_taps;
6098c2ecf20Sopenharmony_ci	unsigned int st2_num_taps;
6108c2ecf20Sopenharmony_ci	unsigned int st1_num_exp;
6118c2ecf20Sopenharmony_ci	unsigned int pf_init_mode;
6128c2ecf20Sopenharmony_ci	unsigned int rs_init_mode;
6138c2ecf20Sopenharmony_ci	unsigned int ctx_streams;
6148c2ecf20Sopenharmony_ci	u64 rs_ratio;
6158c2ecf20Sopenharmony_ci	u64 *st1_coeff;
6168c2ecf20Sopenharmony_ci	u64 *st2_coeff;
6178c2ecf20Sopenharmony_ci	int in_filled_sample;
6188c2ecf20Sopenharmony_ci	int out_missed_sample;
6198c2ecf20Sopenharmony_ci	int st1_addexp;
6208c2ecf20Sopenharmony_ci	int st2_addexp;
6218c2ecf20Sopenharmony_ci};
6228c2ecf20Sopenharmony_ci
6238c2ecf20Sopenharmony_ci/**
6248c2ecf20Sopenharmony_ci * fsl_easrc_priv: EASRC private data
6258c2ecf20Sopenharmony_ci *
6268c2ecf20Sopenharmony_ci * @slot: slot setting
6278c2ecf20Sopenharmony_ci * @firmware_hdr:  the header of firmware
6288c2ecf20Sopenharmony_ci * @interp: pointer to interpolation filter coeff
6298c2ecf20Sopenharmony_ci * @prefil: pointer to prefilter coeff
6308c2ecf20Sopenharmony_ci * @fw: firmware of coeff table
6318c2ecf20Sopenharmony_ci * @fw_name: firmware name
6328c2ecf20Sopenharmony_ci * @rs_num_taps:  resample filter taps, 32, 64, or 128
6338c2ecf20Sopenharmony_ci * @bps_iec958: bits per sample of iec958
6348c2ecf20Sopenharmony_ci * @rs_coeff: resampler coefficient
6358c2ecf20Sopenharmony_ci * @const_coeff: one tap prefilter coefficient
6368c2ecf20Sopenharmony_ci * @firmware_loaded: firmware is loaded
6378c2ecf20Sopenharmony_ci */
6388c2ecf20Sopenharmony_cistruct fsl_easrc_priv {
6398c2ecf20Sopenharmony_ci	struct fsl_easrc_slot slot[EASRC_CTX_MAX_NUM][2];
6408c2ecf20Sopenharmony_ci	struct asrc_firmware_hdr *firmware_hdr;
6418c2ecf20Sopenharmony_ci	struct interp_params *interp;
6428c2ecf20Sopenharmony_ci	struct prefil_params *prefil;
6438c2ecf20Sopenharmony_ci	const struct firmware *fw;
6448c2ecf20Sopenharmony_ci	const char *fw_name;
6458c2ecf20Sopenharmony_ci	unsigned int rs_num_taps;
6468c2ecf20Sopenharmony_ci	unsigned int bps_iec958[EASRC_CTX_MAX_NUM];
6478c2ecf20Sopenharmony_ci	u64 *rs_coeff;
6488c2ecf20Sopenharmony_ci	u64 const_coeff;
6498c2ecf20Sopenharmony_ci	int firmware_loaded;
6508c2ecf20Sopenharmony_ci};
6518c2ecf20Sopenharmony_ci#endif /* _FSL_EASRC_H */
652