0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef __CS35L35_H__
0011 #define __CS35L35_H__
0012
0013 #define CS35L35_FIRSTREG 0x01
0014 #define CS35L35_LASTREG 0x7E
0015 #define CS35L35_CHIP_ID 0x00035A35
0016 #define CS35L35_DEVID_AB 0x01
0017 #define CS35L35_DEVID_CD 0x02
0018 #define CS35L35_DEVID_E 0x03
0019 #define CS35L35_FAB_ID 0x04
0020 #define CS35L35_REV_ID 0x05
0021 #define CS35L35_PWRCTL1 0x06
0022 #define CS35L35_PWRCTL2 0x07
0023 #define CS35L35_PWRCTL3 0x08
0024 #define CS35L35_CLK_CTL1 0x0A
0025 #define CS35L35_CLK_CTL2 0x0B
0026 #define CS35L35_CLK_CTL3 0x0C
0027 #define CS35L35_SP_FMT_CTL1 0x0D
0028 #define CS35L35_SP_FMT_CTL2 0x0E
0029 #define CS35L35_SP_FMT_CTL3 0x0F
0030 #define CS35L35_MAG_COMP_CTL 0x13
0031 #define CS35L35_AMP_INP_DRV_CTL 0x14
0032 #define CS35L35_AMP_DIG_VOL_CTL 0x15
0033 #define CS35L35_AMP_DIG_VOL 0x16
0034 #define CS35L35_ADV_DIG_VOL 0x17
0035 #define CS35L35_PROTECT_CTL 0x18
0036 #define CS35L35_AMP_GAIN_AUD_CTL 0x19
0037 #define CS35L35_AMP_GAIN_PDM_CTL 0x1A
0038 #define CS35L35_AMP_GAIN_ADV_CTL 0x1B
0039 #define CS35L35_GPI_CTL 0x1C
0040 #define CS35L35_BST_CVTR_V_CTL 0x1D
0041 #define CS35L35_BST_PEAK_I 0x1E
0042 #define CS35L35_BST_RAMP_CTL 0x20
0043 #define CS35L35_BST_CONV_COEF_1 0x21
0044 #define CS35L35_BST_CONV_COEF_2 0x22
0045 #define CS35L35_BST_CONV_SLOPE_COMP 0x23
0046 #define CS35L35_BST_CONV_SW_FREQ 0x24
0047 #define CS35L35_CLASS_H_CTL 0x30
0048 #define CS35L35_CLASS_H_HEADRM_CTL 0x31
0049 #define CS35L35_CLASS_H_RELEASE_RATE 0x32
0050 #define CS35L35_CLASS_H_FET_DRIVE_CTL 0x33
0051 #define CS35L35_CLASS_H_VP_CTL 0x34
0052 #define CS35L35_CLASS_H_STATUS 0x38
0053 #define CS35L35_VPBR_CTL 0x3A
0054 #define CS35L35_VPBR_VOL_CTL 0x3B
0055 #define CS35L35_VPBR_TIMING_CTL 0x3C
0056 #define CS35L35_VPBR_MODE_VOL_CTL 0x3D
0057 #define CS35L35_VPBR_ATTEN_STATUS 0x4B
0058 #define CS35L35_SPKR_MON_CTL 0x4E
0059 #define CS35L35_IMON_SCALE_CTL 0x51
0060 #define CS35L35_AUDIN_RXLOC_CTL 0x52
0061 #define CS35L35_ADVIN_RXLOC_CTL 0x53
0062 #define CS35L35_VMON_TXLOC_CTL 0x54
0063 #define CS35L35_IMON_TXLOC_CTL 0x55
0064 #define CS35L35_VPMON_TXLOC_CTL 0x56
0065 #define CS35L35_VBSTMON_TXLOC_CTL 0x57
0066 #define CS35L35_VPBR_STATUS_TXLOC_CTL 0x58
0067 #define CS35L35_ZERO_FILL_LOC_CTL 0x59
0068 #define CS35L35_AUDIN_DEPTH_CTL 0x5A
0069 #define CS35L35_SPKMON_DEPTH_CTL 0x5B
0070 #define CS35L35_SUPMON_DEPTH_CTL 0x5C
0071 #define CS35L35_ZEROFILL_DEPTH_CTL 0x5D
0072 #define CS35L35_MULT_DEV_SYNCH1 0x62
0073 #define CS35L35_MULT_DEV_SYNCH2 0x63
0074 #define CS35L35_PROT_RELEASE_CTL 0x64
0075 #define CS35L35_DIAG_MODE_REG_LOCK 0x68
0076 #define CS35L35_DIAG_MODE_CTL_1 0x69
0077 #define CS35L35_DIAG_MODE_CTL_2 0x6A
0078 #define CS35L35_INT_MASK_1 0x70
0079 #define CS35L35_INT_MASK_2 0x71
0080 #define CS35L35_INT_MASK_3 0x72
0081 #define CS35L35_INT_MASK_4 0x73
0082 #define CS35L35_INT_STATUS_1 0x74
0083 #define CS35L35_INT_STATUS_2 0x75
0084 #define CS35L35_INT_STATUS_3 0x76
0085 #define CS35L35_INT_STATUS_4 0x77
0086 #define CS35L35_PLL_STATUS 0x78
0087 #define CS35L35_OTP_TRIM_STATUS 0x7E
0088
0089 #define CS35L35_MAX_REGISTER 0x7F
0090
0091
0092 #define CS35L35_SFT_RST 0x80
0093 #define CS35L35_DISCHG_FLT 0x02
0094 #define CS35L35_PDN_ALL 0x01
0095
0096
0097 #define CS35L35_PDN_VMON 0x80
0098 #define CS35L35_PDN_IMON 0x40
0099 #define CS35L35_PDN_CLASSH 0x20
0100 #define CS35L35_PDN_VPBR 0x10
0101 #define CS35L35_PDN_BST 0x04
0102 #define CS35L35_PDN_AMP 0x01
0103
0104
0105 #define CS35L35_PDN_VBSTMON_OUT 0x10
0106 #define CS35L35_PDN_VMON_OUT 0x08
0107
0108 #define CS35L35_AUDIN_DEPTH_MASK 0x03
0109 #define CS35L35_AUDIN_DEPTH_SHIFT 0
0110 #define CS35L35_ADVIN_DEPTH_MASK 0x0C
0111 #define CS35L35_ADVIN_DEPTH_SHIFT 2
0112 #define CS35L35_SDIN_DEPTH_8 0x01
0113 #define CS35L35_SDIN_DEPTH_16 0x02
0114 #define CS35L35_SDIN_DEPTH_24 0x03
0115
0116 #define CS35L35_SDOUT_DEPTH_8 0x01
0117 #define CS35L35_SDOUT_DEPTH_12 0x02
0118 #define CS35L35_SDOUT_DEPTH_16 0x03
0119
0120 #define CS35L35_AUD_IN_LR_MASK 0x80
0121 #define CS35L35_AUD_IN_LR_SHIFT 7
0122 #define CS35L35_ADV_IN_LR_MASK 0x80
0123 #define CS35L35_ADV_IN_LR_SHIFT 7
0124 #define CS35L35_AUD_IN_LOC_MASK 0x0F
0125 #define CS35L35_AUD_IN_LOC_SHIFT 0
0126 #define CS35L35_ADV_IN_LOC_MASK 0x0F
0127 #define CS35L35_ADV_IN_LOC_SHIFT 0
0128
0129 #define CS35L35_IMON_DEPTH_MASK 0x03
0130 #define CS35L35_IMON_DEPTH_SHIFT 0
0131 #define CS35L35_VMON_DEPTH_MASK 0x0C
0132 #define CS35L35_VMON_DEPTH_SHIFT 2
0133 #define CS35L35_VBSTMON_DEPTH_MASK 0x03
0134 #define CS35L35_VBSTMON_DEPTH_SHIFT 0
0135 #define CS35L35_VPMON_DEPTH_MASK 0x0C
0136 #define CS35L35_VPMON_DEPTH_SHIFT 2
0137 #define CS35L35_VPBRSTAT_DEPTH_MASK 0x30
0138 #define CS35L35_VPBRSTAT_DEPTH_SHIFT 4
0139 #define CS35L35_ZEROFILL_DEPTH_MASK 0x03
0140 #define CS35L35_ZEROFILL_DEPTH_SHIFT 0x00
0141
0142 #define CS35L35_MON_TXLOC_MASK 0x3F
0143 #define CS35L35_MON_TXLOC_SHIFT 0
0144 #define CS35L35_MON_FRM_MASK 0x80
0145 #define CS35L35_MON_FRM_SHIFT 7
0146
0147 #define CS35L35_IMON_SCALE_MASK 0xF8
0148 #define CS35L35_IMON_SCALE_SHIFT 3
0149
0150 #define CS35L35_MS_MASK 0x80
0151 #define CS35L35_MS_SHIFT 7
0152 #define CS35L35_SPMODE_MASK 0x40
0153 #define CS35L35_SP_DRV_MASK 0x10
0154 #define CS35L35_SP_DRV_SHIFT 4
0155 #define CS35L35_CLK_CTL2_MASK 0xFF
0156 #define CS35L35_PDM_MODE_MASK 0x40
0157 #define CS35L35_PDM_MODE_SHIFT 6
0158 #define CS35L35_CLK_SOURCE_MASK 0x03
0159 #define CS35L35_CLK_SOURCE_SHIFT 0
0160 #define CS35L35_CLK_SOURCE_MCLK 0
0161 #define CS35L35_CLK_SOURCE_SCLK 1
0162 #define CS35L35_CLK_SOURCE_PDM 2
0163
0164 #define CS35L35_SP_SCLKS_MASK 0x0F
0165 #define CS35L35_SP_SCLKS_SHIFT 0x00
0166 #define CS35L35_SP_SCLKS_16FS 0x03
0167 #define CS35L35_SP_SCLKS_32FS 0x07
0168 #define CS35L35_SP_SCLKS_48FS 0x0B
0169 #define CS35L35_SP_SCLKS_64FS 0x0F
0170 #define CS35L35_SP_RATE_MASK 0xC0
0171 #define CS35L35_SP_RATE_SHIFT 6
0172
0173 #define CS35L35_PDN_BST_MASK 0x06
0174 #define CS35L35_PDN_BST_FETON_SHIFT 1
0175 #define CS35L35_PDN_BST_FETOFF_SHIFT 2
0176 #define CS35L35_PWR2_PDN_MASK 0xE0
0177 #define CS35L35_PWR3_PDN_MASK 0x1E
0178 #define CS35L35_PDN_ALL_MASK 0x01
0179 #define CS35L35_DISCHG_FILT_MASK 0x02
0180 #define CS35L35_DISCHG_FILT_SHIFT 1
0181 #define CS35L35_MCLK_DIS_MASK 0x04
0182 #define CS35L35_MCLK_DIS_SHIFT 2
0183
0184 #define CS35L35_BST_CTL_MASK 0x7F
0185 #define CS35L35_BST_CTL_SHIFT 0
0186 #define CS35L35_BST_IPK_MASK 0x1F
0187 #define CS35L35_BST_IPK_SHIFT 0
0188 #define CS35L35_AMP_MUTE_MASK 0x20
0189 #define CS35L35_AMP_MUTE_SHIFT 5
0190 #define CS35L35_AMP_GAIN_ZC_MASK 0x10
0191 #define CS35L35_AMP_GAIN_ZC_SHIFT 4
0192
0193 #define CS35L35_AMP_DIGSFT_MASK 0x02
0194 #define CS35L35_AMP_DIGSFT_SHIFT 1
0195
0196
0197 #define CS35L35_SP_I2S_DRV_MASK 0x03
0198 #define CS35L35_SP_I2S_DRV_SHIFT 0
0199
0200
0201 #define CS35L35_BST_CONV_COEFF_MASK 0xFF
0202 #define CS35L35_BST_CONV_SLOPE_MASK 0xFF
0203 #define CS35L35_BST_CONV_LBST_MASK 0x03
0204 #define CS35L35_BST_CONV_SWFREQ_MASK 0xF0
0205
0206
0207 #define CS35L35_CH_STEREO_MASK 0x40
0208 #define CS35L35_CH_STEREO_SHIFT 6
0209 #define CS35L35_CH_BST_OVR_MASK 0x04
0210 #define CS35L35_CH_BST_OVR_SHIFT 2
0211 #define CS35L35_CH_BST_LIM_MASK 0x08
0212 #define CS35L35_CH_BST_LIM_SHIFT 3
0213 #define CS35L35_CH_MEM_DEPTH_MASK 0x01
0214 #define CS35L35_CH_MEM_DEPTH_SHIFT 0
0215 #define CS35L35_CH_HDRM_CTL_MASK 0x3F
0216 #define CS35L35_CH_HDRM_CTL_SHIFT 0
0217 #define CS35L35_CH_REL_RATE_MASK 0xFF
0218 #define CS35L35_CH_REL_RATE_SHIFT 0
0219 #define CS35L35_CH_WKFET_DIS_MASK 0x80
0220 #define CS35L35_CH_WKFET_DIS_SHIFT 7
0221 #define CS35L35_CH_WKFET_DEL_MASK 0x70
0222 #define CS35L35_CH_WKFET_DEL_SHIFT 4
0223 #define CS35L35_CH_WKFET_THLD_MASK 0x0F
0224 #define CS35L35_CH_WKFET_THLD_SHIFT 0
0225 #define CS35L35_CH_VP_AUTO_MASK 0x80
0226 #define CS35L35_CH_VP_AUTO_SHIFT 7
0227 #define CS35L35_CH_VP_RATE_MASK 0x60
0228 #define CS35L35_CH_VP_RATE_SHIFT 5
0229 #define CS35L35_CH_VP_MAN_MASK 0x1F
0230 #define CS35L35_CH_VP_MAN_SHIFT 0
0231
0232
0233 #define CS35L35_CAL_ERR_RLS 0x80
0234 #define CS35L35_SHORT_RLS 0x04
0235 #define CS35L35_OTW_RLS 0x02
0236 #define CS35L35_OTE_RLS 0x01
0237
0238
0239 #define CS35L35_INT1_CRIT_MASK 0x38
0240 #define CS35L35_INT2_CRIT_MASK 0xEF
0241 #define CS35L35_INT3_CRIT_MASK 0xEE
0242 #define CS35L35_INT4_CRIT_MASK 0xFF
0243
0244
0245 #define CS35L35_M_PDN_DONE_SHIFT 4
0246 #define CS35L35_M_PDN_DONE_MASK 0x10
0247
0248
0249 #define CS35L35_CAL_ERR 0x80
0250 #define CS35L35_OTP_ERR 0x40
0251 #define CS35L35_LRCLK_ERR 0x20
0252 #define CS35L35_SPCLK_ERR 0x10
0253 #define CS35L35_MCLK_ERR 0x08
0254 #define CS35L35_AMP_SHORT 0x04
0255 #define CS35L35_OTW 0x02
0256 #define CS35L35_OTE 0x01
0257
0258
0259 #define CS35L35_PDN_DONE 0x10
0260 #define CS35L35_VPBR_ERR 0x02
0261 #define CS35L35_VPBR_CLR 0x01
0262
0263
0264 #define CS35L35_BST_HIGH 0x10
0265 #define CS35L35_BST_HIGH_FLAG 0x08
0266 #define CS35L35_BST_IPK_FLAG 0x04
0267 #define CS35L35_LBST_SHORT 0x01
0268
0269
0270 #define CS35L35_VMON_OVFL 0x08
0271 #define CS35L35_IMON_OVFL 0x04
0272
0273 #define CS35L35_FORMATS (SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_LE | \
0274 SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
0275
0276 struct cs35l35_private {
0277 struct device *dev;
0278 struct cs35l35_platform_data pdata;
0279 struct regmap *regmap;
0280 struct regulator_bulk_data supplies[2];
0281 int num_supplies;
0282 int sysclk;
0283 int sclk;
0284 bool pdm_mode;
0285 bool i2s_mode;
0286 bool clock_consumer;
0287
0288 struct gpio_desc *reset_gpio;
0289 struct completion pdn_done;
0290 };
0291
0292 static const char * const cs35l35_supplies[] = {
0293 "VA",
0294 "VP",
0295 };
0296
0297 #endif