Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ASoC: mediatek: mt6358: add codec driver

add the mt6358 codec driver.

Signed-off-by: Shunli Wang <shunli.wang@mediatek.com>
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Shunli Wang and committed by
Mark Brown
6a8d4198 bfd74e65

+4659
+7
sound/soc/codecs/Kconfig
··· 110 110 select SND_SOC_MC13783 if MFD_MC13XXX 111 111 select SND_SOC_ML26124 if I2C 112 112 select SND_SOC_MT6351 if MTK_PMIC_WRAP 113 + select SND_SOC_MT6358 if MTK_PMIC_WRAP 113 114 select SND_SOC_NAU8540 if I2C 114 115 select SND_SOC_NAU8810 if I2C 115 116 select SND_SOC_NAU8822 if I2C ··· 1339 1338 1340 1339 config SND_SOC_MT6351 1341 1340 tristate "MediaTek MT6351 Codec" 1341 + 1342 + config SND_SOC_MT6358 1343 + tristate "MediaTek MT6358 Codec" 1344 + help 1345 + Enable support for the platform which uses MT6358 as 1346 + external codec device. 1342 1347 1343 1348 config SND_SOC_NAU8540 1344 1349 tristate "Nuvoton Technology Corporation NAU85L40 CODEC"
+2
sound/soc/codecs/Makefile
··· 107 107 snd-soc-msm8916-analog-objs := msm8916-wcd-analog.o 108 108 snd-soc-msm8916-digital-objs := msm8916-wcd-digital.o 109 109 snd-soc-mt6351-objs := mt6351.o 110 + snd-soc-mt6358-objs := mt6358.o 110 111 snd-soc-nau8540-objs := nau8540.o 111 112 snd-soc-nau8810-objs := nau8810.o 112 113 snd-soc-nau8822-objs := nau8822.o ··· 376 375 obj-$(CONFIG_SND_SOC_MSM8916_WCD_ANALOG) +=snd-soc-msm8916-analog.o 377 376 obj-$(CONFIG_SND_SOC_MSM8916_WCD_DIGITAL) +=snd-soc-msm8916-digital.o 378 377 obj-$(CONFIG_SND_SOC_MT6351) += snd-soc-mt6351.o 378 + obj-$(CONFIG_SND_SOC_MT6358) += snd-soc-mt6358.o 379 379 obj-$(CONFIG_SND_SOC_NAU8540) += snd-soc-nau8540.o 380 380 obj-$(CONFIG_SND_SOC_NAU8810) += snd-soc-nau8810.o 381 381 obj-$(CONFIG_SND_SOC_NAU8822) += snd-soc-nau8822.o
+2336
sound/soc/codecs/mt6358.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + // 3 + // mt6358.c -- mt6358 ALSA SoC audio codec driver 4 + // 5 + // Copyright (c) 2018 MediaTek Inc. 6 + // Author: KaiChieh Chuang <kaichieh.chuang@mediatek.com> 7 + 8 + #include <linux/platform_device.h> 9 + #include <linux/module.h> 10 + #include <linux/of_device.h> 11 + #include <linux/delay.h> 12 + #include <linux/kthread.h> 13 + #include <linux/sched.h> 14 + #include <linux/mfd/mt6397/core.h> 15 + #include <linux/regulator/consumer.h> 16 + 17 + #include <sound/soc.h> 18 + #include <sound/tlv.h> 19 + 20 + #include "mt6358.h" 21 + 22 + enum { 23 + AUDIO_ANALOG_VOLUME_HSOUTL, 24 + AUDIO_ANALOG_VOLUME_HSOUTR, 25 + AUDIO_ANALOG_VOLUME_HPOUTL, 26 + AUDIO_ANALOG_VOLUME_HPOUTR, 27 + AUDIO_ANALOG_VOLUME_LINEOUTL, 28 + AUDIO_ANALOG_VOLUME_LINEOUTR, 29 + AUDIO_ANALOG_VOLUME_MICAMP1, 30 + AUDIO_ANALOG_VOLUME_MICAMP2, 31 + AUDIO_ANALOG_VOLUME_TYPE_MAX 32 + }; 33 + 34 + enum { 35 + MUX_ADC_L, 36 + MUX_ADC_R, 37 + MUX_PGA_L, 38 + MUX_PGA_R, 39 + MUX_MIC_TYPE, 40 + MUX_HP_L, 41 + MUX_HP_R, 42 + MUX_NUM, 43 + }; 44 + 45 + enum { 46 + DEVICE_HP, 47 + DEVICE_LO, 48 + DEVICE_RCV, 49 + DEVICE_MIC1, 50 + DEVICE_MIC2, 51 + DEVICE_NUM 52 + }; 53 + 54 + /* Supply widget subseq */ 55 + enum { 56 + /* common */ 57 + SUPPLY_SEQ_CLK_BUF, 58 + SUPPLY_SEQ_AUD_GLB, 59 + SUPPLY_SEQ_CLKSQ, 60 + SUPPLY_SEQ_VOW_AUD_LPW, 61 + SUPPLY_SEQ_AUD_VOW, 62 + SUPPLY_SEQ_VOW_CLK, 63 + SUPPLY_SEQ_VOW_LDO, 64 + SUPPLY_SEQ_TOP_CK, 65 + SUPPLY_SEQ_TOP_CK_LAST, 66 + SUPPLY_SEQ_AUD_TOP, 67 + SUPPLY_SEQ_AUD_TOP_LAST, 68 + SUPPLY_SEQ_AFE, 69 + /* capture */ 70 + SUPPLY_SEQ_ADC_SUPPLY, 71 + }; 72 + 73 + enum { 74 + CH_L = 0, 75 + CH_R, 76 + NUM_CH, 77 + }; 78 + 79 + #define REG_STRIDE 2 80 + 81 + struct mt6358_priv { 82 + struct device *dev; 83 + struct regmap *regmap; 84 + 85 + unsigned int dl_rate; 86 + unsigned int ul_rate; 87 + 88 + int ana_gain[AUDIO_ANALOG_VOLUME_TYPE_MAX]; 89 + unsigned int mux_select[MUX_NUM]; 90 + 91 + int dev_counter[DEVICE_NUM]; 92 + 93 + int mtkaif_protocol; 94 + 95 + struct regulator *avdd_reg; 96 + }; 97 + 98 + int mt6358_set_mtkaif_protocol(struct snd_soc_component *cmpnt, 99 + int mtkaif_protocol) 100 + { 101 + struct mt6358_priv *priv = snd_soc_component_get_drvdata(cmpnt); 102 + 103 + priv->mtkaif_protocol = mtkaif_protocol; 104 + return 0; 105 + } 106 + 107 + static void playback_gpio_set(struct mt6358_priv *priv) 108 + { 109 + /* set gpio mosi mode */ 110 + regmap_update_bits(priv->regmap, MT6358_GPIO_MODE2_CLR, 111 + 0x01f8, 0x01f8); 112 + regmap_update_bits(priv->regmap, MT6358_GPIO_MODE2_SET, 113 + 0xffff, 0x0249); 114 + regmap_update_bits(priv->regmap, MT6358_GPIO_MODE2, 115 + 0xffff, 0x0249); 116 + } 117 + 118 + static void playback_gpio_reset(struct mt6358_priv *priv) 119 + { 120 + /* set pad_aud_*_mosi to GPIO mode and dir input 121 + * reason: 122 + * pad_aud_dat_mosi*, because the pin is used as boot strap 123 + * don't clean clk/sync, for mtkaif protocol 2 124 + */ 125 + regmap_update_bits(priv->regmap, MT6358_GPIO_MODE2_CLR, 126 + 0x01f8, 0x01f8); 127 + regmap_update_bits(priv->regmap, MT6358_GPIO_MODE2, 128 + 0x01f8, 0x0000); 129 + regmap_update_bits(priv->regmap, MT6358_GPIO_DIR0, 130 + 0xf << 8, 0x0); 131 + } 132 + 133 + static void capture_gpio_set(struct mt6358_priv *priv) 134 + { 135 + /* set gpio miso mode */ 136 + regmap_update_bits(priv->regmap, MT6358_GPIO_MODE3_CLR, 137 + 0xffff, 0xffff); 138 + regmap_update_bits(priv->regmap, MT6358_GPIO_MODE3_SET, 139 + 0xffff, 0x0249); 140 + regmap_update_bits(priv->regmap, MT6358_GPIO_MODE3, 141 + 0xffff, 0x0249); 142 + } 143 + 144 + static void capture_gpio_reset(struct mt6358_priv *priv) 145 + { 146 + /* set pad_aud_*_miso to GPIO mode and dir input 147 + * reason: 148 + * pad_aud_clk_miso, because when playback only the miso_clk 149 + * will also have 26m, so will have power leak 150 + * pad_aud_dat_miso*, because the pin is used as boot strap 151 + */ 152 + regmap_update_bits(priv->regmap, MT6358_GPIO_MODE3_CLR, 153 + 0xffff, 0xffff); 154 + regmap_update_bits(priv->regmap, MT6358_GPIO_MODE3, 155 + 0xffff, 0x0000); 156 + regmap_update_bits(priv->regmap, MT6358_GPIO_DIR0, 157 + 0xf << 12, 0x0); 158 + } 159 + 160 + /* use only when not govern by DAPM */ 161 + static int mt6358_set_dcxo(struct mt6358_priv *priv, bool enable) 162 + { 163 + regmap_update_bits(priv->regmap, MT6358_DCXO_CW14, 164 + 0x1 << RG_XO_AUDIO_EN_M_SFT, 165 + (enable ? 1 : 0) << RG_XO_AUDIO_EN_M_SFT); 166 + return 0; 167 + } 168 + 169 + /* use only when not govern by DAPM */ 170 + static int mt6358_set_clksq(struct mt6358_priv *priv, bool enable) 171 + { 172 + /* audio clk source from internal dcxo */ 173 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON6, 174 + RG_CLKSQ_IN_SEL_TEST_MASK_SFT, 175 + 0x0); 176 + 177 + /* Enable/disable CLKSQ 26MHz */ 178 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON6, 179 + RG_CLKSQ_EN_MASK_SFT, 180 + (enable ? 1 : 0) << RG_CLKSQ_EN_SFT); 181 + return 0; 182 + } 183 + 184 + /* use only when not govern by DAPM */ 185 + static int mt6358_set_aud_global_bias(struct mt6358_priv *priv, bool enable) 186 + { 187 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON13, 188 + RG_AUDGLB_PWRDN_VA28_MASK_SFT, 189 + (enable ? 0 : 1) << RG_AUDGLB_PWRDN_VA28_SFT); 190 + return 0; 191 + } 192 + 193 + /* use only when not govern by DAPM */ 194 + static int mt6358_set_topck(struct mt6358_priv *priv, bool enable) 195 + { 196 + regmap_update_bits(priv->regmap, MT6358_AUD_TOP_CKPDN_CON0, 197 + 0x0066, enable ? 0x0 : 0x66); 198 + return 0; 199 + } 200 + 201 + static int mt6358_mtkaif_tx_enable(struct mt6358_priv *priv) 202 + { 203 + switch (priv->mtkaif_protocol) { 204 + case MT6358_MTKAIF_PROTOCOL_2_CLK_P2: 205 + /* MTKAIF TX format setting */ 206 + regmap_update_bits(priv->regmap, 207 + MT6358_AFE_ADDA_MTKAIF_CFG0, 208 + 0xffff, 0x0010); 209 + /* enable aud_pad TX fifos */ 210 + regmap_update_bits(priv->regmap, 211 + MT6358_AFE_AUD_PAD_TOP, 212 + 0xff00, 0x3800); 213 + regmap_update_bits(priv->regmap, 214 + MT6358_AFE_AUD_PAD_TOP, 215 + 0xff00, 0x3900); 216 + break; 217 + case MT6358_MTKAIF_PROTOCOL_2: 218 + /* MTKAIF TX format setting */ 219 + regmap_update_bits(priv->regmap, 220 + MT6358_AFE_ADDA_MTKAIF_CFG0, 221 + 0xffff, 0x0010); 222 + /* enable aud_pad TX fifos */ 223 + regmap_update_bits(priv->regmap, 224 + MT6358_AFE_AUD_PAD_TOP, 225 + 0xff00, 0x3100); 226 + break; 227 + case MT6358_MTKAIF_PROTOCOL_1: 228 + default: 229 + /* MTKAIF TX format setting */ 230 + regmap_update_bits(priv->regmap, 231 + MT6358_AFE_ADDA_MTKAIF_CFG0, 232 + 0xffff, 0x0000); 233 + /* enable aud_pad TX fifos */ 234 + regmap_update_bits(priv->regmap, 235 + MT6358_AFE_AUD_PAD_TOP, 236 + 0xff00, 0x3100); 237 + break; 238 + } 239 + return 0; 240 + } 241 + 242 + static int mt6358_mtkaif_tx_disable(struct mt6358_priv *priv) 243 + { 244 + /* disable aud_pad TX fifos */ 245 + regmap_update_bits(priv->regmap, MT6358_AFE_AUD_PAD_TOP, 246 + 0xff00, 0x3000); 247 + return 0; 248 + } 249 + 250 + int mt6358_mtkaif_calibration_enable(struct snd_soc_component *cmpnt) 251 + { 252 + struct mt6358_priv *priv = snd_soc_component_get_drvdata(cmpnt); 253 + 254 + playback_gpio_set(priv); 255 + capture_gpio_set(priv); 256 + mt6358_mtkaif_tx_enable(priv); 257 + 258 + mt6358_set_dcxo(priv, true); 259 + mt6358_set_aud_global_bias(priv, true); 260 + mt6358_set_clksq(priv, true); 261 + mt6358_set_topck(priv, true); 262 + 263 + /* set dat_miso_loopback on */ 264 + regmap_update_bits(priv->regmap, MT6358_AUDIO_DIG_CFG, 265 + RG_AUD_PAD_TOP_DAT_MISO2_LOOPBACK_MASK_SFT, 266 + 1 << RG_AUD_PAD_TOP_DAT_MISO2_LOOPBACK_SFT); 267 + regmap_update_bits(priv->regmap, MT6358_AUDIO_DIG_CFG, 268 + RG_AUD_PAD_TOP_DAT_MISO_LOOPBACK_MASK_SFT, 269 + 1 << RG_AUD_PAD_TOP_DAT_MISO_LOOPBACK_SFT); 270 + return 0; 271 + } 272 + 273 + int mt6358_mtkaif_calibration_disable(struct snd_soc_component *cmpnt) 274 + { 275 + struct mt6358_priv *priv = snd_soc_component_get_drvdata(cmpnt); 276 + 277 + /* set dat_miso_loopback off */ 278 + regmap_update_bits(priv->regmap, MT6358_AUDIO_DIG_CFG, 279 + RG_AUD_PAD_TOP_DAT_MISO2_LOOPBACK_MASK_SFT, 280 + 0 << RG_AUD_PAD_TOP_DAT_MISO2_LOOPBACK_SFT); 281 + regmap_update_bits(priv->regmap, MT6358_AUDIO_DIG_CFG, 282 + RG_AUD_PAD_TOP_DAT_MISO_LOOPBACK_MASK_SFT, 283 + 0 << RG_AUD_PAD_TOP_DAT_MISO_LOOPBACK_SFT); 284 + 285 + mt6358_set_topck(priv, false); 286 + mt6358_set_clksq(priv, false); 287 + mt6358_set_aud_global_bias(priv, false); 288 + mt6358_set_dcxo(priv, false); 289 + 290 + mt6358_mtkaif_tx_disable(priv); 291 + playback_gpio_reset(priv); 292 + capture_gpio_reset(priv); 293 + return 0; 294 + } 295 + 296 + int mt6358_set_mtkaif_calibration_phase(struct snd_soc_component *cmpnt, 297 + int phase_1, int phase_2) 298 + { 299 + struct mt6358_priv *priv = snd_soc_component_get_drvdata(cmpnt); 300 + 301 + regmap_update_bits(priv->regmap, MT6358_AUDIO_DIG_CFG, 302 + RG_AUD_PAD_TOP_PHASE_MODE_MASK_SFT, 303 + phase_1 << RG_AUD_PAD_TOP_PHASE_MODE_SFT); 304 + regmap_update_bits(priv->regmap, MT6358_AUDIO_DIG_CFG, 305 + RG_AUD_PAD_TOP_PHASE_MODE2_MASK_SFT, 306 + phase_2 << RG_AUD_PAD_TOP_PHASE_MODE2_SFT); 307 + return 0; 308 + } 309 + 310 + /* dl pga gain */ 311 + enum { 312 + DL_GAIN_8DB = 0, 313 + DL_GAIN_0DB = 8, 314 + DL_GAIN_N_1DB = 9, 315 + DL_GAIN_N_10DB = 18, 316 + DL_GAIN_N_40DB = 0x1f, 317 + }; 318 + 319 + #define DL_GAIN_N_10DB_REG (DL_GAIN_N_10DB << 7 | DL_GAIN_N_10DB) 320 + #define DL_GAIN_N_40DB_REG (DL_GAIN_N_40DB << 7 | DL_GAIN_N_40DB) 321 + #define DL_GAIN_REG_MASK 0x0f9f 322 + 323 + static void lo_store_gain(struct mt6358_priv *priv) 324 + { 325 + unsigned int reg; 326 + unsigned int gain_l, gain_r; 327 + 328 + regmap_read(priv->regmap, MT6358_ZCD_CON1, &reg); 329 + gain_l = (reg >> RG_AUDLOLGAIN_SFT) & RG_AUDLOLGAIN_MASK; 330 + gain_r = (reg >> RG_AUDLORGAIN_SFT) & RG_AUDLORGAIN_MASK; 331 + 332 + priv->ana_gain[AUDIO_ANALOG_VOLUME_LINEOUTL] = gain_l; 333 + priv->ana_gain[AUDIO_ANALOG_VOLUME_LINEOUTR] = gain_r; 334 + } 335 + 336 + static void hp_store_gain(struct mt6358_priv *priv) 337 + { 338 + unsigned int reg; 339 + unsigned int gain_l, gain_r; 340 + 341 + regmap_read(priv->regmap, MT6358_ZCD_CON2, &reg); 342 + gain_l = (reg >> RG_AUDHPLGAIN_SFT) & RG_AUDHPLGAIN_MASK; 343 + gain_r = (reg >> RG_AUDHPRGAIN_SFT) & RG_AUDHPRGAIN_MASK; 344 + 345 + priv->ana_gain[AUDIO_ANALOG_VOLUME_HPOUTL] = gain_l; 346 + priv->ana_gain[AUDIO_ANALOG_VOLUME_HPOUTR] = gain_r; 347 + } 348 + 349 + static void hp_zcd_disable(struct mt6358_priv *priv) 350 + { 351 + regmap_write(priv->regmap, MT6358_ZCD_CON0, 0x0000); 352 + } 353 + 354 + static void hp_main_output_ramp(struct mt6358_priv *priv, bool up) 355 + { 356 + int i = 0, stage = 0; 357 + int target = 7; 358 + 359 + /* Enable/Reduce HPL/R main output stage step by step */ 360 + for (i = 0; i <= target; i++) { 361 + stage = up ? i : target - i; 362 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON1, 363 + 0x7 << 8, stage << 8); 364 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON1, 365 + 0x7 << 11, stage << 11); 366 + usleep_range(100, 150); 367 + } 368 + } 369 + 370 + static void hp_aux_feedback_loop_gain_ramp(struct mt6358_priv *priv, bool up) 371 + { 372 + int i = 0, stage = 0; 373 + 374 + /* Reduce HP aux feedback loop gain step by step */ 375 + for (i = 0; i <= 0xf; i++) { 376 + stage = up ? i : 0xf - i; 377 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON9, 378 + 0xf << 12, stage << 12); 379 + usleep_range(100, 150); 380 + } 381 + } 382 + 383 + static void hp_pull_down(struct mt6358_priv *priv, bool enable) 384 + { 385 + int i; 386 + 387 + if (enable) { 388 + for (i = 0x0; i <= 0x6; i++) { 389 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON4, 390 + 0x7, i); 391 + usleep_range(600, 700); 392 + } 393 + } else { 394 + for (i = 0x6; i >= 0x1; i--) { 395 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON4, 396 + 0x7, i); 397 + usleep_range(600, 700); 398 + } 399 + } 400 + } 401 + 402 + static bool is_valid_hp_pga_idx(int reg_idx) 403 + { 404 + return (reg_idx >= DL_GAIN_8DB && reg_idx <= DL_GAIN_N_10DB) || 405 + reg_idx == DL_GAIN_N_40DB; 406 + } 407 + 408 + static void headset_volume_ramp(struct mt6358_priv *priv, 409 + int from, int to) 410 + { 411 + int offset = 0, count = 1, reg_idx; 412 + 413 + if (!is_valid_hp_pga_idx(from) || !is_valid_hp_pga_idx(to)) 414 + dev_warn(priv->dev, "%s(), volume index is not valid, from %d, to %d\n", 415 + __func__, from, to); 416 + 417 + dev_info(priv->dev, "%s(), from %d, to %d\n", 418 + __func__, from, to); 419 + 420 + if (to > from) 421 + offset = to - from; 422 + else 423 + offset = from - to; 424 + 425 + while (offset > 0) { 426 + if (to > from) 427 + reg_idx = from + count; 428 + else 429 + reg_idx = from - count; 430 + 431 + if (is_valid_hp_pga_idx(reg_idx)) { 432 + regmap_update_bits(priv->regmap, 433 + MT6358_ZCD_CON2, 434 + DL_GAIN_REG_MASK, 435 + (reg_idx << 7) | reg_idx); 436 + usleep_range(200, 300); 437 + } 438 + offset--; 439 + count++; 440 + } 441 + } 442 + 443 + static const DECLARE_TLV_DB_SCALE(playback_tlv, -1000, 100, 0); 444 + static const DECLARE_TLV_DB_SCALE(pga_tlv, 0, 600, 0); 445 + 446 + static const struct snd_kcontrol_new mt6358_snd_controls[] = { 447 + /* dl pga gain */ 448 + SOC_DOUBLE_TLV("Headphone Volume", 449 + MT6358_ZCD_CON2, 0, 7, 0x12, 1, 450 + playback_tlv), 451 + SOC_DOUBLE_TLV("Lineout Volume", 452 + MT6358_ZCD_CON1, 0, 7, 0x12, 1, 453 + playback_tlv), 454 + SOC_SINGLE_TLV("Handset Volume", 455 + MT6358_ZCD_CON3, 0, 0x12, 1, 456 + playback_tlv), 457 + /* ul pga gain */ 458 + SOC_DOUBLE_R_TLV("PGA Volume", 459 + MT6358_AUDENC_ANA_CON0, MT6358_AUDENC_ANA_CON1, 460 + 8, 4, 0, 461 + pga_tlv), 462 + }; 463 + 464 + /* MUX */ 465 + /* LOL MUX */ 466 + static const char * const lo_in_mux_map[] = { 467 + "Open", "Mute", "Playback", "Test Mode" 468 + }; 469 + 470 + static int lo_in_mux_map_value[] = { 471 + 0x0, 0x1, 0x2, 0x3, 472 + }; 473 + 474 + static SOC_VALUE_ENUM_SINGLE_DECL(lo_in_mux_map_enum, 475 + MT6358_AUDDEC_ANA_CON7, 476 + RG_AUDLOLMUXINPUTSEL_VAUDP15_SFT, 477 + RG_AUDLOLMUXINPUTSEL_VAUDP15_MASK, 478 + lo_in_mux_map, 479 + lo_in_mux_map_value); 480 + 481 + static const struct snd_kcontrol_new lo_in_mux_control = 482 + SOC_DAPM_ENUM("In Select", lo_in_mux_map_enum); 483 + 484 + /*HP MUX */ 485 + enum { 486 + HP_MUX_OPEN = 0, 487 + HP_MUX_HPSPK, 488 + HP_MUX_HP, 489 + HP_MUX_TEST_MODE, 490 + HP_MUX_HP_IMPEDANCE, 491 + HP_MUX_MASK = 0x7, 492 + }; 493 + 494 + static const char * const hp_in_mux_map[] = { 495 + "Open", 496 + "LoudSPK Playback", 497 + "Audio Playback", 498 + "Test Mode", 499 + "HP Impedance", 500 + "undefined1", 501 + "undefined2", 502 + "undefined3", 503 + }; 504 + 505 + static int hp_in_mux_map_value[] = { 506 + HP_MUX_OPEN, 507 + HP_MUX_HPSPK, 508 + HP_MUX_HP, 509 + HP_MUX_TEST_MODE, 510 + HP_MUX_HP_IMPEDANCE, 511 + HP_MUX_OPEN, 512 + HP_MUX_OPEN, 513 + HP_MUX_OPEN, 514 + }; 515 + 516 + static SOC_VALUE_ENUM_SINGLE_DECL(hpl_in_mux_map_enum, 517 + SND_SOC_NOPM, 518 + 0, 519 + HP_MUX_MASK, 520 + hp_in_mux_map, 521 + hp_in_mux_map_value); 522 + 523 + static const struct snd_kcontrol_new hpl_in_mux_control = 524 + SOC_DAPM_ENUM("HPL Select", hpl_in_mux_map_enum); 525 + 526 + static SOC_VALUE_ENUM_SINGLE_DECL(hpr_in_mux_map_enum, 527 + SND_SOC_NOPM, 528 + 0, 529 + HP_MUX_MASK, 530 + hp_in_mux_map, 531 + hp_in_mux_map_value); 532 + 533 + static const struct snd_kcontrol_new hpr_in_mux_control = 534 + SOC_DAPM_ENUM("HPR Select", hpr_in_mux_map_enum); 535 + 536 + /* RCV MUX */ 537 + enum { 538 + RCV_MUX_OPEN = 0, 539 + RCV_MUX_MUTE, 540 + RCV_MUX_VOICE_PLAYBACK, 541 + RCV_MUX_TEST_MODE, 542 + RCV_MUX_MASK = 0x3, 543 + }; 544 + 545 + static const char * const rcv_in_mux_map[] = { 546 + "Open", "Mute", "Voice Playback", "Test Mode" 547 + }; 548 + 549 + static int rcv_in_mux_map_value[] = { 550 + RCV_MUX_OPEN, 551 + RCV_MUX_MUTE, 552 + RCV_MUX_VOICE_PLAYBACK, 553 + RCV_MUX_TEST_MODE, 554 + }; 555 + 556 + static SOC_VALUE_ENUM_SINGLE_DECL(rcv_in_mux_map_enum, 557 + SND_SOC_NOPM, 558 + 0, 559 + RCV_MUX_MASK, 560 + rcv_in_mux_map, 561 + rcv_in_mux_map_value); 562 + 563 + static const struct snd_kcontrol_new rcv_in_mux_control = 564 + SOC_DAPM_ENUM("RCV Select", rcv_in_mux_map_enum); 565 + 566 + /* DAC In MUX */ 567 + static const char * const dac_in_mux_map[] = { 568 + "Normal Path", "Sgen" 569 + }; 570 + 571 + static int dac_in_mux_map_value[] = { 572 + 0x0, 0x1, 573 + }; 574 + 575 + static SOC_VALUE_ENUM_SINGLE_DECL(dac_in_mux_map_enum, 576 + MT6358_AFE_TOP_CON0, 577 + DL_SINE_ON_SFT, 578 + DL_SINE_ON_MASK, 579 + dac_in_mux_map, 580 + dac_in_mux_map_value); 581 + 582 + static const struct snd_kcontrol_new dac_in_mux_control = 583 + SOC_DAPM_ENUM("DAC Select", dac_in_mux_map_enum); 584 + 585 + /* AIF Out MUX */ 586 + static SOC_VALUE_ENUM_SINGLE_DECL(aif_out_mux_map_enum, 587 + MT6358_AFE_TOP_CON0, 588 + UL_SINE_ON_SFT, 589 + UL_SINE_ON_MASK, 590 + dac_in_mux_map, 591 + dac_in_mux_map_value); 592 + 593 + static const struct snd_kcontrol_new aif_out_mux_control = 594 + SOC_DAPM_ENUM("AIF Out Select", aif_out_mux_map_enum); 595 + 596 + /* Mic Type MUX */ 597 + enum { 598 + MIC_TYPE_MUX_IDLE = 0, 599 + MIC_TYPE_MUX_ACC, 600 + MIC_TYPE_MUX_DMIC, 601 + MIC_TYPE_MUX_DCC, 602 + MIC_TYPE_MUX_DCC_ECM_DIFF, 603 + MIC_TYPE_MUX_DCC_ECM_SINGLE, 604 + MIC_TYPE_MUX_MASK = 0x7, 605 + }; 606 + 607 + #define IS_DCC_BASE(type) ((type) == MIC_TYPE_MUX_DCC || \ 608 + (type) == MIC_TYPE_MUX_DCC_ECM_DIFF || \ 609 + (type) == MIC_TYPE_MUX_DCC_ECM_SINGLE) 610 + 611 + static const char * const mic_type_mux_map[] = { 612 + "Idle", 613 + "ACC", 614 + "DMIC", 615 + "DCC", 616 + "DCC_ECM_DIFF", 617 + "DCC_ECM_SINGLE", 618 + }; 619 + 620 + static int mic_type_mux_map_value[] = { 621 + MIC_TYPE_MUX_IDLE, 622 + MIC_TYPE_MUX_ACC, 623 + MIC_TYPE_MUX_DMIC, 624 + MIC_TYPE_MUX_DCC, 625 + MIC_TYPE_MUX_DCC_ECM_DIFF, 626 + MIC_TYPE_MUX_DCC_ECM_SINGLE, 627 + }; 628 + 629 + static SOC_VALUE_ENUM_SINGLE_DECL(mic_type_mux_map_enum, 630 + SND_SOC_NOPM, 631 + 0, 632 + MIC_TYPE_MUX_MASK, 633 + mic_type_mux_map, 634 + mic_type_mux_map_value); 635 + 636 + static const struct snd_kcontrol_new mic_type_mux_control = 637 + SOC_DAPM_ENUM("Mic Type Select", mic_type_mux_map_enum); 638 + 639 + /* ADC L MUX */ 640 + enum { 641 + ADC_MUX_IDLE = 0, 642 + ADC_MUX_AIN0, 643 + ADC_MUX_PREAMPLIFIER, 644 + ADC_MUX_IDLE1, 645 + ADC_MUX_MASK = 0x3, 646 + }; 647 + 648 + static const char * const adc_left_mux_map[] = { 649 + "Idle", "AIN0", "Left Preamplifier", "Idle_1" 650 + }; 651 + 652 + static int adc_mux_map_value[] = { 653 + ADC_MUX_IDLE, 654 + ADC_MUX_AIN0, 655 + ADC_MUX_PREAMPLIFIER, 656 + ADC_MUX_IDLE1, 657 + }; 658 + 659 + static SOC_VALUE_ENUM_SINGLE_DECL(adc_left_mux_map_enum, 660 + SND_SOC_NOPM, 661 + 0, 662 + ADC_MUX_MASK, 663 + adc_left_mux_map, 664 + adc_mux_map_value); 665 + 666 + static const struct snd_kcontrol_new adc_left_mux_control = 667 + SOC_DAPM_ENUM("ADC L Select", adc_left_mux_map_enum); 668 + 669 + /* ADC R MUX */ 670 + static const char * const adc_right_mux_map[] = { 671 + "Idle", "AIN0", "Right Preamplifier", "Idle_1" 672 + }; 673 + 674 + static SOC_VALUE_ENUM_SINGLE_DECL(adc_right_mux_map_enum, 675 + SND_SOC_NOPM, 676 + 0, 677 + ADC_MUX_MASK, 678 + adc_right_mux_map, 679 + adc_mux_map_value); 680 + 681 + static const struct snd_kcontrol_new adc_right_mux_control = 682 + SOC_DAPM_ENUM("ADC R Select", adc_right_mux_map_enum); 683 + 684 + /* PGA L MUX */ 685 + enum { 686 + PGA_MUX_NONE = 0, 687 + PGA_MUX_AIN0, 688 + PGA_MUX_AIN1, 689 + PGA_MUX_AIN2, 690 + PGA_MUX_MASK = 0x3, 691 + }; 692 + 693 + static const char * const pga_mux_map[] = { 694 + "None", "AIN0", "AIN1", "AIN2" 695 + }; 696 + 697 + static int pga_mux_map_value[] = { 698 + PGA_MUX_NONE, 699 + PGA_MUX_AIN0, 700 + PGA_MUX_AIN1, 701 + PGA_MUX_AIN2, 702 + }; 703 + 704 + static SOC_VALUE_ENUM_SINGLE_DECL(pga_left_mux_map_enum, 705 + SND_SOC_NOPM, 706 + 0, 707 + PGA_MUX_MASK, 708 + pga_mux_map, 709 + pga_mux_map_value); 710 + 711 + static const struct snd_kcontrol_new pga_left_mux_control = 712 + SOC_DAPM_ENUM("PGA L Select", pga_left_mux_map_enum); 713 + 714 + /* PGA R MUX */ 715 + static SOC_VALUE_ENUM_SINGLE_DECL(pga_right_mux_map_enum, 716 + SND_SOC_NOPM, 717 + 0, 718 + PGA_MUX_MASK, 719 + pga_mux_map, 720 + pga_mux_map_value); 721 + 722 + static const struct snd_kcontrol_new pga_right_mux_control = 723 + SOC_DAPM_ENUM("PGA R Select", pga_right_mux_map_enum); 724 + 725 + static int mt_clksq_event(struct snd_soc_dapm_widget *w, 726 + struct snd_kcontrol *kcontrol, 727 + int event) 728 + { 729 + struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 730 + struct mt6358_priv *priv = snd_soc_component_get_drvdata(cmpnt); 731 + 732 + dev_dbg(priv->dev, "%s(), event = 0x%x\n", __func__, event); 733 + 734 + switch (event) { 735 + case SND_SOC_DAPM_PRE_PMU: 736 + /* audio clk source from internal dcxo */ 737 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON6, 738 + RG_CLKSQ_IN_SEL_TEST_MASK_SFT, 739 + 0x0); 740 + break; 741 + default: 742 + break; 743 + } 744 + 745 + return 0; 746 + } 747 + 748 + static int mt_sgen_event(struct snd_soc_dapm_widget *w, 749 + struct snd_kcontrol *kcontrol, 750 + int event) 751 + { 752 + struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 753 + struct mt6358_priv *priv = snd_soc_component_get_drvdata(cmpnt); 754 + 755 + dev_dbg(priv->dev, "%s(), event = 0x%x\n", __func__, event); 756 + 757 + switch (event) { 758 + case SND_SOC_DAPM_PRE_PMU: 759 + /* sdm audio fifo clock power on */ 760 + regmap_write(priv->regmap, MT6358_AFUNC_AUD_CON2, 0x0006); 761 + /* scrambler clock on enable */ 762 + regmap_write(priv->regmap, MT6358_AFUNC_AUD_CON0, 0xCBA1); 763 + /* sdm power on */ 764 + regmap_write(priv->regmap, MT6358_AFUNC_AUD_CON2, 0x0003); 765 + /* sdm fifo enable */ 766 + regmap_write(priv->regmap, MT6358_AFUNC_AUD_CON2, 0x000B); 767 + 768 + regmap_update_bits(priv->regmap, MT6358_AFE_SGEN_CFG0, 769 + 0xff3f, 770 + 0x0000); 771 + regmap_update_bits(priv->regmap, MT6358_AFE_SGEN_CFG1, 772 + 0xffff, 773 + 0x0001); 774 + break; 775 + case SND_SOC_DAPM_POST_PMD: 776 + /* DL scrambler disabling sequence */ 777 + regmap_write(priv->regmap, MT6358_AFUNC_AUD_CON2, 0x0000); 778 + regmap_write(priv->regmap, MT6358_AFUNC_AUD_CON0, 0xcba0); 779 + break; 780 + default: 781 + break; 782 + } 783 + 784 + return 0; 785 + } 786 + 787 + static int mt_aif_in_event(struct snd_soc_dapm_widget *w, 788 + struct snd_kcontrol *kcontrol, 789 + int event) 790 + { 791 + struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 792 + struct mt6358_priv *priv = snd_soc_component_get_drvdata(cmpnt); 793 + 794 + dev_info(priv->dev, "%s(), event 0x%x, rate %d\n", 795 + __func__, event, priv->dl_rate); 796 + 797 + switch (event) { 798 + case SND_SOC_DAPM_PRE_PMU: 799 + playback_gpio_set(priv); 800 + 801 + /* sdm audio fifo clock power on */ 802 + regmap_write(priv->regmap, MT6358_AFUNC_AUD_CON2, 0x0006); 803 + /* scrambler clock on enable */ 804 + regmap_write(priv->regmap, MT6358_AFUNC_AUD_CON0, 0xCBA1); 805 + /* sdm power on */ 806 + regmap_write(priv->regmap, MT6358_AFUNC_AUD_CON2, 0x0003); 807 + /* sdm fifo enable */ 808 + regmap_write(priv->regmap, MT6358_AFUNC_AUD_CON2, 0x000B); 809 + break; 810 + case SND_SOC_DAPM_POST_PMD: 811 + /* DL scrambler disabling sequence */ 812 + regmap_write(priv->regmap, MT6358_AFUNC_AUD_CON2, 0x0000); 813 + regmap_write(priv->regmap, MT6358_AFUNC_AUD_CON0, 0xcba0); 814 + 815 + playback_gpio_reset(priv); 816 + break; 817 + default: 818 + break; 819 + } 820 + 821 + return 0; 822 + } 823 + 824 + static int mtk_hp_enable(struct mt6358_priv *priv) 825 + { 826 + /* Pull-down HPL/R to AVSS28_AUD */ 827 + hp_pull_down(priv, true); 828 + /* release HP CMFB gate rstb */ 829 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON4, 830 + 0x1 << 6, 0x1 << 6); 831 + 832 + /* Reduce ESD resistance of AU_REFN */ 833 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON2, 0x4000); 834 + 835 + /* save target gain to restore after hardware open complete */ 836 + hp_store_gain(priv); 837 + /* Set HPR/HPL gain as minimum (~ -40dB) */ 838 + regmap_write(priv->regmap, MT6358_ZCD_CON2, DL_GAIN_N_40DB_REG); 839 + 840 + /* Turn on DA_600K_NCP_VA18 */ 841 + regmap_write(priv->regmap, MT6358_AUDNCP_CLKDIV_CON1, 0x0001); 842 + /* Set NCP clock as 604kHz // 26MHz/43 = 604KHz */ 843 + regmap_write(priv->regmap, MT6358_AUDNCP_CLKDIV_CON2, 0x002c); 844 + /* Toggle RG_DIVCKS_CHG */ 845 + regmap_write(priv->regmap, MT6358_AUDNCP_CLKDIV_CON0, 0x0001); 846 + /* Set NCP soft start mode as default mode: 100us */ 847 + regmap_write(priv->regmap, MT6358_AUDNCP_CLKDIV_CON4, 0x0003); 848 + /* Enable NCP */ 849 + regmap_write(priv->regmap, MT6358_AUDNCP_CLKDIV_CON3, 0x0000); 850 + usleep_range(250, 270); 851 + 852 + /* Enable cap-less LDOs (1.5V) */ 853 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON14, 854 + 0x1055, 0x1055); 855 + /* Enable NV regulator (-1.2V) */ 856 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON15, 0x0001); 857 + usleep_range(100, 120); 858 + 859 + /* Disable AUD_ZCD */ 860 + hp_zcd_disable(priv); 861 + 862 + /* Disable headphone short-circuit protection */ 863 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON0, 0x3000); 864 + 865 + /* Enable IBIST */ 866 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON12, 0x0055); 867 + 868 + /* Set HP DR bias current optimization, 010: 6uA */ 869 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON11, 0x4900); 870 + /* Set HP & ZCD bias current optimization */ 871 + /* 01: ZCD: 4uA, HP/HS/LO: 5uA */ 872 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON12, 0x0055); 873 + /* Set HPP/N STB enhance circuits */ 874 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON2, 0x4033); 875 + 876 + /* Enable HP aux output stage */ 877 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON1, 0x000c); 878 + /* Enable HP aux feedback loop */ 879 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON1, 0x003c); 880 + /* Enable HP aux CMFB loop */ 881 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON9, 0x0c00); 882 + /* Enable HP driver bias circuits */ 883 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON0, 0x30c0); 884 + /* Enable HP driver core circuits */ 885 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON0, 0x30f0); 886 + /* Short HP main output to HP aux output stage */ 887 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON1, 0x00fc); 888 + 889 + /* Enable HP main CMFB loop */ 890 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON9, 0x0e00); 891 + /* Disable HP aux CMFB loop */ 892 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON9, 0x0200); 893 + 894 + /* Select CMFB resistor bulk to AC mode */ 895 + /* Selec HS/LO cap size (6.5pF default) */ 896 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON10, 0x0000); 897 + 898 + /* Enable HP main output stage */ 899 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON1, 0x00ff); 900 + /* Enable HPR/L main output stage step by step */ 901 + hp_main_output_ramp(priv, true); 902 + 903 + /* Reduce HP aux feedback loop gain */ 904 + hp_aux_feedback_loop_gain_ramp(priv, true); 905 + /* Disable HP aux feedback loop */ 906 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON1, 0x3fcf); 907 + 908 + /* apply volume setting */ 909 + headset_volume_ramp(priv, 910 + DL_GAIN_N_10DB, 911 + priv->ana_gain[AUDIO_ANALOG_VOLUME_HPOUTL]); 912 + 913 + /* Disable HP aux output stage */ 914 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON1, 0x3fc3); 915 + /* Unshort HP main output to HP aux output stage */ 916 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON1, 0x3f03); 917 + usleep_range(100, 120); 918 + 919 + /* Enable AUD_CLK */ 920 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON13, 0x1, 0x1); 921 + /* Enable Audio DAC */ 922 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON0, 0x30ff); 923 + /* Enable low-noise mode of DAC */ 924 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON9, 0xf201); 925 + usleep_range(100, 120); 926 + 927 + /* Switch HPL MUX to audio DAC */ 928 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON0, 0x32ff); 929 + /* Switch HPR MUX to audio DAC */ 930 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON0, 0x3aff); 931 + 932 + /* Disable Pull-down HPL/R to AVSS28_AUD */ 933 + hp_pull_down(priv, false); 934 + 935 + return 0; 936 + } 937 + 938 + static int mtk_hp_disable(struct mt6358_priv *priv) 939 + { 940 + /* Pull-down HPL/R to AVSS28_AUD */ 941 + hp_pull_down(priv, true); 942 + 943 + /* HPR/HPL mux to open */ 944 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON0, 945 + 0x0f00, 0x0000); 946 + 947 + /* Disable low-noise mode of DAC */ 948 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON9, 949 + 0x0001, 0x0000); 950 + 951 + /* Disable Audio DAC */ 952 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON0, 953 + 0x000f, 0x0000); 954 + 955 + /* Disable AUD_CLK */ 956 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON13, 0x1, 0x0); 957 + 958 + /* Short HP main output to HP aux output stage */ 959 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON1, 0x3fc3); 960 + /* Enable HP aux output stage */ 961 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON1, 0x3fcf); 962 + 963 + /* decrease HPL/R gain to normal gain step by step */ 964 + headset_volume_ramp(priv, 965 + priv->ana_gain[AUDIO_ANALOG_VOLUME_HPOUTL], 966 + DL_GAIN_N_40DB); 967 + 968 + /* Enable HP aux feedback loop */ 969 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON1, 0x3fff); 970 + 971 + /* Reduce HP aux feedback loop gain */ 972 + hp_aux_feedback_loop_gain_ramp(priv, false); 973 + 974 + /* decrease HPR/L main output stage step by step */ 975 + hp_main_output_ramp(priv, false); 976 + 977 + /* Disable HP main output stage */ 978 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON1, 0x3, 0x0); 979 + 980 + /* Enable HP aux CMFB loop */ 981 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON9, 0x0e00); 982 + 983 + /* Disable HP main CMFB loop */ 984 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON9, 0x0c00); 985 + 986 + /* Unshort HP main output to HP aux output stage */ 987 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON1, 988 + 0x3 << 6, 0x0); 989 + 990 + /* Disable HP driver core circuits */ 991 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON0, 992 + 0x3 << 4, 0x0); 993 + 994 + /* Disable HP driver bias circuits */ 995 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON0, 996 + 0x3 << 6, 0x0); 997 + 998 + /* Disable HP aux CMFB loop */ 999 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON9, 0x0000); 1000 + 1001 + /* Disable HP aux feedback loop */ 1002 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON1, 1003 + 0x3 << 4, 0x0); 1004 + 1005 + /* Disable HP aux output stage */ 1006 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON1, 1007 + 0x3 << 2, 0x0); 1008 + 1009 + /* Disable IBIST */ 1010 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON12, 1011 + 0x1 << 8, 0x1 << 8); 1012 + 1013 + /* Disable NV regulator (-1.2V) */ 1014 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON15, 0x1, 0x0); 1015 + /* Disable cap-less LDOs (1.5V) */ 1016 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON14, 1017 + 0x1055, 0x0); 1018 + /* Disable NCP */ 1019 + regmap_update_bits(priv->regmap, MT6358_AUDNCP_CLKDIV_CON3, 1020 + 0x1, 0x1); 1021 + 1022 + /* Increase ESD resistance of AU_REFN */ 1023 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON2, 1024 + 0x1 << 14, 0x0); 1025 + 1026 + /* Set HP CMFB gate rstb */ 1027 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON4, 1028 + 0x1 << 6, 0x0); 1029 + /* disable Pull-down HPL/R to AVSS28_AUD */ 1030 + hp_pull_down(priv, false); 1031 + 1032 + return 0; 1033 + } 1034 + 1035 + static int mtk_hp_spk_enable(struct mt6358_priv *priv) 1036 + { 1037 + /* Pull-down HPL/R to AVSS28_AUD */ 1038 + hp_pull_down(priv, true); 1039 + /* release HP CMFB gate rstb */ 1040 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON4, 1041 + 0x1 << 6, 0x1 << 6); 1042 + 1043 + /* Reduce ESD resistance of AU_REFN */ 1044 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON2, 0x4000); 1045 + 1046 + /* save target gain to restore after hardware open complete */ 1047 + hp_store_gain(priv); 1048 + /* Set HPR/HPL gain to -10dB */ 1049 + regmap_write(priv->regmap, MT6358_ZCD_CON2, DL_GAIN_N_10DB_REG); 1050 + 1051 + /* Turn on DA_600K_NCP_VA18 */ 1052 + regmap_write(priv->regmap, MT6358_AUDNCP_CLKDIV_CON1, 0x0001); 1053 + /* Set NCP clock as 604kHz // 26MHz/43 = 604KHz */ 1054 + regmap_write(priv->regmap, MT6358_AUDNCP_CLKDIV_CON2, 0x002c); 1055 + /* Toggle RG_DIVCKS_CHG */ 1056 + regmap_write(priv->regmap, MT6358_AUDNCP_CLKDIV_CON0, 0x0001); 1057 + /* Set NCP soft start mode as default mode: 100us */ 1058 + regmap_write(priv->regmap, MT6358_AUDNCP_CLKDIV_CON4, 0x0003); 1059 + /* Enable NCP */ 1060 + regmap_write(priv->regmap, MT6358_AUDNCP_CLKDIV_CON3, 0x0000); 1061 + usleep_range(250, 270); 1062 + 1063 + /* Enable cap-less LDOs (1.5V) */ 1064 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON14, 1065 + 0x1055, 0x1055); 1066 + /* Enable NV regulator (-1.2V) */ 1067 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON15, 0x0001); 1068 + usleep_range(100, 120); 1069 + 1070 + /* Disable AUD_ZCD */ 1071 + hp_zcd_disable(priv); 1072 + 1073 + /* Disable headphone short-circuit protection */ 1074 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON0, 0x3000); 1075 + 1076 + /* Enable IBIST */ 1077 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON12, 0x0055); 1078 + 1079 + /* Set HP DR bias current optimization, 010: 6uA */ 1080 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON11, 0x4900); 1081 + /* Set HP & ZCD bias current optimization */ 1082 + /* 01: ZCD: 4uA, HP/HS/LO: 5uA */ 1083 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON12, 0x0055); 1084 + /* Set HPP/N STB enhance circuits */ 1085 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON2, 0x4033); 1086 + 1087 + /* Disable Pull-down HPL/R to AVSS28_AUD */ 1088 + hp_pull_down(priv, false); 1089 + 1090 + /* Enable HP driver bias circuits */ 1091 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON0, 0x30c0); 1092 + /* Enable HP driver core circuits */ 1093 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON0, 0x30f0); 1094 + /* Enable HP main CMFB loop */ 1095 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON9, 0x0200); 1096 + 1097 + /* Select CMFB resistor bulk to AC mode */ 1098 + /* Selec HS/LO cap size (6.5pF default) */ 1099 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON10, 0x0000); 1100 + 1101 + /* Enable HP main output stage */ 1102 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON1, 0x0003); 1103 + /* Enable HPR/L main output stage step by step */ 1104 + hp_main_output_ramp(priv, true); 1105 + 1106 + /* Set LO gain as minimum (~ -40dB) */ 1107 + lo_store_gain(priv); 1108 + regmap_write(priv->regmap, MT6358_ZCD_CON1, DL_GAIN_N_40DB_REG); 1109 + /* apply volume setting */ 1110 + headset_volume_ramp(priv, 1111 + DL_GAIN_N_10DB, 1112 + priv->ana_gain[AUDIO_ANALOG_VOLUME_HPOUTL]); 1113 + 1114 + /* Set LO STB enhance circuits */ 1115 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON7, 0x0110); 1116 + /* Enable LO driver bias circuits */ 1117 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON7, 0x0112); 1118 + /* Enable LO driver core circuits */ 1119 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON7, 0x0113); 1120 + 1121 + /* Set LOL gain to normal gain step by step */ 1122 + regmap_update_bits(priv->regmap, MT6358_ZCD_CON1, 1123 + RG_AUDLOLGAIN_MASK_SFT, 1124 + priv->ana_gain[AUDIO_ANALOG_VOLUME_LINEOUTL] << 1125 + RG_AUDLOLGAIN_SFT); 1126 + regmap_update_bits(priv->regmap, MT6358_ZCD_CON1, 1127 + RG_AUDLORGAIN_MASK_SFT, 1128 + priv->ana_gain[AUDIO_ANALOG_VOLUME_LINEOUTR] << 1129 + RG_AUDLORGAIN_SFT); 1130 + 1131 + /* Enable AUD_CLK */ 1132 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON13, 0x1, 0x1); 1133 + /* Enable Audio DAC */ 1134 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON0, 0x30f9); 1135 + /* Enable low-noise mode of DAC */ 1136 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON9, 0x0201); 1137 + /* Switch LOL MUX to audio DAC */ 1138 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON7, 0x011b); 1139 + /* Switch HPL/R MUX to Line-out */ 1140 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON0, 0x35f9); 1141 + 1142 + return 0; 1143 + } 1144 + 1145 + static int mtk_hp_spk_disable(struct mt6358_priv *priv) 1146 + { 1147 + /* HPR/HPL mux to open */ 1148 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON0, 1149 + 0x0f00, 0x0000); 1150 + /* LOL mux to open */ 1151 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON7, 1152 + 0x3 << 2, 0x0000); 1153 + 1154 + /* Disable Audio DAC */ 1155 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON0, 1156 + 0x000f, 0x0000); 1157 + 1158 + /* Disable AUD_CLK */ 1159 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON13, 0x1, 0x0); 1160 + 1161 + /* decrease HPL/R gain to normal gain step by step */ 1162 + headset_volume_ramp(priv, 1163 + priv->ana_gain[AUDIO_ANALOG_VOLUME_HPOUTL], 1164 + DL_GAIN_N_40DB); 1165 + 1166 + /* decrease LOL gain to minimum gain step by step */ 1167 + regmap_update_bits(priv->regmap, MT6358_ZCD_CON1, 1168 + DL_GAIN_REG_MASK, DL_GAIN_N_40DB_REG); 1169 + 1170 + /* decrease HPR/L main output stage step by step */ 1171 + hp_main_output_ramp(priv, false); 1172 + 1173 + /* Disable HP main output stage */ 1174 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON1, 0x3, 0x0); 1175 + 1176 + /* Short HP main output to HP aux output stage */ 1177 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON1, 0x3fc3); 1178 + /* Enable HP aux output stage */ 1179 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON1, 0x3fcf); 1180 + 1181 + /* Enable HP aux feedback loop */ 1182 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON1, 0x3fff); 1183 + 1184 + /* Reduce HP aux feedback loop gain */ 1185 + hp_aux_feedback_loop_gain_ramp(priv, false); 1186 + 1187 + /* Disable HP driver core circuits */ 1188 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON0, 1189 + 0x3 << 4, 0x0); 1190 + /* Disable LO driver core circuits */ 1191 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON7, 1192 + 0x1, 0x0); 1193 + 1194 + /* Disable HP driver bias circuits */ 1195 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON0, 1196 + 0x3 << 6, 0x0); 1197 + /* Disable LO driver bias circuits */ 1198 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON7, 1199 + 0x1 << 1, 0x0); 1200 + 1201 + /* Disable HP aux CMFB loop */ 1202 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON9, 1203 + 0xff << 8, 0x0000); 1204 + 1205 + /* Disable IBIST */ 1206 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON12, 1207 + 0x1 << 8, 0x1 << 8); 1208 + /* Disable NV regulator (-1.2V) */ 1209 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON15, 0x1, 0x0); 1210 + /* Disable cap-less LDOs (1.5V) */ 1211 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON14, 0x1055, 0x0); 1212 + /* Disable NCP */ 1213 + regmap_update_bits(priv->regmap, MT6358_AUDNCP_CLKDIV_CON3, 0x1, 0x1); 1214 + 1215 + /* Set HP CMFB gate rstb */ 1216 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON4, 1217 + 0x1 << 6, 0x0); 1218 + /* disable Pull-down HPL/R to AVSS28_AUD */ 1219 + hp_pull_down(priv, false); 1220 + 1221 + return 0; 1222 + } 1223 + 1224 + static int mt_hp_event(struct snd_soc_dapm_widget *w, 1225 + struct snd_kcontrol *kcontrol, 1226 + int event) 1227 + { 1228 + struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 1229 + struct mt6358_priv *priv = snd_soc_component_get_drvdata(cmpnt); 1230 + unsigned int mux = dapm_kcontrol_get_value(w->kcontrols[0]); 1231 + int device = DEVICE_HP; 1232 + 1233 + dev_info(priv->dev, "%s(), event 0x%x, dev_counter[DEV_HP] %d, mux %u\n", 1234 + __func__, 1235 + event, 1236 + priv->dev_counter[device], 1237 + mux); 1238 + 1239 + switch (event) { 1240 + case SND_SOC_DAPM_PRE_PMU: 1241 + priv->dev_counter[device]++; 1242 + if (priv->dev_counter[device] > 1) 1243 + break; /* already enabled, do nothing */ 1244 + else if (priv->dev_counter[device] <= 0) 1245 + dev_warn(priv->dev, "%s(), dev_counter[DEV_HP] %d <= 0\n", 1246 + __func__, 1247 + priv->dev_counter[device]); 1248 + 1249 + priv->mux_select[MUX_HP_L] = mux; 1250 + 1251 + if (mux == HP_MUX_HP) 1252 + mtk_hp_enable(priv); 1253 + else if (mux == HP_MUX_HPSPK) 1254 + mtk_hp_spk_enable(priv); 1255 + break; 1256 + case SND_SOC_DAPM_PRE_PMD: 1257 + priv->dev_counter[device]--; 1258 + if (priv->dev_counter[device] > 0) { 1259 + break; /* still being used, don't close */ 1260 + } else if (priv->dev_counter[device] < 0) { 1261 + dev_warn(priv->dev, "%s(), dev_counter[DEV_HP] %d < 0\n", 1262 + __func__, 1263 + priv->dev_counter[device]); 1264 + priv->dev_counter[device] = 0; 1265 + break; 1266 + } 1267 + 1268 + if (priv->mux_select[MUX_HP_L] == HP_MUX_HP) 1269 + mtk_hp_disable(priv); 1270 + else if (priv->mux_select[MUX_HP_L] == HP_MUX_HPSPK) 1271 + mtk_hp_spk_disable(priv); 1272 + 1273 + priv->mux_select[MUX_HP_L] = mux; 1274 + break; 1275 + default: 1276 + break; 1277 + } 1278 + 1279 + return 0; 1280 + } 1281 + 1282 + static int mt_rcv_event(struct snd_soc_dapm_widget *w, 1283 + struct snd_kcontrol *kcontrol, 1284 + int event) 1285 + { 1286 + struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 1287 + struct mt6358_priv *priv = snd_soc_component_get_drvdata(cmpnt); 1288 + 1289 + dev_info(priv->dev, "%s(), event 0x%x, mux %u\n", 1290 + __func__, 1291 + event, 1292 + dapm_kcontrol_get_value(w->kcontrols[0])); 1293 + 1294 + switch (event) { 1295 + case SND_SOC_DAPM_PRE_PMU: 1296 + /* Reduce ESD resistance of AU_REFN */ 1297 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON2, 0x4000); 1298 + 1299 + /* Turn on DA_600K_NCP_VA18 */ 1300 + regmap_write(priv->regmap, MT6358_AUDNCP_CLKDIV_CON1, 0x0001); 1301 + /* Set NCP clock as 604kHz // 26MHz/43 = 604KHz */ 1302 + regmap_write(priv->regmap, MT6358_AUDNCP_CLKDIV_CON2, 0x002c); 1303 + /* Toggle RG_DIVCKS_CHG */ 1304 + regmap_write(priv->regmap, MT6358_AUDNCP_CLKDIV_CON0, 0x0001); 1305 + /* Set NCP soft start mode as default mode: 100us */ 1306 + regmap_write(priv->regmap, MT6358_AUDNCP_CLKDIV_CON4, 0x0003); 1307 + /* Enable NCP */ 1308 + regmap_write(priv->regmap, MT6358_AUDNCP_CLKDIV_CON3, 0x0000); 1309 + usleep_range(250, 270); 1310 + 1311 + /* Enable cap-less LDOs (1.5V) */ 1312 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON14, 1313 + 0x1055, 0x1055); 1314 + /* Enable NV regulator (-1.2V) */ 1315 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON15, 0x0001); 1316 + usleep_range(100, 120); 1317 + 1318 + /* Disable AUD_ZCD */ 1319 + hp_zcd_disable(priv); 1320 + 1321 + /* Disable handset short-circuit protection */ 1322 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON6, 0x0010); 1323 + 1324 + /* Enable IBIST */ 1325 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON12, 0x0055); 1326 + /* Set HP DR bias current optimization, 010: 6uA */ 1327 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON11, 0x4900); 1328 + /* Set HP & ZCD bias current optimization */ 1329 + /* 01: ZCD: 4uA, HP/HS/LO: 5uA */ 1330 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON12, 0x0055); 1331 + /* Set HS STB enhance circuits */ 1332 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON6, 0x0090); 1333 + 1334 + /* Disable HP main CMFB loop */ 1335 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON9, 0x0000); 1336 + /* Select CMFB resistor bulk to AC mode */ 1337 + /* Selec HS/LO cap size (6.5pF default) */ 1338 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON10, 0x0000); 1339 + 1340 + /* Enable HS driver bias circuits */ 1341 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON6, 0x0092); 1342 + /* Enable HS driver core circuits */ 1343 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON6, 0x0093); 1344 + 1345 + /* Enable AUD_CLK */ 1346 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON13, 1347 + 0x1, 0x1); 1348 + 1349 + /* Enable Audio DAC */ 1350 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON0, 0x0009); 1351 + /* Enable low-noise mode of DAC */ 1352 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON9, 0x0001); 1353 + /* Switch HS MUX to audio DAC */ 1354 + regmap_write(priv->regmap, MT6358_AUDDEC_ANA_CON6, 0x009b); 1355 + break; 1356 + case SND_SOC_DAPM_PRE_PMD: 1357 + /* HS mux to open */ 1358 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON6, 1359 + RG_AUDHSMUXINPUTSEL_VAUDP15_MASK_SFT, 1360 + RCV_MUX_OPEN); 1361 + 1362 + /* Disable Audio DAC */ 1363 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON0, 1364 + 0x000f, 0x0000); 1365 + 1366 + /* Disable AUD_CLK */ 1367 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON13, 1368 + 0x1, 0x0); 1369 + 1370 + /* decrease HS gain to minimum gain step by step */ 1371 + regmap_write(priv->regmap, MT6358_ZCD_CON3, DL_GAIN_N_40DB); 1372 + 1373 + /* Disable HS driver core circuits */ 1374 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON6, 1375 + 0x1, 0x0); 1376 + 1377 + /* Disable HS driver bias circuits */ 1378 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON6, 1379 + 0x1 << 1, 0x0000); 1380 + 1381 + /* Disable HP aux CMFB loop */ 1382 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON9, 1383 + 0xff << 8, 0x0); 1384 + 1385 + /* Enable HP main CMFB Switch */ 1386 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON9, 1387 + 0xff << 8, 0x2 << 8); 1388 + 1389 + /* Disable IBIST */ 1390 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON12, 1391 + 0x1 << 8, 0x1 << 8); 1392 + 1393 + /* Disable NV regulator (-1.2V) */ 1394 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON15, 1395 + 0x1, 0x0); 1396 + /* Disable cap-less LDOs (1.5V) */ 1397 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON14, 1398 + 0x1055, 0x0); 1399 + /* Disable NCP */ 1400 + regmap_update_bits(priv->regmap, MT6358_AUDNCP_CLKDIV_CON3, 1401 + 0x1, 0x1); 1402 + break; 1403 + default: 1404 + break; 1405 + } 1406 + 1407 + return 0; 1408 + } 1409 + 1410 + static int mt_aif_out_event(struct snd_soc_dapm_widget *w, 1411 + struct snd_kcontrol *kcontrol, 1412 + int event) 1413 + { 1414 + struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 1415 + struct mt6358_priv *priv = snd_soc_component_get_drvdata(cmpnt); 1416 + 1417 + dev_dbg(priv->dev, "%s(), event 0x%x, rate %d\n", 1418 + __func__, event, priv->ul_rate); 1419 + 1420 + switch (event) { 1421 + case SND_SOC_DAPM_PRE_PMU: 1422 + capture_gpio_set(priv); 1423 + break; 1424 + case SND_SOC_DAPM_POST_PMD: 1425 + capture_gpio_reset(priv); 1426 + break; 1427 + default: 1428 + break; 1429 + } 1430 + 1431 + return 0; 1432 + } 1433 + 1434 + static int mt_adc_supply_event(struct snd_soc_dapm_widget *w, 1435 + struct snd_kcontrol *kcontrol, 1436 + int event) 1437 + { 1438 + struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 1439 + struct mt6358_priv *priv = snd_soc_component_get_drvdata(cmpnt); 1440 + 1441 + dev_dbg(priv->dev, "%s(), event 0x%x\n", 1442 + __func__, event); 1443 + 1444 + switch (event) { 1445 + case SND_SOC_DAPM_PRE_PMU: 1446 + /* Enable audio ADC CLKGEN */ 1447 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON13, 1448 + 0x1 << 5, 0x1 << 5); 1449 + /* ADC CLK from CLKGEN (13MHz) */ 1450 + regmap_write(priv->regmap, MT6358_AUDENC_ANA_CON3, 1451 + 0x0000); 1452 + /* Enable LCLDO_ENC 1P8V */ 1453 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON14, 1454 + 0x2500, 0x0100); 1455 + /* LCLDO_ENC remote sense */ 1456 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON14, 1457 + 0x2500, 0x2500); 1458 + break; 1459 + case SND_SOC_DAPM_POST_PMD: 1460 + /* LCLDO_ENC remote sense off */ 1461 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON14, 1462 + 0x2500, 0x0100); 1463 + /* disable LCLDO_ENC 1P8V */ 1464 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON14, 1465 + 0x2500, 0x0000); 1466 + 1467 + /* ADC CLK from CLKGEN (13MHz) */ 1468 + regmap_write(priv->regmap, MT6358_AUDENC_ANA_CON3, 0x0000); 1469 + /* disable audio ADC CLKGEN */ 1470 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON13, 1471 + 0x1 << 5, 0x0 << 5); 1472 + break; 1473 + default: 1474 + break; 1475 + } 1476 + 1477 + return 0; 1478 + } 1479 + 1480 + static int mt6358_amic_enable(struct mt6358_priv *priv) 1481 + { 1482 + unsigned int mic_type = priv->mux_select[MUX_MIC_TYPE]; 1483 + unsigned int mux_pga_l = priv->mux_select[MUX_PGA_L]; 1484 + unsigned int mux_pga_r = priv->mux_select[MUX_PGA_R]; 1485 + 1486 + dev_info(priv->dev, "%s(), mux, mic %u, pga l %u, pga r %u\n", 1487 + __func__, mic_type, mux_pga_l, mux_pga_r); 1488 + 1489 + if (IS_DCC_BASE(mic_type)) { 1490 + /* DCC 50k CLK (from 26M) */ 1491 + regmap_write(priv->regmap, MT6358_AFE_DCCLK_CFG0, 0x2062); 1492 + regmap_write(priv->regmap, MT6358_AFE_DCCLK_CFG0, 0x2062); 1493 + regmap_write(priv->regmap, MT6358_AFE_DCCLK_CFG0, 0x2060); 1494 + regmap_write(priv->regmap, MT6358_AFE_DCCLK_CFG0, 0x2061); 1495 + regmap_write(priv->regmap, MT6358_AFE_DCCLK_CFG1, 0x0100); 1496 + } 1497 + 1498 + /* mic bias 0 */ 1499 + if (mux_pga_l == PGA_MUX_AIN0 || mux_pga_l == PGA_MUX_AIN2 || 1500 + mux_pga_r == PGA_MUX_AIN0 || mux_pga_r == PGA_MUX_AIN2) { 1501 + switch (mic_type) { 1502 + case MIC_TYPE_MUX_DCC_ECM_DIFF: 1503 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON9, 1504 + 0xff00, 0x7700); 1505 + break; 1506 + case MIC_TYPE_MUX_DCC_ECM_SINGLE: 1507 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON9, 1508 + 0xff00, 0x1100); 1509 + break; 1510 + default: 1511 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON9, 1512 + 0xff00, 0x0000); 1513 + break; 1514 + } 1515 + /* Enable MICBIAS0, MISBIAS0 = 1P9V */ 1516 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON9, 1517 + 0xff, 0x21); 1518 + } 1519 + 1520 + /* mic bias 1 */ 1521 + if (mux_pga_l == PGA_MUX_AIN1 || mux_pga_r == PGA_MUX_AIN1) { 1522 + /* Enable MICBIAS1, MISBIAS1 = 2P6V */ 1523 + if (mic_type == MIC_TYPE_MUX_DCC_ECM_SINGLE) 1524 + regmap_write(priv->regmap, 1525 + MT6358_AUDENC_ANA_CON10, 0x0161); 1526 + else 1527 + regmap_write(priv->regmap, 1528 + MT6358_AUDENC_ANA_CON10, 0x0061); 1529 + } 1530 + 1531 + if (IS_DCC_BASE(mic_type)) { 1532 + /* Audio L/R preamplifier DCC precharge */ 1533 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON0, 1534 + 0xf8ff, 0x0004); 1535 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON1, 1536 + 0xf8ff, 0x0004); 1537 + } else { 1538 + /* reset reg */ 1539 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON0, 1540 + 0xf8ff, 0x0000); 1541 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON1, 1542 + 0xf8ff, 0x0000); 1543 + } 1544 + 1545 + if (mux_pga_l != PGA_MUX_NONE) { 1546 + /* L preamplifier input sel */ 1547 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON0, 1548 + RG_AUDPREAMPLINPUTSEL_MASK_SFT, 1549 + mux_pga_l << RG_AUDPREAMPLINPUTSEL_SFT); 1550 + 1551 + /* L preamplifier enable */ 1552 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON0, 1553 + RG_AUDPREAMPLON_MASK_SFT, 1554 + 0x1 << RG_AUDPREAMPLON_SFT); 1555 + 1556 + if (IS_DCC_BASE(mic_type)) { 1557 + /* L preamplifier DCCEN */ 1558 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON0, 1559 + RG_AUDPREAMPLDCCEN_MASK_SFT, 1560 + 0x1 << RG_AUDPREAMPLDCCEN_SFT); 1561 + } 1562 + 1563 + /* L ADC input sel : L PGA. Enable audio L ADC */ 1564 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON0, 1565 + RG_AUDADCLINPUTSEL_MASK_SFT, 1566 + ADC_MUX_PREAMPLIFIER << 1567 + RG_AUDADCLINPUTSEL_SFT); 1568 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON0, 1569 + RG_AUDADCLPWRUP_MASK_SFT, 1570 + 0x1 << RG_AUDADCLPWRUP_SFT); 1571 + } 1572 + 1573 + if (mux_pga_r != PGA_MUX_NONE) { 1574 + /* R preamplifier input sel */ 1575 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON1, 1576 + RG_AUDPREAMPRINPUTSEL_MASK_SFT, 1577 + mux_pga_r << RG_AUDPREAMPRINPUTSEL_SFT); 1578 + 1579 + /* R preamplifier enable */ 1580 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON1, 1581 + RG_AUDPREAMPRON_MASK_SFT, 1582 + 0x1 << RG_AUDPREAMPRON_SFT); 1583 + 1584 + if (IS_DCC_BASE(mic_type)) { 1585 + /* R preamplifier DCCEN */ 1586 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON1, 1587 + RG_AUDPREAMPRDCCEN_MASK_SFT, 1588 + 0x1 << RG_AUDPREAMPRDCCEN_SFT); 1589 + } 1590 + 1591 + /* R ADC input sel : R PGA. Enable audio R ADC */ 1592 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON1, 1593 + RG_AUDADCRINPUTSEL_MASK_SFT, 1594 + ADC_MUX_PREAMPLIFIER << 1595 + RG_AUDADCRINPUTSEL_SFT); 1596 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON1, 1597 + RG_AUDADCRPWRUP_MASK_SFT, 1598 + 0x1 << RG_AUDADCRPWRUP_SFT); 1599 + } 1600 + 1601 + if (IS_DCC_BASE(mic_type)) { 1602 + usleep_range(100, 150); 1603 + /* Audio L preamplifier DCC precharge off */ 1604 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON0, 1605 + RG_AUDPREAMPLDCPRECHARGE_MASK_SFT, 0x0); 1606 + /* Audio R preamplifier DCC precharge off */ 1607 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON1, 1608 + RG_AUDPREAMPRDCPRECHARGE_MASK_SFT, 0x0); 1609 + 1610 + /* Short body to ground in PGA */ 1611 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON3, 1612 + 0x1 << 12, 0x0); 1613 + } 1614 + 1615 + /* here to set digital part */ 1616 + mt6358_mtkaif_tx_enable(priv); 1617 + 1618 + /* UL dmic setting off */ 1619 + regmap_write(priv->regmap, MT6358_AFE_UL_SRC_CON0_H, 0x0000); 1620 + 1621 + /* UL turn on */ 1622 + regmap_write(priv->regmap, MT6358_AFE_UL_SRC_CON0_L, 0x0001); 1623 + 1624 + return 0; 1625 + } 1626 + 1627 + static void mt6358_amic_disable(struct mt6358_priv *priv) 1628 + { 1629 + unsigned int mic_type = priv->mux_select[MUX_MIC_TYPE]; 1630 + unsigned int mux_pga_l = priv->mux_select[MUX_PGA_L]; 1631 + unsigned int mux_pga_r = priv->mux_select[MUX_PGA_R]; 1632 + 1633 + dev_info(priv->dev, "%s(), mux, mic %u, pga l %u, pga r %u\n", 1634 + __func__, mic_type, mux_pga_l, mux_pga_r); 1635 + 1636 + /* UL turn off */ 1637 + regmap_update_bits(priv->regmap, MT6358_AFE_UL_SRC_CON0_L, 1638 + 0x0001, 0x0000); 1639 + 1640 + /* disable aud_pad TX fifos */ 1641 + mt6358_mtkaif_tx_disable(priv); 1642 + 1643 + /* L ADC input sel : off, disable L ADC */ 1644 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON0, 1645 + 0xf000, 0x0000); 1646 + /* L preamplifier DCCEN */ 1647 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON0, 1648 + 0x1 << 1, 0x0); 1649 + /* L preamplifier input sel : off, L PGA 0 dB gain */ 1650 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON0, 1651 + 0xfffb, 0x0000); 1652 + 1653 + /* disable L preamplifier DCC precharge */ 1654 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON0, 1655 + 0x1 << 2, 0x0); 1656 + 1657 + /* R ADC input sel : off, disable R ADC */ 1658 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON1, 1659 + 0xf000, 0x0000); 1660 + /* R preamplifier DCCEN */ 1661 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON1, 1662 + 0x1 << 1, 0x0); 1663 + /* R preamplifier input sel : off, R PGA 0 dB gain */ 1664 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON1, 1665 + 0x0ffb, 0x0000); 1666 + 1667 + /* disable R preamplifier DCC precharge */ 1668 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON1, 1669 + 0x1 << 2, 0x0); 1670 + 1671 + /* mic bias */ 1672 + /* Disable MICBIAS0, MISBIAS0 = 1P7V */ 1673 + regmap_write(priv->regmap, MT6358_AUDENC_ANA_CON9, 0x0000); 1674 + 1675 + /* Disable MICBIAS1 */ 1676 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON10, 1677 + 0x0001, 0x0000); 1678 + 1679 + if (IS_DCC_BASE(mic_type)) { 1680 + /* dcclk_gen_on=1'b0 */ 1681 + regmap_write(priv->regmap, MT6358_AFE_DCCLK_CFG0, 0x2060); 1682 + /* dcclk_pdn=1'b1 */ 1683 + regmap_write(priv->regmap, MT6358_AFE_DCCLK_CFG0, 0x2062); 1684 + /* dcclk_ref_ck_sel=2'b00 */ 1685 + regmap_write(priv->regmap, MT6358_AFE_DCCLK_CFG0, 0x2062); 1686 + /* dcclk_div=11'b00100000011 */ 1687 + regmap_write(priv->regmap, MT6358_AFE_DCCLK_CFG0, 0x2062); 1688 + } 1689 + } 1690 + 1691 + static int mt6358_dmic_enable(struct mt6358_priv *priv) 1692 + { 1693 + dev_info(priv->dev, "%s()\n", __func__); 1694 + 1695 + /* mic bias */ 1696 + /* Enable MICBIAS0, MISBIAS0 = 1P9V */ 1697 + regmap_write(priv->regmap, MT6358_AUDENC_ANA_CON9, 0x0021); 1698 + 1699 + /* RG_BANDGAPGEN=1'b0 */ 1700 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON10, 1701 + 0x1 << 12, 0x0); 1702 + 1703 + /* DMIC enable */ 1704 + regmap_write(priv->regmap, MT6358_AUDENC_ANA_CON8, 0x0005); 1705 + 1706 + /* here to set digital part */ 1707 + mt6358_mtkaif_tx_enable(priv); 1708 + 1709 + /* UL dmic setting */ 1710 + regmap_write(priv->regmap, MT6358_AFE_UL_SRC_CON0_H, 0x0080); 1711 + 1712 + /* UL turn on */ 1713 + regmap_write(priv->regmap, MT6358_AFE_UL_SRC_CON0_L, 0x0003); 1714 + return 0; 1715 + } 1716 + 1717 + static void mt6358_dmic_disable(struct mt6358_priv *priv) 1718 + { 1719 + dev_info(priv->dev, "%s()\n", __func__); 1720 + 1721 + /* UL turn off */ 1722 + regmap_update_bits(priv->regmap, MT6358_AFE_UL_SRC_CON0_L, 1723 + 0x0003, 0x0000); 1724 + 1725 + /* disable aud_pad TX fifos */ 1726 + mt6358_mtkaif_tx_disable(priv); 1727 + 1728 + /* DMIC disable */ 1729 + regmap_write(priv->regmap, MT6358_AUDENC_ANA_CON8, 0x0000); 1730 + 1731 + /* mic bias */ 1732 + /* MISBIAS0 = 1P7V */ 1733 + regmap_write(priv->regmap, MT6358_AUDENC_ANA_CON9, 0x0001); 1734 + 1735 + /* RG_BANDGAPGEN=1'b0 */ 1736 + regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON10, 1737 + 0x1 << 12, 0x0); 1738 + 1739 + /* MICBIA0 disable */ 1740 + regmap_write(priv->regmap, MT6358_AUDENC_ANA_CON9, 0x0000); 1741 + } 1742 + 1743 + static int mt_mic_type_event(struct snd_soc_dapm_widget *w, 1744 + struct snd_kcontrol *kcontrol, 1745 + int event) 1746 + { 1747 + struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 1748 + struct mt6358_priv *priv = snd_soc_component_get_drvdata(cmpnt); 1749 + unsigned int mux = dapm_kcontrol_get_value(w->kcontrols[0]); 1750 + 1751 + dev_dbg(priv->dev, "%s(), event 0x%x, mux %u\n", 1752 + __func__, event, mux); 1753 + 1754 + switch (event) { 1755 + case SND_SOC_DAPM_WILL_PMU: 1756 + priv->mux_select[MUX_MIC_TYPE] = mux; 1757 + break; 1758 + case SND_SOC_DAPM_PRE_PMU: 1759 + switch (mux) { 1760 + case MIC_TYPE_MUX_DMIC: 1761 + mt6358_dmic_enable(priv); 1762 + break; 1763 + default: 1764 + mt6358_amic_enable(priv); 1765 + break; 1766 + } 1767 + 1768 + break; 1769 + case SND_SOC_DAPM_POST_PMD: 1770 + switch (priv->mux_select[MUX_MIC_TYPE]) { 1771 + case MIC_TYPE_MUX_DMIC: 1772 + mt6358_dmic_disable(priv); 1773 + break; 1774 + default: 1775 + mt6358_amic_disable(priv); 1776 + break; 1777 + } 1778 + 1779 + priv->mux_select[MUX_MIC_TYPE] = mux; 1780 + break; 1781 + default: 1782 + break; 1783 + } 1784 + 1785 + return 0; 1786 + } 1787 + 1788 + static int mt_adc_l_event(struct snd_soc_dapm_widget *w, 1789 + struct snd_kcontrol *kcontrol, 1790 + int event) 1791 + { 1792 + struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 1793 + struct mt6358_priv *priv = snd_soc_component_get_drvdata(cmpnt); 1794 + unsigned int mux = dapm_kcontrol_get_value(w->kcontrols[0]); 1795 + 1796 + dev_dbg(priv->dev, "%s(), event = 0x%x, mux %u\n", 1797 + __func__, event, mux); 1798 + 1799 + priv->mux_select[MUX_ADC_L] = mux; 1800 + 1801 + return 0; 1802 + } 1803 + 1804 + static int mt_adc_r_event(struct snd_soc_dapm_widget *w, 1805 + struct snd_kcontrol *kcontrol, 1806 + int event) 1807 + { 1808 + struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 1809 + struct mt6358_priv *priv = snd_soc_component_get_drvdata(cmpnt); 1810 + unsigned int mux = dapm_kcontrol_get_value(w->kcontrols[0]); 1811 + 1812 + dev_dbg(priv->dev, "%s(), event = 0x%x, mux %u\n", 1813 + __func__, event, mux); 1814 + 1815 + priv->mux_select[MUX_ADC_R] = mux; 1816 + 1817 + return 0; 1818 + } 1819 + 1820 + static int mt_pga_left_event(struct snd_soc_dapm_widget *w, 1821 + struct snd_kcontrol *kcontrol, 1822 + int event) 1823 + { 1824 + struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 1825 + struct mt6358_priv *priv = snd_soc_component_get_drvdata(cmpnt); 1826 + unsigned int mux = dapm_kcontrol_get_value(w->kcontrols[0]); 1827 + 1828 + dev_dbg(priv->dev, "%s(), event = 0x%x, mux %u\n", 1829 + __func__, event, mux); 1830 + 1831 + priv->mux_select[MUX_PGA_L] = mux; 1832 + 1833 + return 0; 1834 + } 1835 + 1836 + static int mt_pga_right_event(struct snd_soc_dapm_widget *w, 1837 + struct snd_kcontrol *kcontrol, 1838 + int event) 1839 + { 1840 + struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); 1841 + struct mt6358_priv *priv = snd_soc_component_get_drvdata(cmpnt); 1842 + unsigned int mux = dapm_kcontrol_get_value(w->kcontrols[0]); 1843 + 1844 + dev_dbg(priv->dev, "%s(), event = 0x%x, mux %u\n", 1845 + __func__, event, mux); 1846 + 1847 + priv->mux_select[MUX_PGA_R] = mux; 1848 + 1849 + return 0; 1850 + } 1851 + 1852 + static int mt_delay_250_event(struct snd_soc_dapm_widget *w, 1853 + struct snd_kcontrol *kcontrol, 1854 + int event) 1855 + { 1856 + switch (event) { 1857 + case SND_SOC_DAPM_POST_PMU: 1858 + usleep_range(250, 270); 1859 + break; 1860 + case SND_SOC_DAPM_PRE_PMD: 1861 + usleep_range(250, 270); 1862 + break; 1863 + default: 1864 + break; 1865 + } 1866 + 1867 + return 0; 1868 + } 1869 + 1870 + /* DAPM Widgets */ 1871 + static const struct snd_soc_dapm_widget mt6358_dapm_widgets[] = { 1872 + /* Global Supply*/ 1873 + SND_SOC_DAPM_SUPPLY_S("CLK_BUF", SUPPLY_SEQ_CLK_BUF, 1874 + MT6358_DCXO_CW14, 1875 + RG_XO_AUDIO_EN_M_SFT, 0, NULL, 0), 1876 + SND_SOC_DAPM_SUPPLY_S("AUDGLB", SUPPLY_SEQ_AUD_GLB, 1877 + MT6358_AUDDEC_ANA_CON13, 1878 + RG_AUDGLB_PWRDN_VA28_SFT, 1, NULL, 0), 1879 + SND_SOC_DAPM_SUPPLY_S("CLKSQ Audio", SUPPLY_SEQ_CLKSQ, 1880 + MT6358_AUDENC_ANA_CON6, 1881 + RG_CLKSQ_EN_SFT, 0, 1882 + mt_clksq_event, 1883 + SND_SOC_DAPM_PRE_PMU), 1884 + SND_SOC_DAPM_SUPPLY_S("AUDNCP_CK", SUPPLY_SEQ_TOP_CK, 1885 + MT6358_AUD_TOP_CKPDN_CON0, 1886 + RG_AUDNCP_CK_PDN_SFT, 1, NULL, 0), 1887 + SND_SOC_DAPM_SUPPLY_S("ZCD13M_CK", SUPPLY_SEQ_TOP_CK, 1888 + MT6358_AUD_TOP_CKPDN_CON0, 1889 + RG_ZCD13M_CK_PDN_SFT, 1, NULL, 0), 1890 + SND_SOC_DAPM_SUPPLY_S("AUD_CK", SUPPLY_SEQ_TOP_CK_LAST, 1891 + MT6358_AUD_TOP_CKPDN_CON0, 1892 + RG_AUD_CK_PDN_SFT, 1, 1893 + mt_delay_250_event, 1894 + SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD), 1895 + SND_SOC_DAPM_SUPPLY_S("AUDIF_CK", SUPPLY_SEQ_TOP_CK, 1896 + MT6358_AUD_TOP_CKPDN_CON0, 1897 + RG_AUDIF_CK_PDN_SFT, 1, NULL, 0), 1898 + 1899 + /* Digital Clock */ 1900 + SND_SOC_DAPM_SUPPLY_S("AUDIO_TOP_AFE_CTL", SUPPLY_SEQ_AUD_TOP_LAST, 1901 + MT6358_AUDIO_TOP_CON0, 1902 + PDN_AFE_CTL_SFT, 1, 1903 + mt_delay_250_event, 1904 + SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD), 1905 + SND_SOC_DAPM_SUPPLY_S("AUDIO_TOP_DAC_CTL", SUPPLY_SEQ_AUD_TOP, 1906 + MT6358_AUDIO_TOP_CON0, 1907 + PDN_DAC_CTL_SFT, 1, NULL, 0), 1908 + SND_SOC_DAPM_SUPPLY_S("AUDIO_TOP_ADC_CTL", SUPPLY_SEQ_AUD_TOP, 1909 + MT6358_AUDIO_TOP_CON0, 1910 + PDN_ADC_CTL_SFT, 1, NULL, 0), 1911 + SND_SOC_DAPM_SUPPLY_S("AUDIO_TOP_I2S_DL", SUPPLY_SEQ_AUD_TOP, 1912 + MT6358_AUDIO_TOP_CON0, 1913 + PDN_I2S_DL_CTL_SFT, 1, NULL, 0), 1914 + SND_SOC_DAPM_SUPPLY_S("AUDIO_TOP_PWR_CLK", SUPPLY_SEQ_AUD_TOP, 1915 + MT6358_AUDIO_TOP_CON0, 1916 + PWR_CLK_DIS_CTL_SFT, 1, NULL, 0), 1917 + SND_SOC_DAPM_SUPPLY_S("AUDIO_TOP_PDN_AFE_TESTMODEL", SUPPLY_SEQ_AUD_TOP, 1918 + MT6358_AUDIO_TOP_CON0, 1919 + PDN_AFE_TESTMODEL_CTL_SFT, 1, NULL, 0), 1920 + SND_SOC_DAPM_SUPPLY_S("AUDIO_TOP_PDN_RESERVED", SUPPLY_SEQ_AUD_TOP, 1921 + MT6358_AUDIO_TOP_CON0, 1922 + PDN_RESERVED_SFT, 1, NULL, 0), 1923 + 1924 + SND_SOC_DAPM_SUPPLY("DL Digital Clock", SND_SOC_NOPM, 1925 + 0, 0, NULL, 0), 1926 + 1927 + /* AFE ON */ 1928 + SND_SOC_DAPM_SUPPLY_S("AFE_ON", SUPPLY_SEQ_AFE, 1929 + MT6358_AFE_UL_DL_CON0, AFE_ON_SFT, 0, 1930 + NULL, 0), 1931 + 1932 + /* AIF Rx*/ 1933 + SND_SOC_DAPM_AIF_IN_E("AIF_RX", "AIF1 Playback", 0, 1934 + MT6358_AFE_DL_SRC2_CON0_L, 1935 + DL_2_SRC_ON_TMP_CTL_PRE_SFT, 0, 1936 + mt_aif_in_event, 1937 + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 1938 + 1939 + /* DL Supply */ 1940 + SND_SOC_DAPM_SUPPLY("DL Power Supply", SND_SOC_NOPM, 1941 + 0, 0, NULL, 0), 1942 + 1943 + /* DAC */ 1944 + SND_SOC_DAPM_MUX("DAC In Mux", SND_SOC_NOPM, 0, 0, &dac_in_mux_control), 1945 + 1946 + SND_SOC_DAPM_DAC("DACL", NULL, SND_SOC_NOPM, 0, 0), 1947 + 1948 + SND_SOC_DAPM_DAC("DACR", NULL, SND_SOC_NOPM, 0, 0), 1949 + 1950 + /* LOL */ 1951 + SND_SOC_DAPM_MUX("LOL Mux", SND_SOC_NOPM, 0, 0, &lo_in_mux_control), 1952 + 1953 + SND_SOC_DAPM_SUPPLY("LO Stability Enh", MT6358_AUDDEC_ANA_CON7, 1954 + RG_LOOUTPUTSTBENH_VAUDP15_SFT, 0, NULL, 0), 1955 + 1956 + SND_SOC_DAPM_OUT_DRV("LOL Buffer", MT6358_AUDDEC_ANA_CON7, 1957 + RG_AUDLOLPWRUP_VAUDP15_SFT, 0, NULL, 0), 1958 + 1959 + /* Headphone */ 1960 + SND_SOC_DAPM_MUX_E("HPL Mux", SND_SOC_NOPM, 0, 0, 1961 + &hpl_in_mux_control, 1962 + mt_hp_event, 1963 + SND_SOC_DAPM_PRE_PMU | 1964 + SND_SOC_DAPM_PRE_PMD), 1965 + 1966 + SND_SOC_DAPM_MUX_E("HPR Mux", SND_SOC_NOPM, 0, 0, 1967 + &hpr_in_mux_control, 1968 + mt_hp_event, 1969 + SND_SOC_DAPM_PRE_PMU | 1970 + SND_SOC_DAPM_PRE_PMD), 1971 + 1972 + /* Receiver */ 1973 + SND_SOC_DAPM_MUX_E("RCV Mux", SND_SOC_NOPM, 0, 0, 1974 + &rcv_in_mux_control, 1975 + mt_rcv_event, 1976 + SND_SOC_DAPM_PRE_PMU | 1977 + SND_SOC_DAPM_PRE_PMD), 1978 + 1979 + /* Outputs */ 1980 + SND_SOC_DAPM_OUTPUT("Receiver"), 1981 + SND_SOC_DAPM_OUTPUT("Headphone L"), 1982 + SND_SOC_DAPM_OUTPUT("Headphone R"), 1983 + SND_SOC_DAPM_OUTPUT("Headphone L Ext Spk Amp"), 1984 + SND_SOC_DAPM_OUTPUT("Headphone R Ext Spk Amp"), 1985 + SND_SOC_DAPM_OUTPUT("LINEOUT L"), 1986 + SND_SOC_DAPM_OUTPUT("LINEOUT L HSSPK"), 1987 + 1988 + /* SGEN */ 1989 + SND_SOC_DAPM_SUPPLY("SGEN DL Enable", MT6358_AFE_SGEN_CFG0, 1990 + SGEN_DAC_EN_CTL_SFT, 0, NULL, 0), 1991 + SND_SOC_DAPM_SUPPLY("SGEN MUTE", MT6358_AFE_SGEN_CFG0, 1992 + SGEN_MUTE_SW_CTL_SFT, 1, 1993 + mt_sgen_event, 1994 + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 1995 + SND_SOC_DAPM_SUPPLY("SGEN DL SRC", MT6358_AFE_DL_SRC2_CON0_L, 1996 + DL_2_SRC_ON_TMP_CTL_PRE_SFT, 0, NULL, 0), 1997 + 1998 + SND_SOC_DAPM_INPUT("SGEN DL"), 1999 + 2000 + /* Uplinks */ 2001 + SND_SOC_DAPM_AIF_OUT_E("AIF1TX", "AIF1 Capture", 0, 2002 + SND_SOC_NOPM, 0, 0, 2003 + mt_aif_out_event, 2004 + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 2005 + 2006 + SND_SOC_DAPM_SUPPLY_S("ADC Supply", SUPPLY_SEQ_ADC_SUPPLY, 2007 + SND_SOC_NOPM, 0, 0, 2008 + mt_adc_supply_event, 2009 + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), 2010 + 2011 + /* Uplinks MUX */ 2012 + SND_SOC_DAPM_MUX("AIF Out Mux", SND_SOC_NOPM, 0, 0, 2013 + &aif_out_mux_control), 2014 + 2015 + SND_SOC_DAPM_MUX_E("Mic Type Mux", SND_SOC_NOPM, 0, 0, 2016 + &mic_type_mux_control, 2017 + mt_mic_type_event, 2018 + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD | 2019 + SND_SOC_DAPM_WILL_PMU), 2020 + 2021 + SND_SOC_DAPM_MUX_E("ADC L Mux", SND_SOC_NOPM, 0, 0, 2022 + &adc_left_mux_control, 2023 + mt_adc_l_event, 2024 + SND_SOC_DAPM_WILL_PMU), 2025 + SND_SOC_DAPM_MUX_E("ADC R Mux", SND_SOC_NOPM, 0, 0, 2026 + &adc_right_mux_control, 2027 + mt_adc_r_event, 2028 + SND_SOC_DAPM_WILL_PMU), 2029 + 2030 + SND_SOC_DAPM_ADC("ADC L", NULL, SND_SOC_NOPM, 0, 0), 2031 + SND_SOC_DAPM_ADC("ADC R", NULL, SND_SOC_NOPM, 0, 0), 2032 + 2033 + SND_SOC_DAPM_MUX_E("PGA L Mux", SND_SOC_NOPM, 0, 0, 2034 + &pga_left_mux_control, 2035 + mt_pga_left_event, 2036 + SND_SOC_DAPM_WILL_PMU), 2037 + SND_SOC_DAPM_MUX_E("PGA R Mux", SND_SOC_NOPM, 0, 0, 2038 + &pga_right_mux_control, 2039 + mt_pga_right_event, 2040 + SND_SOC_DAPM_WILL_PMU), 2041 + 2042 + SND_SOC_DAPM_PGA("PGA L", SND_SOC_NOPM, 0, 0, NULL, 0), 2043 + SND_SOC_DAPM_PGA("PGA R", SND_SOC_NOPM, 0, 0, NULL, 0), 2044 + 2045 + /* UL input */ 2046 + SND_SOC_DAPM_INPUT("AIN0"), 2047 + SND_SOC_DAPM_INPUT("AIN1"), 2048 + SND_SOC_DAPM_INPUT("AIN2"), 2049 + }; 2050 + 2051 + static const struct snd_soc_dapm_route mt6358_dapm_routes[] = { 2052 + /* Capture */ 2053 + {"AIF1TX", NULL, "AIF Out Mux"}, 2054 + {"AIF1TX", NULL, "CLK_BUF"}, 2055 + {"AIF1TX", NULL, "AUDGLB"}, 2056 + {"AIF1TX", NULL, "CLKSQ Audio"}, 2057 + 2058 + {"AIF1TX", NULL, "AUD_CK"}, 2059 + {"AIF1TX", NULL, "AUDIF_CK"}, 2060 + 2061 + {"AIF1TX", NULL, "AUDIO_TOP_AFE_CTL"}, 2062 + {"AIF1TX", NULL, "AUDIO_TOP_ADC_CTL"}, 2063 + {"AIF1TX", NULL, "AUDIO_TOP_PWR_CLK"}, 2064 + {"AIF1TX", NULL, "AUDIO_TOP_PDN_RESERVED"}, 2065 + {"AIF1TX", NULL, "AUDIO_TOP_I2S_DL"}, 2066 + 2067 + {"AIF1TX", NULL, "AFE_ON"}, 2068 + 2069 + {"AIF Out Mux", NULL, "Mic Type Mux"}, 2070 + 2071 + {"Mic Type Mux", "ACC", "ADC L"}, 2072 + {"Mic Type Mux", "ACC", "ADC R"}, 2073 + {"Mic Type Mux", "DCC", "ADC L"}, 2074 + {"Mic Type Mux", "DCC", "ADC R"}, 2075 + {"Mic Type Mux", "DCC_ECM_DIFF", "ADC L"}, 2076 + {"Mic Type Mux", "DCC_ECM_DIFF", "ADC R"}, 2077 + {"Mic Type Mux", "DCC_ECM_SINGLE", "ADC L"}, 2078 + {"Mic Type Mux", "DCC_ECM_SINGLE", "ADC R"}, 2079 + {"Mic Type Mux", "DMIC", "AIN0"}, 2080 + {"Mic Type Mux", "DMIC", "AIN2"}, 2081 + 2082 + {"ADC L", NULL, "ADC L Mux"}, 2083 + {"ADC L", NULL, "ADC Supply"}, 2084 + {"ADC R", NULL, "ADC R Mux"}, 2085 + {"ADC R", NULL, "ADC Supply"}, 2086 + 2087 + {"ADC L Mux", "Left Preamplifier", "PGA L"}, 2088 + 2089 + {"ADC R Mux", "Right Preamplifier", "PGA R"}, 2090 + 2091 + {"PGA L", NULL, "PGA L Mux"}, 2092 + {"PGA R", NULL, "PGA R Mux"}, 2093 + 2094 + {"PGA L Mux", "AIN0", "AIN0"}, 2095 + {"PGA L Mux", "AIN1", "AIN1"}, 2096 + {"PGA L Mux", "AIN2", "AIN2"}, 2097 + 2098 + {"PGA R Mux", "AIN0", "AIN0"}, 2099 + {"PGA R Mux", "AIN1", "AIN1"}, 2100 + {"PGA R Mux", "AIN2", "AIN2"}, 2101 + 2102 + /* DL Supply */ 2103 + {"DL Power Supply", NULL, "CLK_BUF"}, 2104 + {"DL Power Supply", NULL, "AUDGLB"}, 2105 + {"DL Power Supply", NULL, "CLKSQ Audio"}, 2106 + 2107 + {"DL Power Supply", NULL, "AUDNCP_CK"}, 2108 + {"DL Power Supply", NULL, "ZCD13M_CK"}, 2109 + {"DL Power Supply", NULL, "AUD_CK"}, 2110 + {"DL Power Supply", NULL, "AUDIF_CK"}, 2111 + 2112 + /* DL Digital Supply */ 2113 + {"DL Digital Clock", NULL, "AUDIO_TOP_AFE_CTL"}, 2114 + {"DL Digital Clock", NULL, "AUDIO_TOP_DAC_CTL"}, 2115 + {"DL Digital Clock", NULL, "AUDIO_TOP_PWR_CLK"}, 2116 + 2117 + {"DL Digital Clock", NULL, "AFE_ON"}, 2118 + 2119 + {"AIF_RX", NULL, "DL Digital Clock"}, 2120 + 2121 + /* DL Path */ 2122 + {"DAC In Mux", "Normal Path", "AIF_RX"}, 2123 + 2124 + {"DAC In Mux", "Sgen", "SGEN DL"}, 2125 + {"SGEN DL", NULL, "SGEN DL SRC"}, 2126 + {"SGEN DL", NULL, "SGEN MUTE"}, 2127 + {"SGEN DL", NULL, "SGEN DL Enable"}, 2128 + {"SGEN DL", NULL, "DL Digital Clock"}, 2129 + {"SGEN DL", NULL, "AUDIO_TOP_PDN_AFE_TESTMODEL"}, 2130 + 2131 + {"DACL", NULL, "DAC In Mux"}, 2132 + {"DACL", NULL, "DL Power Supply"}, 2133 + 2134 + {"DACR", NULL, "DAC In Mux"}, 2135 + {"DACR", NULL, "DL Power Supply"}, 2136 + 2137 + /* Lineout Path */ 2138 + {"LOL Mux", "Playback", "DACL"}, 2139 + 2140 + {"LOL Buffer", NULL, "LOL Mux"}, 2141 + {"LOL Buffer", NULL, "LO Stability Enh"}, 2142 + 2143 + {"LINEOUT L", NULL, "LOL Buffer"}, 2144 + 2145 + /* Headphone Path */ 2146 + {"HPL Mux", "Audio Playback", "DACL"}, 2147 + {"HPR Mux", "Audio Playback", "DACR"}, 2148 + {"HPL Mux", "HP Impedance", "DACL"}, 2149 + {"HPR Mux", "HP Impedance", "DACR"}, 2150 + {"HPL Mux", "LoudSPK Playback", "DACL"}, 2151 + {"HPR Mux", "LoudSPK Playback", "DACR"}, 2152 + 2153 + {"Headphone L", NULL, "HPL Mux"}, 2154 + {"Headphone R", NULL, "HPR Mux"}, 2155 + {"Headphone L Ext Spk Amp", NULL, "HPL Mux"}, 2156 + {"Headphone R Ext Spk Amp", NULL, "HPR Mux"}, 2157 + {"LINEOUT L HSSPK", NULL, "HPL Mux"}, 2158 + 2159 + /* Receiver Path */ 2160 + {"RCV Mux", "Voice Playback", "DACL"}, 2161 + {"Receiver", NULL, "RCV Mux"}, 2162 + }; 2163 + 2164 + static int mt6358_codec_dai_hw_params(struct snd_pcm_substream *substream, 2165 + struct snd_pcm_hw_params *params, 2166 + struct snd_soc_dai *dai) 2167 + { 2168 + struct snd_soc_component *cmpnt = dai->component; 2169 + struct mt6358_priv *priv = snd_soc_component_get_drvdata(cmpnt); 2170 + unsigned int rate = params_rate(params); 2171 + 2172 + dev_info(priv->dev, "%s(), substream->stream %d, rate %d, number %d\n", 2173 + __func__, 2174 + substream->stream, 2175 + rate, 2176 + substream->number); 2177 + 2178 + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 2179 + priv->dl_rate = rate; 2180 + else if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) 2181 + priv->ul_rate = rate; 2182 + 2183 + return 0; 2184 + } 2185 + 2186 + static const struct snd_soc_dai_ops mt6358_codec_dai_ops = { 2187 + .hw_params = mt6358_codec_dai_hw_params, 2188 + }; 2189 + 2190 + #define MT6358_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_BE |\ 2191 + SNDRV_PCM_FMTBIT_U16_LE | SNDRV_PCM_FMTBIT_U16_BE |\ 2192 + SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S24_BE |\ 2193 + SNDRV_PCM_FMTBIT_U24_LE | SNDRV_PCM_FMTBIT_U24_BE |\ 2194 + SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE |\ 2195 + SNDRV_PCM_FMTBIT_U32_LE | SNDRV_PCM_FMTBIT_U32_BE) 2196 + 2197 + static struct snd_soc_dai_driver mt6358_dai_driver[] = { 2198 + { 2199 + .name = "mt6358-snd-codec-aif1", 2200 + .playback = { 2201 + .stream_name = "AIF1 Playback", 2202 + .channels_min = 1, 2203 + .channels_max = 2, 2204 + .rates = SNDRV_PCM_RATE_8000_48000 | 2205 + SNDRV_PCM_RATE_96000 | 2206 + SNDRV_PCM_RATE_192000, 2207 + .formats = MT6358_FORMATS, 2208 + }, 2209 + .capture = { 2210 + .stream_name = "AIF1 Capture", 2211 + .channels_min = 1, 2212 + .channels_max = 2, 2213 + .rates = SNDRV_PCM_RATE_8000 | 2214 + SNDRV_PCM_RATE_16000 | 2215 + SNDRV_PCM_RATE_32000 | 2216 + SNDRV_PCM_RATE_48000, 2217 + .formats = MT6358_FORMATS, 2218 + }, 2219 + .ops = &mt6358_codec_dai_ops, 2220 + }, 2221 + }; 2222 + 2223 + static int mt6358_codec_init_reg(struct mt6358_priv *priv) 2224 + { 2225 + int ret = 0; 2226 + 2227 + /* Disable HeadphoneL/HeadphoneR short circuit protection */ 2228 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON0, 2229 + RG_AUDHPLSCDISABLE_VAUDP15_MASK_SFT, 2230 + 0x1 << RG_AUDHPLSCDISABLE_VAUDP15_SFT); 2231 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON0, 2232 + RG_AUDHPRSCDISABLE_VAUDP15_MASK_SFT, 2233 + 0x1 << RG_AUDHPRSCDISABLE_VAUDP15_SFT); 2234 + /* Disable voice short circuit protection */ 2235 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON6, 2236 + RG_AUDHSSCDISABLE_VAUDP15_MASK_SFT, 2237 + 0x1 << RG_AUDHSSCDISABLE_VAUDP15_SFT); 2238 + /* disable LO buffer left short circuit protection */ 2239 + regmap_update_bits(priv->regmap, MT6358_AUDDEC_ANA_CON7, 2240 + RG_AUDLOLSCDISABLE_VAUDP15_MASK_SFT, 2241 + 0x1 << RG_AUDLOLSCDISABLE_VAUDP15_SFT); 2242 + 2243 + /* accdet s/w enable */ 2244 + regmap_update_bits(priv->regmap, MT6358_ACCDET_CON13, 2245 + 0xFFFF, 0x700E); 2246 + 2247 + /* gpio miso driving set to 4mA */ 2248 + regmap_write(priv->regmap, MT6358_DRV_CON3, 0x8888); 2249 + 2250 + /* set gpio */ 2251 + playback_gpio_reset(priv); 2252 + capture_gpio_reset(priv); 2253 + 2254 + return ret; 2255 + } 2256 + 2257 + static int mt6358_codec_probe(struct snd_soc_component *cmpnt) 2258 + { 2259 + struct mt6358_priv *priv = snd_soc_component_get_drvdata(cmpnt); 2260 + int ret; 2261 + 2262 + snd_soc_component_init_regmap(cmpnt, priv->regmap); 2263 + 2264 + mt6358_codec_init_reg(priv); 2265 + 2266 + priv->avdd_reg = devm_regulator_get(priv->dev, "Avdd"); 2267 + if (IS_ERR(priv->avdd_reg)) { 2268 + dev_err(priv->dev, "%s() have no Avdd supply", __func__); 2269 + return PTR_ERR(priv->avdd_reg); 2270 + } 2271 + 2272 + ret = regulator_enable(priv->avdd_reg); 2273 + if (ret) 2274 + return ret; 2275 + 2276 + return 0; 2277 + } 2278 + 2279 + static const struct snd_soc_component_driver mt6358_soc_component_driver = { 2280 + .probe = mt6358_codec_probe, 2281 + .controls = mt6358_snd_controls, 2282 + .num_controls = ARRAY_SIZE(mt6358_snd_controls), 2283 + .dapm_widgets = mt6358_dapm_widgets, 2284 + .num_dapm_widgets = ARRAY_SIZE(mt6358_dapm_widgets), 2285 + .dapm_routes = mt6358_dapm_routes, 2286 + .num_dapm_routes = ARRAY_SIZE(mt6358_dapm_routes), 2287 + }; 2288 + 2289 + static int mt6358_platform_driver_probe(struct platform_device *pdev) 2290 + { 2291 + struct mt6358_priv *priv; 2292 + struct mt6397_chip *mt6397 = dev_get_drvdata(pdev->dev.parent); 2293 + 2294 + priv = devm_kzalloc(&pdev->dev, 2295 + sizeof(struct mt6358_priv), 2296 + GFP_KERNEL); 2297 + if (!priv) 2298 + return -ENOMEM; 2299 + 2300 + dev_set_drvdata(&pdev->dev, priv); 2301 + 2302 + priv->dev = &pdev->dev; 2303 + 2304 + priv->regmap = mt6397->regmap; 2305 + if (IS_ERR(priv->regmap)) 2306 + return PTR_ERR(priv->regmap); 2307 + 2308 + dev_info(priv->dev, "%s(), dev name %s\n", 2309 + __func__, dev_name(&pdev->dev)); 2310 + 2311 + return devm_snd_soc_register_component(&pdev->dev, 2312 + &mt6358_soc_component_driver, 2313 + mt6358_dai_driver, 2314 + ARRAY_SIZE(mt6358_dai_driver)); 2315 + } 2316 + 2317 + static const struct of_device_id mt6358_of_match[] = { 2318 + {.compatible = "mediatek,mt6358-sound",}, 2319 + {} 2320 + }; 2321 + MODULE_DEVICE_TABLE(of, mt6358_of_match); 2322 + 2323 + static struct platform_driver mt6358_platform_driver = { 2324 + .driver = { 2325 + .name = "mt6358-sound", 2326 + .of_match_table = mt6358_of_match, 2327 + }, 2328 + .probe = mt6358_platform_driver_probe, 2329 + }; 2330 + 2331 + module_platform_driver(mt6358_platform_driver) 2332 + 2333 + /* Module information */ 2334 + MODULE_DESCRIPTION("MT6358 ALSA SoC codec driver"); 2335 + MODULE_AUTHOR("KaiChieh Chuang <kaichieh.chuang@mediatek.com>"); 2336 + MODULE_LICENSE("GPL v2");
+2314
sound/soc/codecs/mt6358.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 */ 2 + /* 3 + * mt6358.h -- mt6358 ALSA SoC audio codec driver 4 + * 5 + * Copyright (c) 2018 MediaTek Inc. 6 + * Author: KaiChieh Chuang <kaichieh.chuang@mediatek.com> 7 + */ 8 + 9 + #ifndef __MT6358_H__ 10 + #define __MT6358_H__ 11 + 12 + /* Reg bit define */ 13 + /* MT6358_DCXO_CW14 */ 14 + #define RG_XO_AUDIO_EN_M_SFT 13 15 + 16 + /* MT6358_DCXO_CW13 */ 17 + #define RG_XO_VOW_EN_SFT 8 18 + 19 + /* MT6358_AUD_TOP_CKPDN_CON0 */ 20 + #define RG_VOW13M_CK_PDN_SFT 13 21 + #define RG_VOW13M_CK_PDN_MASK 0x1 22 + #define RG_VOW13M_CK_PDN_MASK_SFT (0x1 << 13) 23 + #define RG_VOW32K_CK_PDN_SFT 12 24 + #define RG_VOW32K_CK_PDN_MASK 0x1 25 + #define RG_VOW32K_CK_PDN_MASK_SFT (0x1 << 12) 26 + #define RG_AUD_INTRP_CK_PDN_SFT 8 27 + #define RG_AUD_INTRP_CK_PDN_MASK 0x1 28 + #define RG_AUD_INTRP_CK_PDN_MASK_SFT (0x1 << 8) 29 + #define RG_PAD_AUD_CLK_MISO_CK_PDN_SFT 7 30 + #define RG_PAD_AUD_CLK_MISO_CK_PDN_MASK 0x1 31 + #define RG_PAD_AUD_CLK_MISO_CK_PDN_MASK_SFT (0x1 << 7) 32 + #define RG_AUDNCP_CK_PDN_SFT 6 33 + #define RG_AUDNCP_CK_PDN_MASK 0x1 34 + #define RG_AUDNCP_CK_PDN_MASK_SFT (0x1 << 6) 35 + #define RG_ZCD13M_CK_PDN_SFT 5 36 + #define RG_ZCD13M_CK_PDN_MASK 0x1 37 + #define RG_ZCD13M_CK_PDN_MASK_SFT (0x1 << 5) 38 + #define RG_AUDIF_CK_PDN_SFT 2 39 + #define RG_AUDIF_CK_PDN_MASK 0x1 40 + #define RG_AUDIF_CK_PDN_MASK_SFT (0x1 << 2) 41 + #define RG_AUD_CK_PDN_SFT 1 42 + #define RG_AUD_CK_PDN_MASK 0x1 43 + #define RG_AUD_CK_PDN_MASK_SFT (0x1 << 1) 44 + #define RG_ACCDET_CK_PDN_SFT 0 45 + #define RG_ACCDET_CK_PDN_MASK 0x1 46 + #define RG_ACCDET_CK_PDN_MASK_SFT (0x1 << 0) 47 + 48 + /* MT6358_AUD_TOP_CKPDN_CON0_SET */ 49 + #define RG_AUD_TOP_CKPDN_CON0_SET_SFT 0 50 + #define RG_AUD_TOP_CKPDN_CON0_SET_MASK 0x3fff 51 + #define RG_AUD_TOP_CKPDN_CON0_SET_MASK_SFT (0x3fff << 0) 52 + 53 + /* MT6358_AUD_TOP_CKPDN_CON0_CLR */ 54 + #define RG_AUD_TOP_CKPDN_CON0_CLR_SFT 0 55 + #define RG_AUD_TOP_CKPDN_CON0_CLR_MASK 0x3fff 56 + #define RG_AUD_TOP_CKPDN_CON0_CLR_MASK_SFT (0x3fff << 0) 57 + 58 + /* MT6358_AUD_TOP_CKSEL_CON0 */ 59 + #define RG_AUDIF_CK_CKSEL_SFT 3 60 + #define RG_AUDIF_CK_CKSEL_MASK 0x1 61 + #define RG_AUDIF_CK_CKSEL_MASK_SFT (0x1 << 3) 62 + #define RG_AUD_CK_CKSEL_SFT 2 63 + #define RG_AUD_CK_CKSEL_MASK 0x1 64 + #define RG_AUD_CK_CKSEL_MASK_SFT (0x1 << 2) 65 + 66 + /* MT6358_AUD_TOP_CKSEL_CON0_SET */ 67 + #define RG_AUD_TOP_CKSEL_CON0_SET_SFT 0 68 + #define RG_AUD_TOP_CKSEL_CON0_SET_MASK 0xf 69 + #define RG_AUD_TOP_CKSEL_CON0_SET_MASK_SFT (0xf << 0) 70 + 71 + /* MT6358_AUD_TOP_CKSEL_CON0_CLR */ 72 + #define RG_AUD_TOP_CKSEL_CON0_CLR_SFT 0 73 + #define RG_AUD_TOP_CKSEL_CON0_CLR_MASK 0xf 74 + #define RG_AUD_TOP_CKSEL_CON0_CLR_MASK_SFT (0xf << 0) 75 + 76 + /* MT6358_AUD_TOP_CKTST_CON0 */ 77 + #define RG_VOW13M_CK_TSTSEL_SFT 9 78 + #define RG_VOW13M_CK_TSTSEL_MASK 0x1 79 + #define RG_VOW13M_CK_TSTSEL_MASK_SFT (0x1 << 9) 80 + #define RG_VOW13M_CK_TST_DIS_SFT 8 81 + #define RG_VOW13M_CK_TST_DIS_MASK 0x1 82 + #define RG_VOW13M_CK_TST_DIS_MASK_SFT (0x1 << 8) 83 + #define RG_AUD26M_CK_TSTSEL_SFT 4 84 + #define RG_AUD26M_CK_TSTSEL_MASK 0x1 85 + #define RG_AUD26M_CK_TSTSEL_MASK_SFT (0x1 << 4) 86 + #define RG_AUDIF_CK_TSTSEL_SFT 3 87 + #define RG_AUDIF_CK_TSTSEL_MASK 0x1 88 + #define RG_AUDIF_CK_TSTSEL_MASK_SFT (0x1 << 3) 89 + #define RG_AUD_CK_TSTSEL_SFT 2 90 + #define RG_AUD_CK_TSTSEL_MASK 0x1 91 + #define RG_AUD_CK_TSTSEL_MASK_SFT (0x1 << 2) 92 + #define RG_AUD26M_CK_TST_DIS_SFT 0 93 + #define RG_AUD26M_CK_TST_DIS_MASK 0x1 94 + #define RG_AUD26M_CK_TST_DIS_MASK_SFT (0x1 << 0) 95 + 96 + /* MT6358_AUD_TOP_CLK_HWEN_CON0 */ 97 + #define RG_AUD_INTRP_CK_PDN_HWEN_SFT 0 98 + #define RG_AUD_INTRP_CK_PDN_HWEN_MASK 0x1 99 + #define RG_AUD_INTRP_CK_PDN_HWEN_MASK_SFT (0x1 << 0) 100 + 101 + /* MT6358_AUD_TOP_CLK_HWEN_CON0_SET */ 102 + #define RG_AUD_INTRP_CK_PND_HWEN_CON0_SET_SFT 0 103 + #define RG_AUD_INTRP_CK_PND_HWEN_CON0_SET_MASK 0xffff 104 + #define RG_AUD_INTRP_CK_PND_HWEN_CON0_SET_MASK_SFT (0xffff << 0) 105 + 106 + /* MT6358_AUD_TOP_CLK_HWEN_CON0_CLR */ 107 + #define RG_AUD_INTRP_CLK_PDN_HWEN_CON0_CLR_SFT 0 108 + #define RG_AUD_INTRP_CLK_PDN_HWEN_CON0_CLR_MASK 0xffff 109 + #define RG_AUD_INTRP_CLK_PDN_HWEN_CON0_CLR_MASK_SFT (0xffff << 0) 110 + 111 + /* MT6358_AUD_TOP_RST_CON0 */ 112 + #define RG_AUDNCP_RST_SFT 3 113 + #define RG_AUDNCP_RST_MASK 0x1 114 + #define RG_AUDNCP_RST_MASK_SFT (0x1 << 3) 115 + #define RG_ZCD_RST_SFT 2 116 + #define RG_ZCD_RST_MASK 0x1 117 + #define RG_ZCD_RST_MASK_SFT (0x1 << 2) 118 + #define RG_ACCDET_RST_SFT 1 119 + #define RG_ACCDET_RST_MASK 0x1 120 + #define RG_ACCDET_RST_MASK_SFT (0x1 << 1) 121 + #define RG_AUDIO_RST_SFT 0 122 + #define RG_AUDIO_RST_MASK 0x1 123 + #define RG_AUDIO_RST_MASK_SFT (0x1 << 0) 124 + 125 + /* MT6358_AUD_TOP_RST_CON0_SET */ 126 + #define RG_AUD_TOP_RST_CON0_SET_SFT 0 127 + #define RG_AUD_TOP_RST_CON0_SET_MASK 0xf 128 + #define RG_AUD_TOP_RST_CON0_SET_MASK_SFT (0xf << 0) 129 + 130 + /* MT6358_AUD_TOP_RST_CON0_CLR */ 131 + #define RG_AUD_TOP_RST_CON0_CLR_SFT 0 132 + #define RG_AUD_TOP_RST_CON0_CLR_MASK 0xf 133 + #define RG_AUD_TOP_RST_CON0_CLR_MASK_SFT (0xf << 0) 134 + 135 + /* MT6358_AUD_TOP_RST_BANK_CON0 */ 136 + #define BANK_AUDZCD_SWRST_SFT 2 137 + #define BANK_AUDZCD_SWRST_MASK 0x1 138 + #define BANK_AUDZCD_SWRST_MASK_SFT (0x1 << 2) 139 + #define BANK_AUDIO_SWRST_SFT 1 140 + #define BANK_AUDIO_SWRST_MASK 0x1 141 + #define BANK_AUDIO_SWRST_MASK_SFT (0x1 << 1) 142 + #define BANK_ACCDET_SWRST_SFT 0 143 + #define BANK_ACCDET_SWRST_MASK 0x1 144 + #define BANK_ACCDET_SWRST_MASK_SFT (0x1 << 0) 145 + 146 + /* MT6358_AUD_TOP_INT_CON0 */ 147 + #define RG_INT_EN_AUDIO_SFT 0 148 + #define RG_INT_EN_AUDIO_MASK 0x1 149 + #define RG_INT_EN_AUDIO_MASK_SFT (0x1 << 0) 150 + #define RG_INT_EN_ACCDET_SFT 5 151 + #define RG_INT_EN_ACCDET_MASK 0x1 152 + #define RG_INT_EN_ACCDET_MASK_SFT (0x1 << 5) 153 + #define RG_INT_EN_ACCDET_EINT0_SFT 6 154 + #define RG_INT_EN_ACCDET_EINT0_MASK 0x1 155 + #define RG_INT_EN_ACCDET_EINT0_MASK_SFT (0x1 << 6) 156 + #define RG_INT_EN_ACCDET_EINT1_SFT 7 157 + #define RG_INT_EN_ACCDET_EINT1_MASK 0x1 158 + #define RG_INT_EN_ACCDET_EINT1_MASK_SFT (0x1 << 7) 159 + 160 + /* MT6358_AUD_TOP_INT_CON0_SET */ 161 + #define RG_AUD_INT_CON0_SET_SFT 0 162 + #define RG_AUD_INT_CON0_SET_MASK 0xffff 163 + #define RG_AUD_INT_CON0_SET_MASK_SFT (0xffff << 0) 164 + 165 + /* MT6358_AUD_TOP_INT_CON0_CLR */ 166 + #define RG_AUD_INT_CON0_CLR_SFT 0 167 + #define RG_AUD_INT_CON0_CLR_MASK 0xffff 168 + #define RG_AUD_INT_CON0_CLR_MASK_SFT (0xffff << 0) 169 + 170 + /* MT6358_AUD_TOP_INT_MASK_CON0 */ 171 + #define RG_INT_MASK_AUDIO_SFT 0 172 + #define RG_INT_MASK_AUDIO_MASK 0x1 173 + #define RG_INT_MASK_AUDIO_MASK_SFT (0x1 << 0) 174 + #define RG_INT_MASK_ACCDET_SFT 5 175 + #define RG_INT_MASK_ACCDET_MASK 0x1 176 + #define RG_INT_MASK_ACCDET_MASK_SFT (0x1 << 5) 177 + #define RG_INT_MASK_ACCDET_EINT0_SFT 6 178 + #define RG_INT_MASK_ACCDET_EINT0_MASK 0x1 179 + #define RG_INT_MASK_ACCDET_EINT0_MASK_SFT (0x1 << 6) 180 + #define RG_INT_MASK_ACCDET_EINT1_SFT 7 181 + #define RG_INT_MASK_ACCDET_EINT1_MASK 0x1 182 + #define RG_INT_MASK_ACCDET_EINT1_MASK_SFT (0x1 << 7) 183 + 184 + /* MT6358_AUD_TOP_INT_MASK_CON0_SET */ 185 + #define RG_AUD_INT_MASK_CON0_SET_SFT 0 186 + #define RG_AUD_INT_MASK_CON0_SET_MASK 0xff 187 + #define RG_AUD_INT_MASK_CON0_SET_MASK_SFT (0xff << 0) 188 + 189 + /* MT6358_AUD_TOP_INT_MASK_CON0_CLR */ 190 + #define RG_AUD_INT_MASK_CON0_CLR_SFT 0 191 + #define RG_AUD_INT_MASK_CON0_CLR_MASK 0xff 192 + #define RG_AUD_INT_MASK_CON0_CLR_MASK_SFT (0xff << 0) 193 + 194 + /* MT6358_AUD_TOP_INT_STATUS0 */ 195 + #define RG_INT_STATUS_AUDIO_SFT 0 196 + #define RG_INT_STATUS_AUDIO_MASK 0x1 197 + #define RG_INT_STATUS_AUDIO_MASK_SFT (0x1 << 0) 198 + #define RG_INT_STATUS_ACCDET_SFT 5 199 + #define RG_INT_STATUS_ACCDET_MASK 0x1 200 + #define RG_INT_STATUS_ACCDET_MASK_SFT (0x1 << 5) 201 + #define RG_INT_STATUS_ACCDET_EINT0_SFT 6 202 + #define RG_INT_STATUS_ACCDET_EINT0_MASK 0x1 203 + #define RG_INT_STATUS_ACCDET_EINT0_MASK_SFT (0x1 << 6) 204 + #define RG_INT_STATUS_ACCDET_EINT1_SFT 7 205 + #define RG_INT_STATUS_ACCDET_EINT1_MASK 0x1 206 + #define RG_INT_STATUS_ACCDET_EINT1_MASK_SFT (0x1 << 7) 207 + 208 + /* MT6358_AUD_TOP_INT_RAW_STATUS0 */ 209 + #define RG_INT_RAW_STATUS_AUDIO_SFT 0 210 + #define RG_INT_RAW_STATUS_AUDIO_MASK 0x1 211 + #define RG_INT_RAW_STATUS_AUDIO_MASK_SFT (0x1 << 0) 212 + #define RG_INT_RAW_STATUS_ACCDET_SFT 5 213 + #define RG_INT_RAW_STATUS_ACCDET_MASK 0x1 214 + #define RG_INT_RAW_STATUS_ACCDET_MASK_SFT (0x1 << 5) 215 + #define RG_INT_RAW_STATUS_ACCDET_EINT0_SFT 6 216 + #define RG_INT_RAW_STATUS_ACCDET_EINT0_MASK 0x1 217 + #define RG_INT_RAW_STATUS_ACCDET_EINT0_MASK_SFT (0x1 << 6) 218 + #define RG_INT_RAW_STATUS_ACCDET_EINT1_SFT 7 219 + #define RG_INT_RAW_STATUS_ACCDET_EINT1_MASK 0x1 220 + #define RG_INT_RAW_STATUS_ACCDET_EINT1_MASK_SFT (0x1 << 7) 221 + 222 + /* MT6358_AUD_TOP_INT_MISC_CON0 */ 223 + #define RG_AUD_TOP_INT_POLARITY_SFT 0 224 + #define RG_AUD_TOP_INT_POLARITY_MASK 0x1 225 + #define RG_AUD_TOP_INT_POLARITY_MASK_SFT (0x1 << 0) 226 + 227 + /* MT6358_AUDNCP_CLKDIV_CON0 */ 228 + #define RG_DIVCKS_CHG_SFT 0 229 + #define RG_DIVCKS_CHG_MASK 0x1 230 + #define RG_DIVCKS_CHG_MASK_SFT (0x1 << 0) 231 + 232 + /* MT6358_AUDNCP_CLKDIV_CON1 */ 233 + #define RG_DIVCKS_ON_SFT 0 234 + #define RG_DIVCKS_ON_MASK 0x1 235 + #define RG_DIVCKS_ON_MASK_SFT (0x1 << 0) 236 + 237 + /* MT6358_AUDNCP_CLKDIV_CON2 */ 238 + #define RG_DIVCKS_PRG_SFT 0 239 + #define RG_DIVCKS_PRG_MASK 0x1ff 240 + #define RG_DIVCKS_PRG_MASK_SFT (0x1ff << 0) 241 + 242 + /* MT6358_AUDNCP_CLKDIV_CON3 */ 243 + #define RG_DIVCKS_PWD_NCP_SFT 0 244 + #define RG_DIVCKS_PWD_NCP_MASK 0x1 245 + #define RG_DIVCKS_PWD_NCP_MASK_SFT (0x1 << 0) 246 + 247 + /* MT6358_AUDNCP_CLKDIV_CON4 */ 248 + #define RG_DIVCKS_PWD_NCP_ST_SEL_SFT 0 249 + #define RG_DIVCKS_PWD_NCP_ST_SEL_MASK 0x3 250 + #define RG_DIVCKS_PWD_NCP_ST_SEL_MASK_SFT (0x3 << 0) 251 + 252 + /* MT6358_AUD_TOP_MON_CON0 */ 253 + #define RG_AUD_TOP_MON_SEL_SFT 0 254 + #define RG_AUD_TOP_MON_SEL_MASK 0x7 255 + #define RG_AUD_TOP_MON_SEL_MASK_SFT (0x7 << 0) 256 + #define RG_AUD_CLK_INT_MON_FLAG_SEL_SFT 3 257 + #define RG_AUD_CLK_INT_MON_FLAG_SEL_MASK 0xff 258 + #define RG_AUD_CLK_INT_MON_FLAG_SEL_MASK_SFT (0xff << 3) 259 + #define RG_AUD_CLK_INT_MON_FLAG_EN_SFT 11 260 + #define RG_AUD_CLK_INT_MON_FLAG_EN_MASK 0x1 261 + #define RG_AUD_CLK_INT_MON_FLAG_EN_MASK_SFT (0x1 << 11) 262 + 263 + /* MT6358_AUDIO_DIG_DSN_ID */ 264 + #define AUDIO_DIG_ANA_ID_SFT 0 265 + #define AUDIO_DIG_ANA_ID_MASK 0xff 266 + #define AUDIO_DIG_ANA_ID_MASK_SFT (0xff << 0) 267 + #define AUDIO_DIG_DIG_ID_SFT 8 268 + #define AUDIO_DIG_DIG_ID_MASK 0xff 269 + #define AUDIO_DIG_DIG_ID_MASK_SFT (0xff << 8) 270 + 271 + /* MT6358_AUDIO_DIG_DSN_REV0 */ 272 + #define AUDIO_DIG_ANA_MINOR_REV_SFT 0 273 + #define AUDIO_DIG_ANA_MINOR_REV_MASK 0xf 274 + #define AUDIO_DIG_ANA_MINOR_REV_MASK_SFT (0xf << 0) 275 + #define AUDIO_DIG_ANA_MAJOR_REV_SFT 4 276 + #define AUDIO_DIG_ANA_MAJOR_REV_MASK 0xf 277 + #define AUDIO_DIG_ANA_MAJOR_REV_MASK_SFT (0xf << 4) 278 + #define AUDIO_DIG_DIG_MINOR_REV_SFT 8 279 + #define AUDIO_DIG_DIG_MINOR_REV_MASK 0xf 280 + #define AUDIO_DIG_DIG_MINOR_REV_MASK_SFT (0xf << 8) 281 + #define AUDIO_DIG_DIG_MAJOR_REV_SFT 12 282 + #define AUDIO_DIG_DIG_MAJOR_REV_MASK 0xf 283 + #define AUDIO_DIG_DIG_MAJOR_REV_MASK_SFT (0xf << 12) 284 + 285 + /* MT6358_AUDIO_DIG_DSN_DBI */ 286 + #define AUDIO_DIG_DSN_CBS_SFT 0 287 + #define AUDIO_DIG_DSN_CBS_MASK 0x3 288 + #define AUDIO_DIG_DSN_CBS_MASK_SFT (0x3 << 0) 289 + #define AUDIO_DIG_DSN_BIX_SFT 2 290 + #define AUDIO_DIG_DSN_BIX_MASK 0x3 291 + #define AUDIO_DIG_DSN_BIX_MASK_SFT (0x3 << 2) 292 + #define AUDIO_DIG_ESP_SFT 8 293 + #define AUDIO_DIG_ESP_MASK 0xff 294 + #define AUDIO_DIG_ESP_MASK_SFT (0xff << 8) 295 + 296 + /* MT6358_AUDIO_DIG_DSN_DXI */ 297 + #define AUDIO_DIG_DSN_FPI_SFT 0 298 + #define AUDIO_DIG_DSN_FPI_MASK 0xff 299 + #define AUDIO_DIG_DSN_FPI_MASK_SFT (0xff << 0) 300 + 301 + /* MT6358_AFE_UL_DL_CON0 */ 302 + #define AFE_UL_LR_SWAP_SFT 15 303 + #define AFE_UL_LR_SWAP_MASK 0x1 304 + #define AFE_UL_LR_SWAP_MASK_SFT (0x1 << 15) 305 + #define AFE_DL_LR_SWAP_SFT 14 306 + #define AFE_DL_LR_SWAP_MASK 0x1 307 + #define AFE_DL_LR_SWAP_MASK_SFT (0x1 << 14) 308 + #define AFE_ON_SFT 0 309 + #define AFE_ON_MASK 0x1 310 + #define AFE_ON_MASK_SFT (0x1 << 0) 311 + 312 + /* MT6358_AFE_DL_SRC2_CON0_L */ 313 + #define DL_2_SRC_ON_TMP_CTL_PRE_SFT 0 314 + #define DL_2_SRC_ON_TMP_CTL_PRE_MASK 0x1 315 + #define DL_2_SRC_ON_TMP_CTL_PRE_MASK_SFT (0x1 << 0) 316 + 317 + /* MT6358_AFE_UL_SRC_CON0_H */ 318 + #define C_DIGMIC_PHASE_SEL_CH1_CTL_SFT 11 319 + #define C_DIGMIC_PHASE_SEL_CH1_CTL_MASK 0x7 320 + #define C_DIGMIC_PHASE_SEL_CH1_CTL_MASK_SFT (0x7 << 11) 321 + #define C_DIGMIC_PHASE_SEL_CH2_CTL_SFT 8 322 + #define C_DIGMIC_PHASE_SEL_CH2_CTL_MASK 0x7 323 + #define C_DIGMIC_PHASE_SEL_CH2_CTL_MASK_SFT (0x7 << 8) 324 + #define C_TWO_DIGITAL_MIC_CTL_SFT 7 325 + #define C_TWO_DIGITAL_MIC_CTL_MASK 0x1 326 + #define C_TWO_DIGITAL_MIC_CTL_MASK_SFT (0x1 << 7) 327 + 328 + /* MT6358_AFE_UL_SRC_CON0_L */ 329 + #define DMIC_LOW_POWER_MODE_CTL_SFT 14 330 + #define DMIC_LOW_POWER_MODE_CTL_MASK 0x3 331 + #define DMIC_LOW_POWER_MODE_CTL_MASK_SFT (0x3 << 14) 332 + #define DIGMIC_3P25M_1P625M_SEL_CTL_SFT 5 333 + #define DIGMIC_3P25M_1P625M_SEL_CTL_MASK 0x1 334 + #define DIGMIC_3P25M_1P625M_SEL_CTL_MASK_SFT (0x1 << 5) 335 + #define UL_LOOP_BACK_MODE_CTL_SFT 2 336 + #define UL_LOOP_BACK_MODE_CTL_MASK 0x1 337 + #define UL_LOOP_BACK_MODE_CTL_MASK_SFT (0x1 << 2) 338 + #define UL_SDM_3_LEVEL_CTL_SFT 1 339 + #define UL_SDM_3_LEVEL_CTL_MASK 0x1 340 + #define UL_SDM_3_LEVEL_CTL_MASK_SFT (0x1 << 1) 341 + #define UL_SRC_ON_TMP_CTL_SFT 0 342 + #define UL_SRC_ON_TMP_CTL_MASK 0x1 343 + #define UL_SRC_ON_TMP_CTL_MASK_SFT (0x1 << 0) 344 + 345 + /* MT6358_AFE_TOP_CON0 */ 346 + #define MTKAIF_SINE_ON_SFT 2 347 + #define MTKAIF_SINE_ON_MASK 0x1 348 + #define MTKAIF_SINE_ON_MASK_SFT (0x1 << 2) 349 + #define UL_SINE_ON_SFT 1 350 + #define UL_SINE_ON_MASK 0x1 351 + #define UL_SINE_ON_MASK_SFT (0x1 << 1) 352 + #define DL_SINE_ON_SFT 0 353 + #define DL_SINE_ON_MASK 0x1 354 + #define DL_SINE_ON_MASK_SFT (0x1 << 0) 355 + 356 + /* MT6358_AUDIO_TOP_CON0 */ 357 + #define PDN_AFE_CTL_SFT 7 358 + #define PDN_AFE_CTL_MASK 0x1 359 + #define PDN_AFE_CTL_MASK_SFT (0x1 << 7) 360 + #define PDN_DAC_CTL_SFT 6 361 + #define PDN_DAC_CTL_MASK 0x1 362 + #define PDN_DAC_CTL_MASK_SFT (0x1 << 6) 363 + #define PDN_ADC_CTL_SFT 5 364 + #define PDN_ADC_CTL_MASK 0x1 365 + #define PDN_ADC_CTL_MASK_SFT (0x1 << 5) 366 + #define PDN_I2S_DL_CTL_SFT 3 367 + #define PDN_I2S_DL_CTL_MASK 0x1 368 + #define PDN_I2S_DL_CTL_MASK_SFT (0x1 << 3) 369 + #define PWR_CLK_DIS_CTL_SFT 2 370 + #define PWR_CLK_DIS_CTL_MASK 0x1 371 + #define PWR_CLK_DIS_CTL_MASK_SFT (0x1 << 2) 372 + #define PDN_AFE_TESTMODEL_CTL_SFT 1 373 + #define PDN_AFE_TESTMODEL_CTL_MASK 0x1 374 + #define PDN_AFE_TESTMODEL_CTL_MASK_SFT (0x1 << 1) 375 + #define PDN_RESERVED_SFT 0 376 + #define PDN_RESERVED_MASK 0x1 377 + #define PDN_RESERVED_MASK_SFT (0x1 << 0) 378 + 379 + /* MT6358_AFE_MON_DEBUG0 */ 380 + #define AUDIO_SYS_TOP_MON_SWAP_SFT 14 381 + #define AUDIO_SYS_TOP_MON_SWAP_MASK 0x3 382 + #define AUDIO_SYS_TOP_MON_SWAP_MASK_SFT (0x3 << 14) 383 + #define AUDIO_SYS_TOP_MON_SEL_SFT 8 384 + #define AUDIO_SYS_TOP_MON_SEL_MASK 0x1f 385 + #define AUDIO_SYS_TOP_MON_SEL_MASK_SFT (0x1f << 8) 386 + #define AFE_MON_SEL_SFT 0 387 + #define AFE_MON_SEL_MASK 0xff 388 + #define AFE_MON_SEL_MASK_SFT (0xff << 0) 389 + 390 + /* MT6358_AFUNC_AUD_CON0 */ 391 + #define CCI_AUD_ANACK_SEL_SFT 15 392 + #define CCI_AUD_ANACK_SEL_MASK 0x1 393 + #define CCI_AUD_ANACK_SEL_MASK_SFT (0x1 << 15) 394 + #define CCI_AUDIO_FIFO_WPTR_SFT 12 395 + #define CCI_AUDIO_FIFO_WPTR_MASK 0x7 396 + #define CCI_AUDIO_FIFO_WPTR_MASK_SFT (0x7 << 12) 397 + #define CCI_SCRAMBLER_CG_EN_SFT 11 398 + #define CCI_SCRAMBLER_CG_EN_MASK 0x1 399 + #define CCI_SCRAMBLER_CG_EN_MASK_SFT (0x1 << 11) 400 + #define CCI_LCH_INV_SFT 10 401 + #define CCI_LCH_INV_MASK 0x1 402 + #define CCI_LCH_INV_MASK_SFT (0x1 << 10) 403 + #define CCI_RAND_EN_SFT 9 404 + #define CCI_RAND_EN_MASK 0x1 405 + #define CCI_RAND_EN_MASK_SFT (0x1 << 9) 406 + #define CCI_SPLT_SCRMB_CLK_ON_SFT 8 407 + #define CCI_SPLT_SCRMB_CLK_ON_MASK 0x1 408 + #define CCI_SPLT_SCRMB_CLK_ON_MASK_SFT (0x1 << 8) 409 + #define CCI_SPLT_SCRMB_ON_SFT 7 410 + #define CCI_SPLT_SCRMB_ON_MASK 0x1 411 + #define CCI_SPLT_SCRMB_ON_MASK_SFT (0x1 << 7) 412 + #define CCI_AUD_IDAC_TEST_EN_SFT 6 413 + #define CCI_AUD_IDAC_TEST_EN_MASK 0x1 414 + #define CCI_AUD_IDAC_TEST_EN_MASK_SFT (0x1 << 6) 415 + #define CCI_ZERO_PAD_DISABLE_SFT 5 416 + #define CCI_ZERO_PAD_DISABLE_MASK 0x1 417 + #define CCI_ZERO_PAD_DISABLE_MASK_SFT (0x1 << 5) 418 + #define CCI_AUD_SPLIT_TEST_EN_SFT 4 419 + #define CCI_AUD_SPLIT_TEST_EN_MASK 0x1 420 + #define CCI_AUD_SPLIT_TEST_EN_MASK_SFT (0x1 << 4) 421 + #define CCI_AUD_SDM_MUTEL_SFT 3 422 + #define CCI_AUD_SDM_MUTEL_MASK 0x1 423 + #define CCI_AUD_SDM_MUTEL_MASK_SFT (0x1 << 3) 424 + #define CCI_AUD_SDM_MUTER_SFT 2 425 + #define CCI_AUD_SDM_MUTER_MASK 0x1 426 + #define CCI_AUD_SDM_MUTER_MASK_SFT (0x1 << 2) 427 + #define CCI_AUD_SDM_7BIT_SEL_SFT 1 428 + #define CCI_AUD_SDM_7BIT_SEL_MASK 0x1 429 + #define CCI_AUD_SDM_7BIT_SEL_MASK_SFT (0x1 << 1) 430 + #define CCI_SCRAMBLER_EN_SFT 0 431 + #define CCI_SCRAMBLER_EN_MASK 0x1 432 + #define CCI_SCRAMBLER_EN_MASK_SFT (0x1 << 0) 433 + 434 + /* MT6358_AFUNC_AUD_CON1 */ 435 + #define AUD_SDM_TEST_L_SFT 8 436 + #define AUD_SDM_TEST_L_MASK 0xff 437 + #define AUD_SDM_TEST_L_MASK_SFT (0xff << 8) 438 + #define AUD_SDM_TEST_R_SFT 0 439 + #define AUD_SDM_TEST_R_MASK 0xff 440 + #define AUD_SDM_TEST_R_MASK_SFT (0xff << 0) 441 + 442 + /* MT6358_AFUNC_AUD_CON2 */ 443 + #define CCI_AUD_DAC_ANA_MUTE_SFT 7 444 + #define CCI_AUD_DAC_ANA_MUTE_MASK 0x1 445 + #define CCI_AUD_DAC_ANA_MUTE_MASK_SFT (0x1 << 7) 446 + #define CCI_AUD_DAC_ANA_RSTB_SEL_SFT 6 447 + #define CCI_AUD_DAC_ANA_RSTB_SEL_MASK 0x1 448 + #define CCI_AUD_DAC_ANA_RSTB_SEL_MASK_SFT (0x1 << 6) 449 + #define CCI_AUDIO_FIFO_CLKIN_INV_SFT 4 450 + #define CCI_AUDIO_FIFO_CLKIN_INV_MASK 0x1 451 + #define CCI_AUDIO_FIFO_CLKIN_INV_MASK_SFT (0x1 << 4) 452 + #define CCI_AUDIO_FIFO_ENABLE_SFT 3 453 + #define CCI_AUDIO_FIFO_ENABLE_MASK 0x1 454 + #define CCI_AUDIO_FIFO_ENABLE_MASK_SFT (0x1 << 3) 455 + #define CCI_ACD_MODE_SFT 2 456 + #define CCI_ACD_MODE_MASK 0x1 457 + #define CCI_ACD_MODE_MASK_SFT (0x1 << 2) 458 + #define CCI_AFIFO_CLK_PWDB_SFT 1 459 + #define CCI_AFIFO_CLK_PWDB_MASK 0x1 460 + #define CCI_AFIFO_CLK_PWDB_MASK_SFT (0x1 << 1) 461 + #define CCI_ACD_FUNC_RSTB_SFT 0 462 + #define CCI_ACD_FUNC_RSTB_MASK 0x1 463 + #define CCI_ACD_FUNC_RSTB_MASK_SFT (0x1 << 0) 464 + 465 + /* MT6358_AFUNC_AUD_CON3 */ 466 + #define SDM_ANA13M_TESTCK_SEL_SFT 15 467 + #define SDM_ANA13M_TESTCK_SEL_MASK 0x1 468 + #define SDM_ANA13M_TESTCK_SEL_MASK_SFT (0x1 << 15) 469 + #define SDM_ANA13M_TESTCK_SRC_SEL_SFT 12 470 + #define SDM_ANA13M_TESTCK_SRC_SEL_MASK 0x7 471 + #define SDM_ANA13M_TESTCK_SRC_SEL_MASK_SFT (0x7 << 12) 472 + #define SDM_TESTCK_SRC_SEL_SFT 8 473 + #define SDM_TESTCK_SRC_SEL_MASK 0x7 474 + #define SDM_TESTCK_SRC_SEL_MASK_SFT (0x7 << 8) 475 + #define DIGMIC_TESTCK_SRC_SEL_SFT 4 476 + #define DIGMIC_TESTCK_SRC_SEL_MASK 0x7 477 + #define DIGMIC_TESTCK_SRC_SEL_MASK_SFT (0x7 << 4) 478 + #define DIGMIC_TESTCK_SEL_SFT 0 479 + #define DIGMIC_TESTCK_SEL_MASK 0x1 480 + #define DIGMIC_TESTCK_SEL_MASK_SFT (0x1 << 0) 481 + 482 + /* MT6358_AFUNC_AUD_CON4 */ 483 + #define UL_FIFO_WCLK_INV_SFT 8 484 + #define UL_FIFO_WCLK_INV_MASK 0x1 485 + #define UL_FIFO_WCLK_INV_MASK_SFT (0x1 << 8) 486 + #define UL_FIFO_DIGMIC_WDATA_TESTSRC_SEL_SFT 6 487 + #define UL_FIFO_DIGMIC_WDATA_TESTSRC_SEL_MASK 0x1 488 + #define UL_FIFO_DIGMIC_WDATA_TESTSRC_SEL_MASK_SFT (0x1 << 6) 489 + #define UL_FIFO_WDATA_TESTEN_SFT 5 490 + #define UL_FIFO_WDATA_TESTEN_MASK 0x1 491 + #define UL_FIFO_WDATA_TESTEN_MASK_SFT (0x1 << 5) 492 + #define UL_FIFO_WDATA_TESTSRC_SEL_SFT 4 493 + #define UL_FIFO_WDATA_TESTSRC_SEL_MASK 0x1 494 + #define UL_FIFO_WDATA_TESTSRC_SEL_MASK_SFT (0x1 << 4) 495 + #define UL_FIFO_WCLK_6P5M_TESTCK_SEL_SFT 3 496 + #define UL_FIFO_WCLK_6P5M_TESTCK_SEL_MASK 0x1 497 + #define UL_FIFO_WCLK_6P5M_TESTCK_SEL_MASK_SFT (0x1 << 3) 498 + #define UL_FIFO_WCLK_6P5M_TESTCK_SRC_SEL_SFT 0 499 + #define UL_FIFO_WCLK_6P5M_TESTCK_SRC_SEL_MASK 0x7 500 + #define UL_FIFO_WCLK_6P5M_TESTCK_SRC_SEL_MASK_SFT (0x7 << 0) 501 + 502 + /* MT6358_AFUNC_AUD_CON5 */ 503 + #define R_AUD_DAC_POS_LARGE_MONO_SFT 8 504 + #define R_AUD_DAC_POS_LARGE_MONO_MASK 0xff 505 + #define R_AUD_DAC_POS_LARGE_MONO_MASK_SFT (0xff << 8) 506 + #define R_AUD_DAC_NEG_LARGE_MONO_SFT 0 507 + #define R_AUD_DAC_NEG_LARGE_MONO_MASK 0xff 508 + #define R_AUD_DAC_NEG_LARGE_MONO_MASK_SFT (0xff << 0) 509 + 510 + /* MT6358_AFUNC_AUD_CON6 */ 511 + #define R_AUD_DAC_POS_SMALL_MONO_SFT 12 512 + #define R_AUD_DAC_POS_SMALL_MONO_MASK 0xf 513 + #define R_AUD_DAC_POS_SMALL_MONO_MASK_SFT (0xf << 12) 514 + #define R_AUD_DAC_NEG_SMALL_MONO_SFT 8 515 + #define R_AUD_DAC_NEG_SMALL_MONO_MASK 0xf 516 + #define R_AUD_DAC_NEG_SMALL_MONO_MASK_SFT (0xf << 8) 517 + #define R_AUD_DAC_POS_TINY_MONO_SFT 6 518 + #define R_AUD_DAC_POS_TINY_MONO_MASK 0x3 519 + #define R_AUD_DAC_POS_TINY_MONO_MASK_SFT (0x3 << 6) 520 + #define R_AUD_DAC_NEG_TINY_MONO_SFT 4 521 + #define R_AUD_DAC_NEG_TINY_MONO_MASK 0x3 522 + #define R_AUD_DAC_NEG_TINY_MONO_MASK_SFT (0x3 << 4) 523 + #define R_AUD_DAC_MONO_SEL_SFT 3 524 + #define R_AUD_DAC_MONO_SEL_MASK 0x1 525 + #define R_AUD_DAC_MONO_SEL_MASK_SFT (0x1 << 3) 526 + #define R_AUD_DAC_SW_RSTB_SFT 0 527 + #define R_AUD_DAC_SW_RSTB_MASK 0x1 528 + #define R_AUD_DAC_SW_RSTB_MASK_SFT (0x1 << 0) 529 + 530 + /* MT6358_AFUNC_AUD_MON0 */ 531 + #define AUD_SCR_OUT_L_SFT 8 532 + #define AUD_SCR_OUT_L_MASK 0xff 533 + #define AUD_SCR_OUT_L_MASK_SFT (0xff << 8) 534 + #define AUD_SCR_OUT_R_SFT 0 535 + #define AUD_SCR_OUT_R_MASK 0xff 536 + #define AUD_SCR_OUT_R_MASK_SFT (0xff << 0) 537 + 538 + /* MT6358_AUDRC_TUNE_MON0 */ 539 + #define ASYNC_TEST_OUT_BCK_SFT 15 540 + #define ASYNC_TEST_OUT_BCK_MASK 0x1 541 + #define ASYNC_TEST_OUT_BCK_MASK_SFT (0x1 << 15) 542 + #define RGS_AUDRCTUNE1READ_SFT 8 543 + #define RGS_AUDRCTUNE1READ_MASK 0x1f 544 + #define RGS_AUDRCTUNE1READ_MASK_SFT (0x1f << 8) 545 + #define RGS_AUDRCTUNE0READ_SFT 0 546 + #define RGS_AUDRCTUNE0READ_MASK 0x1f 547 + #define RGS_AUDRCTUNE0READ_MASK_SFT (0x1f << 0) 548 + 549 + /* MT6358_AFE_ADDA_MTKAIF_FIFO_CFG0 */ 550 + #define AFE_RESERVED_SFT 1 551 + #define AFE_RESERVED_MASK 0x7fff 552 + #define AFE_RESERVED_MASK_SFT (0x7fff << 1) 553 + #define RG_MTKAIF_RXIF_FIFO_INTEN_SFT 0 554 + #define RG_MTKAIF_RXIF_FIFO_INTEN_MASK 0x1 555 + #define RG_MTKAIF_RXIF_FIFO_INTEN_MASK_SFT (0x1 << 0) 556 + 557 + /* MT6358_AFE_ADDA_MTKAIF_FIFO_LOG_MON1 */ 558 + #define MTKAIF_RXIF_WR_FULL_STATUS_SFT 1 559 + #define MTKAIF_RXIF_WR_FULL_STATUS_MASK 0x1 560 + #define MTKAIF_RXIF_WR_FULL_STATUS_MASK_SFT (0x1 << 1) 561 + #define MTKAIF_RXIF_RD_EMPTY_STATUS_SFT 0 562 + #define MTKAIF_RXIF_RD_EMPTY_STATUS_MASK 0x1 563 + #define MTKAIF_RXIF_RD_EMPTY_STATUS_MASK_SFT (0x1 << 0) 564 + 565 + /* MT6358_AFE_ADDA_MTKAIF_MON0 */ 566 + #define MTKAIFTX_V3_SYNC_OUT_SFT 14 567 + #define MTKAIFTX_V3_SYNC_OUT_MASK 0x1 568 + #define MTKAIFTX_V3_SYNC_OUT_MASK_SFT (0x1 << 14) 569 + #define MTKAIFTX_V3_SDATA_OUT2_SFT 13 570 + #define MTKAIFTX_V3_SDATA_OUT2_MASK 0x1 571 + #define MTKAIFTX_V3_SDATA_OUT2_MASK_SFT (0x1 << 13) 572 + #define MTKAIFTX_V3_SDATA_OUT1_SFT 12 573 + #define MTKAIFTX_V3_SDATA_OUT1_MASK 0x1 574 + #define MTKAIFTX_V3_SDATA_OUT1_MASK_SFT (0x1 << 12) 575 + #define MTKAIF_RXIF_FIFO_STATUS_SFT 0 576 + #define MTKAIF_RXIF_FIFO_STATUS_MASK 0xfff 577 + #define MTKAIF_RXIF_FIFO_STATUS_MASK_SFT (0xfff << 0) 578 + 579 + /* MT6358_AFE_ADDA_MTKAIF_MON1 */ 580 + #define MTKAIFRX_V3_SYNC_IN_SFT 14 581 + #define MTKAIFRX_V3_SYNC_IN_MASK 0x1 582 + #define MTKAIFRX_V3_SYNC_IN_MASK_SFT (0x1 << 14) 583 + #define MTKAIFRX_V3_SDATA_IN2_SFT 13 584 + #define MTKAIFRX_V3_SDATA_IN2_MASK 0x1 585 + #define MTKAIFRX_V3_SDATA_IN2_MASK_SFT (0x1 << 13) 586 + #define MTKAIFRX_V3_SDATA_IN1_SFT 12 587 + #define MTKAIFRX_V3_SDATA_IN1_MASK 0x1 588 + #define MTKAIFRX_V3_SDATA_IN1_MASK_SFT (0x1 << 12) 589 + #define MTKAIF_RXIF_SEARCH_FAIL_FLAG_SFT 11 590 + #define MTKAIF_RXIF_SEARCH_FAIL_FLAG_MASK 0x1 591 + #define MTKAIF_RXIF_SEARCH_FAIL_FLAG_MASK_SFT (0x1 << 11) 592 + #define MTKAIF_RXIF_INVALID_FLAG_SFT 8 593 + #define MTKAIF_RXIF_INVALID_FLAG_MASK 0x1 594 + #define MTKAIF_RXIF_INVALID_FLAG_MASK_SFT (0x1 << 8) 595 + #define MTKAIF_RXIF_INVALID_CYCLE_SFT 0 596 + #define MTKAIF_RXIF_INVALID_CYCLE_MASK 0xff 597 + #define MTKAIF_RXIF_INVALID_CYCLE_MASK_SFT (0xff << 0) 598 + 599 + /* MT6358_AFE_ADDA_MTKAIF_MON2 */ 600 + #define MTKAIF_TXIF_IN_CH2_SFT 8 601 + #define MTKAIF_TXIF_IN_CH2_MASK 0xff 602 + #define MTKAIF_TXIF_IN_CH2_MASK_SFT (0xff << 8) 603 + #define MTKAIF_TXIF_IN_CH1_SFT 0 604 + #define MTKAIF_TXIF_IN_CH1_MASK 0xff 605 + #define MTKAIF_TXIF_IN_CH1_MASK_SFT (0xff << 0) 606 + 607 + /* MT6358_AFE_ADDA_MTKAIF_MON3 */ 608 + #define MTKAIF_RXIF_OUT_CH2_SFT 8 609 + #define MTKAIF_RXIF_OUT_CH2_MASK 0xff 610 + #define MTKAIF_RXIF_OUT_CH2_MASK_SFT (0xff << 8) 611 + #define MTKAIF_RXIF_OUT_CH1_SFT 0 612 + #define MTKAIF_RXIF_OUT_CH1_MASK 0xff 613 + #define MTKAIF_RXIF_OUT_CH1_MASK_SFT (0xff << 0) 614 + 615 + /* MT6358_AFE_ADDA_MTKAIF_CFG0 */ 616 + #define RG_MTKAIF_RXIF_CLKINV_SFT 15 617 + #define RG_MTKAIF_RXIF_CLKINV_MASK 0x1 618 + #define RG_MTKAIF_RXIF_CLKINV_MASK_SFT (0x1 << 15) 619 + #define RG_MTKAIF_RXIF_PROTOCOL2_SFT 8 620 + #define RG_MTKAIF_RXIF_PROTOCOL2_MASK 0x1 621 + #define RG_MTKAIF_RXIF_PROTOCOL2_MASK_SFT (0x1 << 8) 622 + #define RG_MTKAIF_BYPASS_SRC_MODE_SFT 6 623 + #define RG_MTKAIF_BYPASS_SRC_MODE_MASK 0x3 624 + #define RG_MTKAIF_BYPASS_SRC_MODE_MASK_SFT (0x3 << 6) 625 + #define RG_MTKAIF_BYPASS_SRC_TEST_SFT 5 626 + #define RG_MTKAIF_BYPASS_SRC_TEST_MASK 0x1 627 + #define RG_MTKAIF_BYPASS_SRC_TEST_MASK_SFT (0x1 << 5) 628 + #define RG_MTKAIF_TXIF_PROTOCOL2_SFT 4 629 + #define RG_MTKAIF_TXIF_PROTOCOL2_MASK 0x1 630 + #define RG_MTKAIF_TXIF_PROTOCOL2_MASK_SFT (0x1 << 4) 631 + #define RG_MTKAIF_PMIC_TXIF_8TO5_SFT 2 632 + #define RG_MTKAIF_PMIC_TXIF_8TO5_MASK 0x1 633 + #define RG_MTKAIF_PMIC_TXIF_8TO5_MASK_SFT (0x1 << 2) 634 + #define RG_MTKAIF_LOOPBACK_TEST2_SFT 1 635 + #define RG_MTKAIF_LOOPBACK_TEST2_MASK 0x1 636 + #define RG_MTKAIF_LOOPBACK_TEST2_MASK_SFT (0x1 << 1) 637 + #define RG_MTKAIF_LOOPBACK_TEST1_SFT 0 638 + #define RG_MTKAIF_LOOPBACK_TEST1_MASK 0x1 639 + #define RG_MTKAIF_LOOPBACK_TEST1_MASK_SFT (0x1 << 0) 640 + 641 + /* MT6358_AFE_ADDA_MTKAIF_RX_CFG0 */ 642 + #define RG_MTKAIF_RXIF_VOICE_MODE_SFT 12 643 + #define RG_MTKAIF_RXIF_VOICE_MODE_MASK 0xf 644 + #define RG_MTKAIF_RXIF_VOICE_MODE_MASK_SFT (0xf << 12) 645 + #define RG_MTKAIF_RXIF_DATA_BIT_SFT 8 646 + #define RG_MTKAIF_RXIF_DATA_BIT_MASK 0x7 647 + #define RG_MTKAIF_RXIF_DATA_BIT_MASK_SFT (0x7 << 8) 648 + #define RG_MTKAIF_RXIF_FIFO_RSP_SFT 4 649 + #define RG_MTKAIF_RXIF_FIFO_RSP_MASK 0x7 650 + #define RG_MTKAIF_RXIF_FIFO_RSP_MASK_SFT (0x7 << 4) 651 + #define RG_MTKAIF_RXIF_DETECT_ON_SFT 3 652 + #define RG_MTKAIF_RXIF_DETECT_ON_MASK 0x1 653 + #define RG_MTKAIF_RXIF_DETECT_ON_MASK_SFT (0x1 << 3) 654 + #define RG_MTKAIF_RXIF_DATA_MODE_SFT 0 655 + #define RG_MTKAIF_RXIF_DATA_MODE_MASK 0x1 656 + #define RG_MTKAIF_RXIF_DATA_MODE_MASK_SFT (0x1 << 0) 657 + 658 + /* MT6358_AFE_ADDA_MTKAIF_RX_CFG1 */ 659 + #define RG_MTKAIF_RXIF_SYNC_SEARCH_TABLE_SFT 12 660 + #define RG_MTKAIF_RXIF_SYNC_SEARCH_TABLE_MASK 0xf 661 + #define RG_MTKAIF_RXIF_SYNC_SEARCH_TABLE_MASK_SFT (0xf << 12) 662 + #define RG_MTKAIF_RXIF_INVALID_SYNC_CHECK_ROUND_SFT 8 663 + #define RG_MTKAIF_RXIF_INVALID_SYNC_CHECK_ROUND_MASK 0xf 664 + #define RG_MTKAIF_RXIF_INVALID_SYNC_CHECK_ROUND_MASK_SFT (0xf << 8) 665 + #define RG_MTKAIF_RXIF_SYNC_CHECK_ROUND_SFT 4 666 + #define RG_MTKAIF_RXIF_SYNC_CHECK_ROUND_MASK 0xf 667 + #define RG_MTKAIF_RXIF_SYNC_CHECK_ROUND_MASK_SFT (0xf << 4) 668 + #define RG_MTKAIF_RXIF_VOICE_MODE_PROTOCOL2_SFT 0 669 + #define RG_MTKAIF_RXIF_VOICE_MODE_PROTOCOL2_MASK 0xf 670 + #define RG_MTKAIF_RXIF_VOICE_MODE_PROTOCOL2_MASK_SFT (0xf << 0) 671 + 672 + /* MT6358_AFE_ADDA_MTKAIF_RX_CFG2 */ 673 + #define RG_MTKAIF_RXIF_CLEAR_SYNC_FAIL_SFT 12 674 + #define RG_MTKAIF_RXIF_CLEAR_SYNC_FAIL_MASK 0x1 675 + #define RG_MTKAIF_RXIF_CLEAR_SYNC_FAIL_MASK_SFT (0x1 << 12) 676 + #define RG_MTKAIF_RXIF_SYNC_CNT_TABLE_SFT 0 677 + #define RG_MTKAIF_RXIF_SYNC_CNT_TABLE_MASK 0xfff 678 + #define RG_MTKAIF_RXIF_SYNC_CNT_TABLE_MASK_SFT (0xfff << 0) 679 + 680 + /* MT6358_AFE_ADDA_MTKAIF_RX_CFG3 */ 681 + #define RG_MTKAIF_RXIF_LOOPBACK_USE_NLE_SFT 7 682 + #define RG_MTKAIF_RXIF_LOOPBACK_USE_NLE_MASK 0x1 683 + #define RG_MTKAIF_RXIF_LOOPBACK_USE_NLE_MASK_SFT (0x1 << 7) 684 + #define RG_MTKAIF_RXIF_FIFO_RSP_PROTOCOL2_SFT 4 685 + #define RG_MTKAIF_RXIF_FIFO_RSP_PROTOCOL2_MASK 0x7 686 + #define RG_MTKAIF_RXIF_FIFO_RSP_PROTOCOL2_MASK_SFT (0x7 << 4) 687 + #define RG_MTKAIF_RXIF_DETECT_ON_PROTOCOL2_SFT 3 688 + #define RG_MTKAIF_RXIF_DETECT_ON_PROTOCOL2_MASK 0x1 689 + #define RG_MTKAIF_RXIF_DETECT_ON_PROTOCOL2_MASK_SFT (0x1 << 3) 690 + 691 + /* MT6358_AFE_ADDA_MTKAIF_TX_CFG1 */ 692 + #define RG_MTKAIF_SYNC_WORD2_SFT 4 693 + #define RG_MTKAIF_SYNC_WORD2_MASK 0x7 694 + #define RG_MTKAIF_SYNC_WORD2_MASK_SFT (0x7 << 4) 695 + #define RG_MTKAIF_SYNC_WORD1_SFT 0 696 + #define RG_MTKAIF_SYNC_WORD1_MASK 0x7 697 + #define RG_MTKAIF_SYNC_WORD1_MASK_SFT (0x7 << 0) 698 + 699 + /* MT6358_AFE_SGEN_CFG0 */ 700 + #define SGEN_AMP_DIV_CH1_CTL_SFT 12 701 + #define SGEN_AMP_DIV_CH1_CTL_MASK 0xf 702 + #define SGEN_AMP_DIV_CH1_CTL_MASK_SFT (0xf << 12) 703 + #define SGEN_DAC_EN_CTL_SFT 7 704 + #define SGEN_DAC_EN_CTL_MASK 0x1 705 + #define SGEN_DAC_EN_CTL_MASK_SFT (0x1 << 7) 706 + #define SGEN_MUTE_SW_CTL_SFT 6 707 + #define SGEN_MUTE_SW_CTL_MASK 0x1 708 + #define SGEN_MUTE_SW_CTL_MASK_SFT (0x1 << 6) 709 + #define R_AUD_SDM_MUTE_L_SFT 5 710 + #define R_AUD_SDM_MUTE_L_MASK 0x1 711 + #define R_AUD_SDM_MUTE_L_MASK_SFT (0x1 << 5) 712 + #define R_AUD_SDM_MUTE_R_SFT 4 713 + #define R_AUD_SDM_MUTE_R_MASK 0x1 714 + #define R_AUD_SDM_MUTE_R_MASK_SFT (0x1 << 4) 715 + 716 + /* MT6358_AFE_SGEN_CFG1 */ 717 + #define C_SGEN_RCH_INV_5BIT_SFT 15 718 + #define C_SGEN_RCH_INV_5BIT_MASK 0x1 719 + #define C_SGEN_RCH_INV_5BIT_MASK_SFT (0x1 << 15) 720 + #define C_SGEN_RCH_INV_8BIT_SFT 14 721 + #define C_SGEN_RCH_INV_8BIT_MASK 0x1 722 + #define C_SGEN_RCH_INV_8BIT_MASK_SFT (0x1 << 14) 723 + #define SGEN_FREQ_DIV_CH1_CTL_SFT 0 724 + #define SGEN_FREQ_DIV_CH1_CTL_MASK 0x1f 725 + #define SGEN_FREQ_DIV_CH1_CTL_MASK_SFT (0x1f << 0) 726 + 727 + /* MT6358_AFE_ADC_ASYNC_FIFO_CFG */ 728 + #define RG_UL_ASYNC_FIFO_SOFT_RST_EN_SFT 5 729 + #define RG_UL_ASYNC_FIFO_SOFT_RST_EN_MASK 0x1 730 + #define RG_UL_ASYNC_FIFO_SOFT_RST_EN_MASK_SFT (0x1 << 5) 731 + #define RG_UL_ASYNC_FIFO_SOFT_RST_SFT 4 732 + #define RG_UL_ASYNC_FIFO_SOFT_RST_MASK 0x1 733 + #define RG_UL_ASYNC_FIFO_SOFT_RST_MASK_SFT (0x1 << 4) 734 + #define RG_AMIC_UL_ADC_CLK_SEL_SFT 1 735 + #define RG_AMIC_UL_ADC_CLK_SEL_MASK 0x1 736 + #define RG_AMIC_UL_ADC_CLK_SEL_MASK_SFT (0x1 << 1) 737 + 738 + /* MT6358_AFE_DCCLK_CFG0 */ 739 + #define DCCLK_DIV_SFT 5 740 + #define DCCLK_DIV_MASK 0x7ff 741 + #define DCCLK_DIV_MASK_SFT (0x7ff << 5) 742 + #define DCCLK_INV_SFT 4 743 + #define DCCLK_INV_MASK 0x1 744 + #define DCCLK_INV_MASK_SFT (0x1 << 4) 745 + #define DCCLK_PDN_SFT 1 746 + #define DCCLK_PDN_MASK 0x1 747 + #define DCCLK_PDN_MASK_SFT (0x1 << 1) 748 + #define DCCLK_GEN_ON_SFT 0 749 + #define DCCLK_GEN_ON_MASK 0x1 750 + #define DCCLK_GEN_ON_MASK_SFT (0x1 << 0) 751 + 752 + /* MT6358_AFE_DCCLK_CFG1 */ 753 + #define RESYNC_SRC_SEL_SFT 10 754 + #define RESYNC_SRC_SEL_MASK 0x3 755 + #define RESYNC_SRC_SEL_MASK_SFT (0x3 << 10) 756 + #define RESYNC_SRC_CK_INV_SFT 9 757 + #define RESYNC_SRC_CK_INV_MASK 0x1 758 + #define RESYNC_SRC_CK_INV_MASK_SFT (0x1 << 9) 759 + #define DCCLK_RESYNC_BYPASS_SFT 8 760 + #define DCCLK_RESYNC_BYPASS_MASK 0x1 761 + #define DCCLK_RESYNC_BYPASS_MASK_SFT (0x1 << 8) 762 + #define DCCLK_PHASE_SEL_SFT 4 763 + #define DCCLK_PHASE_SEL_MASK 0xf 764 + #define DCCLK_PHASE_SEL_MASK_SFT (0xf << 4) 765 + 766 + /* MT6358_AUDIO_DIG_CFG */ 767 + #define RG_AUD_PAD_TOP_DAT_MISO2_LOOPBACK_SFT 15 768 + #define RG_AUD_PAD_TOP_DAT_MISO2_LOOPBACK_MASK 0x1 769 + #define RG_AUD_PAD_TOP_DAT_MISO2_LOOPBACK_MASK_SFT (0x1 << 15) 770 + #define RG_AUD_PAD_TOP_PHASE_MODE2_SFT 8 771 + #define RG_AUD_PAD_TOP_PHASE_MODE2_MASK 0x7f 772 + #define RG_AUD_PAD_TOP_PHASE_MODE2_MASK_SFT (0x7f << 8) 773 + #define RG_AUD_PAD_TOP_DAT_MISO_LOOPBACK_SFT 7 774 + #define RG_AUD_PAD_TOP_DAT_MISO_LOOPBACK_MASK 0x1 775 + #define RG_AUD_PAD_TOP_DAT_MISO_LOOPBACK_MASK_SFT (0x1 << 7) 776 + #define RG_AUD_PAD_TOP_PHASE_MODE_SFT 0 777 + #define RG_AUD_PAD_TOP_PHASE_MODE_MASK 0x7f 778 + #define RG_AUD_PAD_TOP_PHASE_MODE_MASK_SFT (0x7f << 0) 779 + 780 + /* MT6358_AFE_AUD_PAD_TOP */ 781 + #define RG_AUD_PAD_TOP_TX_FIFO_RSP_SFT 12 782 + #define RG_AUD_PAD_TOP_TX_FIFO_RSP_MASK 0x7 783 + #define RG_AUD_PAD_TOP_TX_FIFO_RSP_MASK_SFT (0x7 << 12) 784 + #define RG_AUD_PAD_TOP_MTKAIF_CLK_PROTOCOL2_SFT 11 785 + #define RG_AUD_PAD_TOP_MTKAIF_CLK_PROTOCOL2_MASK 0x1 786 + #define RG_AUD_PAD_TOP_MTKAIF_CLK_PROTOCOL2_MASK_SFT (0x1 << 11) 787 + #define RG_AUD_PAD_TOP_TX_FIFO_ON_SFT 8 788 + #define RG_AUD_PAD_TOP_TX_FIFO_ON_MASK 0x1 789 + #define RG_AUD_PAD_TOP_TX_FIFO_ON_MASK_SFT (0x1 << 8) 790 + 791 + /* MT6358_AFE_AUD_PAD_TOP_MON */ 792 + #define ADDA_AUD_PAD_TOP_MON_SFT 0 793 + #define ADDA_AUD_PAD_TOP_MON_MASK 0xffff 794 + #define ADDA_AUD_PAD_TOP_MON_MASK_SFT (0xffff << 0) 795 + 796 + /* MT6358_AFE_AUD_PAD_TOP_MON1 */ 797 + #define ADDA_AUD_PAD_TOP_MON1_SFT 0 798 + #define ADDA_AUD_PAD_TOP_MON1_MASK 0xffff 799 + #define ADDA_AUD_PAD_TOP_MON1_MASK_SFT (0xffff << 0) 800 + 801 + /* MT6358_AFE_DL_NLE_CFG */ 802 + #define NLE_RCH_HPGAIN_SEL_SFT 10 803 + #define NLE_RCH_HPGAIN_SEL_MASK 0x1 804 + #define NLE_RCH_HPGAIN_SEL_MASK_SFT (0x1 << 10) 805 + #define NLE_RCH_CH_SEL_SFT 9 806 + #define NLE_RCH_CH_SEL_MASK 0x1 807 + #define NLE_RCH_CH_SEL_MASK_SFT (0x1 << 9) 808 + #define NLE_RCH_ON_SFT 8 809 + #define NLE_RCH_ON_MASK 0x1 810 + #define NLE_RCH_ON_MASK_SFT (0x1 << 8) 811 + #define NLE_LCH_HPGAIN_SEL_SFT 2 812 + #define NLE_LCH_HPGAIN_SEL_MASK 0x1 813 + #define NLE_LCH_HPGAIN_SEL_MASK_SFT (0x1 << 2) 814 + #define NLE_LCH_CH_SEL_SFT 1 815 + #define NLE_LCH_CH_SEL_MASK 0x1 816 + #define NLE_LCH_CH_SEL_MASK_SFT (0x1 << 1) 817 + #define NLE_LCH_ON_SFT 0 818 + #define NLE_LCH_ON_MASK 0x1 819 + #define NLE_LCH_ON_MASK_SFT (0x1 << 0) 820 + 821 + /* MT6358_AFE_DL_NLE_MON */ 822 + #define NLE_MONITOR_SFT 0 823 + #define NLE_MONITOR_MASK 0x3fff 824 + #define NLE_MONITOR_MASK_SFT (0x3fff << 0) 825 + 826 + /* MT6358_AFE_CG_EN_MON */ 827 + #define CK_CG_EN_MON_SFT 0 828 + #define CK_CG_EN_MON_MASK 0x3f 829 + #define CK_CG_EN_MON_MASK_SFT (0x3f << 0) 830 + 831 + /* MT6358_AFE_VOW_TOP */ 832 + #define PDN_VOW_SFT 15 833 + #define PDN_VOW_MASK 0x1 834 + #define PDN_VOW_MASK_SFT (0x1 << 15) 835 + #define VOW_1P6M_800K_SEL_SFT 14 836 + #define VOW_1P6M_800K_SEL_MASK 0x1 837 + #define VOW_1P6M_800K_SEL_MASK_SFT (0x1 << 14) 838 + #define VOW_DIGMIC_ON_SFT 13 839 + #define VOW_DIGMIC_ON_MASK 0x1 840 + #define VOW_DIGMIC_ON_MASK_SFT (0x1 << 13) 841 + #define VOW_CK_DIV_RST_SFT 12 842 + #define VOW_CK_DIV_RST_MASK 0x1 843 + #define VOW_CK_DIV_RST_MASK_SFT (0x1 << 12) 844 + #define VOW_ON_SFT 11 845 + #define VOW_ON_MASK 0x1 846 + #define VOW_ON_MASK_SFT (0x1 << 11) 847 + #define VOW_DIGMIC_CK_PHASE_SEL_SFT 8 848 + #define VOW_DIGMIC_CK_PHASE_SEL_MASK 0x7 849 + #define VOW_DIGMIC_CK_PHASE_SEL_MASK_SFT (0x7 << 8) 850 + #define MAIN_DMIC_CK_VOW_SEL_SFT 7 851 + #define MAIN_DMIC_CK_VOW_SEL_MASK 0x1 852 + #define MAIN_DMIC_CK_VOW_SEL_MASK_SFT (0x1 << 7) 853 + #define VOW_SDM_3_LEVEL_SFT 6 854 + #define VOW_SDM_3_LEVEL_MASK 0x1 855 + #define VOW_SDM_3_LEVEL_MASK_SFT (0x1 << 6) 856 + #define VOW_LOOP_BACK_MODE_SFT 5 857 + #define VOW_LOOP_BACK_MODE_MASK 0x1 858 + #define VOW_LOOP_BACK_MODE_MASK_SFT (0x1 << 5) 859 + #define VOW_INTR_SOURCE_SEL_SFT 4 860 + #define VOW_INTR_SOURCE_SEL_MASK 0x1 861 + #define VOW_INTR_SOURCE_SEL_MASK_SFT (0x1 << 4) 862 + #define VOW_INTR_CLR_SFT 3 863 + #define VOW_INTR_CLR_MASK 0x1 864 + #define VOW_INTR_CLR_MASK_SFT (0x1 << 3) 865 + #define S_N_VALUE_RST_SFT 2 866 + #define S_N_VALUE_RST_MASK 0x1 867 + #define S_N_VALUE_RST_MASK_SFT (0x1 << 2) 868 + #define SAMPLE_BASE_MODE_SFT 1 869 + #define SAMPLE_BASE_MODE_MASK 0x1 870 + #define SAMPLE_BASE_MODE_MASK_SFT (0x1 << 1) 871 + #define VOW_INTR_FLAG_SFT 0 872 + #define VOW_INTR_FLAG_MASK 0x1 873 + #define VOW_INTR_FLAG_MASK_SFT (0x1 << 0) 874 + 875 + /* MT6358_AFE_VOW_CFG0 */ 876 + #define AMPREF_SFT 0 877 + #define AMPREF_MASK 0xffff 878 + #define AMPREF_MASK_SFT (0xffff << 0) 879 + 880 + /* MT6358_AFE_VOW_CFG1 */ 881 + #define TIMERINI_SFT 0 882 + #define TIMERINI_MASK 0xffff 883 + #define TIMERINI_MASK_SFT (0xffff << 0) 884 + 885 + /* MT6358_AFE_VOW_CFG2 */ 886 + #define B_DEFAULT_SFT 12 887 + #define B_DEFAULT_MASK 0x7 888 + #define B_DEFAULT_MASK_SFT (0x7 << 12) 889 + #define A_DEFAULT_SFT 8 890 + #define A_DEFAULT_MASK 0x7 891 + #define A_DEFAULT_MASK_SFT (0x7 << 8) 892 + #define B_INI_SFT 4 893 + #define B_INI_MASK 0x7 894 + #define B_INI_MASK_SFT (0x7 << 4) 895 + #define A_INI_SFT 0 896 + #define A_INI_MASK 0x7 897 + #define A_INI_MASK_SFT (0x7 << 0) 898 + 899 + /* MT6358_AFE_VOW_CFG3 */ 900 + #define K_BETA_RISE_SFT 12 901 + #define K_BETA_RISE_MASK 0xf 902 + #define K_BETA_RISE_MASK_SFT (0xf << 12) 903 + #define K_BETA_FALL_SFT 8 904 + #define K_BETA_FALL_MASK 0xf 905 + #define K_BETA_FALL_MASK_SFT (0xf << 8) 906 + #define K_ALPHA_RISE_SFT 4 907 + #define K_ALPHA_RISE_MASK 0xf 908 + #define K_ALPHA_RISE_MASK_SFT (0xf << 4) 909 + #define K_ALPHA_FALL_SFT 0 910 + #define K_ALPHA_FALL_MASK 0xf 911 + #define K_ALPHA_FALL_MASK_SFT (0xf << 0) 912 + 913 + /* MT6358_AFE_VOW_CFG4 */ 914 + #define VOW_TXIF_SCK_INV_SFT 15 915 + #define VOW_TXIF_SCK_INV_MASK 0x1 916 + #define VOW_TXIF_SCK_INV_MASK_SFT (0x1 << 15) 917 + #define VOW_ADC_TESTCK_SRC_SEL_SFT 12 918 + #define VOW_ADC_TESTCK_SRC_SEL_MASK 0x7 919 + #define VOW_ADC_TESTCK_SRC_SEL_MASK_SFT (0x7 << 12) 920 + #define VOW_ADC_TESTCK_SEL_SFT 11 921 + #define VOW_ADC_TESTCK_SEL_MASK 0x1 922 + #define VOW_ADC_TESTCK_SEL_MASK_SFT (0x1 << 11) 923 + #define VOW_ADC_CLK_INV_SFT 10 924 + #define VOW_ADC_CLK_INV_MASK 0x1 925 + #define VOW_ADC_CLK_INV_MASK_SFT (0x1 << 10) 926 + #define VOW_TXIF_MONO_SFT 9 927 + #define VOW_TXIF_MONO_MASK 0x1 928 + #define VOW_TXIF_MONO_MASK_SFT (0x1 << 9) 929 + #define VOW_TXIF_SCK_DIV_SFT 4 930 + #define VOW_TXIF_SCK_DIV_MASK 0x1f 931 + #define VOW_TXIF_SCK_DIV_MASK_SFT (0x1f << 4) 932 + #define K_GAMMA_SFT 0 933 + #define K_GAMMA_MASK 0xf 934 + #define K_GAMMA_MASK_SFT (0xf << 0) 935 + 936 + /* MT6358_AFE_VOW_CFG5 */ 937 + #define N_MIN_SFT 0 938 + #define N_MIN_MASK 0xffff 939 + #define N_MIN_MASK_SFT (0xffff << 0) 940 + 941 + /* MT6358_AFE_VOW_CFG6 */ 942 + #define RG_WINDOW_SIZE_SEL_SFT 12 943 + #define RG_WINDOW_SIZE_SEL_MASK 0x1 944 + #define RG_WINDOW_SIZE_SEL_MASK_SFT (0x1 << 12) 945 + #define RG_FLR_BYPASS_SFT 11 946 + #define RG_FLR_BYPASS_MASK 0x1 947 + #define RG_FLR_BYPASS_MASK_SFT (0x1 << 11) 948 + #define RG_FLR_RATIO_SFT 8 949 + #define RG_FLR_RATIO_MASK 0x7 950 + #define RG_FLR_RATIO_MASK_SFT (0x7 << 8) 951 + #define RG_BUCK_DVFS_DONE_SW_CTL_SFT 7 952 + #define RG_BUCK_DVFS_DONE_SW_CTL_MASK 0x1 953 + #define RG_BUCK_DVFS_DONE_SW_CTL_MASK_SFT (0x1 << 7) 954 + #define RG_BUCK_DVFS_DONE_HW_MODE_SFT 6 955 + #define RG_BUCK_DVFS_DONE_HW_MODE_MASK 0x1 956 + #define RG_BUCK_DVFS_DONE_HW_MODE_MASK_SFT (0x1 << 6) 957 + #define RG_BUCK_DVFS_HW_CNT_THR_SFT 0 958 + #define RG_BUCK_DVFS_HW_CNT_THR_MASK 0x3f 959 + #define RG_BUCK_DVFS_HW_CNT_THR_MASK_SFT (0x3f << 0) 960 + 961 + /* MT6358_AFE_VOW_MON0 */ 962 + #define VOW_DOWNCNT_SFT 0 963 + #define VOW_DOWNCNT_MASK 0xffff 964 + #define VOW_DOWNCNT_MASK_SFT (0xffff << 0) 965 + 966 + /* MT6358_AFE_VOW_MON1 */ 967 + #define K_TMP_MON_SFT 10 968 + #define K_TMP_MON_MASK 0xf 969 + #define K_TMP_MON_MASK_SFT (0xf << 10) 970 + #define SLT_COUNTER_MON_SFT 7 971 + #define SLT_COUNTER_MON_MASK 0x7 972 + #define SLT_COUNTER_MON_MASK_SFT (0x7 << 7) 973 + #define VOW_B_SFT 4 974 + #define VOW_B_MASK 0x7 975 + #define VOW_B_MASK_SFT (0x7 << 4) 976 + #define VOW_A_SFT 1 977 + #define VOW_A_MASK 0x7 978 + #define VOW_A_MASK_SFT (0x7 << 1) 979 + #define SECOND_CNT_START_SFT 0 980 + #define SECOND_CNT_START_MASK 0x1 981 + #define SECOND_CNT_START_MASK_SFT (0x1 << 0) 982 + 983 + /* MT6358_AFE_VOW_MON2 */ 984 + #define VOW_S_L_SFT 0 985 + #define VOW_S_L_MASK 0xffff 986 + #define VOW_S_L_MASK_SFT (0xffff << 0) 987 + 988 + /* MT6358_AFE_VOW_MON3 */ 989 + #define VOW_S_H_SFT 0 990 + #define VOW_S_H_MASK 0xffff 991 + #define VOW_S_H_MASK_SFT (0xffff << 0) 992 + 993 + /* MT6358_AFE_VOW_MON4 */ 994 + #define VOW_N_L_SFT 0 995 + #define VOW_N_L_MASK 0xffff 996 + #define VOW_N_L_MASK_SFT (0xffff << 0) 997 + 998 + /* MT6358_AFE_VOW_MON5 */ 999 + #define VOW_N_H_SFT 0 1000 + #define VOW_N_H_MASK 0xffff 1001 + #define VOW_N_H_MASK_SFT (0xffff << 0) 1002 + 1003 + /* MT6358_AFE_VOW_SN_INI_CFG */ 1004 + #define VOW_SN_INI_CFG_EN_SFT 15 1005 + #define VOW_SN_INI_CFG_EN_MASK 0x1 1006 + #define VOW_SN_INI_CFG_EN_MASK_SFT (0x1 << 15) 1007 + #define VOW_SN_INI_CFG_VAL_SFT 0 1008 + #define VOW_SN_INI_CFG_VAL_MASK 0x7fff 1009 + #define VOW_SN_INI_CFG_VAL_MASK_SFT (0x7fff << 0) 1010 + 1011 + /* MT6358_AFE_VOW_TGEN_CFG0 */ 1012 + #define VOW_TGEN_EN_SFT 15 1013 + #define VOW_TGEN_EN_MASK 0x1 1014 + #define VOW_TGEN_EN_MASK_SFT (0x1 << 15) 1015 + #define VOW_TGEN_MUTE_SW_SFT 14 1016 + #define VOW_TGEN_MUTE_SW_MASK 0x1 1017 + #define VOW_TGEN_MUTE_SW_MASK_SFT (0x1 << 14) 1018 + #define VOW_TGEN_FREQ_DIV_SFT 0 1019 + #define VOW_TGEN_FREQ_DIV_MASK 0x3fff 1020 + #define VOW_TGEN_FREQ_DIV_MASK_SFT (0x3fff << 0) 1021 + 1022 + /* MT6358_AFE_VOW_POSDIV_CFG0 */ 1023 + #define BUCK_DVFS_DONE_SFT 15 1024 + #define BUCK_DVFS_DONE_MASK 0x1 1025 + #define BUCK_DVFS_DONE_MASK_SFT (0x1 << 15) 1026 + #define VOW_32K_MODE_SFT 13 1027 + #define VOW_32K_MODE_MASK 0x1 1028 + #define VOW_32K_MODE_MASK_SFT (0x1 << 13) 1029 + #define RG_BUCK_CLK_DIV_SFT 8 1030 + #define RG_BUCK_CLK_DIV_MASK 0x1f 1031 + #define RG_BUCK_CLK_DIV_MASK_SFT (0x1f << 8) 1032 + #define RG_A1P6M_EN_SEL_SFT 7 1033 + #define RG_A1P6M_EN_SEL_MASK 0x1 1034 + #define RG_A1P6M_EN_SEL_MASK_SFT (0x1 << 7) 1035 + #define VOW_CLK_SEL_SFT 6 1036 + #define VOW_CLK_SEL_MASK 0x1 1037 + #define VOW_CLK_SEL_MASK_SFT (0x1 << 6) 1038 + #define VOW_INTR_SW_MODE_SFT 5 1039 + #define VOW_INTR_SW_MODE_MASK 0x1 1040 + #define VOW_INTR_SW_MODE_MASK_SFT (0x1 << 5) 1041 + #define VOW_INTR_SW_VAL_SFT 4 1042 + #define VOW_INTR_SW_VAL_MASK 0x1 1043 + #define VOW_INTR_SW_VAL_MASK_SFT (0x1 << 4) 1044 + #define VOW_CIC_MODE_SEL_SFT 2 1045 + #define VOW_CIC_MODE_SEL_MASK 0x3 1046 + #define VOW_CIC_MODE_SEL_MASK_SFT (0x3 << 2) 1047 + #define RG_VOW_POSDIV_SFT 0 1048 + #define RG_VOW_POSDIV_MASK 0x3 1049 + #define RG_VOW_POSDIV_MASK_SFT (0x3 << 0) 1050 + 1051 + /* MT6358_AFE_VOW_HPF_CFG0 */ 1052 + #define VOW_HPF_DC_TEST_SFT 12 1053 + #define VOW_HPF_DC_TEST_MASK 0xf 1054 + #define VOW_HPF_DC_TEST_MASK_SFT (0xf << 12) 1055 + #define VOW_IRQ_LATCH_SNR_EN_SFT 10 1056 + #define VOW_IRQ_LATCH_SNR_EN_MASK 0x1 1057 + #define VOW_IRQ_LATCH_SNR_EN_MASK_SFT (0x1 << 10) 1058 + #define VOW_DMICCLK_PDN_SFT 9 1059 + #define VOW_DMICCLK_PDN_MASK 0x1 1060 + #define VOW_DMICCLK_PDN_MASK_SFT (0x1 << 9) 1061 + #define VOW_POSDIVCLK_PDN_SFT 8 1062 + #define VOW_POSDIVCLK_PDN_MASK 0x1 1063 + #define VOW_POSDIVCLK_PDN_MASK_SFT (0x1 << 8) 1064 + #define RG_BASELINE_ALPHA_ORDER_SFT 4 1065 + #define RG_BASELINE_ALPHA_ORDER_MASK 0xf 1066 + #define RG_BASELINE_ALPHA_ORDER_MASK_SFT (0xf << 4) 1067 + #define RG_MTKAIF_HPF_BYPASS_SFT 2 1068 + #define RG_MTKAIF_HPF_BYPASS_MASK 0x1 1069 + #define RG_MTKAIF_HPF_BYPASS_MASK_SFT (0x1 << 2) 1070 + #define RG_SNRDET_HPF_BYPASS_SFT 1 1071 + #define RG_SNRDET_HPF_BYPASS_MASK 0x1 1072 + #define RG_SNRDET_HPF_BYPASS_MASK_SFT (0x1 << 1) 1073 + #define RG_HPF_ON_SFT 0 1074 + #define RG_HPF_ON_MASK 0x1 1075 + #define RG_HPF_ON_MASK_SFT (0x1 << 0) 1076 + 1077 + /* MT6358_AFE_VOW_PERIODIC_CFG0 */ 1078 + #define RG_PERIODIC_EN_SFT 15 1079 + #define RG_PERIODIC_EN_MASK 0x1 1080 + #define RG_PERIODIC_EN_MASK_SFT (0x1 << 15) 1081 + #define RG_PERIODIC_CNT_CLR_SFT 14 1082 + #define RG_PERIODIC_CNT_CLR_MASK 0x1 1083 + #define RG_PERIODIC_CNT_CLR_MASK_SFT (0x1 << 14) 1084 + #define RG_PERIODIC_CNT_PERIOD_SFT 0 1085 + #define RG_PERIODIC_CNT_PERIOD_MASK 0x3fff 1086 + #define RG_PERIODIC_CNT_PERIOD_MASK_SFT (0x3fff << 0) 1087 + 1088 + /* MT6358_AFE_VOW_PERIODIC_CFG1 */ 1089 + #define RG_PERIODIC_CNT_SET_SFT 15 1090 + #define RG_PERIODIC_CNT_SET_MASK 0x1 1091 + #define RG_PERIODIC_CNT_SET_MASK_SFT (0x1 << 15) 1092 + #define RG_PERIODIC_CNT_PAUSE_SFT 14 1093 + #define RG_PERIODIC_CNT_PAUSE_MASK 0x1 1094 + #define RG_PERIODIC_CNT_PAUSE_MASK_SFT (0x1 << 14) 1095 + #define RG_PERIODIC_CNT_SET_VALUE_SFT 0 1096 + #define RG_PERIODIC_CNT_SET_VALUE_MASK 0x3fff 1097 + #define RG_PERIODIC_CNT_SET_VALUE_MASK_SFT (0x3fff << 0) 1098 + 1099 + /* MT6358_AFE_VOW_PERIODIC_CFG2 */ 1100 + #define AUDPREAMPLON_PERIODIC_MODE_SFT 15 1101 + #define AUDPREAMPLON_PERIODIC_MODE_MASK 0x1 1102 + #define AUDPREAMPLON_PERIODIC_MODE_MASK_SFT (0x1 << 15) 1103 + #define AUDPREAMPLON_PERIODIC_INVERSE_SFT 14 1104 + #define AUDPREAMPLON_PERIODIC_INVERSE_MASK 0x1 1105 + #define AUDPREAMPLON_PERIODIC_INVERSE_MASK_SFT (0x1 << 14) 1106 + #define AUDPREAMPLON_PERIODIC_ON_CYCLE_SFT 0 1107 + #define AUDPREAMPLON_PERIODIC_ON_CYCLE_MASK 0x3fff 1108 + #define AUDPREAMPLON_PERIODIC_ON_CYCLE_MASK_SFT (0x3fff << 0) 1109 + 1110 + /* MT6358_AFE_VOW_PERIODIC_CFG3 */ 1111 + #define AUDPREAMPLDCPRECHARGE_PERIODIC_MODE_SFT 15 1112 + #define AUDPREAMPLDCPRECHARGE_PERIODIC_MODE_MASK 0x1 1113 + #define AUDPREAMPLDCPRECHARGE_PERIODIC_MODE_MASK_SFT (0x1 << 15) 1114 + #define AUDPREAMPLDCPRECHARGE_PERIODIC_INVERSE_SFT 14 1115 + #define AUDPREAMPLDCPRECHARGE_PERIODIC_INVERSE_MASK 0x1 1116 + #define AUDPREAMPLDCPRECHARGE_PERIODIC_INVERSE_MASK_SFT (0x1 << 14) 1117 + #define AUDPREAMPLDCPRECHARGE_PERIODIC_ON_CYCLE_SFT 0 1118 + #define AUDPREAMPLDCPRECHARGE_PERIODIC_ON_CYCLE_MASK 0x3fff 1119 + #define AUDPREAMPLDCPRECHARGE_PERIODIC_ON_CYCLE_MASK_SFT (0x3fff << 0) 1120 + 1121 + /* MT6358_AFE_VOW_PERIODIC_CFG4 */ 1122 + #define AUDADCLPWRUP_PERIODIC_MODE_SFT 15 1123 + #define AUDADCLPWRUP_PERIODIC_MODE_MASK 0x1 1124 + #define AUDADCLPWRUP_PERIODIC_MODE_MASK_SFT (0x1 << 15) 1125 + #define AUDADCLPWRUP_PERIODIC_INVERSE_SFT 14 1126 + #define AUDADCLPWRUP_PERIODIC_INVERSE_MASK 0x1 1127 + #define AUDADCLPWRUP_PERIODIC_INVERSE_MASK_SFT (0x1 << 14) 1128 + #define AUDADCLPWRUP_PERIODIC_ON_CYCLE_SFT 0 1129 + #define AUDADCLPWRUP_PERIODIC_ON_CYCLE_MASK 0x3fff 1130 + #define AUDADCLPWRUP_PERIODIC_ON_CYCLE_MASK_SFT (0x3fff << 0) 1131 + 1132 + /* MT6358_AFE_VOW_PERIODIC_CFG5 */ 1133 + #define AUDGLBVOWLPWEN_PERIODIC_MODE_SFT 15 1134 + #define AUDGLBVOWLPWEN_PERIODIC_MODE_MASK 0x1 1135 + #define AUDGLBVOWLPWEN_PERIODIC_MODE_MASK_SFT (0x1 << 15) 1136 + #define AUDGLBVOWLPWEN_PERIODIC_INVERSE_SFT 14 1137 + #define AUDGLBVOWLPWEN_PERIODIC_INVERSE_MASK 0x1 1138 + #define AUDGLBVOWLPWEN_PERIODIC_INVERSE_MASK_SFT (0x1 << 14) 1139 + #define AUDGLBVOWLPWEN_PERIODIC_ON_CYCLE_SFT 0 1140 + #define AUDGLBVOWLPWEN_PERIODIC_ON_CYCLE_MASK 0x3fff 1141 + #define AUDGLBVOWLPWEN_PERIODIC_ON_CYCLE_MASK_SFT (0x3fff << 0) 1142 + 1143 + /* MT6358_AFE_VOW_PERIODIC_CFG6 */ 1144 + #define AUDDIGMICEN_PERIODIC_MODE_SFT 15 1145 + #define AUDDIGMICEN_PERIODIC_MODE_MASK 0x1 1146 + #define AUDDIGMICEN_PERIODIC_MODE_MASK_SFT (0x1 << 15) 1147 + #define AUDDIGMICEN_PERIODIC_INVERSE_SFT 14 1148 + #define AUDDIGMICEN_PERIODIC_INVERSE_MASK 0x1 1149 + #define AUDDIGMICEN_PERIODIC_INVERSE_MASK_SFT (0x1 << 14) 1150 + #define AUDDIGMICEN_PERIODIC_ON_CYCLE_SFT 0 1151 + #define AUDDIGMICEN_PERIODIC_ON_CYCLE_MASK 0x3fff 1152 + #define AUDDIGMICEN_PERIODIC_ON_CYCLE_MASK_SFT (0x3fff << 0) 1153 + 1154 + /* MT6358_AFE_VOW_PERIODIC_CFG7 */ 1155 + #define AUDPWDBMICBIAS0_PERIODIC_MODE_SFT 15 1156 + #define AUDPWDBMICBIAS0_PERIODIC_MODE_MASK 0x1 1157 + #define AUDPWDBMICBIAS0_PERIODIC_MODE_MASK_SFT (0x1 << 15) 1158 + #define AUDPWDBMICBIAS0_PERIODIC_INVERSE_SFT 14 1159 + #define AUDPWDBMICBIAS0_PERIODIC_INVERSE_MASK 0x1 1160 + #define AUDPWDBMICBIAS0_PERIODIC_INVERSE_MASK_SFT (0x1 << 14) 1161 + #define AUDPWDBMICBIAS0_PERIODIC_ON_CYCLE_SFT 0 1162 + #define AUDPWDBMICBIAS0_PERIODIC_ON_CYCLE_MASK 0x3fff 1163 + #define AUDPWDBMICBIAS0_PERIODIC_ON_CYCLE_MASK_SFT (0x3fff << 0) 1164 + 1165 + /* MT6358_AFE_VOW_PERIODIC_CFG8 */ 1166 + #define AUDPWDBMICBIAS1_PERIODIC_MODE_SFT 15 1167 + #define AUDPWDBMICBIAS1_PERIODIC_MODE_MASK 0x1 1168 + #define AUDPWDBMICBIAS1_PERIODIC_MODE_MASK_SFT (0x1 << 15) 1169 + #define AUDPWDBMICBIAS1_PERIODIC_INVERSE_SFT 14 1170 + #define AUDPWDBMICBIAS1_PERIODIC_INVERSE_MASK 0x1 1171 + #define AUDPWDBMICBIAS1_PERIODIC_INVERSE_MASK_SFT (0x1 << 14) 1172 + #define AUDPWDBMICBIAS1_PERIODIC_ON_CYCLE_SFT 0 1173 + #define AUDPWDBMICBIAS1_PERIODIC_ON_CYCLE_MASK 0x3fff 1174 + #define AUDPWDBMICBIAS1_PERIODIC_ON_CYCLE_MASK_SFT (0x3fff << 0) 1175 + 1176 + /* MT6358_AFE_VOW_PERIODIC_CFG9 */ 1177 + #define XO_VOW_CK_EN_PERIODIC_MODE_SFT 15 1178 + #define XO_VOW_CK_EN_PERIODIC_MODE_MASK 0x1 1179 + #define XO_VOW_CK_EN_PERIODIC_MODE_MASK_SFT (0x1 << 15) 1180 + #define XO_VOW_CK_EN_PERIODIC_INVERSE_SFT 14 1181 + #define XO_VOW_CK_EN_PERIODIC_INVERSE_MASK 0x1 1182 + #define XO_VOW_CK_EN_PERIODIC_INVERSE_MASK_SFT (0x1 << 14) 1183 + #define XO_VOW_CK_EN_PERIODIC_ON_CYCLE_SFT 0 1184 + #define XO_VOW_CK_EN_PERIODIC_ON_CYCLE_MASK 0x3fff 1185 + #define XO_VOW_CK_EN_PERIODIC_ON_CYCLE_MASK_SFT (0x3fff << 0) 1186 + 1187 + /* MT6358_AFE_VOW_PERIODIC_CFG10 */ 1188 + #define AUDGLB_PWRDN_PERIODIC_MODE_SFT 15 1189 + #define AUDGLB_PWRDN_PERIODIC_MODE_MASK 0x1 1190 + #define AUDGLB_PWRDN_PERIODIC_MODE_MASK_SFT (0x1 << 15) 1191 + #define AUDGLB_PWRDN_PERIODIC_INVERSE_SFT 14 1192 + #define AUDGLB_PWRDN_PERIODIC_INVERSE_MASK 0x1 1193 + #define AUDGLB_PWRDN_PERIODIC_INVERSE_MASK_SFT (0x1 << 14) 1194 + #define AUDGLB_PWRDN_PERIODIC_ON_CYCLE_SFT 0 1195 + #define AUDGLB_PWRDN_PERIODIC_ON_CYCLE_MASK 0x3fff 1196 + #define AUDGLB_PWRDN_PERIODIC_ON_CYCLE_MASK_SFT (0x3fff << 0) 1197 + 1198 + /* MT6358_AFE_VOW_PERIODIC_CFG11 */ 1199 + #define VOW_ON_PERIODIC_MODE_SFT 15 1200 + #define VOW_ON_PERIODIC_MODE_MASK 0x1 1201 + #define VOW_ON_PERIODIC_MODE_MASK_SFT (0x1 << 15) 1202 + #define VOW_ON_PERIODIC_INVERSE_SFT 14 1203 + #define VOW_ON_PERIODIC_INVERSE_MASK 0x1 1204 + #define VOW_ON_PERIODIC_INVERSE_MASK_SFT (0x1 << 14) 1205 + #define VOW_ON_PERIODIC_ON_CYCLE_SFT 0 1206 + #define VOW_ON_PERIODIC_ON_CYCLE_MASK 0x3fff 1207 + #define VOW_ON_PERIODIC_ON_CYCLE_MASK_SFT (0x3fff << 0) 1208 + 1209 + /* MT6358_AFE_VOW_PERIODIC_CFG12 */ 1210 + #define DMIC_ON_PERIODIC_MODE_SFT 15 1211 + #define DMIC_ON_PERIODIC_MODE_MASK 0x1 1212 + #define DMIC_ON_PERIODIC_MODE_MASK_SFT (0x1 << 15) 1213 + #define DMIC_ON_PERIODIC_INVERSE_SFT 14 1214 + #define DMIC_ON_PERIODIC_INVERSE_MASK 0x1 1215 + #define DMIC_ON_PERIODIC_INVERSE_MASK_SFT (0x1 << 14) 1216 + #define DMIC_ON_PERIODIC_ON_CYCLE_SFT 0 1217 + #define DMIC_ON_PERIODIC_ON_CYCLE_MASK 0x3fff 1218 + #define DMIC_ON_PERIODIC_ON_CYCLE_MASK_SFT (0x3fff << 0) 1219 + 1220 + /* MT6358_AFE_VOW_PERIODIC_CFG13 */ 1221 + #define PDN_VOW_F32K_CK_SFT 15 1222 + #define PDN_VOW_F32K_CK_MASK 0x1 1223 + #define PDN_VOW_F32K_CK_MASK_SFT (0x1 << 15) 1224 + #define AUDPREAMPLON_PERIODIC_OFF_CYCLE_SFT 0 1225 + #define AUDPREAMPLON_PERIODIC_OFF_CYCLE_MASK 0x3fff 1226 + #define AUDPREAMPLON_PERIODIC_OFF_CYCLE_MASK_SFT (0x3fff << 0) 1227 + 1228 + /* MT6358_AFE_VOW_PERIODIC_CFG14 */ 1229 + #define VOW_SNRDET_PERIODIC_CFG_SFT 15 1230 + #define VOW_SNRDET_PERIODIC_CFG_MASK 0x1 1231 + #define VOW_SNRDET_PERIODIC_CFG_MASK_SFT (0x1 << 15) 1232 + #define AUDPREAMPLDCPRECHARGE_PERIODIC_OFF_CYCLE_SFT 0 1233 + #define AUDPREAMPLDCPRECHARGE_PERIODIC_OFF_CYCLE_MASK 0x3fff 1234 + #define AUDPREAMPLDCPRECHARGE_PERIODIC_OFF_CYCLE_MASK_SFT (0x3fff << 0) 1235 + 1236 + /* MT6358_AFE_VOW_PERIODIC_CFG15 */ 1237 + #define AUDADCLPWRUP_PERIODIC_OFF_CYCLE_SFT 0 1238 + #define AUDADCLPWRUP_PERIODIC_OFF_CYCLE_MASK 0x3fff 1239 + #define AUDADCLPWRUP_PERIODIC_OFF_CYCLE_MASK_SFT (0x3fff << 0) 1240 + 1241 + /* MT6358_AFE_VOW_PERIODIC_CFG16 */ 1242 + #define AUDGLBVOWLPWEN_PERIODIC_OFF_CYCLE_SFT 0 1243 + #define AUDGLBVOWLPWEN_PERIODIC_OFF_CYCLE_MASK 0x3fff 1244 + #define AUDGLBVOWLPWEN_PERIODIC_OFF_CYCLE_MASK_SFT (0x3fff << 0) 1245 + 1246 + /* MT6358_AFE_VOW_PERIODIC_CFG17 */ 1247 + #define AUDDIGMICEN_PERIODIC_OFF_CYCLE_SFT 0 1248 + #define AUDDIGMICEN_PERIODIC_OFF_CYCLE_MASK 0x3fff 1249 + #define AUDDIGMICEN_PERIODIC_OFF_CYCLE_MASK_SFT (0x3fff << 0) 1250 + 1251 + /* MT6358_AFE_VOW_PERIODIC_CFG18 */ 1252 + #define AUDPWDBMICBIAS0_PERIODIC_OFF_CYCLE_SFT 0 1253 + #define AUDPWDBMICBIAS0_PERIODIC_OFF_CYCLE_MASK 0x3fff 1254 + #define AUDPWDBMICBIAS0_PERIODIC_OFF_CYCLE_MASK_SFT (0x3fff << 0) 1255 + 1256 + /* MT6358_AFE_VOW_PERIODIC_CFG19 */ 1257 + #define AUDPWDBMICBIAS1_PERIODIC_OFF_CYCLE_SFT 0 1258 + #define AUDPWDBMICBIAS1_PERIODIC_OFF_CYCLE_MASK 0x3fff 1259 + #define AUDPWDBMICBIAS1_PERIODIC_OFF_CYCLE_MASK_SFT (0x3fff << 0) 1260 + 1261 + /* MT6358_AFE_VOW_PERIODIC_CFG20 */ 1262 + #define CLKSQ_EN_VOW_PERIODIC_MODE_SFT 15 1263 + #define CLKSQ_EN_VOW_PERIODIC_MODE_MASK 0x1 1264 + #define CLKSQ_EN_VOW_PERIODIC_MODE_MASK_SFT (0x1 << 15) 1265 + #define XO_VOW_CK_EN_PERIODIC_OFF_CYCLE_SFT 0 1266 + #define XO_VOW_CK_EN_PERIODIC_OFF_CYCLE_MASK 0x3fff 1267 + #define XO_VOW_CK_EN_PERIODIC_OFF_CYCLE_MASK_SFT (0x3fff << 0) 1268 + 1269 + /* MT6358_AFE_VOW_PERIODIC_CFG21 */ 1270 + #define AUDGLB_PWRDN_PERIODIC_OFF_CYCLE_SFT 0 1271 + #define AUDGLB_PWRDN_PERIODIC_OFF_CYCLE_MASK 0x3fff 1272 + #define AUDGLB_PWRDN_PERIODIC_OFF_CYCLE_MASK_SFT (0x3fff << 0) 1273 + 1274 + /* MT6358_AFE_VOW_PERIODIC_CFG22 */ 1275 + #define VOW_ON_PERIODIC_OFF_CYCLE_SFT 0 1276 + #define VOW_ON_PERIODIC_OFF_CYCLE_MASK 0x3fff 1277 + #define VOW_ON_PERIODIC_OFF_CYCLE_MASK_SFT (0x3fff << 0) 1278 + 1279 + /* MT6358_AFE_VOW_PERIODIC_CFG23 */ 1280 + #define DMIC_ON_PERIODIC_OFF_CYCLE_SFT 0 1281 + #define DMIC_ON_PERIODIC_OFF_CYCLE_MASK 0x3fff 1282 + #define DMIC_ON_PERIODIC_OFF_CYCLE_MASK_SFT (0x3fff << 0) 1283 + 1284 + /* MT6358_AFE_VOW_PERIODIC_MON0 */ 1285 + #define VOW_PERIODIC_MON_SFT 0 1286 + #define VOW_PERIODIC_MON_MASK 0xffff 1287 + #define VOW_PERIODIC_MON_MASK_SFT (0xffff << 0) 1288 + 1289 + /* MT6358_AFE_VOW_PERIODIC_MON1 */ 1290 + #define VOW_PERIODIC_COUNT_MON_SFT 0 1291 + #define VOW_PERIODIC_COUNT_MON_MASK 0xffff 1292 + #define VOW_PERIODIC_COUNT_MON_MASK_SFT (0xffff << 0) 1293 + 1294 + /* MT6358_AUDENC_DSN_ID */ 1295 + #define AUDENC_ANA_ID_SFT 0 1296 + #define AUDENC_ANA_ID_MASK 0xff 1297 + #define AUDENC_ANA_ID_MASK_SFT (0xff << 0) 1298 + #define AUDENC_DIG_ID_SFT 8 1299 + #define AUDENC_DIG_ID_MASK 0xff 1300 + #define AUDENC_DIG_ID_MASK_SFT (0xff << 8) 1301 + 1302 + /* MT6358_AUDENC_DSN_REV0 */ 1303 + #define AUDENC_ANA_MINOR_REV_SFT 0 1304 + #define AUDENC_ANA_MINOR_REV_MASK 0xf 1305 + #define AUDENC_ANA_MINOR_REV_MASK_SFT (0xf << 0) 1306 + #define AUDENC_ANA_MAJOR_REV_SFT 4 1307 + #define AUDENC_ANA_MAJOR_REV_MASK 0xf 1308 + #define AUDENC_ANA_MAJOR_REV_MASK_SFT (0xf << 4) 1309 + #define AUDENC_DIG_MINOR_REV_SFT 8 1310 + #define AUDENC_DIG_MINOR_REV_MASK 0xf 1311 + #define AUDENC_DIG_MINOR_REV_MASK_SFT (0xf << 8) 1312 + #define AUDENC_DIG_MAJOR_REV_SFT 12 1313 + #define AUDENC_DIG_MAJOR_REV_MASK 0xf 1314 + #define AUDENC_DIG_MAJOR_REV_MASK_SFT (0xf << 12) 1315 + 1316 + /* MT6358_AUDENC_DSN_DBI */ 1317 + #define AUDENC_DSN_CBS_SFT 0 1318 + #define AUDENC_DSN_CBS_MASK 0x3 1319 + #define AUDENC_DSN_CBS_MASK_SFT (0x3 << 0) 1320 + #define AUDENC_DSN_BIX_SFT 2 1321 + #define AUDENC_DSN_BIX_MASK 0x3 1322 + #define AUDENC_DSN_BIX_MASK_SFT (0x3 << 2) 1323 + #define AUDENC_DSN_ESP_SFT 8 1324 + #define AUDENC_DSN_ESP_MASK 0xff 1325 + #define AUDENC_DSN_ESP_MASK_SFT (0xff << 8) 1326 + 1327 + /* MT6358_AUDENC_DSN_FPI */ 1328 + #define AUDENC_DSN_FPI_SFT 0 1329 + #define AUDENC_DSN_FPI_MASK 0xff 1330 + #define AUDENC_DSN_FPI_MASK_SFT (0xff << 0) 1331 + 1332 + /* MT6358_AUDENC_ANA_CON0 */ 1333 + #define RG_AUDPREAMPLON_SFT 0 1334 + #define RG_AUDPREAMPLON_MASK 0x1 1335 + #define RG_AUDPREAMPLON_MASK_SFT (0x1 << 0) 1336 + #define RG_AUDPREAMPLDCCEN_SFT 1 1337 + #define RG_AUDPREAMPLDCCEN_MASK 0x1 1338 + #define RG_AUDPREAMPLDCCEN_MASK_SFT (0x1 << 1) 1339 + #define RG_AUDPREAMPLDCPRECHARGE_SFT 2 1340 + #define RG_AUDPREAMPLDCPRECHARGE_MASK 0x1 1341 + #define RG_AUDPREAMPLDCPRECHARGE_MASK_SFT (0x1 << 2) 1342 + #define RG_AUDPREAMPLPGATEST_SFT 3 1343 + #define RG_AUDPREAMPLPGATEST_MASK 0x1 1344 + #define RG_AUDPREAMPLPGATEST_MASK_SFT (0x1 << 3) 1345 + #define RG_AUDPREAMPLVSCALE_SFT 4 1346 + #define RG_AUDPREAMPLVSCALE_MASK 0x3 1347 + #define RG_AUDPREAMPLVSCALE_MASK_SFT (0x3 << 4) 1348 + #define RG_AUDPREAMPLINPUTSEL_SFT 6 1349 + #define RG_AUDPREAMPLINPUTSEL_MASK 0x3 1350 + #define RG_AUDPREAMPLINPUTSEL_MASK_SFT (0x3 << 6) 1351 + #define RG_AUDPREAMPLGAIN_SFT 8 1352 + #define RG_AUDPREAMPLGAIN_MASK 0x7 1353 + #define RG_AUDPREAMPLGAIN_MASK_SFT (0x7 << 8) 1354 + #define RG_AUDADCLPWRUP_SFT 12 1355 + #define RG_AUDADCLPWRUP_MASK 0x1 1356 + #define RG_AUDADCLPWRUP_MASK_SFT (0x1 << 12) 1357 + #define RG_AUDADCLINPUTSEL_SFT 13 1358 + #define RG_AUDADCLINPUTSEL_MASK 0x3 1359 + #define RG_AUDADCLINPUTSEL_MASK_SFT (0x3 << 13) 1360 + 1361 + /* MT6358_AUDENC_ANA_CON1 */ 1362 + #define RG_AUDPREAMPRON_SFT 0 1363 + #define RG_AUDPREAMPRON_MASK 0x1 1364 + #define RG_AUDPREAMPRON_MASK_SFT (0x1 << 0) 1365 + #define RG_AUDPREAMPRDCCEN_SFT 1 1366 + #define RG_AUDPREAMPRDCCEN_MASK 0x1 1367 + #define RG_AUDPREAMPRDCCEN_MASK_SFT (0x1 << 1) 1368 + #define RG_AUDPREAMPRDCPRECHARGE_SFT 2 1369 + #define RG_AUDPREAMPRDCPRECHARGE_MASK 0x1 1370 + #define RG_AUDPREAMPRDCPRECHARGE_MASK_SFT (0x1 << 2) 1371 + #define RG_AUDPREAMPRPGATEST_SFT 3 1372 + #define RG_AUDPREAMPRPGATEST_MASK 0x1 1373 + #define RG_AUDPREAMPRPGATEST_MASK_SFT (0x1 << 3) 1374 + #define RG_AUDPREAMPRVSCALE_SFT 4 1375 + #define RG_AUDPREAMPRVSCALE_MASK 0x3 1376 + #define RG_AUDPREAMPRVSCALE_MASK_SFT (0x3 << 4) 1377 + #define RG_AUDPREAMPRINPUTSEL_SFT 6 1378 + #define RG_AUDPREAMPRINPUTSEL_MASK 0x3 1379 + #define RG_AUDPREAMPRINPUTSEL_MASK_SFT (0x3 << 6) 1380 + #define RG_AUDPREAMPRGAIN_SFT 8 1381 + #define RG_AUDPREAMPRGAIN_MASK 0x7 1382 + #define RG_AUDPREAMPRGAIN_MASK_SFT (0x7 << 8) 1383 + #define RG_AUDIO_VOW_EN_SFT 11 1384 + #define RG_AUDIO_VOW_EN_MASK 0x1 1385 + #define RG_AUDIO_VOW_EN_MASK_SFT (0x1 << 11) 1386 + #define RG_AUDADCRPWRUP_SFT 12 1387 + #define RG_AUDADCRPWRUP_MASK 0x1 1388 + #define RG_AUDADCRPWRUP_MASK_SFT (0x1 << 12) 1389 + #define RG_AUDADCRINPUTSEL_SFT 13 1390 + #define RG_AUDADCRINPUTSEL_MASK 0x3 1391 + #define RG_AUDADCRINPUTSEL_MASK_SFT (0x3 << 13) 1392 + #define RG_CLKSQ_EN_VOW_SFT 15 1393 + #define RG_CLKSQ_EN_VOW_MASK 0x1 1394 + #define RG_CLKSQ_EN_VOW_MASK_SFT (0x1 << 15) 1395 + 1396 + /* MT6358_AUDENC_ANA_CON2 */ 1397 + #define RG_AUDULHALFBIAS_SFT 0 1398 + #define RG_AUDULHALFBIAS_MASK 0x1 1399 + #define RG_AUDULHALFBIAS_MASK_SFT (0x1 << 0) 1400 + #define RG_AUDGLBVOWLPWEN_SFT 1 1401 + #define RG_AUDGLBVOWLPWEN_MASK 0x1 1402 + #define RG_AUDGLBVOWLPWEN_MASK_SFT (0x1 << 1) 1403 + #define RG_AUDPREAMPLPEN_SFT 2 1404 + #define RG_AUDPREAMPLPEN_MASK 0x1 1405 + #define RG_AUDPREAMPLPEN_MASK_SFT (0x1 << 2) 1406 + #define RG_AUDADC1STSTAGELPEN_SFT 3 1407 + #define RG_AUDADC1STSTAGELPEN_MASK 0x1 1408 + #define RG_AUDADC1STSTAGELPEN_MASK_SFT (0x1 << 3) 1409 + #define RG_AUDADC2NDSTAGELPEN_SFT 4 1410 + #define RG_AUDADC2NDSTAGELPEN_MASK 0x1 1411 + #define RG_AUDADC2NDSTAGELPEN_MASK_SFT (0x1 << 4) 1412 + #define RG_AUDADCFLASHLPEN_SFT 5 1413 + #define RG_AUDADCFLASHLPEN_MASK 0x1 1414 + #define RG_AUDADCFLASHLPEN_MASK_SFT (0x1 << 5) 1415 + #define RG_AUDPREAMPIDDTEST_SFT 6 1416 + #define RG_AUDPREAMPIDDTEST_MASK 0x3 1417 + #define RG_AUDPREAMPIDDTEST_MASK_SFT (0x3 << 6) 1418 + #define RG_AUDADC1STSTAGEIDDTEST_SFT 8 1419 + #define RG_AUDADC1STSTAGEIDDTEST_MASK 0x3 1420 + #define RG_AUDADC1STSTAGEIDDTEST_MASK_SFT (0x3 << 8) 1421 + #define RG_AUDADC2NDSTAGEIDDTEST_SFT 10 1422 + #define RG_AUDADC2NDSTAGEIDDTEST_MASK 0x3 1423 + #define RG_AUDADC2NDSTAGEIDDTEST_MASK_SFT (0x3 << 10) 1424 + #define RG_AUDADCREFBUFIDDTEST_SFT 12 1425 + #define RG_AUDADCREFBUFIDDTEST_MASK 0x3 1426 + #define RG_AUDADCREFBUFIDDTEST_MASK_SFT (0x3 << 12) 1427 + #define RG_AUDADCFLASHIDDTEST_SFT 14 1428 + #define RG_AUDADCFLASHIDDTEST_MASK 0x3 1429 + #define RG_AUDADCFLASHIDDTEST_MASK_SFT (0x3 << 14) 1430 + 1431 + /* MT6358_AUDENC_ANA_CON3 */ 1432 + #define RG_AUDADCDAC0P25FS_SFT 0 1433 + #define RG_AUDADCDAC0P25FS_MASK 0x1 1434 + #define RG_AUDADCDAC0P25FS_MASK_SFT (0x1 << 0) 1435 + #define RG_AUDADCCLKSEL_SFT 1 1436 + #define RG_AUDADCCLKSEL_MASK 0x1 1437 + #define RG_AUDADCCLKSEL_MASK_SFT (0x1 << 1) 1438 + #define RG_AUDADCCLKSOURCE_SFT 2 1439 + #define RG_AUDADCCLKSOURCE_MASK 0x3 1440 + #define RG_AUDADCCLKSOURCE_MASK_SFT (0x3 << 2) 1441 + #define RG_AUDPREAMPAAFEN_SFT 8 1442 + #define RG_AUDPREAMPAAFEN_MASK 0x1 1443 + #define RG_AUDPREAMPAAFEN_MASK_SFT (0x1 << 8) 1444 + #define RG_DCCVCMBUFLPMODSEL_SFT 9 1445 + #define RG_DCCVCMBUFLPMODSEL_MASK 0x1 1446 + #define RG_DCCVCMBUFLPMODSEL_MASK_SFT (0x1 << 9) 1447 + #define RG_DCCVCMBUFLPSWEN_SFT 10 1448 + #define RG_DCCVCMBUFLPSWEN_MASK 0x1 1449 + #define RG_DCCVCMBUFLPSWEN_MASK_SFT (0x1 << 10) 1450 + #define RG_CMSTBENH_SFT 11 1451 + #define RG_CMSTBENH_MASK 0x1 1452 + #define RG_CMSTBENH_MASK_SFT (0x1 << 11) 1453 + #define RG_PGABODYSW_SFT 12 1454 + #define RG_PGABODYSW_MASK 0x1 1455 + #define RG_PGABODYSW_MASK_SFT (0x1 << 12) 1456 + 1457 + /* MT6358_AUDENC_ANA_CON4 */ 1458 + #define RG_AUDADC1STSTAGESDENB_SFT 0 1459 + #define RG_AUDADC1STSTAGESDENB_MASK 0x1 1460 + #define RG_AUDADC1STSTAGESDENB_MASK_SFT (0x1 << 0) 1461 + #define RG_AUDADC2NDSTAGERESET_SFT 1 1462 + #define RG_AUDADC2NDSTAGERESET_MASK 0x1 1463 + #define RG_AUDADC2NDSTAGERESET_MASK_SFT (0x1 << 1) 1464 + #define RG_AUDADC3RDSTAGERESET_SFT 2 1465 + #define RG_AUDADC3RDSTAGERESET_MASK 0x1 1466 + #define RG_AUDADC3RDSTAGERESET_MASK_SFT (0x1 << 2) 1467 + #define RG_AUDADCFSRESET_SFT 3 1468 + #define RG_AUDADCFSRESET_MASK 0x1 1469 + #define RG_AUDADCFSRESET_MASK_SFT (0x1 << 3) 1470 + #define RG_AUDADCWIDECM_SFT 4 1471 + #define RG_AUDADCWIDECM_MASK 0x1 1472 + #define RG_AUDADCWIDECM_MASK_SFT (0x1 << 4) 1473 + #define RG_AUDADCNOPATEST_SFT 5 1474 + #define RG_AUDADCNOPATEST_MASK 0x1 1475 + #define RG_AUDADCNOPATEST_MASK_SFT (0x1 << 5) 1476 + #define RG_AUDADCBYPASS_SFT 6 1477 + #define RG_AUDADCBYPASS_MASK 0x1 1478 + #define RG_AUDADCBYPASS_MASK_SFT (0x1 << 6) 1479 + #define RG_AUDADCFFBYPASS_SFT 7 1480 + #define RG_AUDADCFFBYPASS_MASK 0x1 1481 + #define RG_AUDADCFFBYPASS_MASK_SFT (0x1 << 7) 1482 + #define RG_AUDADCDACFBCURRENT_SFT 8 1483 + #define RG_AUDADCDACFBCURRENT_MASK 0x1 1484 + #define RG_AUDADCDACFBCURRENT_MASK_SFT (0x1 << 8) 1485 + #define RG_AUDADCDACIDDTEST_SFT 9 1486 + #define RG_AUDADCDACIDDTEST_MASK 0x3 1487 + #define RG_AUDADCDACIDDTEST_MASK_SFT (0x3 << 9) 1488 + #define RG_AUDADCDACNRZ_SFT 11 1489 + #define RG_AUDADCDACNRZ_MASK 0x1 1490 + #define RG_AUDADCDACNRZ_MASK_SFT (0x1 << 11) 1491 + #define RG_AUDADCNODEM_SFT 12 1492 + #define RG_AUDADCNODEM_MASK 0x1 1493 + #define RG_AUDADCNODEM_MASK_SFT (0x1 << 12) 1494 + #define RG_AUDADCDACTEST_SFT 13 1495 + #define RG_AUDADCDACTEST_MASK 0x1 1496 + #define RG_AUDADCDACTEST_MASK_SFT (0x1 << 13) 1497 + 1498 + /* MT6358_AUDENC_ANA_CON5 */ 1499 + #define RG_AUDRCTUNEL_SFT 0 1500 + #define RG_AUDRCTUNEL_MASK 0x1f 1501 + #define RG_AUDRCTUNEL_MASK_SFT (0x1f << 0) 1502 + #define RG_AUDRCTUNELSEL_SFT 5 1503 + #define RG_AUDRCTUNELSEL_MASK 0x1 1504 + #define RG_AUDRCTUNELSEL_MASK_SFT (0x1 << 5) 1505 + #define RG_AUDRCTUNER_SFT 8 1506 + #define RG_AUDRCTUNER_MASK 0x1f 1507 + #define RG_AUDRCTUNER_MASK_SFT (0x1f << 8) 1508 + #define RG_AUDRCTUNERSEL_SFT 13 1509 + #define RG_AUDRCTUNERSEL_MASK 0x1 1510 + #define RG_AUDRCTUNERSEL_MASK_SFT (0x1 << 13) 1511 + 1512 + /* MT6358_AUDENC_ANA_CON6 */ 1513 + #define RG_CLKSQ_EN_SFT 0 1514 + #define RG_CLKSQ_EN_MASK 0x1 1515 + #define RG_CLKSQ_EN_MASK_SFT (0x1 << 0) 1516 + #define RG_CLKSQ_IN_SEL_TEST_SFT 1 1517 + #define RG_CLKSQ_IN_SEL_TEST_MASK 0x1 1518 + #define RG_CLKSQ_IN_SEL_TEST_MASK_SFT (0x1 << 1) 1519 + #define RG_CM_REFGENSEL_SFT 2 1520 + #define RG_CM_REFGENSEL_MASK 0x1 1521 + #define RG_CM_REFGENSEL_MASK_SFT (0x1 << 2) 1522 + #define RG_AUDSPARE_SFT 4 1523 + #define RG_AUDSPARE_MASK 0xf 1524 + #define RG_AUDSPARE_MASK_SFT (0xf << 4) 1525 + #define RG_AUDENCSPARE_SFT 8 1526 + #define RG_AUDENCSPARE_MASK 0x3f 1527 + #define RG_AUDENCSPARE_MASK_SFT (0x3f << 8) 1528 + 1529 + /* MT6358_AUDENC_ANA_CON7 */ 1530 + #define RG_AUDENCSPARE2_SFT 0 1531 + #define RG_AUDENCSPARE2_MASK 0xff 1532 + #define RG_AUDENCSPARE2_MASK_SFT (0xff << 0) 1533 + 1534 + /* MT6358_AUDENC_ANA_CON8 */ 1535 + #define RG_AUDDIGMICEN_SFT 0 1536 + #define RG_AUDDIGMICEN_MASK 0x1 1537 + #define RG_AUDDIGMICEN_MASK_SFT (0x1 << 0) 1538 + #define RG_AUDDIGMICBIAS_SFT 1 1539 + #define RG_AUDDIGMICBIAS_MASK 0x3 1540 + #define RG_AUDDIGMICBIAS_MASK_SFT (0x3 << 1) 1541 + #define RG_DMICHPCLKEN_SFT 3 1542 + #define RG_DMICHPCLKEN_MASK 0x1 1543 + #define RG_DMICHPCLKEN_MASK_SFT (0x1 << 3) 1544 + #define RG_AUDDIGMICPDUTY_SFT 4 1545 + #define RG_AUDDIGMICPDUTY_MASK 0x3 1546 + #define RG_AUDDIGMICPDUTY_MASK_SFT (0x3 << 4) 1547 + #define RG_AUDDIGMICNDUTY_SFT 6 1548 + #define RG_AUDDIGMICNDUTY_MASK 0x3 1549 + #define RG_AUDDIGMICNDUTY_MASK_SFT (0x3 << 6) 1550 + #define RG_DMICMONEN_SFT 8 1551 + #define RG_DMICMONEN_MASK 0x1 1552 + #define RG_DMICMONEN_MASK_SFT (0x1 << 8) 1553 + #define RG_DMICMONSEL_SFT 9 1554 + #define RG_DMICMONSEL_MASK 0x7 1555 + #define RG_DMICMONSEL_MASK_SFT (0x7 << 9) 1556 + #define RG_AUDSPAREVMIC_SFT 12 1557 + #define RG_AUDSPAREVMIC_MASK 0xf 1558 + #define RG_AUDSPAREVMIC_MASK_SFT (0xf << 12) 1559 + 1560 + /* MT6358_AUDENC_ANA_CON9 */ 1561 + #define RG_AUDPWDBMICBIAS0_SFT 0 1562 + #define RG_AUDPWDBMICBIAS0_MASK 0x1 1563 + #define RG_AUDPWDBMICBIAS0_MASK_SFT (0x1 << 0) 1564 + #define RG_AUDMICBIAS0BYPASSEN_SFT 1 1565 + #define RG_AUDMICBIAS0BYPASSEN_MASK 0x1 1566 + #define RG_AUDMICBIAS0BYPASSEN_MASK_SFT (0x1 << 1) 1567 + #define RG_AUDMICBIAS0LOWPEN_SFT 2 1568 + #define RG_AUDMICBIAS0LOWPEN_MASK 0x1 1569 + #define RG_AUDMICBIAS0LOWPEN_MASK_SFT (0x1 << 2) 1570 + #define RG_AUDMICBIAS0VREF_SFT 4 1571 + #define RG_AUDMICBIAS0VREF_MASK 0x7 1572 + #define RG_AUDMICBIAS0VREF_MASK_SFT (0x7 << 4) 1573 + #define RG_AUDMICBIAS0DCSW0P1EN_SFT 8 1574 + #define RG_AUDMICBIAS0DCSW0P1EN_MASK 0x1 1575 + #define RG_AUDMICBIAS0DCSW0P1EN_MASK_SFT (0x1 << 8) 1576 + #define RG_AUDMICBIAS0DCSW0P2EN_SFT 9 1577 + #define RG_AUDMICBIAS0DCSW0P2EN_MASK 0x1 1578 + #define RG_AUDMICBIAS0DCSW0P2EN_MASK_SFT (0x1 << 9) 1579 + #define RG_AUDMICBIAS0DCSW0NEN_SFT 10 1580 + #define RG_AUDMICBIAS0DCSW0NEN_MASK 0x1 1581 + #define RG_AUDMICBIAS0DCSW0NEN_MASK_SFT (0x1 << 10) 1582 + #define RG_AUDMICBIAS0DCSW2P1EN_SFT 12 1583 + #define RG_AUDMICBIAS0DCSW2P1EN_MASK 0x1 1584 + #define RG_AUDMICBIAS0DCSW2P1EN_MASK_SFT (0x1 << 12) 1585 + #define RG_AUDMICBIAS0DCSW2P2EN_SFT 13 1586 + #define RG_AUDMICBIAS0DCSW2P2EN_MASK 0x1 1587 + #define RG_AUDMICBIAS0DCSW2P2EN_MASK_SFT (0x1 << 13) 1588 + #define RG_AUDMICBIAS0DCSW2NEN_SFT 14 1589 + #define RG_AUDMICBIAS0DCSW2NEN_MASK 0x1 1590 + #define RG_AUDMICBIAS0DCSW2NEN_MASK_SFT (0x1 << 14) 1591 + 1592 + /* MT6358_AUDENC_ANA_CON10 */ 1593 + #define RG_AUDPWDBMICBIAS1_SFT 0 1594 + #define RG_AUDPWDBMICBIAS1_MASK 0x1 1595 + #define RG_AUDPWDBMICBIAS1_MASK_SFT (0x1 << 0) 1596 + #define RG_AUDMICBIAS1BYPASSEN_SFT 1 1597 + #define RG_AUDMICBIAS1BYPASSEN_MASK 0x1 1598 + #define RG_AUDMICBIAS1BYPASSEN_MASK_SFT (0x1 << 1) 1599 + #define RG_AUDMICBIAS1LOWPEN_SFT 2 1600 + #define RG_AUDMICBIAS1LOWPEN_MASK 0x1 1601 + #define RG_AUDMICBIAS1LOWPEN_MASK_SFT (0x1 << 2) 1602 + #define RG_AUDMICBIAS1VREF_SFT 4 1603 + #define RG_AUDMICBIAS1VREF_MASK 0x7 1604 + #define RG_AUDMICBIAS1VREF_MASK_SFT (0x7 << 4) 1605 + #define RG_AUDMICBIAS1DCSW1PEN_SFT 8 1606 + #define RG_AUDMICBIAS1DCSW1PEN_MASK 0x1 1607 + #define RG_AUDMICBIAS1DCSW1PEN_MASK_SFT (0x1 << 8) 1608 + #define RG_AUDMICBIAS1DCSW1NEN_SFT 9 1609 + #define RG_AUDMICBIAS1DCSW1NEN_MASK 0x1 1610 + #define RG_AUDMICBIAS1DCSW1NEN_MASK_SFT (0x1 << 9) 1611 + #define RG_BANDGAPGEN_SFT 12 1612 + #define RG_BANDGAPGEN_MASK 0x1 1613 + #define RG_BANDGAPGEN_MASK_SFT (0x1 << 12) 1614 + #define RG_MTEST_EN_SFT 13 1615 + #define RG_MTEST_EN_MASK 0x1 1616 + #define RG_MTEST_EN_MASK_SFT (0x1 << 13) 1617 + #define RG_MTEST_SEL_SFT 14 1618 + #define RG_MTEST_SEL_MASK 0x1 1619 + #define RG_MTEST_SEL_MASK_SFT (0x1 << 14) 1620 + #define RG_MTEST_CURRENT_SFT 15 1621 + #define RG_MTEST_CURRENT_MASK 0x1 1622 + #define RG_MTEST_CURRENT_MASK_SFT (0x1 << 15) 1623 + 1624 + /* MT6358_AUDENC_ANA_CON11 */ 1625 + #define RG_AUDACCDETMICBIAS0PULLLOW_SFT 0 1626 + #define RG_AUDACCDETMICBIAS0PULLLOW_MASK 0x1 1627 + #define RG_AUDACCDETMICBIAS0PULLLOW_MASK_SFT (0x1 << 0) 1628 + #define RG_AUDACCDETMICBIAS1PULLLOW_SFT 1 1629 + #define RG_AUDACCDETMICBIAS1PULLLOW_MASK 0x1 1630 + #define RG_AUDACCDETMICBIAS1PULLLOW_MASK_SFT (0x1 << 1) 1631 + #define RG_AUDACCDETVIN1PULLLOW_SFT 2 1632 + #define RG_AUDACCDETVIN1PULLLOW_MASK 0x1 1633 + #define RG_AUDACCDETVIN1PULLLOW_MASK_SFT (0x1 << 2) 1634 + #define RG_AUDACCDETVTHACAL_SFT 4 1635 + #define RG_AUDACCDETVTHACAL_MASK 0x1 1636 + #define RG_AUDACCDETVTHACAL_MASK_SFT (0x1 << 4) 1637 + #define RG_AUDACCDETVTHBCAL_SFT 5 1638 + #define RG_AUDACCDETVTHBCAL_MASK 0x1 1639 + #define RG_AUDACCDETVTHBCAL_MASK_SFT (0x1 << 5) 1640 + #define RG_AUDACCDETTVDET_SFT 6 1641 + #define RG_AUDACCDETTVDET_MASK 0x1 1642 + #define RG_AUDACCDETTVDET_MASK_SFT (0x1 << 6) 1643 + #define RG_ACCDETSEL_SFT 7 1644 + #define RG_ACCDETSEL_MASK 0x1 1645 + #define RG_ACCDETSEL_MASK_SFT (0x1 << 7) 1646 + #define RG_SWBUFMODSEL_SFT 8 1647 + #define RG_SWBUFMODSEL_MASK 0x1 1648 + #define RG_SWBUFMODSEL_MASK_SFT (0x1 << 8) 1649 + #define RG_SWBUFSWEN_SFT 9 1650 + #define RG_SWBUFSWEN_MASK 0x1 1651 + #define RG_SWBUFSWEN_MASK_SFT (0x1 << 9) 1652 + #define RG_EINTCOMPVTH_SFT 10 1653 + #define RG_EINTCOMPVTH_MASK 0x1 1654 + #define RG_EINTCOMPVTH_MASK_SFT (0x1 << 10) 1655 + #define RG_EINTCONFIGACCDET_SFT 11 1656 + #define RG_EINTCONFIGACCDET_MASK 0x1 1657 + #define RG_EINTCONFIGACCDET_MASK_SFT (0x1 << 11) 1658 + #define RG_EINTHIRENB_SFT 12 1659 + #define RG_EINTHIRENB_MASK 0x1 1660 + #define RG_EINTHIRENB_MASK_SFT (0x1 << 12) 1661 + #define RG_ACCDET2AUXRESBYPASS_SFT 13 1662 + #define RG_ACCDET2AUXRESBYPASS_MASK 0x1 1663 + #define RG_ACCDET2AUXRESBYPASS_MASK_SFT (0x1 << 13) 1664 + #define RG_ACCDET2AUXBUFFERBYPASS_SFT 14 1665 + #define RG_ACCDET2AUXBUFFERBYPASS_MASK 0x1 1666 + #define RG_ACCDET2AUXBUFFERBYPASS_MASK_SFT (0x1 << 14) 1667 + #define RG_ACCDET2AUXSWEN_SFT 15 1668 + #define RG_ACCDET2AUXSWEN_MASK 0x1 1669 + #define RG_ACCDET2AUXSWEN_MASK_SFT (0x1 << 15) 1670 + 1671 + /* MT6358_AUDENC_ANA_CON12 */ 1672 + #define RGS_AUDRCTUNELREAD_SFT 0 1673 + #define RGS_AUDRCTUNELREAD_MASK 0x1f 1674 + #define RGS_AUDRCTUNELREAD_MASK_SFT (0x1f << 0) 1675 + #define RGS_AUDRCTUNERREAD_SFT 8 1676 + #define RGS_AUDRCTUNERREAD_MASK 0x1f 1677 + #define RGS_AUDRCTUNERREAD_MASK_SFT (0x1f << 8) 1678 + 1679 + /* MT6358_AUDDEC_DSN_ID */ 1680 + #define AUDDEC_ANA_ID_SFT 0 1681 + #define AUDDEC_ANA_ID_MASK 0xff 1682 + #define AUDDEC_ANA_ID_MASK_SFT (0xff << 0) 1683 + #define AUDDEC_DIG_ID_SFT 8 1684 + #define AUDDEC_DIG_ID_MASK 0xff 1685 + #define AUDDEC_DIG_ID_MASK_SFT (0xff << 8) 1686 + 1687 + /* MT6358_AUDDEC_DSN_REV0 */ 1688 + #define AUDDEC_ANA_MINOR_REV_SFT 0 1689 + #define AUDDEC_ANA_MINOR_REV_MASK 0xf 1690 + #define AUDDEC_ANA_MINOR_REV_MASK_SFT (0xf << 0) 1691 + #define AUDDEC_ANA_MAJOR_REV_SFT 4 1692 + #define AUDDEC_ANA_MAJOR_REV_MASK 0xf 1693 + #define AUDDEC_ANA_MAJOR_REV_MASK_SFT (0xf << 4) 1694 + #define AUDDEC_DIG_MINOR_REV_SFT 8 1695 + #define AUDDEC_DIG_MINOR_REV_MASK 0xf 1696 + #define AUDDEC_DIG_MINOR_REV_MASK_SFT (0xf << 8) 1697 + #define AUDDEC_DIG_MAJOR_REV_SFT 12 1698 + #define AUDDEC_DIG_MAJOR_REV_MASK 0xf 1699 + #define AUDDEC_DIG_MAJOR_REV_MASK_SFT (0xf << 12) 1700 + 1701 + /* MT6358_AUDDEC_DSN_DBI */ 1702 + #define AUDDEC_DSN_CBS_SFT 0 1703 + #define AUDDEC_DSN_CBS_MASK 0x3 1704 + #define AUDDEC_DSN_CBS_MASK_SFT (0x3 << 0) 1705 + #define AUDDEC_DSN_BIX_SFT 2 1706 + #define AUDDEC_DSN_BIX_MASK 0x3 1707 + #define AUDDEC_DSN_BIX_MASK_SFT (0x3 << 2) 1708 + #define AUDDEC_DSN_ESP_SFT 8 1709 + #define AUDDEC_DSN_ESP_MASK 0xff 1710 + #define AUDDEC_DSN_ESP_MASK_SFT (0xff << 8) 1711 + 1712 + /* MT6358_AUDDEC_DSN_FPI */ 1713 + #define AUDDEC_DSN_FPI_SFT 0 1714 + #define AUDDEC_DSN_FPI_MASK 0xff 1715 + #define AUDDEC_DSN_FPI_MASK_SFT (0xff << 0) 1716 + 1717 + /* MT6358_AUDDEC_ANA_CON0 */ 1718 + #define RG_AUDDACLPWRUP_VAUDP15_SFT 0 1719 + #define RG_AUDDACLPWRUP_VAUDP15_MASK 0x1 1720 + #define RG_AUDDACLPWRUP_VAUDP15_MASK_SFT (0x1 << 0) 1721 + #define RG_AUDDACRPWRUP_VAUDP15_SFT 1 1722 + #define RG_AUDDACRPWRUP_VAUDP15_MASK 0x1 1723 + #define RG_AUDDACRPWRUP_VAUDP15_MASK_SFT (0x1 << 1) 1724 + #define RG_AUD_DAC_PWR_UP_VA28_SFT 2 1725 + #define RG_AUD_DAC_PWR_UP_VA28_MASK 0x1 1726 + #define RG_AUD_DAC_PWR_UP_VA28_MASK_SFT (0x1 << 2) 1727 + #define RG_AUD_DAC_PWL_UP_VA28_SFT 3 1728 + #define RG_AUD_DAC_PWL_UP_VA28_MASK 0x1 1729 + #define RG_AUD_DAC_PWL_UP_VA28_MASK_SFT (0x1 << 3) 1730 + #define RG_AUDHPLPWRUP_VAUDP15_SFT 4 1731 + #define RG_AUDHPLPWRUP_VAUDP15_MASK 0x1 1732 + #define RG_AUDHPLPWRUP_VAUDP15_MASK_SFT (0x1 << 4) 1733 + #define RG_AUDHPRPWRUP_VAUDP15_SFT 5 1734 + #define RG_AUDHPRPWRUP_VAUDP15_MASK 0x1 1735 + #define RG_AUDHPRPWRUP_VAUDP15_MASK_SFT (0x1 << 5) 1736 + #define RG_AUDHPLPWRUP_IBIAS_VAUDP15_SFT 6 1737 + #define RG_AUDHPLPWRUP_IBIAS_VAUDP15_MASK 0x1 1738 + #define RG_AUDHPLPWRUP_IBIAS_VAUDP15_MASK_SFT (0x1 << 6) 1739 + #define RG_AUDHPRPWRUP_IBIAS_VAUDP15_SFT 7 1740 + #define RG_AUDHPRPWRUP_IBIAS_VAUDP15_MASK 0x1 1741 + #define RG_AUDHPRPWRUP_IBIAS_VAUDP15_MASK_SFT (0x1 << 7) 1742 + #define RG_AUDHPLMUXINPUTSEL_VAUDP15_SFT 8 1743 + #define RG_AUDHPLMUXINPUTSEL_VAUDP15_MASK 0x3 1744 + #define RG_AUDHPLMUXINPUTSEL_VAUDP15_MASK_SFT (0x3 << 8) 1745 + #define RG_AUDHPRMUXINPUTSEL_VAUDP15_SFT 10 1746 + #define RG_AUDHPRMUXINPUTSEL_VAUDP15_MASK 0x3 1747 + #define RG_AUDHPRMUXINPUTSEL_VAUDP15_MASK_SFT (0x3 << 10) 1748 + #define RG_AUDHPLSCDISABLE_VAUDP15_SFT 12 1749 + #define RG_AUDHPLSCDISABLE_VAUDP15_MASK 0x1 1750 + #define RG_AUDHPLSCDISABLE_VAUDP15_MASK_SFT (0x1 << 12) 1751 + #define RG_AUDHPRSCDISABLE_VAUDP15_SFT 13 1752 + #define RG_AUDHPRSCDISABLE_VAUDP15_MASK 0x1 1753 + #define RG_AUDHPRSCDISABLE_VAUDP15_MASK_SFT (0x1 << 13) 1754 + #define RG_AUDHPLBSCCURRENT_VAUDP15_SFT 14 1755 + #define RG_AUDHPLBSCCURRENT_VAUDP15_MASK 0x1 1756 + #define RG_AUDHPLBSCCURRENT_VAUDP15_MASK_SFT (0x1 << 14) 1757 + #define RG_AUDHPRBSCCURRENT_VAUDP15_SFT 15 1758 + #define RG_AUDHPRBSCCURRENT_VAUDP15_MASK 0x1 1759 + #define RG_AUDHPRBSCCURRENT_VAUDP15_MASK_SFT (0x1 << 15) 1760 + 1761 + /* MT6358_AUDDEC_ANA_CON1 */ 1762 + #define RG_AUDHPLOUTPWRUP_VAUDP15_SFT 0 1763 + #define RG_AUDHPLOUTPWRUP_VAUDP15_MASK 0x1 1764 + #define RG_AUDHPLOUTPWRUP_VAUDP15_MASK_SFT (0x1 << 0) 1765 + #define RG_AUDHPROUTPWRUP_VAUDP15_SFT 1 1766 + #define RG_AUDHPROUTPWRUP_VAUDP15_MASK 0x1 1767 + #define RG_AUDHPROUTPWRUP_VAUDP15_MASK_SFT (0x1 << 1) 1768 + #define RG_AUDHPLOUTAUXPWRUP_VAUDP15_SFT 2 1769 + #define RG_AUDHPLOUTAUXPWRUP_VAUDP15_MASK 0x1 1770 + #define RG_AUDHPLOUTAUXPWRUP_VAUDP15_MASK_SFT (0x1 << 2) 1771 + #define RG_AUDHPROUTAUXPWRUP_VAUDP15_SFT 3 1772 + #define RG_AUDHPROUTAUXPWRUP_VAUDP15_MASK 0x1 1773 + #define RG_AUDHPROUTAUXPWRUP_VAUDP15_MASK_SFT (0x1 << 3) 1774 + #define RG_HPLAUXFBRSW_EN_VAUDP15_SFT 4 1775 + #define RG_HPLAUXFBRSW_EN_VAUDP15_MASK 0x1 1776 + #define RG_HPLAUXFBRSW_EN_VAUDP15_MASK_SFT (0x1 << 4) 1777 + #define RG_HPRAUXFBRSW_EN_VAUDP15_SFT 5 1778 + #define RG_HPRAUXFBRSW_EN_VAUDP15_MASK 0x1 1779 + #define RG_HPRAUXFBRSW_EN_VAUDP15_MASK_SFT (0x1 << 5) 1780 + #define RG_HPLSHORT2HPLAUX_EN_VAUDP15_SFT 6 1781 + #define RG_HPLSHORT2HPLAUX_EN_VAUDP15_MASK 0x1 1782 + #define RG_HPLSHORT2HPLAUX_EN_VAUDP15_MASK_SFT (0x1 << 6) 1783 + #define RG_HPRSHORT2HPRAUX_EN_VAUDP15_SFT 7 1784 + #define RG_HPRSHORT2HPRAUX_EN_VAUDP15_MASK 0x1 1785 + #define RG_HPRSHORT2HPRAUX_EN_VAUDP15_MASK_SFT (0x1 << 7) 1786 + #define RG_HPLOUTSTGCTRL_VAUDP15_SFT 8 1787 + #define RG_HPLOUTSTGCTRL_VAUDP15_MASK 0x7 1788 + #define RG_HPLOUTSTGCTRL_VAUDP15_MASK_SFT (0x7 << 8) 1789 + #define RG_HPROUTSTGCTRL_VAUDP15_SFT 11 1790 + #define RG_HPROUTSTGCTRL_VAUDP15_MASK 0x7 1791 + #define RG_HPROUTSTGCTRL_VAUDP15_MASK_SFT (0x7 << 11) 1792 + 1793 + /* MT6358_AUDDEC_ANA_CON2 */ 1794 + #define RG_HPLOUTPUTSTBENH_VAUDP15_SFT 0 1795 + #define RG_HPLOUTPUTSTBENH_VAUDP15_MASK 0x7 1796 + #define RG_HPLOUTPUTSTBENH_VAUDP15_MASK_SFT (0x7 << 0) 1797 + #define RG_HPROUTPUTSTBENH_VAUDP15_SFT 4 1798 + #define RG_HPROUTPUTSTBENH_VAUDP15_MASK 0x7 1799 + #define RG_HPROUTPUTSTBENH_VAUDP15_MASK_SFT (0x7 << 4) 1800 + #define RG_AUDHPSTARTUP_VAUDP15_SFT 13 1801 + #define RG_AUDHPSTARTUP_VAUDP15_MASK 0x1 1802 + #define RG_AUDHPSTARTUP_VAUDP15_MASK_SFT (0x1 << 13) 1803 + #define RG_AUDREFN_DERES_EN_VAUDP15_SFT 14 1804 + #define RG_AUDREFN_DERES_EN_VAUDP15_MASK 0x1 1805 + #define RG_AUDREFN_DERES_EN_VAUDP15_MASK_SFT (0x1 << 14) 1806 + #define RG_HPPSHORT2VCM_VAUDP15_SFT 15 1807 + #define RG_HPPSHORT2VCM_VAUDP15_MASK 0x1 1808 + #define RG_HPPSHORT2VCM_VAUDP15_MASK_SFT (0x1 << 15) 1809 + 1810 + /* MT6358_AUDDEC_ANA_CON3 */ 1811 + #define RG_HPINPUTSTBENH_VAUDP15_SFT 13 1812 + #define RG_HPINPUTSTBENH_VAUDP15_MASK 0x1 1813 + #define RG_HPINPUTSTBENH_VAUDP15_MASK_SFT (0x1 << 13) 1814 + #define RG_HPINPUTRESET0_VAUDP15_SFT 14 1815 + #define RG_HPINPUTRESET0_VAUDP15_MASK 0x1 1816 + #define RG_HPINPUTRESET0_VAUDP15_MASK_SFT (0x1 << 14) 1817 + #define RG_HPOUTPUTRESET0_VAUDP15_SFT 15 1818 + #define RG_HPOUTPUTRESET0_VAUDP15_MASK 0x1 1819 + #define RG_HPOUTPUTRESET0_VAUDP15_MASK_SFT (0x1 << 15) 1820 + 1821 + /* MT6358_AUDDEC_ANA_CON4 */ 1822 + #define RG_ABIDEC_RSVD0_VAUDP28_SFT 0 1823 + #define RG_ABIDEC_RSVD0_VAUDP28_MASK 0xff 1824 + #define RG_ABIDEC_RSVD0_VAUDP28_MASK_SFT (0xff << 0) 1825 + 1826 + /* MT6358_AUDDEC_ANA_CON5 */ 1827 + #define RG_AUDHPDECMGAINADJ_VAUDP15_SFT 0 1828 + #define RG_AUDHPDECMGAINADJ_VAUDP15_MASK 0x7 1829 + #define RG_AUDHPDECMGAINADJ_VAUDP15_MASK_SFT (0x7 << 0) 1830 + #define RG_AUDHPDEDMGAINADJ_VAUDP15_SFT 4 1831 + #define RG_AUDHPDEDMGAINADJ_VAUDP15_MASK 0x7 1832 + #define RG_AUDHPDEDMGAINADJ_VAUDP15_MASK_SFT (0x7 << 4) 1833 + 1834 + /* MT6358_AUDDEC_ANA_CON6 */ 1835 + #define RG_AUDHSPWRUP_VAUDP15_SFT 0 1836 + #define RG_AUDHSPWRUP_VAUDP15_MASK 0x1 1837 + #define RG_AUDHSPWRUP_VAUDP15_MASK_SFT (0x1 << 0) 1838 + #define RG_AUDHSPWRUP_IBIAS_VAUDP15_SFT 1 1839 + #define RG_AUDHSPWRUP_IBIAS_VAUDP15_MASK 0x1 1840 + #define RG_AUDHSPWRUP_IBIAS_VAUDP15_MASK_SFT (0x1 << 1) 1841 + #define RG_AUDHSMUXINPUTSEL_VAUDP15_SFT 2 1842 + #define RG_AUDHSMUXINPUTSEL_VAUDP15_MASK 0x3 1843 + #define RG_AUDHSMUXINPUTSEL_VAUDP15_MASK_SFT (0x3 << 2) 1844 + #define RG_AUDHSSCDISABLE_VAUDP15_SFT 4 1845 + #define RG_AUDHSSCDISABLE_VAUDP15_MASK 0x1 1846 + #define RG_AUDHSSCDISABLE_VAUDP15_MASK_SFT (0x1 << 4) 1847 + #define RG_AUDHSBSCCURRENT_VAUDP15_SFT 5 1848 + #define RG_AUDHSBSCCURRENT_VAUDP15_MASK 0x1 1849 + #define RG_AUDHSBSCCURRENT_VAUDP15_MASK_SFT (0x1 << 5) 1850 + #define RG_AUDHSSTARTUP_VAUDP15_SFT 6 1851 + #define RG_AUDHSSTARTUP_VAUDP15_MASK 0x1 1852 + #define RG_AUDHSSTARTUP_VAUDP15_MASK_SFT (0x1 << 6) 1853 + #define RG_HSOUTPUTSTBENH_VAUDP15_SFT 7 1854 + #define RG_HSOUTPUTSTBENH_VAUDP15_MASK 0x1 1855 + #define RG_HSOUTPUTSTBENH_VAUDP15_MASK_SFT (0x1 << 7) 1856 + #define RG_HSINPUTSTBENH_VAUDP15_SFT 8 1857 + #define RG_HSINPUTSTBENH_VAUDP15_MASK 0x1 1858 + #define RG_HSINPUTSTBENH_VAUDP15_MASK_SFT (0x1 << 8) 1859 + #define RG_HSINPUTRESET0_VAUDP15_SFT 9 1860 + #define RG_HSINPUTRESET0_VAUDP15_MASK 0x1 1861 + #define RG_HSINPUTRESET0_VAUDP15_MASK_SFT (0x1 << 9) 1862 + #define RG_HSOUTPUTRESET0_VAUDP15_SFT 10 1863 + #define RG_HSOUTPUTRESET0_VAUDP15_MASK 0x1 1864 + #define RG_HSOUTPUTRESET0_VAUDP15_MASK_SFT (0x1 << 10) 1865 + #define RG_HSOUT_SHORTVCM_VAUDP15_SFT 11 1866 + #define RG_HSOUT_SHORTVCM_VAUDP15_MASK 0x1 1867 + #define RG_HSOUT_SHORTVCM_VAUDP15_MASK_SFT (0x1 << 11) 1868 + 1869 + /* MT6358_AUDDEC_ANA_CON7 */ 1870 + #define RG_AUDLOLPWRUP_VAUDP15_SFT 0 1871 + #define RG_AUDLOLPWRUP_VAUDP15_MASK 0x1 1872 + #define RG_AUDLOLPWRUP_VAUDP15_MASK_SFT (0x1 << 0) 1873 + #define RG_AUDLOLPWRUP_IBIAS_VAUDP15_SFT 1 1874 + #define RG_AUDLOLPWRUP_IBIAS_VAUDP15_MASK 0x1 1875 + #define RG_AUDLOLPWRUP_IBIAS_VAUDP15_MASK_SFT (0x1 << 1) 1876 + #define RG_AUDLOLMUXINPUTSEL_VAUDP15_SFT 2 1877 + #define RG_AUDLOLMUXINPUTSEL_VAUDP15_MASK 0x3 1878 + #define RG_AUDLOLMUXINPUTSEL_VAUDP15_MASK_SFT (0x3 << 2) 1879 + #define RG_AUDLOLSCDISABLE_VAUDP15_SFT 4 1880 + #define RG_AUDLOLSCDISABLE_VAUDP15_MASK 0x1 1881 + #define RG_AUDLOLSCDISABLE_VAUDP15_MASK_SFT (0x1 << 4) 1882 + #define RG_AUDLOLBSCCURRENT_VAUDP15_SFT 5 1883 + #define RG_AUDLOLBSCCURRENT_VAUDP15_MASK 0x1 1884 + #define RG_AUDLOLBSCCURRENT_VAUDP15_MASK_SFT (0x1 << 5) 1885 + #define RG_AUDLOSTARTUP_VAUDP15_SFT 6 1886 + #define RG_AUDLOSTARTUP_VAUDP15_MASK 0x1 1887 + #define RG_AUDLOSTARTUP_VAUDP15_MASK_SFT (0x1 << 6) 1888 + #define RG_LOINPUTSTBENH_VAUDP15_SFT 7 1889 + #define RG_LOINPUTSTBENH_VAUDP15_MASK 0x1 1890 + #define RG_LOINPUTSTBENH_VAUDP15_MASK_SFT (0x1 << 7) 1891 + #define RG_LOOUTPUTSTBENH_VAUDP15_SFT 8 1892 + #define RG_LOOUTPUTSTBENH_VAUDP15_MASK 0x1 1893 + #define RG_LOOUTPUTSTBENH_VAUDP15_MASK_SFT (0x1 << 8) 1894 + #define RG_LOINPUTRESET0_VAUDP15_SFT 9 1895 + #define RG_LOINPUTRESET0_VAUDP15_MASK 0x1 1896 + #define RG_LOINPUTRESET0_VAUDP15_MASK_SFT (0x1 << 9) 1897 + #define RG_LOOUTPUTRESET0_VAUDP15_SFT 10 1898 + #define RG_LOOUTPUTRESET0_VAUDP15_MASK 0x1 1899 + #define RG_LOOUTPUTRESET0_VAUDP15_MASK_SFT (0x1 << 10) 1900 + #define RG_LOOUT_SHORTVCM_VAUDP15_SFT 11 1901 + #define RG_LOOUT_SHORTVCM_VAUDP15_MASK 0x1 1902 + #define RG_LOOUT_SHORTVCM_VAUDP15_MASK_SFT (0x1 << 11) 1903 + 1904 + /* MT6358_AUDDEC_ANA_CON8 */ 1905 + #define RG_AUDTRIMBUF_INPUTMUXSEL_VAUDP15_SFT 0 1906 + #define RG_AUDTRIMBUF_INPUTMUXSEL_VAUDP15_MASK 0xf 1907 + #define RG_AUDTRIMBUF_INPUTMUXSEL_VAUDP15_MASK_SFT (0xf << 0) 1908 + #define RG_AUDTRIMBUF_GAINSEL_VAUDP15_SFT 4 1909 + #define RG_AUDTRIMBUF_GAINSEL_VAUDP15_MASK 0x3 1910 + #define RG_AUDTRIMBUF_GAINSEL_VAUDP15_MASK_SFT (0x3 << 4) 1911 + #define RG_AUDTRIMBUF_EN_VAUDP15_SFT 6 1912 + #define RG_AUDTRIMBUF_EN_VAUDP15_MASK 0x1 1913 + #define RG_AUDTRIMBUF_EN_VAUDP15_MASK_SFT (0x1 << 6) 1914 + #define RG_AUDHPSPKDET_INPUTMUXSEL_VAUDP15_SFT 8 1915 + #define RG_AUDHPSPKDET_INPUTMUXSEL_VAUDP15_MASK 0x3 1916 + #define RG_AUDHPSPKDET_INPUTMUXSEL_VAUDP15_MASK_SFT (0x3 << 8) 1917 + #define RG_AUDHPSPKDET_OUTPUTMUXSEL_VAUDP15_SFT 10 1918 + #define RG_AUDHPSPKDET_OUTPUTMUXSEL_VAUDP15_MASK 0x3 1919 + #define RG_AUDHPSPKDET_OUTPUTMUXSEL_VAUDP15_MASK_SFT (0x3 << 10) 1920 + #define RG_AUDHPSPKDET_EN_VAUDP15_SFT 12 1921 + #define RG_AUDHPSPKDET_EN_VAUDP15_MASK 0x1 1922 + #define RG_AUDHPSPKDET_EN_VAUDP15_MASK_SFT (0x1 << 12) 1923 + 1924 + /* MT6358_AUDDEC_ANA_CON9 */ 1925 + #define RG_ABIDEC_RSVD0_VA28_SFT 0 1926 + #define RG_ABIDEC_RSVD0_VA28_MASK 0xff 1927 + #define RG_ABIDEC_RSVD0_VA28_MASK_SFT (0xff << 0) 1928 + #define RG_ABIDEC_RSVD0_VAUDP15_SFT 8 1929 + #define RG_ABIDEC_RSVD0_VAUDP15_MASK 0xff 1930 + #define RG_ABIDEC_RSVD0_VAUDP15_MASK_SFT (0xff << 8) 1931 + 1932 + /* MT6358_AUDDEC_ANA_CON10 */ 1933 + #define RG_ABIDEC_RSVD1_VAUDP15_SFT 0 1934 + #define RG_ABIDEC_RSVD1_VAUDP15_MASK 0xff 1935 + #define RG_ABIDEC_RSVD1_VAUDP15_MASK_SFT (0xff << 0) 1936 + #define RG_ABIDEC_RSVD2_VAUDP15_SFT 8 1937 + #define RG_ABIDEC_RSVD2_VAUDP15_MASK 0xff 1938 + #define RG_ABIDEC_RSVD2_VAUDP15_MASK_SFT (0xff << 8) 1939 + 1940 + /* MT6358_AUDDEC_ANA_CON11 */ 1941 + #define RG_AUDZCDMUXSEL_VAUDP15_SFT 0 1942 + #define RG_AUDZCDMUXSEL_VAUDP15_MASK 0x7 1943 + #define RG_AUDZCDMUXSEL_VAUDP15_MASK_SFT (0x7 << 0) 1944 + #define RG_AUDZCDCLKSEL_VAUDP15_SFT 3 1945 + #define RG_AUDZCDCLKSEL_VAUDP15_MASK 0x1 1946 + #define RG_AUDZCDCLKSEL_VAUDP15_MASK_SFT (0x1 << 3) 1947 + #define RG_AUDBIASADJ_0_VAUDP15_SFT 7 1948 + #define RG_AUDBIASADJ_0_VAUDP15_MASK 0x1ff 1949 + #define RG_AUDBIASADJ_0_VAUDP15_MASK_SFT (0x1ff << 7) 1950 + 1951 + /* MT6358_AUDDEC_ANA_CON12 */ 1952 + #define RG_AUDBIASADJ_1_VAUDP15_SFT 0 1953 + #define RG_AUDBIASADJ_1_VAUDP15_MASK 0xff 1954 + #define RG_AUDBIASADJ_1_VAUDP15_MASK_SFT (0xff << 0) 1955 + #define RG_AUDIBIASPWRDN_VAUDP15_SFT 8 1956 + #define RG_AUDIBIASPWRDN_VAUDP15_MASK 0x1 1957 + #define RG_AUDIBIASPWRDN_VAUDP15_MASK_SFT (0x1 << 8) 1958 + 1959 + /* MT6358_AUDDEC_ANA_CON13 */ 1960 + #define RG_RSTB_DECODER_VA28_SFT 0 1961 + #define RG_RSTB_DECODER_VA28_MASK 0x1 1962 + #define RG_RSTB_DECODER_VA28_MASK_SFT (0x1 << 0) 1963 + #define RG_SEL_DECODER_96K_VA28_SFT 1 1964 + #define RG_SEL_DECODER_96K_VA28_MASK 0x1 1965 + #define RG_SEL_DECODER_96K_VA28_MASK_SFT (0x1 << 1) 1966 + #define RG_SEL_DELAY_VCORE_SFT 2 1967 + #define RG_SEL_DELAY_VCORE_MASK 0x1 1968 + #define RG_SEL_DELAY_VCORE_MASK_SFT (0x1 << 2) 1969 + #define RG_AUDGLB_PWRDN_VA28_SFT 4 1970 + #define RG_AUDGLB_PWRDN_VA28_MASK 0x1 1971 + #define RG_AUDGLB_PWRDN_VA28_MASK_SFT (0x1 << 4) 1972 + #define RG_RSTB_ENCODER_VA28_SFT 5 1973 + #define RG_RSTB_ENCODER_VA28_MASK 0x1 1974 + #define RG_RSTB_ENCODER_VA28_MASK_SFT (0x1 << 5) 1975 + #define RG_SEL_ENCODER_96K_VA28_SFT 6 1976 + #define RG_SEL_ENCODER_96K_VA28_MASK 0x1 1977 + #define RG_SEL_ENCODER_96K_VA28_MASK_SFT (0x1 << 6) 1978 + 1979 + /* MT6358_AUDDEC_ANA_CON14 */ 1980 + #define RG_HCLDO_EN_VA18_SFT 0 1981 + #define RG_HCLDO_EN_VA18_MASK 0x1 1982 + #define RG_HCLDO_EN_VA18_MASK_SFT (0x1 << 0) 1983 + #define RG_HCLDO_PDDIS_EN_VA18_SFT 1 1984 + #define RG_HCLDO_PDDIS_EN_VA18_MASK 0x1 1985 + #define RG_HCLDO_PDDIS_EN_VA18_MASK_SFT (0x1 << 1) 1986 + #define RG_HCLDO_REMOTE_SENSE_VA18_SFT 2 1987 + #define RG_HCLDO_REMOTE_SENSE_VA18_MASK 0x1 1988 + #define RG_HCLDO_REMOTE_SENSE_VA18_MASK_SFT (0x1 << 2) 1989 + #define RG_LCLDO_EN_VA18_SFT 4 1990 + #define RG_LCLDO_EN_VA18_MASK 0x1 1991 + #define RG_LCLDO_EN_VA18_MASK_SFT (0x1 << 4) 1992 + #define RG_LCLDO_PDDIS_EN_VA18_SFT 5 1993 + #define RG_LCLDO_PDDIS_EN_VA18_MASK 0x1 1994 + #define RG_LCLDO_PDDIS_EN_VA18_MASK_SFT (0x1 << 5) 1995 + #define RG_LCLDO_REMOTE_SENSE_VA18_SFT 6 1996 + #define RG_LCLDO_REMOTE_SENSE_VA18_MASK 0x1 1997 + #define RG_LCLDO_REMOTE_SENSE_VA18_MASK_SFT (0x1 << 6) 1998 + #define RG_LCLDO_ENC_EN_VA28_SFT 8 1999 + #define RG_LCLDO_ENC_EN_VA28_MASK 0x1 2000 + #define RG_LCLDO_ENC_EN_VA28_MASK_SFT (0x1 << 8) 2001 + #define RG_LCLDO_ENC_PDDIS_EN_VA28_SFT 9 2002 + #define RG_LCLDO_ENC_PDDIS_EN_VA28_MASK 0x1 2003 + #define RG_LCLDO_ENC_PDDIS_EN_VA28_MASK_SFT (0x1 << 9) 2004 + #define RG_LCLDO_ENC_REMOTE_SENSE_VA28_SFT 10 2005 + #define RG_LCLDO_ENC_REMOTE_SENSE_VA28_MASK 0x1 2006 + #define RG_LCLDO_ENC_REMOTE_SENSE_VA28_MASK_SFT (0x1 << 10) 2007 + #define RG_VA33REFGEN_EN_VA18_SFT 12 2008 + #define RG_VA33REFGEN_EN_VA18_MASK 0x1 2009 + #define RG_VA33REFGEN_EN_VA18_MASK_SFT (0x1 << 12) 2010 + #define RG_VA28REFGEN_EN_VA28_SFT 13 2011 + #define RG_VA28REFGEN_EN_VA28_MASK 0x1 2012 + #define RG_VA28REFGEN_EN_VA28_MASK_SFT (0x1 << 13) 2013 + #define RG_HCLDO_VOSEL_VA18_SFT 14 2014 + #define RG_HCLDO_VOSEL_VA18_MASK 0x1 2015 + #define RG_HCLDO_VOSEL_VA18_MASK_SFT (0x1 << 14) 2016 + #define RG_LCLDO_VOSEL_VA18_SFT 15 2017 + #define RG_LCLDO_VOSEL_VA18_MASK 0x1 2018 + #define RG_LCLDO_VOSEL_VA18_MASK_SFT (0x1 << 15) 2019 + 2020 + /* MT6358_AUDDEC_ANA_CON15 */ 2021 + #define RG_NVREG_EN_VAUDP15_SFT 0 2022 + #define RG_NVREG_EN_VAUDP15_MASK 0x1 2023 + #define RG_NVREG_EN_VAUDP15_MASK_SFT (0x1 << 0) 2024 + #define RG_NVREG_PULL0V_VAUDP15_SFT 1 2025 + #define RG_NVREG_PULL0V_VAUDP15_MASK 0x1 2026 + #define RG_NVREG_PULL0V_VAUDP15_MASK_SFT (0x1 << 1) 2027 + #define RG_AUDPMU_RSD0_VAUDP15_SFT 4 2028 + #define RG_AUDPMU_RSD0_VAUDP15_MASK 0xf 2029 + #define RG_AUDPMU_RSD0_VAUDP15_MASK_SFT (0xf << 4) 2030 + #define RG_AUDPMU_RSD0_VA18_SFT 8 2031 + #define RG_AUDPMU_RSD0_VA18_MASK 0xf 2032 + #define RG_AUDPMU_RSD0_VA18_MASK_SFT (0xf << 8) 2033 + #define RG_AUDPMU_RSD0_VA28_SFT 12 2034 + #define RG_AUDPMU_RSD0_VA28_MASK 0xf 2035 + #define RG_AUDPMU_RSD0_VA28_MASK_SFT (0xf << 12) 2036 + 2037 + /* MT6358_ZCD_CON0 */ 2038 + #define RG_AUDZCDENABLE_SFT 0 2039 + #define RG_AUDZCDENABLE_MASK 0x1 2040 + #define RG_AUDZCDENABLE_MASK_SFT (0x1 << 0) 2041 + #define RG_AUDZCDGAINSTEPTIME_SFT 1 2042 + #define RG_AUDZCDGAINSTEPTIME_MASK 0x7 2043 + #define RG_AUDZCDGAINSTEPTIME_MASK_SFT (0x7 << 1) 2044 + #define RG_AUDZCDGAINSTEPSIZE_SFT 4 2045 + #define RG_AUDZCDGAINSTEPSIZE_MASK 0x3 2046 + #define RG_AUDZCDGAINSTEPSIZE_MASK_SFT (0x3 << 4) 2047 + #define RG_AUDZCDTIMEOUTMODESEL_SFT 6 2048 + #define RG_AUDZCDTIMEOUTMODESEL_MASK 0x1 2049 + #define RG_AUDZCDTIMEOUTMODESEL_MASK_SFT (0x1 << 6) 2050 + 2051 + /* MT6358_ZCD_CON1 */ 2052 + #define RG_AUDLOLGAIN_SFT 0 2053 + #define RG_AUDLOLGAIN_MASK 0x1f 2054 + #define RG_AUDLOLGAIN_MASK_SFT (0x1f << 0) 2055 + #define RG_AUDLORGAIN_SFT 7 2056 + #define RG_AUDLORGAIN_MASK 0x1f 2057 + #define RG_AUDLORGAIN_MASK_SFT (0x1f << 7) 2058 + 2059 + /* MT6358_ZCD_CON2 */ 2060 + #define RG_AUDHPLGAIN_SFT 0 2061 + #define RG_AUDHPLGAIN_MASK 0x1f 2062 + #define RG_AUDHPLGAIN_MASK_SFT (0x1f << 0) 2063 + #define RG_AUDHPRGAIN_SFT 7 2064 + #define RG_AUDHPRGAIN_MASK 0x1f 2065 + #define RG_AUDHPRGAIN_MASK_SFT (0x1f << 7) 2066 + 2067 + /* MT6358_ZCD_CON3 */ 2068 + #define RG_AUDHSGAIN_SFT 0 2069 + #define RG_AUDHSGAIN_MASK 0x1f 2070 + #define RG_AUDHSGAIN_MASK_SFT (0x1f << 0) 2071 + 2072 + /* MT6358_ZCD_CON4 */ 2073 + #define RG_AUDIVLGAIN_SFT 0 2074 + #define RG_AUDIVLGAIN_MASK 0x7 2075 + #define RG_AUDIVLGAIN_MASK_SFT (0x7 << 0) 2076 + #define RG_AUDIVRGAIN_SFT 8 2077 + #define RG_AUDIVRGAIN_MASK 0x7 2078 + #define RG_AUDIVRGAIN_MASK_SFT (0x7 << 8) 2079 + 2080 + /* MT6358_ZCD_CON5 */ 2081 + #define RG_AUDINTGAIN1_SFT 0 2082 + #define RG_AUDINTGAIN1_MASK 0x3f 2083 + #define RG_AUDINTGAIN1_MASK_SFT (0x3f << 0) 2084 + #define RG_AUDINTGAIN2_SFT 8 2085 + #define RG_AUDINTGAIN2_MASK 0x3f 2086 + #define RG_AUDINTGAIN2_MASK_SFT (0x3f << 8) 2087 + 2088 + /* audio register */ 2089 + #define MT6358_DRV_CON3 0x3c 2090 + #define MT6358_GPIO_DIR0 0x88 2091 + 2092 + #define MT6358_GPIO_MODE2 0xd8 /* mosi */ 2093 + #define MT6358_GPIO_MODE2_SET 0xda 2094 + #define MT6358_GPIO_MODE2_CLR 0xdc 2095 + 2096 + #define MT6358_GPIO_MODE3 0xde /* miso */ 2097 + #define MT6358_GPIO_MODE3_SET 0xe0 2098 + #define MT6358_GPIO_MODE3_CLR 0xe2 2099 + 2100 + #define MT6358_TOP_CKPDN_CON0 0x10c 2101 + #define MT6358_TOP_CKPDN_CON0_SET 0x10e 2102 + #define MT6358_TOP_CKPDN_CON0_CLR 0x110 2103 + 2104 + #define MT6358_TOP_CKHWEN_CON0 0x12a 2105 + #define MT6358_TOP_CKHWEN_CON0_SET 0x12c 2106 + #define MT6358_TOP_CKHWEN_CON0_CLR 0x12e 2107 + 2108 + #define MT6358_OTP_CON0 0x38a 2109 + #define MT6358_OTP_CON8 0x39a 2110 + #define MT6358_OTP_CON11 0x3a0 2111 + #define MT6358_OTP_CON12 0x3a2 2112 + #define MT6358_OTP_CON13 0x3a4 2113 + 2114 + #define MT6358_DCXO_CW13 0x7aa 2115 + #define MT6358_DCXO_CW14 0x7ac 2116 + 2117 + #define MT6358_AUXADC_CON10 0x11a0 2118 + 2119 + /* audio register */ 2120 + #define MT6358_AUD_TOP_ID 0x2200 2121 + #define MT6358_AUD_TOP_REV0 0x2202 2122 + #define MT6358_AUD_TOP_DBI 0x2204 2123 + #define MT6358_AUD_TOP_DXI 0x2206 2124 + #define MT6358_AUD_TOP_CKPDN_TPM0 0x2208 2125 + #define MT6358_AUD_TOP_CKPDN_TPM1 0x220a 2126 + #define MT6358_AUD_TOP_CKPDN_CON0 0x220c 2127 + #define MT6358_AUD_TOP_CKPDN_CON0_SET 0x220e 2128 + #define MT6358_AUD_TOP_CKPDN_CON0_CLR 0x2210 2129 + #define MT6358_AUD_TOP_CKSEL_CON0 0x2212 2130 + #define MT6358_AUD_TOP_CKSEL_CON0_SET 0x2214 2131 + #define MT6358_AUD_TOP_CKSEL_CON0_CLR 0x2216 2132 + #define MT6358_AUD_TOP_CKTST_CON0 0x2218 2133 + #define MT6358_AUD_TOP_CLK_HWEN_CON0 0x221a 2134 + #define MT6358_AUD_TOP_CLK_HWEN_CON0_SET 0x221c 2135 + #define MT6358_AUD_TOP_CLK_HWEN_CON0_CLR 0x221e 2136 + #define MT6358_AUD_TOP_RST_CON0 0x2220 2137 + #define MT6358_AUD_TOP_RST_CON0_SET 0x2222 2138 + #define MT6358_AUD_TOP_RST_CON0_CLR 0x2224 2139 + #define MT6358_AUD_TOP_RST_BANK_CON0 0x2226 2140 + #define MT6358_AUD_TOP_INT_CON0 0x2228 2141 + #define MT6358_AUD_TOP_INT_CON0_SET 0x222a 2142 + #define MT6358_AUD_TOP_INT_CON0_CLR 0x222c 2143 + #define MT6358_AUD_TOP_INT_MASK_CON0 0x222e 2144 + #define MT6358_AUD_TOP_INT_MASK_CON0_SET 0x2230 2145 + #define MT6358_AUD_TOP_INT_MASK_CON0_CLR 0x2232 2146 + #define MT6358_AUD_TOP_INT_STATUS0 0x2234 2147 + #define MT6358_AUD_TOP_INT_RAW_STATUS0 0x2236 2148 + #define MT6358_AUD_TOP_INT_MISC_CON0 0x2238 2149 + #define MT6358_AUDNCP_CLKDIV_CON0 0x223a 2150 + #define MT6358_AUDNCP_CLKDIV_CON1 0x223c 2151 + #define MT6358_AUDNCP_CLKDIV_CON2 0x223e 2152 + #define MT6358_AUDNCP_CLKDIV_CON3 0x2240 2153 + #define MT6358_AUDNCP_CLKDIV_CON4 0x2242 2154 + #define MT6358_AUD_TOP_MON_CON0 0x2244 2155 + #define MT6358_AUDIO_DIG_DSN_ID 0x2280 2156 + #define MT6358_AUDIO_DIG_DSN_REV0 0x2282 2157 + #define MT6358_AUDIO_DIG_DSN_DBI 0x2284 2158 + #define MT6358_AUDIO_DIG_DSN_DXI 0x2286 2159 + #define MT6358_AFE_UL_DL_CON0 0x2288 2160 + #define MT6358_AFE_DL_SRC2_CON0_L 0x228a 2161 + #define MT6358_AFE_UL_SRC_CON0_H 0x228c 2162 + #define MT6358_AFE_UL_SRC_CON0_L 0x228e 2163 + #define MT6358_AFE_TOP_CON0 0x2290 2164 + #define MT6358_AUDIO_TOP_CON0 0x2292 2165 + #define MT6358_AFE_MON_DEBUG0 0x2294 2166 + #define MT6358_AFUNC_AUD_CON0 0x2296 2167 + #define MT6358_AFUNC_AUD_CON1 0x2298 2168 + #define MT6358_AFUNC_AUD_CON2 0x229a 2169 + #define MT6358_AFUNC_AUD_CON3 0x229c 2170 + #define MT6358_AFUNC_AUD_CON4 0x229e 2171 + #define MT6358_AFUNC_AUD_CON5 0x22a0 2172 + #define MT6358_AFUNC_AUD_CON6 0x22a2 2173 + #define MT6358_AFUNC_AUD_MON0 0x22a4 2174 + #define MT6358_AUDRC_TUNE_MON0 0x22a6 2175 + #define MT6358_AFE_ADDA_MTKAIF_FIFO_CFG0 0x22a8 2176 + #define MT6358_AFE_ADDA_MTKAIF_FIFO_LOG_MON1 0x22aa 2177 + #define MT6358_AFE_ADDA_MTKAIF_MON0 0x22ac 2178 + #define MT6358_AFE_ADDA_MTKAIF_MON1 0x22ae 2179 + #define MT6358_AFE_ADDA_MTKAIF_MON2 0x22b0 2180 + #define MT6358_AFE_ADDA_MTKAIF_MON3 0x22b2 2181 + #define MT6358_AFE_ADDA_MTKAIF_CFG0 0x22b4 2182 + #define MT6358_AFE_ADDA_MTKAIF_RX_CFG0 0x22b6 2183 + #define MT6358_AFE_ADDA_MTKAIF_RX_CFG1 0x22b8 2184 + #define MT6358_AFE_ADDA_MTKAIF_RX_CFG2 0x22ba 2185 + #define MT6358_AFE_ADDA_MTKAIF_RX_CFG3 0x22bc 2186 + #define MT6358_AFE_ADDA_MTKAIF_TX_CFG1 0x22be 2187 + #define MT6358_AFE_SGEN_CFG0 0x22c0 2188 + #define MT6358_AFE_SGEN_CFG1 0x22c2 2189 + #define MT6358_AFE_ADC_ASYNC_FIFO_CFG 0x22c4 2190 + #define MT6358_AFE_DCCLK_CFG0 0x22c6 2191 + #define MT6358_AFE_DCCLK_CFG1 0x22c8 2192 + #define MT6358_AUDIO_DIG_CFG 0x22ca 2193 + #define MT6358_AFE_AUD_PAD_TOP 0x22cc 2194 + #define MT6358_AFE_AUD_PAD_TOP_MON 0x22ce 2195 + #define MT6358_AFE_AUD_PAD_TOP_MON1 0x22d0 2196 + #define MT6358_AFE_DL_NLE_CFG 0x22d2 2197 + #define MT6358_AFE_DL_NLE_MON 0x22d4 2198 + #define MT6358_AFE_CG_EN_MON 0x22d6 2199 + #define MT6358_AUDIO_DIG_2ND_DSN_ID 0x2300 2200 + #define MT6358_AUDIO_DIG_2ND_DSN_REV0 0x2302 2201 + #define MT6358_AUDIO_DIG_2ND_DSN_DBI 0x2304 2202 + #define MT6358_AUDIO_DIG_2ND_DSN_DXI 0x2306 2203 + #define MT6358_AFE_PMIC_NEWIF_CFG3 0x2308 2204 + #define MT6358_AFE_VOW_TOP 0x230a 2205 + #define MT6358_AFE_VOW_CFG0 0x230c 2206 + #define MT6358_AFE_VOW_CFG1 0x230e 2207 + #define MT6358_AFE_VOW_CFG2 0x2310 2208 + #define MT6358_AFE_VOW_CFG3 0x2312 2209 + #define MT6358_AFE_VOW_CFG4 0x2314 2210 + #define MT6358_AFE_VOW_CFG5 0x2316 2211 + #define MT6358_AFE_VOW_CFG6 0x2318 2212 + #define MT6358_AFE_VOW_MON0 0x231a 2213 + #define MT6358_AFE_VOW_MON1 0x231c 2214 + #define MT6358_AFE_VOW_MON2 0x231e 2215 + #define MT6358_AFE_VOW_MON3 0x2320 2216 + #define MT6358_AFE_VOW_MON4 0x2322 2217 + #define MT6358_AFE_VOW_MON5 0x2324 2218 + #define MT6358_AFE_VOW_SN_INI_CFG 0x2326 2219 + #define MT6358_AFE_VOW_TGEN_CFG0 0x2328 2220 + #define MT6358_AFE_VOW_POSDIV_CFG0 0x232a 2221 + #define MT6358_AFE_VOW_HPF_CFG0 0x232c 2222 + #define MT6358_AFE_VOW_PERIODIC_CFG0 0x232e 2223 + #define MT6358_AFE_VOW_PERIODIC_CFG1 0x2330 2224 + #define MT6358_AFE_VOW_PERIODIC_CFG2 0x2332 2225 + #define MT6358_AFE_VOW_PERIODIC_CFG3 0x2334 2226 + #define MT6358_AFE_VOW_PERIODIC_CFG4 0x2336 2227 + #define MT6358_AFE_VOW_PERIODIC_CFG5 0x2338 2228 + #define MT6358_AFE_VOW_PERIODIC_CFG6 0x233a 2229 + #define MT6358_AFE_VOW_PERIODIC_CFG7 0x233c 2230 + #define MT6358_AFE_VOW_PERIODIC_CFG8 0x233e 2231 + #define MT6358_AFE_VOW_PERIODIC_CFG9 0x2340 2232 + #define MT6358_AFE_VOW_PERIODIC_CFG10 0x2342 2233 + #define MT6358_AFE_VOW_PERIODIC_CFG11 0x2344 2234 + #define MT6358_AFE_VOW_PERIODIC_CFG12 0x2346 2235 + #define MT6358_AFE_VOW_PERIODIC_CFG13 0x2348 2236 + #define MT6358_AFE_VOW_PERIODIC_CFG14 0x234a 2237 + #define MT6358_AFE_VOW_PERIODIC_CFG15 0x234c 2238 + #define MT6358_AFE_VOW_PERIODIC_CFG16 0x234e 2239 + #define MT6358_AFE_VOW_PERIODIC_CFG17 0x2350 2240 + #define MT6358_AFE_VOW_PERIODIC_CFG18 0x2352 2241 + #define MT6358_AFE_VOW_PERIODIC_CFG19 0x2354 2242 + #define MT6358_AFE_VOW_PERIODIC_CFG20 0x2356 2243 + #define MT6358_AFE_VOW_PERIODIC_CFG21 0x2358 2244 + #define MT6358_AFE_VOW_PERIODIC_CFG22 0x235a 2245 + #define MT6358_AFE_VOW_PERIODIC_CFG23 0x235c 2246 + #define MT6358_AFE_VOW_PERIODIC_MON0 0x235e 2247 + #define MT6358_AFE_VOW_PERIODIC_MON1 0x2360 2248 + #define MT6358_AUDENC_DSN_ID 0x2380 2249 + #define MT6358_AUDENC_DSN_REV0 0x2382 2250 + #define MT6358_AUDENC_DSN_DBI 0x2384 2251 + #define MT6358_AUDENC_DSN_FPI 0x2386 2252 + #define MT6358_AUDENC_ANA_CON0 0x2388 2253 + #define MT6358_AUDENC_ANA_CON1 0x238a 2254 + #define MT6358_AUDENC_ANA_CON2 0x238c 2255 + #define MT6358_AUDENC_ANA_CON3 0x238e 2256 + #define MT6358_AUDENC_ANA_CON4 0x2390 2257 + #define MT6358_AUDENC_ANA_CON5 0x2392 2258 + #define MT6358_AUDENC_ANA_CON6 0x2394 2259 + #define MT6358_AUDENC_ANA_CON7 0x2396 2260 + #define MT6358_AUDENC_ANA_CON8 0x2398 2261 + #define MT6358_AUDENC_ANA_CON9 0x239a 2262 + #define MT6358_AUDENC_ANA_CON10 0x239c 2263 + #define MT6358_AUDENC_ANA_CON11 0x239e 2264 + #define MT6358_AUDENC_ANA_CON12 0x23a0 2265 + #define MT6358_AUDDEC_DSN_ID 0x2400 2266 + #define MT6358_AUDDEC_DSN_REV0 0x2402 2267 + #define MT6358_AUDDEC_DSN_DBI 0x2404 2268 + #define MT6358_AUDDEC_DSN_FPI 0x2406 2269 + #define MT6358_AUDDEC_ANA_CON0 0x2408 2270 + #define MT6358_AUDDEC_ANA_CON1 0x240a 2271 + #define MT6358_AUDDEC_ANA_CON2 0x240c 2272 + #define MT6358_AUDDEC_ANA_CON3 0x240e 2273 + #define MT6358_AUDDEC_ANA_CON4 0x2410 2274 + #define MT6358_AUDDEC_ANA_CON5 0x2412 2275 + #define MT6358_AUDDEC_ANA_CON6 0x2414 2276 + #define MT6358_AUDDEC_ANA_CON7 0x2416 2277 + #define MT6358_AUDDEC_ANA_CON8 0x2418 2278 + #define MT6358_AUDDEC_ANA_CON9 0x241a 2279 + #define MT6358_AUDDEC_ANA_CON10 0x241c 2280 + #define MT6358_AUDDEC_ANA_CON11 0x241e 2281 + #define MT6358_AUDDEC_ANA_CON12 0x2420 2282 + #define MT6358_AUDDEC_ANA_CON13 0x2422 2283 + #define MT6358_AUDDEC_ANA_CON14 0x2424 2284 + #define MT6358_AUDDEC_ANA_CON15 0x2426 2285 + #define MT6358_AUDDEC_ELR_NUM 0x2428 2286 + #define MT6358_AUDDEC_ELR_0 0x242a 2287 + #define MT6358_AUDZCD_DSN_ID 0x2480 2288 + #define MT6358_AUDZCD_DSN_REV0 0x2482 2289 + #define MT6358_AUDZCD_DSN_DBI 0x2484 2290 + #define MT6358_AUDZCD_DSN_FPI 0x2486 2291 + #define MT6358_ZCD_CON0 0x2488 2292 + #define MT6358_ZCD_CON1 0x248a 2293 + #define MT6358_ZCD_CON2 0x248c 2294 + #define MT6358_ZCD_CON3 0x248e 2295 + #define MT6358_ZCD_CON4 0x2490 2296 + #define MT6358_ZCD_CON5 0x2492 2297 + #define MT6358_ACCDET_CON13 0x2522 2298 + 2299 + #define MT6358_MAX_REGISTER MT6358_ZCD_CON5 2300 + 2301 + enum { 2302 + MT6358_MTKAIF_PROTOCOL_1 = 0, 2303 + MT6358_MTKAIF_PROTOCOL_2, 2304 + MT6358_MTKAIF_PROTOCOL_2_CLK_P2, 2305 + }; 2306 + 2307 + /* set only during init */ 2308 + int mt6358_set_mtkaif_protocol(struct snd_soc_component *cmpnt, 2309 + int mtkaif_protocol); 2310 + int mt6358_mtkaif_calibration_enable(struct snd_soc_component *cmpnt); 2311 + int mt6358_mtkaif_calibration_disable(struct snd_soc_component *cmpnt); 2312 + int mt6358_set_mtkaif_calibration_phase(struct snd_soc_component *cmpnt, 2313 + int phase_1, int phase_2); 2314 + #endif /* __MT6358_H__ */