0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef _CS42XX8_H
0014 #define _CS42XX8_H
0015
0016 struct cs42xx8_driver_data {
0017 char name[32];
0018 int num_adcs;
0019 };
0020
0021 extern const struct dev_pm_ops cs42xx8_pm;
0022 extern const struct cs42xx8_driver_data cs42448_data;
0023 extern const struct cs42xx8_driver_data cs42888_data;
0024 extern const struct regmap_config cs42xx8_regmap_config;
0025 extern const struct of_device_id cs42xx8_of_match[];
0026 int cs42xx8_probe(struct device *dev, struct regmap *regmap);
0027
0028
0029 #define CS42XX8_CHIPID 0x01
0030 #define CS42XX8_PWRCTL 0x02
0031 #define CS42XX8_FUNCMOD 0x03
0032 #define CS42XX8_INTF 0x04
0033 #define CS42XX8_ADCCTL 0x05
0034 #define CS42XX8_TXCTL 0x06
0035 #define CS42XX8_DACMUTE 0x07
0036 #define CS42XX8_VOLAOUT1 0x08
0037 #define CS42XX8_VOLAOUT2 0x09
0038 #define CS42XX8_VOLAOUT3 0x0A
0039 #define CS42XX8_VOLAOUT4 0x0B
0040 #define CS42XX8_VOLAOUT5 0x0C
0041 #define CS42XX8_VOLAOUT6 0x0D
0042 #define CS42XX8_VOLAOUT7 0x0E
0043 #define CS42XX8_VOLAOUT8 0x0F
0044 #define CS42XX8_DACINV 0x10
0045 #define CS42XX8_VOLAIN1 0x11
0046 #define CS42XX8_VOLAIN2 0x12
0047 #define CS42XX8_VOLAIN3 0x13
0048 #define CS42XX8_VOLAIN4 0x14
0049 #define CS42XX8_VOLAIN5 0x15
0050 #define CS42XX8_VOLAIN6 0x16
0051 #define CS42XX8_ADCINV 0x17
0052 #define CS42XX8_STATUSCTL 0x18
0053 #define CS42XX8_STATUS 0x19
0054 #define CS42XX8_STATUSM 0x1A
0055 #define CS42XX8_MUTEC 0x1B
0056
0057 #define CS42XX8_FIRSTREG CS42XX8_CHIPID
0058 #define CS42XX8_LASTREG CS42XX8_MUTEC
0059 #define CS42XX8_NUMREGS (CS42XX8_LASTREG - CS42XX8_FIRSTREG + 1)
0060 #define CS42XX8_I2C_INCR 0x80
0061
0062
0063 #define CS42XX8_CHIPID_CHIP_ID_MASK 0xF0
0064 #define CS42XX8_CHIPID_REV_ID_MASK 0x0F
0065
0066
0067 #define CS42XX8_PWRCTL_PDN_ADC3_SHIFT 7
0068 #define CS42XX8_PWRCTL_PDN_ADC3_MASK (1 << CS42XX8_PWRCTL_PDN_ADC3_SHIFT)
0069 #define CS42XX8_PWRCTL_PDN_ADC3 (1 << CS42XX8_PWRCTL_PDN_ADC3_SHIFT)
0070 #define CS42XX8_PWRCTL_PDN_ADC2_SHIFT 6
0071 #define CS42XX8_PWRCTL_PDN_ADC2_MASK (1 << CS42XX8_PWRCTL_PDN_ADC2_SHIFT)
0072 #define CS42XX8_PWRCTL_PDN_ADC2 (1 << CS42XX8_PWRCTL_PDN_ADC2_SHIFT)
0073 #define CS42XX8_PWRCTL_PDN_ADC1_SHIFT 5
0074 #define CS42XX8_PWRCTL_PDN_ADC1_MASK (1 << CS42XX8_PWRCTL_PDN_ADC1_SHIFT)
0075 #define CS42XX8_PWRCTL_PDN_ADC1 (1 << CS42XX8_PWRCTL_PDN_ADC1_SHIFT)
0076 #define CS42XX8_PWRCTL_PDN_DAC4_SHIFT 4
0077 #define CS42XX8_PWRCTL_PDN_DAC4_MASK (1 << CS42XX8_PWRCTL_PDN_DAC4_SHIFT)
0078 #define CS42XX8_PWRCTL_PDN_DAC4 (1 << CS42XX8_PWRCTL_PDN_DAC4_SHIFT)
0079 #define CS42XX8_PWRCTL_PDN_DAC3_SHIFT 3
0080 #define CS42XX8_PWRCTL_PDN_DAC3_MASK (1 << CS42XX8_PWRCTL_PDN_DAC3_SHIFT)
0081 #define CS42XX8_PWRCTL_PDN_DAC3 (1 << CS42XX8_PWRCTL_PDN_DAC3_SHIFT)
0082 #define CS42XX8_PWRCTL_PDN_DAC2_SHIFT 2
0083 #define CS42XX8_PWRCTL_PDN_DAC2_MASK (1 << CS42XX8_PWRCTL_PDN_DAC2_SHIFT)
0084 #define CS42XX8_PWRCTL_PDN_DAC2 (1 << CS42XX8_PWRCTL_PDN_DAC2_SHIFT)
0085 #define CS42XX8_PWRCTL_PDN_DAC1_SHIFT 1
0086 #define CS42XX8_PWRCTL_PDN_DAC1_MASK (1 << CS42XX8_PWRCTL_PDN_DAC1_SHIFT)
0087 #define CS42XX8_PWRCTL_PDN_DAC1 (1 << CS42XX8_PWRCTL_PDN_DAC1_SHIFT)
0088 #define CS42XX8_PWRCTL_PDN_SHIFT 0
0089 #define CS42XX8_PWRCTL_PDN_MASK (1 << CS42XX8_PWRCTL_PDN_SHIFT)
0090 #define CS42XX8_PWRCTL_PDN (1 << CS42XX8_PWRCTL_PDN_SHIFT)
0091
0092
0093 #define CS42XX8_FUNCMOD_DAC_FM_SHIFT 6
0094 #define CS42XX8_FUNCMOD_DAC_FM_WIDTH 2
0095 #define CS42XX8_FUNCMOD_DAC_FM_MASK (((1 << CS42XX8_FUNCMOD_DAC_FM_WIDTH) - 1) << CS42XX8_FUNCMOD_DAC_FM_SHIFT)
0096 #define CS42XX8_FUNCMOD_DAC_FM(v) ((v) << CS42XX8_FUNCMOD_DAC_FM_SHIFT)
0097 #define CS42XX8_FUNCMOD_ADC_FM_SHIFT 4
0098 #define CS42XX8_FUNCMOD_ADC_FM_WIDTH 2
0099 #define CS42XX8_FUNCMOD_ADC_FM_MASK (((1 << CS42XX8_FUNCMOD_ADC_FM_WIDTH) - 1) << CS42XX8_FUNCMOD_ADC_FM_SHIFT)
0100 #define CS42XX8_FUNCMOD_ADC_FM(v) ((v) << CS42XX8_FUNCMOD_ADC_FM_SHIFT)
0101 #define CS42XX8_FUNCMOD_xC_FM_MASK(x) ((x) ? CS42XX8_FUNCMOD_DAC_FM_MASK : CS42XX8_FUNCMOD_ADC_FM_MASK)
0102 #define CS42XX8_FUNCMOD_xC_FM(x, v) ((x) ? CS42XX8_FUNCMOD_DAC_FM(v) : CS42XX8_FUNCMOD_ADC_FM(v))
0103 #define CS42XX8_FUNCMOD_MFREQ_SHIFT 1
0104 #define CS42XX8_FUNCMOD_MFREQ_WIDTH 3
0105 #define CS42XX8_FUNCMOD_MFREQ_MASK (((1 << CS42XX8_FUNCMOD_MFREQ_WIDTH) - 1) << CS42XX8_FUNCMOD_MFREQ_SHIFT)
0106 #define CS42XX8_FUNCMOD_MFREQ_256(s) ((0 << CS42XX8_FUNCMOD_MFREQ_SHIFT) >> (s >> 1))
0107 #define CS42XX8_FUNCMOD_MFREQ_384(s) ((1 << CS42XX8_FUNCMOD_MFREQ_SHIFT) >> (s >> 1))
0108 #define CS42XX8_FUNCMOD_MFREQ_512(s) ((2 << CS42XX8_FUNCMOD_MFREQ_SHIFT) >> (s >> 1))
0109 #define CS42XX8_FUNCMOD_MFREQ_768(s) ((3 << CS42XX8_FUNCMOD_MFREQ_SHIFT) >> (s >> 1))
0110 #define CS42XX8_FUNCMOD_MFREQ_1024(s) ((4 << CS42XX8_FUNCMOD_MFREQ_SHIFT) >> (s >> 1))
0111
0112 #define CS42XX8_FM_SINGLE 0
0113 #define CS42XX8_FM_DOUBLE 1
0114 #define CS42XX8_FM_QUAD 2
0115 #define CS42XX8_FM_AUTO 3
0116
0117
0118 #define CS42XX8_INTF_FREEZE_SHIFT 7
0119 #define CS42XX8_INTF_FREEZE_MASK (1 << CS42XX8_INTF_FREEZE_SHIFT)
0120 #define CS42XX8_INTF_FREEZE (1 << CS42XX8_INTF_FREEZE_SHIFT)
0121 #define CS42XX8_INTF_AUX_DIF_SHIFT 6
0122 #define CS42XX8_INTF_AUX_DIF_MASK (1 << CS42XX8_INTF_AUX_DIF_SHIFT)
0123 #define CS42XX8_INTF_AUX_DIF (1 << CS42XX8_INTF_AUX_DIF_SHIFT)
0124 #define CS42XX8_INTF_DAC_DIF_SHIFT 3
0125 #define CS42XX8_INTF_DAC_DIF_WIDTH 3
0126 #define CS42XX8_INTF_DAC_DIF_MASK (((1 << CS42XX8_INTF_DAC_DIF_WIDTH) - 1) << CS42XX8_INTF_DAC_DIF_SHIFT)
0127 #define CS42XX8_INTF_DAC_DIF_LEFTJ (0 << CS42XX8_INTF_DAC_DIF_SHIFT)
0128 #define CS42XX8_INTF_DAC_DIF_I2S (1 << CS42XX8_INTF_DAC_DIF_SHIFT)
0129 #define CS42XX8_INTF_DAC_DIF_RIGHTJ (2 << CS42XX8_INTF_DAC_DIF_SHIFT)
0130 #define CS42XX8_INTF_DAC_DIF_RIGHTJ_16 (3 << CS42XX8_INTF_DAC_DIF_SHIFT)
0131 #define CS42XX8_INTF_DAC_DIF_ONELINE_20 (4 << CS42XX8_INTF_DAC_DIF_SHIFT)
0132 #define CS42XX8_INTF_DAC_DIF_ONELINE_24 (5 << CS42XX8_INTF_DAC_DIF_SHIFT)
0133 #define CS42XX8_INTF_DAC_DIF_TDM (6 << CS42XX8_INTF_DAC_DIF_SHIFT)
0134 #define CS42XX8_INTF_ADC_DIF_SHIFT 0
0135 #define CS42XX8_INTF_ADC_DIF_WIDTH 3
0136 #define CS42XX8_INTF_ADC_DIF_MASK (((1 << CS42XX8_INTF_ADC_DIF_WIDTH) - 1) << CS42XX8_INTF_ADC_DIF_SHIFT)
0137 #define CS42XX8_INTF_ADC_DIF_LEFTJ (0 << CS42XX8_INTF_ADC_DIF_SHIFT)
0138 #define CS42XX8_INTF_ADC_DIF_I2S (1 << CS42XX8_INTF_ADC_DIF_SHIFT)
0139 #define CS42XX8_INTF_ADC_DIF_RIGHTJ (2 << CS42XX8_INTF_ADC_DIF_SHIFT)
0140 #define CS42XX8_INTF_ADC_DIF_RIGHTJ_16 (3 << CS42XX8_INTF_ADC_DIF_SHIFT)
0141 #define CS42XX8_INTF_ADC_DIF_ONELINE_20 (4 << CS42XX8_INTF_ADC_DIF_SHIFT)
0142 #define CS42XX8_INTF_ADC_DIF_ONELINE_24 (5 << CS42XX8_INTF_ADC_DIF_SHIFT)
0143 #define CS42XX8_INTF_ADC_DIF_TDM (6 << CS42XX8_INTF_ADC_DIF_SHIFT)
0144
0145
0146 #define CS42XX8_ADCCTL_ADC_HPF_FREEZE_SHIFT 7
0147 #define CS42XX8_ADCCTL_ADC_HPF_FREEZE_MASK (1 << CS42XX8_ADCCTL_ADC_HPF_FREEZE_SHIFT)
0148 #define CS42XX8_ADCCTL_ADC_HPF_FREEZE (1 << CS42XX8_ADCCTL_ADC_HPF_FREEZE_SHIFT)
0149 #define CS42XX8_ADCCTL_DAC_DEM_SHIFT 5
0150 #define CS42XX8_ADCCTL_DAC_DEM_MASK (1 << CS42XX8_ADCCTL_DAC_DEM_SHIFT)
0151 #define CS42XX8_ADCCTL_DAC_DEM (1 << CS42XX8_ADCCTL_DAC_DEM_SHIFT)
0152 #define CS42XX8_ADCCTL_ADC1_SINGLE_SHIFT 4
0153 #define CS42XX8_ADCCTL_ADC1_SINGLE_MASK (1 << CS42XX8_ADCCTL_ADC1_SINGLE_SHIFT)
0154 #define CS42XX8_ADCCTL_ADC1_SINGLE (1 << CS42XX8_ADCCTL_ADC1_SINGLE_SHIFT)
0155 #define CS42XX8_ADCCTL_ADC2_SINGLE_SHIFT 3
0156 #define CS42XX8_ADCCTL_ADC2_SINGLE_MASK (1 << CS42XX8_ADCCTL_ADC2_SINGLE_SHIFT)
0157 #define CS42XX8_ADCCTL_ADC2_SINGLE (1 << CS42XX8_ADCCTL_ADC2_SINGLE_SHIFT)
0158 #define CS42XX8_ADCCTL_ADC3_SINGLE_SHIFT 2
0159 #define CS42XX8_ADCCTL_ADC3_SINGLE_MASK (1 << CS42XX8_ADCCTL_ADC3_SINGLE_SHIFT)
0160 #define CS42XX8_ADCCTL_ADC3_SINGLE (1 << CS42XX8_ADCCTL_ADC3_SINGLE_SHIFT)
0161 #define CS42XX8_ADCCTL_AIN5_MUX_SHIFT 1
0162 #define CS42XX8_ADCCTL_AIN5_MUX_MASK (1 << CS42XX8_ADCCTL_AIN5_MUX_SHIFT)
0163 #define CS42XX8_ADCCTL_AIN5_MUX (1 << CS42XX8_ADCCTL_AIN5_MUX_SHIFT)
0164 #define CS42XX8_ADCCTL_AIN6_MUX_SHIFT 0
0165 #define CS42XX8_ADCCTL_AIN6_MUX_MASK (1 << CS42XX8_ADCCTL_AIN6_MUX_SHIFT)
0166 #define CS42XX8_ADCCTL_AIN6_MUX (1 << CS42XX8_ADCCTL_AIN6_MUX_SHIFT)
0167
0168
0169 #define CS42XX8_TXCTL_DAC_SNGVOL_SHIFT 7
0170 #define CS42XX8_TXCTL_DAC_SNGVOL_MASK (1 << CS42XX8_TXCTL_DAC_SNGVOL_SHIFT)
0171 #define CS42XX8_TXCTL_DAC_SNGVOL (1 << CS42XX8_TXCTL_DAC_SNGVOL_SHIFT)
0172 #define CS42XX8_TXCTL_DAC_SZC_SHIFT 5
0173 #define CS42XX8_TXCTL_DAC_SZC_WIDTH 2
0174 #define CS42XX8_TXCTL_DAC_SZC_MASK (((1 << CS42XX8_TXCTL_DAC_SZC_WIDTH) - 1) << CS42XX8_TXCTL_DAC_SZC_SHIFT)
0175 #define CS42XX8_TXCTL_DAC_SZC_IC (0 << CS42XX8_TXCTL_DAC_SZC_SHIFT)
0176 #define CS42XX8_TXCTL_DAC_SZC_ZC (1 << CS42XX8_TXCTL_DAC_SZC_SHIFT)
0177 #define CS42XX8_TXCTL_DAC_SZC_SR (2 << CS42XX8_TXCTL_DAC_SZC_SHIFT)
0178 #define CS42XX8_TXCTL_DAC_SZC_SRZC (3 << CS42XX8_TXCTL_DAC_SZC_SHIFT)
0179 #define CS42XX8_TXCTL_AMUTE_SHIFT 4
0180 #define CS42XX8_TXCTL_AMUTE_MASK (1 << CS42XX8_TXCTL_AMUTE_SHIFT)
0181 #define CS42XX8_TXCTL_AMUTE (1 << CS42XX8_TXCTL_AMUTE_SHIFT)
0182 #define CS42XX8_TXCTL_MUTE_ADC_SP_SHIFT 3
0183 #define CS42XX8_TXCTL_MUTE_ADC_SP_MASK (1 << CS42XX8_TXCTL_MUTE_ADC_SP_SHIFT)
0184 #define CS42XX8_TXCTL_MUTE_ADC_SP (1 << CS42XX8_TXCTL_MUTE_ADC_SP_SHIFT)
0185 #define CS42XX8_TXCTL_ADC_SNGVOL_SHIFT 2
0186 #define CS42XX8_TXCTL_ADC_SNGVOL_MASK (1 << CS42XX8_TXCTL_ADC_SNGVOL_SHIFT)
0187 #define CS42XX8_TXCTL_ADC_SNGVOL (1 << CS42XX8_TXCTL_ADC_SNGVOL_SHIFT)
0188 #define CS42XX8_TXCTL_ADC_SZC_SHIFT 0
0189 #define CS42XX8_TXCTL_ADC_SZC_MASK (((1 << CS42XX8_TXCTL_ADC_SZC_WIDTH) - 1) << CS42XX8_TXCTL_ADC_SZC_SHIFT)
0190 #define CS42XX8_TXCTL_ADC_SZC_IC (0 << CS42XX8_TXCTL_ADC_SZC_SHIFT)
0191 #define CS42XX8_TXCTL_ADC_SZC_ZC (1 << CS42XX8_TXCTL_ADC_SZC_SHIFT)
0192 #define CS42XX8_TXCTL_ADC_SZC_SR (2 << CS42XX8_TXCTL_ADC_SZC_SHIFT)
0193 #define CS42XX8_TXCTL_ADC_SZC_SRZC (3 << CS42XX8_TXCTL_ADC_SZC_SHIFT)
0194
0195
0196 #define CS42XX8_DACMUTE_AOUT(n) (0x1 << n)
0197 #define CS42XX8_DACMUTE_ALL 0xff
0198
0199
0200 #define CS42XX8_STATUSCTL_INI_SHIFT 2
0201 #define CS42XX8_STATUSCTL_INI_WIDTH 2
0202 #define CS42XX8_STATUSCTL_INI_MASK (((1 << CS42XX8_STATUSCTL_INI_WIDTH) - 1) << CS42XX8_STATUSCTL_INI_SHIFT)
0203 #define CS42XX8_STATUSCTL_INT_ACTIVE_HIGH (0 << CS42XX8_STATUSCTL_INI_SHIFT)
0204 #define CS42XX8_STATUSCTL_INT_ACTIVE_LOW (1 << CS42XX8_STATUSCTL_INI_SHIFT)
0205 #define CS42XX8_STATUSCTL_INT_OPEN_DRAIN (2 << CS42XX8_STATUSCTL_INI_SHIFT)
0206
0207
0208 #define CS42XX8_STATUS_DAC_CLK_ERR_SHIFT 4
0209 #define CS42XX8_STATUS_DAC_CLK_ERR_MASK (1 << CS42XX8_STATUS_DAC_CLK_ERR_SHIFT)
0210 #define CS42XX8_STATUS_ADC_CLK_ERR_SHIFT 3
0211 #define CS42XX8_STATUS_ADC_CLK_ERR_MASK (1 << CS42XX8_STATUS_ADC_CLK_ERR_SHIFT)
0212 #define CS42XX8_STATUS_ADC3_OVFL_SHIFT 2
0213 #define CS42XX8_STATUS_ADC3_OVFL_MASK (1 << CS42XX8_STATUS_ADC3_OVFL_SHIFT)
0214 #define CS42XX8_STATUS_ADC2_OVFL_SHIFT 1
0215 #define CS42XX8_STATUS_ADC2_OVFL_MASK (1 << CS42XX8_STATUS_ADC2_OVFL_SHIFT)
0216 #define CS42XX8_STATUS_ADC1_OVFL_SHIFT 0
0217 #define CS42XX8_STATUS_ADC1_OVFL_MASK (1 << CS42XX8_STATUS_ADC1_OVFL_SHIFT)
0218
0219
0220 #define CS42XX8_STATUS_DAC_CLK_ERR_M_SHIFT 4
0221 #define CS42XX8_STATUS_DAC_CLK_ERR_M_MASK (1 << CS42XX8_STATUS_DAC_CLK_ERR_M_SHIFT)
0222 #define CS42XX8_STATUS_ADC_CLK_ERR_M_SHIFT 3
0223 #define CS42XX8_STATUS_ADC_CLK_ERR_M_MASK (1 << CS42XX8_STATUS_ADC_CLK_ERR_M_SHIFT)
0224 #define CS42XX8_STATUS_ADC3_OVFL_M_SHIFT 2
0225 #define CS42XX8_STATUS_ADC3_OVFL_M_MASK (1 << CS42XX8_STATUS_ADC3_OVFL_M_SHIFT)
0226 #define CS42XX8_STATUS_ADC2_OVFL_M_SHIFT 1
0227 #define CS42XX8_STATUS_ADC2_OVFL_M_MASK (1 << CS42XX8_STATUS_ADC2_OVFL_M_SHIFT)
0228 #define CS42XX8_STATUS_ADC1_OVFL_M_SHIFT 0
0229 #define CS42XX8_STATUS_ADC1_OVFL_M_MASK (1 << CS42XX8_STATUS_ADC1_OVFL_M_SHIFT)
0230
0231
0232 #define CS42XX8_MUTEC_MCPOLARITY_SHIFT 1
0233 #define CS42XX8_MUTEC_MCPOLARITY_MASK (1 << CS42XX8_MUTEC_MCPOLARITY_SHIFT)
0234 #define CS42XX8_MUTEC_MCPOLARITY_ACTIVE_LOW (0 << CS42XX8_MUTEC_MCPOLARITY_SHIFT)
0235 #define CS42XX8_MUTEC_MCPOLARITY_ACTIVE_HIGH (1 << CS42XX8_MUTEC_MCPOLARITY_SHIFT)
0236 #define CS42XX8_MUTEC_MUTEC_ACTIVE_SHIFT 0
0237 #define CS42XX8_MUTEC_MUTEC_ACTIVE_MASK (1 << CS42XX8_MUTEC_MUTEC_ACTIVE_SHIFT)
0238 #define CS42XX8_MUTEC_MUTEC_ACTIVE (1 << CS42XX8_MUTEC_MUTEC_ACTIVE_SHIFT)
0239 #endif