0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef __CS43130_H__
0011 #define __CS43130_H__
0012
0013 #include <linux/math.h>
0014
0015
0016
0017 #define CS43130_FIRSTREG 0x010000
0018 #define CS43130_LASTREG 0x190000
0019 #define CS43130_CHIP_ID 0x00043130
0020 #define CS4399_CHIP_ID 0x00043990
0021 #define CS43131_CHIP_ID 0x00043131
0022 #define CS43198_CHIP_ID 0x00043198
0023 #define CS43130_DEVID_AB 0x010000
0024 #define CS43130_DEVID_CD 0x010001
0025 #define CS43130_DEVID_E 0x010002
0026 #define CS43130_FAB_ID 0x010003
0027 #define CS43130_REV_ID 0x010004
0028 #define CS43130_SUBREV_ID 0x010005
0029 #define CS43130_SYS_CLK_CTL_1 0x010006
0030 #define CS43130_SP_SRATE 0x01000B
0031 #define CS43130_SP_BITSIZE 0x01000C
0032 #define CS43130_PAD_INT_CFG 0x01000D
0033 #define CS43130_DXD1 0x010010
0034 #define CS43130_DXD7 0x010025
0035 #define CS43130_DXD19 0x010026
0036 #define CS43130_DXD17 0x010027
0037 #define CS43130_DXD18 0x010028
0038 #define CS43130_DXD12 0x01002C
0039 #define CS43130_DXD8 0x01002E
0040 #define CS43130_PWDN_CTL 0x020000
0041 #define CS43130_DXD2 0x020019
0042 #define CS43130_CRYSTAL_SET 0x020052
0043 #define CS43130_PLL_SET_1 0x030001
0044 #define CS43130_PLL_SET_2 0x030002
0045 #define CS43130_PLL_SET_3 0x030003
0046 #define CS43130_PLL_SET_4 0x030004
0047 #define CS43130_PLL_SET_5 0x030005
0048 #define CS43130_PLL_SET_6 0x030008
0049 #define CS43130_PLL_SET_7 0x03000A
0050 #define CS43130_PLL_SET_8 0x03001B
0051 #define CS43130_PLL_SET_9 0x040002
0052 #define CS43130_PLL_SET_10 0x040003
0053 #define CS43130_CLKOUT_CTL 0x040004
0054 #define CS43130_ASP_NUM_1 0x040010
0055 #define CS43130_ASP_NUM_2 0x040011
0056 #define CS43130_ASP_DEN_1 0x040012
0057 #define CS43130_ASP_DEN_2 0x040013
0058 #define CS43130_ASP_LRCK_HI_TIME_1 0x040014
0059 #define CS43130_ASP_LRCK_HI_TIME_2 0x040015
0060 #define CS43130_ASP_LRCK_PERIOD_1 0x040016
0061 #define CS43130_ASP_LRCK_PERIOD_2 0x040017
0062 #define CS43130_ASP_CLOCK_CONF 0x040018
0063 #define CS43130_ASP_FRAME_CONF 0x040019
0064 #define CS43130_XSP_NUM_1 0x040020
0065 #define CS43130_XSP_NUM_2 0x040021
0066 #define CS43130_XSP_DEN_1 0x040022
0067 #define CS43130_XSP_DEN_2 0x040023
0068 #define CS43130_XSP_LRCK_HI_TIME_1 0x040024
0069 #define CS43130_XSP_LRCK_HI_TIME_2 0x040025
0070 #define CS43130_XSP_LRCK_PERIOD_1 0x040026
0071 #define CS43130_XSP_LRCK_PERIOD_2 0x040027
0072 #define CS43130_XSP_CLOCK_CONF 0x040028
0073 #define CS43130_XSP_FRAME_CONF 0x040029
0074 #define CS43130_ASP_CH_1_LOC 0x050000
0075 #define CS43130_ASP_CH_2_LOC 0x050001
0076 #define CS43130_ASP_CH_1_SZ_EN 0x05000A
0077 #define CS43130_ASP_CH_2_SZ_EN 0x05000B
0078 #define CS43130_XSP_CH_1_LOC 0x060000
0079 #define CS43130_XSP_CH_2_LOC 0x060001
0080 #define CS43130_XSP_CH_1_SZ_EN 0x06000A
0081 #define CS43130_XSP_CH_2_SZ_EN 0x06000B
0082 #define CS43130_DSD_VOL_B 0x070000
0083 #define CS43130_DSD_VOL_A 0x070001
0084 #define CS43130_DSD_PATH_CTL_1 0x070002
0085 #define CS43130_DSD_INT_CFG 0x070003
0086 #define CS43130_DSD_PATH_CTL_2 0x070004
0087 #define CS43130_DSD_PCM_MIX_CTL 0x070005
0088 #define CS43130_DSD_PATH_CTL_3 0x070006
0089 #define CS43130_HP_OUT_CTL_1 0x080000
0090 #define CS43130_DXD16 0x080024
0091 #define CS43130_DXD13 0x080032
0092 #define CS43130_PCM_FILT_OPT 0x090000
0093 #define CS43130_PCM_VOL_B 0x090001
0094 #define CS43130_PCM_VOL_A 0x090002
0095 #define CS43130_PCM_PATH_CTL_1 0x090003
0096 #define CS43130_PCM_PATH_CTL_2 0x090004
0097 #define CS43130_DXD6 0x090097
0098 #define CS43130_CLASS_H_CTL 0x0B0000
0099 #define CS43130_DXD15 0x0B0005
0100 #define CS43130_DXD14 0x0B0006
0101 #define CS43130_DXD3 0x0C0002
0102 #define CS43130_DXD10 0x0C0003
0103 #define CS43130_DXD11 0x0C0005
0104 #define CS43130_DXD9 0x0C0006
0105 #define CS43130_DXD4 0x0C0009
0106 #define CS43130_DXD5 0x0C000E
0107 #define CS43130_HP_DETECT 0x0D0000
0108 #define CS43130_HP_STATUS 0x0D0001
0109 #define CS43130_HP_LOAD_1 0x0E0000
0110 #define CS43130_HP_MEAS_LOAD_1 0x0E0003
0111 #define CS43130_HP_MEAS_LOAD_2 0x0E0004
0112 #define CS43130_HP_DC_STAT_1 0x0E000D
0113 #define CS43130_HP_DC_STAT_2 0x0E000E
0114 #define CS43130_HP_AC_STAT_1 0x0E0010
0115 #define CS43130_HP_AC_STAT_2 0x0E0011
0116 #define CS43130_HP_LOAD_STAT 0x0E001A
0117 #define CS43130_INT_STATUS_1 0x0F0000
0118 #define CS43130_INT_STATUS_2 0x0F0001
0119 #define CS43130_INT_STATUS_3 0x0F0002
0120 #define CS43130_INT_STATUS_4 0x0F0003
0121 #define CS43130_INT_STATUS_5 0x0F0004
0122 #define CS43130_INT_MASK_1 0x0F0010
0123 #define CS43130_INT_MASK_2 0x0F0011
0124 #define CS43130_INT_MASK_3 0x0F0012
0125 #define CS43130_INT_MASK_4 0x0F0013
0126 #define CS43130_INT_MASK_5 0x0F0014
0127
0128 #define CS43130_MCLK_SRC_SEL_MASK 0x03
0129 #define CS43130_MCLK_SRC_SEL_SHIFT 0
0130 #define CS43130_MCLK_INT_MASK 0x04
0131 #define CS43130_MCLK_INT_SHIFT 2
0132 #define CS43130_CH_BITSIZE_MASK 0x03
0133 #define CS43130_CH_EN_MASK 0x04
0134 #define CS43130_CH_EN_SHIFT 2
0135 #define CS43130_ASP_BITSIZE_MASK 0x03
0136 #define CS43130_XSP_BITSIZE_MASK 0x0C
0137 #define CS43130_XSP_BITSIZE_SHIFT 2
0138 #define CS43130_SP_BITSIZE_ASP_SHIFT 0
0139 #define CS43130_HP_DETECT_CTRL_SHIFT 6
0140 #define CS43130_HP_DETECT_CTRL_MASK (0x03 << CS43130_HP_DETECT_CTRL_SHIFT)
0141 #define CS43130_HP_DETECT_INV_SHIFT 5
0142 #define CS43130_HP_DETECT_INV_MASK (1 << CS43130_HP_DETECT_INV_SHIFT)
0143
0144
0145 #define CS43130_HP_PLUG_INT_SHIFT 6
0146 #define CS43130_HP_PLUG_INT (1 << CS43130_HP_PLUG_INT_SHIFT)
0147 #define CS43130_HP_UNPLUG_INT_SHIFT 5
0148 #define CS43130_HP_UNPLUG_INT (1 << CS43130_HP_UNPLUG_INT_SHIFT)
0149 #define CS43130_XTAL_RDY_INT_SHIFT 4
0150 #define CS43130_XTAL_RDY_INT_MASK 0x10
0151 #define CS43130_XTAL_RDY_INT (1 << CS43130_XTAL_RDY_INT_SHIFT)
0152 #define CS43130_XTAL_ERR_INT_SHIFT 3
0153 #define CS43130_XTAL_ERR_INT (1 << CS43130_XTAL_ERR_INT_SHIFT)
0154 #define CS43130_PLL_RDY_INT_MASK 0x04
0155 #define CS43130_PLL_RDY_INT_SHIFT 2
0156 #define CS43130_PLL_RDY_INT (1 << CS43130_PLL_RDY_INT_SHIFT)
0157
0158
0159 #define CS43130_INT_MASK_ALL 0xFF
0160 #define CS43130_HPLOAD_NO_DC_INT_SHIFT 7
0161 #define CS43130_HPLOAD_NO_DC_INT (1 << CS43130_HPLOAD_NO_DC_INT_SHIFT)
0162 #define CS43130_HPLOAD_UNPLUG_INT_SHIFT 6
0163 #define CS43130_HPLOAD_UNPLUG_INT (1 << CS43130_HPLOAD_UNPLUG_INT_SHIFT)
0164 #define CS43130_HPLOAD_OOR_INT_SHIFT 4
0165 #define CS43130_HPLOAD_OOR_INT (1 << CS43130_HPLOAD_OOR_INT_SHIFT)
0166 #define CS43130_HPLOAD_AC_INT_SHIFT 3
0167 #define CS43130_HPLOAD_AC_INT (1 << CS43130_HPLOAD_AC_INT_SHIFT)
0168 #define CS43130_HPLOAD_DC_INT_SHIFT 2
0169 #define CS43130_HPLOAD_DC_INT (1 << CS43130_HPLOAD_DC_INT_SHIFT)
0170 #define CS43130_HPLOAD_OFF_INT_SHIFT 1
0171 #define CS43130_HPLOAD_OFF_INT (1 << CS43130_HPLOAD_OFF_INT_SHIFT)
0172 #define CS43130_HPLOAD_ON_INT 1
0173
0174
0175 #define CS43130_HPLOAD_EN_SHIFT 7
0176 #define CS43130_HPLOAD_EN (1 << CS43130_HPLOAD_EN_SHIFT)
0177 #define CS43130_HPLOAD_CHN_SEL_SHIFT 4
0178 #define CS43130_HPLOAD_CHN_SEL (1 << CS43130_HPLOAD_CHN_SEL_SHIFT)
0179 #define CS43130_HPLOAD_AC_START_SHIFT 1
0180 #define CS43130_HPLOAD_AC_START (1 << CS43130_HPLOAD_AC_START_SHIFT)
0181 #define CS43130_HPLOAD_DC_START 1
0182
0183
0184 #define CS43130_SP_BIT_SIZE_8 0x03
0185 #define CS43130_SP_BIT_SIZE_16 0x02
0186 #define CS43130_SP_BIT_SIZE_24 0x01
0187 #define CS43130_SP_BIT_SIZE_32 0x00
0188
0189
0190 #define CS43130_CH_BIT_SIZE_8 0x00
0191 #define CS43130_CH_BIT_SIZE_16 0x01
0192 #define CS43130_CH_BIT_SIZE_24 0x02
0193 #define CS43130_CH_BIT_SIZE_32 0x03
0194
0195
0196 #define CS43130_PLL_START_MASK 0x01
0197 #define CS43130_PLL_MODE_MASK 0x02
0198 #define CS43130_PLL_MODE_SHIFT 1
0199
0200 #define CS43130_PLL_REF_PREDIV_MASK 0x3
0201
0202 #define CS43130_SP_STP_MASK 0x10
0203 #define CS43130_SP_STP_SHIFT 4
0204 #define CS43130_SP_5050_MASK 0x08
0205 #define CS43130_SP_5050_SHIFT 3
0206 #define CS43130_SP_FSD_MASK 0x07
0207
0208 #define CS43130_SP_MODE_MASK 0x10
0209 #define CS43130_SP_MODE_SHIFT 4
0210 #define CS43130_SP_SCPOL_OUT_MASK 0x08
0211 #define CS43130_SP_SCPOL_OUT_SHIFT 3
0212 #define CS43130_SP_SCPOL_IN_MASK 0x04
0213 #define CS43130_SP_SCPOL_IN_SHIFT 2
0214 #define CS43130_SP_LCPOL_OUT_MASK 0x02
0215 #define CS43130_SP_LCPOL_OUT_SHIFT 1
0216 #define CS43130_SP_LCPOL_IN_MASK 0x01
0217 #define CS43130_SP_LCPOL_IN_SHIFT 0
0218
0219
0220 #define CS43130_PDN_XSP_MASK 0x80
0221 #define CS43130_PDN_XSP_SHIFT 7
0222 #define CS43130_PDN_ASP_MASK 0x40
0223 #define CS43130_PDN_ASP_SHIFT 6
0224 #define CS43130_PDN_DSPIF_MASK 0x20
0225 #define CS43130_PDN_DSDIF_SHIFT 5
0226 #define CS43130_PDN_HP_MASK 0x10
0227 #define CS43130_PDN_HP_SHIFT 4
0228 #define CS43130_PDN_XTAL_MASK 0x08
0229 #define CS43130_PDN_XTAL_SHIFT 3
0230 #define CS43130_PDN_PLL_MASK 0x04
0231 #define CS43130_PDN_PLL_SHIFT 2
0232 #define CS43130_PDN_CLKOUT_MASK 0x02
0233 #define CS43130_PDN_CLKOUT_SHIFT 1
0234
0235
0236 #define CS43130_HP_IN_EN_SHIFT 3
0237 #define CS43130_HP_IN_EN_MASK 0x08
0238
0239
0240 #define CS43130_ASP_3ST_MASK 0x01
0241 #define CS43130_XSP_3ST_MASK 0x02
0242
0243
0244 #define CS43130_PLL_DIV_DATA_MASK 0x000000FF
0245 #define CS43130_PLL_DIV_FRAC_0_DATA_SHIFT 0
0246
0247
0248 #define CS43130_PLL_DIV_FRAC_1_DATA_SHIFT 8
0249
0250
0251 #define CS43130_PLL_DIV_FRAC_2_DATA_SHIFT 16
0252
0253
0254 #define CS43130_SP_M_LSB_DATA_MASK 0x00FF
0255 #define CS43130_SP_M_LSB_DATA_SHIFT 0
0256
0257
0258 #define CS43130_SP_M_MSB_DATA_MASK 0xFF00
0259 #define CS43130_SP_M_MSB_DATA_SHIFT 8
0260
0261
0262 #define CS43130_SP_N_LSB_DATA_MASK 0x00FF
0263 #define CS43130_SP_N_LSB_DATA_SHIFT 0
0264
0265
0266 #define CS43130_SP_N_MSB_DATA_MASK 0xFF00
0267 #define CS43130_SP_N_MSB_DATA_SHIFT 8
0268
0269
0270 #define CS43130_SP_LCHI_DATA_MASK 0x00FF
0271 #define CS43130_SP_LCHI_LSB_DATA_SHIFT 0
0272
0273
0274 #define CS43130_SP_LCHI_MSB_DATA_SHIFT 8
0275
0276
0277 #define CS43130_SP_LCPR_DATA_MASK 0x00FF
0278 #define CS43130_SP_LCPR_LSB_DATA_SHIFT 0
0279
0280
0281 #define CS43130_SP_LCPR_MSB_DATA_SHIFT 8
0282
0283 #define CS43130_PCM_FORMATS (SNDRV_PCM_FMTBIT_S8 | \
0284 SNDRV_PCM_FMTBIT_S16_LE | \
0285 SNDRV_PCM_FMTBIT_S24_LE | \
0286 SNDRV_PCM_FMTBIT_S32_LE)
0287
0288 #define CS43130_DOP_FORMATS (SNDRV_PCM_FMTBIT_DSD_U16_LE | \
0289 SNDRV_PCM_FMTBIT_DSD_U16_BE | \
0290 SNDRV_PCM_FMTBIT_S24_LE)
0291
0292
0293 #define CS43130_XTAL_IBIAS_MASK 0x07
0294
0295
0296 #define CS43130_MUTE_MASK 0x03
0297 #define CS43130_MUTE_EN 0x03
0298
0299
0300 #define CS43130_DSD_MASTER 0x04
0301
0302
0303 #define CS43130_DSD_SRC_MASK 0x60
0304 #define CS43130_DSD_SRC_SHIFT 5
0305 #define CS43130_DSD_EN_SHIFT 4
0306 #define CS43130_DSD_SPEED_MASK 0x04
0307 #define CS43130_DSD_SPEED_SHIFT 2
0308
0309
0310 #define CS43130_MIX_PCM_PREP_SHIFT 1
0311 #define CS43130_MIX_PCM_PREP_MASK 0x02
0312
0313 #define CS43130_MIX_PCM_DSD_SHIFT 0
0314 #define CS43130_MIX_PCM_DSD_MASK 0x01
0315
0316
0317 #define CS43130_HP_MEAS_LOAD_MASK 0x000000FF
0318 #define CS43130_HP_MEAS_LOAD_1_SHIFT 0
0319 #define CS43130_HP_MEAS_LOAD_2_SHIFT 8
0320
0321 #define CS43130_MCLK_22M 22579200
0322 #define CS43130_MCLK_24M 24576000
0323
0324 #define CS43130_LINEOUT_LOAD 5000
0325 #define CS43130_JACK_LINEOUT (SND_JACK_MECHANICAL | SND_JACK_LINEOUT)
0326 #define CS43130_JACK_HEADPHONE (SND_JACK_MECHANICAL | \
0327 SND_JACK_HEADPHONE)
0328 #define CS43130_JACK_MASK (SND_JACK_MECHANICAL | \
0329 SND_JACK_LINEOUT | \
0330 SND_JACK_HEADPHONE)
0331
0332 enum cs43130_dsd_src {
0333 CS43130_DSD_SRC_DSD = 0,
0334 CS43130_DSD_SRC_ASP = 2,
0335 CS43130_DSD_SRC_XSP = 3,
0336 };
0337
0338 enum cs43130_asp_rate {
0339 CS43130_ASP_SPRATE_32K = 0,
0340 CS43130_ASP_SPRATE_44_1K,
0341 CS43130_ASP_SPRATE_48K,
0342 CS43130_ASP_SPRATE_88_2K,
0343 CS43130_ASP_SPRATE_96K,
0344 CS43130_ASP_SPRATE_176_4K,
0345 CS43130_ASP_SPRATE_192K,
0346 CS43130_ASP_SPRATE_352_8K,
0347 CS43130_ASP_SPRATE_384K,
0348 };
0349
0350 enum cs43130_mclk_src_sel {
0351 CS43130_MCLK_SRC_EXT = 0,
0352 CS43130_MCLK_SRC_PLL,
0353 CS43130_MCLK_SRC_RCO
0354 };
0355
0356 enum cs43130_mclk_int_freq {
0357 CS43130_MCLK_24P5 = 0,
0358 CS43130_MCLK_22P5,
0359 };
0360
0361 enum cs43130_xtal_ibias {
0362 CS43130_XTAL_UNUSED = -1,
0363 CS43130_XTAL_IBIAS_15UA = 2,
0364 CS43130_XTAL_IBIAS_12_5UA = 4,
0365 CS43130_XTAL_IBIAS_7_5UA = 6,
0366 };
0367
0368 enum cs43130_dai_id {
0369 CS43130_ASP_PCM_DAI = 0,
0370 CS43130_ASP_DOP_DAI,
0371 CS43130_XSP_DOP_DAI,
0372 CS43130_XSP_DSD_DAI,
0373 CS43130_DAI_ID_MAX,
0374 };
0375
0376 struct cs43130_clk_gen {
0377 unsigned int mclk_int;
0378 int fs;
0379 struct u16_fract v;
0380 };
0381
0382
0383 static const struct cs43130_clk_gen cs43130_16_clk_gen[] = {
0384 { 22579200, 32000, .v = { 441, 10, }, },
0385 { 22579200, 44100, .v = { 32, 1, }, },
0386 { 22579200, 48000, .v = { 147, 5, }, },
0387 { 22579200, 88200, .v = { 16, 1, }, },
0388 { 22579200, 96000, .v = { 147, 10, }, },
0389 { 22579200, 176400, .v = { 8, 1, }, },
0390 { 22579200, 192000, .v = { 147, 20, }, },
0391 { 22579200, 352800, .v = { 4, 1, }, },
0392 { 22579200, 384000, .v = { 147, 40, }, },
0393 { 24576000, 32000, .v = { 48, 1, }, },
0394 { 24576000, 44100, .v = { 5120, 147, }, },
0395 { 24576000, 48000, .v = { 32, 1, }, },
0396 { 24576000, 88200, .v = { 2560, 147, }, },
0397 { 24576000, 96000, .v = { 16, 1, }, },
0398 { 24576000, 176400, .v = { 1280, 147, }, },
0399 { 24576000, 192000, .v = { 8, 1, }, },
0400 { 24576000, 352800, .v = { 640, 147, }, },
0401 { 24576000, 384000, .v = { 4, 1, }, },
0402 };
0403
0404
0405 static const struct cs43130_clk_gen cs43130_32_clk_gen[] = {
0406 { 22579200, 32000, .v = { 441, 20, }, },
0407 { 22579200, 44100, .v = { 16, 1, }, },
0408 { 22579200, 48000, .v = { 147, 10, }, },
0409 { 22579200, 88200, .v = { 8, 1, }, },
0410 { 22579200, 96000, .v = { 147, 20, }, },
0411 { 22579200, 176400, .v = { 4, 1, }, },
0412 { 22579200, 192000, .v = { 147, 40, }, },
0413 { 22579200, 352800, .v = { 2, 1, }, },
0414 { 22579200, 384000, .v = { 147, 80, }, },
0415 { 24576000, 32000, .v = { 24, 1, }, },
0416 { 24576000, 44100, .v = { 2560, 147, }, },
0417 { 24576000, 48000, .v = { 16, 1, }, },
0418 { 24576000, 88200, .v = { 1280, 147, }, },
0419 { 24576000, 96000, .v = { 8, 1, }, },
0420 { 24576000, 176400, .v = { 640, 147, }, },
0421 { 24576000, 192000, .v = { 4, 1, }, },
0422 { 24576000, 352800, .v = { 320, 147, }, },
0423 { 24576000, 384000, .v = { 2, 1, }, },
0424 };
0425
0426
0427 static const struct cs43130_clk_gen cs43130_48_clk_gen[] = {
0428 { 22579200, 32000, .v = { 147, 100, }, },
0429 { 22579200, 44100, .v = { 32, 3, }, },
0430 { 22579200, 48000, .v = { 49, 5, }, },
0431 { 22579200, 88200, .v = { 16, 3, }, },
0432 { 22579200, 96000, .v = { 49, 10, }, },
0433 { 22579200, 176400, .v = { 8, 3, }, },
0434 { 22579200, 192000, .v = { 49, 20, }, },
0435 { 22579200, 352800, .v = { 4, 3, }, },
0436 { 22579200, 384000, .v = { 49, 40, }, },
0437 { 24576000, 32000, .v = { 16, 1, }, },
0438 { 24576000, 44100, .v = { 5120, 441, }, },
0439 { 24576000, 48000, .v = { 32, 3, }, },
0440 { 24576000, 88200, .v = { 2560, 441, }, },
0441 { 24576000, 96000, .v = { 16, 3, }, },
0442 { 24576000, 176400, .v = { 1280, 441, }, },
0443 { 24576000, 192000, .v = { 8, 3, }, },
0444 { 24576000, 352800, .v = { 640, 441, }, },
0445 { 24576000, 384000, .v = { 4, 3, }, },
0446 };
0447
0448
0449 static const struct cs43130_clk_gen cs43130_64_clk_gen[] = {
0450 { 22579200, 32000, .v = { 441, 40, }, },
0451 { 22579200, 44100, .v = { 8, 1, }, },
0452 { 22579200, 48000, .v = { 147, 20, }, },
0453 { 22579200, 88200, .v = { 4, 1, }, },
0454 { 22579200, 96000, .v = { 147, 40, }, },
0455 { 22579200, 176400, .v = { 2, 1, }, },
0456 { 22579200, 192000, .v = { 147, 80, }, },
0457 { 22579200, 352800, .v = { 1, 1, }, },
0458 { 24576000, 32000, .v = { 12, 1, }, },
0459 { 24576000, 44100, .v = { 1280, 147, }, },
0460 { 24576000, 48000, .v = { 8, 1, }, },
0461 { 24576000, 88200, .v = { 640, 147, }, },
0462 { 24576000, 96000, .v = { 4, 1, }, },
0463 { 24576000, 176400, .v = { 320, 147, }, },
0464 { 24576000, 192000, .v = { 2, 1, }, },
0465 { 24576000, 352800, .v = { 160, 147, }, },
0466 { 24576000, 384000, .v = { 1, 1, }, },
0467 };
0468
0469 struct cs43130_bitwidth_map {
0470 unsigned int bitwidth;
0471 u8 sp_bit;
0472 u8 ch_bit;
0473 };
0474
0475 struct cs43130_rate_map {
0476 int fs;
0477 int val;
0478 };
0479
0480 #define HP_LEFT 0
0481 #define HP_RIGHT 1
0482 #define CS43130_AC_FREQ 10
0483 #define CS43130_DC_THRESHOLD 2
0484
0485 #define CS43130_NUM_SUPPLIES 5
0486 static const char *const cs43130_supply_names[CS43130_NUM_SUPPLIES] = {
0487 "VA",
0488 "VP",
0489 "VCP",
0490 "VD",
0491 "VL",
0492 };
0493
0494 #define CS43130_NUM_INT 5
0495
0496 struct cs43130_dai {
0497 unsigned int sclk;
0498 unsigned int dai_format;
0499 unsigned int dai_mode;
0500 };
0501
0502 struct cs43130_private {
0503 struct snd_soc_component *component;
0504 struct regmap *regmap;
0505 struct regulator_bulk_data supplies[CS43130_NUM_SUPPLIES];
0506 struct gpio_desc *reset_gpio;
0507 unsigned int dev_id;
0508 int xtal_ibias;
0509
0510
0511 struct mutex clk_mutex;
0512 int clk_req;
0513 bool pll_bypass;
0514 struct completion xtal_rdy;
0515 struct completion pll_rdy;
0516 unsigned int mclk;
0517 unsigned int mclk_int;
0518 int mclk_int_src;
0519
0520
0521 struct cs43130_dai dais[CS43130_DAI_ID_MAX];
0522
0523
0524 bool dc_meas;
0525 bool ac_meas;
0526 bool hpload_done;
0527 struct completion hpload_evt;
0528 unsigned int hpload_stat;
0529 u16 hpload_dc[2];
0530 u16 dc_threshold[CS43130_DC_THRESHOLD];
0531 u16 ac_freq[CS43130_AC_FREQ];
0532 u16 hpload_ac[CS43130_AC_FREQ][2];
0533 struct workqueue_struct *wq;
0534 struct work_struct work;
0535 struct snd_soc_jack jack;
0536 };
0537
0538 #endif