1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) 2019 NXP 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #ifndef _FSL_EASRC_H 7*4882a593Smuzhiyun #define _FSL_EASRC_H 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #include <sound/asound.h> 10*4882a593Smuzhiyun #include <linux/platform_data/dma-imx.h> 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #include "fsl_asrc_common.h" 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun /* EASRC Register Map */ 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun /* ASRC Input Write FIFO */ 17*4882a593Smuzhiyun #define REG_EASRC_WRFIFO(ctx) (0x000 + 4 * (ctx)) 18*4882a593Smuzhiyun /* ASRC Output Read FIFO */ 19*4882a593Smuzhiyun #define REG_EASRC_RDFIFO(ctx) (0x010 + 4 * (ctx)) 20*4882a593Smuzhiyun /* ASRC Context Control */ 21*4882a593Smuzhiyun #define REG_EASRC_CC(ctx) (0x020 + 4 * (ctx)) 22*4882a593Smuzhiyun /* ASRC Context Control Extended 1 */ 23*4882a593Smuzhiyun #define REG_EASRC_CCE1(ctx) (0x030 + 4 * (ctx)) 24*4882a593Smuzhiyun /* ASRC Context Control Extended 2 */ 25*4882a593Smuzhiyun #define REG_EASRC_CCE2(ctx) (0x040 + 4 * (ctx)) 26*4882a593Smuzhiyun /* ASRC Control Input Access */ 27*4882a593Smuzhiyun #define REG_EASRC_CIA(ctx) (0x050 + 4 * (ctx)) 28*4882a593Smuzhiyun /* ASRC Datapath Processor Control Slot0 */ 29*4882a593Smuzhiyun #define REG_EASRC_DPCS0R0(ctx) (0x060 + 4 * (ctx)) 30*4882a593Smuzhiyun #define REG_EASRC_DPCS0R1(ctx) (0x070 + 4 * (ctx)) 31*4882a593Smuzhiyun #define REG_EASRC_DPCS0R2(ctx) (0x080 + 4 * (ctx)) 32*4882a593Smuzhiyun #define REG_EASRC_DPCS0R3(ctx) (0x090 + 4 * (ctx)) 33*4882a593Smuzhiyun /* ASRC Datapath Processor Control Slot1 */ 34*4882a593Smuzhiyun #define REG_EASRC_DPCS1R0(ctx) (0x0A0 + 4 * (ctx)) 35*4882a593Smuzhiyun #define REG_EASRC_DPCS1R1(ctx) (0x0B0 + 4 * (ctx)) 36*4882a593Smuzhiyun #define REG_EASRC_DPCS1R2(ctx) (0x0C0 + 4 * (ctx)) 37*4882a593Smuzhiyun #define REG_EASRC_DPCS1R3(ctx) (0x0D0 + 4 * (ctx)) 38*4882a593Smuzhiyun /* ASRC Context Output Control */ 39*4882a593Smuzhiyun #define REG_EASRC_COC(ctx) (0x0E0 + 4 * (ctx)) 40*4882a593Smuzhiyun /* ASRC Control Output Access */ 41*4882a593Smuzhiyun #define REG_EASRC_COA(ctx) (0x0F0 + 4 * (ctx)) 42*4882a593Smuzhiyun /* ASRC Sample FIFO Status */ 43*4882a593Smuzhiyun #define REG_EASRC_SFS(ctx) (0x100 + 4 * (ctx)) 44*4882a593Smuzhiyun /* ASRC Resampling Ratio Low */ 45*4882a593Smuzhiyun #define REG_EASRC_RRL(ctx) (0x110 + 8 * (ctx)) 46*4882a593Smuzhiyun /* ASRC Resampling Ratio High */ 47*4882a593Smuzhiyun #define REG_EASRC_RRH(ctx) (0x114 + 8 * (ctx)) 48*4882a593Smuzhiyun /* ASRC Resampling Ratio Update Control */ 49*4882a593Smuzhiyun #define REG_EASRC_RUC(ctx) (0x130 + 4 * (ctx)) 50*4882a593Smuzhiyun /* ASRC Resampling Ratio Update Rate */ 51*4882a593Smuzhiyun #define REG_EASRC_RUR(ctx) (0x140 + 4 * (ctx)) 52*4882a593Smuzhiyun /* ASRC Resampling Center Tap Coefficient Low */ 53*4882a593Smuzhiyun #define REG_EASRC_RCTCL (0x150) 54*4882a593Smuzhiyun /* ASRC Resampling Center Tap Coefficient High */ 55*4882a593Smuzhiyun #define REG_EASRC_RCTCH (0x154) 56*4882a593Smuzhiyun /* ASRC Prefilter Coefficient FIFO */ 57*4882a593Smuzhiyun #define REG_EASRC_PCF(ctx) (0x160 + 4 * (ctx)) 58*4882a593Smuzhiyun /* ASRC Context Resampling Coefficient Memory */ 59*4882a593Smuzhiyun #define REG_EASRC_CRCM 0x170 60*4882a593Smuzhiyun /* ASRC Context Resampling Coefficient Control*/ 61*4882a593Smuzhiyun #define REG_EASRC_CRCC 0x174 62*4882a593Smuzhiyun /* ASRC Interrupt Control */ 63*4882a593Smuzhiyun #define REG_EASRC_IRQC 0x178 64*4882a593Smuzhiyun /* ASRC Interrupt Status Flags */ 65*4882a593Smuzhiyun #define REG_EASRC_IRQF 0x17C 66*4882a593Smuzhiyun /* ASRC Channel Status 0 */ 67*4882a593Smuzhiyun #define REG_EASRC_CS0(ctx) (0x180 + 4 * (ctx)) 68*4882a593Smuzhiyun /* ASRC Channel Status 1 */ 69*4882a593Smuzhiyun #define REG_EASRC_CS1(ctx) (0x190 + 4 * (ctx)) 70*4882a593Smuzhiyun /* ASRC Channel Status 2 */ 71*4882a593Smuzhiyun #define REG_EASRC_CS2(ctx) (0x1A0 + 4 * (ctx)) 72*4882a593Smuzhiyun /* ASRC Channel Status 3 */ 73*4882a593Smuzhiyun #define REG_EASRC_CS3(ctx) (0x1B0 + 4 * (ctx)) 74*4882a593Smuzhiyun /* ASRC Channel Status 4 */ 75*4882a593Smuzhiyun #define REG_EASRC_CS4(ctx) (0x1C0 + 4 * (ctx)) 76*4882a593Smuzhiyun /* ASRC Channel Status 5 */ 77*4882a593Smuzhiyun #define REG_EASRC_CS5(ctx) (0x1D0 + 4 * (ctx)) 78*4882a593Smuzhiyun /* ASRC Debug Control Register */ 79*4882a593Smuzhiyun #define REG_EASRC_DBGC 0x1E0 80*4882a593Smuzhiyun /* ASRC Debug Status Register */ 81*4882a593Smuzhiyun #define REG_EASRC_DBGS 0x1E4 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun #define REG_EASRC_FIFO(x, ctx) (x == IN ? REG_EASRC_WRFIFO(ctx) \ 84*4882a593Smuzhiyun : REG_EASRC_RDFIFO(ctx)) 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun /* ASRC Context Control (CC) */ 87*4882a593Smuzhiyun #define EASRC_CC_EN_SHIFT 31 88*4882a593Smuzhiyun #define EASRC_CC_EN_MASK BIT(EASRC_CC_EN_SHIFT) 89*4882a593Smuzhiyun #define EASRC_CC_EN BIT(EASRC_CC_EN_SHIFT) 90*4882a593Smuzhiyun #define EASRC_CC_STOP_SHIFT 29 91*4882a593Smuzhiyun #define EASRC_CC_STOP_MASK BIT(EASRC_CC_STOP_SHIFT) 92*4882a593Smuzhiyun #define EASRC_CC_STOP BIT(EASRC_CC_STOP_SHIFT) 93*4882a593Smuzhiyun #define EASRC_CC_FWMDE_SHIFT 28 94*4882a593Smuzhiyun #define EASRC_CC_FWMDE_MASK BIT(EASRC_CC_FWMDE_SHIFT) 95*4882a593Smuzhiyun #define EASRC_CC_FWMDE BIT(EASRC_CC_FWMDE_SHIFT) 96*4882a593Smuzhiyun #define EASRC_CC_FIFO_WTMK_SHIFT 16 97*4882a593Smuzhiyun #define EASRC_CC_FIFO_WTMK_WIDTH 7 98*4882a593Smuzhiyun #define EASRC_CC_FIFO_WTMK_MASK ((BIT(EASRC_CC_FIFO_WTMK_WIDTH) - 1) \ 99*4882a593Smuzhiyun << EASRC_CC_FIFO_WTMK_SHIFT) 100*4882a593Smuzhiyun #define EASRC_CC_FIFO_WTMK(v) (((v) << EASRC_CC_FIFO_WTMK_SHIFT) \ 101*4882a593Smuzhiyun & EASRC_CC_FIFO_WTMK_MASK) 102*4882a593Smuzhiyun #define EASRC_CC_SAMPLE_POS_SHIFT 11 103*4882a593Smuzhiyun #define EASRC_CC_SAMPLE_POS_WIDTH 5 104*4882a593Smuzhiyun #define EASRC_CC_SAMPLE_POS_MASK ((BIT(EASRC_CC_SAMPLE_POS_WIDTH) - 1) \ 105*4882a593Smuzhiyun << EASRC_CC_SAMPLE_POS_SHIFT) 106*4882a593Smuzhiyun #define EASRC_CC_SAMPLE_POS(v) (((v) << EASRC_CC_SAMPLE_POS_SHIFT) \ 107*4882a593Smuzhiyun & EASRC_CC_SAMPLE_POS_MASK) 108*4882a593Smuzhiyun #define EASRC_CC_ENDIANNESS_SHIFT 10 109*4882a593Smuzhiyun #define EASRC_CC_ENDIANNESS_MASK BIT(EASRC_CC_ENDIANNESS_SHIFT) 110*4882a593Smuzhiyun #define EASRC_CC_ENDIANNESS BIT(EASRC_CC_ENDIANNESS_SHIFT) 111*4882a593Smuzhiyun #define EASRC_CC_BPS_SHIFT 8 112*4882a593Smuzhiyun #define EASRC_CC_BPS_WIDTH 2 113*4882a593Smuzhiyun #define EASRC_CC_BPS_MASK ((BIT(EASRC_CC_BPS_WIDTH) - 1) \ 114*4882a593Smuzhiyun << EASRC_CC_BPS_SHIFT) 115*4882a593Smuzhiyun #define EASRC_CC_BPS(v) (((v) << EASRC_CC_BPS_SHIFT) \ 116*4882a593Smuzhiyun & EASRC_CC_BPS_MASK) 117*4882a593Smuzhiyun #define EASRC_CC_FMT_SHIFT 7 118*4882a593Smuzhiyun #define EASRC_CC_FMT_MASK BIT(EASRC_CC_FMT_SHIFT) 119*4882a593Smuzhiyun #define EASRC_CC_FMT BIT(EASRC_CC_FMT_SHIFT) 120*4882a593Smuzhiyun #define EASRC_CC_INSIGN_SHIFT 6 121*4882a593Smuzhiyun #define EASRC_CC_INSIGN_MASK BIT(EASRC_CC_INSIGN_SHIFT) 122*4882a593Smuzhiyun #define EASRC_CC_INSIGN BIT(EASRC_CC_INSIGN_SHIFT) 123*4882a593Smuzhiyun #define EASRC_CC_CHEN_SHIFT 0 124*4882a593Smuzhiyun #define EASRC_CC_CHEN_WIDTH 5 125*4882a593Smuzhiyun #define EASRC_CC_CHEN_MASK ((BIT(EASRC_CC_CHEN_WIDTH) - 1) \ 126*4882a593Smuzhiyun << EASRC_CC_CHEN_SHIFT) 127*4882a593Smuzhiyun #define EASRC_CC_CHEN(v) (((v) << EASRC_CC_CHEN_SHIFT) \ 128*4882a593Smuzhiyun & EASRC_CC_CHEN_MASK) 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun /* ASRC Context Control Extended 1 (CCE1) */ 131*4882a593Smuzhiyun #define EASRC_CCE1_COEF_WS_SHIFT 25 132*4882a593Smuzhiyun #define EASRC_CCE1_COEF_WS_MASK BIT(EASRC_CCE1_COEF_WS_SHIFT) 133*4882a593Smuzhiyun #define EASRC_CCE1_COEF_WS BIT(EASRC_CCE1_COEF_WS_SHIFT) 134*4882a593Smuzhiyun #define EASRC_CCE1_COEF_MEM_RST_SHIFT 24 135*4882a593Smuzhiyun #define EASRC_CCE1_COEF_MEM_RST_MASK BIT(EASRC_CCE1_COEF_MEM_RST_SHIFT) 136*4882a593Smuzhiyun #define EASRC_CCE1_COEF_MEM_RST BIT(EASRC_CCE1_COEF_MEM_RST_SHIFT) 137*4882a593Smuzhiyun #define EASRC_CCE1_PF_EXP_SHIFT 16 138*4882a593Smuzhiyun #define EASRC_CCE1_PF_EXP_WIDTH 8 139*4882a593Smuzhiyun #define EASRC_CCE1_PF_EXP_MASK ((BIT(EASRC_CCE1_PF_EXP_WIDTH) - 1) \ 140*4882a593Smuzhiyun << EASRC_CCE1_PF_EXP_SHIFT) 141*4882a593Smuzhiyun #define EASRC_CCE1_PF_EXP(v) (((v) << EASRC_CCE1_PF_EXP_SHIFT) \ 142*4882a593Smuzhiyun & EASRC_CCE1_PF_EXP_MASK) 143*4882a593Smuzhiyun #define EASRC_CCE1_PF_ST1_WBFP_SHIFT 9 144*4882a593Smuzhiyun #define EASRC_CCE1_PF_ST1_WBFP_MASK BIT(EASRC_CCE1_PF_ST1_WBFP_SHIFT) 145*4882a593Smuzhiyun #define EASRC_CCE1_PF_ST1_WBFP BIT(EASRC_CCE1_PF_ST1_WBFP_SHIFT) 146*4882a593Smuzhiyun #define EASRC_CCE1_PF_TSEN_SHIFT 8 147*4882a593Smuzhiyun #define EASRC_CCE1_PF_TSEN_MASK BIT(EASRC_CCE1_PF_TSEN_SHIFT) 148*4882a593Smuzhiyun #define EASRC_CCE1_PF_TSEN BIT(EASRC_CCE1_PF_TSEN_SHIFT) 149*4882a593Smuzhiyun #define EASRC_CCE1_RS_BYPASS_SHIFT 7 150*4882a593Smuzhiyun #define EASRC_CCE1_RS_BYPASS_MASK BIT(EASRC_CCE1_RS_BYPASS_SHIFT) 151*4882a593Smuzhiyun #define EASRC_CCE1_RS_BYPASS BIT(EASRC_CCE1_RS_BYPASS_SHIFT) 152*4882a593Smuzhiyun #define EASRC_CCE1_PF_BYPASS_SHIFT 6 153*4882a593Smuzhiyun #define EASRC_CCE1_PF_BYPASS_MASK BIT(EASRC_CCE1_PF_BYPASS_SHIFT) 154*4882a593Smuzhiyun #define EASRC_CCE1_PF_BYPASS BIT(EASRC_CCE1_PF_BYPASS_SHIFT) 155*4882a593Smuzhiyun #define EASRC_CCE1_RS_STOP_SHIFT 5 156*4882a593Smuzhiyun #define EASRC_CCE1_RS_STOP_MASK BIT(EASRC_CCE1_RS_STOP_SHIFT) 157*4882a593Smuzhiyun #define EASRC_CCE1_RS_STOP BIT(EASRC_CCE1_RS_STOP_SHIFT) 158*4882a593Smuzhiyun #define EASRC_CCE1_PF_STOP_SHIFT 4 159*4882a593Smuzhiyun #define EASRC_CCE1_PF_STOP_MASK BIT(EASRC_CCE1_PF_STOP_SHIFT) 160*4882a593Smuzhiyun #define EASRC_CCE1_PF_STOP BIT(EASRC_CCE1_PF_STOP_SHIFT) 161*4882a593Smuzhiyun #define EASRC_CCE1_RS_INIT_SHIFT 2 162*4882a593Smuzhiyun #define EASRC_CCE1_RS_INIT_WIDTH 2 163*4882a593Smuzhiyun #define EASRC_CCE1_RS_INIT_MASK ((BIT(EASRC_CCE1_RS_INIT_WIDTH) - 1) \ 164*4882a593Smuzhiyun << EASRC_CCE1_RS_INIT_SHIFT) 165*4882a593Smuzhiyun #define EASRC_CCE1_RS_INIT(v) (((v) << EASRC_CCE1_RS_INIT_SHIFT) \ 166*4882a593Smuzhiyun & EASRC_CCE1_RS_INIT_MASK) 167*4882a593Smuzhiyun #define EASRC_CCE1_PF_INIT_SHIFT 0 168*4882a593Smuzhiyun #define EASRC_CCE1_PF_INIT_WIDTH 2 169*4882a593Smuzhiyun #define EASRC_CCE1_PF_INIT_MASK ((BIT(EASRC_CCE1_PF_INIT_WIDTH) - 1) \ 170*4882a593Smuzhiyun << EASRC_CCE1_PF_INIT_SHIFT) 171*4882a593Smuzhiyun #define EASRC_CCE1_PF_INIT(v) (((v) << EASRC_CCE1_PF_INIT_SHIFT) \ 172*4882a593Smuzhiyun & EASRC_CCE1_PF_INIT_MASK) 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun /* ASRC Context Control Extended 2 (CCE2) */ 175*4882a593Smuzhiyun #define EASRC_CCE2_ST2_TAPS_SHIFT 16 176*4882a593Smuzhiyun #define EASRC_CCE2_ST2_TAPS_WIDTH 9 177*4882a593Smuzhiyun #define EASRC_CCE2_ST2_TAPS_MASK ((BIT(EASRC_CCE2_ST2_TAPS_WIDTH) - 1) \ 178*4882a593Smuzhiyun << EASRC_CCE2_ST2_TAPS_SHIFT) 179*4882a593Smuzhiyun #define EASRC_CCE2_ST2_TAPS(v) (((v) << EASRC_CCE2_ST2_TAPS_SHIFT) \ 180*4882a593Smuzhiyun & EASRC_CCE2_ST2_TAPS_MASK) 181*4882a593Smuzhiyun #define EASRC_CCE2_ST1_TAPS_SHIFT 0 182*4882a593Smuzhiyun #define EASRC_CCE2_ST1_TAPS_WIDTH 9 183*4882a593Smuzhiyun #define EASRC_CCE2_ST1_TAPS_MASK ((BIT(EASRC_CCE2_ST1_TAPS_WIDTH) - 1) \ 184*4882a593Smuzhiyun << EASRC_CCE2_ST1_TAPS_SHIFT) 185*4882a593Smuzhiyun #define EASRC_CCE2_ST1_TAPS(v) (((v) << EASRC_CCE2_ST1_TAPS_SHIFT) \ 186*4882a593Smuzhiyun & EASRC_CCE2_ST1_TAPS_MASK) 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun /* ASRC Control Input Access (CIA) */ 189*4882a593Smuzhiyun #define EASRC_CIA_ITER_SHIFT 16 190*4882a593Smuzhiyun #define EASRC_CIA_ITER_WIDTH 6 191*4882a593Smuzhiyun #define EASRC_CIA_ITER_MASK ((BIT(EASRC_CIA_ITER_WIDTH) - 1) \ 192*4882a593Smuzhiyun << EASRC_CIA_ITER_SHIFT) 193*4882a593Smuzhiyun #define EASRC_CIA_ITER(v) (((v) << EASRC_CIA_ITER_SHIFT) \ 194*4882a593Smuzhiyun & EASRC_CIA_ITER_MASK) 195*4882a593Smuzhiyun #define EASRC_CIA_GRLEN_SHIFT 8 196*4882a593Smuzhiyun #define EASRC_CIA_GRLEN_WIDTH 6 197*4882a593Smuzhiyun #define EASRC_CIA_GRLEN_MASK ((BIT(EASRC_CIA_GRLEN_WIDTH) - 1) \ 198*4882a593Smuzhiyun << EASRC_CIA_GRLEN_SHIFT) 199*4882a593Smuzhiyun #define EASRC_CIA_GRLEN(v) (((v) << EASRC_CIA_GRLEN_SHIFT) \ 200*4882a593Smuzhiyun & EASRC_CIA_GRLEN_MASK) 201*4882a593Smuzhiyun #define EASRC_CIA_ACCLEN_SHIFT 0 202*4882a593Smuzhiyun #define EASRC_CIA_ACCLEN_WIDTH 6 203*4882a593Smuzhiyun #define EASRC_CIA_ACCLEN_MASK ((BIT(EASRC_CIA_ACCLEN_WIDTH) - 1) \ 204*4882a593Smuzhiyun << EASRC_CIA_ACCLEN_SHIFT) 205*4882a593Smuzhiyun #define EASRC_CIA_ACCLEN(v) (((v) << EASRC_CIA_ACCLEN_SHIFT) \ 206*4882a593Smuzhiyun & EASRC_CIA_ACCLEN_MASK) 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun /* ASRC Datapath Processor Control Slot0 Register0 (DPCS0R0) */ 209*4882a593Smuzhiyun #define EASRC_DPCS0R0_MAXCH_SHIFT 24 210*4882a593Smuzhiyun #define EASRC_DPCS0R0_MAXCH_WIDTH 5 211*4882a593Smuzhiyun #define EASRC_DPCS0R0_MAXCH_MASK ((BIT(EASRC_DPCS0R0_MAXCH_WIDTH) - 1) \ 212*4882a593Smuzhiyun << EASRC_DPCS0R0_MAXCH_SHIFT) 213*4882a593Smuzhiyun #define EASRC_DPCS0R0_MAXCH(v) (((v) << EASRC_DPCS0R0_MAXCH_SHIFT) \ 214*4882a593Smuzhiyun & EASRC_DPCS0R0_MAXCH_MASK) 215*4882a593Smuzhiyun #define EASRC_DPCS0R0_MINCH_SHIFT 16 216*4882a593Smuzhiyun #define EASRC_DPCS0R0_MINCH_WIDTH 5 217*4882a593Smuzhiyun #define EASRC_DPCS0R0_MINCH_MASK ((BIT(EASRC_DPCS0R0_MINCH_WIDTH) - 1) \ 218*4882a593Smuzhiyun << EASRC_DPCS0R0_MINCH_SHIFT) 219*4882a593Smuzhiyun #define EASRC_DPCS0R0_MINCH(v) (((v) << EASRC_DPCS0R0_MINCH_SHIFT) \ 220*4882a593Smuzhiyun & EASRC_DPCS0R0_MINCH_MASK) 221*4882a593Smuzhiyun #define EASRC_DPCS0R0_NUMCH_SHIFT 8 222*4882a593Smuzhiyun #define EASRC_DPCS0R0_NUMCH_WIDTH 5 223*4882a593Smuzhiyun #define EASRC_DPCS0R0_NUMCH_MASK ((BIT(EASRC_DPCS0R0_NUMCH_WIDTH) - 1) \ 224*4882a593Smuzhiyun << EASRC_DPCS0R0_NUMCH_SHIFT) 225*4882a593Smuzhiyun #define EASRC_DPCS0R0_NUMCH(v) (((v) << EASRC_DPCS0R0_NUMCH_SHIFT) \ 226*4882a593Smuzhiyun & EASRC_DPCS0R0_NUMCH_MASK) 227*4882a593Smuzhiyun #define EASRC_DPCS0R0_CTXNUM_SHIFT 1 228*4882a593Smuzhiyun #define EASRC_DPCS0R0_CTXNUM_WIDTH 2 229*4882a593Smuzhiyun #define EASRC_DPCS0R0_CTXNUM_MASK ((BIT(EASRC_DPCS0R0_CTXNUM_WIDTH) - 1) \ 230*4882a593Smuzhiyun << EASRC_DPCS0R0_CTXNUM_SHIFT) 231*4882a593Smuzhiyun #define EASRC_DPCS0R0_CTXNUM(v) (((v) << EASRC_DPCS0R0_CTXNUM_SHIFT) \ 232*4882a593Smuzhiyun & EASRC_DPCS0R0_CTXNUM_MASK) 233*4882a593Smuzhiyun #define EASRC_DPCS0R0_EN_SHIFT 0 234*4882a593Smuzhiyun #define EASRC_DPCS0R0_EN_MASK BIT(EASRC_DPCS0R0_EN_SHIFT) 235*4882a593Smuzhiyun #define EASRC_DPCS0R0_EN BIT(EASRC_DPCS0R0_EN_SHIFT) 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun /* ASRC Datapath Processor Control Slot0 Register1 (DPCS0R1) */ 238*4882a593Smuzhiyun #define EASRC_DPCS0R1_ST1_EXP_SHIFT 0 239*4882a593Smuzhiyun #define EASRC_DPCS0R1_ST1_EXP_WIDTH 13 240*4882a593Smuzhiyun #define EASRC_DPCS0R1_ST1_EXP_MASK ((BIT(EASRC_DPCS0R1_ST1_EXP_WIDTH) - 1) \ 241*4882a593Smuzhiyun << EASRC_DPCS0R1_ST1_EXP_SHIFT) 242*4882a593Smuzhiyun #define EASRC_DPCS0R1_ST1_EXP(v) (((v) << EASRC_DPCS0R1_ST1_EXP_SHIFT) \ 243*4882a593Smuzhiyun & EASRC_DPCS0R1_ST1_EXP_MASK) 244*4882a593Smuzhiyun 245*4882a593Smuzhiyun /* ASRC Datapath Processor Control Slot0 Register2 (DPCS0R2) */ 246*4882a593Smuzhiyun #define EASRC_DPCS0R2_ST1_MA_SHIFT 16 247*4882a593Smuzhiyun #define EASRC_DPCS0R2_ST1_MA_WIDTH 13 248*4882a593Smuzhiyun #define EASRC_DPCS0R2_ST1_MA_MASK ((BIT(EASRC_DPCS0R2_ST1_MA_WIDTH) - 1) \ 249*4882a593Smuzhiyun << EASRC_DPCS0R2_ST1_MA_SHIFT) 250*4882a593Smuzhiyun #define EASRC_DPCS0R2_ST1_MA(v) (((v) << EASRC_DPCS0R2_ST1_MA_SHIFT) \ 251*4882a593Smuzhiyun & EASRC_DPCS0R2_ST1_MA_MASK) 252*4882a593Smuzhiyun #define EASRC_DPCS0R2_ST1_SA_SHIFT 0 253*4882a593Smuzhiyun #define EASRC_DPCS0R2_ST1_SA_WIDTH 13 254*4882a593Smuzhiyun #define EASRC_DPCS0R2_ST1_SA_MASK ((BIT(EASRC_DPCS0R2_ST1_SA_WIDTH) - 1) \ 255*4882a593Smuzhiyun << EASRC_DPCS0R2_ST1_SA_SHIFT) 256*4882a593Smuzhiyun #define EASRC_DPCS0R2_ST1_SA(v) (((v) << EASRC_DPCS0R2_ST1_SA_SHIFT) \ 257*4882a593Smuzhiyun & EASRC_DPCS0R2_ST1_SA_MASK) 258*4882a593Smuzhiyun 259*4882a593Smuzhiyun /* ASRC Datapath Processor Control Slot0 Register3 (DPCS0R3) */ 260*4882a593Smuzhiyun #define EASRC_DPCS0R3_ST2_MA_SHIFT 16 261*4882a593Smuzhiyun #define EASRC_DPCS0R3_ST2_MA_WIDTH 13 262*4882a593Smuzhiyun #define EASRC_DPCS0R3_ST2_MA_MASK ((BIT(EASRC_DPCS0R3_ST2_MA_WIDTH) - 1) \ 263*4882a593Smuzhiyun << EASRC_DPCS0R3_ST2_MA_SHIFT) 264*4882a593Smuzhiyun #define EASRC_DPCS0R3_ST2_MA(v) (((v) << EASRC_DPCS0R3_ST2_MA_SHIFT) \ 265*4882a593Smuzhiyun & EASRC_DPCS0R3_ST2_MA_MASK) 266*4882a593Smuzhiyun #define EASRC_DPCS0R3_ST2_SA_SHIFT 0 267*4882a593Smuzhiyun #define EASRC_DPCS0R3_ST2_SA_WIDTH 13 268*4882a593Smuzhiyun #define EASRC_DPCS0R3_ST2_SA_MASK ((BIT(EASRC_DPCS0R3_ST2_SA_WIDTH) - 1) \ 269*4882a593Smuzhiyun << EASRC_DPCS0R3_ST2_SA_SHIFT) 270*4882a593Smuzhiyun #define EASRC_DPCS0R3_ST2_SA(v) (((v) << EASRC_DPCS0R3_ST2_SA_SHIFT) \ 271*4882a593Smuzhiyun & EASRC_DPCS0R3_ST2_SA_MASK) 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun /* ASRC Context Output Control (COC) */ 274*4882a593Smuzhiyun #define EASRC_COC_FWMDE_SHIFT 28 275*4882a593Smuzhiyun #define EASRC_COC_FWMDE_MASK BIT(EASRC_COC_FWMDE_SHIFT) 276*4882a593Smuzhiyun #define EASRC_COC_FWMDE BIT(EASRC_COC_FWMDE_SHIFT) 277*4882a593Smuzhiyun #define EASRC_COC_FIFO_WTMK_SHIFT 16 278*4882a593Smuzhiyun #define EASRC_COC_FIFO_WTMK_WIDTH 7 279*4882a593Smuzhiyun #define EASRC_COC_FIFO_WTMK_MASK ((BIT(EASRC_COC_FIFO_WTMK_WIDTH) - 1) \ 280*4882a593Smuzhiyun << EASRC_COC_FIFO_WTMK_SHIFT) 281*4882a593Smuzhiyun #define EASRC_COC_FIFO_WTMK(v) (((v) << EASRC_COC_FIFO_WTMK_SHIFT) \ 282*4882a593Smuzhiyun & EASRC_COC_FIFO_WTMK_MASK) 283*4882a593Smuzhiyun #define EASRC_COC_SAMPLE_POS_SHIFT 11 284*4882a593Smuzhiyun #define EASRC_COC_SAMPLE_POS_WIDTH 5 285*4882a593Smuzhiyun #define EASRC_COC_SAMPLE_POS_MASK ((BIT(EASRC_COC_SAMPLE_POS_WIDTH) - 1) \ 286*4882a593Smuzhiyun << EASRC_COC_SAMPLE_POS_SHIFT) 287*4882a593Smuzhiyun #define EASRC_COC_SAMPLE_POS(v) (((v) << EASRC_COC_SAMPLE_POS_SHIFT) \ 288*4882a593Smuzhiyun & EASRC_COC_SAMPLE_POS_MASK) 289*4882a593Smuzhiyun #define EASRC_COC_ENDIANNESS_SHIFT 10 290*4882a593Smuzhiyun #define EASRC_COC_ENDIANNESS_MASK BIT(EASRC_COC_ENDIANNESS_SHIFT) 291*4882a593Smuzhiyun #define EASRC_COC_ENDIANNESS BIT(EASRC_COC_ENDIANNESS_SHIFT) 292*4882a593Smuzhiyun #define EASRC_COC_BPS_SHIFT 8 293*4882a593Smuzhiyun #define EASRC_COC_BPS_WIDTH 2 294*4882a593Smuzhiyun #define EASRC_COC_BPS_MASK ((BIT(EASRC_COC_BPS_WIDTH) - 1) \ 295*4882a593Smuzhiyun << EASRC_COC_BPS_SHIFT) 296*4882a593Smuzhiyun #define EASRC_COC_BPS(v) (((v) << EASRC_COC_BPS_SHIFT) \ 297*4882a593Smuzhiyun & EASRC_COC_BPS_MASK) 298*4882a593Smuzhiyun #define EASRC_COC_FMT_SHIFT 7 299*4882a593Smuzhiyun #define EASRC_COC_FMT_MASK BIT(EASRC_COC_FMT_SHIFT) 300*4882a593Smuzhiyun #define EASRC_COC_FMT BIT(EASRC_COC_FMT_SHIFT) 301*4882a593Smuzhiyun #define EASRC_COC_OUTSIGN_SHIFT 6 302*4882a593Smuzhiyun #define EASRC_COC_OUTSIGN_MASK BIT(EASRC_COC_OUTSIGN_SHIFT) 303*4882a593Smuzhiyun #define EASRC_COC_OUTSIGN_OUT BIT(EASRC_COC_OUTSIGN_SHIFT) 304*4882a593Smuzhiyun #define EASRC_COC_IEC_VDATA_SHIFT 2 305*4882a593Smuzhiyun #define EASRC_COC_IEC_VDATA_MASK BIT(EASRC_COC_IEC_VDATA_SHIFT) 306*4882a593Smuzhiyun #define EASRC_COC_IEC_VDATA BIT(EASRC_COC_IEC_VDATA_SHIFT) 307*4882a593Smuzhiyun #define EASRC_COC_IEC_EN_SHIFT 1 308*4882a593Smuzhiyun #define EASRC_COC_IEC_EN_MASK BIT(EASRC_COC_IEC_EN_SHIFT) 309*4882a593Smuzhiyun #define EASRC_COC_IEC_EN BIT(EASRC_COC_IEC_EN_SHIFT) 310*4882a593Smuzhiyun #define EASRC_COC_DITHER_EN_SHIFT 0 311*4882a593Smuzhiyun #define EASRC_COC_DITHER_EN_MASK BIT(EASRC_COC_DITHER_EN_SHIFT) 312*4882a593Smuzhiyun #define EASRC_COC_DITHER_EN BIT(EASRC_COC_DITHER_EN_SHIFT) 313*4882a593Smuzhiyun 314*4882a593Smuzhiyun /* ASRC Control Output Access (COA) */ 315*4882a593Smuzhiyun #define EASRC_COA_ITER_SHIFT 16 316*4882a593Smuzhiyun #define EASRC_COA_ITER_WIDTH 6 317*4882a593Smuzhiyun #define EASRC_COA_ITER_MASK ((BIT(EASRC_COA_ITER_WIDTH) - 1) \ 318*4882a593Smuzhiyun << EASRC_COA_ITER_SHIFT) 319*4882a593Smuzhiyun #define EASRC_COA_ITER(v) (((v) << EASRC_COA_ITER_SHIFT) \ 320*4882a593Smuzhiyun & EASRC_COA_ITER_MASK) 321*4882a593Smuzhiyun #define EASRC_COA_GRLEN_SHIFT 8 322*4882a593Smuzhiyun #define EASRC_COA_GRLEN_WIDTH 6 323*4882a593Smuzhiyun #define EASRC_COA_GRLEN_MASK ((BIT(EASRC_COA_GRLEN_WIDTH) - 1) \ 324*4882a593Smuzhiyun << EASRC_COA_GRLEN_SHIFT) 325*4882a593Smuzhiyun #define EASRC_COA_GRLEN(v) (((v) << EASRC_COA_GRLEN_SHIFT) \ 326*4882a593Smuzhiyun & EASRC_COA_GRLEN_MASK) 327*4882a593Smuzhiyun #define EASRC_COA_ACCLEN_SHIFT 0 328*4882a593Smuzhiyun #define EASRC_COA_ACCLEN_WIDTH 6 329*4882a593Smuzhiyun #define EASRC_COA_ACCLEN_MASK ((BIT(EASRC_COA_ACCLEN_WIDTH) - 1) \ 330*4882a593Smuzhiyun << EASRC_COA_ACCLEN_SHIFT) 331*4882a593Smuzhiyun #define EASRC_COA_ACCLEN(v) (((v) << EASRC_COA_ACCLEN_SHIFT) \ 332*4882a593Smuzhiyun & EASRC_COA_ACCLEN_MASK) 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun /* ASRC Sample FIFO Status (SFS) */ 335*4882a593Smuzhiyun #define EASRC_SFS_IWTMK_SHIFT 23 336*4882a593Smuzhiyun #define EASRC_SFS_IWTMK_MASK BIT(EASRC_SFS_IWTMK_SHIFT) 337*4882a593Smuzhiyun #define EASRC_SFS_IWTMK BIT(EASRC_SFS_IWTMK_SHIFT) 338*4882a593Smuzhiyun #define EASRC_SFS_NSGI_SHIFT 16 339*4882a593Smuzhiyun #define EASRC_SFS_NSGI_WIDTH 7 340*4882a593Smuzhiyun #define EASRC_SFS_NSGI_MASK ((BIT(EASRC_SFS_NSGI_WIDTH) - 1) \ 341*4882a593Smuzhiyun << EASRC_SFS_NSGI_SHIFT) 342*4882a593Smuzhiyun #define EASRC_SFS_NSGI(v) (((v) << EASRC_SFS_NSGI_SHIFT) \ 343*4882a593Smuzhiyun & EASRC_SFS_NSGI_MASK) 344*4882a593Smuzhiyun #define EASRC_SFS_OWTMK_SHIFT 7 345*4882a593Smuzhiyun #define EASRC_SFS_OWTMK_MASK BIT(EASRC_SFS_OWTMK_SHIFT) 346*4882a593Smuzhiyun #define EASRC_SFS_OWTMK BIT(EASRC_SFS_OWTMK_SHIFT) 347*4882a593Smuzhiyun #define EASRC_SFS_NSGO_SHIFT 0 348*4882a593Smuzhiyun #define EASRC_SFS_NSGO_WIDTH 7 349*4882a593Smuzhiyun #define EASRC_SFS_NSGO_MASK ((BIT(EASRC_SFS_NSGO_WIDTH) - 1) \ 350*4882a593Smuzhiyun << EASRC_SFS_NSGO_SHIFT) 351*4882a593Smuzhiyun #define EASRC_SFS_NSGO(v) (((v) << EASRC_SFS_NSGO_SHIFT) \ 352*4882a593Smuzhiyun & EASRC_SFS_NSGO_MASK) 353*4882a593Smuzhiyun 354*4882a593Smuzhiyun /* ASRC Resampling Ratio Low (RRL) */ 355*4882a593Smuzhiyun #define EASRC_RRL_RS_RL_SHIFT 0 356*4882a593Smuzhiyun #define EASRC_RRL_RS_RL_WIDTH 32 357*4882a593Smuzhiyun #define EASRC_RRL_RS_RL(v) ((v) << EASRC_RRL_RS_RL_SHIFT) 358*4882a593Smuzhiyun 359*4882a593Smuzhiyun /* ASRC Resampling Ratio High (RRH) */ 360*4882a593Smuzhiyun #define EASRC_RRH_RS_VLD_SHIFT 31 361*4882a593Smuzhiyun #define EASRC_RRH_RS_VLD_MASK BIT(EASRC_RRH_RS_VLD_SHIFT) 362*4882a593Smuzhiyun #define EASRC_RRH_RS_VLD BIT(EASRC_RRH_RS_VLD_SHIFT) 363*4882a593Smuzhiyun #define EASRC_RRH_RS_RH_SHIFT 0 364*4882a593Smuzhiyun #define EASRC_RRH_RS_RH_WIDTH 12 365*4882a593Smuzhiyun #define EASRC_RRH_RS_RH_MASK ((BIT(EASRC_RRH_RS_RH_WIDTH) - 1) \ 366*4882a593Smuzhiyun << EASRC_RRH_RS_RH_SHIFT) 367*4882a593Smuzhiyun #define EASRC_RRH_RS_RH(v) (((v) << EASRC_RRH_RS_RH_SHIFT) \ 368*4882a593Smuzhiyun & EASRC_RRH_RS_RH_MASK) 369*4882a593Smuzhiyun 370*4882a593Smuzhiyun /* ASRC Resampling Ratio Update Control (RSUC) */ 371*4882a593Smuzhiyun #define EASRC_RSUC_RS_RM_SHIFT 0 372*4882a593Smuzhiyun #define EASRC_RSUC_RS_RM_WIDTH 32 373*4882a593Smuzhiyun #define EASRC_RSUC_RS_RM(v) ((v) << EASRC_RSUC_RS_RM_SHIFT) 374*4882a593Smuzhiyun 375*4882a593Smuzhiyun /* ASRC Resampling Ratio Update Rate (RRUR) */ 376*4882a593Smuzhiyun #define EASRC_RRUR_RRR_SHIFT 0 377*4882a593Smuzhiyun #define EASRC_RRUR_RRR_WIDTH 31 378*4882a593Smuzhiyun #define EASRC_RRUR_RRR_MASK ((BIT(EASRC_RRUR_RRR_WIDTH) - 1) \ 379*4882a593Smuzhiyun << EASRC_RRUR_RRR_SHIFT) 380*4882a593Smuzhiyun #define EASRC_RRUR_RRR(v) (((v) << EASRC_RRUR_RRR_SHIFT) \ 381*4882a593Smuzhiyun & EASRC_RRUR_RRR_MASK) 382*4882a593Smuzhiyun 383*4882a593Smuzhiyun /* ASRC Resampling Center Tap Coefficient Low (RCTCL) */ 384*4882a593Smuzhiyun #define EASRC_RCTCL_RS_CL_SHIFT 0 385*4882a593Smuzhiyun #define EASRC_RCTCL_RS_CL_WIDTH 32 386*4882a593Smuzhiyun #define EASRC_RCTCL_RS_CL(v) ((v) << EASRC_RCTCL_RS_CL_SHIFT) 387*4882a593Smuzhiyun 388*4882a593Smuzhiyun /* ASRC Resampling Center Tap Coefficient High (RCTCH) */ 389*4882a593Smuzhiyun #define EASRC_RCTCH_RS_CH_SHIFT 0 390*4882a593Smuzhiyun #define EASRC_RCTCH_RS_CH_WIDTH 32 391*4882a593Smuzhiyun #define EASRC_RCTCH_RS_CH(v) ((v) << EASRC_RCTCH_RS_CH_SHIFT) 392*4882a593Smuzhiyun 393*4882a593Smuzhiyun /* ASRC Prefilter Coefficient FIFO (PCF) */ 394*4882a593Smuzhiyun #define EASRC_PCF_CD_SHIFT 0 395*4882a593Smuzhiyun #define EASRC_PCF_CD_WIDTH 32 396*4882a593Smuzhiyun #define EASRC_PCF_CD(v) ((v) << EASRC_PCF_CD_SHIFT) 397*4882a593Smuzhiyun 398*4882a593Smuzhiyun /* ASRC Context Resampling Coefficient Memory (CRCM) */ 399*4882a593Smuzhiyun #define EASRC_CRCM_RS_CWD_SHIFT 0 400*4882a593Smuzhiyun #define EASRC_CRCM_RS_CWD_WIDTH 32 401*4882a593Smuzhiyun #define EASRC_CRCM_RS_CWD(v) ((v) << EASRC_CRCM_RS_CWD_SHIFT) 402*4882a593Smuzhiyun 403*4882a593Smuzhiyun /* ASRC Context Resampling Coefficient Control (CRCC) */ 404*4882a593Smuzhiyun #define EASRC_CRCC_RS_CA_SHIFT 16 405*4882a593Smuzhiyun #define EASRC_CRCC_RS_CA_WIDTH 11 406*4882a593Smuzhiyun #define EASRC_CRCC_RS_CA_MASK ((BIT(EASRC_CRCC_RS_CA_WIDTH) - 1) \ 407*4882a593Smuzhiyun << EASRC_CRCC_RS_CA_SHIFT) 408*4882a593Smuzhiyun #define EASRC_CRCC_RS_CA(v) (((v) << EASRC_CRCC_RS_CA_SHIFT) \ 409*4882a593Smuzhiyun & EASRC_CRCC_RS_CA_MASK) 410*4882a593Smuzhiyun #define EASRC_CRCC_RS_TAPS_SHIFT 1 411*4882a593Smuzhiyun #define EASRC_CRCC_RS_TAPS_WIDTH 2 412*4882a593Smuzhiyun #define EASRC_CRCC_RS_TAPS_MASK ((BIT(EASRC_CRCC_RS_TAPS_WIDTH) - 1) \ 413*4882a593Smuzhiyun << EASRC_CRCC_RS_TAPS_SHIFT) 414*4882a593Smuzhiyun #define EASRC_CRCC_RS_TAPS(v) (((v) << EASRC_CRCC_RS_TAPS_SHIFT) \ 415*4882a593Smuzhiyun & EASRC_CRCC_RS_TAPS_MASK) 416*4882a593Smuzhiyun #define EASRC_CRCC_RS_CPR_SHIFT 0 417*4882a593Smuzhiyun #define EASRC_CRCC_RS_CPR_MASK BIT(EASRC_CRCC_RS_CPR_SHIFT) 418*4882a593Smuzhiyun #define EASRC_CRCC_RS_CPR BIT(EASRC_CRCC_RS_CPR_SHIFT) 419*4882a593Smuzhiyun 420*4882a593Smuzhiyun /* ASRC Interrupt_Control (IC) */ 421*4882a593Smuzhiyun #define EASRC_IRQC_RSDM_SHIFT 8 422*4882a593Smuzhiyun #define EASRC_IRQC_RSDM_WIDTH 4 423*4882a593Smuzhiyun #define EASRC_IRQC_RSDM_MASK ((BIT(EASRC_IRQC_RSDM_WIDTH) - 1) \ 424*4882a593Smuzhiyun << EASRC_IRQC_RSDM_SHIFT) 425*4882a593Smuzhiyun #define EASRC_IRQC_RSDM(v) (((v) << EASRC_IRQC_RSDM_SHIFT) \ 426*4882a593Smuzhiyun & EASRC_IRQC_RSDM_MASK) 427*4882a593Smuzhiyun #define EASRC_IRQC_OERM_SHIFT 4 428*4882a593Smuzhiyun #define EASRC_IRQC_OERM_WIDTH 4 429*4882a593Smuzhiyun #define EASRC_IRQC_OERM_MASK ((BIT(EASRC_IRQC_OERM_WIDTH) - 1) \ 430*4882a593Smuzhiyun << EASRC_IRQC_OERM_SHIFT) 431*4882a593Smuzhiyun #define EASRC_IRQC_OERM(v) (((v) << EASRC_IRQC_OERM_SHIFT) \ 432*4882a593Smuzhiyun & EASRC_IEQC_OERM_MASK) 433*4882a593Smuzhiyun #define EASRC_IRQC_IOM_SHIFT 0 434*4882a593Smuzhiyun #define EASRC_IRQC_IOM_WIDTH 4 435*4882a593Smuzhiyun #define EASRC_IRQC_IOM_MASK ((BIT(EASRC_IRQC_IOM_WIDTH) - 1) \ 436*4882a593Smuzhiyun << EASRC_IRQC_IOM_SHIFT) 437*4882a593Smuzhiyun #define EASRC_IRQC_IOM(v) (((v) << EASRC_IRQC_IOM_SHIFT) \ 438*4882a593Smuzhiyun & EASRC_IRQC_IOM_MASK) 439*4882a593Smuzhiyun 440*4882a593Smuzhiyun /* ASRC Interrupt Status Flags (ISF) */ 441*4882a593Smuzhiyun #define EASRC_IRQF_RSD_SHIFT 8 442*4882a593Smuzhiyun #define EASRC_IRQF_RSD_WIDTH 4 443*4882a593Smuzhiyun #define EASRC_IRQF_RSD_MASK ((BIT(EASRC_IRQF_RSD_WIDTH) - 1) \ 444*4882a593Smuzhiyun << EASRC_IRQF_RSD_SHIFT) 445*4882a593Smuzhiyun #define EASRC_IRQF_RSD(v) (((v) << EASRC_IRQF_RSD_SHIFT) \ 446*4882a593Smuzhiyun & EASRC_IRQF_RSD_MASK) 447*4882a593Smuzhiyun #define EASRC_IRQF_OER_SHIFT 4 448*4882a593Smuzhiyun #define EASRC_IRQF_OER_WIDTH 4 449*4882a593Smuzhiyun #define EASRC_IRQF_OER_MASK ((BIT(EASRC_IRQF_OER_WIDTH) - 1) \ 450*4882a593Smuzhiyun << EASRC_IRQF_OER_SHIFT) 451*4882a593Smuzhiyun #define EASRC_IRQF_OER(v) (((v) << EASRC_IRQF_OER_SHIFT) \ 452*4882a593Smuzhiyun & EASRC_IRQF_OER_MASK) 453*4882a593Smuzhiyun #define EASRC_IRQF_IFO_SHIFT 0 454*4882a593Smuzhiyun #define EASRC_IRQF_IFO_WIDTH 4 455*4882a593Smuzhiyun #define EASRC_IRQF_IFO_MASK ((BIT(EASRC_IRQF_IFO_WIDTH) - 1) \ 456*4882a593Smuzhiyun << EASRC_IRQF_IFO_SHIFT) 457*4882a593Smuzhiyun #define EASRC_IRQF_IFO(v) (((v) << EASRC_IRQF_IFO_SHIFT) \ 458*4882a593Smuzhiyun & EASRC_IRQF_IFO_MASK) 459*4882a593Smuzhiyun 460*4882a593Smuzhiyun /* ASRC Context Channel STAT */ 461*4882a593Smuzhiyun #define EASRC_CSx_CSx_SHIFT 0 462*4882a593Smuzhiyun #define EASRC_CSx_CSx_WIDTH 32 463*4882a593Smuzhiyun #define EASRC_CSx_CSx(v) ((v) << EASRC_CSx_CSx_SHIFT) 464*4882a593Smuzhiyun 465*4882a593Smuzhiyun /* ASRC Debug Control Register */ 466*4882a593Smuzhiyun #define EASRC_DBGC_DMS_SHIFT 0 467*4882a593Smuzhiyun #define EASRC_DBGC_DMS_WIDTH 6 468*4882a593Smuzhiyun #define EASRC_DBGC_DMS_MASK ((BIT(EASRC_DBGC_DMS_WIDTH) - 1) \ 469*4882a593Smuzhiyun << EASRC_DBGC_DMS_SHIFT) 470*4882a593Smuzhiyun #define EASRC_DBGC_DMS(v) (((v) << EASRC_DBGC_DMS_SHIFT) \ 471*4882a593Smuzhiyun & EASRC_DBGC_DMS_MASK) 472*4882a593Smuzhiyun 473*4882a593Smuzhiyun /* ASRC Debug Status Register */ 474*4882a593Smuzhiyun #define EASRC_DBGS_DS_SHIFT 0 475*4882a593Smuzhiyun #define EASRC_DBGS_DS_WIDTH 32 476*4882a593Smuzhiyun #define EASRC_DBGS_DS(v) ((v) << EASRC_DBGS_DS_SHIFT) 477*4882a593Smuzhiyun 478*4882a593Smuzhiyun /* General Constants */ 479*4882a593Smuzhiyun #define EASRC_CTX_MAX_NUM 4 480*4882a593Smuzhiyun #define EASRC_RS_COEFF_MEM 0 481*4882a593Smuzhiyun #define EASRC_PF_COEFF_MEM 1 482*4882a593Smuzhiyun 483*4882a593Smuzhiyun /* Prefilter constants */ 484*4882a593Smuzhiyun #define EASRC_PF_ST1_ONLY 0 485*4882a593Smuzhiyun #define EASRC_PF_TWO_STAGE_MODE 1 486*4882a593Smuzhiyun #define EASRC_PF_ST1_COEFF_WR 0 487*4882a593Smuzhiyun #define EASRC_PF_ST2_COEFF_WR 1 488*4882a593Smuzhiyun #define EASRC_MAX_PF_TAPS 384 489*4882a593Smuzhiyun 490*4882a593Smuzhiyun /* Resampling constants */ 491*4882a593Smuzhiyun #define EASRC_RS_32_TAPS 0 492*4882a593Smuzhiyun #define EASRC_RS_64_TAPS 1 493*4882a593Smuzhiyun #define EASRC_RS_128_TAPS 2 494*4882a593Smuzhiyun 495*4882a593Smuzhiyun /* Initialization mode */ 496*4882a593Smuzhiyun #define EASRC_INIT_MODE_SW_CONTROL 0 497*4882a593Smuzhiyun #define EASRC_INIT_MODE_REPLICATE 1 498*4882a593Smuzhiyun #define EASRC_INIT_MODE_ZERO_FILL 2 499*4882a593Smuzhiyun 500*4882a593Smuzhiyun /* FIFO watermarks */ 501*4882a593Smuzhiyun #define FSL_EASRC_INPUTFIFO_WML 0x4 502*4882a593Smuzhiyun #define FSL_EASRC_OUTPUTFIFO_WML 0x1 503*4882a593Smuzhiyun 504*4882a593Smuzhiyun #define EASRC_INPUTFIFO_THRESHOLD_MIN 0 505*4882a593Smuzhiyun #define EASRC_INPUTFIFO_THRESHOLD_MAX 127 506*4882a593Smuzhiyun #define EASRC_OUTPUTFIFO_THRESHOLD_MIN 0 507*4882a593Smuzhiyun #define EASRC_OUTPUTFIFO_THRESHOLD_MAX 63 508*4882a593Smuzhiyun 509*4882a593Smuzhiyun #define EASRC_DMA_BUFFER_SIZE (1024 * 48 * 9) 510*4882a593Smuzhiyun #define EASRC_MAX_BUFFER_SIZE (1024 * 48) 511*4882a593Smuzhiyun 512*4882a593Smuzhiyun #define FIRMWARE_MAGIC 0xDEAD 513*4882a593Smuzhiyun #define FIRMWARE_VERSION 1 514*4882a593Smuzhiyun 515*4882a593Smuzhiyun #define PREFILTER_MEM_LEN 0x1800 516*4882a593Smuzhiyun 517*4882a593Smuzhiyun enum easrc_word_width { 518*4882a593Smuzhiyun EASRC_WIDTH_16_BIT = 0, 519*4882a593Smuzhiyun EASRC_WIDTH_20_BIT = 1, 520*4882a593Smuzhiyun EASRC_WIDTH_24_BIT = 2, 521*4882a593Smuzhiyun EASRC_WIDTH_32_BIT = 3, 522*4882a593Smuzhiyun }; 523*4882a593Smuzhiyun 524*4882a593Smuzhiyun struct __attribute__((__packed__)) asrc_firmware_hdr { 525*4882a593Smuzhiyun u32 magic; 526*4882a593Smuzhiyun u32 interp_scen; 527*4882a593Smuzhiyun u32 prefil_scen; 528*4882a593Smuzhiyun u32 firmware_version; 529*4882a593Smuzhiyun }; 530*4882a593Smuzhiyun 531*4882a593Smuzhiyun struct __attribute__((__packed__)) interp_params { 532*4882a593Smuzhiyun u32 magic; 533*4882a593Smuzhiyun u32 num_taps; 534*4882a593Smuzhiyun u32 num_phases; 535*4882a593Smuzhiyun u64 center_tap; 536*4882a593Smuzhiyun u64 coeff[8192]; 537*4882a593Smuzhiyun }; 538*4882a593Smuzhiyun 539*4882a593Smuzhiyun struct __attribute__((__packed__)) prefil_params { 540*4882a593Smuzhiyun u32 magic; 541*4882a593Smuzhiyun u32 insr; 542*4882a593Smuzhiyun u32 outsr; 543*4882a593Smuzhiyun u32 st1_taps; 544*4882a593Smuzhiyun u32 st2_taps; 545*4882a593Smuzhiyun u32 st1_exp; 546*4882a593Smuzhiyun u64 coeff[256]; 547*4882a593Smuzhiyun }; 548*4882a593Smuzhiyun 549*4882a593Smuzhiyun struct dma_block { 550*4882a593Smuzhiyun void *dma_vaddr; 551*4882a593Smuzhiyun unsigned int length; 552*4882a593Smuzhiyun unsigned int max_buf_size; 553*4882a593Smuzhiyun }; 554*4882a593Smuzhiyun 555*4882a593Smuzhiyun struct fsl_easrc_data_fmt { 556*4882a593Smuzhiyun unsigned int width : 2; 557*4882a593Smuzhiyun unsigned int endianness : 1; 558*4882a593Smuzhiyun unsigned int unsign : 1; 559*4882a593Smuzhiyun unsigned int floating_point : 1; 560*4882a593Smuzhiyun unsigned int iec958: 1; 561*4882a593Smuzhiyun unsigned int sample_pos: 5; 562*4882a593Smuzhiyun unsigned int addexp; 563*4882a593Smuzhiyun }; 564*4882a593Smuzhiyun 565*4882a593Smuzhiyun struct fsl_easrc_io_params { 566*4882a593Smuzhiyun struct fsl_easrc_data_fmt fmt; 567*4882a593Smuzhiyun unsigned int group_len; 568*4882a593Smuzhiyun unsigned int iterations; 569*4882a593Smuzhiyun unsigned int access_len; 570*4882a593Smuzhiyun unsigned int fifo_wtmk; 571*4882a593Smuzhiyun unsigned int sample_rate; 572*4882a593Smuzhiyun snd_pcm_format_t sample_format; 573*4882a593Smuzhiyun unsigned int norm_rate; 574*4882a593Smuzhiyun }; 575*4882a593Smuzhiyun 576*4882a593Smuzhiyun struct fsl_easrc_slot { 577*4882a593Smuzhiyun bool busy; 578*4882a593Smuzhiyun int ctx_index; 579*4882a593Smuzhiyun int slot_index; 580*4882a593Smuzhiyun int num_channel; /* maximum is 8 */ 581*4882a593Smuzhiyun int min_channel; 582*4882a593Smuzhiyun int max_channel; 583*4882a593Smuzhiyun int pf_mem_used; 584*4882a593Smuzhiyun }; 585*4882a593Smuzhiyun 586*4882a593Smuzhiyun /** 587*4882a593Smuzhiyun * fsl_easrc_ctx_priv: EASRC context private data 588*4882a593Smuzhiyun * 589*4882a593Smuzhiyun * @in_params: input parameter 590*4882a593Smuzhiyun * @out_params: output parameter 591*4882a593Smuzhiyun * @st1_num_taps: tap number of stage 1 592*4882a593Smuzhiyun * @st2_num_taps: tap number of stage 2 593*4882a593Smuzhiyun * @st1_num_exp: exponent number of stage 1 594*4882a593Smuzhiyun * @pf_init_mode: prefilter init mode 595*4882a593Smuzhiyun * @rs_init_mode: resample filter init mode 596*4882a593Smuzhiyun * @ctx_streams: stream flag of ctx 597*4882a593Smuzhiyun * @rs_ratio: resampler ratio 598*4882a593Smuzhiyun * @st1_coeff: pointer of stage 1 coeff 599*4882a593Smuzhiyun * @st2_coeff: pointer of stage 2 coeff 600*4882a593Smuzhiyun * @in_filled_sample: input filled sample 601*4882a593Smuzhiyun * @out_missed_sample: sample missed in output 602*4882a593Smuzhiyun * @st1_addexp: exponent added for stage1 603*4882a593Smuzhiyun * @st2_addexp: exponent added for stage2 604*4882a593Smuzhiyun */ 605*4882a593Smuzhiyun struct fsl_easrc_ctx_priv { 606*4882a593Smuzhiyun struct fsl_easrc_io_params in_params; 607*4882a593Smuzhiyun struct fsl_easrc_io_params out_params; 608*4882a593Smuzhiyun unsigned int st1_num_taps; 609*4882a593Smuzhiyun unsigned int st2_num_taps; 610*4882a593Smuzhiyun unsigned int st1_num_exp; 611*4882a593Smuzhiyun unsigned int pf_init_mode; 612*4882a593Smuzhiyun unsigned int rs_init_mode; 613*4882a593Smuzhiyun unsigned int ctx_streams; 614*4882a593Smuzhiyun u64 rs_ratio; 615*4882a593Smuzhiyun u64 *st1_coeff; 616*4882a593Smuzhiyun u64 *st2_coeff; 617*4882a593Smuzhiyun int in_filled_sample; 618*4882a593Smuzhiyun int out_missed_sample; 619*4882a593Smuzhiyun int st1_addexp; 620*4882a593Smuzhiyun int st2_addexp; 621*4882a593Smuzhiyun }; 622*4882a593Smuzhiyun 623*4882a593Smuzhiyun /** 624*4882a593Smuzhiyun * fsl_easrc_priv: EASRC private data 625*4882a593Smuzhiyun * 626*4882a593Smuzhiyun * @slot: slot setting 627*4882a593Smuzhiyun * @firmware_hdr: the header of firmware 628*4882a593Smuzhiyun * @interp: pointer to interpolation filter coeff 629*4882a593Smuzhiyun * @prefil: pointer to prefilter coeff 630*4882a593Smuzhiyun * @fw: firmware of coeff table 631*4882a593Smuzhiyun * @fw_name: firmware name 632*4882a593Smuzhiyun * @rs_num_taps: resample filter taps, 32, 64, or 128 633*4882a593Smuzhiyun * @bps_iec958: bits per sample of iec958 634*4882a593Smuzhiyun * @rs_coeff: resampler coefficient 635*4882a593Smuzhiyun * @const_coeff: one tap prefilter coefficient 636*4882a593Smuzhiyun * @firmware_loaded: firmware is loaded 637*4882a593Smuzhiyun */ 638*4882a593Smuzhiyun struct fsl_easrc_priv { 639*4882a593Smuzhiyun struct fsl_easrc_slot slot[EASRC_CTX_MAX_NUM][2]; 640*4882a593Smuzhiyun struct asrc_firmware_hdr *firmware_hdr; 641*4882a593Smuzhiyun struct interp_params *interp; 642*4882a593Smuzhiyun struct prefil_params *prefil; 643*4882a593Smuzhiyun const struct firmware *fw; 644*4882a593Smuzhiyun const char *fw_name; 645*4882a593Smuzhiyun unsigned int rs_num_taps; 646*4882a593Smuzhiyun unsigned int bps_iec958[EASRC_CTX_MAX_NUM]; 647*4882a593Smuzhiyun u64 *rs_coeff; 648*4882a593Smuzhiyun u64 const_coeff; 649*4882a593Smuzhiyun int firmware_loaded; 650*4882a593Smuzhiyun }; 651*4882a593Smuzhiyun #endif /* _FSL_EASRC_H */ 652