Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * cs35l33.h -- CS35L33 ALSA SoC audio driver
0004  *
0005  * Copyright 2016 Cirrus Logic, Inc.
0006  *
0007  * Author: Paul Handrigan <paul.handrigan@cirrus.com>
0008  */
0009 
0010 #ifndef __CS35L33_H__
0011 #define __CS35L33_H__
0012 
0013 #define CS35L33_CHIP_ID     0x00035A33
0014 #define CS35L33_DEVID_AB    0x01    /* Device ID A & B [RO] */
0015 #define CS35L33_DEVID_CD    0x02    /* Device ID C & D [RO] */
0016 #define CS35L33_DEVID_E     0x03    /* Device ID E [RO] */
0017 #define CS35L33_FAB_ID      0x04    /* Fab ID [RO] */
0018 #define CS35L33_REV_ID      0x05    /* Revision ID [RO] */
0019 #define CS35L33_PWRCTL1     0x06    /* Power Ctl 1 */
0020 #define CS35L33_PWRCTL2     0x07    /* Power Ctl 2 */
0021 #define CS35L33_CLK_CTL     0x08    /* Clock Ctl */
0022 #define CS35L33_BST_PEAK_CTL    0x09    /* Max Current for Boost */
0023 #define CS35L33_PROTECT_CTL 0x0A    /* Amp Protection Parameters */
0024 #define CS35L33_BST_CTL1    0x0B    /* Boost Converter CTL1 */
0025 #define CS35L33_BST_CTL2    0x0C    /* Boost Converter CTL2 */
0026 #define CS35L33_ADSP_CTL    0x0D    /* Serial Port Control */
0027 #define CS35L33_ADC_CTL     0x0E    /* ADC Control */
0028 #define CS35L33_DAC_CTL     0x0F    /* DAC Control */
0029 #define CS35L33_DIG_VOL_CTL 0x10    /* Digital Volume CTL */
0030 #define CS35L33_CLASSD_CTL  0x11    /* Class D Amp CTL */
0031 #define CS35L33_AMP_CTL     0x12    /* Amp Gain/Protecton Release CTL */
0032 #define CS35L33_INT_MASK_1  0x13    /* Interrupt Mask 1 */
0033 #define CS35L33_INT_MASK_2  0x14    /* Interrupt Mask 2 */
0034 #define CS35L33_INT_STATUS_1    0x15    /* Interrupt Status 1 [RO] */
0035 #define CS35L33_INT_STATUS_2    0x16    /* Interrupt Status 2 [RO] */
0036 #define CS35L33_DIAG_LOCK   0x17    /* Diagnostic Mode Register Lock */
0037 #define CS35L33_DIAG_CTRL_1 0x18    /* Diagnostic Mode Register Control */
0038 #define CS35L33_DIAG_CTRL_2 0x19    /* Diagnostic Mode Register Control 2 */
0039 #define CS35L33_HG_MEMLDO_CTL   0x23    /* H/G Memory/LDO CTL */
0040 #define CS35L33_HG_REL_RATE 0x24    /* H/G Release Rate */
0041 #define CS35L33_LDO_DEL     0x25    /* LDO Entry Delay/VPhg Control 1 */
0042 #define CS35L33_HG_HEAD     0x29    /* H/G Headroom */
0043 #define CS35L33_HG_EN       0x2A    /* H/G Enable/VPhg CNT2 */
0044 #define CS35L33_TX_VMON     0x2D    /* TDM TX Control 1 (VMON) */
0045 #define CS35L33_TX_IMON     0x2E    /* TDM TX Control 2 (IMON) */
0046 #define CS35L33_TX_VPMON    0x2F    /* TDM TX Control 3 (VPMON) */
0047 #define CS35L33_TX_VBSTMON  0x30    /* TDM TX Control 4 (VBSTMON) */
0048 #define CS35L33_TX_FLAG     0x31    /* TDM TX Control 5 (FLAG) */
0049 #define CS35L33_TX_EN1      0x32    /* TDM TX Enable 1 */
0050 #define CS35L33_TX_EN2      0x33    /* TDM TX Enable 2 */
0051 #define CS35L33_TX_EN3      0x34    /* TDM TX Enable 3 */
0052 #define CS35L33_TX_EN4      0x35    /* TDM TX Enable 4 */
0053 #define CS35L33_RX_AUD      0x36    /* TDM RX Control 1 */
0054 #define CS35L33_RX_SPLY     0x37    /* TDM RX Control 2 */
0055 #define CS35L33_RX_ALIVE    0x38    /* TDM RX Control 3 */
0056 #define CS35L33_BST_CTL4    0x39    /* Boost Converter Control 4 */
0057 #define CS35L33_HG_STATUS   0x3F    /* H/G Status */
0058 #define CS35L33_MAX_REGISTER    0x59
0059 
0060 #define CS35L33_MCLK_5644   5644800
0061 #define CS35L33_MCLK_6144   6144000
0062 #define CS35L33_MCLK_6      6000000
0063 #define CS35L33_MCLK_11289  11289600
0064 #define CS35L33_MCLK_12     12000000
0065 #define CS35L33_MCLK_12288  12288000
0066 
0067 /* CS35L33_PWRCTL1 */
0068 #define CS35L33_PDN_AMP         (1 << 7)
0069 #define CS35L33_PDN_BST         (1 << 2)
0070 #define CS35L33_PDN_ALL         1
0071 
0072 /* CS35L33_PWRCTL2 */
0073 #define CS35L33_PDN_VMON_SHIFT      7
0074 #define CS35L33_PDN_VMON        (1 << CS35L33_PDN_VMON_SHIFT)
0075 #define CS35L33_PDN_IMON_SHIFT      6
0076 #define CS35L33_PDN_IMON        (1 << CS35L33_PDN_IMON_SHIFT)
0077 #define CS35L33_PDN_VPMON_SHIFT     5
0078 #define CS35L33_PDN_VPMON       (1 << CS35L33_PDN_VPMON_SHIFT)
0079 #define CS35L33_PDN_VBSTMON_SHIFT   4
0080 #define CS35L33_PDN_VBSTMON     (1 << CS35L33_PDN_VBSTMON_SHIFT)
0081 #define CS35L33_SDOUT_3ST_I2S_SHIFT 3
0082 #define CS35L33_SDOUT_3ST_I2S       (1 << CS35L33_SDOUT_3ST_I2S_SHIFT)
0083 #define CS35L33_PDN_SDIN_SHIFT      2
0084 #define CS35L33_PDN_SDIN        (1 << CS35L33_PDN_SDIN_SHIFT)
0085 #define CS35L33_PDN_TDM_SHIFT       1
0086 #define CS35L33_PDN_TDM         (1 << CS35L33_PDN_TDM_SHIFT)
0087 
0088 /* CS35L33_CLK_CTL */
0089 #define CS35L33_MCLKDIS         (1 << 7)
0090 #define CS35L33_MCLKDIV2        (1 << 6)
0091 #define CS35L33_SDOUT_3ST_TDM       (1 << 5)
0092 #define CS35L33_INT_FS_RATE     (1 << 4)
0093 #define CS35L33_ADSP_FS         0xF
0094 
0095 /* CS35L33_PROTECT_CTL */
0096 #define CS35L33_ALIVE_WD_DIS        (3 << 2)
0097 
0098 /* CS35L33_BST_CTL1 */
0099 #define CS35L33_BST_CTL_SRC     (1 << 6)
0100 #define CS35L33_BST_CTL_SHIFT       (1 << 5)
0101 #define CS35L33_BST_CTL_MASK        0x3F
0102 
0103 /* CS35L33_BST_CTL2 */
0104 #define CS35L33_TDM_WD_SEL      (1 << 4)
0105 #define CS35L33_ALIVE_WD_DIS2       (1 << 3)
0106 #define CS35L33_VBST_SR_STEP        0x3
0107 
0108 /* CS35L33_ADSP_CTL */
0109 #define CS35L33_ADSP_DRIVE      (1 << 7)
0110 #define CS35L33_MS_MASK         (1 << 6)
0111 #define CS35L33_SDIN_LOC        (3 << 4)
0112 #define CS35L33_ALIVE_RATE      0x3
0113 
0114 /* CS35L33_ADC_CTL */
0115 #define CS35L33_INV_VMON        (1 << 7)
0116 #define CS35L33_INV_IMON        (1 << 6)
0117 #define CS35L33_ADC_NOTCH_DIS       (1 << 5)
0118 #define CS35L33_IMON_SCALE      0xF
0119 
0120 /* CS35L33_DAC_CTL */
0121 #define CS35L33_INV_DAC         (1 << 7)
0122 #define CS35L33_DAC_NOTCH_DIS       (1 << 5)
0123 #define CS35L33_DIGSFT          (1 << 4)
0124 #define CS35L33_DSR_RATE        0xF
0125 
0126 /* CS35L33_CLASSD_CTL */
0127 #define CS35L33_AMP_SD          (1 << 6)
0128 #define CS35L33_AMP_DRV_SEL_SRC     (1 << 5)
0129 #define CS35L33_AMP_DRV_SEL_MASK    0x10
0130 #define CS35L33_AMP_DRV_SEL_SHIFT   4
0131 #define CS35L33_AMP_CAL         (1 << 3)
0132 #define CS35L33_GAIN_CHG_ZC_MASK    0x04
0133 #define CS35L33_GAIN_CHG_ZC_SHIFT   2
0134 #define CS35L33_CLASS_D_CTL_MASK    0x3F
0135 
0136 /* CS35L33_AMP_CTL */
0137 #define CS35L33_AMP_GAIN        0xF0
0138 #define CS35L33_CAL_ERR_RLS     (1 << 3)
0139 #define CS35L33_AMP_SHORT_RLS       (1 << 2)
0140 #define CS35L33_OTW_RLS         (1 << 1)
0141 #define CS35L33_OTE_RLS         1
0142 
0143 /* CS35L33_INT_MASK_1 */
0144 #define CS35L33_M_CAL_ERR_SHIFT     6
0145 #define CS35L33_M_CAL_ERR       (1 << CS35L33_M_CAL_ERR_SHIFT)
0146 #define CS35L33_M_ALIVE_ERR_SHIFT   5
0147 #define CS35L33_M_ALIVE_ERR     (1 << CS35L33_M_ALIVE_ERR_SHIFT)
0148 #define CS35L33_M_AMP_SHORT_SHIFT   2
0149 #define CS35L33_M_AMP_SHORT     (1 << CS35L33_M_AMP_SHORT_SHIFT)
0150 #define CS35L33_M_OTW_SHIFT     1
0151 #define CS35L33_M_OTW           (1 << CS35L33_M_OTW_SHIFT)
0152 #define CS35L33_M_OTE_SHIFT     0
0153 #define CS35L33_M_OTE           (1 << CS35L33_M_OTE_SHIFT)
0154 
0155 /* CS35L33_INT_STATUS_1 */
0156 #define CS35L33_CAL_ERR         (1 << 6)
0157 #define CS35L33_ALIVE_ERR       (1 << 5)
0158 #define CS35L33_ADSPCLK_ERR     (1 << 4)
0159 #define CS35L33_MCLK_ERR        (1 << 3)
0160 #define CS35L33_AMP_SHORT       (1 << 2)
0161 #define CS35L33_OTW         (1 << 1)
0162 #define CS35L33_OTE         (1 << 0)
0163 
0164 /* CS35L33_INT_STATUS_2 */
0165 #define CS35L33_VMON_OVFL       (1 << 7)
0166 #define CS35L33_IMON_OVFL       (1 << 6)
0167 #define CS35L33_VPMON_OVFL      (1 << 5)
0168 #define CS35L33_VBSTMON_OVFL        (1 << 4)
0169 #define CS35L33_PDN_DONE        1
0170 
0171 /* CS35L33_BST_CTL4 */
0172 #define CS35L33_BST_RGS         0x70
0173 #define CS35L33_BST_COEFF3      0xF
0174 
0175 /* CS35L33_HG_MEMLDO_CTL */
0176 #define CS35L33_MEM_DEPTH_SHIFT     5
0177 #define CS35L33_MEM_DEPTH_MASK      (0x3 << CS35L33_MEM_DEPTH_SHIFT)
0178 #define CS35L33_LDO_THLD_SHIFT      1
0179 #define CS35L33_LDO_THLD_MASK       (0xF << CS35L33_LDO_THLD_SHIFT)
0180 #define CS35L33_LDO_DISABLE_SHIFT   0
0181 #define CS35L33_LDO_DISABLE_MASK    (0x1 << CS35L33_LDO_DISABLE_SHIFT)
0182 
0183 /* CS35L33_LDO_DEL */
0184 #define CS35L33_VP_HG_VA_SHIFT      5
0185 #define CS35L33_VP_HG_VA_MASK       (0x7 << CS35L33_VP_HG_VA_SHIFT)
0186 #define CS35L33_LDO_ENTRY_DELAY_SHIFT   2
0187 #define CS35L33_LDO_ENTRY_DELAY_MASK    (0x7 << CS35L33_LDO_ENTRY_DELAY_SHIFT)
0188 #define CS35L33_VP_HG_RATE_SHIFT    0
0189 #define CS35L33_VP_HG_RATE_MASK     (0x3 << CS35L33_VP_HG_RATE_SHIFT)
0190 
0191 /* CS35L33_HG_HEAD */
0192 #define CS35L33_HD_RM_SHIFT     0
0193 #define CS35L33_HD_RM_MASK      (0x7F << CS35L33_HD_RM_SHIFT)
0194 
0195 /* CS35L33_HG_EN */
0196 #define CS35L33_CLASS_HG_ENA_SHIFT  7
0197 #define CS35L33_CLASS_HG_EN_MASK    (0x1 << CS35L33_CLASS_HG_ENA_SHIFT)
0198 #define CS35L33_VP_HG_AUTO_SHIFT    6
0199 #define CS35L33_VP_HG_AUTO_MASK     (0x1 << 6)
0200 #define CS35L33_VP_HG_SHIFT     0
0201 #define CS35L33_VP_HG_MASK      (0x1F << CS35L33_VP_HG_SHIFT)
0202 
0203 #define CS35L33_RATES (SNDRV_PCM_RATE_8000_48000)
0204 #define CS35L33_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
0205             SNDRV_PCM_FMTBIT_S24_LE)
0206 
0207 /* CS35L33_{RX,TX}_X */
0208 #define CS35L33_X_STATE_SHIFT       7
0209 #define CS35L33_X_STATE         (1 << CS35L33_X_STATE_SHIFT)
0210 #define CS35L33_X_LOC_SHIFT     0
0211 #define CS35L33_X_LOC           (0x1F << CS35L33_X_LOC_SHIFT)
0212 
0213 /* CS35L33_RX_AUD */
0214 #define CS35L33_AUDIN_RX_DEPTH_SHIFT    5
0215 #define CS35L33_AUDIN_RX_DEPTH      (0x7 << CS35L33_AUDIN_RX_DEPTH_SHIFT)
0216 
0217 #endif