Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * cs42l52.h -- CS42L52 ALSA SoC audio driver
0004  *
0005  * Copyright 2012 CirrusLogic, Inc.
0006  *
0007  * Author: Georgi Vlaev <joe@nucleusys.com>
0008  * Author: Brian Austin <brian.austin@cirrus.com>
0009  */
0010 
0011 #ifndef __CS42L52_H__
0012 #define __CS42L52_H__
0013 
0014 #define CS42L52_NAME                "CS42L52"
0015 #define CS42L52_DEFAULT_CLK         12000000
0016 #define CS42L52_MIN_CLK             11000000
0017 #define CS42L52_MAX_CLK             27000000
0018 #define CS42L52_DEFAULT_FORMAT          SNDRV_PCM_FMTBIT_S16_LE
0019 #define CS42L52_DEFAULT_MAX_CHANS       2
0020 #define CS42L52_SYSCLK              1
0021 
0022 #define CS42L52_CHIP_SWICTH         (1 << 17)
0023 #define CS42L52_ALL_IN_ONE          (1 << 16)
0024 #define CS42L52_CHIP_ONE            0x00
0025 #define CS42L52_CHIP_TWO            0x01
0026 #define CS42L52_CHIP_THR            0x02
0027 #define CS42L52_CHIP_MASK           0x0f
0028 
0029 #define CS42L52_FIX_BITS_CTL            0x00
0030 #define CS42L52_CHIP                0x01
0031 #define CS42L52_CHIP_ID             0xE0
0032 #define CS42L52_CHIP_ID_MASK            0xF8
0033 #define CS42L52_CHIP_REV_A0         0x00
0034 #define CS42L52_CHIP_REV_A1         0x01
0035 #define CS42L52_CHIP_REV_B0         0x02
0036 #define CS42L52_CHIP_REV_MASK           0x07
0037 
0038 #define CS42L52_PWRCTL1             0x02
0039 #define CS42L52_PWRCTL1_PDN_ALL         0x9F
0040 #define CS42L52_PWRCTL1_PDN_CHRG        0x80
0041 #define CS42L52_PWRCTL1_PDN_PGAB        0x10
0042 #define CS42L52_PWRCTL1_PDN_PGAA        0x08
0043 #define CS42L52_PWRCTL1_PDN_ADCB        0x04
0044 #define CS42L52_PWRCTL1_PDN_ADCA        0x02
0045 #define CS42L52_PWRCTL1_PDN_CODEC       0x01
0046 
0047 #define CS42L52_PWRCTL2             0x03
0048 #define CS42L52_PWRCTL2_OVRDB           (1 << 4)
0049 #define CS42L52_PWRCTL2_OVRDA           (1 << 3)
0050 #define CS42L52_PWRCTL2_PDN_MICB        (1 << 2)
0051 #define CS42L52_PWRCTL2_PDN_MICB_SHIFT      2
0052 #define CS42L52_PWRCTL2_PDN_MICA        (1 << 1)
0053 #define CS42L52_PWRCTL2_PDN_MICA_SHIFT      1
0054 #define CS42L52_PWRCTL2_PDN_MICBIAS     (1 << 0)
0055 #define CS42L52_PWRCTL2_PDN_MICBIAS_SHIFT   0
0056 
0057 #define CS42L52_PWRCTL3             0x04
0058 #define CS42L52_PWRCTL3_HPB_PDN_SHIFT       6
0059 #define CS42L52_PWRCTL3_HPB_ON_LOW      0x00
0060 #define CS42L52_PWRCTL3_HPB_ON_HIGH     0x01
0061 #define CS42L52_PWRCTL3_HPB_ALWAYS_ON       0x02
0062 #define CS42L52_PWRCTL3_HPB_ALWAYS_OFF      0x03
0063 #define CS42L52_PWRCTL3_HPA_PDN_SHIFT       4
0064 #define CS42L52_PWRCTL3_HPA_ON_LOW      0x00
0065 #define CS42L52_PWRCTL3_HPA_ON_HIGH     0x01
0066 #define CS42L52_PWRCTL3_HPA_ALWAYS_ON       0x02
0067 #define CS42L52_PWRCTL3_HPA_ALWAYS_OFF      0x03
0068 #define CS42L52_PWRCTL3_SPKB_PDN_SHIFT      2
0069 #define CS42L52_PWRCTL3_SPKB_ON_LOW     0x00
0070 #define CS42L52_PWRCTL3_SPKB_ON_HIGH        0x01
0071 #define CS42L52_PWRCTL3_SPKB_ALWAYS_ON      0x02
0072 #define CS42L52_PWRCTL3_PDN_SPKB        (1 << 2)
0073 #define CS42L52_PWRCTL3_PDN_SPKA        (1 << 0)
0074 #define CS42L52_PWRCTL3_SPKA_PDN_SHIFT      0
0075 #define CS42L52_PWRCTL3_SPKA_ON_LOW     0x00
0076 #define CS42L52_PWRCTL3_SPKA_ON_HIGH        0x01
0077 #define CS42L52_PWRCTL3_SPKA_ALWAYS_ON      0x02
0078 
0079 #define CS42L52_DEFAULT_OUTPUT_STATE        0x05
0080 #define CS42L52_PWRCTL3_CONF_MASK       0x03
0081 
0082 #define CS42L52_CLK_CTL             0x05
0083 #define CLK_AUTODECT_ENABLE         (1 << 7)
0084 #define CLK_SPEED_SHIFT             5
0085 #define CLK_DS_MODE             0x00
0086 #define CLK_SS_MODE             0x01
0087 #define CLK_HS_MODE             0x02
0088 #define CLK_QS_MODE             0x03
0089 #define CLK_32K_SR_SHIFT            4
0090 #define CLK_32K                 0x01
0091 #define CLK_NO_32K              0x00
0092 #define CLK_27M_MCLK_SHIFT          3
0093 #define CLK_27M_MCLK                0x01
0094 #define CLK_NO_27M              0x00
0095 #define CLK_RATIO_SHIFT             1
0096 #define CLK_R_128               0x00
0097 #define CLK_R_125               0x01
0098 #define CLK_R_132               0x02
0099 #define CLK_R_136               0x03
0100 
0101 #define CS42L52_IFACE_CTL1          0x06
0102 #define CS42L52_IFACE_CTL1_MASTER       (1 << 7)
0103 #define CS42L52_IFACE_CTL1_SLAVE        (0 << 7)
0104 #define CS42L52_IFACE_CTL1_INV_SCLK     (1 << 6)
0105 #define CS42L52_IFACE_CTL1_ADC_FMT_I2S      (1 << 5)
0106 #define CS42L52_IFACE_CTL1_ADC_FMT_LEFT_J   (0 << 5)
0107 #define CS42L52_IFACE_CTL1_DSP_MODE_EN      (1 << 4)
0108 #define CS42L52_IFACE_CTL1_DAC_FMT_LEFT_J   (0 << 2)
0109 #define CS42L52_IFACE_CTL1_DAC_FMT_I2S      (1 << 2)
0110 #define CS42L52_IFACE_CTL1_DAC_FMT_RIGHT_J  (2 << 2)
0111 #define CS42L52_IFACE_CTL1_WL_32BIT     (0x00)
0112 #define CS42L52_IFACE_CTL1_WL_24BIT     (0x01)
0113 #define CS42L52_IFACE_CTL1_WL_20BIT     (0x02)
0114 #define CS42L52_IFACE_CTL1_WL_16BIT     (0x03)
0115 #define CS42L52_IFACE_CTL1_WL_MASK      0xFFFF
0116 
0117 #define CS42L52_IFACE_CTL2          0x07
0118 #define CS42L52_IFACE_CTL2_SC_MC_EQ     (1 << 6)
0119 #define CS42L52_IFACE_CTL2_LOOPBACK     (1 << 5)
0120 #define CS42L52_IFACE_CTL2_S_MODE_OUTPUT_EN (0 << 4)
0121 #define CS42L52_IFACE_CTL2_S_MODE_OUTPUT_HIZ    (1 << 4)
0122 #define CS42L52_IFACE_CTL2_HP_SW_INV        (1 << 3)
0123 #define CS42L52_IFACE_CTL2_BIAS_LVL     0x07
0124 
0125 #define CS42L52_ADC_PGA_A           0x08
0126 #define CS42L52_ADC_PGA_B           0x09
0127 #define CS42L52_ADC_SEL_SHIFT           5
0128 #define CS42L52_ADC_SEL_AIN1            0x00
0129 #define CS42L52_ADC_SEL_AIN2            0x01
0130 #define CS42L52_ADC_SEL_AIN3            0x02
0131 #define CS42L52_ADC_SEL_AIN4            0x03
0132 #define CS42L52_ADC_SEL_PGA         0x04
0133 
0134 #define CS42L52_ANALOG_HPF_CTL          0x0A
0135 #define CS42L52_HPF_CTL_ANLGSFTB        (1 << 3)
0136 #define CS42L52_HPF_CTL_ANLGSFTA                (1 << 0)
0137 
0138 #define CS42L52_ADC_HPF_FREQ            0x0B
0139 #define CS42L52_ADC_MISC_CTL            0x0C
0140 #define CS42L52_ADC_MISC_CTL_SOURCE_DSP     (1 << 6)
0141 
0142 #define CS42L52_PB_CTL1             0x0D
0143 #define CS42L52_PB_CTL1_HP_GAIN_SHIFT       5
0144 #define CS42L52_PB_CTL1_HP_GAIN_03959       0x00
0145 #define CS42L52_PB_CTL1_HP_GAIN_04571       0x01
0146 #define CS42L52_PB_CTL1_HP_GAIN_05111       0x02
0147 #define CS42L52_PB_CTL1_HP_GAIN_06047       0x03
0148 #define CS42L52_PB_CTL1_HP_GAIN_07099       0x04
0149 #define CS42L52_PB_CTL1_HP_GAIN_08399       0x05
0150 #define CS42L52_PB_CTL1_HP_GAIN_10000       0x06
0151 #define CS42L52_PB_CTL1_HP_GAIN_11430       0x07
0152 #define CS42L52_PB_CTL1_INV_PCMB        (1 << 3)
0153 #define CS42L52_PB_CTL1_INV_PCMA        (1 << 2)
0154 #define CS42L52_PB_CTL1_MSTB_MUTE       (1 << 1)
0155 #define CS42L52_PB_CTL1_MSTA_MUTE       (1 << 0)
0156 #define CS42L52_PB_CTL1_MUTE_MASK       0x03
0157 #define CS42L52_PB_CTL1_MUTE            3
0158 #define CS42L52_PB_CTL1_UNMUTE          0
0159 
0160 #define CS42L52_MISC_CTL            0x0E
0161 #define CS42L52_MISC_CTL_DEEMPH         (1 << 2)
0162 #define CS42L52_MISC_CTL_DIGSFT         (1 << 1)
0163 #define CS42L52_MISC_CTL_DIGZC          (1 << 0)
0164 
0165 #define CS42L52_PB_CTL2             0x0F
0166 #define CS42L52_PB_CTL2_HPB_MUTE        (1 << 7)
0167 #define CS42L52_PB_CTL2_HPA_MUTE        (1 << 6)
0168 #define CS42L52_PB_CTL2_SPKB_MUTE       (1 << 5)
0169 #define CS42L52_PB_CTL2_SPKA_MUTE       (1 << 4)
0170 #define CS42L52_PB_CTL2_SPK_SWAP        (1 << 2)
0171 #define CS42L52_PB_CTL2_SPK_MONO        (1 << 1)
0172 #define CS42L52_PB_CTL2_SPK_MUTE50      (1 << 0)
0173 
0174 #define CS42L52_MICA_CTL            0x10
0175 #define CS42L52_MICB_CTL            0x11
0176 #define CS42L52_MIC_CTL_MIC_SEL_MASK        0xBF
0177 #define CS42L52_MIC_CTL_MIC_SEL_SHIFT       6
0178 #define CS42L52_MIC_CTL_TYPE_MASK       0x20
0179 #define CS42L52_MIC_CTL_TYPE_SHIFT      5
0180 
0181 
0182 #define CS42L52_PGAA_CTL            0x12
0183 #define CS42L52_PGAB_CTL            0x13
0184 #define CS42L52_PGAX_CTL_VOL_12DB       24
0185 #define CS42L52_PGAX_CTL_VOL_6DB        12 /*step size 0.5db*/
0186 
0187 #define CS42L52_PASSTHRUA_VOL           0x14
0188 #define CS42L52_PASSTHRUB_VOL           0x15
0189 
0190 #define CS42L52_ADCA_VOL            0x16
0191 #define CS42L52_ADCB_VOL            0x17
0192 #define CS42L52_ADCX_VOL_24DB           24 /*step size 1db*/
0193 #define CS42L52_ADCX_VOL_12DB           12
0194 #define CS42L52_ADCX_VOL_6DB            6
0195 
0196 #define CS42L52_ADCA_MIXER_VOL          0x18
0197 #define CS42L52_ADCB_MIXER_VOL          0x19
0198 #define CS42L52_ADC_MIXER_VOL_12DB      0x18
0199 
0200 #define CS42L52_PCMA_MIXER_VOL          0x1A
0201 #define CS42L52_PCMB_MIXER_VOL          0x1B
0202 
0203 #define CS42L52_BEEP_FREQ           0x1C
0204 #define CS42L52_BEEP_VOL            0x1D
0205 #define CS42L52_BEEP_TONE_CTL           0x1E
0206 #define CS42L52_BEEP_RATE_SHIFT         4
0207 #define CS42L52_BEEP_RATE_MASK          0x0F
0208 
0209 #define CS42L52_TONE_CTL            0x1F
0210 #define CS42L52_BEEP_EN_MASK            0x3F
0211 
0212 #define CS42L52_MASTERA_VOL         0x20
0213 #define CS42L52_MASTERB_VOL         0x21
0214 
0215 #define CS42L52_HPA_VOL             0x22
0216 #define CS42L52_HPB_VOL             0x23
0217 #define CS42L52_DEFAULT_HP_VOL          0xF0
0218 
0219 #define CS42L52_SPKA_VOL            0x24
0220 #define CS42L52_SPKB_VOL            0x25
0221 #define CS42L52_DEFAULT_SPK_VOL         0xF0
0222 
0223 #define CS42L52_ADC_PCM_MIXER           0x26
0224 
0225 #define CS42L52_LIMITER_CTL1            0x27
0226 #define CS42L52_LIMITER_CTL2            0x28
0227 #define CS42L52_LIMITER_AT_RATE         0x29
0228 
0229 #define CS42L52_ALC_CTL             0x2A
0230 #define CS42L52_ALC_CTL_ALCB_ENABLE_SHIFT   7
0231 #define CS42L52_ALC_CTL_ALCA_ENABLE_SHIFT   6
0232 #define CS42L52_ALC_CTL_FASTEST_ATTACK      0
0233 
0234 #define CS42L52_ALC_RATE            0x2B
0235 #define CS42L52_ALC_SLOWEST_RELEASE     0x3F
0236 
0237 #define CS42L52_ALC_THRESHOLD           0x2C
0238 #define CS42L52_ALC_MAX_RATE_SHIFT      5
0239 #define CS42L52_ALC_MIN_RATE_SHIFT      2
0240 #define CS42L52_ALC_RATE_0DB            0
0241 #define CS42L52_ALC_RATE_3DB            1
0242 #define CS42L52_ALC_RATE_6DB            2
0243 
0244 #define CS42L52_NOISE_GATE_CTL          0x2D
0245 #define CS42L52_NG_ENABLE_SHIFT         6
0246 #define CS42L52_NG_THRESHOLD_SHIFT      2
0247 #define CS42L52_NG_MIN_70DB         2
0248 #define CS42L52_NG_DELAY_SHIFT          0
0249 #define CS42L52_NG_DELAY_100MS          1
0250 
0251 #define CS42L52_CLK_STATUS          0x2E
0252 #define CS42L52_BATT_COMPEN         0x2F
0253 
0254 #define CS42L52_BATT_LEVEL          0x30
0255 #define CS42L52_SPK_STATUS          0x31
0256 #define CS42L52_SPK_STATUS_PIN_SHIFT        3
0257 #define CS42L52_SPK_STATUS_PIN_HIGH     1
0258 
0259 #define CS42L52_TEM_CTL             0x32
0260 #define CS42L52_TEM_CTL_SET         0x80
0261 #define CS42L52_THE_FOLDBACK            0x33
0262 #define CS42L52_CHARGE_PUMP         0x34
0263 #define CS42L52_CHARGE_PUMP_MASK        0xF0
0264 #define CS42L52_CHARGE_PUMP_SHIFT       4
0265 #define CS42L52_FIX_BITS1           0x3E
0266 #define CS42L52_FIX_BITS2           0x47
0267 
0268 #define CS42L52_MAX_REGISTER            0x47
0269 
0270 #endif