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