1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * nau8822.h -- NAU8822 ALSA SoC Audio driver 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright 2017 Nuvoton Technology Crop. 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Author: David Lin <ctlin0@nuvoton.com> 8*4882a593Smuzhiyun * Co-author: John Hsu <kchsu0@nuvoton.com> 9*4882a593Smuzhiyun * Co-author: Seven Li <wtli@nuvoton.com> 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #ifndef __NAU8822_H__ 13*4882a593Smuzhiyun #define __NAU8822_H__ 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #define NAU8822_REG_RESET 0x00 16*4882a593Smuzhiyun #define NAU8822_REG_POWER_MANAGEMENT_1 0x01 17*4882a593Smuzhiyun #define NAU8822_REG_POWER_MANAGEMENT_2 0x02 18*4882a593Smuzhiyun #define NAU8822_REG_POWER_MANAGEMENT_3 0x03 19*4882a593Smuzhiyun #define NAU8822_REG_AUDIO_INTERFACE 0x04 20*4882a593Smuzhiyun #define NAU8822_REG_COMPANDING_CONTROL 0x05 21*4882a593Smuzhiyun #define NAU8822_REG_CLOCKING 0x06 22*4882a593Smuzhiyun #define NAU8822_REG_ADDITIONAL_CONTROL 0x07 23*4882a593Smuzhiyun #define NAU8822_REG_GPIO_CONTROL 0x08 24*4882a593Smuzhiyun #define NAU8822_REG_JACK_DETECT_CONTROL_1 0x09 25*4882a593Smuzhiyun #define NAU8822_REG_DAC_CONTROL 0x0A 26*4882a593Smuzhiyun #define NAU8822_REG_LEFT_DAC_DIGITAL_VOLUME 0x0B 27*4882a593Smuzhiyun #define NAU8822_REG_RIGHT_DAC_DIGITAL_VOLUME 0x0C 28*4882a593Smuzhiyun #define NAU8822_REG_JACK_DETECT_CONTROL_2 0x0D 29*4882a593Smuzhiyun #define NAU8822_REG_ADC_CONTROL 0x0E 30*4882a593Smuzhiyun #define NAU8822_REG_LEFT_ADC_DIGITAL_VOLUME 0x0F 31*4882a593Smuzhiyun #define NAU8822_REG_RIGHT_ADC_DIGITAL_VOLUME 0x10 32*4882a593Smuzhiyun #define NAU8822_REG_EQ1 0x12 33*4882a593Smuzhiyun #define NAU8822_REG_EQ2 0x13 34*4882a593Smuzhiyun #define NAU8822_REG_EQ3 0x14 35*4882a593Smuzhiyun #define NAU8822_REG_EQ4 0x15 36*4882a593Smuzhiyun #define NAU8822_REG_EQ5 0x16 37*4882a593Smuzhiyun #define NAU8822_REG_DAC_LIMITER_1 0x18 38*4882a593Smuzhiyun #define NAU8822_REG_DAC_LIMITER_2 0x19 39*4882a593Smuzhiyun #define NAU8822_REG_NOTCH_FILTER_1 0x1B 40*4882a593Smuzhiyun #define NAU8822_REG_NOTCH_FILTER_2 0x1C 41*4882a593Smuzhiyun #define NAU8822_REG_NOTCH_FILTER_3 0x1D 42*4882a593Smuzhiyun #define NAU8822_REG_NOTCH_FILTER_4 0x1E 43*4882a593Smuzhiyun #define NAU8822_REG_ALC_CONTROL_1 0x20 44*4882a593Smuzhiyun #define NAU8822_REG_ALC_CONTROL_2 0x21 45*4882a593Smuzhiyun #define NAU8822_REG_ALC_CONTROL_3 0x22 46*4882a593Smuzhiyun #define NAU8822_REG_NOISE_GATE 0x23 47*4882a593Smuzhiyun #define NAU8822_REG_PLL_N 0x24 48*4882a593Smuzhiyun #define NAU8822_REG_PLL_K1 0x25 49*4882a593Smuzhiyun #define NAU8822_REG_PLL_K2 0x26 50*4882a593Smuzhiyun #define NAU8822_REG_PLL_K3 0x27 51*4882a593Smuzhiyun #define NAU8822_REG_3D_CONTROL 0x29 52*4882a593Smuzhiyun #define NAU8822_REG_RIGHT_SPEAKER_CONTROL 0x2B 53*4882a593Smuzhiyun #define NAU8822_REG_INPUT_CONTROL 0x2C 54*4882a593Smuzhiyun #define NAU8822_REG_LEFT_INP_PGA_CONTROL 0x2D 55*4882a593Smuzhiyun #define NAU8822_REG_RIGHT_INP_PGA_CONTROL 0x2E 56*4882a593Smuzhiyun #define NAU8822_REG_LEFT_ADC_BOOST_CONTROL 0x2F 57*4882a593Smuzhiyun #define NAU8822_REG_RIGHT_ADC_BOOST_CONTROL 0x30 58*4882a593Smuzhiyun #define NAU8822_REG_OUTPUT_CONTROL 0x31 59*4882a593Smuzhiyun #define NAU8822_REG_LEFT_MIXER_CONTROL 0x32 60*4882a593Smuzhiyun #define NAU8822_REG_RIGHT_MIXER_CONTROL 0x33 61*4882a593Smuzhiyun #define NAU8822_REG_LHP_VOLUME 0x34 62*4882a593Smuzhiyun #define NAU8822_REG_RHP_VOLUME 0x35 63*4882a593Smuzhiyun #define NAU8822_REG_LSPKOUT_VOLUME 0x36 64*4882a593Smuzhiyun #define NAU8822_REG_RSPKOUT_VOLUME 0x37 65*4882a593Smuzhiyun #define NAU8822_REG_AUX2_MIXER 0x38 66*4882a593Smuzhiyun #define NAU8822_REG_AUX1_MIXER 0x39 67*4882a593Smuzhiyun #define NAU8822_REG_POWER_MANAGEMENT_4 0x3A 68*4882a593Smuzhiyun #define NAU8822_REG_LEFT_TIME_SLOT 0x3B 69*4882a593Smuzhiyun #define NAU8822_REG_MISC 0x3C 70*4882a593Smuzhiyun #define NAU8822_REG_RIGHT_TIME_SLOT 0x3D 71*4882a593Smuzhiyun #define NAU8822_REG_DEVICE_REVISION 0x3E 72*4882a593Smuzhiyun #define NAU8822_REG_DEVICE_ID 0x3F 73*4882a593Smuzhiyun #define NAU8822_REG_DAC_DITHER 0x41 74*4882a593Smuzhiyun #define NAU8822_REG_ALC_ENHANCE_1 0x46 75*4882a593Smuzhiyun #define NAU8822_REG_ALC_ENHANCE_2 0x47 76*4882a593Smuzhiyun #define NAU8822_REG_192KHZ_SAMPLING 0x48 77*4882a593Smuzhiyun #define NAU8822_REG_MISC_CONTROL 0x49 78*4882a593Smuzhiyun #define NAU8822_REG_INPUT_TIEOFF 0x4A 79*4882a593Smuzhiyun #define NAU8822_REG_POWER_REDUCTION 0x4B 80*4882a593Smuzhiyun #define NAU8822_REG_AGC_PEAK2PEAK 0x4C 81*4882a593Smuzhiyun #define NAU8822_REG_AGC_PEAK_DETECT 0x4D 82*4882a593Smuzhiyun #define NAU8822_REG_AUTOMUTE_CONTROL 0x4E 83*4882a593Smuzhiyun #define NAU8822_REG_OUTPUT_TIEOFF 0x4F 84*4882a593Smuzhiyun #define NAU8822_REG_MAX_REGISTER NAU8822_REG_OUTPUT_TIEOFF 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun /* NAU8822_REG_POWER_MANAGEMENT_1 (0x1) */ 87*4882a593Smuzhiyun #define NAU8822_REFIMP_MASK 0x3 88*4882a593Smuzhiyun #define NAU8822_REFIMP_80K 0x1 89*4882a593Smuzhiyun #define NAU8822_REFIMP_300K 0x2 90*4882a593Smuzhiyun #define NAU8822_REFIMP_3K 0x3 91*4882a593Smuzhiyun #define NAU8822_IOBUF_EN (0x1 << 2) 92*4882a593Smuzhiyun #define NAU8822_ABIAS_EN (0x1 << 3) 93*4882a593Smuzhiyun #define NAU8822_PLL_EN_MASK (0x1 << 5) 94*4882a593Smuzhiyun #define NAU8822_PLL_ON (0x1 << 5) 95*4882a593Smuzhiyun #define NAU8822_PLL_OFF (0x0 << 5) 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun /* NAU8822_REG_AUDIO_INTERFACE (0x4) */ 98*4882a593Smuzhiyun #define NAU8822_AIFMT_MASK (0x3 << 3) 99*4882a593Smuzhiyun #define NAU8822_WLEN_MASK (0x3 << 5) 100*4882a593Smuzhiyun #define NAU8822_WLEN_20 (0x1 << 5) 101*4882a593Smuzhiyun #define NAU8822_WLEN_24 (0x2 << 5) 102*4882a593Smuzhiyun #define NAU8822_WLEN_32 (0x3 << 5) 103*4882a593Smuzhiyun #define NAU8822_LRP_MASK (0x1 << 7) 104*4882a593Smuzhiyun #define NAU8822_BCLKP_MASK (0x1 << 8) 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun /* NAU8822_REG_COMPANDING_CONTROL (0x5) */ 107*4882a593Smuzhiyun #define NAU8822_ADDAP_SFT 0 108*4882a593Smuzhiyun #define NAU8822_ADCCM_SFT 1 109*4882a593Smuzhiyun #define NAU8822_DACCM_SFT 3 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun /* NAU8822_REG_CLOCKING (0x6) */ 112*4882a593Smuzhiyun #define NAU8822_CLKIOEN_MASK 0x1 113*4882a593Smuzhiyun #define NAU8822_CLK_MASTER 0x1 114*4882a593Smuzhiyun #define NAU8822_CLK_SLAVE 0x0 115*4882a593Smuzhiyun #define NAU8822_MCLKSEL_SFT 5 116*4882a593Smuzhiyun #define NAU8822_MCLKSEL_MASK (0x7 << 5) 117*4882a593Smuzhiyun #define NAU8822_BCLKSEL_SFT 2 118*4882a593Smuzhiyun #define NAU8822_BCLKSEL_MASK (0x7 << 2) 119*4882a593Smuzhiyun #define NAU8822_BCLKDIV_1 (0x0 << 2) 120*4882a593Smuzhiyun #define NAU8822_BCLKDIV_2 (0x1 << 2) 121*4882a593Smuzhiyun #define NAU8822_BCLKDIV_4 (0x2 << 2) 122*4882a593Smuzhiyun #define NAU8822_BCLKDIV_8 (0x3 << 2) 123*4882a593Smuzhiyun #define NAU8822_BCLKDIV_16 (0x4 << 2) 124*4882a593Smuzhiyun #define NAU8822_CLKM_MASK (0x1 << 8) 125*4882a593Smuzhiyun #define NAU8822_CLKM_MCLK (0x0 << 8) 126*4882a593Smuzhiyun #define NAU8822_CLKM_PLL (0x1 << 8) 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun /* NAU8822_REG_ADDITIONAL_CONTROL (0x08) */ 129*4882a593Smuzhiyun #define NAU8822_SMPLR_SFT 1 130*4882a593Smuzhiyun #define NAU8822_SMPLR_MASK (0x7 << 1) 131*4882a593Smuzhiyun #define NAU8822_SMPLR_48K (0x0 << 1) 132*4882a593Smuzhiyun #define NAU8822_SMPLR_32K (0x1 << 1) 133*4882a593Smuzhiyun #define NAU8822_SMPLR_24K (0x2 << 1) 134*4882a593Smuzhiyun #define NAU8822_SMPLR_16K (0x3 << 1) 135*4882a593Smuzhiyun #define NAU8822_SMPLR_12K (0x4 << 1) 136*4882a593Smuzhiyun #define NAU8822_SMPLR_8K (0x5 << 1) 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun /* NAU8822_REG_EQ1 (0x12) */ 139*4882a593Smuzhiyun #define NAU8822_EQ1GC_SFT 0 140*4882a593Smuzhiyun #define NAU8822_EQ1CF_SFT 5 141*4882a593Smuzhiyun #define NAU8822_EQM_SFT 8 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun /* NAU8822_REG_EQ2 (0x13) */ 144*4882a593Smuzhiyun #define NAU8822_EQ2GC_SFT 0 145*4882a593Smuzhiyun #define NAU8822_EQ2CF_SFT 5 146*4882a593Smuzhiyun #define NAU8822_EQ2BW_SFT 8 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun /* NAU8822_REG_EQ3 (0x14) */ 149*4882a593Smuzhiyun #define NAU8822_EQ3GC_SFT 0 150*4882a593Smuzhiyun #define NAU8822_EQ3CF_SFT 5 151*4882a593Smuzhiyun #define NAU8822_EQ3BW_SFT 8 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun /* NAU8822_REG_EQ4 (0x15) */ 154*4882a593Smuzhiyun #define NAU8822_EQ4GC_SFT 0 155*4882a593Smuzhiyun #define NAU8822_EQ4CF_SFT 5 156*4882a593Smuzhiyun #define NAU8822_EQ4BW_SFT 8 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun /* NAU8822_REG_EQ5 (0x16) */ 159*4882a593Smuzhiyun #define NAU8822_EQ5GC_SFT 0 160*4882a593Smuzhiyun #define NAU8822_EQ5CF_SFT 5 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun /* NAU8822_REG_ALC_CONTROL_1 (0x20) */ 163*4882a593Smuzhiyun #define NAU8822_ALCMINGAIN_SFT 0 164*4882a593Smuzhiyun #define NAU8822_ALCMXGAIN_SFT 3 165*4882a593Smuzhiyun #define NAU8822_ALCEN_SFT 7 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun /* NAU8822_REG_ALC_CONTROL_2 (0x21) */ 168*4882a593Smuzhiyun #define NAU8822_ALCSL_SFT 0 169*4882a593Smuzhiyun #define NAU8822_ALCHT_SFT 4 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun /* NAU8822_REG_ALC_CONTROL_3 (0x22) */ 172*4882a593Smuzhiyun #define NAU8822_ALCATK_SFT 0 173*4882a593Smuzhiyun #define NAU8822_ALCDCY_SFT 4 174*4882a593Smuzhiyun #define NAU8822_ALCM_SFT 8 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun /* NAU8822_REG_PLL_N (0x24) */ 177*4882a593Smuzhiyun #define NAU8822_PLLMCLK_DIV2 (0x1 << 4) 178*4882a593Smuzhiyun #define NAU8822_PLLN_MASK 0xF 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun #define NAU8822_PLLK1_SFT 18 181*4882a593Smuzhiyun #define NAU8822_PLLK1_MASK 0x3F 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun /* NAU8822_REG_PLL_K2 (0x26) */ 184*4882a593Smuzhiyun #define NAU8822_PLLK2_SFT 9 185*4882a593Smuzhiyun #define NAU8822_PLLK2_MASK 0x1FF 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun /* NAU8822_REG_PLL_K3 (0x27) */ 188*4882a593Smuzhiyun #define NAU8822_PLLK3_MASK 0x1FF 189*4882a593Smuzhiyun 190*4882a593Smuzhiyun /* System Clock Source */ 191*4882a593Smuzhiyun enum { 192*4882a593Smuzhiyun NAU8822_CLK_MCLK, 193*4882a593Smuzhiyun NAU8822_CLK_PLL, 194*4882a593Smuzhiyun }; 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun struct nau8822_pll { 197*4882a593Smuzhiyun int pre_factor; 198*4882a593Smuzhiyun int mclk_scaler; 199*4882a593Smuzhiyun int pll_frac; 200*4882a593Smuzhiyun int pll_int; 201*4882a593Smuzhiyun }; 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun /* Codec Private Data */ 204*4882a593Smuzhiyun struct nau8822 { 205*4882a593Smuzhiyun struct device *dev; 206*4882a593Smuzhiyun struct regmap *regmap; 207*4882a593Smuzhiyun int mclk_idx; 208*4882a593Smuzhiyun struct nau8822_pll pll; 209*4882a593Smuzhiyun int sysclk; 210*4882a593Smuzhiyun int div_id; 211*4882a593Smuzhiyun }; 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun #endif /* __NAU8822_H__ */ 214