1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Rockchip VAD driver 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2018 Fuzhou Rockchip Electronics Co., Ltd 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #ifndef _ROCKCHIP_VAD_H 10*4882a593Smuzhiyun #define _ROCKCHIP_VAD_H 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #define VAD_CTRL 0x00 13*4882a593Smuzhiyun #define VAD_DET_CHNL_SHIFT 29 14*4882a593Smuzhiyun #define VAD_DET_CHNL_MASK GENMASK(31, 29) 15*4882a593Smuzhiyun #define VAD_DET_CHNL(x) ((x) << VAD_DET_CHNL_SHIFT) 16*4882a593Smuzhiyun #define AUDIO_24BIT_SAT_SHIFT 28 17*4882a593Smuzhiyun #define AUDIO_24BIT_SAT_MASK BIT(28) 18*4882a593Smuzhiyun #define AUDIO_H16B 0 19*4882a593Smuzhiyun #define AUDIO_SAT_24TO16 BIT(28) 20*4882a593Smuzhiyun #define AUDIO_24BIT_ALIGN_MODE_SHIFT 27 21*4882a593Smuzhiyun #define AUDIO_24BIT_ALIGN_MODE_MASK BIT(27) 22*4882a593Smuzhiyun #define AUDIO_24BIT_ALIGN_8_31B 0 23*4882a593Smuzhiyun #define AUDIO_24BIT_ALIGN_0_23B BIT(27) 24*4882a593Smuzhiyun #define AUDIO_CHNL_BW_SHIFT 26 25*4882a593Smuzhiyun #define AUDIO_CHNL_BW_MASK BIT(26) 26*4882a593Smuzhiyun #define AUDIO_CHNL_16B 0 27*4882a593Smuzhiyun #define AUDIO_CHNL_24B BIT(26) 28*4882a593Smuzhiyun #define AUDIO_CHNL_NUM_SHIFT 23 29*4882a593Smuzhiyun #define AUDIO_CHNL_NUM_MASK GENMASK(25, 23) 30*4882a593Smuzhiyun #define AUDIO_CHNL_NUM(x) ((x - 1) << AUDIO_CHNL_NUM_SHIFT) 31*4882a593Smuzhiyun #define CFG_ACODE_AFTER_DET_EN_SHIFT 22 32*4882a593Smuzhiyun #define CFG_ACODE_AFTER_DET_EN_MASK BIT(22) 33*4882a593Smuzhiyun #define CFG_ACODE_AFTER_DET_EN BIT(22) 34*4882a593Smuzhiyun #define VAD_MODE_SHIFT 20 35*4882a593Smuzhiyun #define VAD_MODE_MASK GENMASK(21, 20) 36*4882a593Smuzhiyun #define STORE_DATA_VAD_DET_ONLY 0 37*4882a593Smuzhiyun #define STORE_DATA_ALL (1 << VAD_MODE_SHIFT) 38*4882a593Smuzhiyun #define NO_STORE_DATA (2 << VAD_MODE_SHIFT) 39*4882a593Smuzhiyun #define ACODE_CFG_REG_NUM_SHIFT 15 40*4882a593Smuzhiyun #define ACODE_CFG_REG_NUM_MASK GENMASK(19, 15) 41*4882a593Smuzhiyun #define ACODE_CFG_REG_NUM(x) ((x - 1) << ACODE_CFG_REG_NUM_SHIFT) 42*4882a593Smuzhiyun #define SRC_ADDR_MODE_SHIFT 14 43*4882a593Smuzhiyun #define SRC_ADDR_MODE_MASK BIT(14) 44*4882a593Smuzhiyun #define SRC_ADDR_MODE_INC 0 45*4882a593Smuzhiyun #define SRC_ADDR_MODE_FIXED BIT(14) 46*4882a593Smuzhiyun #define INCR_BURST_LEN_SHIFT 10 47*4882a593Smuzhiyun #define INCR_BURST_LEN_MASK GENMASK(13, 10) 48*4882a593Smuzhiyun #define INCR_BURST_LEN(x) ((x - 1) << INCR_BURST_LEN_SHIFT) 49*4882a593Smuzhiyun #define SRC_BURST_NUM_SHIFT 7 50*4882a593Smuzhiyun #define SRC_BURST_NUM_MASK GENMASK(9, 7) 51*4882a593Smuzhiyun #define SRC_BURST_NUM(x) ((x - 1) << SRC_BURST_NUM_SHIFT) 52*4882a593Smuzhiyun #define SRC_BURST_SHIFT 4 53*4882a593Smuzhiyun #define SRC_BURST_MASK GENMASK(6, 4) 54*4882a593Smuzhiyun #define SRC_BURST_SIGNLE 0 55*4882a593Smuzhiyun #define SRC_BURST_INCR (1 << SRC_BURST_SHIFT) 56*4882a593Smuzhiyun #define SRC_BURST_INCR4 (3 << SRC_BURST_SHIFT) 57*4882a593Smuzhiyun #define SRC_BURST_INCR8 (5 << SRC_BURST_SHIFT) 58*4882a593Smuzhiyun #define SRC_BURST_INCR16 (7 << SRC_BURST_SHIFT) 59*4882a593Smuzhiyun #define AUDIO_SRC_SEL_SHIFT 1 60*4882a593Smuzhiyun #define AUDIO_SRC_SEL_MASK GENMASK(3, 1) 61*4882a593Smuzhiyun #define AUDIO_SRC_SEL_I2S0 0 62*4882a593Smuzhiyun #define AUDIO_SRC_SEL_I2S1 (1 << AUDIO_SRC_SEL_MASK) 63*4882a593Smuzhiyun #define AUDIO_SRC_SEL_I2S2 (2 << AUDIO_SRC_SEL_MASK) 64*4882a593Smuzhiyun #define AUDIO_SRC_SEL_I2S3 (3 << AUDIO_SRC_SEL_MASK) 65*4882a593Smuzhiyun #define AUDIO_SRC_SEL_PDM (4 << AUDIO_SRC_SEL_MASK) 66*4882a593Smuzhiyun #define VAD_EN_SHIFT 0 67*4882a593Smuzhiyun #define VAD_EN_MASK BIT(0) 68*4882a593Smuzhiyun #define VAD_EN BIT(0) 69*4882a593Smuzhiyun #define VAD_DISABLE 0 70*4882a593Smuzhiyun #define VAD_IS_ADDR 4 71*4882a593Smuzhiyun #define VAD_ID_ADDR 8 72*4882a593Smuzhiyun #define VAD_OD_ADDR0 0x0c 73*4882a593Smuzhiyun #define VAD_OD_ADDR1 0x10 74*4882a593Smuzhiyun #define VAD_OD_ADDR2 0x14 75*4882a593Smuzhiyun #define VAD_OD_ADDR3 0x18 76*4882a593Smuzhiyun #define VAD_OD_ADDR4 0x1c 77*4882a593Smuzhiyun #define VAD_OD_ADDR5 0x20 78*4882a593Smuzhiyun #define VAD_OD_ADDR6 0x24 79*4882a593Smuzhiyun #define VAD_OD_ADDR7 0x28 80*4882a593Smuzhiyun #define VAD_D_DATA0 0x2c 81*4882a593Smuzhiyun #define VAD_D_DATA1 0x30 82*4882a593Smuzhiyun #define VAD_D_DATA2 0x34 83*4882a593Smuzhiyun #define VAD_D_DATA3 0x38 84*4882a593Smuzhiyun #define VAD_D_DATA4 0x3c 85*4882a593Smuzhiyun #define VAD_D_DATA5 0x40 86*4882a593Smuzhiyun #define VAD_D_DATA6 0x44 87*4882a593Smuzhiyun #define VAD_D_DATA7 0x48 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun #define VAD_TIMEOUT 0x4c 90*4882a593Smuzhiyun #define WORK_TIMEOUT_EN_MASK BIT(31) 91*4882a593Smuzhiyun #define WORK_TIMEOUT_EN BIT(31) 92*4882a593Smuzhiyun #define WORK_TIMEOUT_DISABLE 0 93*4882a593Smuzhiyun #define IDLE_TIMEOUT_EN_MASK BIT(30) 94*4882a593Smuzhiyun #define IDLE_TIMEOUT_EN BIT(30) 95*4882a593Smuzhiyun #define IDLE_TIMEOUT_DISABLE 0 96*4882a593Smuzhiyun #define WORK_TIMEOUT_THD_SHIFT 20 97*4882a593Smuzhiyun #define WORK_TIMEOUT_THD_MASK GENMASK(29, 20) 98*4882a593Smuzhiyun #define WORK_TIMEOUT_THD(x) ((x) << WORK_TIMEOUT_THD_SHIFT) 99*4882a593Smuzhiyun #define IDLE_TIMEOUT_THD_SHIFT 0 100*4882a593Smuzhiyun #define IDLE_TIMEOUT_THD_MASK GENMASK(19, 0) 101*4882a593Smuzhiyun #define IDLE_TIMEOUT_THD(x) ((x) << IDLE_TIMEOUT_THD_SHIFT) 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun #define VAD_RAM_BEGIN_ADDR 0x50 104*4882a593Smuzhiyun #define VAD_RAM_END_ADDR 0x54 105*4882a593Smuzhiyun #define VAD_RAM_CUR_ADDR 0x58 106*4882a593Smuzhiyun #define VAD_DET_CON0 0x5c 107*4882a593Smuzhiyun #define VAD_CON_THD_SHIFT 16 108*4882a593Smuzhiyun #define VAD_CON_THD_MASK GENMASK(23, 16) 109*4882a593Smuzhiyun #define VAD_CON_THD(x) ((x) << VAD_CON_THD_SHIFT) 110*4882a593Smuzhiyun #define NOISE_LEVEL_SHIFT 12 111*4882a593Smuzhiyun #define NOISE_LEVEL_MASK GENMASK(14, 12) 112*4882a593Smuzhiyun #define NOISE_LEVEL(x) ((x) << NOISE_LEVEL_SHIFT) 113*4882a593Smuzhiyun #define GAIN_SHIFT 0 114*4882a593Smuzhiyun #define GAIN_MASK GENMASK(9, 0) 115*4882a593Smuzhiyun #define GAIN(x) (x) 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun #define VAD_DET_CON1 0x60 118*4882a593Smuzhiyun #define MIN_NOISE_FIND_MODE_SHIFT 30 119*4882a593Smuzhiyun #define MIN_NOISE_FIN_MODE_MASK BIT(30) 120*4882a593Smuzhiyun #define MIN_NOISE_FIND_MODE0 0 121*4882a593Smuzhiyun #define MIN_NOISE_FIND_MODE1 BIT(30) 122*4882a593Smuzhiyun #define NOISE_CLEAN_MODE_SHIFT 29 123*4882a593Smuzhiyun #define NOISE_CLEAN_MODE_MASK BIT(29) 124*4882a593Smuzhiyun #define NOISE_CLEAN_MODE0 0 125*4882a593Smuzhiyun #define NOISE_CLEAN_MODE1 BIT(29) 126*4882a593Smuzhiyun #define NOISE_CLK_FORCE_EN_MASK BIT(28) 127*4882a593Smuzhiyun #define NOISE_CLK_AUTO_GATING 0 128*4882a593Smuzhiyun #define NOISE_CLK_FORCE_EN BIT(28) 129*4882a593Smuzhiyun #define NOISE_SAMPLE_NUM_SHIFT 16 130*4882a593Smuzhiyun #define NOISE_SAMPLE_NUM_MASK GENMASK(25, 16) 131*4882a593Smuzhiyun #define NOISE_SAMPLE_NUM ((x) << NOISE_SAMPLE_NUM_SHIFT) 132*4882a593Smuzhiyun #define SOUND_THD_MASK GENMASK(15, 0) 133*4882a593Smuzhiyun #define SOUND_THD(x) (x) 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun #define VAD_DET_CON2 0x64 136*4882a593Smuzhiyun #define IIR_B0_SHIFT 16 137*4882a593Smuzhiyun #define IIR_B0_MASK GENMASK(31, 16) 138*4882a593Smuzhiyun #define IIR_B0(x) ((x) << IIR_B0_SHIFT) 139*4882a593Smuzhiyun #define NOISE_ALPHA_SHIFT 8 140*4882a593Smuzhiyun #define NOISE_ALPHA_MASK GENMASK(15, 8) 141*4882a593Smuzhiyun #define NOISE_ALPHA(x) ((x) << NOISE_ALPHA_SHIFT) 142*4882a593Smuzhiyun #define NOISE_FRM_NUM_MASK GENMASK(6, 0) 143*4882a593Smuzhiyun #define NOISE_FRM_NUM(x) (x) 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun #define VAD_DET_CON3 0x68 146*4882a593Smuzhiyun #define IIR_B2_MASK GENMASK(31, 16) 147*4882a593Smuzhiyun #define IIR_B2(x) ((x) << 16) 148*4882a593Smuzhiyun #define IIR_B1_MASK GENMASK(15, 0) 149*4882a593Smuzhiyun #define IIR_B1(x) (x) 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun #define VAD_DET_CON4 0x6c 152*4882a593Smuzhiyun #define IIR_A2_MASK GENMASK(31, 16) 153*4882a593Smuzhiyun #define IIR_A2(x) ((x) << 16) 154*4882a593Smuzhiyun #define IIR_A1_MASK GENMASK(15, 0) 155*4882a593Smuzhiyun #define IIR_A1(x) (x) 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun #define VAD_DET_CON5 0x70 158*4882a593Smuzhiyun #define IIR_RESULT_SHIFT 16 159*4882a593Smuzhiyun #define IIR_RESULT_MASK GENMASK(31, 16) 160*4882a593Smuzhiyun #define NOISE_ABS_MASK GENMASK(15, 0) 161*4882a593Smuzhiyun #define NOISE_ABS(x) (x) 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun #define VAD_INT 0x74 164*4882a593Smuzhiyun #define VAD_DATA_TRANS_INT_FLAG_MASK BIT(11) 165*4882a593Smuzhiyun #define VAD_DATA_TRANS_INT_EN_MASK BIT(10) 166*4882a593Smuzhiyun #define VAD_DATA_TRANS_INT_EN BIT(10) 167*4882a593Smuzhiyun #define VAD_IDLE_MASK BIT(9) 168*4882a593Smuzhiyun #define RAM_LOOP_FLGA_MASK BIT(8) 169*4882a593Smuzhiyun #define WORK_TIMEOUT_FLAG_MASK BIT(7) 170*4882a593Smuzhiyun #define IDLE_TIMEOUT_FLAG_MASK BIT(6) 171*4882a593Smuzhiyun #define ERR_INT_FLAG_MASK BIT(5) 172*4882a593Smuzhiyun #define VAD_DET_INT_FLAG_MASK BIT(4) 173*4882a593Smuzhiyun #define WORK_TIMEOUT_INT_EN_MASK BIT(3) 174*4882a593Smuzhiyun #define WORK_TIMEOUT_INT_EN BIT(3) 175*4882a593Smuzhiyun #define IDLE_TIMEOUT_INT_EN_MASK BIT(2) 176*4882a593Smuzhiyun #define IDLE_TIMEOUT_INT_EN BIT(2) 177*4882a593Smuzhiyun #define ERR_INT_EN_MASK BIT(1) 178*4882a593Smuzhiyun #define ERR_INT_EN BIT(1) 179*4882a593Smuzhiyun #define VAD_DET_INT_EN_MASK BIT(0) 180*4882a593Smuzhiyun #define VAD_DET_INT_EN BIT(0) 181*4882a593Smuzhiyun 182*4882a593Smuzhiyun #define VAD_AUX_CONTROL 0x78 183*4882a593Smuzhiyun #define SAMPLE_CNT_EN_MASK BIT(29) 184*4882a593Smuzhiyun #define SAMPLE_CNT_EN BIT(29) 185*4882a593Smuzhiyun #define SAMPLE_CNT_DIS 0 186*4882a593Smuzhiyun #define INT_TRIG_CTRL_EN_MASK BIT(28) 187*4882a593Smuzhiyun #define INT_TRIG_CTRL_EN BIT(28) 188*4882a593Smuzhiyun #define INT_TRIG_CTRL_DIS 0 189*4882a593Smuzhiyun #define INT_TRIG_VALID_THD_MASK GENMASK(27, 16) 190*4882a593Smuzhiyun #define INT_TRIG_VALID_THD(x) (((x) - 1) << 16) 191*4882a593Smuzhiyun #define DATA_TRANS_KBYTE_THD_MASK GENMASK(11, 4) 192*4882a593Smuzhiyun #define DATA_TRANS_KBYTE_THD(x) (((x) - 1) << 4) 193*4882a593Smuzhiyun #define DATA_TRANS_TRIG_INT_EN_MASK BIT(2) 194*4882a593Smuzhiyun #define DATA_TRANS_TRIG_INT_EN BIT(2) 195*4882a593Smuzhiyun #define DATA_TRANS_TRIG_INT_DIS 0 196*4882a593Smuzhiyun #define RAM_ITF_EN_MASK BIT(1) 197*4882a593Smuzhiyun #define RAM_ITF_EN 0 198*4882a593Smuzhiyun #define RAM_ITF_DIS BIT(1) 199*4882a593Smuzhiyun #define BUS_WRITE_EN_MASK BIT(0) 200*4882a593Smuzhiyun #define BUS_WRITE_EN BIT(0) 201*4882a593Smuzhiyun #define BUS_WRITE_DIS 0 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun #define VAD_SAMPLE_CNT 0x7c 204*4882a593Smuzhiyun #define VAD_NOISE_DATA 0x100 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun /* RK1808 SOC */ 207*4882a593Smuzhiyun #define RK1808_I2S0 0xff7e0800 208*4882a593Smuzhiyun #define RK1808_I2S1 0xff7f0800 209*4882a593Smuzhiyun #define RK1808_PDM 0xff800400 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun /* RK3308 SOC */ 212*4882a593Smuzhiyun #define ACODEC_BASE 0xff560000 213*4882a593Smuzhiyun #define ACODEC_ADC_ANA_CON0 0X340 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun #define RK3308_I2S_8CH_0 0xff300800 216*4882a593Smuzhiyun #define RK3308_I2S_8CH_1 0xff310800 217*4882a593Smuzhiyun #define RK3308_I2S_8CH_2 0xff320800 218*4882a593Smuzhiyun #define RK3308_I2S_8CH_3 0xff330800 219*4882a593Smuzhiyun #define RK3308_PDM_8CH 0xff380400 220*4882a593Smuzhiyun 221*4882a593Smuzhiyun /* RK3568 SOC */ 222*4882a593Smuzhiyun #define RK3568_I2S_8CH_1 0xfe410800 223*4882a593Smuzhiyun #define RK3568_I2S_2CH_2 0xfe420800 224*4882a593Smuzhiyun #define RK3568_I2S_2CH_3 0xfe430800 225*4882a593Smuzhiyun #define RK3568_PDM 0xfe440400 226*4882a593Smuzhiyun 227*4882a593Smuzhiyun /* RK3588 SOC */ 228*4882a593Smuzhiyun #define RK3588_I2S1_8CH 0xfe480800 229*4882a593Smuzhiyun #define RK3588_PDM0 0xfe4b0400 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun #endif 232