Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * cs35l34.h -- CS35L34 ALSA SoC audio driver
0004  *
0005  * Copyright 2016 Cirrus Logic, Inc.
0006  *
0007  * Author: Paul Handrigan <Paul.Handrigan@cirrus.com>
0008  */
0009 
0010 #ifndef __CS35L34_H__
0011 #define __CS35L34_H__
0012 
0013 #define CS35L34_CHIP_ID         0x00035A34
0014 #define CS35L34_DEVID_AB        0x01    /* Device ID A & B [RO] */
0015 #define CS35L34_DEVID_CD        0x02    /* Device ID C & D [RO] */
0016 #define CS35L34_DEVID_E         0x03    /* Device ID E [RO] */
0017 #define CS35L34_FAB_ID          0x04    /* Fab ID [RO] */
0018 #define CS35L34_REV_ID          0x05    /* Revision ID [RO] */
0019 #define CS35L34_PWRCTL1         0x06    /* Power Ctl 1 */
0020 #define CS35L34_PWRCTL2         0x07    /* Power Ctl 2 */
0021 #define CS35L34_PWRCTL3         0x08    /* Power Ctl 3 */
0022 #define CS35L34_ADSP_CLK_CTL        0x0A    /* (ADSP) Clock Ctl */
0023 #define CS35L34_MCLK_CTL        0x0B    /* Master Clocking Ctl */
0024 #define CS35L34_AMP_INP_DRV_CTL     0x14    /* Amp Input Drive Ctl */
0025 #define CS35L34_AMP_DIG_VOL_CTL     0x15    /* Amplifier Dig Volume Ctl */
0026 #define CS35L34_AMP_DIG_VOL     0x16    /* Amplifier Dig Volume */
0027 #define CS35L34_AMP_ANLG_GAIN_CTL   0x17    /* Amplifier Analog Gain Ctl */
0028 #define CS35L34_PROTECT_CTL     0x18    /* Amp Gain - Prot Ctl Param */
0029 #define CS35L34_AMP_KEEP_ALIVE_CTL  0x1A    /* Amplifier Keep Alive Ctl */
0030 #define CS35L34_BST_CVTR_V_CTL      0x1D    /* Boost Conv Voltage Ctl */
0031 #define CS35L34_BST_PEAK_I      0x1E    /* Boost Conv Peak Current */
0032 #define CS35L34_BST_RAMP_CTL        0x20    /* Boost Conv Soft Ramp Ctl */
0033 #define CS35L34_BST_CONV_COEF_1     0x21    /* Boost Conv Coefficients 1 */
0034 #define CS35L34_BST_CONV_COEF_2     0x22    /* Boost Conv Coefficients 2 */
0035 #define CS35L34_BST_CONV_SLOPE_COMP 0x23    /* Boost Conv Slope Comp */
0036 #define CS35L34_BST_CONV_SW_FREQ    0x24    /* Boost Conv L BST SW Freq */
0037 #define CS35L34_CLASS_H_CTL     0x30    /* CLS H Control */
0038 #define CS35L34_CLASS_H_HEADRM_CTL  0x31    /* CLS H Headroom Ctl */
0039 #define CS35L34_CLASS_H_RELEASE_RATE    0x32    /* CLS H Release Rate */
0040 #define CS35L34_CLASS_H_FET_DRIVE_CTL   0x33    /* CLS H Weak FET Drive Ctl */
0041 #define CS35L34_CLASS_H_STATUS      0x38    /* CLS H Status */
0042 #define CS35L34_VPBR_CTL        0x3A    /* VPBR Ctl */
0043 #define CS35L34_VPBR_VOL_CTL        0x3B    /* VPBR Volume Ctl */
0044 #define CS35L34_VPBR_TIMING_CTL     0x3C    /* VPBR Timing Ctl */
0045 #define CS35L34_PRED_MAX_ATTEN_SPK_LOAD 0x40    /* PRD Max Atten / Spkr Load */
0046 #define CS35L34_PRED_BROWNOUT_THRESH    0x41    /* PRD Brownout Threshold */
0047 #define CS35L34_PRED_BROWNOUT_VOL_CTL   0x42    /* PRD Brownout Volume Ctl */
0048 #define CS35L34_PRED_BROWNOUT_RATE_CTL  0x43    /* PRD Brownout Rate Ctl */
0049 #define CS35L34_PRED_WAIT_CTL       0x44    /* PRD Wait Ctl */
0050 #define CS35L34_PRED_ZVP_INIT_IMP_CTL   0x46    /* PRD ZVP Initial Imp Ctl */
0051 #define CS35L34_PRED_MAN_SAFE_VPI_CTL   0x47    /* PRD Manual Safe VPI Ctl */
0052 #define CS35L34_VPBR_ATTEN_STATUS   0x4B    /* VPBR Attenuation Status */
0053 #define CS35L34_PRED_BRWNOUT_ATT_STATUS 0x4C    /* PRD Brownout Atten Status */
0054 #define CS35L34_SPKR_MON_CTL        0x4E    /* Speaker Monitoring Ctl */
0055 #define CS35L34_ADSP_I2S_CTL        0x50    /* ADSP I2S Ctl */
0056 #define CS35L34_ADSP_TDM_CTL        0x51    /* ADSP TDM Ctl */
0057 #define CS35L34_TDM_TX_CTL_1_VMON   0x52    /* TDM TX Ctl 1 (VMON) */
0058 #define CS35L34_TDM_TX_CTL_2_IMON   0x53    /* TDM TX Ctl 2 (IMON) */
0059 #define CS35L34_TDM_TX_CTL_3_VPMON  0x54    /* TDM TX Ctl 3 (VPMON) */
0060 #define CS35L34_TDM_TX_CTL_4_VBSTMON    0x55    /* TDM TX Ctl 4 (VBSTMON) */
0061 #define CS35L34_TDM_TX_CTL_5_FLAG1  0x56    /* TDM TX Ctl 5 (FLAG1) */
0062 #define CS35L34_TDM_TX_CTL_6_FLAG2  0x57    /* TDM TX Ctl 6 (FLAG2) */
0063 #define CS35L34_TDM_TX_SLOT_EN_1    0x5A    /* TDM TX Slot Enable */
0064 #define CS35L34_TDM_TX_SLOT_EN_2    0x5B    /* TDM TX Slot Enable */
0065 #define CS35L34_TDM_TX_SLOT_EN_3    0x5C    /* TDM TX Slot Enable */
0066 #define CS35L34_TDM_TX_SLOT_EN_4    0x5D    /* TDM TX Slot Enable */
0067 #define CS35L34_TDM_RX_CTL_1_AUDIN  0x5E    /* TDM RX Ctl 1 */
0068 #define CS35L34_TDM_RX_CTL_3_ALIVE  0x60    /* TDM RX Ctl 3 (ALIVE) */
0069 #define CS35L34_MULT_DEV_SYNCH1     0x62    /* Multidevice Synch */
0070 #define CS35L34_MULT_DEV_SYNCH2     0x63    /* Multidevice Synch 2 */
0071 #define CS35L34_PROT_RELEASE_CTL    0x64    /* Protection Release Ctl */
0072 #define CS35L34_DIAG_MODE_REG_LOCK  0x68    /* Diagnostic Mode Reg Lock */
0073 #define CS35L34_DIAG_MODE_CTL_1     0x69    /* Diagnostic Mode Ctl 1 */
0074 #define CS35L34_DIAG_MODE_CTL_2     0x6A    /* Diagnostic Mode Ctl 2 */
0075 #define CS35L34_INT_MASK_1      0x70    /* Interrupt Mask 1 */
0076 #define CS35L34_INT_MASK_2      0x71    /* Interrupt Mask 2 */
0077 #define CS35L34_INT_MASK_3      0x72    /* Interrupt Mask 3 */
0078 #define CS35L34_INT_MASK_4      0x73    /* Interrupt Mask 4 */
0079 #define CS35L34_INT_STATUS_1        0x74    /* Interrupt Status 1 */
0080 #define CS35L34_INT_STATUS_2        0x75    /* Interrupt Status 2 */
0081 #define CS35L34_INT_STATUS_3        0x76    /* Interrupt Status 3 */
0082 #define CS35L34_INT_STATUS_4        0x77    /* Interrupt Status 4 */
0083 #define CS35L34_OTP_TRIM_STATUS     0x7E    /* OTP Trim Status */
0084 
0085 #define CS35L34_MAX_REGISTER        0x7F
0086 #define CS35L34_REGISTER_COUNT      0x4E
0087 
0088 #define CS35L34_MCLK_5644       5644800
0089 #define CS35L34_MCLK_6144       6144000
0090 #define CS35L34_MCLK_6          6000000
0091 #define CS35L34_MCLK_11289      11289600
0092 #define CS35L34_MCLK_12         12000000
0093 #define CS35L34_MCLK_12288      12288000
0094 
0095 /* CS35L34_PWRCTL1 */
0096 #define CS35L34_SFT_RST         (1 << 7)
0097 #define CS35L34_DISCHG_FLT      (1 << 1)
0098 #define CS35L34_PDN_ALL         1
0099 
0100 /* CS35L34_PWRCTL2 */
0101 #define CS35L34_PDN_VMON        (1 << 7)
0102 #define CS35L34_PDN_IMON        (1 << 6)
0103 #define CS35L34_PDN_CLASSH      (1 << 5)
0104 #define CS35L34_PDN_VPBR        (1 << 4)
0105 #define CS35L34_PDN_PRED        (1 << 3)
0106 #define CS35L34_PDN_BST         (1 << 2)
0107 #define CS35L34_PDN_AMP         1
0108 
0109 /* CS35L34_PWRCTL3 */
0110 #define CS35L34_MCLK_DIS        (1 << 7)
0111 #define CS35L34_PDN_VBSTMON_OUT     (1 << 4)
0112 #define CS35L34_PDN_VMON_OUT        (1 << 3)
0113 /* Tristate the ADSP SDOUT when in I2C mode */
0114 #define CS35L34_PDN_SDOUT       (1 << 2)
0115 #define CS35L34_PDN_SDIN        (1 << 1)
0116 #define CS35L34_PDN_TDM         1
0117 
0118 /* CS35L34_ADSP_CLK_CTL */
0119 #define CS35L34_ADSP_RATE       0xF
0120 #define CS35L34_ADSP_DRIVE      (1 << 4)
0121 #define CS35L34_ADSP_M_S        (1 << 7)
0122 
0123 /* CS35L34_MCLK_CTL */
0124 #define CS35L34_MCLK_DIV        (1 << 4)
0125 #define CS35L34_MCLK_RATE_MASK      0x7
0126 #define CS35L34_MCLK_RATE_6P1440    0x2
0127 #define CS35L34_MCLK_RATE_6P0000    0x1
0128 #define CS35L34_MCLK_RATE_5P6448    0x0
0129 #define CS35L34_MCLKDIS         (1 << 7)
0130 #define CS35L34_MCLKDIV2        (1 << 6)
0131 #define CS35L34_SDOUT_3ST_TDM       (1 << 5)
0132 #define CS35L34_INT_FS_RATE     (1 << 4)
0133 #define CS35L34_ADSP_FS         0xF
0134 
0135 /* CS35L34_AMP_INP_DRV_CTL */
0136 #define CS35L34_DRV_STR_SRC     (1 << 1)
0137 #define CS35L34_DRV_STR         1
0138 
0139 /* CS35L34_AMP_DIG_VOL_CTL */
0140 #define CS35L34_AMP_DSR_RATE_MASK   0xF0
0141 #define CS35L34_AMP_DSR_RATE_SHIFT  (1 << 4)
0142 #define CS35L34_NOTCH_DIS       (1 << 3)
0143 #define CS35L34_AMP_DIGSFT      (1 << 1)
0144 #define CS35L34_INV         1
0145 
0146 /* CS35L34_PROTECT_CTL */
0147 #define CS35L34_OTW_ATTN_MASK       0xC
0148 #define CS35L34_OTW_THRD_MASK       0x3
0149 #define CS35L34_MUTE            (1 << 5)
0150 #define CS35L34_GAIN_ZC         (1 << 4)
0151 #define CS35L34_GAIN_ZC_MASK        0x10
0152 #define CS35L34_GAIN_ZC_SHIFT       4
0153 
0154 /* CS35L34_AMP_KEEP_ALIVE_CTL */
0155 #define CS35L34_ALIVE_WD_DIS        (1 << 2)
0156 
0157 /* CS35L34_BST_CVTR_V_CTL */
0158 #define CS35L34_BST_CVTL_MASK       0x3F
0159 
0160 /* CS35L34_BST_PEAK_I */
0161 #define CS35L34_BST_PEAK_MASK       0x3F
0162 
0163 /* CS35L34_ADSP_I2S_CTL */
0164 #define CS35L34_I2S_LOC_MASK        0xC
0165 #define CS35L34_I2S_LOC_SHIFT       2
0166 
0167 /* CS35L34_MULT_DEV_SYNCH2 */
0168 #define CS35L34_SYNC2_MASK      0xF
0169 
0170 /* CS35L34_PROT_RELEASE_CTL */
0171 #define CS35L34_CAL_ERR_RLS     (1 << 7)
0172 #define CS35L34_SHORT_RLS       (1 << 2)
0173 #define CS35L34_OTW_RLS         (1 << 1)
0174 #define CS35L34_OTE_RLS         1
0175 
0176 /* CS35L34_INT_MASK_1 */
0177 #define CS35L34_M_CAL_ERR_SHIFT     7
0178 #define CS35L34_M_CAL_ERR       (1 << CS35L34_M_CAL_ERR_SHIFT)
0179 #define CS35L34_M_ALIVE_ERR_SHIFT   5
0180 #define CS35L34_M_ALIVE_ERR     (1 << CS35L34_M_ALIVE_ERR_SHIFT)
0181 #define CS35L34_M_ADSP_CLK_SHIFT    4
0182 #define CS35L34_M_ADSP_CLK_ERR      (1 << CS35L34_M_ADSP_CLK_SHIFT)
0183 #define CS35L34_M_MCLK_SHIFT        3
0184 #define CS35L34_M_MCLK_ERR      (1 << CS35L34_M_MCLK_SHIFT)
0185 #define CS35L34_M_AMP_SHORT_SHIFT   2
0186 #define CS35L34_M_AMP_SHORT     (1 << CS35L34_M_AMP_SHORT_SHIFT)
0187 #define CS35L34_M_OTW_SHIFT     1
0188 #define CS35L34_M_OTW           (1 << CS35L34_M_OTW_SHIFT)
0189 #define CS35L34_M_OTE_SHIFT     0
0190 #define CS35L34_M_OTE           (1 << CS35L34_M_OTE_SHIFT)
0191 
0192 /* CS35L34_INT_MASK_2 */
0193 #define CS35L34_M_PDN_DONE_SHIFT    4
0194 #define CS35L34_M_PDN_DONE      (1 << CS35L34_M_PDN_DONE_SHIFT)
0195 #define CS35L34_M_PRED_SHIFT        3
0196 #define CS35L34_M_PRED_ERR      (1 << CS35L34_M_PRED_SHIFT)
0197 #define CS35L34_M_PRED_CLR_SHIFT    2
0198 #define CS35L34_M_PRED_CLR      (1 << CS35L34_M_PRED_CLR_SHIFT)
0199 #define CS35L34_M_VPBR_SHIFT        1
0200 #define CS35L34_M_VPBR_ERR      (1 << CS35L34_M_VPBR_SHIFT)
0201 #define CS35L34_M_VPBR_CLR_SHIFT    0
0202 #define CS35L34_M_VPBR_CLR      (1 << CS35L34_M_VPBR_CLR_SHIFT)
0203 
0204 /* CS35L34_INT_MASK_3 */
0205 #define CS35L34_M_BST_HIGH_SHIFT    4
0206 #define CS35L34_M_BST_HIGH      (1 << CS35L34_M_BST_HIGH_SHIFT)
0207 #define CS35L34_M_BST_HIGH_FLAG_SHIFT   3
0208 #define CS35L34_M_BST_HIGH_FLAG     (1 << CS35L34_M_BST_HIGH_FLAG_SHIFT)
0209 #define CS35L34_M_BST_IPK_FLAG_SHIFT    2
0210 #define CS35L34_M_BST_IPK_FLAG      (1 << CS35L34_M_BST_IPK_FLAG_SHIFT)
0211 #define CS35L34_M_LBST_SHORT_SHIFT  0
0212 #define CS35L34_M_LBST_SHORT        (1 << CS35L34_M_LBST_SHORT_SHIFT)
0213 
0214 /* CS35L34_INT_MASK_4 */
0215 #define CS35L34_M_VMON_OVFL_SHIFT   3
0216 #define CS35L34_M_VMON_OVFL     (1 << CS35L34_M_VMON_OVFL_SHIFT)
0217 #define CS35L34_M_IMON_OVFL_SHIFT   2
0218 #define CS35L34_M_IMON_OVFL     (1 << CS35L34_M_IMON_OVFL_SHIFT)
0219 #define CS35L34_M_VPMON_OVFL_SHIFT  1
0220 #define CS35L34_M_VPMON_OVFL        (1 << CS35L34_M_VPMON_OVFL_SHIFT)
0221 #define CS35L34_M_VBSTMON_OVFL_SHIFT    1
0222 #define CS35L34_M_VBSTMON_OVFL      (1 << CS35L34_M_VBSTMON_OVFL_SHIFT)
0223 
0224 /* CS35L34_INT_1 */
0225 #define CS35L34_CAL_ERR         (1 << CS35L34_M_CAL_ERR_SHIFT)
0226 #define CS35L34_ALIVE_ERR       (1 << CS35L34_M_ALIVE_ERR_SHIFT)
0227 #define CS35L34_M_ADSP_CLK_ERR      (1 << CS35L34_M_ADSP_CLK_SHIFT)
0228 #define CS35L34_MCLK_ERR        (1 << CS35L34_M_MCLK_SHIFT)
0229 #define CS35L34_AMP_SHORT       (1 << CS35L34_M_AMP_SHORT_SHIFT)
0230 #define CS35L34_OTW         (1 << CS35L34_M_OTW_SHIFT)
0231 #define CS35L34_OTE         (1 << CS35L34_M_OTE_SHIFT)
0232 
0233 /* CS35L34_INT_2 */
0234 #define CS35L34_PDN_DONE        (1 << CS35L34_M_PDN_DONE_SHIFT)
0235 #define CS35L34_PRED_ERR        (1 << CS35L34_M_PRED_SHIFT)
0236 #define CS35L34_PRED_CLR        (1 << CS35L34_M_PRED_CLR_SHIFT)
0237 #define CS35L34_VPBR_ERR        (1 << CS35L34_M_VPBR_SHIFT)
0238 #define CS35L34_VPBR_CLR        (1 << CS35L34_M_VPBR_CLR_SHIFT)
0239 
0240 /* CS35L34_INT_3 */
0241 #define CS35L34_BST_HIGH        (1 << CS35L34_M_BST_HIGH_SHIFT)
0242 #define CS35L34_BST_HIGH_FLAG       (1 << CS35L34_M_BST_HIGH_FLAG_SHIFT)
0243 #define CS35L34_BST_IPK_FLAG        (1 << CS35L34_M_BST_IPK_FLAG_SHIFT)
0244 #define CS35L34_LBST_SHORT      (1 << CS35L34_M_LBST_SHORT_SHIFT)
0245 
0246 /* CS35L34_INT_4 */
0247 #define CS35L34_VMON_OVFL       (1 << CS35L34_M_VMON_OVFL_SHIFT)
0248 #define CS35L34_IMON_OVFL       (1 << CS35L34_M_IMON_OVFL_SHIFT)
0249 #define CS35L34_VPMON_OVFL      (1 << CS35L34_M_VPMON_OVFL_SHIFT)
0250 #define CS35L34_VBSTMON_OVFL        (1 << CS35L34_M_VBSTMON_OVFL_SHIFT)
0251 
0252 /* CS35L34_{RX,TX}_X */
0253 #define CS35L34_X_STATE_SHIFT       7
0254 #define CS35L34_X_STATE         (1 << CS35L34_X_STATE_SHIFT)
0255 #define CS35L34_X_LOC_SHIFT     0
0256 #define CS35L34_X_LOC           (0x1F << CS35L34_X_LOC_SHIFT)
0257 
0258 #define CS35L34_RATES (SNDRV_PCM_RATE_48000 | \
0259             SNDRV_PCM_RATE_44100 | \
0260             SNDRV_PCM_RATE_32000)
0261 #define CS35L34_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
0262             SNDRV_PCM_FMTBIT_S24_LE | \
0263             SNDRV_PCM_FMTBIT_S32_LE)
0264 
0265 #endif