/* * rk3308_codec.h -- RK3308 ALSA Soc Audio Driver * * Copyright (c) 2018, Fuzhou Rockchip Electronics Co., Ltd All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #ifndef __RK3308_CODEC_H__ #define __RK3308_CODEC_H__ #define ACODEC_RESET_CTL 0x00 /* REG 0x00 */ /* ADC DIGITAL REGISTERS */ #define ACODEC_ADC_I2S_CTL0 0x04 /* REG 0x01 */ #define ACODEC_ADC_I2S_CTL1 0x08 /* REG 0x02 */ #define ACODEC_ADC_BIST_MODE_SEL 0x0c /* REG 0x03 */ #define ACODEC_ADC_HPF_PATH 0x10 /* REG 0x04 */ #define ACODEC_S_ADC_DIG_VOL_CON_L 0x14 /* REG 0x05 */ #define ACODEC_S_ADC_DIG_VOL_CON_R 0x18 /* REG 0x06 */ #define ACODEC_ADC_DATA_PATH 0x1c /* REG 0x07 */ /* Resevred REG 0x08 ~ 0x0f */ /* REG 0x10 ~ 0x1c are used to configure AGC of Left channel (ALC1) */ #define ACODEC_ADC_PGA_AGC_L_CTL0 0x40 /* REG 0x10 */ #define ACODEC_ADC_PGA_AGC_L_CTL1 0x44 /* REG 0x11 */ #define ACODEC_ADC_PGA_AGC_L_CTL2 0x48 /* REG 0x12 */ #define ACODEC_ADC_PGA_AGC_L_CTL3 0x4c /* REG 0x13 */ #define ACODEC_ADC_PGA_AGC_L_CTL4 0x50 /* REG 0x14 */ #define ACODEC_ADC_PGA_AGC_L_LO_MAX 0x54 /* REG 0x15 */ #define ACODEC_ADC_PGA_AGC_L_HI_MAX 0x58 /* REG 0x16 */ #define ACODEC_ADC_PGA_AGC_L_LO_MIN 0x5c /* REG 0x17 */ #define ACODEC_ADC_PGA_AGC_L_HI_MIN 0x60 /* REG 0x18 */ #define ACODEC_ADC_PGA_AGC_L_CTL5 0x64 /* REG 0x19 */ /* Resevred REG 0x1a */ #define ACODEC_S_ADC_PEAK_DET_VALUE_DEC_RATE_L 0x6c /* REG 0x1b */ #define ACODEC_ADC_AGC_L_RO_GAIN 0x70 /* REG 0x1c */ /* REG 0x20 ~ 0x2c are used to configure AGC of Right channel (ALC2) */ #define ACODEC_ADC_PGA_AGC_R_CTL0 0x80 /* REG 0x20 */ #define ACODEC_ADC_PGA_AGC_R_CTL1 0x84 /* REG 0x21 */ #define ACODEC_ADC_PGA_AGC_R_CTL2 0x88 /* REG 0x22 */ #define ACODEC_ADC_PGA_AGC_R_CTL3 0x8c /* REG 0x23 */ #define ACODEC_ADC_PGA_AGC_R_CTL4 0x90 /* REG 0x24 */ #define ACODEC_ADC_PGA_AGC_R_LO_MAX 0x94 /* REG 0x25 */ #define ACODEC_ADC_PGA_AGC_R_HI_MAX 0x98 /* REG 0x26 */ #define ACODEC_ADC_PGA_AGC_R_LO_MIN 0x9c /* REG 0x27 */ #define ACODEC_ADC_PGA_AGC_R_HI_MIN 0xa0 /* REG 0x28 */ #define ACODEC_ADC_PGA_AGC_R_CTL5 0xa4 /* REG 0x29 */ /* Resevred REG 0x2a */ #define ACODEC_S_ADC_PEAK_DET_VALUE_DEC_RATE_R 0xac /* REG 0x2b */ #define ACODEC_ADC_AGC_R_RO_GAIN 0xb0 /* REG 0x2c */ /* DAC DIGITAL REGISTERS */ #define ACODEC_DAC_I2S_CTL0 0x04 /* REG 0x01 */ #define ACODEC_DAC_I2S_CTL1 0x08 /* REG 0x02 */ #define ACODEC_DAC_BIST_MODE_SEL 0x0c /* REG 0x03 */ #define ACODEC_DAC_DIGITAL_GAIN 0x10 /* REG 0x04 */ #define ACODEC_DAC_DATA_SEL 0x14 /* REG 0x05 */ /* Resevred REG 0x06 ~ 0x08 */ #define ACODEC_DAC_DATA_HI 0x28 /* REG 0x0a */ #define ACODEC_DAC_DATA_LO 0x2c /* REG 0x0b */ #define ACODEC_DAC_HPDET_DELAYTIME_HI 0x30 /* REG 0x0c */ #define ACODEC_DAC_HPDET_DELAYTIME_LO 0x34 /* REG 0x0d */ #define ACODEC_DAC_HPDET_STATUS 0x38 /* REG 0x0e, Read-only */ #define ACODEC_S_DAC_DATA_HI 0x24 /* REG 0x09 */ #define ACODEC_S_DAC_DATA_LO 0x28 /* REG 0x0a */ #define ACODEC_S_DAC_HPDET_DELAYTIME_HI 0x2c /* REG 0x0b */ #define ACODEC_S_DAC_HPDET_DELAYTIME_LO 0x30 /* REG 0x0c */ #define ACODEC_S_DAC_HPDET_STATUS 0x34 /* REG 0x0d, Read-only */ /* Resevred REG 0x0f */ /* ADC ANALOG REGISTERS */ #define ACODEC_ADC_ANA_MIC_CTL 0x00 /* REG 0x00 */ #define ACODEC_ADC_ANA_MIC_GAIN 0x04 /* REG 0x01 */ #define ACODEC_ADC_ANA_ALC_CTL 0x08 /* REG 0x02 */ #define ACODEC_ADC_ANA_ALC_GAIN1 0x0c /* REG 0x03 */ #define ACODEC_ADC_ANA_ALC_GAIN2 0x10 /* REG 0x04 */ #define ACODEC_ADC_ANA_CTL0 0x14 /* REG 0x05 */ #define ACODEC_ADC_ANA_CTL1 0x18 /* REG 0x06 */ #define ACODEC_ADC_ANA_CTL2 0x1c /* REG 0x07 */ #define ACODEC_ADC_ANA_CTL3 0x20 /* REG 0x08 */ #define ACODEC_S_ADC_ANA_CTL4 0x24 /* REG 0x09 */ #define ACODEC_ADC_ANA_CTL5 0x28 /* REG 0x0a */ #define ACODEC_ADC_ANA_ALC_PGA 0x2c /* REG 0x0b */ /* Resevred REG 0x0c ~ 0x0f */ /* DAC ANALOG REGISTERS */ #define ACODEC_DAC_ANA_CTL0 0x00 /* REG 0x00 */ #define ACODEC_DAC_ANA_POP_VOLT 0x04 /* REG 0x01 */ #define ACODEC_DAC_ANA_CTL1 0x08 /* REG 0x02 */ #define ACODEC_DAC_ANA_HPOUT 0x0c /* REG 0x03 */ #define ACODEC_DAC_ANA_LINEOUT 0x10 /* REG 0x04 */ #define ACODEC_DAC_ANA_L_HPOUT_GAIN 0x14 /* REG 0x05 */ #define ACODEC_DAC_ANA_R_HPOUT_GAIN 0x18 /* REG 0x06 */ #define ACODEC_DAC_ANA_DRV_HPOUT 0x1c /* REG 0x07 */ #define ACODEC_DAC_ANA_DRV_LINEOUT 0x20 /* REG 0x08 */ /* Resevred REG 0x07 ~ 0x0b */ #define ACODEC_DAC_ANA_HPMIX_CTL0 0x30 /* REG 0x0c */ #define ACODEC_DAC_ANA_HPMIX_CTL1 0x34 /* REG 0x0d */ #define ACODEC_DAC_ANA_LINEOUT_CTL0 0x38 /* REG 0x0e */ #define ACODEC_DAC_ANA_LINEOUT_CTL1 0x3c /* REG 0x0f */ /* * These registers are referenced by codec driver */ #define RK3308_GLB_CON ACODEC_RESET_CTL /* ADC DIGITAL REGISTERS */ /* * The ADC group are 0 ~ 3, that control: * * CH0: left_0(ADC1) and right_0(ADC2) * CH1: left_1(ADC3) and right_1(ADC4) * CH2: left_2(ADC5) and right_2(ADC6) * CH3: left_3(ADC7) and right_3(ADC8) */ #define RK3308_ADC_DIG_OFFSET(ch) ((ch & 0x3) * 0xc0 + 0x0) #define RK3308_ADC_DIG_CON01(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_I2S_CTL0) #define RK3308_ADC_DIG_CON02(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_I2S_CTL1) #define RK3308_ADC_DIG_CON03(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_BIST_MODE_SEL) #define RK3308_ADC_DIG_CON04(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_HPF_PATH) #define RK3308BS_ADC_DIG_CON05(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_S_ADC_DIG_VOL_CON_L) #define RK3308BS_ADC_DIG_CON06(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_S_ADC_DIG_VOL_CON_R) #define RK3308_ADC_DIG_CON07(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_DATA_PATH) /* Removed from S */ #define RK3308_ALC_L_DIG_CON00(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_L_CTL0) #define RK3308_ALC_L_DIG_CON01(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_L_CTL1) #define RK3308_ALC_L_DIG_CON02(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_L_CTL2) #define RK3308_ALC_L_DIG_CON03(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_L_CTL3) #define RK3308_ALC_L_DIG_CON04(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_L_CTL4) #define RK3308_ALC_L_DIG_CON05(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_L_LO_MAX) #define RK3308_ALC_L_DIG_CON06(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_L_HI_MAX) #define RK3308_ALC_L_DIG_CON07(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_L_LO_MIN) #define RK3308_ALC_L_DIG_CON08(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_L_HI_MIN) #define RK3308_ALC_L_DIG_CON09(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_L_CTL5) #define RK3308BS_ALC_L_DIG_CON11(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_S_ADC_PEAK_DET_VALUE_DEC_RATE_L) #define RK3308_ALC_L_DIG_CON12(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_AGC_L_RO_GAIN) #define RK3308_ALC_R_DIG_CON00(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_R_CTL0) #define RK3308_ALC_R_DIG_CON01(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_R_CTL1) #define RK3308_ALC_R_DIG_CON02(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_R_CTL2) #define RK3308_ALC_R_DIG_CON03(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_R_CTL3) #define RK3308_ALC_R_DIG_CON04(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_R_CTL4) #define RK3308_ALC_R_DIG_CON05(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_R_LO_MAX) #define RK3308_ALC_R_DIG_CON06(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_R_HI_MAX) #define RK3308_ALC_R_DIG_CON07(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_R_LO_MIN) #define RK3308_ALC_R_DIG_CON08(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_R_HI_MIN) #define RK3308_ALC_R_DIG_CON09(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_PGA_AGC_R_CTL5) #define RK3308BS_ALC_R_DIG_CON11(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_S_ADC_PEAK_DET_VALUE_DEC_RATE_R) #define RK3308_ALC_R_DIG_CON12(ch) (RK3308_ADC_DIG_OFFSET(ch) + ACODEC_ADC_AGC_R_RO_GAIN) /* DAC DIGITAL REGISTERS */ #define RK3308_DAC_DIG_OFFSET 0x300 #define RK3308_DAC_DIG_CON01 (RK3308_DAC_DIG_OFFSET + ACODEC_DAC_I2S_CTL0) #define RK3308_DAC_DIG_CON02 (RK3308_DAC_DIG_OFFSET + ACODEC_DAC_I2S_CTL1) #define RK3308_DAC_DIG_CON03 (RK3308_DAC_DIG_OFFSET + ACODEC_DAC_BIST_MODE_SEL) #define RK3308_DAC_DIG_CON04 (RK3308_DAC_DIG_OFFSET + ACODEC_DAC_DIGITAL_GAIN) #define RK3308BS_DAC_DIG_CON04 (RK3308_DAC_DIG_OFFSET + ACODEC_DAC_DIGITAL_GAIN) #define RK3308_DAC_DIG_CON05 (RK3308_DAC_DIG_OFFSET + ACODEC_DAC_DATA_SEL) #define RK3308BS_DAC_DIG_CON05 (RK3308_DAC_DIG_OFFSET + ACODEC_DAC_DATA_SEL) #define RK3308_DAC_DIG_CON10 (RK3308_DAC_DIG_OFFSET + ACODEC_DAC_DATA_HI) #define RK3308_DAC_DIG_CON11 (RK3308_DAC_DIG_OFFSET + ACODEC_DAC_DATA_LO) #define RK3308_DAC_DIG_CON12 (RK3308_DAC_DIG_OFFSET + ACODEC_DAC_HPDET_DELAYTIME_HI) #define RK3308_DAC_DIG_CON13 (RK3308_DAC_DIG_OFFSET + ACODEC_DAC_HPDET_DELAYTIME_LO) #define RK3308_DAC_DIG_CON14 (RK3308_DAC_DIG_OFFSET + ACODEC_DAC_HPDET_STATUS) #define RK3308BS_DAC_DIG_CON09 (RK3308_DAC_DIG_OFFSET + ACODEC_S_DAC_DATA_HI) #define RK3308BS_DAC_DIG_CON10 (RK3308_DAC_DIG_OFFSET + ACODEC_S_DAC_DATA_LO) #define RK3308BS_DAC_DIG_CON11 (RK3308_DAC_DIG_OFFSET + ACODEC_S_DAC_DELAY_TIME_DET_HI) #define RK3308BS_DAC_DIG_CON12 (RK3308_DAC_DIG_OFFSET + ACODEC_S_DAC_DELAY_TIME_DET_LO) #define RK3308BS_DAC_DIG_CON13 (RK3308_DAC_DIG_OFFSET + ACODEC_S_DAC_HPDET_STATUS) #define RK3308_CODEC_HEADPHONE_CON RK3308_DAC_DIG_CON14 #define RK3308BS_CODEC_HEADPHONE_CON RK3308BS_DAC_DIG_CON13 /* ADC ANALOG REGISTERS */ /* * The ADC group are 0 ~ 3, that control: * * CH0: left_0(ADC1) and right_0(ADC2) * CH1: left_1(ADC3) and right_1(ADC4) * CH2: left_2(ADC5) and right_2(ADC6) * CH3: left_3(ADC7) and right_3(ADC8) */ #define RK3308_ADC_ANA_OFFSET(ch) (((ch) & 0x3) * 0x40 + 0x340) #define RK3308_ADC_ANA_CON00(ch) (RK3308_ADC_ANA_OFFSET(ch) + ACODEC_ADC_ANA_MIC_CTL) #define RK3308_ADC_ANA_CON01(ch) (RK3308_ADC_ANA_OFFSET(ch) + ACODEC_ADC_ANA_MIC_GAIN) #define RK3308_ADC_ANA_CON02(ch) (RK3308_ADC_ANA_OFFSET(ch) + ACODEC_ADC_ANA_ALC_CTL) #define RK3308_ADC_ANA_CON03(ch) (RK3308_ADC_ANA_OFFSET(ch) + ACODEC_ADC_ANA_ALC_GAIN1) #define RK3308_ADC_ANA_CON04(ch) (RK3308_ADC_ANA_OFFSET(ch) + ACODEC_ADC_ANA_ALC_GAIN2) #define RK3308_ADC_ANA_CON05(ch) (RK3308_ADC_ANA_OFFSET(ch) + ACODEC_ADC_ANA_CTL0) #define RK3308_ADC_ANA_CON06(ch) (RK3308_ADC_ANA_OFFSET(ch) + ACODEC_ADC_ANA_CTL1) #define RK3308_ADC_ANA_CON07(ch) (RK3308_ADC_ANA_OFFSET(ch) + ACODEC_ADC_ANA_CTL2) #define RK3308_ADC_ANA_CON08(ch) (RK3308_ADC_ANA_OFFSET(ch) + ACODEC_ADC_ANA_CTL3) #define RK3308BS_ADC_ANA_CON09(ch) (RK3308_ADC_ANA_OFFSET(ch) + ACODEC_S_ADC_ANA_CTL4) #define RK3308_ADC_ANA_CON10(ch) (RK3308_ADC_ANA_OFFSET(ch) + ACODEC_ADC_ANA_CTL5) #define RK3308_ADC_ANA_CON11(ch) (RK3308_ADC_ANA_OFFSET(ch) + ACODEC_ADC_ANA_ALC_PGA) /* DAC ANALOG REGISTERS */ #define RK3308_DAC_ANA_OFFSET 0x440 #define RK3308_DAC_ANA_CON00 (RK3308_DAC_ANA_OFFSET + ACODEC_DAC_ANA_CTL0) #define RK3308_DAC_ANA_CON01 (RK3308_DAC_ANA_OFFSET + ACODEC_DAC_ANA_POP_VOLT) #define RK3308_DAC_ANA_CON02 (RK3308_DAC_ANA_OFFSET + ACODEC_DAC_ANA_CTL1) #define RK3308_DAC_ANA_CON03 (RK3308_DAC_ANA_OFFSET + ACODEC_DAC_ANA_HPOUT) #define RK3308_DAC_ANA_CON04 (RK3308_DAC_ANA_OFFSET + ACODEC_DAC_ANA_LINEOUT) #define RK3308_DAC_ANA_CON05 (RK3308_DAC_ANA_OFFSET + ACODEC_DAC_ANA_L_HPOUT_GAIN) #define RK3308_DAC_ANA_CON06 (RK3308_DAC_ANA_OFFSET + ACODEC_DAC_ANA_R_HPOUT_GAIN) #define RK3308_DAC_ANA_CON07 (RK3308_DAC_ANA_OFFSET + ACODEC_DAC_ANA_DRV_HPOUT) #define RK3308_DAC_ANA_CON08 (RK3308_DAC_ANA_OFFSET + ACODEC_DAC_ANA_DRV_LINEOUT) #define RK3308_DAC_ANA_CON12 (RK3308_DAC_ANA_OFFSET + ACODEC_DAC_ANA_HPMIX_CTL0) #define RK3308_DAC_ANA_CON13 (RK3308_DAC_ANA_OFFSET + ACODEC_DAC_ANA_HPMIX_CTL1) #define RK3308_DAC_ANA_CON14 (RK3308_DAC_ANA_OFFSET + ACODEC_DAC_ANA_LINEOUT_CTL0) #define RK3308_DAC_ANA_CON15 (RK3308_DAC_ANA_OFFSET + ACODEC_DAC_ANA_LINEOUT_CTL1) /* * These are the bits for registers */ /* RK3308_GLB_CON - REG: 0x0000 */ #define RK3308_ADC_BIST_WORK (1 << 7) #define RK3308_ADC_BIST_RESET (0 << 7) #define RK3308_DAC_BIST_WORK (1 << 6) #define RK3308_DAC_BIST_RESET (0 << 6) #define RK3308_ADC_MCLK_MSK (1 << 5) #define RK3308_ADC_MCLK_DIS (1 << 5) #define RK3308_ADC_MCLK_EN (0 << 5) #define RK3308_DAC_MCLK_MSK (1 << 4) #define RK3308_DAC_MCLK_DIS (1 << 4) #define RK3308_DAC_MCLK_EN (0 << 4) #define RK3308_CODEC_RST_MSK (0x7 << 0) #define RK3308_ADC_DIG_WORK (1 << 2) #define RK3308_ADC_DIG_RESET (0 << 2) #define RK3308_DAC_DIG_WORK (1 << 1) #define RK3308_DAC_DIG_RESET (0 << 1) #define RK3308_SYS_WORK (1 << 0) #define RK3308_SYS_RESET (0 << 0) /* RK3308_ADC_DIG_CON01 - REG: 0x0004 */ #define RK3308_ADC_I2S_LRC_POL_MSK (1 << 0) #define RK3308_ADC_I2S_LRC_POL_REVERSAL (1 << 0) #define RK3308_ADC_I2S_LRC_POL_NORMAL (0 << 0) #define RK3308_ADC_I2S_VALID_LEN_SFT 5 #define RK3308_ADC_I2S_VALID_LEN_MSK (0x3 << RK3308_ADC_I2S_VALID_LEN_SFT) #define RK3308_ADC_I2S_VALID_LEN_32BITS (0x3 << RK3308_ADC_I2S_VALID_LEN_SFT) #define RK3308_ADC_I2S_VALID_LEN_24BITS (0x2 << RK3308_ADC_I2S_VALID_LEN_SFT) #define RK3308_ADC_I2S_VALID_LEN_20BITS (0x1 << RK3308_ADC_I2S_VALID_LEN_SFT) #define RK3308_ADC_I2S_VALID_LEN_16BITS (0x0 << RK3308_ADC_I2S_VALID_LEN_SFT) #define RK3308_ADC_I2S_MODE_SFT 3 #define RK3308_ADC_I2S_MODE_MSK (0x3 << RK3308_ADC_I2S_MODE_SFT) #define RK3308_ADC_I2S_MODE_PCM (0x3 << RK3308_ADC_I2S_MODE_SFT) #define RK3308_ADC_I2S_MODE_I2S (0x2 << RK3308_ADC_I2S_MODE_SFT) #define RK3308_ADC_I2S_MODE_LJ (0x1 << RK3308_ADC_I2S_MODE_SFT) #define RK3308_ADC_I2S_MODE_RJ (0x0 << RK3308_ADC_I2S_MODE_SFT) #define RK3308_ADC_I2S_LR_MSK (1 << 1) #define RK3308_ADC_I2S_LR_SWAP (1 << 1) #define RK3308_ADC_I2S_LR_NORMAL (0 << 1) #define RK3308_ADC_I2S_TYPE_MSK (1 << 0) #define RK3308_ADC_I2S_MONO (1 << 0) #define RK3308_ADC_I2S_STEREO (0 << 0) #define RK3308BS_ADC_I2S_SWAP_SFT 0 #define RK3308BS_ADC_I2S_LR (0 << RK3308BS_ADC_I2S_SWAP_SFT) #define RK3308BS_ADC_I2S_LL (1 << RK3308BS_ADC_I2S_SWAP_SFT) #define RK3308BS_ADC_I2S_RR (2 << RK3308BS_ADC_I2S_SWAP_SFT) #define RK3308BS_ADC_I2S_RL (3 << RK3308BS_ADC_I2S_SWAP_SFT) /* RK3308_ADC_DIG_CON02 - REG: 0x0008 */ #define RK3308_ADC_IO_MODE_MSK (1 << 5) #define RK3308_ADC_IO_MODE_MASTER (1 << 5) #define RK3308_ADC_IO_MODE_SLAVE (0 << 5) #define RK3308_ADC_MODE_MSK (1 << 4) #define RK3308_ADC_MODE_MASTER (1 << 4) #define RK3308_ADC_MODE_SLAVE (0 << 4) #define RK3308_ADC_I2S_FRAME_LEN_SFT 2 #define RK3308_ADC_I2S_FRAME_LEN_MSK (0x3 << RK3308_ADC_I2S_FRAME_LEN_SFT) #define RK3308_ADC_I2S_FRAME_32BITS (0x3 << RK3308_ADC_I2S_FRAME_LEN_SFT) #define RK3308_ADC_I2S_FRAME_24BITS (0x2 << RK3308_ADC_I2S_FRAME_LEN_SFT) #define RK3308_ADC_I2S_FRAME_20BITS (0x1 << RK3308_ADC_I2S_FRAME_LEN_SFT) #define RK3308_ADC_I2S_FRAME_16BITS (0x0 << RK3308_ADC_I2S_FRAME_LEN_SFT) #define RK3308_ADC_I2S_MSK (0x1 << 1) #define RK3308_ADC_I2S_WORK (0x1 << 1) #define RK3308_ADC_I2S_RESET (0x0 << 1) #define RK3308_ADC_I2S_BIT_CLK_POL_MSK (0x1 << 0) #define RK3308_ADC_I2S_BIT_CLK_POL_REVERSAL (0x1 << 0) #define RK3308_ADC_I2S_BIT_CLK_POL_NORMAL (0x0 << 0) /* RK3308_ADC_DIG_CON03 - REG: 0x000c */ #define RK3308_ADC_L_CH_BIST_SFT 2 #define RK3308_ADC_L_CH_BIST_MSK (0x3 << RK3308_ADC_L_CH_BIST_SFT) #define RK3308_ADC_L_CH_NORMAL_RIGHT (0x3 << RK3308_ADC_L_CH_BIST_SFT) /* normal mode */ #define RK3308_ADC_L_CH_BIST_CUBE (0x2 << RK3308_ADC_L_CH_BIST_SFT) #define RK3308_ADC_L_CH_BIST_SINE (0x1 << RK3308_ADC_L_CH_BIST_SFT) #define RK3308_ADC_L_CH_NORMAL_LEFT (0x0 << RK3308_ADC_L_CH_BIST_SFT) /* normal mode */ #define RK3308_ADC_R_CH_BIST_SFT 0 #define RK3308_ADC_R_CH_BIST_MSK (0x3 << RK3308_ADC_R_CH_BIST_SFT) #define RK3308_ADC_R_CH_NORMAL_LEFT (0x3 << RK3308_ADC_R_CH_BIST_SFT) /* normal mode */ #define RK3308_ADC_R_CH_BIST_CUBE (0x2 << RK3308_ADC_R_CH_BIST_SFT) #define RK3308_ADC_R_CH_BIST_SINE (0x1 << RK3308_ADC_R_CH_BIST_SFT) #define RK3308_ADC_R_CH_NORMAL_RIGHT (0x0 << RK3308_ADC_R_CH_BIST_SFT) /* normal mode */ /* RK3308_ADC_DIG_CON04 - REG: 0x0010 */ #define RK3308_ADC_HPF_PATH_SFT 2 #define RK3308_ADC_HPF_PATH_MSK (1 << RK3308_ADC_HPF_PATH_SFT) #define RK3308_ADC_HPF_PATH_DIS (1 << RK3308_ADC_HPF_PATH_SFT) #define RK3308_ADC_HPF_PATH_EN (0 << RK3308_ADC_HPF_PATH_SFT) #define RK3308_ADC_HPF_CUTOFF_SFT 0 #define RK3308_ADC_HPF_CUTOFF_MSK (0x3 << RK3308_ADC_HPF_CUTOFF_SFT) #define RK3308_ADC_HPF_CUTOFF_612HZ (0x2 << RK3308_ADC_HPF_CUTOFF_SFT) #define RK3308_ADC_HPF_CUTOFF_245HZ (0x1 << RK3308_ADC_HPF_CUTOFF_SFT) #define RK3308_ADC_HPF_CUTOFF_20HZ (0x0 << RK3308_ADC_HPF_CUTOFF_SFT) /* RK3308BS_ADC_DIG_CON05 - REG: 0x0014 */ #define RK3308_ADC_DIG_VOL_CON_L_MSK 0xff #define RK3308_ADC_DIG_VOL_CON_L(x) ((x) & RK3308_ADC_DIG_VOL_CON_L_MSK) /* RK3308BS_ADC_DIG_CON06 - REG: 0x0018 */ #define RK3308_ADC_DIG_VOL_CON_R_MSK 0xff #define RK3308_ADC_DIG_VOL_CON_R(x) ((x) & RK3308_ADC_DIG_VOL_CON_R_MSK) #define RK3308_ADC_DIG_VOL_0DB 0xc2 /* RK3308_ADC_DIG_CON07 - REG: 0x001c */ #define RK3308_ADCL_DATA_SFT 4 #define RK3308_ADCL_DATA(x) ((x) << RK3308_ADCL_DATA_SFT) #define RK3308_ADCR_DATA_SFT 2 #define RK3308_ADCR_DATA(x) ((x) << RK3308_ADCR_DATA_SFT) #define RK3308_ADCL_DATA_SEL_ADCL (0x1 << 1) #define RK3308_ADCL_DATA_SEL_NORMAL (0x0 << 1) #define RK3308_ADCR_DATA_SEL_ADCR (0x1 << 0) #define RK3308_ADCR_DATA_SEL_NORMAL (0x0 << 0) /* * RK3308_ALC_L_DIG_CON00 - REG: 0x0040 + ch * 0xc0 * RK3308_ALC_R_DIG_CON00 - REG: 0x0080 + ch * 0xc0 */ #define RK3308_GAIN_ATTACK_JACK (0x1 << 6) #define RK3308_GAIN_ATTACK_NORMAL (0x0 << 6) #define RK3308_CTRL_GEN_SFT 4 #define RK3308_CTRL_GEN_MSK (0x3 << RK3308_ALC_CTRL_GEN_SFT) #define RK3308_CTRL_GEN_JACK3 (0x3 << RK3308_ALC_CTRL_GEN_SFT) #define RK3308_CTRL_GEN_JACK2 (0x2 << RK3308_ALC_CTRL_GEN_SFT) #define RK3308_CTRL_GEN_JACK1 (0x1 << RK3308_ALC_CTRL_GEN_SFT) #define RK3308_CTRL_GEN_NORMAL (0x0 << RK3308_ALC_CTRL_GEN_SFT) #define RK3308_AGC_HOLD_TIME_SFT 0 #define RK3308_AGC_HOLD_TIME_MSK (0xf << RK3308_AGC_HOLD_TIME_SFT) #define RK3308_AGC_HOLD_TIME_1S (0xa << RK3308_AGC_HOLD_TIME_SFT) #define RK3308_AGC_HOLD_TIME_512MS (0x9 << RK3308_AGC_HOLD_TIME_SFT) #define RK3308_AGC_HOLD_TIME_256MS (0x8 << RK3308_AGC_HOLD_TIME_SFT) #define RK3308_AGC_HOLD_TIME_128MS (0x7 << RK3308_AGC_HOLD_TIME_SFT) #define RK3308_AGC_HOLD_TIME_64MS (0x6 << RK3308_AGC_HOLD_TIME_SFT) #define RK3308_AGC_HOLD_TIME_32MS (0x5 << RK3308_AGC_HOLD_TIME_SFT) #define RK3308_AGC_HOLD_TIME_16MS (0x4 << RK3308_AGC_HOLD_TIME_SFT) #define RK3308_AGC_HOLD_TIME_8MS (0x3 << RK3308_AGC_HOLD_TIME_SFT) #define RK3308_AGC_HOLD_TIME_4MS (0x2 << RK3308_AGC_HOLD_TIME_SFT) #define RK3308_AGC_HOLD_TIME_2MS (0x1 << RK3308_AGC_HOLD_TIME_SFT) #define RK3308_AGC_HOLD_TIME_0MS (0x0 << RK3308_AGC_HOLD_TIME_SFT) /* * RK3308_ALC_L_DIG_CON01 - REG: 0x0044 + ch * 0xc0 * RK3308_ALC_R_DIG_CON01 - REG: 0x0084 + ch * 0xc0 */ #define RK3308_AGC_DECAY_TIME_SFT 4 /* Normal mode (reg_agc_mode = 0) */ #define RK3308_AGC_DECAY_NORMAL_MSK (0xf << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_NORMAL_512MS (0xa << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_NORMAL_256MS (0x9 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_NORMAL_128MS (0x8 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_NORMAL_64MS (0x7 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_NORMAL_32MS (0x6 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_NORMAL_16MS (0x5 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_NORMAL_8MS (0x4 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_NORMAL_4MS (0x3 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_NORMAL_2MS (0x2 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_NORMAL_1MS (0x1 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_NORMAL_0MS (0x0 << RK3308_AGC_DECAY_TIME_SFT) /* Limiter mode (reg_agc_mode = 1) */ #define RK3308_AGC_DECAY_LIMITER_MSK (0xf << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_LIMITER_128MS (0xa << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_LIMITER_64MS (0x9 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_LIMITER_32MS (0x8 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_LIMITER_16MS (0x7 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_LIMITER_8MS (0x6 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_LIMITER_4MS (0x5 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_LIMITER_2MS (0x4 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_LIMITER_1MS (0x3 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_LIMITER_500US (0x2 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_LIMITER_250US (0x1 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_DECAY_LIMITER_125US (0x0 << RK3308_AGC_DECAY_TIME_SFT) #define RK3308_AGC_ATTACK_TIME_SFT 0 /* Normal mode (reg_agc_mode = 0) */ #define RK3308_AGC_ATTACK_NORMAL_MSK (0xf << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_NORMAL_128MS (0xa << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_NORMAL_64MS (0x9 << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_NORMAL_32MS (0x8 << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_NORMAL_16MS (0x7 << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_NORMAL_8MS (0x6 << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_NORMAL_4MS (0x5 << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_NORMAL_2MS (0x4 << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_NORMAL_1MS (0x3 << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_NORMAL_500US (0x2 << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_NORMAL_250US (0x1 << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_NORMAL_125US (0x0 << RK3308_AGC_ATTACK_TIME_SFT) /* Limiter mode (reg_agc_mode = 1) */ #define RK3308_AGC_ATTACK_LIMITER_MSK (0xf << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_LIMITER_32MS (0xa << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_LIMITER_16MS (0x9 << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_LIMITER_8MS (0x8 << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_LIMITER_4MS (0x7 << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_LIMITER_2MS (0x6 << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_LIMITER_1MS (0x5 << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_LIMITER_500US (0x4 << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_LIMITER_250US (0x3 << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_LIMITER_125US (0x2 << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_LIMITER_64US (0x1 << RK3308_AGC_ATTACK_TIME_SFT) #define RK3308_AGC_ATTACK_LIMITER_32US (0x0 << RK3308_AGC_ATTACK_TIME_SFT) /* * RK3308_ALC_L_DIG_CON02 - REG: 0x0048 + ch * 0xc0 * RK3308_ALC_R_DIG_CON02 - REG: 0x0088 + ch * 0xc0 */ #define RK3308_AGC_MODE_LIMITER (0x1 << 7) #define RK3308_AGC_MODE_NORMAL (0x0 << 7) #define RK3308_AGC_ZERO_CRO_EN (0x1 << 6) #define RK3308_AGC_ZERO_CRO_DIS (0x0 << 6) #define RK3308_AGC_AMP_RECOVER_GAIN (0x1 << 5) #define RK3308_AGC_AMP_RECOVER_LVOL (0x0 << 5) #define RK3308_AGC_FAST_DEC_EN (0x1 << 4) #define RK3308_AGC_FAST_DEC_DIS (0x0 << 4) #define RK3308_AGC_NOISE_GATE_EN (0x1 << 3) #define RK3308_AGC_NOISE_GATE_DIS (0x0 << 3) #define RK3308_AGC_NOISE_GATE_THRESH_SFT 0 #define RK3308_AGC_NOISE_GATE_THRESH_MSK (0x7 << RK3308_AGC_NOISE_GATE_THRESH_SFT) #define RK3308_AGC_NOISE_GATE_THRESH_N81DB (0x7 << RK3308_AGC_NOISE_GATE_THRESH_SFT) #define RK3308_AGC_NOISE_GATE_THRESH_N75DB (0x6 << RK3308_AGC_NOISE_GATE_THRESH_SFT) #define RK3308_AGC_NOISE_GATE_THRESH_N69DB (0x5 << RK3308_AGC_NOISE_GATE_THRESH_SFT) #define RK3308_AGC_NOISE_GATE_THRESH_N63DB (0x4 << RK3308_AGC_NOISE_GATE_THRESH_SFT) #define RK3308_AGC_NOISE_GATE_THRESH_N57DB (0x3 << RK3308_AGC_NOISE_GATE_THRESH_SFT) #define RK3308_AGC_NOISE_GATE_THRESH_N51DB (0x2 << RK3308_AGC_NOISE_GATE_THRESH_SFT) #define RK3308_AGC_NOISE_GATE_THRESH_N45DB (0x1 << RK3308_AGC_NOISE_GATE_THRESH_SFT) #define RK3308_AGC_NOISE_GATE_THRESH_N39DB (0x0 << RK3308_AGC_NOISE_GATE_THRESH_SFT) /* * RK3308_ALC_L_DIG_CON03 - REG: 0x004c + ch * 0xc0 * RK3308_ALC_R_DIG_CON03 - REG: 0x008c + ch * 0xc0 */ #define RK3308_AGC_PGA_ZERO_CRO_EN (0x1 << 5) #define RK3308_AGC_PGA_ZERO_CRO_DIS (0x0 << 5) #define RK3308_AGC_PGA_GAIN_MAX 0x1f #define RK3308_AGC_PGA_GAIN_MIN 0 #define RK3308_AGC_PGA_GAIN_SFT 0 #define RK3308_AGC_PGA_GAIN_MSK (0x1f << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_28_5 (0x1f << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_27 (0x1e << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_25_5 (0x1d << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_24 (0x1c << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_22_5 (0x1b << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_21 (0x1a << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_19_5 (0x19 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_18 (0x18 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_16_5 (0x17 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_15 (0x16 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_13_5 (0x15 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_12 (0x14 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_10_5 (0x13 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_9 (0x12 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_7_5 (0x11 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_6 (0x10 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_4_5 (0x0f << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_3 (0x0e << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_PDB_1_5 (0x0d << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_0DB (0x0c << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_NDB_1_5 (0x0b << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_NDB_3 (0x0a << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_NDB_4_5 (0x09 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_NDB_6 (0x08 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_NDB_7_5 (0x07 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_NDB_9 (0x06 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_NDB_10_5 (0x05 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_NDB_12 (0x04 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_NDB_13_5 (0x03 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_NDB_15 (0x02 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_NDB_16_5 (0x01 << RK3308_AGC_PGA_GAIN_SFT) #define RK3308_AGC_PGA_GAIN_NDB_18 (0x00 << RK3308_AGC_PGA_GAIN_SFT) /* * RK3308_ALC_L_DIG_CON04 - REG: 0x0050 + ch * 0xc0 * RK3308_ALC_R_DIG_CON04 - REG: 0x0090 + ch * 0xc0 */ #define RK3308_AGC_SLOW_CLK_EN (0x1 << 3) #define RK3308_AGC_SLOW_CLK_DIS (0x0 << 3) #define RK3308_AGC_APPROX_RATE_SFT 0 #define RK3308_AGC_APPROX_RATE_MSK (0x7 << RK3308_AGC_APPROX_RATE_SFT) #define RK3308_AGC_APPROX_RATE_8K (0x7 << RK3308_AGC_APPROX_RATE_SFT) #define RK3308_AGC_APPROX_RATE_12K (0x6 << RK3308_AGC_APPROX_RATE_SFT) #define RK3308_AGC_APPROX_RATE_16K (0x5 << RK3308_AGC_APPROX_RATE_SFT) #define RK3308_AGC_APPROX_RATE_24K (0x4 << RK3308_AGC_APPROX_RATE_SFT) #define RK3308_AGC_APPROX_RATE_32K (0x3 << RK3308_AGC_APPROX_RATE_SFT) #define RK3308_AGC_APPROX_RATE_44_1K (0x2 << RK3308_AGC_APPROX_RATE_SFT) #define RK3308_AGC_APPROX_RATE_48K (0x1 << RK3308_AGC_APPROX_RATE_SFT) #define RK3308_AGC_APPROX_RATE_96K (0x0 << RK3308_AGC_APPROX_RATE_SFT) /* * RK3308_ALC_L_DIG_CON05 - REG: 0x0054 + ch * 0xc0 * RK3308_ALC_R_DIG_CON05 - REG: 0x0094 + ch * 0xc0 */ #define RK3308_AGC_LO_8BITS_AGC_MAX_MSK 0xff /* * RK3308_ALC_L_DIG_CON06 - REG: 0x0058 + ch * 0xc0 * RK3308_ALC_R_DIG_CON06 - REG: 0x0098 + ch * 0xc0 */ #define RK3308_AGC_HI_8BITS_AGC_MAX_MSK 0xff /* * RK3308_ALC_L_DIG_CON07 - REG: 0x005c + ch * 0xc0 * RK3308_ALC_R_DIG_CON07 - REG: 0x009c + ch * 0xc0 */ #define RK3308_AGC_LO_8BITS_AGC_MIN_MSK 0xff /* * RK3308_ALC_L_DIG_CON08 - REG: 0x0060 + ch * 0xc0 * RK3308_ALC_R_DIG_CON08 - REG: 0x00a0 + ch * 0xc0 */ #define RK3308_AGC_HI_8BITS_AGC_MIN_MSK 0xff /* * RK3308_ALC_L_DIG_CON09 - REG: 0x0064 + ch * 0xc0 * RK3308_ALC_R_DIG_CON09 - REG: 0x00a4 + ch * 0xc0 */ #define RK3308_AGC_FUNC_SEL_MSK (0x1 << 6) #define RK3308_AGC_FUNC_SEL_EN (0x1 << 6) #define RK3308_AGC_FUNC_SEL_DIS (0x0 << 6) #define RK3308_AGC_MAX_GAIN_PGA_MAX 0x7 #define RK3308_AGC_MAX_GAIN_PGA_MIN 0 #define RK3308_AGC_MAX_GAIN_PGA_SFT 3 #define RK3308_AGC_MAX_GAIN_PGA_MSK (0x7 << RK3308_AGC_MAX_GAIN_PGA_SFT) #define RK3308_AGC_MAX_GAIN_PGA_PDB_28_5 (0x7 << RK3308_AGC_MAX_GAIN_PGA_SFT) #define RK3308_AGC_MAX_GAIN_PGA_PDB_22_5 (0x6 << RK3308_AGC_MAX_GAIN_PGA_SFT) #define RK3308_AGC_MAX_GAIN_PGA_PDB_16_5 (0x5 << RK3308_AGC_MAX_GAIN_PGA_SFT) #define RK3308_AGC_MAX_GAIN_PGA_PDB_10_5 (0x4 << RK3308_AGC_MAX_GAIN_PGA_SFT) #define RK3308_AGC_MAX_GAIN_PGA_PDB_4_5 (0x3 << RK3308_AGC_MAX_GAIN_PGA_SFT) #define RK3308_AGC_MAX_GAIN_PGA_NDB_1_5 (0x2 << RK3308_AGC_MAX_GAIN_PGA_SFT) #define RK3308_AGC_MAX_GAIN_PGA_NDB_7_5 (0x1 << RK3308_AGC_MAX_GAIN_PGA_SFT) #define RK3308_AGC_MAX_GAIN_PGA_NDB_13_5 (0x0 << RK3308_AGC_MAX_GAIN_PGA_SFT) #define RK3308_AGC_MIN_GAIN_PGA_MAX 0x7 #define RK3308_AGC_MIN_GAIN_PGA_MIN 0 #define RK3308_AGC_MIN_GAIN_PGA_SFT 0 #define RK3308_AGC_MIN_GAIN_PGA_MSK (0x7 << RK3308_AGC_MIN_GAIN_PGA_SFT) #define RK3308_AGC_MIN_GAIN_PGA_PDB_24 (0x7 << RK3308_AGC_MIN_GAIN_PGA_SFT) #define RK3308_AGC_MIN_GAIN_PGA_PDB_18 (0x6 << RK3308_AGC_MIN_GAIN_PGA_SFT) #define RK3308_AGC_MIN_GAIN_PGA_PDB_12 (0x5 << RK3308_AGC_MIN_GAIN_PGA_SFT) #define RK3308_AGC_MIN_GAIN_PGA_PDB_6 (0x4 << RK3308_AGC_MIN_GAIN_PGA_SFT) #define RK3308_AGC_MIN_GAIN_PGA_0DB (0x3 << RK3308_AGC_MIN_GAIN_PGA_SFT) #define RK3308_AGC_MIN_GAIN_PGA_NDB_6 (0x2 << RK3308_AGC_MIN_GAIN_PGA_SFT) #define RK3308_AGC_MIN_GAIN_PGA_NDB_12 (0x1 << RK3308_AGC_MIN_GAIN_PGA_SFT) #define RK3308_AGC_MIN_GAIN_PGA_NDB_18 (0x0 << RK3308_AGC_MIN_GAIN_PGA_SFT) /* * RK3308BS_ALC_L_DIG_CON11 - REG: 0x006c + ch * 0xc0 * RK3308BS_ALC_R_DIG_CON11 - REG: 0x00ac + ch * 0xc0 */ #define ACODEC_S_ADC_PEAK_DET_VALUE_DEC_RATE(x) ((x) & 0x1f) /* * RK3308_ALC_L_DIG_CON12 - REG: 0x0070 + ch * 0xc0 * RK3308_ALC_R_DIG_CON12 - REG: 0x00b0 + ch * 0xc0 */ #define RK3308_AGC_GAIN_MSK 0x1f /* * RK3308BS_ALC_L_DIG_CON12 - REG: 0x0070 + ch * 0xc0 * RK3308BS_ALC_R_DIG_CON12 - REG: 0x00b0 + ch * 0xc0 */ /* * RK3308BS_ALC_L_DIG_CON13 - REG: 0x0074 + ch * 0xc0 * RK3308BS_ALC_R_DIG_CON13 - REG: 0x00b4 + ch * 0xc0 */ /* * RK3308BS_ALC_L_DIG_CON14 - REG: 0x0078 + ch * 0xc0 * RK3308BS_ALC_R_DIG_CON14 - REG: 0x00b8 + ch * 0xc0 */ #define RK3308BS_AGC_GAIN_MSK 0x1f /* RK3308_DAC_DIG_CON01 - REG: 0x0304 */ #define RK3308_DAC_I2S_LRC_POL_MSK (0x1 << 7) #define RK3308_DAC_I2S_LRC_POL_REVERSAL (0x1 << 7) #define RK3308_DAC_I2S_LRC_POL_NORMAL (0x0 << 7) #define RK3308_DAC_I2S_VALID_LEN_SFT 5 #define RK3308_DAC_I2S_VALID_LEN_MSK (0x3 << RK3308_DAC_I2S_VALID_LEN_SFT) #define RK3308_DAC_I2S_VALID_LEN_32BITS (0x3 << RK3308_DAC_I2S_VALID_LEN_SFT) #define RK3308_DAC_I2S_VALID_LEN_24BITS (0x2 << RK3308_DAC_I2S_VALID_LEN_SFT) #define RK3308_DAC_I2S_VALID_LEN_20BITS (0x1 << RK3308_DAC_I2S_VALID_LEN_SFT) #define RK3308_DAC_I2S_VALID_LEN_16BITS (0x0 << RK3308_DAC_I2S_VALID_LEN_SFT) #define RK3308_DAC_I2S_MODE_SFT 3 #define RK3308_DAC_I2S_MODE_MSK (0x3 << RK3308_DAC_I2S_MODE_SFT) #define RK3308_DAC_I2S_MODE_PCM (0x3 << RK3308_DAC_I2S_MODE_SFT) #define RK3308_DAC_I2S_MODE_I2S (0x2 << RK3308_DAC_I2S_MODE_SFT) #define RK3308_DAC_I2S_MODE_LJ (0x1 << RK3308_DAC_I2S_MODE_SFT) #define RK3308_DAC_I2S_MODE_RJ (0x0 << RK3308_DAC_I2S_MODE_SFT) #define RK3308_DAC_I2S_LR_MSK (0x1 << 2) #define RK3308_DAC_I2S_LR_SWAP (0x1 << 2) #define RK3308_DAC_I2S_LR_NORMAL (0x0 << 2) #define RK3308BS_DAC_I2S_BYPASS_MSK (0x1 << 1) #define RK3308BS_DAC_I2S_BYPASS_EN (0x1 << 1) #define RK3308BS_DAC_I2S_BYPASS_DIS (0x0 << 1) /* RK3308_DAC_DIG_CON02 - REG: 0x0308 */ #define RK3308BS_DAC_IO_MODE_MSK (0x1 << 7) #define RK3308BS_DAC_IO_MODE_MASTER (0x1 << 7) #define RK3308BS_DAC_IO_MODE_SLAVE (0x0 << 7) #define RK3308BS_DAC_MODE_MSK (0x1 << 6) #define RK3308BS_DAC_MODE_MASTER (0x1 << 6) #define RK3308BS_DAC_MODE_SLAVE (0x0 << 6) #define RK3308_DAC_IO_MODE_MSK (0x1 << 5) #define RK3308_DAC_IO_MODE_MASTER (0x1 << 5) #define RK3308_DAC_IO_MODE_SLAVE (0x0 << 5) #define RK3308_DAC_MODE_MSK (0x1 << 4) #define RK3308_DAC_MODE_MASTER (0x1 << 4) #define RK3308_DAC_MODE_SLAVE (0x0 << 4) #define RK3308_DAC_I2S_FRAME_LEN_SFT 2 #define RK3308_DAC_I2S_FRAME_LEN_MSK (0x3 << RK3308_DAC_I2S_FRAME_LEN_SFT) #define RK3308_DAC_I2S_FRAME_32BITS (0x3 << RK3308_DAC_I2S_FRAME_LEN_SFT) #define RK3308_DAC_I2S_FRAME_24BITS (0x2 << RK3308_DAC_I2S_FRAME_LEN_SFT) #define RK3308_DAC_I2S_FRAME_20BITS (0x1 << RK3308_DAC_I2S_FRAME_LEN_SFT) #define RK3308_DAC_I2S_FRAME_16BITS (0x0 << RK3308_DAC_I2S_FRAME_LEN_SFT) #define RK3308_DAC_I2S_MSK (0x1 << 1) #define RK3308_DAC_I2S_WORK (0x1 << 1) #define RK3308_DAC_I2S_RESET (0x0 << 1) #define RK3308_DAC_I2S_BIT_CLK_POL_MSK (0x1 << 0) #define RK3308_DAC_I2S_BIT_CLK_POL_REVERSAL (0x1 << 0) #define RK3308_DAC_I2S_BIT_CLK_POL_NORMAL (0x0 << 0) /* RK3308_DAC_DIG_CON03 - REG: 0x030C */ #define RK3308_DAC_L_CH_BIST_SFT 2 #define RK3308_DAC_L_CH_BIST_MSK (0x3 << RK3308_DAC_L_CH_BIST_SFT) #define RK3308_DAC_L_CH_BIST_LEFT (0x3 << RK3308_DAC_L_CH_BIST_SFT) /* normal mode */ #define RK3308_DAC_L_CH_BIST_CUBE (0x2 << RK3308_DAC_L_CH_BIST_SFT) #define RK3308_DAC_L_CH_BIST_SINE (0x1 << RK3308_DAC_L_CH_BIST_SFT) #define RK3308_DAC_L_CH_BIST_RIGHT (0x0 << RK3308_DAC_L_CH_BIST_SFT) /* normal mode */ #define RK3308_DAC_R_CH_BIST_SFT 0 #define RK3308_DAC_R_CH_BIST_MSK (0x3 << RK3308_DAC_R_CH_BIST_SFT) #define RK3308_DAC_R_CH_BIST_LEFT (0x3 << RK3308_DAC_R_CH_BIST_SFT) /* normal mode */ #define RK3308_DAC_R_CH_BIST_CUBE (0x2 << RK3308_DAC_R_CH_BIST_SFT) #define RK3308_DAC_R_CH_BIST_SINE (0x1 << RK3308_DAC_R_CH_BIST_SFT) #define RK3308_DAC_R_CH_BIST_RIGHT (0x0 << RK3308_DAC_R_CH_BIST_SFT) /* normal mode */ /* RK3308_DAC_DIG_CON04 - REG: 0x0310 */ #define RK3308_DAC_MODULATOR_GAIN_SFT 4 #define RK3308_DAC_MODULATOR_GAIN_MSK (0x7 << RK3308_DAC_MODULATOR_GAIN_SFT) #define RK3308_DAC_MODULATOR_GAIN_4_8DB (0x5 << RK3308_DAC_MODULATOR_GAIN_SFT) #define RK3308_DAC_MODULATOR_GAIN_4_2DB (0x4 << RK3308_DAC_MODULATOR_GAIN_SFT) #define RK3308_DAC_MODULATOR_GAIN_3_5DB (0x3 << RK3308_DAC_MODULATOR_GAIN_SFT) #define RK3308_DAC_MODULATOR_GAIN_2_8DB (0x2 << RK3308_DAC_MODULATOR_GAIN_SFT) #define RK3308_DAC_MODULATOR_GAIN_2DB (0x1 << RK3308_DAC_MODULATOR_GAIN_SFT) #define RK3308_DAC_MODULATOR_GAIN_0DB (0x0 << RK3308_DAC_MODULATOR_GAIN_SFT) #define RK3308_DAC_CIC_IF_GAIN_SFT 0 #define RK3308_DAC_CIC_IF_GAIN_MSK (0x7 << RK3308_DAC_CIC_IF_GAIN_SFT) /* RK3308BS_DAC_DIG_CON04 - REG: 0x0310 */ #define RK3308BS_DAC_DIG_GAIN_SFT 0 #define RK3308BS_DAC_DIG_GAIN_MSK (0xff << RK3308BS_DAC_DIG_GAIN_SFT) #define RK3308BS_DAC_DIG_GAIN(x) ((x) & RK3308BS_DAC_DIG_GAIN_MSK) #define RK3308BS_DAC_DIG_0DB 0xed /* RK3308_DAC_DIG_CON05 - REG: 0x0314 */ #define RK3308_DAC_L_DATA_SEL_INPUT (0x1 << 2) #define RK3308_DAC_L_DATA_SEL_NORMAL (0x0 << 2) #define RK3308_DAC_R_DATA_SEL_INPUT (0x1 << 1) #define RK3308_DAC_R_DATA_SEL_NORMAL (0x0 << 1) /* RK3308BS_DAC_DIG_CON05 - REG: 0x0314 */ #define RK3308BS_DAC_L_DATA_SEL_MUTE (0x1 << 2) #define RK3308BS_DAC_L_DATA_SEL_NORMAL (0x0 << 2) #define RK3308BS_DAC_R_DATA_SEL_MUTE (0x1 << 1) #define RK3308BS_DAC_R_DATA_SEL_NORMAL (0x0 << 1) /* RK3308_DAC_DIG_CON10 - REG: 0x0328 */ #define RK3308_DAC_DATA_HI4(x) ((x) & 0xf) /* Need to RK3308_DAC_x_REG_CTL_INDATA */ /* RK3308_DAC_DIG_CON11 - REG: 0x032c */ #define RK3308_DAC_DATA_LO8(x) ((x) & 0xff) /* Need to RK3308_DAC_x_REG_CTL_INDATA */ /* RK3308BS_DAC_DIG_CON09 - REG: 0x0324 */ #define RK3308BS_DAC_DATA_HI4(x) ((x) & 0xf) /* Need to RK3308_DAC_x_REG_CTL_INDATA */ /* RK3308BS_DAC_DIG_CON10 - REG: 0x0328 */ #define RK3308BS_DAC_DATA_LO8(x) ((x) & 0xff) /* Need to RK3308_DAC_x_REG_CTL_INDATA */ /* RK3308BS_DAC_DIG_CON11 - REG: 0x032c */ #define RK3308BS_DAC_DELAY_TIME_DETECT_HI2(x) ((x) & 0x3) /* RK3308BS_DAC_DIG_CON12 - REG: 0x0330 */ #define RK3308BS_DAC_DELAY_TIME_DETECT_LO8(x) ((x) & 0xff) /* RK3308_ADC_ANA_CON00 - REG: 0x0340 */ #define RK3308_ADC_CH1_CH2_MIC_ALL_MSK (0xff << 0) #define RK3308_ADC_CH1_CH2_MIC_ALL 0xff #define RK3308_ADC_CH2_MIC_UNMUTE (0x1 << 7) #define RK3308_ADC_CH2_MIC_MUTE (0x0 << 7) #define RK3308_ADC_CH2_MIC_WORK (0x1 << 6) #define RK3308_ADC_CH2_MIC_INIT (0x0 << 6) #define RK3308_ADC_CH2_MIC_EN (0x1 << 5) #define RK3308_ADC_CH2_MIC_DIS (0x0 << 5) #define RK3308_ADC_CH2_BUF_REF_EN (0x1 << 4) #define RK3308_ADC_CH2_BUF_REF_DIS (0x0 << 4) #define RK3308_ADC_CH1_MIC_UNMUTE (0x1 << 3) #define RK3308_ADC_CH1_MIC_MUTE (0x0 << 3) #define RK3308_ADC_CH1_MIC_WORK (0x1 << 2) #define RK3308_ADC_CH1_MIC_INIT (0x0 << 2) #define RK3308_ADC_CH1_MIC_EN (0x1 << 1) #define RK3308_ADC_CH1_MIC_DIS (0x0 << 1) #define RK3308_ADC_CH1_BUF_REF_EN (0x1 << 0) #define RK3308_ADC_CH1_BUF_REF_DIS (0x0 << 0) /* RK3308_ADC_ANA_CON01 - REG: 0x0344 * * The PGA of MIC-INs: * 0x0 - MIC1~MIC8 0dB * 0x1 - MIC1~MIC8 6.6dB * 0x2 - MIC1~MIC8 13dB * 0x3 - MIC1~MIC8 20dB */ #define RK3308_ADC_CH2_MIC_GAIN_MAX 0x3 #define RK3308_ADC_CH2_MIC_GAIN_MIN 0 #define RK3308_ADC_CH2_MIC_GAIN_SFT 4 #define RK3308_ADC_CH2_MIC_GAIN_MSK (0x3 << RK3308_ADC_CH2_MIC_GAIN_SFT) #define RK3308_ADC_CH2_MIC_GAIN_20DB (0x3 << RK3308_ADC_CH2_MIC_GAIN_SFT) #define RK3308_ADC_CH2_MIC_GAIN_13DB (0x2 << RK3308_ADC_CH2_MIC_GAIN_SFT) /* TRM: only used for version B */ #define RK3308_ADC_CH2_MIC_GAIN_6_6DB (0x1 << RK3308_ADC_CH2_MIC_GAIN_SFT) /* TRM: only used for version B */ #define RK3308_ADC_CH2_MIC_GAIN_0DB (0x0 << RK3308_ADC_CH2_MIC_GAIN_SFT) #define RK3308_ADC_CH1_MIC_GAIN_MAX 0x3 #define RK3308_ADC_CH1_MIC_GAIN_MIN 0 #define RK3308_ADC_CH1_MIC_GAIN_SFT 0 #define RK3308_ADC_CH1_MIC_GAIN_MSK (0x3 << RK3308_ADC_CH1_MIC_GAIN_SFT) #define RK3308_ADC_CH1_MIC_GAIN_20DB (0x3 << RK3308_ADC_CH1_MIC_GAIN_SFT) #define RK3308_ADC_CH1_MIC_GAIN_13DB (0x2 << RK3308_ADC_CH1_MIC_GAIN_SFT) /* TRM: only used for version B */ #define RK3308_ADC_CH1_MIC_GAIN_6_6DB (0x1 << RK3308_ADC_CH1_MIC_GAIN_SFT) /* TRM: only used for version B */ #define RK3308_ADC_CH1_MIC_GAIN_0DB (0x0 << RK3308_ADC_CH1_MIC_GAIN_SFT) /* RK3308_ADC_ANA_CON02 - REG: 0x0348 */ #define RK3308_ADC_CH2_ALC_ZC_MSK (0x7 << 4) #define RK3308_ADC_CH2_ZEROCROSS_DET_EN (0x1 << 6) #define RK3308_ADC_CH2_ZEROCROSS_DET_DIS (0x0 << 6) #define RK3308_ADC_CH2_ALC_WORK (0x1 << 5) #define RK3308_ADC_CH2_ALC_INIT (0x0 << 5) #define RK3308_ADC_CH2_ALC_EN (0x1 << 4) #define RK3308_ADC_CH2_ALC_DIS (0x0 << 4) #define RK3308_ADC_CH1_ALC_ZC_MSK (0x7 << 0) #define RK3308_ADC_CH1_ZEROCROSS_DET_EN (0x1 << 2) #define RK3308_ADC_CH1_ZEROCROSS_DET_DIS (0x0 << 2) #define RK3308_ADC_CH1_ALC_WORK (0x1 << 1) #define RK3308_ADC_CH1_ALC_INIT (0x0 << 1) #define RK3308_ADC_CH1_ALC_EN (0x1 << 0) #define RK3308_ADC_CH1_ALC_DIS (0x0 << 0) /* RK3308_ADC_ANA_CON03 - REG: 0x034c */ #define RK3308_ADC_CH1_ALC_GAIN_MAX 0x1f #define RK3308_ADC_CH1_ALC_GAIN_MIN 0 #define RK3308_ADC_CH1_ALC_GAIN_SFT 0 #define RK3308_ADC_CH1_ALC_GAIN_MSK (0x1f << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_28_5 (0x1f << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_27 (0x1e << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_25_5 (0x1d << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_24 (0x1c << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_22_5 (0x1b << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_21 (0x1a << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_19_5 (0x19 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_18 (0x18 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_16_5 (0x17 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_15 (0x16 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_13_5 (0x15 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_12 (0x14 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_10_5 (0x13 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_9 (0x12 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_7_5 (0x11 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_6 (0x10 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_4_5 (0x0f << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_3 (0x0e << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_PDB_1_5 (0x0d << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_0DB (0x0c << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_NDB_1_5 (0x0b << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_NDB_3 (0x0a << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_NDB_4_5 (0x09 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_NDB_6 (0x08 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_NDB_7_5 (0x07 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_NDB_9 (0x06 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_NDB_10_5 (0x05 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_NDB_12 (0x04 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_NDB_13_5 (0x03 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_NDB_15 (0x02 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_NDB_16_5 (0x01 << RK3308_ADC_CH1_ALC_GAIN_SFT) #define RK3308_ADC_CH1_ALC_GAIN_NDB_18 (0x00 << RK3308_ADC_CH1_ALC_GAIN_SFT) /* RK3308_ADC_ANA_CON04 - REG: 0x0350 */ #define RK3308_ADC_CH2_ALC_GAIN_MAX 0x1f #define RK3308_ADC_CH2_ALC_GAIN_MIN 0 #define RK3308_ADC_CH2_ALC_GAIN_SFT 0 #define RK3308_ADC_CH2_ALC_GAIN_MSK (0x1f << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_28_5 (0x1f << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_27 (0x1e << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_25_5 (0x1d << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_24 (0x1c << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_22_5 (0x1b << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_21 (0x1a << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_19_5 (0x19 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_18 (0x18 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_16_5 (0x17 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_15 (0x16 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_13_5 (0x15 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_12 (0x14 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_10_5 (0x13 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_9 (0x12 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_7_5 (0x11 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_6 (0x10 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_4_5 (0x0f << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_3 (0x0e << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_PDB_1_5 (0x0d << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_0DB (0x0c << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_NDB_1_5 (0x0b << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_NDB_3 (0x0a << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_NDB_4_5 (0x09 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_NDB_6 (0x08 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_NDB_7_5 (0x07 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_NDB_9 (0x06 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_NDB_10_5 (0x05 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_NDB_12 (0x04 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_NDB_13_5 (0x03 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_NDB_15 (0x02 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_NDB_16_5 (0x01 << RK3308_ADC_CH2_ALC_GAIN_SFT) #define RK3308_ADC_CH2_ALC_GAIN_NDB_18 (0x00 << RK3308_ADC_CH2_ALC_GAIN_SFT) /* RK3308_ADC_ANA_CON05 - REG: 0x0354 */ #define RK3308_ADC_CH2_ADC_CLK_MSK (0x7 << 4) #define RK3308_ADC_CH2_ADC_WORK (0x1 << 6) #define RK3308_ADC_CH2_ADC_INIT (0x0 << 6) #define RK3308_ADC_CH2_ADC_EN (0x1 << 5) #define RK3308_ADC_CH2_ADC_DIS (0x0 << 5) #define RK3308_ADC_CH2_CLK_EN (0x1 << 4) #define RK3308_ADC_CH2_CLK_DIS (0x0 << 4) #define RK3308_ADC_CH1_ADC_CLK_MSK (0x7 << 0) #define RK3308_ADC_CH1_ADC_WORK (0x1 << 2) #define RK3308_ADC_CH1_ADC_INIT (0x0 << 2) #define RK3308_ADC_CH1_ADC_EN (0x1 << 1) #define RK3308_ADC_CH1_ADC_DIS (0x0 << 1) #define RK3308_ADC_CH1_CLK_EN (0x1 << 0) #define RK3308_ADC_CH1_CLK_DIS (0x0 << 0) /* RK3308_ADC_ANA_CON06 - REG: 0x0358 */ #define RK3308_ADC_CURRENT_MSK (0x1 << 0) #define RK3308_ADC_CURRENT_EN (0x1 << 0) #define RK3308_ADC_CURRENT_DIS (0x0 << 0) /* RK3308_ADC_ANA_CON07 - REG: 0x035c */ /* Note: The register configuration is only valid for ADC2 */ #define RK3308_ADC_CH2_IN_SEL_SFT 6 #define RK3308_ADC_CH2_IN_SEL_MSK (0x3 << RK3308_ADC_CH2_IN_SEL_SFT) #define RK3308_ADC_CH2_IN_LINEIN_MIC (0x3 << RK3308_ADC_CH2_IN_SEL_SFT) #define RK3308_ADC_CH2_IN_LINEIN (0x2 << RK3308_ADC_CH2_IN_SEL_SFT) #define RK3308_ADC_CH2_IN_MIC (0x1 << RK3308_ADC_CH2_IN_SEL_SFT) #define RK3308_ADC_CH2_IN_NONE (0x0 << RK3308_ADC_CH2_IN_SEL_SFT) /* Note: The register configuration is only valid for ADC1 */ #define RK3308_ADC_CH1_IN_SEL_SFT 4 #define RK3308_ADC_CH1_IN_SEL_MSK (0x3 << RK3308_ADC_CH1_IN_SEL_SFT) #define RK3308_ADC_CH1_IN_LINEIN_MIC (0x3 << RK3308_ADC_CH1_IN_SEL_SFT) #define RK3308_ADC_CH1_IN_LINEIN (0x2 << RK3308_ADC_CH1_IN_SEL_SFT) #define RK3308_ADC_CH1_IN_MIC (0x1 << RK3308_ADC_CH1_IN_SEL_SFT) #define RK3308_ADC_CH1_IN_NONE (0x0 << RK3308_ADC_CH1_IN_SEL_SFT) #define RK3308_ADC_MIC_BIAS_BUF_SFT 3 #define RK3308_ADC_MIC_BIAS_BUF_EN (0x1 << RK3308_ADC_MIC_BIAS_BUF_SFT) #define RK3308_ADC_MIC_BIAS_BUF_DIS (0x0 << RK3308_ADC_MIC_BIAS_BUF_SFT) #define RK3308_ADC_LEVEL_RANGE_MICBIAS_SFT 0 #define RK3308_ADC_LEVEL_RANGE_MICBIAS_MSK (0x7 << RK3308_ADC_LEVEL_RANGE_MICBIAS_SFT) /* * The follow MICBIAS_VOLTs are based on the external reference voltage(Vref). * For example, the Vref == 3.3V, the MICBIAS_VOLT_0_85 is equal: * 3.3V * 0.85 = 2.805V. */ #define RK3308_ADC_MICBIAS_VOLT_0_85 (0x7 << RK3308_ADC_LEVEL_RANGE_MICBIAS_SFT) #define RK3308_ADC_MICBIAS_VOLT_0_8 (0x6 << RK3308_ADC_LEVEL_RANGE_MICBIAS_SFT) #define RK3308_ADC_MICBIAS_VOLT_0_75 (0x5 << RK3308_ADC_LEVEL_RANGE_MICBIAS_SFT) #define RK3308_ADC_MICBIAS_VOLT_0_7 (0x4 << RK3308_ADC_LEVEL_RANGE_MICBIAS_SFT) #define RK3308_ADC_MICBIAS_VOLT_0_65 (0x3 << RK3308_ADC_LEVEL_RANGE_MICBIAS_SFT) #define RK3308_ADC_MICBIAS_VOLT_0_6 (0x2 << RK3308_ADC_LEVEL_RANGE_MICBIAS_SFT) #define RK3308_ADC_MICBIAS_VOLT_0_55 (0x1 << RK3308_ADC_LEVEL_RANGE_MICBIAS_SFT) #define RK3308_ADC_MICBIAS_VOLT_0_5 (0x0 << RK3308_ADC_LEVEL_RANGE_MICBIAS_SFT) /* RK3308_ADC_ANA_CON08 - REG: 0x0360 */ #define RK3308_ADC_MICBIAS_CURRENT_MSK (0x1 << 4) #define RK3308_ADC_MICBIAS_CURRENT_EN (0x1 << 4) #define RK3308_ADC_MICBIAS_CURRENT_DIS (0x0 << 4) #define RK3308BS_ADC_MICBIAS_CURRENT_SEL(x) ((x) & 0xf) /* RK3308BS_ADC_ANA_CON09 - REG: 0x0364 */ #define RK3308BS_ADC_MICBIAS_OPA_VBIAS(x) (((x) & 0x7) << 4) #define RK3308BS_ADC_VCM_SETUP_MIN_CURRENT_EN (0x0 << 1) #define RK3308BS_ADC_VCM_SETUP_MIN_CURRENT_DIS (0x0 << 0) /* RK3308_ADC_ANA_CON10 - REG: 0x0368 */ #define RK3308_ADC_REF_EN (0x1 << 7) #define RK3308_ADC_REF_DIS (0x0 << 7) #define RK3308_ADC_CURRENT_CHARGE_SFT 0 #define RK3308_ADC_CURRENT_CHARGE_MSK (0x7f << RK3308_ADC_CURRENT_CHARGE_SFT) /* * 1: Choose the current I * 0: Don't choose the current I */ #define RK3308_ADC_SEL_I(x) ((x) & 0x7f) /* RK3308_ADC_ANA_CON11 - REG: 0x036c */ #define RK3308_ADC_ALCR_CON_GAIN_PGAR_MSK (0x1 << 1) #define RK3308_ADC_ALCR_CON_GAIN_PGAR_EN (0x1 << 1) #define RK3308_ADC_ALCR_CON_GAIN_PGAR_DIS (0x0 << 1) #define RK3308_ADC_ALCL_CON_GAIN_PGAL_MSK (0x1 << 0) #define RK3308_ADC_ALCL_CON_GAIN_PGAL_EN (0x1 << 0) #define RK3308_ADC_ALCL_CON_GAIN_PGAL_DIS (0x0 << 0) /* RK3308_DAC_ANA_CON00 - REG: 0x0440 */ #define RK3308_DAC_CURRENT_SEL_SFT 4 #define RK3308_DAC_CURRENT_SEL_MSK (0xf << RK3308_DAC_CURRENT_SEL_SFT) #define RK3308_DAC_CURRENT_SEL(x) ((x) & RK3308_DAC_CURRENT_SEL_MSK) #define RK3308_DAC_HEADPHONE_DET_MSK (0x1 << 1) #define RK3308_DAC_HEADPHONE_DET_EN (0x1 << 1) #define RK3308_DAC_HEADPHONE_DET_DIS (0x0 << 1) #define RK3308_DAC_CURRENT_MSK (0x1 << 0) #define RK3308_DAC_CURRENT_EN (0x1 << 0) #define RK3308_DAC_CURRENT_DIS (0x0 << 0) /* RK3308_DAC_ANA_CON01 - REG: 0x0444 */ #define RK3308_DAC_BUF_REF_R_MSK (0x1 << 6) #define RK3308_DAC_BUF_REF_R_EN (0x1 << 6) #define RK3308_DAC_BUF_REF_R_DIS (0x0 << 6) #define RK3308_DAC_HPOUT_POP_SOUND_R_SFT 4 #define RK3308_DAC_HPOUT_POP_SOUND_R_MSK (0x3 << RK3308_DAC_HPOUT_POP_SOUND_R_SFT) #define RK3308_DAC_HPOUT_POP_SOUND_R_WORK (0x2 << RK3308_DAC_HPOUT_POP_SOUND_R_SFT) #define RK3308_DAC_HPOUT_POP_SOUND_R_INIT (0x1 << RK3308_DAC_HPOUT_POP_SOUND_R_SFT) #define RK3308_DAC_HPOUT_POP_SOUND_R_DIS (0x0 << RK3308_DAC_HPOUT_POP_SOUND_R_SFT) #define RK3308_DAC_BUF_REF_L_MSK (0x1 << 2) #define RK3308_DAC_BUF_REF_L_EN (0x1 << 2) #define RK3308_DAC_BUF_REF_L_DIS (0x0 << 2) #define RK3308_DAC_HPOUT_POP_SOUND_L_SFT 0 #define RK3308_DAC_HPOUT_POP_SOUND_L_MSK (0x3 << RK3308_DAC_HPOUT_POP_SOUND_L_SFT) #define RK3308_DAC_HPOUT_POP_SOUND_L_WORK (0x2 << RK3308_DAC_HPOUT_POP_SOUND_L_SFT) #define RK3308_DAC_HPOUT_POP_SOUND_L_INIT (0x1 << RK3308_DAC_HPOUT_POP_SOUND_L_SFT) #define RK3308_DAC_HPOUT_POP_SOUND_L_DIS (0x0 << RK3308_DAC_HPOUT_POP_SOUND_L_SFT) /* RK3308_DAC_ANA_CON02 - REG: 0x0448 */ #define RK3308_DAC_R_DAC_WORK (0x1 << 7) #define RK3308_DAC_R_DAC_INIT (0x0 << 7) #define RK3308_DAC_R_DAC_EN (0x1 << 6) #define RK3308_DAC_R_DAC_DIS (0x0 << 6) #define RK3308_DAC_R_CLK_EN (0x1 << 5) #define RK3308_DAC_R_CLK_DIS (0x0 << 5) #define RK3308_DAC_R_REF_EN (0x1 << 4) #define RK3308_DAC_R_REF_DIS (0x0 << 4) #define RK3308_DAC_L_DAC_WORK (0x1 << 3) #define RK3308_DAC_L_DAC_INIT (0x0 << 3) #define RK3308_DAC_L_DAC_EN (0x1 << 2) #define RK3308_DAC_L_DAC_DIS (0x0 << 2) #define RK3308_DAC_L_CLK_EN (0x1 << 1) #define RK3308_DAC_L_CLK_DIS (0x0 << 1) #define RK3308_DAC_L_REF_EN (0x1 << 0) #define RK3308_DAC_L_REF_DIS (0x0 << 0) /* RK3308_DAC_ANA_CON03 - REG: 0x044c */ #define RK3308_DAC_R_HPOUT_WORK (0x1 << 6) #define RK3308_DAC_R_HPOUT_INIT (0x0 << 6) #define RK3308_DAC_R_HPOUT_EN (0x1 << 5) #define RK3308_DAC_R_HPOUT_DIS (0x0 << 5) #define RK3308_DAC_R_HPOUT_UNMUTE (0x1 << 4) #define RK3308_DAC_R_HPOUT_MUTE (0x0 << 4) #define RK3308_DAC_L_HPOUT_WORK (0x1 << 2) #define RK3308_DAC_L_HPOUT_INIT (0x0 << 2) #define RK3308_DAC_L_HPOUT_EN (0x1 << 1) #define RK3308_DAC_L_HPOUT_DIS (0x0 << 1) #define RK3308_DAC_L_HPOUT_UNMUTE (0x1 << 0) #define RK3308_DAC_L_HPOUT_MUTE (0x0 << 0) /* RK3308_DAC_ANA_CON04 - REG: 0x0450 */ #define RK3308_DAC_R_LINEOUT_GAIN_MAX 0x3 #define RK3308_DAC_R_LINEOUT_GAIN_SFT 6 #define RK3308_DAC_R_LINEOUT_GAIN_MSK (0x3 << RK3308_DAC_R_LINEOUT_GAIN_SFT) #define RK3308_DAC_R_LINEOUT_GAIN_0DB (0x3 << RK3308_DAC_R_LINEOUT_GAIN_SFT) #define RK3308_DAC_R_LINEOUT_GAIN_NDB_1_5 (0x2 << RK3308_DAC_R_LINEOUT_GAIN_SFT) #define RK3308_DAC_R_LINEOUT_GAIN_NDB_3 (0x1 << RK3308_DAC_R_LINEOUT_GAIN_SFT) #define RK3308_DAC_R_LINEOUT_GAIN_NDB_6 (0x0 << RK3308_DAC_R_LINEOUT_GAIN_SFT) #define RK3308_DAC_R_LINEOUT_UNMUTE (0x1 << 5) #define RK3308_DAC_R_LINEOUT_MUTE (0x0 << 5) #define RK3308_DAC_R_LINEOUT_EN (0x1 << 4) #define RK3308_DAC_R_LINEOUT_DIS (0x0 << 4) #define RK3308_DAC_L_LINEOUT_GAIN_MAX 0x3 #define RK3308_DAC_L_LINEOUT_GAIN_SFT 2 #define RK3308_DAC_L_LINEOUT_GAIN_MSK (0x3 << RK3308_DAC_L_LINEOUT_GAIN_SFT) #define RK3308_DAC_L_LINEOUT_GAIN_0DB (0x3 << RK3308_DAC_L_LINEOUT_GAIN_SFT) #define RK3308_DAC_L_LINEOUT_GAIN_NDB_1_5 (0x2 << RK3308_DAC_L_LINEOUT_GAIN_SFT) #define RK3308_DAC_L_LINEOUT_GAIN_NDB_3 (0x1 << RK3308_DAC_L_LINEOUT_GAIN_SFT) #define RK3308_DAC_L_LINEOUT_GAIN_NDB_6 (0x0 << RK3308_DAC_L_LINEOUT_GAIN_SFT) #define RK3308_DAC_L_LINEOUT_UNMUTE (0x1 << 1) #define RK3308_DAC_L_LINEOUT_MUTE (0x0 << 1) #define RK3308_DAC_L_LINEOUT_EN (0x1 << 0) #define RK3308_DAC_L_LINEOUT_DIS (0x0 << 0) /* RK3308_DAC_ANA_CON05 - REG: 0x0454, step is 1.5db */ #define RK3308_DAC_L_HPOUT_GAIN_MAX 0x1e #define RK3308_DAC_L_HPOUT_GAIN_SFT 0 #define RK3308_DAC_L_HPOUT_GAIN_MSK (0x1f << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_PDB_6 (0x1e << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_PDB_4_5 (0x1d << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_PDB_3 (0x1c << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_PDB_1_5 (0x1b << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_0DB (0x1a << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_1_5 (0x19 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_3 (0x18 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_4_5 (0x17 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_6 (0x16 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_7_5 (0x15 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_9 (0x14 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_10_5 (0x13 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_12 (0x12 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_13_5 (0x11 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_15 (0x10 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_16_5 (0x0f << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_18 (0x0e << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_19_5 (0x0d << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_21 (0x0c << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_22_5 (0x0b << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_24 (0x0a << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_25_5 (0x09 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_27 (0x08 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_28_5 (0x07 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_30 (0x06 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_31_5 (0x05 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_33 (0x04 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_34_5 (0x03 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_36 (0x02 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_37_5 (0x01 << RK3308_DAC_L_HPOUT_GAIN_SFT) #define RK3308_DAC_L_HPOUT_GAIN_NDB_39 (0x00 << RK3308_DAC_L_HPOUT_GAIN_SFT) /* RK3308_DAC_ANA_CON06 - REG: 0x0458, step is 1.5db */ #define RK3308_DAC_R_HPOUT_GAIN_MAX 0x1e #define RK3308_DAC_R_HPOUT_GAIN_SFT 0 #define RK3308_DAC_R_HPOUT_GAIN_MSK (0x1f << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_PDB_6 (0x1e << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_PDB_4_5 (0x1d << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_PDB_3 (0x1c << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_PDB_1_5 (0x1b << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_0DB (0x1a << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_1_5 (0x19 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_3 (0x18 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_4_5 (0x17 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_6 (0x16 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_7_5 (0x15 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_9 (0x14 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_10_5 (0x13 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_12 (0x12 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_13_5 (0x11 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_15 (0x10 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_16_5 (0x0f << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_18 (0x0e << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_19_5 (0x0d << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_21 (0x0c << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_22_5 (0x0b << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_24 (0x0a << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_25_5 (0x09 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_27 (0x08 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_28_5 (0x07 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_30 (0x06 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_31_5 (0x05 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_33 (0x04 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_34_5 (0x03 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_36 (0x02 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_37_5 (0x01 << RK3308_DAC_R_HPOUT_GAIN_SFT) #define RK3308_DAC_R_HPOUT_GAIN_NDB_39 (0x00 << RK3308_DAC_R_HPOUT_GAIN_SFT) /* RK3308_DAC_ANA_CON07 - REG: 0x045c */ #define RK3308_DAC_R_HPOUT_DRV_SFT 4 #define RK3308_DAC_R_HPOUT_DRV_MSK (0xf << RK3308_DAC_R_HPOUT_DRV_SFT) #define RK3308_DAC_R_HPOUT_DRV(x) (((x) << RK3308_DAC_R_HPOUT_DRV_SFT) & RK3308_DAC_R_HPOUT_DRV_MSK) #define RK3308_DAC_L_HPOUT_DRV_SFT 0 #define RK3308_DAC_L_HPOUT_DRV_MSK (0xf << RK3308_DAC_L_HPOUT_DRV_SFT) #define RK3308_DAC_L_HPOUT_DRV(x) (((x) << RK3308_DAC_L_HPOUT_DRV_SFT) & RK3308_DAC_L_HPOUT_DRV_MSK) /* RK3308_DAC_ANA_CON08 - REG: 0x0460 */ #define RK3308_DAC_R_LINEOUT_DRV_SFT 4 #define RK3308_DAC_R_LINEOUT_DRV_MSK (0xf << RK3308_DAC_R_LINEOUT_DRV_SFT) #define RK3308_DAC_R_LINEOUT_DRV(x) (((x) << RK3308_DAC_R_LINEOUT_DRV_SFT) & RK3308_DAC_R_LINEOUT_DRV_MSK) #define RK3308_DAC_L_LINEOUT_DRV_SFT 0 #define RK3308_DAC_L_LINEOUT_DRV_MSK (0xf << RK3308_DAC_L_LINEOUT_DRV_SFT) #define RK3308_DAC_L_LINEOUT_DRV(x) (((x) << RK3308_DAC_L_LINEOUT_DRV_SFT) & RK3308_DAC_L_LINEOUT_DRV_MSK) /* RK3308_DAC_ANA_CON12 - REG: 0x0470 */ #define RK3308_DAC_R_HPMIX_SEL_SFT 6 #define RK3308_DAC_R_HPMIX_SEL_MSK (0x3 << RK3308_DAC_R_HPMIX_SEL_SFT) #define RK3308_DAC_R_HPMIX_LINEIN_I2S (0x3 << RK3308_DAC_R_HPMIX_SEL_SFT) #define RK3308_DAC_R_HPMIX_LINEIN (0x2 << RK3308_DAC_R_HPMIX_SEL_SFT) #define RK3308_DAC_R_HPMIX_I2S (0x1 << RK3308_DAC_R_HPMIX_SEL_SFT) #define RK3308_DAC_R_HPMIX_NONE (0x0 << RK3308_DAC_R_HPMIX_SEL_SFT) #define RK3308_DAC_R_HPMIX_GAIN_MIN 0x1 #define RK3308_DAC_R_HPMIX_GAIN_MAX 0x2 #define RK3308_DAC_R_HPMIX_GAIN_SFT 4 #define RK3308_DAC_R_HPMIX_GAIN_MSK (0x3 << RK3308_DAC_R_HPMIX_GAIN_SFT) #define RK3308_DAC_R_HPMIX_GAIN_0DB (0x2 << RK3308_DAC_R_HPMIX_GAIN_SFT) #define RK3308_DAC_R_HPMIX_GAIN_NDB_6 (0x1 << RK3308_DAC_R_HPMIX_GAIN_SFT) #define RK3308_DAC_L_HPMIX_SEL_SFT 2 #define RK3308_DAC_L_HPMIX_SEL_MSK (0x3 << RK3308_DAC_L_HPMIX_SEL_SFT) #define RK3308_DAC_L_HPMIX_LINEIN_I2S (0x3 << RK3308_DAC_L_HPMIX_SEL_SFT) #define RK3308_DAC_L_HPMIX_LINEIN (0x2 << RK3308_DAC_L_HPMIX_SEL_SFT) #define RK3308_DAC_L_HPMIX_I2S (0x1 << RK3308_DAC_L_HPMIX_SEL_SFT) #define RK3308_DAC_L_HPMIX_NONE (0x0 << RK3308_DAC_L_HPMIX_SEL_SFT) #define RK3308_DAC_L_HPMIX_GAIN_MIN 0x1 #define RK3308_DAC_L_HPMIX_GAIN_MAX 0x2 #define RK3308_DAC_L_HPMIX_GAIN_SFT 0 #define RK3308_DAC_L_HPMIX_GAIN_MSK (0x3 << RK3308_DAC_L_HPMIX_GAIN_SFT) #define RK3308_DAC_L_HPMIX_GAIN_0DB (0x2 << RK3308_DAC_L_HPMIX_GAIN_SFT) #define RK3308_DAC_L_HPMIX_GAIN_NDB_6 (0x1 << RK3308_DAC_L_HPMIX_GAIN_SFT) /* RK3308_DAC_ANA_CON13 - REG: 0x0474 */ #define RK3308_DAC_R_HPMIX_UNMUTE (0x1 << 6) #define RK3308_DAC_R_HPMIX_MUTE (0x0 << 6) #define RK3308_DAC_R_HPMIX_WORK (0x1 << 5) #define RK3308_DAC_R_HPMIX_INIT (0x0 << 5) #define RK3308_DAC_R_HPMIX_EN (0x1 << 4) #define RK3308_DAC_R_HPMIX_DIS (0x0 << 4) #define RK3308_DAC_L_HPMIX_UNMUTE (0x1 << 2) #define RK3308_DAC_L_HPMIX_MUTE (0x0 << 2) #define RK3308_DAC_L_HPMIX_WORK (0x1 << 1) #define RK3308_DAC_L_HPMIX_INIT (0x0 << 1) #define RK3308_DAC_L_HPMIX_EN (0x1 << 0) #define RK3308_DAC_L_HPMIX_DIS (0x0 << 0) /* RK3308_DAC_ANA_CON14 - REG: 0x0478 */ #define RK3308_DAC_VCM_LINEOUT_EN (0x1 << 4) #define RK3308_DAC_VCM_LINEOUT_DIS (0x0 << 4) #define RK3308_DAC_CURRENT_CHARGE_SFT 0 #define RK3308_DAC_CURRENT_CHARGE_MSK (0xf << RK3308_DAC_CURRENT_CHARGE_SFT) /* * 1: Choose the current I * 0: Don't choose the current I */ #define RK3308_DAC_SEL_I(x) ((x) & 0xf) /* RK3308_DAC_ANA_CON15 - REG: 0x047C */ #define RK3308_DAC_LINEOUT_POP_SOUND_R_SFT 4 #define RK3308_DAC_LINEOUT_POP_SOUND_R_MSK (0x3 << RK3308_DAC_LINEOUT_POP_SOUND_R_SFT) #define RK3308_DAC_R_SEL_DC_FROM_INTERNAL (0x2 << RK3308_DAC_LINEOUT_POP_SOUND_R_SFT) #define RK3308_DAC_R_SEL_DC_FROM_VCM (0x1 << RK3308_DAC_LINEOUT_POP_SOUND_R_SFT) #define RK3308_DAC_R_SEL_LINEOUT_FROM_INTERNAL (0x0 << RK3308_DAC_LINEOUT_POP_SOUND_R_SFT) #define RK3308_DAC_LINEOUT_POP_SOUND_L_SFT 0 #define RK3308_DAC_LINEOUT_POP_SOUND_L_MSK (0x3 << RK3308_DAC_LINEOUT_POP_SOUND_L_SFT) #define RK3308_DAC_L_SEL_DC_FROM_INTERNAL (0x2 << RK3308_DAC_LINEOUT_POP_SOUND_L_SFT) #define RK3308_DAC_L_SEL_DC_FROM_VCM (0x1 << RK3308_DAC_LINEOUT_POP_SOUND_L_SFT) #define RK3308_DAC_L_SEL_LINEOUT_FROM_INTERNAL (0x0 << RK3308_DAC_LINEOUT_POP_SOUND_L_SFT) #define RK3308_HIFI 0x0 #endif /* __RK3308_CODEC_H__ */