Linux Audio

Check our new training course

Loading...
v6.13.7
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * rt5631.c  --  RT5631 ALSA Soc Audio driver
   4 *
   5 * Copyright 2011 Realtek Microelectronics
   6 *
   7 * Author: flove <flove@realtek.com>
   8 *
   9 * Based on WM8753.c
 
 
 
 
 
  10 */
  11#include <linux/module.h>
  12#include <linux/moduleparam.h>
  13#include <linux/init.h>
  14#include <linux/delay.h>
  15#include <linux/pm.h>
  16#include <linux/i2c.h>
  17#include <linux/regmap.h>
  18#include <sound/core.h>
  19#include <sound/pcm.h>
  20#include <sound/pcm_params.h>
  21#include <sound/soc.h>
  22#include <sound/soc-dapm.h>
  23#include <sound/initval.h>
  24#include <sound/tlv.h>
  25
  26#include "rt5631.h"
  27
  28struct rt5631_priv {
  29	struct regmap *regmap;
  30	int codec_version;
  31	int master;
  32	int sysclk;
  33	int rx_rate;
  34	int bclk_rate;
  35	int dmic_used_flag;
  36};
  37
  38static const struct reg_default rt5631_reg[] = {
  39	{ RT5631_SPK_OUT_VOL, 0x8888 },
  40	{ RT5631_HP_OUT_VOL, 0x8080 },
  41	{ RT5631_MONO_AXO_1_2_VOL, 0xa080 },
  42	{ RT5631_AUX_IN_VOL, 0x0808 },
  43	{ RT5631_ADC_REC_MIXER, 0xf0f0 },
  44	{ RT5631_VDAC_DIG_VOL, 0x0010 },
  45	{ RT5631_OUTMIXER_L_CTRL, 0xffc0 },
  46	{ RT5631_OUTMIXER_R_CTRL, 0xffc0 },
  47	{ RT5631_AXO1MIXER_CTRL, 0x88c0 },
  48	{ RT5631_AXO2MIXER_CTRL, 0x88c0 },
  49	{ RT5631_DIG_MIC_CTRL, 0x3000 },
  50	{ RT5631_MONO_INPUT_VOL, 0x8808 },
  51	{ RT5631_SPK_MIXER_CTRL, 0xf8f8 },
  52	{ RT5631_SPK_MONO_OUT_CTRL, 0xfc00 },
  53	{ RT5631_SPK_MONO_HP_OUT_CTRL, 0x4440 },
  54	{ RT5631_SDP_CTRL, 0x8000 },
  55	{ RT5631_MONO_SDP_CTRL, 0x8000 },
  56	{ RT5631_STEREO_AD_DA_CLK_CTRL, 0x2010 },
  57	{ RT5631_GEN_PUR_CTRL_REG, 0x0e00 },
  58	{ RT5631_INT_ST_IRQ_CTRL_2, 0x071a },
  59	{ RT5631_MISC_CTRL, 0x2040 },
  60	{ RT5631_DEPOP_FUN_CTRL_2, 0x8000 },
  61	{ RT5631_SOFT_VOL_CTRL, 0x07e0 },
  62	{ RT5631_ALC_CTRL_1, 0x0206 },
  63	{ RT5631_ALC_CTRL_3, 0x2000 },
  64	{ RT5631_PSEUDO_SPATL_CTRL, 0x0553 },
  65};
  66
  67/*
  68 * rt5631_write_index - write index register of 2nd layer
  69 */
  70static void rt5631_write_index(struct snd_soc_component *component,
  71		unsigned int reg, unsigned int value)
  72{
  73	snd_soc_component_write(component, RT5631_INDEX_ADD, reg);
  74	snd_soc_component_write(component, RT5631_INDEX_DATA, value);
  75}
  76
  77/*
  78 * rt5631_read_index - read index register of 2nd layer
  79 */
  80static unsigned int rt5631_read_index(struct snd_soc_component *component,
  81				unsigned int reg)
  82{
  83	unsigned int value;
  84
  85	snd_soc_component_write(component, RT5631_INDEX_ADD, reg);
  86	value = snd_soc_component_read(component, RT5631_INDEX_DATA);
  87
  88	return value;
  89}
  90
  91static int rt5631_reset(struct snd_soc_component *component)
  92{
  93	return snd_soc_component_write(component, RT5631_RESET, 0);
  94}
  95
  96static bool rt5631_volatile_register(struct device *dev, unsigned int reg)
  97{
  98	switch (reg) {
  99	case RT5631_RESET:
 100	case RT5631_INT_ST_IRQ_CTRL_2:
 101	case RT5631_INDEX_ADD:
 102	case RT5631_INDEX_DATA:
 103	case RT5631_EQ_CTRL:
 104		return true;
 105	default:
 106		return false;
 107	}
 108}
 109
 110static bool rt5631_readable_register(struct device *dev, unsigned int reg)
 111{
 112	switch (reg) {
 113	case RT5631_RESET:
 114	case RT5631_SPK_OUT_VOL:
 115	case RT5631_HP_OUT_VOL:
 116	case RT5631_MONO_AXO_1_2_VOL:
 117	case RT5631_AUX_IN_VOL:
 118	case RT5631_STEREO_DAC_VOL_1:
 119	case RT5631_MIC_CTRL_1:
 120	case RT5631_STEREO_DAC_VOL_2:
 121	case RT5631_ADC_CTRL_1:
 122	case RT5631_ADC_REC_MIXER:
 123	case RT5631_ADC_CTRL_2:
 124	case RT5631_VDAC_DIG_VOL:
 125	case RT5631_OUTMIXER_L_CTRL:
 126	case RT5631_OUTMIXER_R_CTRL:
 127	case RT5631_AXO1MIXER_CTRL:
 128	case RT5631_AXO2MIXER_CTRL:
 129	case RT5631_MIC_CTRL_2:
 130	case RT5631_DIG_MIC_CTRL:
 131	case RT5631_MONO_INPUT_VOL:
 132	case RT5631_SPK_MIXER_CTRL:
 133	case RT5631_SPK_MONO_OUT_CTRL:
 134	case RT5631_SPK_MONO_HP_OUT_CTRL:
 135	case RT5631_SDP_CTRL:
 136	case RT5631_MONO_SDP_CTRL:
 137	case RT5631_STEREO_AD_DA_CLK_CTRL:
 138	case RT5631_PWR_MANAG_ADD1:
 139	case RT5631_PWR_MANAG_ADD2:
 140	case RT5631_PWR_MANAG_ADD3:
 141	case RT5631_PWR_MANAG_ADD4:
 142	case RT5631_GEN_PUR_CTRL_REG:
 143	case RT5631_GLOBAL_CLK_CTRL:
 144	case RT5631_PLL_CTRL:
 145	case RT5631_INT_ST_IRQ_CTRL_1:
 146	case RT5631_INT_ST_IRQ_CTRL_2:
 147	case RT5631_GPIO_CTRL:
 148	case RT5631_MISC_CTRL:
 149	case RT5631_DEPOP_FUN_CTRL_1:
 150	case RT5631_DEPOP_FUN_CTRL_2:
 151	case RT5631_JACK_DET_CTRL:
 152	case RT5631_SOFT_VOL_CTRL:
 153	case RT5631_ALC_CTRL_1:
 154	case RT5631_ALC_CTRL_2:
 155	case RT5631_ALC_CTRL_3:
 156	case RT5631_PSEUDO_SPATL_CTRL:
 157	case RT5631_INDEX_ADD:
 158	case RT5631_INDEX_DATA:
 159	case RT5631_EQ_CTRL:
 160	case RT5631_VENDOR_ID:
 161	case RT5631_VENDOR_ID1:
 162	case RT5631_VENDOR_ID2:
 163		return true;
 164	default:
 165		return false;
 166	}
 167}
 168
 169static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -4650, 150, 0);
 170static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -95625, 375, 0);
 171static const DECLARE_TLV_DB_SCALE(in_vol_tlv, -3450, 150, 0);
 172/* {0, +20, +24, +30, +35, +40, +44, +50, +52}dB */
 173static const DECLARE_TLV_DB_RANGE(mic_bst_tlv,
 174	0, 0, TLV_DB_SCALE_ITEM(0, 0, 0),
 175	1, 1, TLV_DB_SCALE_ITEM(2000, 0, 0),
 176	2, 2, TLV_DB_SCALE_ITEM(2400, 0, 0),
 177	3, 5, TLV_DB_SCALE_ITEM(3000, 500, 0),
 178	6, 6, TLV_DB_SCALE_ITEM(4400, 0, 0),
 179	7, 7, TLV_DB_SCALE_ITEM(5000, 0, 0),
 180	8, 8, TLV_DB_SCALE_ITEM(5200, 0, 0)
 181);
 182
 183static int rt5631_dmic_get(struct snd_kcontrol *kcontrol,
 184		struct snd_ctl_elem_value *ucontrol)
 185{
 186	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
 187	struct rt5631_priv *rt5631 = snd_soc_component_get_drvdata(component);
 188
 189	ucontrol->value.integer.value[0] = rt5631->dmic_used_flag;
 190
 191	return 0;
 192}
 193
 194static int rt5631_dmic_put(struct snd_kcontrol *kcontrol,
 195		struct snd_ctl_elem_value *ucontrol)
 196{
 197	struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
 198	struct rt5631_priv *rt5631 = snd_soc_component_get_drvdata(component);
 199
 200	rt5631->dmic_used_flag = ucontrol->value.integer.value[0];
 201	return 0;
 202}
 203
 204/* MIC Input Type */
 205static const char *rt5631_input_mode[] = {
 206	"Single ended", "Differential"};
 207
 208static SOC_ENUM_SINGLE_DECL(rt5631_mic1_mode_enum, RT5631_MIC_CTRL_1,
 209			    RT5631_MIC1_DIFF_INPUT_SHIFT, rt5631_input_mode);
 210
 211static SOC_ENUM_SINGLE_DECL(rt5631_mic2_mode_enum, RT5631_MIC_CTRL_1,
 212			    RT5631_MIC2_DIFF_INPUT_SHIFT, rt5631_input_mode);
 213
 214/* MONO Input Type */
 215static SOC_ENUM_SINGLE_DECL(rt5631_monoin_mode_enum, RT5631_MONO_INPUT_VOL,
 216			    RT5631_MONO_DIFF_INPUT_SHIFT, rt5631_input_mode);
 217
 218/* SPK Ratio Gain Control */
 219static const char *rt5631_spk_ratio[] = {"1.00x", "1.09x", "1.27x", "1.44x",
 220			"1.56x", "1.68x", "1.99x", "2.34x"};
 221
 222static SOC_ENUM_SINGLE_DECL(rt5631_spk_ratio_enum, RT5631_GEN_PUR_CTRL_REG,
 223			    RT5631_SPK_AMP_RATIO_CTRL_SHIFT, rt5631_spk_ratio);
 224
 225static const struct snd_kcontrol_new rt5631_snd_controls[] = {
 226	/* MIC */
 227	SOC_ENUM("MIC1 Mode Control",  rt5631_mic1_mode_enum),
 228	SOC_SINGLE_TLV("MIC1 Boost Volume", RT5631_MIC_CTRL_2,
 229		RT5631_MIC1_BOOST_SHIFT, 8, 0, mic_bst_tlv),
 230	SOC_ENUM("MIC2 Mode Control", rt5631_mic2_mode_enum),
 231	SOC_SINGLE_TLV("MIC2 Boost Volume", RT5631_MIC_CTRL_2,
 232		RT5631_MIC2_BOOST_SHIFT, 8, 0, mic_bst_tlv),
 233	/* MONO IN */
 234	SOC_ENUM("MONOIN Mode Control", rt5631_monoin_mode_enum),
 235	SOC_DOUBLE_TLV("MONOIN_RX Capture Volume", RT5631_MONO_INPUT_VOL,
 236			RT5631_L_VOL_SHIFT, RT5631_R_VOL_SHIFT,
 237			RT5631_VOL_MASK, 1, in_vol_tlv),
 238	/* AXI */
 239	SOC_DOUBLE_TLV("AXI Capture Volume", RT5631_AUX_IN_VOL,
 240			RT5631_L_VOL_SHIFT, RT5631_R_VOL_SHIFT,
 241			RT5631_VOL_MASK, 1, in_vol_tlv),
 242	/* DAC */
 243	SOC_DOUBLE_TLV("PCM Playback Volume", RT5631_STEREO_DAC_VOL_2,
 244			RT5631_L_VOL_SHIFT, RT5631_R_VOL_SHIFT,
 245			RT5631_DAC_VOL_MASK, 1, dac_vol_tlv),
 246	SOC_DOUBLE("PCM Playback Switch", RT5631_STEREO_DAC_VOL_1,
 247			RT5631_L_MUTE_SHIFT, RT5631_R_MUTE_SHIFT, 1, 1),
 248	/* AXO */
 249	SOC_SINGLE("AXO1 Playback Switch", RT5631_MONO_AXO_1_2_VOL,
 250				RT5631_L_MUTE_SHIFT, 1, 1),
 251	SOC_SINGLE("AXO2 Playback Switch", RT5631_MONO_AXO_1_2_VOL,
 252				RT5631_R_VOL_SHIFT, 1, 1),
 253	/* OUTVOL */
 254	SOC_DOUBLE("OUTVOL Channel Switch", RT5631_SPK_OUT_VOL,
 255		RT5631_L_EN_SHIFT, RT5631_R_EN_SHIFT, 1, 0),
 256
 257	/* SPK */
 258	SOC_DOUBLE("Speaker Playback Switch", RT5631_SPK_OUT_VOL,
 259		RT5631_L_MUTE_SHIFT, RT5631_R_MUTE_SHIFT, 1, 1),
 260	SOC_DOUBLE_TLV("Speaker Playback Volume", RT5631_SPK_OUT_VOL,
 261		RT5631_L_VOL_SHIFT, RT5631_R_VOL_SHIFT, 39, 1, out_vol_tlv),
 262	/* MONO OUT */
 263	SOC_SINGLE("MONO Playback Switch", RT5631_MONO_AXO_1_2_VOL,
 264				RT5631_MUTE_MONO_SHIFT, 1, 1),
 265	/* HP */
 266	SOC_DOUBLE("HP Playback Switch", RT5631_HP_OUT_VOL,
 267		RT5631_L_MUTE_SHIFT, RT5631_R_MUTE_SHIFT, 1, 1),
 268	SOC_DOUBLE_TLV("HP Playback Volume", RT5631_HP_OUT_VOL,
 269		RT5631_L_VOL_SHIFT, RT5631_R_VOL_SHIFT,
 270		RT5631_VOL_MASK, 1, out_vol_tlv),
 271	/* DMIC */
 272	SOC_SINGLE_EXT("DMIC Switch", 0, 0, 1, 0,
 273		rt5631_dmic_get, rt5631_dmic_put),
 274	SOC_DOUBLE("DMIC Capture Switch", RT5631_DIG_MIC_CTRL,
 275		RT5631_DMIC_L_CH_MUTE_SHIFT,
 276		RT5631_DMIC_R_CH_MUTE_SHIFT, 1, 1),
 277
 278	/* SPK Ratio Gain Control */
 279	SOC_ENUM("SPK Ratio Control", rt5631_spk_ratio_enum),
 280};
 281
 282static int check_sysclk1_source(struct snd_soc_dapm_widget *source,
 283			 struct snd_soc_dapm_widget *sink)
 284{
 285	struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
 286	unsigned int reg;
 287
 288	reg = snd_soc_component_read(component, RT5631_GLOBAL_CLK_CTRL);
 289	return reg & RT5631_SYSCLK_SOUR_SEL_PLL;
 290}
 291
 292static int check_dmic_used(struct snd_soc_dapm_widget *source,
 293			 struct snd_soc_dapm_widget *sink)
 294{
 295	struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
 296	struct rt5631_priv *rt5631 = snd_soc_component_get_drvdata(component);
 297	return rt5631->dmic_used_flag;
 298}
 299
 300static int check_dacl_to_outmixl(struct snd_soc_dapm_widget *source,
 301			 struct snd_soc_dapm_widget *sink)
 302{
 303	struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
 304	unsigned int reg;
 305
 306	reg = snd_soc_component_read(component, RT5631_OUTMIXER_L_CTRL);
 307	return !(reg & RT5631_M_DAC_L_TO_OUTMIXER_L);
 308}
 309
 310static int check_dacr_to_outmixr(struct snd_soc_dapm_widget *source,
 311			 struct snd_soc_dapm_widget *sink)
 312{
 313	struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
 314	unsigned int reg;
 315
 316	reg = snd_soc_component_read(component, RT5631_OUTMIXER_R_CTRL);
 317	return !(reg & RT5631_M_DAC_R_TO_OUTMIXER_R);
 318}
 319
 320static int check_dacl_to_spkmixl(struct snd_soc_dapm_widget *source,
 321			 struct snd_soc_dapm_widget *sink)
 322{
 323	struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
 324	unsigned int reg;
 325
 326	reg = snd_soc_component_read(component, RT5631_SPK_MIXER_CTRL);
 327	return !(reg & RT5631_M_DAC_L_TO_SPKMIXER_L);
 328}
 329
 330static int check_dacr_to_spkmixr(struct snd_soc_dapm_widget *source,
 331			 struct snd_soc_dapm_widget *sink)
 332{
 333	struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
 334	unsigned int reg;
 335
 336	reg = snd_soc_component_read(component, RT5631_SPK_MIXER_CTRL);
 337	return !(reg & RT5631_M_DAC_R_TO_SPKMIXER_R);
 338}
 339
 340static int check_adcl_select(struct snd_soc_dapm_widget *source,
 341			 struct snd_soc_dapm_widget *sink)
 342{
 343	struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
 344	unsigned int reg;
 345
 346	reg = snd_soc_component_read(component, RT5631_ADC_REC_MIXER);
 347	return !(reg & RT5631_M_MIC1_TO_RECMIXER_L);
 348}
 349
 350static int check_adcr_select(struct snd_soc_dapm_widget *source,
 351			 struct snd_soc_dapm_widget *sink)
 352{
 353	struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
 354	unsigned int reg;
 355
 356	reg = snd_soc_component_read(component, RT5631_ADC_REC_MIXER);
 357	return !(reg & RT5631_M_MIC2_TO_RECMIXER_R);
 358}
 359
 360/**
 361 * onebit_depop_power_stage - auto depop in power stage.
 362 * @component: ASoC component
 363 * @enable: power on/off
 364 *
 365 * When power on/off headphone, the depop sequence is done by hardware.
 366 */
 367static void onebit_depop_power_stage(struct snd_soc_component *component, int enable)
 368{
 369	unsigned int soft_vol, hp_zc;
 370
 371	/* enable one-bit depop function */
 372	snd_soc_component_update_bits(component, RT5631_DEPOP_FUN_CTRL_2,
 373				RT5631_EN_ONE_BIT_DEPOP, 0);
 374
 375	/* keep soft volume and zero crossing setting */
 376	soft_vol = snd_soc_component_read(component, RT5631_SOFT_VOL_CTRL);
 377	snd_soc_component_write(component, RT5631_SOFT_VOL_CTRL, 0);
 378	hp_zc = snd_soc_component_read(component, RT5631_INT_ST_IRQ_CTRL_2);
 379	snd_soc_component_write(component, RT5631_INT_ST_IRQ_CTRL_2, hp_zc & 0xf7ff);
 380	if (enable) {
 381		/* config one-bit depop parameter */
 382		rt5631_write_index(component, RT5631_TEST_MODE_CTRL, 0x84c0);
 383		rt5631_write_index(component, RT5631_SPK_INTL_CTRL, 0x309f);
 384		rt5631_write_index(component, RT5631_CP_INTL_REG2, 0x6530);
 385		/* power on capless block */
 386		snd_soc_component_write(component, RT5631_DEPOP_FUN_CTRL_2,
 387				RT5631_EN_CAP_FREE_DEPOP);
 388	} else {
 389		/* power off capless block */
 390		snd_soc_component_write(component, RT5631_DEPOP_FUN_CTRL_2, 0);
 391		msleep(100);
 392	}
 393
 394	/* recover soft volume and zero crossing setting */
 395	snd_soc_component_write(component, RT5631_SOFT_VOL_CTRL, soft_vol);
 396	snd_soc_component_write(component, RT5631_INT_ST_IRQ_CTRL_2, hp_zc);
 397}
 398
 399/**
 400 * onebit_depop_mute_stage - auto depop in mute stage.
 401 * @component: ASoC component
 402 * @enable: mute/unmute
 403 *
 404 * When mute/unmute headphone, the depop sequence is done by hardware.
 405 */
 406static void onebit_depop_mute_stage(struct snd_soc_component *component, int enable)
 407{
 408	unsigned int soft_vol, hp_zc;
 409
 410	/* enable one-bit depop function */
 411	snd_soc_component_update_bits(component, RT5631_DEPOP_FUN_CTRL_2,
 412				RT5631_EN_ONE_BIT_DEPOP, 0);
 413
 414	/* keep soft volume and zero crossing setting */
 415	soft_vol = snd_soc_component_read(component, RT5631_SOFT_VOL_CTRL);
 416	snd_soc_component_write(component, RT5631_SOFT_VOL_CTRL, 0);
 417	hp_zc = snd_soc_component_read(component, RT5631_INT_ST_IRQ_CTRL_2);
 418	snd_soc_component_write(component, RT5631_INT_ST_IRQ_CTRL_2, hp_zc & 0xf7ff);
 419	if (enable) {
 420		schedule_timeout_uninterruptible(msecs_to_jiffies(10));
 421		/* config one-bit depop parameter */
 422		rt5631_write_index(component, RT5631_SPK_INTL_CTRL, 0x307f);
 423		snd_soc_component_update_bits(component, RT5631_HP_OUT_VOL,
 424				RT5631_L_MUTE | RT5631_R_MUTE, 0);
 425		msleep(300);
 426	} else {
 427		snd_soc_component_update_bits(component, RT5631_HP_OUT_VOL,
 428			RT5631_L_MUTE | RT5631_R_MUTE,
 429			RT5631_L_MUTE | RT5631_R_MUTE);
 430		msleep(100);
 431	}
 432
 433	/* recover soft volume and zero crossing setting */
 434	snd_soc_component_write(component, RT5631_SOFT_VOL_CTRL, soft_vol);
 435	snd_soc_component_write(component, RT5631_INT_ST_IRQ_CTRL_2, hp_zc);
 436}
 437
 438/**
 439 * depop_seq_power_stage - step by step depop sequence in power stage.
 440 * @component: ASoC component
 441 * @enable: power on/off
 442 *
 443 * When power on/off headphone, the depop sequence is done in step by step.
 444 */
 445static void depop_seq_power_stage(struct snd_soc_component *component, int enable)
 446{
 447	unsigned int soft_vol, hp_zc;
 448
 449	/* depop control by register */
 450	snd_soc_component_update_bits(component, RT5631_DEPOP_FUN_CTRL_2,
 451		RT5631_EN_ONE_BIT_DEPOP, RT5631_EN_ONE_BIT_DEPOP);
 452
 453	/* keep soft volume and zero crossing setting */
 454	soft_vol = snd_soc_component_read(component, RT5631_SOFT_VOL_CTRL);
 455	snd_soc_component_write(component, RT5631_SOFT_VOL_CTRL, 0);
 456	hp_zc = snd_soc_component_read(component, RT5631_INT_ST_IRQ_CTRL_2);
 457	snd_soc_component_write(component, RT5631_INT_ST_IRQ_CTRL_2, hp_zc & 0xf7ff);
 458	if (enable) {
 459		/* config depop sequence parameter */
 460		rt5631_write_index(component, RT5631_SPK_INTL_CTRL, 0x303e);
 461
 462		/* power on headphone and charge pump */
 463		snd_soc_component_update_bits(component, RT5631_PWR_MANAG_ADD3,
 464			RT5631_PWR_CHARGE_PUMP | RT5631_PWR_HP_L_AMP |
 465			RT5631_PWR_HP_R_AMP,
 466			RT5631_PWR_CHARGE_PUMP | RT5631_PWR_HP_L_AMP |
 467			RT5631_PWR_HP_R_AMP);
 468
 469		/* power on soft generator and depop mode2 */
 470		snd_soc_component_write(component, RT5631_DEPOP_FUN_CTRL_1,
 471			RT5631_POW_ON_SOFT_GEN | RT5631_EN_DEPOP2_FOR_HP);
 472		msleep(100);
 473
 474		/* stop depop mode */
 475		snd_soc_component_update_bits(component, RT5631_PWR_MANAG_ADD3,
 476			RT5631_PWR_HP_DEPOP_DIS, RT5631_PWR_HP_DEPOP_DIS);
 477	} else {
 478		/* config depop sequence parameter */
 479		rt5631_write_index(component, RT5631_SPK_INTL_CTRL, 0x303F);
 480		snd_soc_component_write(component, RT5631_DEPOP_FUN_CTRL_1,
 481			RT5631_POW_ON_SOFT_GEN | RT5631_EN_MUTE_UNMUTE_DEPOP |
 482			RT5631_PD_HPAMP_L_ST_UP | RT5631_PD_HPAMP_R_ST_UP);
 483		msleep(75);
 484		snd_soc_component_write(component, RT5631_DEPOP_FUN_CTRL_1,
 485			RT5631_POW_ON_SOFT_GEN | RT5631_PD_HPAMP_L_ST_UP |
 486			RT5631_PD_HPAMP_R_ST_UP);
 487
 488		/* start depop mode */
 489		snd_soc_component_update_bits(component, RT5631_PWR_MANAG_ADD3,
 490				RT5631_PWR_HP_DEPOP_DIS, 0);
 491
 492		/* config depop sequence parameter */
 493		snd_soc_component_write(component, RT5631_DEPOP_FUN_CTRL_1,
 494			RT5631_POW_ON_SOFT_GEN | RT5631_EN_DEPOP2_FOR_HP |
 495			RT5631_PD_HPAMP_L_ST_UP | RT5631_PD_HPAMP_R_ST_UP);
 496		msleep(80);
 497		snd_soc_component_write(component, RT5631_DEPOP_FUN_CTRL_1,
 498			RT5631_POW_ON_SOFT_GEN);
 499
 500		/* power down headphone and charge pump */
 501		snd_soc_component_update_bits(component, RT5631_PWR_MANAG_ADD3,
 502			RT5631_PWR_CHARGE_PUMP | RT5631_PWR_HP_L_AMP |
 503			RT5631_PWR_HP_R_AMP, 0);
 504	}
 505
 506	/* recover soft volume and zero crossing setting */
 507	snd_soc_component_write(component, RT5631_SOFT_VOL_CTRL, soft_vol);
 508	snd_soc_component_write(component, RT5631_INT_ST_IRQ_CTRL_2, hp_zc);
 509}
 510
 511/**
 512 * depop_seq_mute_stage - step by step depop sequence in mute stage.
 513 * @component: ASoC component
 514 * @enable: mute/unmute
 515 *
 516 * When mute/unmute headphone, the depop sequence is done in step by step.
 517 */
 518static void depop_seq_mute_stage(struct snd_soc_component *component, int enable)
 519{
 520	unsigned int soft_vol, hp_zc;
 521
 522	/* depop control by register */
 523	snd_soc_component_update_bits(component, RT5631_DEPOP_FUN_CTRL_2,
 524		RT5631_EN_ONE_BIT_DEPOP, RT5631_EN_ONE_BIT_DEPOP);
 525
 526	/* keep soft volume and zero crossing setting */
 527	soft_vol = snd_soc_component_read(component, RT5631_SOFT_VOL_CTRL);
 528	snd_soc_component_write(component, RT5631_SOFT_VOL_CTRL, 0);
 529	hp_zc = snd_soc_component_read(component, RT5631_INT_ST_IRQ_CTRL_2);
 530	snd_soc_component_write(component, RT5631_INT_ST_IRQ_CTRL_2, hp_zc & 0xf7ff);
 531	if (enable) {
 532		schedule_timeout_uninterruptible(msecs_to_jiffies(10));
 533
 534		/* config depop sequence parameter */
 535		rt5631_write_index(component, RT5631_SPK_INTL_CTRL, 0x302f);
 536		snd_soc_component_write(component, RT5631_DEPOP_FUN_CTRL_1,
 537			RT5631_POW_ON_SOFT_GEN | RT5631_EN_MUTE_UNMUTE_DEPOP |
 538			RT5631_EN_HP_R_M_UN_MUTE_DEPOP |
 539			RT5631_EN_HP_L_M_UN_MUTE_DEPOP);
 540
 541		snd_soc_component_update_bits(component, RT5631_HP_OUT_VOL,
 542				RT5631_L_MUTE | RT5631_R_MUTE, 0);
 543		msleep(160);
 544	} else {
 545		/* config depop sequence parameter */
 546		rt5631_write_index(component, RT5631_SPK_INTL_CTRL, 0x302f);
 547		snd_soc_component_write(component, RT5631_DEPOP_FUN_CTRL_1,
 548			RT5631_POW_ON_SOFT_GEN | RT5631_EN_MUTE_UNMUTE_DEPOP |
 549			RT5631_EN_HP_R_M_UN_MUTE_DEPOP |
 550			RT5631_EN_HP_L_M_UN_MUTE_DEPOP);
 551
 552		snd_soc_component_update_bits(component, RT5631_HP_OUT_VOL,
 553			RT5631_L_MUTE | RT5631_R_MUTE,
 554			RT5631_L_MUTE | RT5631_R_MUTE);
 555		msleep(150);
 556	}
 557
 558	/* recover soft volume and zero crossing setting */
 559	snd_soc_component_write(component, RT5631_SOFT_VOL_CTRL, soft_vol);
 560	snd_soc_component_write(component, RT5631_INT_ST_IRQ_CTRL_2, hp_zc);
 561}
 562
 563static int hp_event(struct snd_soc_dapm_widget *w,
 564	struct snd_kcontrol *kcontrol, int event)
 565{
 566	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
 567	struct rt5631_priv *rt5631 = snd_soc_component_get_drvdata(component);
 568
 569	switch (event) {
 570	case SND_SOC_DAPM_PRE_PMD:
 571		if (rt5631->codec_version) {
 572			onebit_depop_mute_stage(component, 0);
 573			onebit_depop_power_stage(component, 0);
 574		} else {
 575			depop_seq_mute_stage(component, 0);
 576			depop_seq_power_stage(component, 0);
 577		}
 578		break;
 579
 580	case SND_SOC_DAPM_POST_PMU:
 581		if (rt5631->codec_version) {
 582			onebit_depop_power_stage(component, 1);
 583			onebit_depop_mute_stage(component, 1);
 584		} else {
 585			depop_seq_power_stage(component, 1);
 586			depop_seq_mute_stage(component, 1);
 587		}
 588		break;
 589
 590	default:
 591		break;
 592	}
 593
 594	return 0;
 595}
 596
 597static int set_dmic_params(struct snd_soc_dapm_widget *w,
 598	struct snd_kcontrol *kcontrol, int event)
 599{
 600	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
 601	struct rt5631_priv *rt5631 = snd_soc_component_get_drvdata(component);
 602
 603	switch (rt5631->rx_rate) {
 604	case 44100:
 605	case 48000:
 606		snd_soc_component_update_bits(component, RT5631_DIG_MIC_CTRL,
 607			RT5631_DMIC_CLK_CTRL_MASK,
 608			RT5631_DMIC_CLK_CTRL_TO_32FS);
 609		break;
 610
 611	case 32000:
 612	case 22050:
 613		snd_soc_component_update_bits(component, RT5631_DIG_MIC_CTRL,
 614			RT5631_DMIC_CLK_CTRL_MASK,
 615			RT5631_DMIC_CLK_CTRL_TO_64FS);
 616		break;
 617
 618	case 16000:
 619	case 11025:
 620	case 8000:
 621		snd_soc_component_update_bits(component, RT5631_DIG_MIC_CTRL,
 622			RT5631_DMIC_CLK_CTRL_MASK,
 623			RT5631_DMIC_CLK_CTRL_TO_128FS);
 624		break;
 625
 626	default:
 627		return -EINVAL;
 628	}
 629
 630	return 0;
 631}
 632
 633static const struct snd_kcontrol_new rt5631_recmixl_mixer_controls[] = {
 634	SOC_DAPM_SINGLE("OUTMIXL Capture Switch", RT5631_ADC_REC_MIXER,
 635			RT5631_M_OUTMIXL_RECMIXL_BIT, 1, 1),
 636	SOC_DAPM_SINGLE("MIC1_BST1 Capture Switch", RT5631_ADC_REC_MIXER,
 637			RT5631_M_MIC1_RECMIXL_BIT, 1, 1),
 638	SOC_DAPM_SINGLE("AXILVOL Capture Switch", RT5631_ADC_REC_MIXER,
 639			RT5631_M_AXIL_RECMIXL_BIT, 1, 1),
 640	SOC_DAPM_SINGLE("MONOIN_RX Capture Switch", RT5631_ADC_REC_MIXER,
 641			RT5631_M_MONO_IN_RECMIXL_BIT, 1, 1),
 642};
 643
 644static const struct snd_kcontrol_new rt5631_recmixr_mixer_controls[] = {
 645	SOC_DAPM_SINGLE("MONOIN_RX Capture Switch", RT5631_ADC_REC_MIXER,
 646			RT5631_M_MONO_IN_RECMIXR_BIT, 1, 1),
 647	SOC_DAPM_SINGLE("AXIRVOL Capture Switch", RT5631_ADC_REC_MIXER,
 648			RT5631_M_AXIR_RECMIXR_BIT, 1, 1),
 649	SOC_DAPM_SINGLE("MIC2_BST2 Capture Switch", RT5631_ADC_REC_MIXER,
 650			RT5631_M_MIC2_RECMIXR_BIT, 1, 1),
 651	SOC_DAPM_SINGLE("OUTMIXR Capture Switch", RT5631_ADC_REC_MIXER,
 652			RT5631_M_OUTMIXR_RECMIXR_BIT, 1, 1),
 653};
 654
 655static const struct snd_kcontrol_new rt5631_spkmixl_mixer_controls[] = {
 656	SOC_DAPM_SINGLE("RECMIXL Playback Switch", RT5631_SPK_MIXER_CTRL,
 657			RT5631_M_RECMIXL_SPKMIXL_BIT, 1, 1),
 658	SOC_DAPM_SINGLE("MIC1_P Playback Switch", RT5631_SPK_MIXER_CTRL,
 659			RT5631_M_MIC1P_SPKMIXL_BIT, 1, 1),
 660	SOC_DAPM_SINGLE("DACL Playback Switch", RT5631_SPK_MIXER_CTRL,
 661			RT5631_M_DACL_SPKMIXL_BIT, 1, 1),
 662	SOC_DAPM_SINGLE("OUTMIXL Playback Switch", RT5631_SPK_MIXER_CTRL,
 663			RT5631_M_OUTMIXL_SPKMIXL_BIT, 1, 1),
 664};
 665
 666static const struct snd_kcontrol_new rt5631_spkmixr_mixer_controls[] = {
 667	SOC_DAPM_SINGLE("OUTMIXR Playback Switch", RT5631_SPK_MIXER_CTRL,
 668			RT5631_M_OUTMIXR_SPKMIXR_BIT, 1, 1),
 669	SOC_DAPM_SINGLE("DACR Playback Switch", RT5631_SPK_MIXER_CTRL,
 670			RT5631_M_DACR_SPKMIXR_BIT, 1, 1),
 671	SOC_DAPM_SINGLE("MIC2_P Playback Switch", RT5631_SPK_MIXER_CTRL,
 672			RT5631_M_MIC2P_SPKMIXR_BIT, 1, 1),
 673	SOC_DAPM_SINGLE("RECMIXR Playback Switch", RT5631_SPK_MIXER_CTRL,
 674			RT5631_M_RECMIXR_SPKMIXR_BIT, 1, 1),
 675};
 676
 677static const struct snd_kcontrol_new rt5631_outmixl_mixer_controls[] = {
 678	SOC_DAPM_SINGLE("RECMIXL Playback Switch", RT5631_OUTMIXER_L_CTRL,
 679				RT5631_M_RECMIXL_OUTMIXL_BIT, 1, 1),
 680	SOC_DAPM_SINGLE("RECMIXR Playback Switch", RT5631_OUTMIXER_L_CTRL,
 681				RT5631_M_RECMIXR_OUTMIXL_BIT, 1, 1),
 682	SOC_DAPM_SINGLE("DACL Playback Switch", RT5631_OUTMIXER_L_CTRL,
 683				RT5631_M_DACL_OUTMIXL_BIT, 1, 1),
 684	SOC_DAPM_SINGLE("MIC1_BST1 Playback Switch", RT5631_OUTMIXER_L_CTRL,
 685				RT5631_M_MIC1_OUTMIXL_BIT, 1, 1),
 686	SOC_DAPM_SINGLE("MIC2_BST2 Playback Switch", RT5631_OUTMIXER_L_CTRL,
 687				RT5631_M_MIC2_OUTMIXL_BIT, 1, 1),
 688	SOC_DAPM_SINGLE("MONOIN_RXP Playback Switch", RT5631_OUTMIXER_L_CTRL,
 689				RT5631_M_MONO_INP_OUTMIXL_BIT, 1, 1),
 690	SOC_DAPM_SINGLE("AXILVOL Playback Switch", RT5631_OUTMIXER_L_CTRL,
 691				RT5631_M_AXIL_OUTMIXL_BIT, 1, 1),
 692	SOC_DAPM_SINGLE("AXIRVOL Playback Switch", RT5631_OUTMIXER_L_CTRL,
 693				RT5631_M_AXIR_OUTMIXL_BIT, 1, 1),
 694	SOC_DAPM_SINGLE("VDAC Playback Switch", RT5631_OUTMIXER_L_CTRL,
 695				RT5631_M_VDAC_OUTMIXL_BIT, 1, 1),
 696};
 697
 698static const struct snd_kcontrol_new rt5631_outmixr_mixer_controls[] = {
 699	SOC_DAPM_SINGLE("VDAC Playback Switch", RT5631_OUTMIXER_R_CTRL,
 700				RT5631_M_VDAC_OUTMIXR_BIT, 1, 1),
 701	SOC_DAPM_SINGLE("AXIRVOL Playback Switch", RT5631_OUTMIXER_R_CTRL,
 702				RT5631_M_AXIR_OUTMIXR_BIT, 1, 1),
 703	SOC_DAPM_SINGLE("AXILVOL Playback Switch", RT5631_OUTMIXER_R_CTRL,
 704				RT5631_M_AXIL_OUTMIXR_BIT, 1, 1),
 705	SOC_DAPM_SINGLE("MONOIN_RXN Playback Switch", RT5631_OUTMIXER_R_CTRL,
 706				RT5631_M_MONO_INN_OUTMIXR_BIT, 1, 1),
 707	SOC_DAPM_SINGLE("MIC2_BST2 Playback Switch", RT5631_OUTMIXER_R_CTRL,
 708				RT5631_M_MIC2_OUTMIXR_BIT, 1, 1),
 709	SOC_DAPM_SINGLE("MIC1_BST1 Playback Switch", RT5631_OUTMIXER_R_CTRL,
 710				RT5631_M_MIC1_OUTMIXR_BIT, 1, 1),
 711	SOC_DAPM_SINGLE("DACR Playback Switch", RT5631_OUTMIXER_R_CTRL,
 712				RT5631_M_DACR_OUTMIXR_BIT, 1, 1),
 713	SOC_DAPM_SINGLE("RECMIXR Playback Switch", RT5631_OUTMIXER_R_CTRL,
 714				RT5631_M_RECMIXR_OUTMIXR_BIT, 1, 1),
 715	SOC_DAPM_SINGLE("RECMIXL Playback Switch", RT5631_OUTMIXER_R_CTRL,
 716				RT5631_M_RECMIXL_OUTMIXR_BIT, 1, 1),
 717};
 718
 719static const struct snd_kcontrol_new rt5631_AXO1MIX_mixer_controls[] = {
 720	SOC_DAPM_SINGLE("MIC1_BST1 Playback Switch", RT5631_AXO1MIXER_CTRL,
 721				RT5631_M_MIC1_AXO1MIX_BIT , 1, 1),
 722	SOC_DAPM_SINGLE("MIC2_BST2 Playback Switch", RT5631_AXO1MIXER_CTRL,
 723				RT5631_M_MIC2_AXO1MIX_BIT, 1, 1),
 724	SOC_DAPM_SINGLE("OUTVOLL Playback Switch", RT5631_AXO1MIXER_CTRL,
 725				RT5631_M_OUTMIXL_AXO1MIX_BIT , 1 , 1),
 726	SOC_DAPM_SINGLE("OUTVOLR Playback Switch", RT5631_AXO1MIXER_CTRL,
 727				RT5631_M_OUTMIXR_AXO1MIX_BIT, 1, 1),
 728};
 729
 730static const struct snd_kcontrol_new rt5631_AXO2MIX_mixer_controls[] = {
 731	SOC_DAPM_SINGLE("MIC1_BST1 Playback Switch", RT5631_AXO2MIXER_CTRL,
 732				RT5631_M_MIC1_AXO2MIX_BIT, 1, 1),
 733	SOC_DAPM_SINGLE("MIC2_BST2 Playback Switch", RT5631_AXO2MIXER_CTRL,
 734				RT5631_M_MIC2_AXO2MIX_BIT, 1, 1),
 735	SOC_DAPM_SINGLE("OUTVOLL Playback Switch", RT5631_AXO2MIXER_CTRL,
 736				RT5631_M_OUTMIXL_AXO2MIX_BIT, 1, 1),
 737	SOC_DAPM_SINGLE("OUTVOLR Playback Switch", RT5631_AXO2MIXER_CTRL,
 738				RT5631_M_OUTMIXR_AXO2MIX_BIT, 1 , 1),
 739};
 740
 741static const struct snd_kcontrol_new rt5631_spolmix_mixer_controls[] = {
 742	SOC_DAPM_SINGLE("SPKVOLL Playback Switch", RT5631_SPK_MONO_OUT_CTRL,
 743				RT5631_M_SPKVOLL_SPOLMIX_BIT, 1, 1),
 744	SOC_DAPM_SINGLE("SPKVOLR Playback Switch", RT5631_SPK_MONO_OUT_CTRL,
 745				RT5631_M_SPKVOLR_SPOLMIX_BIT, 1, 1),
 746};
 747
 748static const struct snd_kcontrol_new rt5631_spormix_mixer_controls[] = {
 749	SOC_DAPM_SINGLE("SPKVOLL Playback Switch", RT5631_SPK_MONO_OUT_CTRL,
 750				RT5631_M_SPKVOLL_SPORMIX_BIT, 1, 1),
 751	SOC_DAPM_SINGLE("SPKVOLR Playback Switch", RT5631_SPK_MONO_OUT_CTRL,
 752				RT5631_M_SPKVOLR_SPORMIX_BIT, 1, 1),
 753};
 754
 755static const struct snd_kcontrol_new rt5631_monomix_mixer_controls[] = {
 756	SOC_DAPM_SINGLE("OUTVOLL Playback Switch", RT5631_SPK_MONO_OUT_CTRL,
 757				RT5631_M_OUTVOLL_MONOMIX_BIT, 1, 1),
 758	SOC_DAPM_SINGLE("OUTVOLR Playback Switch", RT5631_SPK_MONO_OUT_CTRL,
 759				RT5631_M_OUTVOLR_MONOMIX_BIT, 1, 1),
 760};
 761
 762/* Left SPK Volume Input */
 763static const char *rt5631_spkvoll_sel[] = {"Vmid", "SPKMIXL"};
 764
 765static SOC_ENUM_SINGLE_DECL(rt5631_spkvoll_enum, RT5631_SPK_OUT_VOL,
 766			    RT5631_L_EN_SHIFT, rt5631_spkvoll_sel);
 767
 768static const struct snd_kcontrol_new rt5631_spkvoll_mux_control =
 769	SOC_DAPM_ENUM("Left SPKVOL SRC", rt5631_spkvoll_enum);
 770
 771/* Left HP Volume Input */
 772static const char *rt5631_hpvoll_sel[] = {"Vmid", "OUTMIXL"};
 773
 774static SOC_ENUM_SINGLE_DECL(rt5631_hpvoll_enum, RT5631_HP_OUT_VOL,
 775			    RT5631_L_EN_SHIFT, rt5631_hpvoll_sel);
 776
 777static const struct snd_kcontrol_new rt5631_hpvoll_mux_control =
 778	SOC_DAPM_ENUM("Left HPVOL SRC", rt5631_hpvoll_enum);
 779
 780/* Left Out Volume Input */
 781static const char *rt5631_outvoll_sel[] = {"Vmid", "OUTMIXL"};
 782
 783static SOC_ENUM_SINGLE_DECL(rt5631_outvoll_enum, RT5631_MONO_AXO_1_2_VOL,
 784			    RT5631_L_EN_SHIFT, rt5631_outvoll_sel);
 785
 786static const struct snd_kcontrol_new rt5631_outvoll_mux_control =
 787	SOC_DAPM_ENUM("Left OUTVOL SRC", rt5631_outvoll_enum);
 788
 789/* Right Out Volume Input */
 790static const char *rt5631_outvolr_sel[] = {"Vmid", "OUTMIXR"};
 791
 792static SOC_ENUM_SINGLE_DECL(rt5631_outvolr_enum, RT5631_MONO_AXO_1_2_VOL,
 793			    RT5631_R_EN_SHIFT, rt5631_outvolr_sel);
 794
 795static const struct snd_kcontrol_new rt5631_outvolr_mux_control =
 796	SOC_DAPM_ENUM("Right OUTVOL SRC", rt5631_outvolr_enum);
 797
 798/* Right HP Volume Input */
 799static const char *rt5631_hpvolr_sel[] = {"Vmid", "OUTMIXR"};
 800
 801static SOC_ENUM_SINGLE_DECL(rt5631_hpvolr_enum, RT5631_HP_OUT_VOL,
 802			    RT5631_R_EN_SHIFT, rt5631_hpvolr_sel);
 803
 804static const struct snd_kcontrol_new rt5631_hpvolr_mux_control =
 805	SOC_DAPM_ENUM("Right HPVOL SRC", rt5631_hpvolr_enum);
 806
 807/* Right SPK Volume Input */
 808static const char *rt5631_spkvolr_sel[] = {"Vmid", "SPKMIXR"};
 809
 810static SOC_ENUM_SINGLE_DECL(rt5631_spkvolr_enum, RT5631_SPK_OUT_VOL,
 811			    RT5631_R_EN_SHIFT, rt5631_spkvolr_sel);
 812
 813static const struct snd_kcontrol_new rt5631_spkvolr_mux_control =
 814	SOC_DAPM_ENUM("Right SPKVOL SRC", rt5631_spkvolr_enum);
 815
 816/* SPO Left Channel Input */
 817static const char *rt5631_spol_src_sel[] = {
 818	"SPOLMIX", "MONOIN_RX", "VDAC", "DACL"};
 819
 820static SOC_ENUM_SINGLE_DECL(rt5631_spol_src_enum, RT5631_SPK_MONO_HP_OUT_CTRL,
 821			    RT5631_SPK_L_MUX_SEL_SHIFT, rt5631_spol_src_sel);
 822
 823static const struct snd_kcontrol_new rt5631_spol_mux_control =
 824	SOC_DAPM_ENUM("SPOL SRC", rt5631_spol_src_enum);
 825
 826/* SPO Right Channel Input */
 827static const char *rt5631_spor_src_sel[] = {
 828	"SPORMIX", "MONOIN_RX", "VDAC", "DACR"};
 829
 830static SOC_ENUM_SINGLE_DECL(rt5631_spor_src_enum, RT5631_SPK_MONO_HP_OUT_CTRL,
 831			    RT5631_SPK_R_MUX_SEL_SHIFT, rt5631_spor_src_sel);
 832
 833static const struct snd_kcontrol_new rt5631_spor_mux_control =
 834	SOC_DAPM_ENUM("SPOR SRC", rt5631_spor_src_enum);
 835
 836/* MONO Input */
 837static const char *rt5631_mono_src_sel[] = {"MONOMIX", "MONOIN_RX", "VDAC"};
 838
 839static SOC_ENUM_SINGLE_DECL(rt5631_mono_src_enum, RT5631_SPK_MONO_HP_OUT_CTRL,
 840			    RT5631_MONO_MUX_SEL_SHIFT, rt5631_mono_src_sel);
 841
 842static const struct snd_kcontrol_new rt5631_mono_mux_control =
 843	SOC_DAPM_ENUM("MONO SRC", rt5631_mono_src_enum);
 844
 845/* Left HPO Input */
 846static const char *rt5631_hpl_src_sel[] = {"Left HPVOL", "Left DAC"};
 847
 848static SOC_ENUM_SINGLE_DECL(rt5631_hpl_src_enum, RT5631_SPK_MONO_HP_OUT_CTRL,
 849			    RT5631_HP_L_MUX_SEL_SHIFT, rt5631_hpl_src_sel);
 850
 851static const struct snd_kcontrol_new rt5631_hpl_mux_control =
 852	SOC_DAPM_ENUM("HPL SRC", rt5631_hpl_src_enum);
 853
 854/* Right HPO Input */
 855static const char *rt5631_hpr_src_sel[] = {"Right HPVOL", "Right DAC"};
 856
 857static SOC_ENUM_SINGLE_DECL(rt5631_hpr_src_enum, RT5631_SPK_MONO_HP_OUT_CTRL,
 858			    RT5631_HP_R_MUX_SEL_SHIFT, rt5631_hpr_src_sel);
 859
 860static const struct snd_kcontrol_new rt5631_hpr_mux_control =
 861	SOC_DAPM_ENUM("HPR SRC", rt5631_hpr_src_enum);
 862
 863static const struct snd_soc_dapm_widget rt5631_dapm_widgets[] = {
 864	/* Vmid */
 865	SND_SOC_DAPM_VMID("Vmid"),
 866	/* PLL1 */
 867	SND_SOC_DAPM_SUPPLY("PLL1", RT5631_PWR_MANAG_ADD2,
 868			RT5631_PWR_PLL1_BIT, 0, NULL, 0),
 869
 870	/* Input Side */
 871	/* Input Lines */
 872	SND_SOC_DAPM_INPUT("MIC1"),
 873	SND_SOC_DAPM_INPUT("MIC2"),
 874	SND_SOC_DAPM_INPUT("AXIL"),
 875	SND_SOC_DAPM_INPUT("AXIR"),
 876	SND_SOC_DAPM_INPUT("MONOIN_RXN"),
 877	SND_SOC_DAPM_INPUT("MONOIN_RXP"),
 878	SND_SOC_DAPM_INPUT("DMIC"),
 879
 880	/* MICBIAS */
 881	SND_SOC_DAPM_MICBIAS("MIC Bias1", RT5631_PWR_MANAG_ADD2,
 882			RT5631_PWR_MICBIAS1_VOL_BIT, 0),
 883	SND_SOC_DAPM_MICBIAS("MIC Bias2", RT5631_PWR_MANAG_ADD2,
 884			RT5631_PWR_MICBIAS2_VOL_BIT, 0),
 885
 886	/* Boost */
 887	SND_SOC_DAPM_PGA("MIC1 Boost", RT5631_PWR_MANAG_ADD2,
 888			RT5631_PWR_MIC1_BOOT_GAIN_BIT, 0, NULL, 0),
 889	SND_SOC_DAPM_PGA("MIC2 Boost", RT5631_PWR_MANAG_ADD2,
 890			RT5631_PWR_MIC2_BOOT_GAIN_BIT, 0, NULL, 0),
 891	SND_SOC_DAPM_PGA("MONOIN_RXP Boost", RT5631_PWR_MANAG_ADD4,
 892			RT5631_PWR_MONO_IN_P_VOL_BIT, 0, NULL, 0),
 893	SND_SOC_DAPM_PGA("MONOIN_RXN Boost", RT5631_PWR_MANAG_ADD4,
 894			RT5631_PWR_MONO_IN_N_VOL_BIT, 0, NULL, 0),
 895	SND_SOC_DAPM_PGA("AXIL Boost", RT5631_PWR_MANAG_ADD4,
 896			RT5631_PWR_AXIL_IN_VOL_BIT, 0, NULL, 0),
 897	SND_SOC_DAPM_PGA("AXIR Boost", RT5631_PWR_MANAG_ADD4,
 898			RT5631_PWR_AXIR_IN_VOL_BIT, 0, NULL, 0),
 899
 900	/* MONO In */
 901	SND_SOC_DAPM_MIXER("MONO_IN", SND_SOC_NOPM, 0, 0, NULL, 0),
 902
 903	/* REC Mixer */
 904	SND_SOC_DAPM_MIXER("RECMIXL Mixer", RT5631_PWR_MANAG_ADD2,
 905		RT5631_PWR_RECMIXER_L_BIT, 0,
 906		&rt5631_recmixl_mixer_controls[0],
 907		ARRAY_SIZE(rt5631_recmixl_mixer_controls)),
 908	SND_SOC_DAPM_MIXER("RECMIXR Mixer", RT5631_PWR_MANAG_ADD2,
 909		RT5631_PWR_RECMIXER_R_BIT, 0,
 910		&rt5631_recmixr_mixer_controls[0],
 911		ARRAY_SIZE(rt5631_recmixr_mixer_controls)),
 912	/* Because of record duplication for L/R channel,
 913	 * L/R ADCs need power up at the same time */
 914	SND_SOC_DAPM_MIXER("ADC Mixer", SND_SOC_NOPM, 0, 0, NULL, 0),
 915
 916	/* DMIC */
 917	SND_SOC_DAPM_SUPPLY("DMIC Supply", RT5631_DIG_MIC_CTRL,
 918		RT5631_DMIC_ENA_SHIFT, 0,
 919		set_dmic_params, SND_SOC_DAPM_PRE_PMU),
 920	/* ADC Data Srouce */
 921	SND_SOC_DAPM_SUPPLY("Left ADC Select", RT5631_INT_ST_IRQ_CTRL_2,
 922			RT5631_ADC_DATA_SEL_MIC1_SHIFT, 0, NULL, 0),
 923	SND_SOC_DAPM_SUPPLY("Right ADC Select", RT5631_INT_ST_IRQ_CTRL_2,
 924			RT5631_ADC_DATA_SEL_MIC2_SHIFT, 0, NULL, 0),
 925
 926	/* ADCs */
 927	SND_SOC_DAPM_ADC("Left ADC", "HIFI Capture",
 928		RT5631_PWR_MANAG_ADD1, RT5631_PWR_ADC_L_CLK_BIT, 0),
 929	SND_SOC_DAPM_ADC("Right ADC", "HIFI Capture",
 930		RT5631_PWR_MANAG_ADD1, RT5631_PWR_ADC_R_CLK_BIT, 0),
 931
 932	/* DAC and ADC supply power */
 933	SND_SOC_DAPM_SUPPLY("I2S", RT5631_PWR_MANAG_ADD1,
 934			RT5631_PWR_MAIN_I2S_BIT, 0, NULL, 0),
 935	SND_SOC_DAPM_SUPPLY("DAC REF", RT5631_PWR_MANAG_ADD1,
 936			RT5631_PWR_DAC_REF_BIT, 0, NULL, 0),
 937
 938	/* Output Side */
 939	/* DACs */
 940	SND_SOC_DAPM_DAC("Left DAC", "HIFI Playback",
 941		RT5631_PWR_MANAG_ADD1, RT5631_PWR_DAC_L_CLK_BIT, 0),
 942	SND_SOC_DAPM_DAC("Right DAC", "HIFI Playback",
 943		RT5631_PWR_MANAG_ADD1, RT5631_PWR_DAC_R_CLK_BIT, 0),
 944	SND_SOC_DAPM_DAC("Voice DAC", "Voice DAC Mono Playback",
 945				SND_SOC_NOPM, 0, 0),
 946	SND_SOC_DAPM_PGA("Voice DAC Boost", SND_SOC_NOPM, 0, 0, NULL, 0),
 947	/* DAC supply power */
 948	SND_SOC_DAPM_SUPPLY("Left DAC To Mixer", RT5631_PWR_MANAG_ADD1,
 949			RT5631_PWR_DAC_L_TO_MIXER_BIT, 0, NULL, 0),
 950	SND_SOC_DAPM_SUPPLY("Right DAC To Mixer", RT5631_PWR_MANAG_ADD1,
 951			RT5631_PWR_DAC_R_TO_MIXER_BIT, 0, NULL, 0),
 952
 953	/* Left SPK Mixer */
 954	SND_SOC_DAPM_MIXER("SPKMIXL Mixer", RT5631_PWR_MANAG_ADD2,
 955			RT5631_PWR_SPKMIXER_L_BIT, 0,
 956			&rt5631_spkmixl_mixer_controls[0],
 957			ARRAY_SIZE(rt5631_spkmixl_mixer_controls)),
 958	/* Left Out Mixer */
 959	SND_SOC_DAPM_MIXER("OUTMIXL Mixer", RT5631_PWR_MANAG_ADD2,
 960			RT5631_PWR_OUTMIXER_L_BIT, 0,
 961			&rt5631_outmixl_mixer_controls[0],
 962			ARRAY_SIZE(rt5631_outmixl_mixer_controls)),
 963	/* Right Out Mixer */
 964	SND_SOC_DAPM_MIXER("OUTMIXR Mixer", RT5631_PWR_MANAG_ADD2,
 965			RT5631_PWR_OUTMIXER_R_BIT, 0,
 966			&rt5631_outmixr_mixer_controls[0],
 967			ARRAY_SIZE(rt5631_outmixr_mixer_controls)),
 968	/* Right SPK Mixer */
 969	SND_SOC_DAPM_MIXER("SPKMIXR Mixer", RT5631_PWR_MANAG_ADD2,
 970			RT5631_PWR_SPKMIXER_R_BIT, 0,
 971			&rt5631_spkmixr_mixer_controls[0],
 972			ARRAY_SIZE(rt5631_spkmixr_mixer_controls)),
 973
 974	/* Volume Mux */
 975	SND_SOC_DAPM_MUX("Left SPKVOL Mux", RT5631_PWR_MANAG_ADD4,
 976			RT5631_PWR_SPK_L_VOL_BIT, 0,
 977			&rt5631_spkvoll_mux_control),
 978	SND_SOC_DAPM_MUX("Left HPVOL Mux", RT5631_PWR_MANAG_ADD4,
 979			RT5631_PWR_HP_L_OUT_VOL_BIT, 0,
 980			&rt5631_hpvoll_mux_control),
 981	SND_SOC_DAPM_MUX("Left OUTVOL Mux", RT5631_PWR_MANAG_ADD4,
 982			RT5631_PWR_LOUT_VOL_BIT, 0,
 983			&rt5631_outvoll_mux_control),
 984	SND_SOC_DAPM_MUX("Right OUTVOL Mux", RT5631_PWR_MANAG_ADD4,
 985			RT5631_PWR_ROUT_VOL_BIT, 0,
 986			&rt5631_outvolr_mux_control),
 987	SND_SOC_DAPM_MUX("Right HPVOL Mux", RT5631_PWR_MANAG_ADD4,
 988			RT5631_PWR_HP_R_OUT_VOL_BIT, 0,
 989			&rt5631_hpvolr_mux_control),
 990	SND_SOC_DAPM_MUX("Right SPKVOL Mux", RT5631_PWR_MANAG_ADD4,
 991			RT5631_PWR_SPK_R_VOL_BIT, 0,
 992			&rt5631_spkvolr_mux_control),
 993
 994	/* DAC To HP */
 995	SND_SOC_DAPM_PGA_S("Left DAC_HP", 0, SND_SOC_NOPM, 0, 0, NULL, 0),
 996	SND_SOC_DAPM_PGA_S("Right DAC_HP", 0, SND_SOC_NOPM, 0, 0, NULL, 0),
 997
 998	/* HP Depop */
 999	SND_SOC_DAPM_PGA_S("HP Depop", 1, SND_SOC_NOPM, 0, 0,
1000		hp_event, SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
1001
1002	/* AXO1 Mixer */
1003	SND_SOC_DAPM_MIXER("AXO1MIX Mixer", RT5631_PWR_MANAG_ADD3,
1004			RT5631_PWR_AXO1MIXER_BIT, 0,
1005			&rt5631_AXO1MIX_mixer_controls[0],
1006			ARRAY_SIZE(rt5631_AXO1MIX_mixer_controls)),
1007	/* SPOL Mixer */
1008	SND_SOC_DAPM_MIXER("SPOLMIX Mixer", SND_SOC_NOPM, 0, 0,
1009			&rt5631_spolmix_mixer_controls[0],
1010			ARRAY_SIZE(rt5631_spolmix_mixer_controls)),
1011	/* MONO Mixer */
1012	SND_SOC_DAPM_MIXER("MONOMIX Mixer", RT5631_PWR_MANAG_ADD3,
1013			RT5631_PWR_MONOMIXER_BIT, 0,
1014			&rt5631_monomix_mixer_controls[0],
1015			ARRAY_SIZE(rt5631_monomix_mixer_controls)),
1016	/* SPOR Mixer */
1017	SND_SOC_DAPM_MIXER("SPORMIX Mixer", SND_SOC_NOPM, 0, 0,
1018			&rt5631_spormix_mixer_controls[0],
1019			ARRAY_SIZE(rt5631_spormix_mixer_controls)),
1020	/* AXO2 Mixer */
1021	SND_SOC_DAPM_MIXER("AXO2MIX Mixer", RT5631_PWR_MANAG_ADD3,
1022			RT5631_PWR_AXO2MIXER_BIT, 0,
1023			&rt5631_AXO2MIX_mixer_controls[0],
1024			ARRAY_SIZE(rt5631_AXO2MIX_mixer_controls)),
1025
1026	/* Mux */
1027	SND_SOC_DAPM_MUX("SPOL Mux", SND_SOC_NOPM, 0, 0,
1028			&rt5631_spol_mux_control),
1029	SND_SOC_DAPM_MUX("SPOR Mux", SND_SOC_NOPM, 0, 0,
1030			&rt5631_spor_mux_control),
1031	SND_SOC_DAPM_MUX("MONO Mux", SND_SOC_NOPM, 0, 0,
1032			&rt5631_mono_mux_control),
1033	SND_SOC_DAPM_MUX("HPL Mux", SND_SOC_NOPM, 0, 0,
1034			&rt5631_hpl_mux_control),
1035	SND_SOC_DAPM_MUX("HPR Mux", SND_SOC_NOPM, 0, 0,
1036			&rt5631_hpr_mux_control),
1037
1038	/* AMP supply */
1039	SND_SOC_DAPM_SUPPLY("MONO Depop", RT5631_PWR_MANAG_ADD3,
1040			RT5631_PWR_MONO_DEPOP_DIS_BIT, 0, NULL, 0),
1041	SND_SOC_DAPM_SUPPLY("Class D", RT5631_PWR_MANAG_ADD1,
1042			RT5631_PWR_CLASS_D_BIT, 0, NULL, 0),
1043
1044	/* Output Lines */
1045	SND_SOC_DAPM_OUTPUT("AUXO1"),
1046	SND_SOC_DAPM_OUTPUT("AUXO2"),
1047	SND_SOC_DAPM_OUTPUT("SPOL"),
1048	SND_SOC_DAPM_OUTPUT("SPOR"),
1049	SND_SOC_DAPM_OUTPUT("HPOL"),
1050	SND_SOC_DAPM_OUTPUT("HPOR"),
1051	SND_SOC_DAPM_OUTPUT("MONO"),
1052};
1053
1054static const struct snd_soc_dapm_route rt5631_dapm_routes[] = {
1055	{"MIC1 Boost", NULL, "MIC1"},
1056	{"MIC2 Boost", NULL, "MIC2"},
1057	{"MONOIN_RXP Boost", NULL, "MONOIN_RXP"},
1058	{"MONOIN_RXN Boost", NULL, "MONOIN_RXN"},
1059	{"AXIL Boost", NULL, "AXIL"},
1060	{"AXIR Boost", NULL, "AXIR"},
1061
1062	{"MONO_IN", NULL, "MONOIN_RXP Boost"},
1063	{"MONO_IN", NULL, "MONOIN_RXN Boost"},
1064
1065	{"RECMIXL Mixer", "OUTMIXL Capture Switch", "OUTMIXL Mixer"},
1066	{"RECMIXL Mixer", "MIC1_BST1 Capture Switch", "MIC1 Boost"},
1067	{"RECMIXL Mixer", "AXILVOL Capture Switch", "AXIL Boost"},
1068	{"RECMIXL Mixer", "MONOIN_RX Capture Switch", "MONO_IN"},
1069
1070	{"RECMIXR Mixer", "OUTMIXR Capture Switch", "OUTMIXR Mixer"},
1071	{"RECMIXR Mixer", "MIC2_BST2 Capture Switch", "MIC2 Boost"},
1072	{"RECMIXR Mixer", "AXIRVOL Capture Switch", "AXIR Boost"},
1073	{"RECMIXR Mixer", "MONOIN_RX Capture Switch", "MONO_IN"},
1074
1075	{"ADC Mixer", NULL, "RECMIXL Mixer"},
1076	{"ADC Mixer", NULL, "RECMIXR Mixer"},
1077
1078	{"Left ADC", NULL, "ADC Mixer"},
1079	{"Left ADC", NULL, "Left ADC Select", check_adcl_select},
1080	{"Left ADC", NULL, "PLL1", check_sysclk1_source},
1081	{"Left ADC", NULL, "I2S"},
1082	{"Left ADC", NULL, "DAC REF"},
1083
1084	{"Right ADC", NULL, "ADC Mixer"},
1085	{"Right ADC", NULL, "Right ADC Select", check_adcr_select},
1086	{"Right ADC", NULL, "PLL1", check_sysclk1_source},
1087	{"Right ADC", NULL, "I2S"},
1088	{"Right ADC", NULL, "DAC REF"},
1089
1090	{"DMIC", NULL, "DMIC Supply", check_dmic_used},
1091	{"Left ADC", NULL, "DMIC"},
1092	{"Right ADC", NULL, "DMIC"},
1093
1094	{"Left DAC", NULL, "PLL1", check_sysclk1_source},
1095	{"Left DAC", NULL, "I2S"},
1096	{"Left DAC", NULL, "DAC REF"},
1097	{"Right DAC", NULL, "PLL1", check_sysclk1_source},
1098	{"Right DAC", NULL, "I2S"},
1099	{"Right DAC", NULL, "DAC REF"},
1100
1101	{"Voice DAC Boost", NULL, "Voice DAC"},
1102
1103	{"SPKMIXL Mixer", NULL, "Left DAC To Mixer", check_dacl_to_spkmixl},
1104	{"SPKMIXL Mixer", "RECMIXL Playback Switch", "RECMIXL Mixer"},
1105	{"SPKMIXL Mixer", "MIC1_P Playback Switch", "MIC1"},
1106	{"SPKMIXL Mixer", "DACL Playback Switch", "Left DAC"},
1107	{"SPKMIXL Mixer", "OUTMIXL Playback Switch", "OUTMIXL Mixer"},
1108
1109	{"SPKMIXR Mixer", NULL, "Right DAC To Mixer", check_dacr_to_spkmixr},
1110	{"SPKMIXR Mixer", "OUTMIXR Playback Switch", "OUTMIXR Mixer"},
1111	{"SPKMIXR Mixer", "DACR Playback Switch", "Right DAC"},
1112	{"SPKMIXR Mixer", "MIC2_P Playback Switch", "MIC2"},
1113	{"SPKMIXR Mixer", "RECMIXR Playback Switch", "RECMIXR Mixer"},
1114
1115	{"OUTMIXL Mixer", NULL, "Left DAC To Mixer", check_dacl_to_outmixl},
1116	{"OUTMIXL Mixer", "RECMIXL Playback Switch", "RECMIXL Mixer"},
1117	{"OUTMIXL Mixer", "RECMIXR Playback Switch", "RECMIXR Mixer"},
1118	{"OUTMIXL Mixer", "DACL Playback Switch", "Left DAC"},
1119	{"OUTMIXL Mixer", "MIC1_BST1 Playback Switch", "MIC1 Boost"},
1120	{"OUTMIXL Mixer", "MIC2_BST2 Playback Switch", "MIC2 Boost"},
1121	{"OUTMIXL Mixer", "MONOIN_RXP Playback Switch", "MONOIN_RXP Boost"},
1122	{"OUTMIXL Mixer", "AXILVOL Playback Switch", "AXIL Boost"},
1123	{"OUTMIXL Mixer", "AXIRVOL Playback Switch", "AXIR Boost"},
1124	{"OUTMIXL Mixer", "VDAC Playback Switch", "Voice DAC Boost"},
1125
1126	{"OUTMIXR Mixer", NULL, "Right DAC To Mixer", check_dacr_to_outmixr},
1127	{"OUTMIXR Mixer", "RECMIXL Playback Switch", "RECMIXL Mixer"},
1128	{"OUTMIXR Mixer", "RECMIXR Playback Switch", "RECMIXR Mixer"},
1129	{"OUTMIXR Mixer", "DACR Playback Switch", "Right DAC"},
1130	{"OUTMIXR Mixer", "MIC1_BST1 Playback Switch", "MIC1 Boost"},
1131	{"OUTMIXR Mixer", "MIC2_BST2 Playback Switch", "MIC2 Boost"},
1132	{"OUTMIXR Mixer", "MONOIN_RXN Playback Switch", "MONOIN_RXN Boost"},
1133	{"OUTMIXR Mixer", "AXILVOL Playback Switch", "AXIL Boost"},
1134	{"OUTMIXR Mixer", "AXIRVOL Playback Switch", "AXIR Boost"},
1135	{"OUTMIXR Mixer", "VDAC Playback Switch", "Voice DAC Boost"},
1136
1137	{"Left SPKVOL Mux",  "SPKMIXL", "SPKMIXL Mixer"},
1138	{"Left SPKVOL Mux",  "Vmid", "Vmid"},
1139	{"Left HPVOL Mux",  "OUTMIXL", "OUTMIXL Mixer"},
1140	{"Left HPVOL Mux",  "Vmid", "Vmid"},
1141	{"Left OUTVOL Mux",  "OUTMIXL", "OUTMIXL Mixer"},
1142	{"Left OUTVOL Mux",  "Vmid", "Vmid"},
1143	{"Right OUTVOL Mux",  "OUTMIXR", "OUTMIXR Mixer"},
1144	{"Right OUTVOL Mux",  "Vmid", "Vmid"},
1145	{"Right HPVOL Mux",  "OUTMIXR", "OUTMIXR Mixer"},
1146	{"Right HPVOL Mux",  "Vmid", "Vmid"},
1147	{"Right SPKVOL Mux",  "SPKMIXR", "SPKMIXR Mixer"},
1148	{"Right SPKVOL Mux",  "Vmid", "Vmid"},
1149
1150	{"AXO1MIX Mixer", "MIC1_BST1 Playback Switch", "MIC1 Boost"},
1151	{"AXO1MIX Mixer", "OUTVOLL Playback Switch", "Left OUTVOL Mux"},
1152	{"AXO1MIX Mixer", "OUTVOLR Playback Switch", "Right OUTVOL Mux"},
1153	{"AXO1MIX Mixer", "MIC2_BST2 Playback Switch", "MIC2 Boost"},
1154
1155	{"AXO2MIX Mixer", "MIC1_BST1 Playback Switch", "MIC1 Boost"},
1156	{"AXO2MIX Mixer", "OUTVOLL Playback Switch", "Left OUTVOL Mux"},
1157	{"AXO2MIX Mixer", "OUTVOLR Playback Switch", "Right OUTVOL Mux"},
1158	{"AXO2MIX Mixer", "MIC2_BST2 Playback Switch", "MIC2 Boost"},
1159
1160	{"SPOLMIX Mixer", "SPKVOLL Playback Switch", "Left SPKVOL Mux"},
1161	{"SPOLMIX Mixer", "SPKVOLR Playback Switch", "Right SPKVOL Mux"},
1162
1163	{"SPORMIX Mixer", "SPKVOLL Playback Switch", "Left SPKVOL Mux"},
1164	{"SPORMIX Mixer", "SPKVOLR Playback Switch", "Right SPKVOL Mux"},
1165
1166	{"MONOMIX Mixer", "OUTVOLL Playback Switch", "Left OUTVOL Mux"},
1167	{"MONOMIX Mixer", "OUTVOLR Playback Switch", "Right OUTVOL Mux"},
1168
1169	{"SPOL Mux", "SPOLMIX", "SPOLMIX Mixer"},
1170	{"SPOL Mux", "MONOIN_RX", "MONO_IN"},
1171	{"SPOL Mux", "VDAC", "Voice DAC Boost"},
1172	{"SPOL Mux", "DACL", "Left DAC"},
1173
1174	{"SPOR Mux", "SPORMIX", "SPORMIX Mixer"},
1175	{"SPOR Mux", "MONOIN_RX", "MONO_IN"},
1176	{"SPOR Mux", "VDAC", "Voice DAC Boost"},
1177	{"SPOR Mux", "DACR", "Right DAC"},
1178
1179	{"MONO Mux", "MONOMIX", "MONOMIX Mixer"},
1180	{"MONO Mux", "MONOIN_RX", "MONO_IN"},
1181	{"MONO Mux", "VDAC", "Voice DAC Boost"},
1182
1183	{"Right DAC_HP", NULL, "Right DAC"},
1184	{"Left DAC_HP", NULL, "Left DAC"},
1185
1186	{"HPL Mux", "Left HPVOL", "Left HPVOL Mux"},
1187	{"HPL Mux", "Left DAC", "Left DAC_HP"},
1188	{"HPR Mux", "Right HPVOL", "Right HPVOL Mux"},
1189	{"HPR Mux", "Right DAC", "Right DAC_HP"},
1190
1191	{"HP Depop", NULL, "HPL Mux"},
1192	{"HP Depop", NULL, "HPR Mux"},
1193
1194	{"AUXO1", NULL, "AXO1MIX Mixer"},
1195	{"AUXO2", NULL, "AXO2MIX Mixer"},
1196
1197	{"SPOL", NULL, "Class D"},
1198	{"SPOL", NULL, "SPOL Mux"},
1199	{"SPOR", NULL, "Class D"},
1200	{"SPOR", NULL, "SPOR Mux"},
1201
1202	{"HPOL", NULL, "HP Depop"},
1203	{"HPOR", NULL, "HP Depop"},
1204
1205	{"MONO", NULL, "MONO Depop"},
1206	{"MONO", NULL, "MONO Mux"},
1207};
1208
1209struct coeff_clk_div {
1210	u32 mclk;
1211	u32 bclk;
1212	u32 rate;
1213	u16 reg_val;
1214};
1215
1216/* PLL divisors */
1217struct pll_div {
1218	u32 pll_in;
1219	u32 pll_out;
1220	u16 reg_val;
1221};
1222
1223static const struct pll_div codec_master_pll_div[] = {
1224	{2048000,  8192000,  0x0ea0},
1225	{3686400,  8192000,  0x4e27},
1226	{12000000,  8192000,  0x456b},
1227	{13000000,  8192000,  0x495f},
1228	{13100000,  8192000,  0x0320},
1229	{2048000,  11289600,  0xf637},
1230	{3686400,  11289600,  0x2f22},
1231	{12000000,  11289600,  0x3e2f},
1232	{13000000,  11289600,  0x4d5b},
1233	{13100000,  11289600,  0x363b},
1234	{2048000,  16384000,  0x1ea0},
1235	{3686400,  16384000,  0x9e27},
1236	{12000000,  16384000,  0x452b},
1237	{13000000,  16384000,  0x542f},
1238	{13100000,  16384000,  0x03a0},
1239	{2048000,  16934400,  0xe625},
1240	{3686400,  16934400,  0x9126},
1241	{12000000,  16934400,  0x4d2c},
1242	{13000000,  16934400,  0x742f},
1243	{13100000,  16934400,  0x3c27},
1244	{2048000,  22579200,  0x2aa0},
1245	{3686400,  22579200,  0x2f20},
1246	{12000000,  22579200,  0x7e2f},
1247	{13000000,  22579200,  0x742f},
1248	{13100000,  22579200,  0x3c27},
1249	{2048000,  24576000,  0x2ea0},
1250	{3686400,  24576000,  0xee27},
1251	{12000000,  24576000,  0x2915},
1252	{13000000,  24576000,  0x772e},
1253	{13100000,  24576000,  0x0d20},
1254	{26000000,  24576000,  0x2027},
1255	{26000000,  22579200,  0x392f},
1256	{24576000,  22579200,  0x0921},
1257	{24576000,  24576000,  0x02a0},
1258};
1259
1260static const struct pll_div codec_slave_pll_div[] = {
1261	{256000,  2048000,  0x46f0},
1262	{256000,  4096000,  0x3ea0},
1263	{352800,  5644800,  0x3ea0},
1264	{512000,  8192000,  0x3ea0},
1265	{1024000,  8192000,  0x46f0},
1266	{705600,  11289600,  0x3ea0},
1267	{1024000,  16384000,  0x3ea0},
1268	{1411200,  22579200,  0x3ea0},
1269	{1536000,  24576000,  0x3ea0},
1270	{2048000,  16384000,  0x1ea0},
1271	{2822400,  22579200,  0x1ea0},
1272	{2822400,  45158400,  0x5ec0},
1273	{5644800,  45158400,  0x46f0},
1274	{3072000,  24576000,  0x1ea0},
1275	{3072000,  49152000,  0x5ec0},
1276	{6144000,  49152000,  0x46f0},
1277	{705600,  11289600,  0x3ea0},
1278	{705600,  8467200,  0x3ab0},
1279	{24576000,  24576000,  0x02a0},
1280	{1411200,  11289600,  0x1690},
1281	{2822400,  11289600,  0x0a90},
1282	{1536000,  12288000,  0x1690},
1283	{3072000,  12288000,  0x0a90},
1284};
1285
1286static const struct coeff_clk_div coeff_div[] = {
1287	/* sysclk is 256fs */
1288	{2048000,  8000 * 32,  8000, 0x1000},
1289	{2048000,  8000 * 64,  8000, 0x0000},
1290	{2822400,  11025 * 32,  11025,  0x1000},
1291	{2822400,  11025 * 64,  11025,  0x0000},
1292	{4096000,  16000 * 32,  16000,  0x1000},
1293	{4096000,  16000 * 64,  16000,  0x0000},
1294	{5644800,  22050 * 32,  22050,  0x1000},
1295	{5644800,  22050 * 64,  22050,  0x0000},
1296	{8192000,  32000 * 32,  32000,  0x1000},
1297	{8192000,  32000 * 64,  32000,  0x0000},
1298	{11289600,  44100 * 32,  44100,  0x1000},
1299	{11289600,  44100 * 64,  44100,  0x0000},
1300	{12288000,  48000 * 32,  48000,  0x1000},
1301	{12288000,  48000 * 64,  48000,  0x0000},
1302	{22579200,  88200 * 32,  88200,  0x1000},
1303	{22579200,  88200 * 64,  88200,  0x0000},
1304	{24576000,  96000 * 32,  96000,  0x1000},
1305	{24576000,  96000 * 64,  96000,  0x0000},
1306	/* sysclk is 512fs */
1307	{4096000,  8000 * 32,  8000, 0x3000},
1308	{4096000,  8000 * 64,  8000, 0x2000},
1309	{5644800,  11025 * 32,  11025, 0x3000},
1310	{5644800,  11025 * 64,  11025, 0x2000},
1311	{8192000,  16000 * 32,  16000, 0x3000},
1312	{8192000,  16000 * 64,  16000, 0x2000},
1313	{11289600,  22050 * 32,  22050, 0x3000},
1314	{11289600,  22050 * 64,  22050, 0x2000},
1315	{16384000,  32000 * 32,  32000, 0x3000},
1316	{16384000,  32000 * 64,  32000, 0x2000},
1317	{22579200,  44100 * 32,  44100, 0x3000},
1318	{22579200,  44100 * 64,  44100, 0x2000},
1319	{24576000,  48000 * 32,  48000, 0x3000},
1320	{24576000,  48000 * 64,  48000, 0x2000},
1321	{45158400,  88200 * 32,  88200, 0x3000},
1322	{45158400,  88200 * 64,  88200, 0x2000},
1323	{49152000,  96000 * 32,  96000, 0x3000},
1324	{49152000,  96000 * 64,  96000, 0x2000},
1325	/* sysclk is 24.576Mhz or 22.5792Mhz */
1326	{24576000,  8000 * 32,  8000,  0x7080},
1327	{24576000,  8000 * 64,  8000,  0x6080},
1328	{24576000,  16000 * 32,  16000,  0x5080},
1329	{24576000,  16000 * 64,  16000,  0x4080},
1330	{24576000,  24000 * 32,  24000,  0x5000},
1331	{24576000,  24000 * 64,  24000,  0x4000},
1332	{24576000,  32000 * 32,  32000,  0x3080},
1333	{24576000,  32000 * 64,  32000,  0x2080},
1334	{22579200,  11025 * 32,  11025,  0x7000},
1335	{22579200,  11025 * 64,  11025,  0x6000},
1336	{22579200,  22050 * 32,  22050,  0x5000},
1337	{22579200,  22050 * 64,  22050,  0x4000},
1338};
1339
1340static int get_coeff(int mclk, int rate, int timesofbclk)
1341{
1342	int i;
1343
1344	for (i = 0; i < ARRAY_SIZE(coeff_div); i++) {
1345		if (coeff_div[i].mclk == mclk && coeff_div[i].rate == rate &&
1346			(coeff_div[i].bclk / coeff_div[i].rate) == timesofbclk)
1347			return i;
1348	}
1349	return -EINVAL;
1350}
1351
1352static int rt5631_hifi_pcm_params(struct snd_pcm_substream *substream,
1353		struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
1354{
1355	struct snd_soc_component *component = dai->component;
1356	struct rt5631_priv *rt5631 = snd_soc_component_get_drvdata(component);
1357	int timesofbclk = 32, coeff;
1358	unsigned int iface = 0;
1359
1360	dev_dbg(component->dev, "enter %s\n", __func__);
1361
1362	rt5631->bclk_rate = snd_soc_params_to_bclk(params);
1363	if (rt5631->bclk_rate < 0) {
1364		dev_err(component->dev, "Fail to get BCLK rate\n");
1365		return rt5631->bclk_rate;
1366	}
1367	rt5631->rx_rate = params_rate(params);
1368
1369	if (rt5631->master)
1370		coeff = get_coeff(rt5631->sysclk, rt5631->rx_rate,
1371			rt5631->bclk_rate / rt5631->rx_rate);
1372	else
1373		coeff = get_coeff(rt5631->sysclk, rt5631->rx_rate,
1374					timesofbclk);
1375	if (coeff < 0) {
1376		dev_err(component->dev, "Fail to get coeff\n");
1377		return coeff;
1378	}
1379
1380	switch (params_width(params)) {
1381	case 16:
1382		break;
1383	case 20:
1384		iface |= RT5631_SDP_I2S_DL_20;
1385		break;
1386	case 24:
1387		iface |= RT5631_SDP_I2S_DL_24;
1388		break;
1389	case 8:
1390		iface |= RT5631_SDP_I2S_DL_8;
1391		break;
1392	default:
1393		return -EINVAL;
1394	}
1395
1396	snd_soc_component_update_bits(component, RT5631_SDP_CTRL,
1397		RT5631_SDP_I2S_DL_MASK, iface);
1398	snd_soc_component_write(component, RT5631_STEREO_AD_DA_CLK_CTRL,
1399					coeff_div[coeff].reg_val);
1400
1401	return 0;
1402}
1403
1404static int rt5631_hifi_codec_set_dai_fmt(struct snd_soc_dai *codec_dai,
1405						unsigned int fmt)
1406{
1407	struct snd_soc_component *component = codec_dai->component;
1408	struct rt5631_priv *rt5631 = snd_soc_component_get_drvdata(component);
1409	unsigned int iface = 0;
1410
1411	dev_dbg(component->dev, "enter %s\n", __func__);
1412
1413	switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
1414	case SND_SOC_DAIFMT_CBM_CFM:
1415		rt5631->master = 1;
1416		break;
1417	case SND_SOC_DAIFMT_CBS_CFS:
1418		iface |= RT5631_SDP_MODE_SEL_SLAVE;
1419		rt5631->master = 0;
1420		break;
1421	default:
1422		return -EINVAL;
1423	}
1424
1425	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
1426	case SND_SOC_DAIFMT_I2S:
1427		break;
1428	case SND_SOC_DAIFMT_LEFT_J:
1429		iface |= RT5631_SDP_I2S_DF_LEFT;
1430		break;
1431	case SND_SOC_DAIFMT_DSP_A:
1432		iface |= RT5631_SDP_I2S_DF_PCM_A;
1433		break;
1434	case SND_SOC_DAIFMT_DSP_B:
1435		iface  |= RT5631_SDP_I2S_DF_PCM_B;
1436		break;
1437	default:
1438		return -EINVAL;
1439	}
1440
1441	switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
1442	case SND_SOC_DAIFMT_NB_NF:
1443		break;
1444	case SND_SOC_DAIFMT_IB_NF:
1445		iface |= RT5631_SDP_I2S_BCLK_POL_CTRL;
1446		break;
1447	default:
1448		return -EINVAL;
1449	}
1450
1451	snd_soc_component_write(component, RT5631_SDP_CTRL, iface);
1452
1453	return 0;
1454}
1455
1456static int rt5631_hifi_codec_set_dai_sysclk(struct snd_soc_dai *codec_dai,
1457				int clk_id, unsigned int freq, int dir)
1458{
1459	struct snd_soc_component *component = codec_dai->component;
1460	struct rt5631_priv *rt5631 = snd_soc_component_get_drvdata(component);
1461
1462	dev_dbg(component->dev, "enter %s, syclk=%d\n", __func__, freq);
1463
1464	if ((freq >= (256 * 8000)) && (freq <= (512 * 96000))) {
1465		rt5631->sysclk = freq;
1466		return 0;
1467	}
1468
1469	return -EINVAL;
1470}
1471
1472static int rt5631_codec_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
1473		int source, unsigned int freq_in, unsigned int freq_out)
1474{
1475	struct snd_soc_component *component = codec_dai->component;
1476	struct rt5631_priv *rt5631 = snd_soc_component_get_drvdata(component);
1477	int i, ret = -EINVAL;
1478
1479	dev_dbg(component->dev, "enter %s\n", __func__);
1480
1481	if (!freq_in || !freq_out) {
1482		dev_dbg(component->dev, "PLL disabled\n");
1483
1484		snd_soc_component_update_bits(component, RT5631_GLOBAL_CLK_CTRL,
1485			RT5631_SYSCLK_SOUR_SEL_MASK,
1486			RT5631_SYSCLK_SOUR_SEL_MCLK);
1487
1488		return 0;
1489	}
1490
1491	if (rt5631->master) {
1492		for (i = 0; i < ARRAY_SIZE(codec_master_pll_div); i++)
1493			if (freq_in == codec_master_pll_div[i].pll_in &&
1494			freq_out == codec_master_pll_div[i].pll_out) {
1495				dev_info(component->dev,
1496					"change PLL in master mode\n");
1497				snd_soc_component_write(component, RT5631_PLL_CTRL,
1498					codec_master_pll_div[i].reg_val);
1499				schedule_timeout_uninterruptible(
1500					msecs_to_jiffies(20));
1501				snd_soc_component_update_bits(component,
1502					RT5631_GLOBAL_CLK_CTRL,
1503					RT5631_SYSCLK_SOUR_SEL_MASK |
1504					RT5631_PLLCLK_SOUR_SEL_MASK,
1505					RT5631_SYSCLK_SOUR_SEL_PLL |
1506					RT5631_PLLCLK_SOUR_SEL_MCLK);
1507				ret = 0;
1508				break;
1509			}
1510	} else {
1511		for (i = 0; i < ARRAY_SIZE(codec_slave_pll_div); i++)
1512			if (freq_in == codec_slave_pll_div[i].pll_in &&
1513			freq_out == codec_slave_pll_div[i].pll_out) {
1514				dev_info(component->dev,
1515					"change PLL in slave mode\n");
1516				snd_soc_component_write(component, RT5631_PLL_CTRL,
1517					codec_slave_pll_div[i].reg_val);
1518				schedule_timeout_uninterruptible(
1519					msecs_to_jiffies(20));
1520				snd_soc_component_update_bits(component,
1521					RT5631_GLOBAL_CLK_CTRL,
1522					RT5631_SYSCLK_SOUR_SEL_MASK |
1523					RT5631_PLLCLK_SOUR_SEL_MASK,
1524					RT5631_SYSCLK_SOUR_SEL_PLL |
1525					RT5631_PLLCLK_SOUR_SEL_BCLK);
1526				ret = 0;
1527				break;
1528			}
1529	}
1530
1531	return ret;
1532}
1533
1534static int rt5631_set_bias_level(struct snd_soc_component *component,
1535			enum snd_soc_bias_level level)
1536{
1537	struct rt5631_priv *rt5631 = snd_soc_component_get_drvdata(component);
1538
1539	switch (level) {
1540	case SND_SOC_BIAS_ON:
1541	case SND_SOC_BIAS_PREPARE:
1542		snd_soc_component_update_bits(component, RT5631_PWR_MANAG_ADD2,
1543			RT5631_PWR_MICBIAS1_VOL | RT5631_PWR_MICBIAS2_VOL,
1544			RT5631_PWR_MICBIAS1_VOL | RT5631_PWR_MICBIAS2_VOL);
1545		break;
1546
1547	case SND_SOC_BIAS_STANDBY:
1548		if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_OFF) {
1549			snd_soc_component_update_bits(component, RT5631_PWR_MANAG_ADD3,
1550				RT5631_PWR_VREF | RT5631_PWR_MAIN_BIAS,
1551				RT5631_PWR_VREF | RT5631_PWR_MAIN_BIAS);
1552			msleep(80);
1553			snd_soc_component_update_bits(component, RT5631_PWR_MANAG_ADD3,
1554				RT5631_PWR_FAST_VREF_CTRL,
1555				RT5631_PWR_FAST_VREF_CTRL);
1556			regcache_cache_only(rt5631->regmap, false);
1557			regcache_sync(rt5631->regmap);
1558		}
1559		break;
1560
1561	case SND_SOC_BIAS_OFF:
1562		snd_soc_component_write(component, RT5631_PWR_MANAG_ADD1, 0x0000);
1563		snd_soc_component_write(component, RT5631_PWR_MANAG_ADD2, 0x0000);
1564		snd_soc_component_write(component, RT5631_PWR_MANAG_ADD3, 0x0000);
1565		snd_soc_component_write(component, RT5631_PWR_MANAG_ADD4, 0x0000);
1566		break;
1567
1568	default:
1569		break;
1570	}
1571
1572	return 0;
1573}
1574
1575static int rt5631_probe(struct snd_soc_component *component)
1576{
1577	struct rt5631_priv *rt5631 = snd_soc_component_get_drvdata(component);
1578	unsigned int val;
1579
1580	val = rt5631_read_index(component, RT5631_ADDA_MIXER_INTL_REG3);
1581	if (val & 0x0002)
1582		rt5631->codec_version = 1;
1583	else
1584		rt5631->codec_version = 0;
1585
1586	rt5631_reset(component);
1587	snd_soc_component_update_bits(component, RT5631_PWR_MANAG_ADD3,
1588		RT5631_PWR_VREF | RT5631_PWR_MAIN_BIAS,
1589		RT5631_PWR_VREF | RT5631_PWR_MAIN_BIAS);
1590	msleep(80);
1591	snd_soc_component_update_bits(component, RT5631_PWR_MANAG_ADD3,
1592		RT5631_PWR_FAST_VREF_CTRL, RT5631_PWR_FAST_VREF_CTRL);
1593	/* enable HP zero cross */
1594	snd_soc_component_write(component, RT5631_INT_ST_IRQ_CTRL_2, 0x0f18);
1595	/* power off ClassD auto Recovery */
1596	if (rt5631->codec_version)
1597		snd_soc_component_update_bits(component, RT5631_INT_ST_IRQ_CTRL_2,
1598					0x2000, 0x2000);
1599	else
1600		snd_soc_component_update_bits(component, RT5631_INT_ST_IRQ_CTRL_2,
1601					0x2000, 0);
1602	/* DMIC */
1603	if (rt5631->dmic_used_flag) {
1604		snd_soc_component_update_bits(component, RT5631_GPIO_CTRL,
1605			RT5631_GPIO_PIN_FUN_SEL_MASK |
1606			RT5631_GPIO_DMIC_FUN_SEL_MASK,
1607			RT5631_GPIO_PIN_FUN_SEL_GPIO_DIMC |
1608			RT5631_GPIO_DMIC_FUN_SEL_DIMC);
1609		snd_soc_component_update_bits(component, RT5631_DIG_MIC_CTRL,
1610			RT5631_DMIC_L_CH_LATCH_MASK |
1611			RT5631_DMIC_R_CH_LATCH_MASK,
1612			RT5631_DMIC_L_CH_LATCH_FALLING |
1613			RT5631_DMIC_R_CH_LATCH_RISING);
1614	}
1615
1616	snd_soc_component_init_bias_level(component, SND_SOC_BIAS_STANDBY);
1617
1618	return 0;
1619}
1620
1621#define RT5631_STEREO_RATES SNDRV_PCM_RATE_8000_96000
1622#define RT5631_FORMAT	(SNDRV_PCM_FMTBIT_S16_LE | \
1623			SNDRV_PCM_FMTBIT_S20_3LE | \
1624			SNDRV_PCM_FMTBIT_S24_LE | \
1625			SNDRV_PCM_FMTBIT_S8)
1626
1627static const struct snd_soc_dai_ops rt5631_ops = {
1628	.hw_params = rt5631_hifi_pcm_params,
1629	.set_fmt = rt5631_hifi_codec_set_dai_fmt,
1630	.set_sysclk = rt5631_hifi_codec_set_dai_sysclk,
1631	.set_pll = rt5631_codec_set_dai_pll,
1632};
1633
1634static struct snd_soc_dai_driver rt5631_dai[] = {
1635	{
1636		.name = "rt5631-hifi",
1637		.id = 1,
1638		.playback = {
1639			.stream_name = "HIFI Playback",
1640			.channels_min = 1,
1641			.channels_max = 2,
1642			.rates = RT5631_STEREO_RATES,
1643			.formats = RT5631_FORMAT,
1644		},
1645		.capture = {
1646			.stream_name = "HIFI Capture",
1647			.channels_min = 1,
1648			.channels_max = 2,
1649			.rates = RT5631_STEREO_RATES,
1650			.formats = RT5631_FORMAT,
1651		},
1652		.ops = &rt5631_ops,
1653	},
1654};
1655
1656static const struct snd_soc_component_driver soc_component_dev_rt5631 = {
1657	.probe			= rt5631_probe,
1658	.set_bias_level		= rt5631_set_bias_level,
1659	.controls		= rt5631_snd_controls,
1660	.num_controls		= ARRAY_SIZE(rt5631_snd_controls),
1661	.dapm_widgets		= rt5631_dapm_widgets,
1662	.num_dapm_widgets	= ARRAY_SIZE(rt5631_dapm_widgets),
1663	.dapm_routes		= rt5631_dapm_routes,
1664	.num_dapm_routes	= ARRAY_SIZE(rt5631_dapm_routes),
1665	.suspend_bias_off	= 1,
1666	.idle_bias_on		= 1,
1667	.use_pmdown_time	= 1,
1668	.endianness		= 1,
1669};
1670
1671static const struct i2c_device_id rt5631_i2c_id[] = {
1672	{ "rt5631" },
1673	{ "alc5631" },
1674	{ }
1675};
1676MODULE_DEVICE_TABLE(i2c, rt5631_i2c_id);
1677
1678#ifdef CONFIG_OF
1679static const struct of_device_id rt5631_i2c_dt_ids[] = {
1680	{ .compatible = "realtek,rt5631"},
1681	{ .compatible = "realtek,alc5631"},
1682	{ }
1683};
1684MODULE_DEVICE_TABLE(of, rt5631_i2c_dt_ids);
1685#endif
1686
1687static const struct regmap_config rt5631_regmap_config = {
1688	.reg_bits = 8,
1689	.val_bits = 16,
1690
1691	.readable_reg = rt5631_readable_register,
1692	.volatile_reg = rt5631_volatile_register,
1693	.max_register = RT5631_VENDOR_ID2,
1694	.reg_defaults = rt5631_reg,
1695	.num_reg_defaults = ARRAY_SIZE(rt5631_reg),
1696	.cache_type = REGCACHE_MAPLE,
1697	.use_single_read = true,
1698	.use_single_write = true,
1699};
1700
1701static int rt5631_i2c_probe(struct i2c_client *i2c)
 
1702{
1703	struct rt5631_priv *rt5631;
1704	int ret;
1705
1706	rt5631 = devm_kzalloc(&i2c->dev, sizeof(struct rt5631_priv),
1707			      GFP_KERNEL);
1708	if (NULL == rt5631)
1709		return -ENOMEM;
1710
1711	i2c_set_clientdata(i2c, rt5631);
1712
1713	rt5631->regmap = devm_regmap_init_i2c(i2c, &rt5631_regmap_config);
1714	if (IS_ERR(rt5631->regmap))
1715		return PTR_ERR(rt5631->regmap);
1716
1717	ret = devm_snd_soc_register_component(&i2c->dev,
1718			&soc_component_dev_rt5631,
1719			rt5631_dai, ARRAY_SIZE(rt5631_dai));
1720	return ret;
1721}
1722
1723static void rt5631_i2c_remove(struct i2c_client *client)
1724{}
 
 
 
1725
1726static struct i2c_driver rt5631_i2c_driver = {
1727	.driver = {
1728		.name = "rt5631",
1729		.of_match_table = of_match_ptr(rt5631_i2c_dt_ids),
1730	},
1731	.probe    = rt5631_i2c_probe,
1732	.remove   = rt5631_i2c_remove,
1733	.id_table = rt5631_i2c_id,
1734};
1735
1736module_i2c_driver(rt5631_i2c_driver);
1737
1738MODULE_DESCRIPTION("ASoC RT5631 driver");
1739MODULE_AUTHOR("flove <flove@realtek.com>");
1740MODULE_LICENSE("GPL");
v4.10.11
 
   1/*
   2 * rt5631.c  --  RT5631 ALSA Soc Audio driver
   3 *
   4 * Copyright 2011 Realtek Microelectronics
   5 *
   6 * Author: flove <flove@realtek.com>
   7 *
   8 * Based on WM8753.c
   9 *
  10 * This program is free software; you can redistribute it and/or modify
  11 * it under the terms of the GNU General Public License version 2 as
  12 * published by the Free Software Foundation.
  13 *
  14 */
  15#include <linux/module.h>
  16#include <linux/moduleparam.h>
  17#include <linux/init.h>
  18#include <linux/delay.h>
  19#include <linux/pm.h>
  20#include <linux/i2c.h>
  21#include <linux/regmap.h>
  22#include <sound/core.h>
  23#include <sound/pcm.h>
  24#include <sound/pcm_params.h>
  25#include <sound/soc.h>
  26#include <sound/soc-dapm.h>
  27#include <sound/initval.h>
  28#include <sound/tlv.h>
  29
  30#include "rt5631.h"
  31
  32struct rt5631_priv {
  33	struct regmap *regmap;
  34	int codec_version;
  35	int master;
  36	int sysclk;
  37	int rx_rate;
  38	int bclk_rate;
  39	int dmic_used_flag;
  40};
  41
  42static const struct reg_default rt5631_reg[] = {
  43	{ RT5631_SPK_OUT_VOL, 0x8888 },
  44	{ RT5631_HP_OUT_VOL, 0x8080 },
  45	{ RT5631_MONO_AXO_1_2_VOL, 0xa080 },
  46	{ RT5631_AUX_IN_VOL, 0x0808 },
  47	{ RT5631_ADC_REC_MIXER, 0xf0f0 },
  48	{ RT5631_VDAC_DIG_VOL, 0x0010 },
  49	{ RT5631_OUTMIXER_L_CTRL, 0xffc0 },
  50	{ RT5631_OUTMIXER_R_CTRL, 0xffc0 },
  51	{ RT5631_AXO1MIXER_CTRL, 0x88c0 },
  52	{ RT5631_AXO2MIXER_CTRL, 0x88c0 },
  53	{ RT5631_DIG_MIC_CTRL, 0x3000 },
  54	{ RT5631_MONO_INPUT_VOL, 0x8808 },
  55	{ RT5631_SPK_MIXER_CTRL, 0xf8f8 },
  56	{ RT5631_SPK_MONO_OUT_CTRL, 0xfc00 },
  57	{ RT5631_SPK_MONO_HP_OUT_CTRL, 0x4440 },
  58	{ RT5631_SDP_CTRL, 0x8000 },
  59	{ RT5631_MONO_SDP_CTRL, 0x8000 },
  60	{ RT5631_STEREO_AD_DA_CLK_CTRL, 0x2010 },
  61	{ RT5631_GEN_PUR_CTRL_REG, 0x0e00 },
  62	{ RT5631_INT_ST_IRQ_CTRL_2, 0x071a },
  63	{ RT5631_MISC_CTRL, 0x2040 },
  64	{ RT5631_DEPOP_FUN_CTRL_2, 0x8000 },
  65	{ RT5631_SOFT_VOL_CTRL, 0x07e0 },
  66	{ RT5631_ALC_CTRL_1, 0x0206 },
  67	{ RT5631_ALC_CTRL_3, 0x2000 },
  68	{ RT5631_PSEUDO_SPATL_CTRL, 0x0553 },
  69};
  70
  71/**
  72 * rt5631_write_index - write index register of 2nd layer
  73 */
  74static void rt5631_write_index(struct snd_soc_codec *codec,
  75		unsigned int reg, unsigned int value)
  76{
  77	snd_soc_write(codec, RT5631_INDEX_ADD, reg);
  78	snd_soc_write(codec, RT5631_INDEX_DATA, value);
  79}
  80
  81/**
  82 * rt5631_read_index - read index register of 2nd layer
  83 */
  84static unsigned int rt5631_read_index(struct snd_soc_codec *codec,
  85				unsigned int reg)
  86{
  87	unsigned int value;
  88
  89	snd_soc_write(codec, RT5631_INDEX_ADD, reg);
  90	value = snd_soc_read(codec, RT5631_INDEX_DATA);
  91
  92	return value;
  93}
  94
  95static int rt5631_reset(struct snd_soc_codec *codec)
  96{
  97	return snd_soc_write(codec, RT5631_RESET, 0);
  98}
  99
 100static bool rt5631_volatile_register(struct device *dev, unsigned int reg)
 101{
 102	switch (reg) {
 103	case RT5631_RESET:
 104	case RT5631_INT_ST_IRQ_CTRL_2:
 105	case RT5631_INDEX_ADD:
 106	case RT5631_INDEX_DATA:
 107	case RT5631_EQ_CTRL:
 108		return 1;
 109	default:
 110		return 0;
 111	}
 112}
 113
 114static bool rt5631_readable_register(struct device *dev, unsigned int reg)
 115{
 116	switch (reg) {
 117	case RT5631_RESET:
 118	case RT5631_SPK_OUT_VOL:
 119	case RT5631_HP_OUT_VOL:
 120	case RT5631_MONO_AXO_1_2_VOL:
 121	case RT5631_AUX_IN_VOL:
 122	case RT5631_STEREO_DAC_VOL_1:
 123	case RT5631_MIC_CTRL_1:
 124	case RT5631_STEREO_DAC_VOL_2:
 125	case RT5631_ADC_CTRL_1:
 126	case RT5631_ADC_REC_MIXER:
 127	case RT5631_ADC_CTRL_2:
 128	case RT5631_VDAC_DIG_VOL:
 129	case RT5631_OUTMIXER_L_CTRL:
 130	case RT5631_OUTMIXER_R_CTRL:
 131	case RT5631_AXO1MIXER_CTRL:
 132	case RT5631_AXO2MIXER_CTRL:
 133	case RT5631_MIC_CTRL_2:
 134	case RT5631_DIG_MIC_CTRL:
 135	case RT5631_MONO_INPUT_VOL:
 136	case RT5631_SPK_MIXER_CTRL:
 137	case RT5631_SPK_MONO_OUT_CTRL:
 138	case RT5631_SPK_MONO_HP_OUT_CTRL:
 139	case RT5631_SDP_CTRL:
 140	case RT5631_MONO_SDP_CTRL:
 141	case RT5631_STEREO_AD_DA_CLK_CTRL:
 142	case RT5631_PWR_MANAG_ADD1:
 143	case RT5631_PWR_MANAG_ADD2:
 144	case RT5631_PWR_MANAG_ADD3:
 145	case RT5631_PWR_MANAG_ADD4:
 146	case RT5631_GEN_PUR_CTRL_REG:
 147	case RT5631_GLOBAL_CLK_CTRL:
 148	case RT5631_PLL_CTRL:
 149	case RT5631_INT_ST_IRQ_CTRL_1:
 150	case RT5631_INT_ST_IRQ_CTRL_2:
 151	case RT5631_GPIO_CTRL:
 152	case RT5631_MISC_CTRL:
 153	case RT5631_DEPOP_FUN_CTRL_1:
 154	case RT5631_DEPOP_FUN_CTRL_2:
 155	case RT5631_JACK_DET_CTRL:
 156	case RT5631_SOFT_VOL_CTRL:
 157	case RT5631_ALC_CTRL_1:
 158	case RT5631_ALC_CTRL_2:
 159	case RT5631_ALC_CTRL_3:
 160	case RT5631_PSEUDO_SPATL_CTRL:
 161	case RT5631_INDEX_ADD:
 162	case RT5631_INDEX_DATA:
 163	case RT5631_EQ_CTRL:
 164	case RT5631_VENDOR_ID:
 165	case RT5631_VENDOR_ID1:
 166	case RT5631_VENDOR_ID2:
 167		return 1;
 168	default:
 169		return 0;
 170	}
 171}
 172
 173static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -4650, 150, 0);
 174static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -95625, 375, 0);
 175static const DECLARE_TLV_DB_SCALE(in_vol_tlv, -3450, 150, 0);
 176/* {0, +20, +24, +30, +35, +40, +44, +50, +52}dB */
 177static const DECLARE_TLV_DB_RANGE(mic_bst_tlv,
 178	0, 0, TLV_DB_SCALE_ITEM(0, 0, 0),
 179	1, 1, TLV_DB_SCALE_ITEM(2000, 0, 0),
 180	2, 2, TLV_DB_SCALE_ITEM(2400, 0, 0),
 181	3, 5, TLV_DB_SCALE_ITEM(3000, 500, 0),
 182	6, 6, TLV_DB_SCALE_ITEM(4400, 0, 0),
 183	7, 7, TLV_DB_SCALE_ITEM(5000, 0, 0),
 184	8, 8, TLV_DB_SCALE_ITEM(5200, 0, 0)
 185);
 186
 187static int rt5631_dmic_get(struct snd_kcontrol *kcontrol,
 188		struct snd_ctl_elem_value *ucontrol)
 189{
 190	struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
 191	struct rt5631_priv *rt5631 = snd_soc_codec_get_drvdata(codec);
 192
 193	ucontrol->value.integer.value[0] = rt5631->dmic_used_flag;
 194
 195	return 0;
 196}
 197
 198static int rt5631_dmic_put(struct snd_kcontrol *kcontrol,
 199		struct snd_ctl_elem_value *ucontrol)
 200{
 201	struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
 202	struct rt5631_priv *rt5631 = snd_soc_codec_get_drvdata(codec);
 203
 204	rt5631->dmic_used_flag = ucontrol->value.integer.value[0];
 205	return 0;
 206}
 207
 208/* MIC Input Type */
 209static const char *rt5631_input_mode[] = {
 210	"Single ended", "Differential"};
 211
 212static SOC_ENUM_SINGLE_DECL(rt5631_mic1_mode_enum, RT5631_MIC_CTRL_1,
 213			    RT5631_MIC1_DIFF_INPUT_SHIFT, rt5631_input_mode);
 214
 215static SOC_ENUM_SINGLE_DECL(rt5631_mic2_mode_enum, RT5631_MIC_CTRL_1,
 216			    RT5631_MIC2_DIFF_INPUT_SHIFT, rt5631_input_mode);
 217
 218/* MONO Input Type */
 219static SOC_ENUM_SINGLE_DECL(rt5631_monoin_mode_enum, RT5631_MONO_INPUT_VOL,
 220			    RT5631_MONO_DIFF_INPUT_SHIFT, rt5631_input_mode);
 221
 222/* SPK Ratio Gain Control */
 223static const char *rt5631_spk_ratio[] = {"1.00x", "1.09x", "1.27x", "1.44x",
 224			"1.56x", "1.68x", "1.99x", "2.34x"};
 225
 226static SOC_ENUM_SINGLE_DECL(rt5631_spk_ratio_enum, RT5631_GEN_PUR_CTRL_REG,
 227			    RT5631_SPK_AMP_RATIO_CTRL_SHIFT, rt5631_spk_ratio);
 228
 229static const struct snd_kcontrol_new rt5631_snd_controls[] = {
 230	/* MIC */
 231	SOC_ENUM("MIC1 Mode Control",  rt5631_mic1_mode_enum),
 232	SOC_SINGLE_TLV("MIC1 Boost", RT5631_MIC_CTRL_2,
 233		RT5631_MIC1_BOOST_SHIFT, 8, 0, mic_bst_tlv),
 234	SOC_ENUM("MIC2 Mode Control", rt5631_mic2_mode_enum),
 235	SOC_SINGLE_TLV("MIC2 Boost", RT5631_MIC_CTRL_2,
 236		RT5631_MIC2_BOOST_SHIFT, 8, 0, mic_bst_tlv),
 237	/* MONO IN */
 238	SOC_ENUM("MONOIN Mode Control", rt5631_monoin_mode_enum),
 239	SOC_DOUBLE_TLV("MONOIN_RX Capture Volume", RT5631_MONO_INPUT_VOL,
 240			RT5631_L_VOL_SHIFT, RT5631_R_VOL_SHIFT,
 241			RT5631_VOL_MASK, 1, in_vol_tlv),
 242	/* AXI */
 243	SOC_DOUBLE_TLV("AXI Capture Volume", RT5631_AUX_IN_VOL,
 244			RT5631_L_VOL_SHIFT, RT5631_R_VOL_SHIFT,
 245			RT5631_VOL_MASK, 1, in_vol_tlv),
 246	/* DAC */
 247	SOC_DOUBLE_TLV("PCM Playback Volume", RT5631_STEREO_DAC_VOL_2,
 248			RT5631_L_VOL_SHIFT, RT5631_R_VOL_SHIFT,
 249			RT5631_DAC_VOL_MASK, 1, dac_vol_tlv),
 250	SOC_DOUBLE("PCM Playback Switch", RT5631_STEREO_DAC_VOL_1,
 251			RT5631_L_MUTE_SHIFT, RT5631_R_MUTE_SHIFT, 1, 1),
 252	/* AXO */
 253	SOC_SINGLE("AXO1 Playback Switch", RT5631_MONO_AXO_1_2_VOL,
 254				RT5631_L_MUTE_SHIFT, 1, 1),
 255	SOC_SINGLE("AXO2 Playback Switch", RT5631_MONO_AXO_1_2_VOL,
 256				RT5631_R_VOL_SHIFT, 1, 1),
 257	/* OUTVOL */
 258	SOC_DOUBLE("OUTVOL Channel Switch", RT5631_SPK_OUT_VOL,
 259		RT5631_L_EN_SHIFT, RT5631_R_EN_SHIFT, 1, 0),
 260
 261	/* SPK */
 262	SOC_DOUBLE("Speaker Playback Switch", RT5631_SPK_OUT_VOL,
 263		RT5631_L_MUTE_SHIFT, RT5631_R_MUTE_SHIFT, 1, 1),
 264	SOC_DOUBLE_TLV("Speaker Playback Volume", RT5631_SPK_OUT_VOL,
 265		RT5631_L_VOL_SHIFT, RT5631_R_VOL_SHIFT, 39, 1, out_vol_tlv),
 266	/* MONO OUT */
 267	SOC_SINGLE("MONO Playback Switch", RT5631_MONO_AXO_1_2_VOL,
 268				RT5631_MUTE_MONO_SHIFT, 1, 1),
 269	/* HP */
 270	SOC_DOUBLE("HP Playback Switch", RT5631_HP_OUT_VOL,
 271		RT5631_L_MUTE_SHIFT, RT5631_R_MUTE_SHIFT, 1, 1),
 272	SOC_DOUBLE_TLV("HP Playback Volume", RT5631_HP_OUT_VOL,
 273		RT5631_L_VOL_SHIFT, RT5631_R_VOL_SHIFT,
 274		RT5631_VOL_MASK, 1, out_vol_tlv),
 275	/* DMIC */
 276	SOC_SINGLE_EXT("DMIC Switch", 0, 0, 1, 0,
 277		rt5631_dmic_get, rt5631_dmic_put),
 278	SOC_DOUBLE("DMIC Capture Switch", RT5631_DIG_MIC_CTRL,
 279		RT5631_DMIC_L_CH_MUTE_SHIFT,
 280		RT5631_DMIC_R_CH_MUTE_SHIFT, 1, 1),
 281
 282	/* SPK Ratio Gain Control */
 283	SOC_ENUM("SPK Ratio Control", rt5631_spk_ratio_enum),
 284};
 285
 286static int check_sysclk1_source(struct snd_soc_dapm_widget *source,
 287			 struct snd_soc_dapm_widget *sink)
 288{
 289	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
 290	unsigned int reg;
 291
 292	reg = snd_soc_read(codec, RT5631_GLOBAL_CLK_CTRL);
 293	return reg & RT5631_SYSCLK_SOUR_SEL_PLL;
 294}
 295
 296static int check_dmic_used(struct snd_soc_dapm_widget *source,
 297			 struct snd_soc_dapm_widget *sink)
 298{
 299	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
 300	struct rt5631_priv *rt5631 = snd_soc_codec_get_drvdata(codec);
 301	return rt5631->dmic_used_flag;
 302}
 303
 304static int check_dacl_to_outmixl(struct snd_soc_dapm_widget *source,
 305			 struct snd_soc_dapm_widget *sink)
 306{
 307	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
 308	unsigned int reg;
 309
 310	reg = snd_soc_read(codec, RT5631_OUTMIXER_L_CTRL);
 311	return !(reg & RT5631_M_DAC_L_TO_OUTMIXER_L);
 312}
 313
 314static int check_dacr_to_outmixr(struct snd_soc_dapm_widget *source,
 315			 struct snd_soc_dapm_widget *sink)
 316{
 317	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
 318	unsigned int reg;
 319
 320	reg = snd_soc_read(codec, RT5631_OUTMIXER_R_CTRL);
 321	return !(reg & RT5631_M_DAC_R_TO_OUTMIXER_R);
 322}
 323
 324static int check_dacl_to_spkmixl(struct snd_soc_dapm_widget *source,
 325			 struct snd_soc_dapm_widget *sink)
 326{
 327	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
 328	unsigned int reg;
 329
 330	reg = snd_soc_read(codec, RT5631_SPK_MIXER_CTRL);
 331	return !(reg & RT5631_M_DAC_L_TO_SPKMIXER_L);
 332}
 333
 334static int check_dacr_to_spkmixr(struct snd_soc_dapm_widget *source,
 335			 struct snd_soc_dapm_widget *sink)
 336{
 337	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
 338	unsigned int reg;
 339
 340	reg = snd_soc_read(codec, RT5631_SPK_MIXER_CTRL);
 341	return !(reg & RT5631_M_DAC_R_TO_SPKMIXER_R);
 342}
 343
 344static int check_adcl_select(struct snd_soc_dapm_widget *source,
 345			 struct snd_soc_dapm_widget *sink)
 346{
 347	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
 348	unsigned int reg;
 349
 350	reg = snd_soc_read(codec, RT5631_ADC_REC_MIXER);
 351	return !(reg & RT5631_M_MIC1_TO_RECMIXER_L);
 352}
 353
 354static int check_adcr_select(struct snd_soc_dapm_widget *source,
 355			 struct snd_soc_dapm_widget *sink)
 356{
 357	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(source->dapm);
 358	unsigned int reg;
 359
 360	reg = snd_soc_read(codec, RT5631_ADC_REC_MIXER);
 361	return !(reg & RT5631_M_MIC2_TO_RECMIXER_R);
 362}
 363
 364/**
 365 * onebit_depop_power_stage - auto depop in power stage.
 
 366 * @enable: power on/off
 367 *
 368 * When power on/off headphone, the depop sequence is done by hardware.
 369 */
 370static void onebit_depop_power_stage(struct snd_soc_codec *codec, int enable)
 371{
 372	unsigned int soft_vol, hp_zc;
 373
 374	/* enable one-bit depop function */
 375	snd_soc_update_bits(codec, RT5631_DEPOP_FUN_CTRL_2,
 376				RT5631_EN_ONE_BIT_DEPOP, 0);
 377
 378	/* keep soft volume and zero crossing setting */
 379	soft_vol = snd_soc_read(codec, RT5631_SOFT_VOL_CTRL);
 380	snd_soc_write(codec, RT5631_SOFT_VOL_CTRL, 0);
 381	hp_zc = snd_soc_read(codec, RT5631_INT_ST_IRQ_CTRL_2);
 382	snd_soc_write(codec, RT5631_INT_ST_IRQ_CTRL_2, hp_zc & 0xf7ff);
 383	if (enable) {
 384		/* config one-bit depop parameter */
 385		rt5631_write_index(codec, RT5631_TEST_MODE_CTRL, 0x84c0);
 386		rt5631_write_index(codec, RT5631_SPK_INTL_CTRL, 0x309f);
 387		rt5631_write_index(codec, RT5631_CP_INTL_REG2, 0x6530);
 388		/* power on capless block */
 389		snd_soc_write(codec, RT5631_DEPOP_FUN_CTRL_2,
 390				RT5631_EN_CAP_FREE_DEPOP);
 391	} else {
 392		/* power off capless block */
 393		snd_soc_write(codec, RT5631_DEPOP_FUN_CTRL_2, 0);
 394		msleep(100);
 395	}
 396
 397	/* recover soft volume and zero crossing setting */
 398	snd_soc_write(codec, RT5631_SOFT_VOL_CTRL, soft_vol);
 399	snd_soc_write(codec, RT5631_INT_ST_IRQ_CTRL_2, hp_zc);
 400}
 401
 402/**
 403 * onebit_depop_mute_stage - auto depop in mute stage.
 
 404 * @enable: mute/unmute
 405 *
 406 * When mute/unmute headphone, the depop sequence is done by hardware.
 407 */
 408static void onebit_depop_mute_stage(struct snd_soc_codec *codec, int enable)
 409{
 410	unsigned int soft_vol, hp_zc;
 411
 412	/* enable one-bit depop function */
 413	snd_soc_update_bits(codec, RT5631_DEPOP_FUN_CTRL_2,
 414				RT5631_EN_ONE_BIT_DEPOP, 0);
 415
 416	/* keep soft volume and zero crossing setting */
 417	soft_vol = snd_soc_read(codec, RT5631_SOFT_VOL_CTRL);
 418	snd_soc_write(codec, RT5631_SOFT_VOL_CTRL, 0);
 419	hp_zc = snd_soc_read(codec, RT5631_INT_ST_IRQ_CTRL_2);
 420	snd_soc_write(codec, RT5631_INT_ST_IRQ_CTRL_2, hp_zc & 0xf7ff);
 421	if (enable) {
 422		schedule_timeout_uninterruptible(msecs_to_jiffies(10));
 423		/* config one-bit depop parameter */
 424		rt5631_write_index(codec, RT5631_SPK_INTL_CTRL, 0x307f);
 425		snd_soc_update_bits(codec, RT5631_HP_OUT_VOL,
 426				RT5631_L_MUTE | RT5631_R_MUTE, 0);
 427		msleep(300);
 428	} else {
 429		snd_soc_update_bits(codec, RT5631_HP_OUT_VOL,
 430			RT5631_L_MUTE | RT5631_R_MUTE,
 431			RT5631_L_MUTE | RT5631_R_MUTE);
 432		msleep(100);
 433	}
 434
 435	/* recover soft volume and zero crossing setting */
 436	snd_soc_write(codec, RT5631_SOFT_VOL_CTRL, soft_vol);
 437	snd_soc_write(codec, RT5631_INT_ST_IRQ_CTRL_2, hp_zc);
 438}
 439
 440/**
 441 * onebit_depop_power_stage - step by step depop sequence in power stage.
 
 442 * @enable: power on/off
 443 *
 444 * When power on/off headphone, the depop sequence is done in step by step.
 445 */
 446static void depop_seq_power_stage(struct snd_soc_codec *codec, int enable)
 447{
 448	unsigned int soft_vol, hp_zc;
 449
 450	/* depop control by register */
 451	snd_soc_update_bits(codec, RT5631_DEPOP_FUN_CTRL_2,
 452		RT5631_EN_ONE_BIT_DEPOP, RT5631_EN_ONE_BIT_DEPOP);
 453
 454	/* keep soft volume and zero crossing setting */
 455	soft_vol = snd_soc_read(codec, RT5631_SOFT_VOL_CTRL);
 456	snd_soc_write(codec, RT5631_SOFT_VOL_CTRL, 0);
 457	hp_zc = snd_soc_read(codec, RT5631_INT_ST_IRQ_CTRL_2);
 458	snd_soc_write(codec, RT5631_INT_ST_IRQ_CTRL_2, hp_zc & 0xf7ff);
 459	if (enable) {
 460		/* config depop sequence parameter */
 461		rt5631_write_index(codec, RT5631_SPK_INTL_CTRL, 0x303e);
 462
 463		/* power on headphone and charge pump */
 464		snd_soc_update_bits(codec, RT5631_PWR_MANAG_ADD3,
 465			RT5631_PWR_CHARGE_PUMP | RT5631_PWR_HP_L_AMP |
 466			RT5631_PWR_HP_R_AMP,
 467			RT5631_PWR_CHARGE_PUMP | RT5631_PWR_HP_L_AMP |
 468			RT5631_PWR_HP_R_AMP);
 469
 470		/* power on soft generator and depop mode2 */
 471		snd_soc_write(codec, RT5631_DEPOP_FUN_CTRL_1,
 472			RT5631_POW_ON_SOFT_GEN | RT5631_EN_DEPOP2_FOR_HP);
 473		msleep(100);
 474
 475		/* stop depop mode */
 476		snd_soc_update_bits(codec, RT5631_PWR_MANAG_ADD3,
 477			RT5631_PWR_HP_DEPOP_DIS, RT5631_PWR_HP_DEPOP_DIS);
 478	} else {
 479		/* config depop sequence parameter */
 480		rt5631_write_index(codec, RT5631_SPK_INTL_CTRL, 0x303F);
 481		snd_soc_write(codec, RT5631_DEPOP_FUN_CTRL_1,
 482			RT5631_POW_ON_SOFT_GEN | RT5631_EN_MUTE_UNMUTE_DEPOP |
 483			RT5631_PD_HPAMP_L_ST_UP | RT5631_PD_HPAMP_R_ST_UP);
 484		msleep(75);
 485		snd_soc_write(codec, RT5631_DEPOP_FUN_CTRL_1,
 486			RT5631_POW_ON_SOFT_GEN | RT5631_PD_HPAMP_L_ST_UP |
 487			RT5631_PD_HPAMP_R_ST_UP);
 488
 489		/* start depop mode */
 490		snd_soc_update_bits(codec, RT5631_PWR_MANAG_ADD3,
 491				RT5631_PWR_HP_DEPOP_DIS, 0);
 492
 493		/* config depop sequence parameter */
 494		snd_soc_write(codec, RT5631_DEPOP_FUN_CTRL_1,
 495			RT5631_POW_ON_SOFT_GEN | RT5631_EN_DEPOP2_FOR_HP |
 496			RT5631_PD_HPAMP_L_ST_UP | RT5631_PD_HPAMP_R_ST_UP);
 497		msleep(80);
 498		snd_soc_write(codec, RT5631_DEPOP_FUN_CTRL_1,
 499			RT5631_POW_ON_SOFT_GEN);
 500
 501		/* power down headphone and charge pump */
 502		snd_soc_update_bits(codec, RT5631_PWR_MANAG_ADD3,
 503			RT5631_PWR_CHARGE_PUMP | RT5631_PWR_HP_L_AMP |
 504			RT5631_PWR_HP_R_AMP, 0);
 505	}
 506
 507	/* recover soft volume and zero crossing setting */
 508	snd_soc_write(codec, RT5631_SOFT_VOL_CTRL, soft_vol);
 509	snd_soc_write(codec, RT5631_INT_ST_IRQ_CTRL_2, hp_zc);
 510}
 511
 512/**
 513 * depop_seq_mute_stage - step by step depop sequence in mute stage.
 
 514 * @enable: mute/unmute
 515 *
 516 * When mute/unmute headphone, the depop sequence is done in step by step.
 517 */
 518static void depop_seq_mute_stage(struct snd_soc_codec *codec, int enable)
 519{
 520	unsigned int soft_vol, hp_zc;
 521
 522	/* depop control by register */
 523	snd_soc_update_bits(codec, RT5631_DEPOP_FUN_CTRL_2,
 524		RT5631_EN_ONE_BIT_DEPOP, RT5631_EN_ONE_BIT_DEPOP);
 525
 526	/* keep soft volume and zero crossing setting */
 527	soft_vol = snd_soc_read(codec, RT5631_SOFT_VOL_CTRL);
 528	snd_soc_write(codec, RT5631_SOFT_VOL_CTRL, 0);
 529	hp_zc = snd_soc_read(codec, RT5631_INT_ST_IRQ_CTRL_2);
 530	snd_soc_write(codec, RT5631_INT_ST_IRQ_CTRL_2, hp_zc & 0xf7ff);
 531	if (enable) {
 532		schedule_timeout_uninterruptible(msecs_to_jiffies(10));
 533
 534		/* config depop sequence parameter */
 535		rt5631_write_index(codec, RT5631_SPK_INTL_CTRL, 0x302f);
 536		snd_soc_write(codec, RT5631_DEPOP_FUN_CTRL_1,
 537			RT5631_POW_ON_SOFT_GEN | RT5631_EN_MUTE_UNMUTE_DEPOP |
 538			RT5631_EN_HP_R_M_UN_MUTE_DEPOP |
 539			RT5631_EN_HP_L_M_UN_MUTE_DEPOP);
 540
 541		snd_soc_update_bits(codec, RT5631_HP_OUT_VOL,
 542				RT5631_L_MUTE | RT5631_R_MUTE, 0);
 543		msleep(160);
 544	} else {
 545		/* config depop sequence parameter */
 546		rt5631_write_index(codec, RT5631_SPK_INTL_CTRL, 0x302f);
 547		snd_soc_write(codec, RT5631_DEPOP_FUN_CTRL_1,
 548			RT5631_POW_ON_SOFT_GEN | RT5631_EN_MUTE_UNMUTE_DEPOP |
 549			RT5631_EN_HP_R_M_UN_MUTE_DEPOP |
 550			RT5631_EN_HP_L_M_UN_MUTE_DEPOP);
 551
 552		snd_soc_update_bits(codec, RT5631_HP_OUT_VOL,
 553			RT5631_L_MUTE | RT5631_R_MUTE,
 554			RT5631_L_MUTE | RT5631_R_MUTE);
 555		msleep(150);
 556	}
 557
 558	/* recover soft volume and zero crossing setting */
 559	snd_soc_write(codec, RT5631_SOFT_VOL_CTRL, soft_vol);
 560	snd_soc_write(codec, RT5631_INT_ST_IRQ_CTRL_2, hp_zc);
 561}
 562
 563static int hp_event(struct snd_soc_dapm_widget *w,
 564	struct snd_kcontrol *kcontrol, int event)
 565{
 566	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
 567	struct rt5631_priv *rt5631 = snd_soc_codec_get_drvdata(codec);
 568
 569	switch (event) {
 570	case SND_SOC_DAPM_PRE_PMD:
 571		if (rt5631->codec_version) {
 572			onebit_depop_mute_stage(codec, 0);
 573			onebit_depop_power_stage(codec, 0);
 574		} else {
 575			depop_seq_mute_stage(codec, 0);
 576			depop_seq_power_stage(codec, 0);
 577		}
 578		break;
 579
 580	case SND_SOC_DAPM_POST_PMU:
 581		if (rt5631->codec_version) {
 582			onebit_depop_power_stage(codec, 1);
 583			onebit_depop_mute_stage(codec, 1);
 584		} else {
 585			depop_seq_power_stage(codec, 1);
 586			depop_seq_mute_stage(codec, 1);
 587		}
 588		break;
 589
 590	default:
 591		break;
 592	}
 593
 594	return 0;
 595}
 596
 597static int set_dmic_params(struct snd_soc_dapm_widget *w,
 598	struct snd_kcontrol *kcontrol, int event)
 599{
 600	struct snd_soc_codec *codec = snd_soc_dapm_to_codec(w->dapm);
 601	struct rt5631_priv *rt5631 = snd_soc_codec_get_drvdata(codec);
 602
 603	switch (rt5631->rx_rate) {
 604	case 44100:
 605	case 48000:
 606		snd_soc_update_bits(codec, RT5631_DIG_MIC_CTRL,
 607			RT5631_DMIC_CLK_CTRL_MASK,
 608			RT5631_DMIC_CLK_CTRL_TO_32FS);
 609		break;
 610
 611	case 32000:
 612	case 22050:
 613		snd_soc_update_bits(codec, RT5631_DIG_MIC_CTRL,
 614			RT5631_DMIC_CLK_CTRL_MASK,
 615			RT5631_DMIC_CLK_CTRL_TO_64FS);
 616		break;
 617
 618	case 16000:
 619	case 11025:
 620	case 8000:
 621		snd_soc_update_bits(codec, RT5631_DIG_MIC_CTRL,
 622			RT5631_DMIC_CLK_CTRL_MASK,
 623			RT5631_DMIC_CLK_CTRL_TO_128FS);
 624		break;
 625
 626	default:
 627		return -EINVAL;
 628	}
 629
 630	return 0;
 631}
 632
 633static const struct snd_kcontrol_new rt5631_recmixl_mixer_controls[] = {
 634	SOC_DAPM_SINGLE("OUTMIXL Capture Switch", RT5631_ADC_REC_MIXER,
 635			RT5631_M_OUTMIXL_RECMIXL_BIT, 1, 1),
 636	SOC_DAPM_SINGLE("MIC1_BST1 Capture Switch", RT5631_ADC_REC_MIXER,
 637			RT5631_M_MIC1_RECMIXL_BIT, 1, 1),
 638	SOC_DAPM_SINGLE("AXILVOL Capture Switch", RT5631_ADC_REC_MIXER,
 639			RT5631_M_AXIL_RECMIXL_BIT, 1, 1),
 640	SOC_DAPM_SINGLE("MONOIN_RX Capture Switch", RT5631_ADC_REC_MIXER,
 641			RT5631_M_MONO_IN_RECMIXL_BIT, 1, 1),
 642};
 643
 644static const struct snd_kcontrol_new rt5631_recmixr_mixer_controls[] = {
 645	SOC_DAPM_SINGLE("MONOIN_RX Capture Switch", RT5631_ADC_REC_MIXER,
 646			RT5631_M_MONO_IN_RECMIXR_BIT, 1, 1),
 647	SOC_DAPM_SINGLE("AXIRVOL Capture Switch", RT5631_ADC_REC_MIXER,
 648			RT5631_M_AXIR_RECMIXR_BIT, 1, 1),
 649	SOC_DAPM_SINGLE("MIC2_BST2 Capture Switch", RT5631_ADC_REC_MIXER,
 650			RT5631_M_MIC2_RECMIXR_BIT, 1, 1),
 651	SOC_DAPM_SINGLE("OUTMIXR Capture Switch", RT5631_ADC_REC_MIXER,
 652			RT5631_M_OUTMIXR_RECMIXR_BIT, 1, 1),
 653};
 654
 655static const struct snd_kcontrol_new rt5631_spkmixl_mixer_controls[] = {
 656	SOC_DAPM_SINGLE("RECMIXL Playback Switch", RT5631_SPK_MIXER_CTRL,
 657			RT5631_M_RECMIXL_SPKMIXL_BIT, 1, 1),
 658	SOC_DAPM_SINGLE("MIC1_P Playback Switch", RT5631_SPK_MIXER_CTRL,
 659			RT5631_M_MIC1P_SPKMIXL_BIT, 1, 1),
 660	SOC_DAPM_SINGLE("DACL Playback Switch", RT5631_SPK_MIXER_CTRL,
 661			RT5631_M_DACL_SPKMIXL_BIT, 1, 1),
 662	SOC_DAPM_SINGLE("OUTMIXL Playback Switch", RT5631_SPK_MIXER_CTRL,
 663			RT5631_M_OUTMIXL_SPKMIXL_BIT, 1, 1),
 664};
 665
 666static const struct snd_kcontrol_new rt5631_spkmixr_mixer_controls[] = {
 667	SOC_DAPM_SINGLE("OUTMIXR Playback Switch", RT5631_SPK_MIXER_CTRL,
 668			RT5631_M_OUTMIXR_SPKMIXR_BIT, 1, 1),
 669	SOC_DAPM_SINGLE("DACR Playback Switch", RT5631_SPK_MIXER_CTRL,
 670			RT5631_M_DACR_SPKMIXR_BIT, 1, 1),
 671	SOC_DAPM_SINGLE("MIC2_P Playback Switch", RT5631_SPK_MIXER_CTRL,
 672			RT5631_M_MIC2P_SPKMIXR_BIT, 1, 1),
 673	SOC_DAPM_SINGLE("RECMIXR Playback Switch", RT5631_SPK_MIXER_CTRL,
 674			RT5631_M_RECMIXR_SPKMIXR_BIT, 1, 1),
 675};
 676
 677static const struct snd_kcontrol_new rt5631_outmixl_mixer_controls[] = {
 678	SOC_DAPM_SINGLE("RECMIXL Playback Switch", RT5631_OUTMIXER_L_CTRL,
 679				RT5631_M_RECMIXL_OUTMIXL_BIT, 1, 1),
 680	SOC_DAPM_SINGLE("RECMIXR Playback Switch", RT5631_OUTMIXER_L_CTRL,
 681				RT5631_M_RECMIXR_OUTMIXL_BIT, 1, 1),
 682	SOC_DAPM_SINGLE("DACL Playback Switch", RT5631_OUTMIXER_L_CTRL,
 683				RT5631_M_DACL_OUTMIXL_BIT, 1, 1),
 684	SOC_DAPM_SINGLE("MIC1_BST1 Playback Switch", RT5631_OUTMIXER_L_CTRL,
 685				RT5631_M_MIC1_OUTMIXL_BIT, 1, 1),
 686	SOC_DAPM_SINGLE("MIC2_BST2 Playback Switch", RT5631_OUTMIXER_L_CTRL,
 687				RT5631_M_MIC2_OUTMIXL_BIT, 1, 1),
 688	SOC_DAPM_SINGLE("MONOIN_RXP Playback Switch", RT5631_OUTMIXER_L_CTRL,
 689				RT5631_M_MONO_INP_OUTMIXL_BIT, 1, 1),
 690	SOC_DAPM_SINGLE("AXILVOL Playback Switch", RT5631_OUTMIXER_L_CTRL,
 691				RT5631_M_AXIL_OUTMIXL_BIT, 1, 1),
 692	SOC_DAPM_SINGLE("AXIRVOL Playback Switch", RT5631_OUTMIXER_L_CTRL,
 693				RT5631_M_AXIR_OUTMIXL_BIT, 1, 1),
 694	SOC_DAPM_SINGLE("VDAC Playback Switch", RT5631_OUTMIXER_L_CTRL,
 695				RT5631_M_VDAC_OUTMIXL_BIT, 1, 1),
 696};
 697
 698static const struct snd_kcontrol_new rt5631_outmixr_mixer_controls[] = {
 699	SOC_DAPM_SINGLE("VDAC Playback Switch", RT5631_OUTMIXER_R_CTRL,
 700				RT5631_M_VDAC_OUTMIXR_BIT, 1, 1),
 701	SOC_DAPM_SINGLE("AXIRVOL Playback Switch", RT5631_OUTMIXER_R_CTRL,
 702				RT5631_M_AXIR_OUTMIXR_BIT, 1, 1),
 703	SOC_DAPM_SINGLE("AXILVOL Playback Switch", RT5631_OUTMIXER_R_CTRL,
 704				RT5631_M_AXIL_OUTMIXR_BIT, 1, 1),
 705	SOC_DAPM_SINGLE("MONOIN_RXN Playback Switch", RT5631_OUTMIXER_R_CTRL,
 706				RT5631_M_MONO_INN_OUTMIXR_BIT, 1, 1),
 707	SOC_DAPM_SINGLE("MIC2_BST2 Playback Switch", RT5631_OUTMIXER_R_CTRL,
 708				RT5631_M_MIC2_OUTMIXR_BIT, 1, 1),
 709	SOC_DAPM_SINGLE("MIC1_BST1 Playback Switch", RT5631_OUTMIXER_R_CTRL,
 710				RT5631_M_MIC1_OUTMIXR_BIT, 1, 1),
 711	SOC_DAPM_SINGLE("DACR Playback Switch", RT5631_OUTMIXER_R_CTRL,
 712				RT5631_M_DACR_OUTMIXR_BIT, 1, 1),
 713	SOC_DAPM_SINGLE("RECMIXR Playback Switch", RT5631_OUTMIXER_R_CTRL,
 714				RT5631_M_RECMIXR_OUTMIXR_BIT, 1, 1),
 715	SOC_DAPM_SINGLE("RECMIXL Playback Switch", RT5631_OUTMIXER_R_CTRL,
 716				RT5631_M_RECMIXL_OUTMIXR_BIT, 1, 1),
 717};
 718
 719static const struct snd_kcontrol_new rt5631_AXO1MIX_mixer_controls[] = {
 720	SOC_DAPM_SINGLE("MIC1_BST1 Playback Switch", RT5631_AXO1MIXER_CTRL,
 721				RT5631_M_MIC1_AXO1MIX_BIT , 1, 1),
 722	SOC_DAPM_SINGLE("MIC2_BST2 Playback Switch", RT5631_AXO1MIXER_CTRL,
 723				RT5631_M_MIC2_AXO1MIX_BIT, 1, 1),
 724	SOC_DAPM_SINGLE("OUTVOLL Playback Switch", RT5631_AXO1MIXER_CTRL,
 725				RT5631_M_OUTMIXL_AXO1MIX_BIT , 1 , 1),
 726	SOC_DAPM_SINGLE("OUTVOLR Playback Switch", RT5631_AXO1MIXER_CTRL,
 727				RT5631_M_OUTMIXR_AXO1MIX_BIT, 1, 1),
 728};
 729
 730static const struct snd_kcontrol_new rt5631_AXO2MIX_mixer_controls[] = {
 731	SOC_DAPM_SINGLE("MIC1_BST1 Playback Switch", RT5631_AXO2MIXER_CTRL,
 732				RT5631_M_MIC1_AXO2MIX_BIT, 1, 1),
 733	SOC_DAPM_SINGLE("MIC2_BST2 Playback Switch", RT5631_AXO2MIXER_CTRL,
 734				RT5631_M_MIC2_AXO2MIX_BIT, 1, 1),
 735	SOC_DAPM_SINGLE("OUTVOLL Playback Switch", RT5631_AXO2MIXER_CTRL,
 736				RT5631_M_OUTMIXL_AXO2MIX_BIT, 1, 1),
 737	SOC_DAPM_SINGLE("OUTVOLR Playback Switch", RT5631_AXO2MIXER_CTRL,
 738				RT5631_M_OUTMIXR_AXO2MIX_BIT, 1 , 1),
 739};
 740
 741static const struct snd_kcontrol_new rt5631_spolmix_mixer_controls[] = {
 742	SOC_DAPM_SINGLE("SPKVOLL Playback Switch", RT5631_SPK_MONO_OUT_CTRL,
 743				RT5631_M_SPKVOLL_SPOLMIX_BIT, 1, 1),
 744	SOC_DAPM_SINGLE("SPKVOLR Playback Switch", RT5631_SPK_MONO_OUT_CTRL,
 745				RT5631_M_SPKVOLR_SPOLMIX_BIT, 1, 1),
 746};
 747
 748static const struct snd_kcontrol_new rt5631_spormix_mixer_controls[] = {
 749	SOC_DAPM_SINGLE("SPKVOLL Playback Switch", RT5631_SPK_MONO_OUT_CTRL,
 750				RT5631_M_SPKVOLL_SPORMIX_BIT, 1, 1),
 751	SOC_DAPM_SINGLE("SPKVOLR Playback Switch", RT5631_SPK_MONO_OUT_CTRL,
 752				RT5631_M_SPKVOLR_SPORMIX_BIT, 1, 1),
 753};
 754
 755static const struct snd_kcontrol_new rt5631_monomix_mixer_controls[] = {
 756	SOC_DAPM_SINGLE("OUTVOLL Playback Switch", RT5631_SPK_MONO_OUT_CTRL,
 757				RT5631_M_OUTVOLL_MONOMIX_BIT, 1, 1),
 758	SOC_DAPM_SINGLE("OUTVOLR Playback Switch", RT5631_SPK_MONO_OUT_CTRL,
 759				RT5631_M_OUTVOLR_MONOMIX_BIT, 1, 1),
 760};
 761
 762/* Left SPK Volume Input */
 763static const char *rt5631_spkvoll_sel[] = {"Vmid", "SPKMIXL"};
 764
 765static SOC_ENUM_SINGLE_DECL(rt5631_spkvoll_enum, RT5631_SPK_OUT_VOL,
 766			    RT5631_L_EN_SHIFT, rt5631_spkvoll_sel);
 767
 768static const struct snd_kcontrol_new rt5631_spkvoll_mux_control =
 769	SOC_DAPM_ENUM("Left SPKVOL SRC", rt5631_spkvoll_enum);
 770
 771/* Left HP Volume Input */
 772static const char *rt5631_hpvoll_sel[] = {"Vmid", "OUTMIXL"};
 773
 774static SOC_ENUM_SINGLE_DECL(rt5631_hpvoll_enum, RT5631_HP_OUT_VOL,
 775			    RT5631_L_EN_SHIFT, rt5631_hpvoll_sel);
 776
 777static const struct snd_kcontrol_new rt5631_hpvoll_mux_control =
 778	SOC_DAPM_ENUM("Left HPVOL SRC", rt5631_hpvoll_enum);
 779
 780/* Left Out Volume Input */
 781static const char *rt5631_outvoll_sel[] = {"Vmid", "OUTMIXL"};
 782
 783static SOC_ENUM_SINGLE_DECL(rt5631_outvoll_enum, RT5631_MONO_AXO_1_2_VOL,
 784			    RT5631_L_EN_SHIFT, rt5631_outvoll_sel);
 785
 786static const struct snd_kcontrol_new rt5631_outvoll_mux_control =
 787	SOC_DAPM_ENUM("Left OUTVOL SRC", rt5631_outvoll_enum);
 788
 789/* Right Out Volume Input */
 790static const char *rt5631_outvolr_sel[] = {"Vmid", "OUTMIXR"};
 791
 792static SOC_ENUM_SINGLE_DECL(rt5631_outvolr_enum, RT5631_MONO_AXO_1_2_VOL,
 793			    RT5631_R_EN_SHIFT, rt5631_outvolr_sel);
 794
 795static const struct snd_kcontrol_new rt5631_outvolr_mux_control =
 796	SOC_DAPM_ENUM("Right OUTVOL SRC", rt5631_outvolr_enum);
 797
 798/* Right HP Volume Input */
 799static const char *rt5631_hpvolr_sel[] = {"Vmid", "OUTMIXR"};
 800
 801static SOC_ENUM_SINGLE_DECL(rt5631_hpvolr_enum, RT5631_HP_OUT_VOL,
 802			    RT5631_R_EN_SHIFT, rt5631_hpvolr_sel);
 803
 804static const struct snd_kcontrol_new rt5631_hpvolr_mux_control =
 805	SOC_DAPM_ENUM("Right HPVOL SRC", rt5631_hpvolr_enum);
 806
 807/* Right SPK Volume Input */
 808static const char *rt5631_spkvolr_sel[] = {"Vmid", "SPKMIXR"};
 809
 810static SOC_ENUM_SINGLE_DECL(rt5631_spkvolr_enum, RT5631_SPK_OUT_VOL,
 811			    RT5631_R_EN_SHIFT, rt5631_spkvolr_sel);
 812
 813static const struct snd_kcontrol_new rt5631_spkvolr_mux_control =
 814	SOC_DAPM_ENUM("Right SPKVOL SRC", rt5631_spkvolr_enum);
 815
 816/* SPO Left Channel Input */
 817static const char *rt5631_spol_src_sel[] = {
 818	"SPOLMIX", "MONOIN_RX", "VDAC", "DACL"};
 819
 820static SOC_ENUM_SINGLE_DECL(rt5631_spol_src_enum, RT5631_SPK_MONO_HP_OUT_CTRL,
 821			    RT5631_SPK_L_MUX_SEL_SHIFT, rt5631_spol_src_sel);
 822
 823static const struct snd_kcontrol_new rt5631_spol_mux_control =
 824	SOC_DAPM_ENUM("SPOL SRC", rt5631_spol_src_enum);
 825
 826/* SPO Right Channel Input */
 827static const char *rt5631_spor_src_sel[] = {
 828	"SPORMIX", "MONOIN_RX", "VDAC", "DACR"};
 829
 830static SOC_ENUM_SINGLE_DECL(rt5631_spor_src_enum, RT5631_SPK_MONO_HP_OUT_CTRL,
 831			    RT5631_SPK_R_MUX_SEL_SHIFT, rt5631_spor_src_sel);
 832
 833static const struct snd_kcontrol_new rt5631_spor_mux_control =
 834	SOC_DAPM_ENUM("SPOR SRC", rt5631_spor_src_enum);
 835
 836/* MONO Input */
 837static const char *rt5631_mono_src_sel[] = {"MONOMIX", "MONOIN_RX", "VDAC"};
 838
 839static SOC_ENUM_SINGLE_DECL(rt5631_mono_src_enum, RT5631_SPK_MONO_HP_OUT_CTRL,
 840			    RT5631_MONO_MUX_SEL_SHIFT, rt5631_mono_src_sel);
 841
 842static const struct snd_kcontrol_new rt5631_mono_mux_control =
 843	SOC_DAPM_ENUM("MONO SRC", rt5631_mono_src_enum);
 844
 845/* Left HPO Input */
 846static const char *rt5631_hpl_src_sel[] = {"Left HPVOL", "Left DAC"};
 847
 848static SOC_ENUM_SINGLE_DECL(rt5631_hpl_src_enum, RT5631_SPK_MONO_HP_OUT_CTRL,
 849			    RT5631_HP_L_MUX_SEL_SHIFT, rt5631_hpl_src_sel);
 850
 851static const struct snd_kcontrol_new rt5631_hpl_mux_control =
 852	SOC_DAPM_ENUM("HPL SRC", rt5631_hpl_src_enum);
 853
 854/* Right HPO Input */
 855static const char *rt5631_hpr_src_sel[] = {"Right HPVOL", "Right DAC"};
 856
 857static SOC_ENUM_SINGLE_DECL(rt5631_hpr_src_enum, RT5631_SPK_MONO_HP_OUT_CTRL,
 858			    RT5631_HP_R_MUX_SEL_SHIFT, rt5631_hpr_src_sel);
 859
 860static const struct snd_kcontrol_new rt5631_hpr_mux_control =
 861	SOC_DAPM_ENUM("HPR SRC", rt5631_hpr_src_enum);
 862
 863static const struct snd_soc_dapm_widget rt5631_dapm_widgets[] = {
 864	/* Vmid */
 865	SND_SOC_DAPM_VMID("Vmid"),
 866	/* PLL1 */
 867	SND_SOC_DAPM_SUPPLY("PLL1", RT5631_PWR_MANAG_ADD2,
 868			RT5631_PWR_PLL1_BIT, 0, NULL, 0),
 869
 870	/* Input Side */
 871	/* Input Lines */
 872	SND_SOC_DAPM_INPUT("MIC1"),
 873	SND_SOC_DAPM_INPUT("MIC2"),
 874	SND_SOC_DAPM_INPUT("AXIL"),
 875	SND_SOC_DAPM_INPUT("AXIR"),
 876	SND_SOC_DAPM_INPUT("MONOIN_RXN"),
 877	SND_SOC_DAPM_INPUT("MONOIN_RXP"),
 878	SND_SOC_DAPM_INPUT("DMIC"),
 879
 880	/* MICBIAS */
 881	SND_SOC_DAPM_MICBIAS("MIC Bias1", RT5631_PWR_MANAG_ADD2,
 882			RT5631_PWR_MICBIAS1_VOL_BIT, 0),
 883	SND_SOC_DAPM_MICBIAS("MIC Bias2", RT5631_PWR_MANAG_ADD2,
 884			RT5631_PWR_MICBIAS2_VOL_BIT, 0),
 885
 886	/* Boost */
 887	SND_SOC_DAPM_PGA("MIC1 Boost", RT5631_PWR_MANAG_ADD2,
 888			RT5631_PWR_MIC1_BOOT_GAIN_BIT, 0, NULL, 0),
 889	SND_SOC_DAPM_PGA("MIC2 Boost", RT5631_PWR_MANAG_ADD2,
 890			RT5631_PWR_MIC2_BOOT_GAIN_BIT, 0, NULL, 0),
 891	SND_SOC_DAPM_PGA("MONOIN_RXP Boost", RT5631_PWR_MANAG_ADD4,
 892			RT5631_PWR_MONO_IN_P_VOL_BIT, 0, NULL, 0),
 893	SND_SOC_DAPM_PGA("MONOIN_RXN Boost", RT5631_PWR_MANAG_ADD4,
 894			RT5631_PWR_MONO_IN_N_VOL_BIT, 0, NULL, 0),
 895	SND_SOC_DAPM_PGA("AXIL Boost", RT5631_PWR_MANAG_ADD4,
 896			RT5631_PWR_AXIL_IN_VOL_BIT, 0, NULL, 0),
 897	SND_SOC_DAPM_PGA("AXIR Boost", RT5631_PWR_MANAG_ADD4,
 898			RT5631_PWR_AXIR_IN_VOL_BIT, 0, NULL, 0),
 899
 900	/* MONO In */
 901	SND_SOC_DAPM_MIXER("MONO_IN", SND_SOC_NOPM, 0, 0, NULL, 0),
 902
 903	/* REC Mixer */
 904	SND_SOC_DAPM_MIXER("RECMIXL Mixer", RT5631_PWR_MANAG_ADD2,
 905		RT5631_PWR_RECMIXER_L_BIT, 0,
 906		&rt5631_recmixl_mixer_controls[0],
 907		ARRAY_SIZE(rt5631_recmixl_mixer_controls)),
 908	SND_SOC_DAPM_MIXER("RECMIXR Mixer", RT5631_PWR_MANAG_ADD2,
 909		RT5631_PWR_RECMIXER_R_BIT, 0,
 910		&rt5631_recmixr_mixer_controls[0],
 911		ARRAY_SIZE(rt5631_recmixr_mixer_controls)),
 912	/* Because of record duplication for L/R channel,
 913	 * L/R ADCs need power up at the same time */
 914	SND_SOC_DAPM_MIXER("ADC Mixer", SND_SOC_NOPM, 0, 0, NULL, 0),
 915
 916	/* DMIC */
 917	SND_SOC_DAPM_SUPPLY("DMIC Supply", RT5631_DIG_MIC_CTRL,
 918		RT5631_DMIC_ENA_SHIFT, 0,
 919		set_dmic_params, SND_SOC_DAPM_PRE_PMU),
 920	/* ADC Data Srouce */
 921	SND_SOC_DAPM_SUPPLY("Left ADC Select", RT5631_INT_ST_IRQ_CTRL_2,
 922			RT5631_ADC_DATA_SEL_MIC1_SHIFT, 0, NULL, 0),
 923	SND_SOC_DAPM_SUPPLY("Right ADC Select", RT5631_INT_ST_IRQ_CTRL_2,
 924			RT5631_ADC_DATA_SEL_MIC2_SHIFT, 0, NULL, 0),
 925
 926	/* ADCs */
 927	SND_SOC_DAPM_ADC("Left ADC", "HIFI Capture",
 928		RT5631_PWR_MANAG_ADD1, RT5631_PWR_ADC_L_CLK_BIT, 0),
 929	SND_SOC_DAPM_ADC("Right ADC", "HIFI Capture",
 930		RT5631_PWR_MANAG_ADD1, RT5631_PWR_ADC_R_CLK_BIT, 0),
 931
 932	/* DAC and ADC supply power */
 933	SND_SOC_DAPM_SUPPLY("I2S", RT5631_PWR_MANAG_ADD1,
 934			RT5631_PWR_MAIN_I2S_BIT, 0, NULL, 0),
 935	SND_SOC_DAPM_SUPPLY("DAC REF", RT5631_PWR_MANAG_ADD1,
 936			RT5631_PWR_DAC_REF_BIT, 0, NULL, 0),
 937
 938	/* Output Side */
 939	/* DACs */
 940	SND_SOC_DAPM_DAC("Left DAC", "HIFI Playback",
 941		RT5631_PWR_MANAG_ADD1, RT5631_PWR_DAC_L_CLK_BIT, 0),
 942	SND_SOC_DAPM_DAC("Right DAC", "HIFI Playback",
 943		RT5631_PWR_MANAG_ADD1, RT5631_PWR_DAC_R_CLK_BIT, 0),
 944	SND_SOC_DAPM_DAC("Voice DAC", "Voice DAC Mono Playback",
 945				SND_SOC_NOPM, 0, 0),
 946	SND_SOC_DAPM_PGA("Voice DAC Boost", SND_SOC_NOPM, 0, 0, NULL, 0),
 947	/* DAC supply power */
 948	SND_SOC_DAPM_SUPPLY("Left DAC To Mixer", RT5631_PWR_MANAG_ADD1,
 949			RT5631_PWR_DAC_L_TO_MIXER_BIT, 0, NULL, 0),
 950	SND_SOC_DAPM_SUPPLY("Right DAC To Mixer", RT5631_PWR_MANAG_ADD1,
 951			RT5631_PWR_DAC_R_TO_MIXER_BIT, 0, NULL, 0),
 952
 953	/* Left SPK Mixer */
 954	SND_SOC_DAPM_MIXER("SPKMIXL Mixer", RT5631_PWR_MANAG_ADD2,
 955			RT5631_PWR_SPKMIXER_L_BIT, 0,
 956			&rt5631_spkmixl_mixer_controls[0],
 957			ARRAY_SIZE(rt5631_spkmixl_mixer_controls)),
 958	/* Left Out Mixer */
 959	SND_SOC_DAPM_MIXER("OUTMIXL Mixer", RT5631_PWR_MANAG_ADD2,
 960			RT5631_PWR_OUTMIXER_L_BIT, 0,
 961			&rt5631_outmixl_mixer_controls[0],
 962			ARRAY_SIZE(rt5631_outmixl_mixer_controls)),
 963	/* Right Out Mixer */
 964	SND_SOC_DAPM_MIXER("OUTMIXR Mixer", RT5631_PWR_MANAG_ADD2,
 965			RT5631_PWR_OUTMIXER_R_BIT, 0,
 966			&rt5631_outmixr_mixer_controls[0],
 967			ARRAY_SIZE(rt5631_outmixr_mixer_controls)),
 968	/* Right SPK Mixer */
 969	SND_SOC_DAPM_MIXER("SPKMIXR Mixer", RT5631_PWR_MANAG_ADD2,
 970			RT5631_PWR_SPKMIXER_R_BIT, 0,
 971			&rt5631_spkmixr_mixer_controls[0],
 972			ARRAY_SIZE(rt5631_spkmixr_mixer_controls)),
 973
 974	/* Volume Mux */
 975	SND_SOC_DAPM_MUX("Left SPKVOL Mux", RT5631_PWR_MANAG_ADD4,
 976			RT5631_PWR_SPK_L_VOL_BIT, 0,
 977			&rt5631_spkvoll_mux_control),
 978	SND_SOC_DAPM_MUX("Left HPVOL Mux", RT5631_PWR_MANAG_ADD4,
 979			RT5631_PWR_HP_L_OUT_VOL_BIT, 0,
 980			&rt5631_hpvoll_mux_control),
 981	SND_SOC_DAPM_MUX("Left OUTVOL Mux", RT5631_PWR_MANAG_ADD4,
 982			RT5631_PWR_LOUT_VOL_BIT, 0,
 983			&rt5631_outvoll_mux_control),
 984	SND_SOC_DAPM_MUX("Right OUTVOL Mux", RT5631_PWR_MANAG_ADD4,
 985			RT5631_PWR_ROUT_VOL_BIT, 0,
 986			&rt5631_outvolr_mux_control),
 987	SND_SOC_DAPM_MUX("Right HPVOL Mux", RT5631_PWR_MANAG_ADD4,
 988			RT5631_PWR_HP_R_OUT_VOL_BIT, 0,
 989			&rt5631_hpvolr_mux_control),
 990	SND_SOC_DAPM_MUX("Right SPKVOL Mux", RT5631_PWR_MANAG_ADD4,
 991			RT5631_PWR_SPK_R_VOL_BIT, 0,
 992			&rt5631_spkvolr_mux_control),
 993
 994	/* DAC To HP */
 995	SND_SOC_DAPM_PGA_S("Left DAC_HP", 0, SND_SOC_NOPM, 0, 0, NULL, 0),
 996	SND_SOC_DAPM_PGA_S("Right DAC_HP", 0, SND_SOC_NOPM, 0, 0, NULL, 0),
 997
 998	/* HP Depop */
 999	SND_SOC_DAPM_PGA_S("HP Depop", 1, SND_SOC_NOPM, 0, 0,
1000		hp_event, SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
1001
1002	/* AXO1 Mixer */
1003	SND_SOC_DAPM_MIXER("AXO1MIX Mixer", RT5631_PWR_MANAG_ADD3,
1004			RT5631_PWR_AXO1MIXER_BIT, 0,
1005			&rt5631_AXO1MIX_mixer_controls[0],
1006			ARRAY_SIZE(rt5631_AXO1MIX_mixer_controls)),
1007	/* SPOL Mixer */
1008	SND_SOC_DAPM_MIXER("SPOLMIX Mixer", SND_SOC_NOPM, 0, 0,
1009			&rt5631_spolmix_mixer_controls[0],
1010			ARRAY_SIZE(rt5631_spolmix_mixer_controls)),
1011	/* MONO Mixer */
1012	SND_SOC_DAPM_MIXER("MONOMIX Mixer", RT5631_PWR_MANAG_ADD3,
1013			RT5631_PWR_MONOMIXER_BIT, 0,
1014			&rt5631_monomix_mixer_controls[0],
1015			ARRAY_SIZE(rt5631_monomix_mixer_controls)),
1016	/* SPOR Mixer */
1017	SND_SOC_DAPM_MIXER("SPORMIX Mixer", SND_SOC_NOPM, 0, 0,
1018			&rt5631_spormix_mixer_controls[0],
1019			ARRAY_SIZE(rt5631_spormix_mixer_controls)),
1020	/* AXO2 Mixer */
1021	SND_SOC_DAPM_MIXER("AXO2MIX Mixer", RT5631_PWR_MANAG_ADD3,
1022			RT5631_PWR_AXO2MIXER_BIT, 0,
1023			&rt5631_AXO2MIX_mixer_controls[0],
1024			ARRAY_SIZE(rt5631_AXO2MIX_mixer_controls)),
1025
1026	/* Mux */
1027	SND_SOC_DAPM_MUX("SPOL Mux", SND_SOC_NOPM, 0, 0,
1028			&rt5631_spol_mux_control),
1029	SND_SOC_DAPM_MUX("SPOR Mux", SND_SOC_NOPM, 0, 0,
1030			&rt5631_spor_mux_control),
1031	SND_SOC_DAPM_MUX("MONO Mux", SND_SOC_NOPM, 0, 0,
1032			&rt5631_mono_mux_control),
1033	SND_SOC_DAPM_MUX("HPL Mux", SND_SOC_NOPM, 0, 0,
1034			&rt5631_hpl_mux_control),
1035	SND_SOC_DAPM_MUX("HPR Mux", SND_SOC_NOPM, 0, 0,
1036			&rt5631_hpr_mux_control),
1037
1038	/* AMP supply */
1039	SND_SOC_DAPM_SUPPLY("MONO Depop", RT5631_PWR_MANAG_ADD3,
1040			RT5631_PWR_MONO_DEPOP_DIS_BIT, 0, NULL, 0),
1041	SND_SOC_DAPM_SUPPLY("Class D", RT5631_PWR_MANAG_ADD1,
1042			RT5631_PWR_CLASS_D_BIT, 0, NULL, 0),
1043
1044	/* Output Lines */
1045	SND_SOC_DAPM_OUTPUT("AUXO1"),
1046	SND_SOC_DAPM_OUTPUT("AUXO2"),
1047	SND_SOC_DAPM_OUTPUT("SPOL"),
1048	SND_SOC_DAPM_OUTPUT("SPOR"),
1049	SND_SOC_DAPM_OUTPUT("HPOL"),
1050	SND_SOC_DAPM_OUTPUT("HPOR"),
1051	SND_SOC_DAPM_OUTPUT("MONO"),
1052};
1053
1054static const struct snd_soc_dapm_route rt5631_dapm_routes[] = {
1055	{"MIC1 Boost", NULL, "MIC1"},
1056	{"MIC2 Boost", NULL, "MIC2"},
1057	{"MONOIN_RXP Boost", NULL, "MONOIN_RXP"},
1058	{"MONOIN_RXN Boost", NULL, "MONOIN_RXN"},
1059	{"AXIL Boost", NULL, "AXIL"},
1060	{"AXIR Boost", NULL, "AXIR"},
1061
1062	{"MONO_IN", NULL, "MONOIN_RXP Boost"},
1063	{"MONO_IN", NULL, "MONOIN_RXN Boost"},
1064
1065	{"RECMIXL Mixer", "OUTMIXL Capture Switch", "OUTMIXL Mixer"},
1066	{"RECMIXL Mixer", "MIC1_BST1 Capture Switch", "MIC1 Boost"},
1067	{"RECMIXL Mixer", "AXILVOL Capture Switch", "AXIL Boost"},
1068	{"RECMIXL Mixer", "MONOIN_RX Capture Switch", "MONO_IN"},
1069
1070	{"RECMIXR Mixer", "OUTMIXR Capture Switch", "OUTMIXR Mixer"},
1071	{"RECMIXR Mixer", "MIC2_BST2 Capture Switch", "MIC2 Boost"},
1072	{"RECMIXR Mixer", "AXIRVOL Capture Switch", "AXIR Boost"},
1073	{"RECMIXR Mixer", "MONOIN_RX Capture Switch", "MONO_IN"},
1074
1075	{"ADC Mixer", NULL, "RECMIXL Mixer"},
1076	{"ADC Mixer", NULL, "RECMIXR Mixer"},
1077
1078	{"Left ADC", NULL, "ADC Mixer"},
1079	{"Left ADC", NULL, "Left ADC Select", check_adcl_select},
1080	{"Left ADC", NULL, "PLL1", check_sysclk1_source},
1081	{"Left ADC", NULL, "I2S"},
1082	{"Left ADC", NULL, "DAC REF"},
1083
1084	{"Right ADC", NULL, "ADC Mixer"},
1085	{"Right ADC", NULL, "Right ADC Select", check_adcr_select},
1086	{"Right ADC", NULL, "PLL1", check_sysclk1_source},
1087	{"Right ADC", NULL, "I2S"},
1088	{"Right ADC", NULL, "DAC REF"},
1089
1090	{"DMIC", NULL, "DMIC Supply", check_dmic_used},
1091	{"Left ADC", NULL, "DMIC"},
1092	{"Right ADC", NULL, "DMIC"},
1093
1094	{"Left DAC", NULL, "PLL1", check_sysclk1_source},
1095	{"Left DAC", NULL, "I2S"},
1096	{"Left DAC", NULL, "DAC REF"},
1097	{"Right DAC", NULL, "PLL1", check_sysclk1_source},
1098	{"Right DAC", NULL, "I2S"},
1099	{"Right DAC", NULL, "DAC REF"},
1100
1101	{"Voice DAC Boost", NULL, "Voice DAC"},
1102
1103	{"SPKMIXL Mixer", NULL, "Left DAC To Mixer", check_dacl_to_spkmixl},
1104	{"SPKMIXL Mixer", "RECMIXL Playback Switch", "RECMIXL Mixer"},
1105	{"SPKMIXL Mixer", "MIC1_P Playback Switch", "MIC1"},
1106	{"SPKMIXL Mixer", "DACL Playback Switch", "Left DAC"},
1107	{"SPKMIXL Mixer", "OUTMIXL Playback Switch", "OUTMIXL Mixer"},
1108
1109	{"SPKMIXR Mixer", NULL, "Right DAC To Mixer", check_dacr_to_spkmixr},
1110	{"SPKMIXR Mixer", "OUTMIXR Playback Switch", "OUTMIXR Mixer"},
1111	{"SPKMIXR Mixer", "DACR Playback Switch", "Right DAC"},
1112	{"SPKMIXR Mixer", "MIC2_P Playback Switch", "MIC2"},
1113	{"SPKMIXR Mixer", "RECMIXR Playback Switch", "RECMIXR Mixer"},
1114
1115	{"OUTMIXL Mixer", NULL, "Left DAC To Mixer", check_dacl_to_outmixl},
1116	{"OUTMIXL Mixer", "RECMIXL Playback Switch", "RECMIXL Mixer"},
1117	{"OUTMIXL Mixer", "RECMIXR Playback Switch", "RECMIXR Mixer"},
1118	{"OUTMIXL Mixer", "DACL Playback Switch", "Left DAC"},
1119	{"OUTMIXL Mixer", "MIC1_BST1 Playback Switch", "MIC1 Boost"},
1120	{"OUTMIXL Mixer", "MIC2_BST2 Playback Switch", "MIC2 Boost"},
1121	{"OUTMIXL Mixer", "MONOIN_RXP Playback Switch", "MONOIN_RXP Boost"},
1122	{"OUTMIXL Mixer", "AXILVOL Playback Switch", "AXIL Boost"},
1123	{"OUTMIXL Mixer", "AXIRVOL Playback Switch", "AXIR Boost"},
1124	{"OUTMIXL Mixer", "VDAC Playback Switch", "Voice DAC Boost"},
1125
1126	{"OUTMIXR Mixer", NULL, "Right DAC To Mixer", check_dacr_to_outmixr},
1127	{"OUTMIXR Mixer", "RECMIXL Playback Switch", "RECMIXL Mixer"},
1128	{"OUTMIXR Mixer", "RECMIXR Playback Switch", "RECMIXR Mixer"},
1129	{"OUTMIXR Mixer", "DACR Playback Switch", "Right DAC"},
1130	{"OUTMIXR Mixer", "MIC1_BST1 Playback Switch", "MIC1 Boost"},
1131	{"OUTMIXR Mixer", "MIC2_BST2 Playback Switch", "MIC2 Boost"},
1132	{"OUTMIXR Mixer", "MONOIN_RXN Playback Switch", "MONOIN_RXN Boost"},
1133	{"OUTMIXR Mixer", "AXILVOL Playback Switch", "AXIL Boost"},
1134	{"OUTMIXR Mixer", "AXIRVOL Playback Switch", "AXIR Boost"},
1135	{"OUTMIXR Mixer", "VDAC Playback Switch", "Voice DAC Boost"},
1136
1137	{"Left SPKVOL Mux",  "SPKMIXL", "SPKMIXL Mixer"},
1138	{"Left SPKVOL Mux",  "Vmid", "Vmid"},
1139	{"Left HPVOL Mux",  "OUTMIXL", "OUTMIXL Mixer"},
1140	{"Left HPVOL Mux",  "Vmid", "Vmid"},
1141	{"Left OUTVOL Mux",  "OUTMIXL", "OUTMIXL Mixer"},
1142	{"Left OUTVOL Mux",  "Vmid", "Vmid"},
1143	{"Right OUTVOL Mux",  "OUTMIXR", "OUTMIXR Mixer"},
1144	{"Right OUTVOL Mux",  "Vmid", "Vmid"},
1145	{"Right HPVOL Mux",  "OUTMIXR", "OUTMIXR Mixer"},
1146	{"Right HPVOL Mux",  "Vmid", "Vmid"},
1147	{"Right SPKVOL Mux",  "SPKMIXR", "SPKMIXR Mixer"},
1148	{"Right SPKVOL Mux",  "Vmid", "Vmid"},
1149
1150	{"AXO1MIX Mixer", "MIC1_BST1 Playback Switch", "MIC1 Boost"},
1151	{"AXO1MIX Mixer", "OUTVOLL Playback Switch", "Left OUTVOL Mux"},
1152	{"AXO1MIX Mixer", "OUTVOLR Playback Switch", "Right OUTVOL Mux"},
1153	{"AXO1MIX Mixer", "MIC2_BST2 Playback Switch", "MIC2 Boost"},
1154
1155	{"AXO2MIX Mixer", "MIC1_BST1 Playback Switch", "MIC1 Boost"},
1156	{"AXO2MIX Mixer", "OUTVOLL Playback Switch", "Left OUTVOL Mux"},
1157	{"AXO2MIX Mixer", "OUTVOLR Playback Switch", "Right OUTVOL Mux"},
1158	{"AXO2MIX Mixer", "MIC2_BST2 Playback Switch", "MIC2 Boost"},
1159
1160	{"SPOLMIX Mixer", "SPKVOLL Playback Switch", "Left SPKVOL Mux"},
1161	{"SPOLMIX Mixer", "SPKVOLR Playback Switch", "Right SPKVOL Mux"},
1162
1163	{"SPORMIX Mixer", "SPKVOLL Playback Switch", "Left SPKVOL Mux"},
1164	{"SPORMIX Mixer", "SPKVOLR Playback Switch", "Right SPKVOL Mux"},
1165
1166	{"MONOMIX Mixer", "OUTVOLL Playback Switch", "Left OUTVOL Mux"},
1167	{"MONOMIX Mixer", "OUTVOLR Playback Switch", "Right OUTVOL Mux"},
1168
1169	{"SPOL Mux", "SPOLMIX", "SPOLMIX Mixer"},
1170	{"SPOL Mux", "MONOIN_RX", "MONO_IN"},
1171	{"SPOL Mux", "VDAC", "Voice DAC Boost"},
1172	{"SPOL Mux", "DACL", "Left DAC"},
1173
1174	{"SPOR Mux", "SPORMIX", "SPORMIX Mixer"},
1175	{"SPOR Mux", "MONOIN_RX", "MONO_IN"},
1176	{"SPOR Mux", "VDAC", "Voice DAC Boost"},
1177	{"SPOR Mux", "DACR", "Right DAC"},
1178
1179	{"MONO Mux", "MONOMIX", "MONOMIX Mixer"},
1180	{"MONO Mux", "MONOIN_RX", "MONO_IN"},
1181	{"MONO Mux", "VDAC", "Voice DAC Boost"},
1182
1183	{"Right DAC_HP", NULL, "Right DAC"},
1184	{"Left DAC_HP", NULL, "Left DAC"},
1185
1186	{"HPL Mux", "Left HPVOL", "Left HPVOL Mux"},
1187	{"HPL Mux", "Left DAC", "Left DAC_HP"},
1188	{"HPR Mux", "Right HPVOL", "Right HPVOL Mux"},
1189	{"HPR Mux", "Right DAC", "Right DAC_HP"},
1190
1191	{"HP Depop", NULL, "HPL Mux"},
1192	{"HP Depop", NULL, "HPR Mux"},
1193
1194	{"AUXO1", NULL, "AXO1MIX Mixer"},
1195	{"AUXO2", NULL, "AXO2MIX Mixer"},
1196
1197	{"SPOL", NULL, "Class D"},
1198	{"SPOL", NULL, "SPOL Mux"},
1199	{"SPOR", NULL, "Class D"},
1200	{"SPOR", NULL, "SPOR Mux"},
1201
1202	{"HPOL", NULL, "HP Depop"},
1203	{"HPOR", NULL, "HP Depop"},
1204
1205	{"MONO", NULL, "MONO Depop"},
1206	{"MONO", NULL, "MONO Mux"},
1207};
1208
1209struct coeff_clk_div {
1210	u32 mclk;
1211	u32 bclk;
1212	u32 rate;
1213	u16 reg_val;
1214};
1215
1216/* PLL divisors */
1217struct pll_div {
1218	u32 pll_in;
1219	u32 pll_out;
1220	u16 reg_val;
1221};
1222
1223static const struct pll_div codec_master_pll_div[] = {
1224	{2048000,  8192000,  0x0ea0},
1225	{3686400,  8192000,  0x4e27},
1226	{12000000,  8192000,  0x456b},
1227	{13000000,  8192000,  0x495f},
1228	{13100000,  8192000,  0x0320},
1229	{2048000,  11289600,  0xf637},
1230	{3686400,  11289600,  0x2f22},
1231	{12000000,  11289600,  0x3e2f},
1232	{13000000,  11289600,  0x4d5b},
1233	{13100000,  11289600,  0x363b},
1234	{2048000,  16384000,  0x1ea0},
1235	{3686400,  16384000,  0x9e27},
1236	{12000000,  16384000,  0x452b},
1237	{13000000,  16384000,  0x542f},
1238	{13100000,  16384000,  0x03a0},
1239	{2048000,  16934400,  0xe625},
1240	{3686400,  16934400,  0x9126},
1241	{12000000,  16934400,  0x4d2c},
1242	{13000000,  16934400,  0x742f},
1243	{13100000,  16934400,  0x3c27},
1244	{2048000,  22579200,  0x2aa0},
1245	{3686400,  22579200,  0x2f20},
1246	{12000000,  22579200,  0x7e2f},
1247	{13000000,  22579200,  0x742f},
1248	{13100000,  22579200,  0x3c27},
1249	{2048000,  24576000,  0x2ea0},
1250	{3686400,  24576000,  0xee27},
1251	{12000000,  24576000,  0x2915},
1252	{13000000,  24576000,  0x772e},
1253	{13100000,  24576000,  0x0d20},
1254	{26000000,  24576000,  0x2027},
1255	{26000000,  22579200,  0x392f},
1256	{24576000,  22579200,  0x0921},
1257	{24576000,  24576000,  0x02a0},
1258};
1259
1260static const struct pll_div codec_slave_pll_div[] = {
1261	{256000,  2048000,  0x46f0},
1262	{256000,  4096000,  0x3ea0},
1263	{352800,  5644800,  0x3ea0},
1264	{512000,  8192000,  0x3ea0},
1265	{1024000,  8192000,  0x46f0},
1266	{705600,  11289600,  0x3ea0},
1267	{1024000,  16384000,  0x3ea0},
1268	{1411200,  22579200,  0x3ea0},
1269	{1536000,  24576000,  0x3ea0},
1270	{2048000,  16384000,  0x1ea0},
1271	{2822400,  22579200,  0x1ea0},
1272	{2822400,  45158400,  0x5ec0},
1273	{5644800,  45158400,  0x46f0},
1274	{3072000,  24576000,  0x1ea0},
1275	{3072000,  49152000,  0x5ec0},
1276	{6144000,  49152000,  0x46f0},
1277	{705600,  11289600,  0x3ea0},
1278	{705600,  8467200,  0x3ab0},
1279	{24576000,  24576000,  0x02a0},
1280	{1411200,  11289600,  0x1690},
1281	{2822400,  11289600,  0x0a90},
1282	{1536000,  12288000,  0x1690},
1283	{3072000,  12288000,  0x0a90},
1284};
1285
1286static struct coeff_clk_div coeff_div[] = {
1287	/* sysclk is 256fs */
1288	{2048000,  8000 * 32,  8000, 0x1000},
1289	{2048000,  8000 * 64,  8000, 0x0000},
1290	{2822400,  11025 * 32,  11025,  0x1000},
1291	{2822400,  11025 * 64,  11025,  0x0000},
1292	{4096000,  16000 * 32,  16000,  0x1000},
1293	{4096000,  16000 * 64,  16000,  0x0000},
1294	{5644800,  22050 * 32,  22050,  0x1000},
1295	{5644800,  22050 * 64,  22050,  0x0000},
1296	{8192000,  32000 * 32,  32000,  0x1000},
1297	{8192000,  32000 * 64,  32000,  0x0000},
1298	{11289600,  44100 * 32,  44100,  0x1000},
1299	{11289600,  44100 * 64,  44100,  0x0000},
1300	{12288000,  48000 * 32,  48000,  0x1000},
1301	{12288000,  48000 * 64,  48000,  0x0000},
1302	{22579200,  88200 * 32,  88200,  0x1000},
1303	{22579200,  88200 * 64,  88200,  0x0000},
1304	{24576000,  96000 * 32,  96000,  0x1000},
1305	{24576000,  96000 * 64,  96000,  0x0000},
1306	/* sysclk is 512fs */
1307	{4096000,  8000 * 32,  8000, 0x3000},
1308	{4096000,  8000 * 64,  8000, 0x2000},
1309	{5644800,  11025 * 32,  11025, 0x3000},
1310	{5644800,  11025 * 64,  11025, 0x2000},
1311	{8192000,  16000 * 32,  16000, 0x3000},
1312	{8192000,  16000 * 64,  16000, 0x2000},
1313	{11289600,  22050 * 32,  22050, 0x3000},
1314	{11289600,  22050 * 64,  22050, 0x2000},
1315	{16384000,  32000 * 32,  32000, 0x3000},
1316	{16384000,  32000 * 64,  32000, 0x2000},
1317	{22579200,  44100 * 32,  44100, 0x3000},
1318	{22579200,  44100 * 64,  44100, 0x2000},
1319	{24576000,  48000 * 32,  48000, 0x3000},
1320	{24576000,  48000 * 64,  48000, 0x2000},
1321	{45158400,  88200 * 32,  88200, 0x3000},
1322	{45158400,  88200 * 64,  88200, 0x2000},
1323	{49152000,  96000 * 32,  96000, 0x3000},
1324	{49152000,  96000 * 64,  96000, 0x2000},
1325	/* sysclk is 24.576Mhz or 22.5792Mhz */
1326	{24576000,  8000 * 32,  8000,  0x7080},
1327	{24576000,  8000 * 64,  8000,  0x6080},
1328	{24576000,  16000 * 32,  16000,  0x5080},
1329	{24576000,  16000 * 64,  16000,  0x4080},
1330	{24576000,  24000 * 32,  24000,  0x5000},
1331	{24576000,  24000 * 64,  24000,  0x4000},
1332	{24576000,  32000 * 32,  32000,  0x3080},
1333	{24576000,  32000 * 64,  32000,  0x2080},
1334	{22579200,  11025 * 32,  11025,  0x7000},
1335	{22579200,  11025 * 64,  11025,  0x6000},
1336	{22579200,  22050 * 32,  22050,  0x5000},
1337	{22579200,  22050 * 64,  22050,  0x4000},
1338};
1339
1340static int get_coeff(int mclk, int rate, int timesofbclk)
1341{
1342	int i;
1343
1344	for (i = 0; i < ARRAY_SIZE(coeff_div); i++) {
1345		if (coeff_div[i].mclk == mclk && coeff_div[i].rate == rate &&
1346			(coeff_div[i].bclk / coeff_div[i].rate) == timesofbclk)
1347			return i;
1348	}
1349	return -EINVAL;
1350}
1351
1352static int rt5631_hifi_pcm_params(struct snd_pcm_substream *substream,
1353		struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
1354{
1355	struct snd_soc_codec *codec = dai->codec;
1356	struct rt5631_priv *rt5631 = snd_soc_codec_get_drvdata(codec);
1357	int timesofbclk = 32, coeff;
1358	unsigned int iface = 0;
1359
1360	dev_dbg(codec->dev, "enter %s\n", __func__);
1361
1362	rt5631->bclk_rate = snd_soc_params_to_bclk(params);
1363	if (rt5631->bclk_rate < 0) {
1364		dev_err(codec->dev, "Fail to get BCLK rate\n");
1365		return rt5631->bclk_rate;
1366	}
1367	rt5631->rx_rate = params_rate(params);
1368
1369	if (rt5631->master)
1370		coeff = get_coeff(rt5631->sysclk, rt5631->rx_rate,
1371			rt5631->bclk_rate / rt5631->rx_rate);
1372	else
1373		coeff = get_coeff(rt5631->sysclk, rt5631->rx_rate,
1374					timesofbclk);
1375	if (coeff < 0) {
1376		dev_err(codec->dev, "Fail to get coeff\n");
1377		return coeff;
1378	}
1379
1380	switch (params_width(params)) {
1381	case 16:
1382		break;
1383	case 20:
1384		iface |= RT5631_SDP_I2S_DL_20;
1385		break;
1386	case 24:
1387		iface |= RT5631_SDP_I2S_DL_24;
1388		break;
1389	case 8:
1390		iface |= RT5631_SDP_I2S_DL_8;
1391		break;
1392	default:
1393		return -EINVAL;
1394	}
1395
1396	snd_soc_update_bits(codec, RT5631_SDP_CTRL,
1397		RT5631_SDP_I2S_DL_MASK, iface);
1398	snd_soc_write(codec, RT5631_STEREO_AD_DA_CLK_CTRL,
1399					coeff_div[coeff].reg_val);
1400
1401	return 0;
1402}
1403
1404static int rt5631_hifi_codec_set_dai_fmt(struct snd_soc_dai *codec_dai,
1405						unsigned int fmt)
1406{
1407	struct snd_soc_codec *codec = codec_dai->codec;
1408	struct rt5631_priv *rt5631 = snd_soc_codec_get_drvdata(codec);
1409	unsigned int iface = 0;
1410
1411	dev_dbg(codec->dev, "enter %s\n", __func__);
1412
1413	switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
1414	case SND_SOC_DAIFMT_CBM_CFM:
1415		rt5631->master = 1;
1416		break;
1417	case SND_SOC_DAIFMT_CBS_CFS:
1418		iface |= RT5631_SDP_MODE_SEL_SLAVE;
1419		rt5631->master = 0;
1420		break;
1421	default:
1422		return -EINVAL;
1423	}
1424
1425	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
1426	case SND_SOC_DAIFMT_I2S:
1427		break;
1428	case SND_SOC_DAIFMT_LEFT_J:
1429		iface |= RT5631_SDP_I2S_DF_LEFT;
1430		break;
1431	case SND_SOC_DAIFMT_DSP_A:
1432		iface |= RT5631_SDP_I2S_DF_PCM_A;
1433		break;
1434	case SND_SOC_DAIFMT_DSP_B:
1435		iface  |= RT5631_SDP_I2S_DF_PCM_B;
1436		break;
1437	default:
1438		return -EINVAL;
1439	}
1440
1441	switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
1442	case SND_SOC_DAIFMT_NB_NF:
1443		break;
1444	case SND_SOC_DAIFMT_IB_NF:
1445		iface |= RT5631_SDP_I2S_BCLK_POL_CTRL;
1446		break;
1447	default:
1448		return -EINVAL;
1449	}
1450
1451	snd_soc_write(codec, RT5631_SDP_CTRL, iface);
1452
1453	return 0;
1454}
1455
1456static int rt5631_hifi_codec_set_dai_sysclk(struct snd_soc_dai *codec_dai,
1457				int clk_id, unsigned int freq, int dir)
1458{
1459	struct snd_soc_codec *codec = codec_dai->codec;
1460	struct rt5631_priv *rt5631 = snd_soc_codec_get_drvdata(codec);
1461
1462	dev_dbg(codec->dev, "enter %s, syclk=%d\n", __func__, freq);
1463
1464	if ((freq >= (256 * 8000)) && (freq <= (512 * 96000))) {
1465		rt5631->sysclk = freq;
1466		return 0;
1467	}
1468
1469	return -EINVAL;
1470}
1471
1472static int rt5631_codec_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
1473		int source, unsigned int freq_in, unsigned int freq_out)
1474{
1475	struct snd_soc_codec *codec = codec_dai->codec;
1476	struct rt5631_priv *rt5631 = snd_soc_codec_get_drvdata(codec);
1477	int i, ret = -EINVAL;
1478
1479	dev_dbg(codec->dev, "enter %s\n", __func__);
1480
1481	if (!freq_in || !freq_out) {
1482		dev_dbg(codec->dev, "PLL disabled\n");
1483
1484		snd_soc_update_bits(codec, RT5631_GLOBAL_CLK_CTRL,
1485			RT5631_SYSCLK_SOUR_SEL_MASK,
1486			RT5631_SYSCLK_SOUR_SEL_MCLK);
1487
1488		return 0;
1489	}
1490
1491	if (rt5631->master) {
1492		for (i = 0; i < ARRAY_SIZE(codec_master_pll_div); i++)
1493			if (freq_in == codec_master_pll_div[i].pll_in &&
1494			freq_out == codec_master_pll_div[i].pll_out) {
1495				dev_info(codec->dev,
1496					"change PLL in master mode\n");
1497				snd_soc_write(codec, RT5631_PLL_CTRL,
1498					codec_master_pll_div[i].reg_val);
1499				schedule_timeout_uninterruptible(
1500					msecs_to_jiffies(20));
1501				snd_soc_update_bits(codec,
1502					RT5631_GLOBAL_CLK_CTRL,
1503					RT5631_SYSCLK_SOUR_SEL_MASK |
1504					RT5631_PLLCLK_SOUR_SEL_MASK,
1505					RT5631_SYSCLK_SOUR_SEL_PLL |
1506					RT5631_PLLCLK_SOUR_SEL_MCLK);
1507				ret = 0;
1508				break;
1509			}
1510	} else {
1511		for (i = 0; i < ARRAY_SIZE(codec_slave_pll_div); i++)
1512			if (freq_in == codec_slave_pll_div[i].pll_in &&
1513			freq_out == codec_slave_pll_div[i].pll_out) {
1514				dev_info(codec->dev,
1515					"change PLL in slave mode\n");
1516				snd_soc_write(codec, RT5631_PLL_CTRL,
1517					codec_slave_pll_div[i].reg_val);
1518				schedule_timeout_uninterruptible(
1519					msecs_to_jiffies(20));
1520				snd_soc_update_bits(codec,
1521					RT5631_GLOBAL_CLK_CTRL,
1522					RT5631_SYSCLK_SOUR_SEL_MASK |
1523					RT5631_PLLCLK_SOUR_SEL_MASK,
1524					RT5631_SYSCLK_SOUR_SEL_PLL |
1525					RT5631_PLLCLK_SOUR_SEL_BCLK);
1526				ret = 0;
1527				break;
1528			}
1529	}
1530
1531	return ret;
1532}
1533
1534static int rt5631_set_bias_level(struct snd_soc_codec *codec,
1535			enum snd_soc_bias_level level)
1536{
1537	struct rt5631_priv *rt5631 = snd_soc_codec_get_drvdata(codec);
1538
1539	switch (level) {
1540	case SND_SOC_BIAS_ON:
1541	case SND_SOC_BIAS_PREPARE:
1542		snd_soc_update_bits(codec, RT5631_PWR_MANAG_ADD2,
1543			RT5631_PWR_MICBIAS1_VOL | RT5631_PWR_MICBIAS2_VOL,
1544			RT5631_PWR_MICBIAS1_VOL | RT5631_PWR_MICBIAS2_VOL);
1545		break;
1546
1547	case SND_SOC_BIAS_STANDBY:
1548		if (snd_soc_codec_get_bias_level(codec) == SND_SOC_BIAS_OFF) {
1549			snd_soc_update_bits(codec, RT5631_PWR_MANAG_ADD3,
1550				RT5631_PWR_VREF | RT5631_PWR_MAIN_BIAS,
1551				RT5631_PWR_VREF | RT5631_PWR_MAIN_BIAS);
1552			msleep(80);
1553			snd_soc_update_bits(codec, RT5631_PWR_MANAG_ADD3,
1554				RT5631_PWR_FAST_VREF_CTRL,
1555				RT5631_PWR_FAST_VREF_CTRL);
1556			regcache_cache_only(rt5631->regmap, false);
1557			regcache_sync(rt5631->regmap);
1558		}
1559		break;
1560
1561	case SND_SOC_BIAS_OFF:
1562		snd_soc_write(codec, RT5631_PWR_MANAG_ADD1, 0x0000);
1563		snd_soc_write(codec, RT5631_PWR_MANAG_ADD2, 0x0000);
1564		snd_soc_write(codec, RT5631_PWR_MANAG_ADD3, 0x0000);
1565		snd_soc_write(codec, RT5631_PWR_MANAG_ADD4, 0x0000);
1566		break;
1567
1568	default:
1569		break;
1570	}
1571
1572	return 0;
1573}
1574
1575static int rt5631_probe(struct snd_soc_codec *codec)
1576{
1577	struct rt5631_priv *rt5631 = snd_soc_codec_get_drvdata(codec);
1578	unsigned int val;
1579
1580	val = rt5631_read_index(codec, RT5631_ADDA_MIXER_INTL_REG3);
1581	if (val & 0x0002)
1582		rt5631->codec_version = 1;
1583	else
1584		rt5631->codec_version = 0;
1585
1586	rt5631_reset(codec);
1587	snd_soc_update_bits(codec, RT5631_PWR_MANAG_ADD3,
1588		RT5631_PWR_VREF | RT5631_PWR_MAIN_BIAS,
1589		RT5631_PWR_VREF | RT5631_PWR_MAIN_BIAS);
1590	msleep(80);
1591	snd_soc_update_bits(codec, RT5631_PWR_MANAG_ADD3,
1592		RT5631_PWR_FAST_VREF_CTRL, RT5631_PWR_FAST_VREF_CTRL);
1593	/* enable HP zero cross */
1594	snd_soc_write(codec, RT5631_INT_ST_IRQ_CTRL_2, 0x0f18);
1595	/* power off ClassD auto Recovery */
1596	if (rt5631->codec_version)
1597		snd_soc_update_bits(codec, RT5631_INT_ST_IRQ_CTRL_2,
1598					0x2000, 0x2000);
1599	else
1600		snd_soc_update_bits(codec, RT5631_INT_ST_IRQ_CTRL_2,
1601					0x2000, 0);
1602	/* DMIC */
1603	if (rt5631->dmic_used_flag) {
1604		snd_soc_update_bits(codec, RT5631_GPIO_CTRL,
1605			RT5631_GPIO_PIN_FUN_SEL_MASK |
1606			RT5631_GPIO_DMIC_FUN_SEL_MASK,
1607			RT5631_GPIO_PIN_FUN_SEL_GPIO_DIMC |
1608			RT5631_GPIO_DMIC_FUN_SEL_DIMC);
1609		snd_soc_update_bits(codec, RT5631_DIG_MIC_CTRL,
1610			RT5631_DMIC_L_CH_LATCH_MASK |
1611			RT5631_DMIC_R_CH_LATCH_MASK,
1612			RT5631_DMIC_L_CH_LATCH_FALLING |
1613			RT5631_DMIC_R_CH_LATCH_RISING);
1614	}
1615
1616	snd_soc_codec_init_bias_level(codec, SND_SOC_BIAS_STANDBY);
1617
1618	return 0;
1619}
1620
1621#define RT5631_STEREO_RATES SNDRV_PCM_RATE_8000_96000
1622#define RT5631_FORMAT	(SNDRV_PCM_FMTBIT_S16_LE | \
1623			SNDRV_PCM_FMTBIT_S20_3LE | \
1624			SNDRV_PCM_FMTBIT_S24_LE | \
1625			SNDRV_PCM_FMTBIT_S8)
1626
1627static const struct snd_soc_dai_ops rt5631_ops = {
1628	.hw_params = rt5631_hifi_pcm_params,
1629	.set_fmt = rt5631_hifi_codec_set_dai_fmt,
1630	.set_sysclk = rt5631_hifi_codec_set_dai_sysclk,
1631	.set_pll = rt5631_codec_set_dai_pll,
1632};
1633
1634static struct snd_soc_dai_driver rt5631_dai[] = {
1635	{
1636		.name = "rt5631-hifi",
1637		.id = 1,
1638		.playback = {
1639			.stream_name = "HIFI Playback",
1640			.channels_min = 1,
1641			.channels_max = 2,
1642			.rates = RT5631_STEREO_RATES,
1643			.formats = RT5631_FORMAT,
1644		},
1645		.capture = {
1646			.stream_name = "HIFI Capture",
1647			.channels_min = 1,
1648			.channels_max = 2,
1649			.rates = RT5631_STEREO_RATES,
1650			.formats = RT5631_FORMAT,
1651		},
1652		.ops = &rt5631_ops,
1653	},
1654};
1655
1656static struct snd_soc_codec_driver soc_codec_dev_rt5631 = {
1657	.probe = rt5631_probe,
1658	.set_bias_level = rt5631_set_bias_level,
1659	.suspend_bias_off = true,
1660	.component_driver = {
1661		.controls		= rt5631_snd_controls,
1662		.num_controls		= ARRAY_SIZE(rt5631_snd_controls),
1663		.dapm_widgets		= rt5631_dapm_widgets,
1664		.num_dapm_widgets	= ARRAY_SIZE(rt5631_dapm_widgets),
1665		.dapm_routes		= rt5631_dapm_routes,
1666		.num_dapm_routes	= ARRAY_SIZE(rt5631_dapm_routes),
1667	},
 
1668};
1669
1670static const struct i2c_device_id rt5631_i2c_id[] = {
1671	{ "rt5631", 0 },
1672	{ "alc5631", 0 },
1673	{ }
1674};
1675MODULE_DEVICE_TABLE(i2c, rt5631_i2c_id);
1676
1677#ifdef CONFIG_OF
1678static const struct of_device_id rt5631_i2c_dt_ids[] = {
1679	{ .compatible = "realtek,rt5631"},
1680	{ .compatible = "realtek,alc5631"},
1681	{ }
1682};
1683MODULE_DEVICE_TABLE(of, rt5631_i2c_dt_ids);
1684#endif
1685
1686static const struct regmap_config rt5631_regmap_config = {
1687	.reg_bits = 8,
1688	.val_bits = 16,
1689
1690	.readable_reg = rt5631_readable_register,
1691	.volatile_reg = rt5631_volatile_register,
1692	.max_register = RT5631_VENDOR_ID2,
1693	.reg_defaults = rt5631_reg,
1694	.num_reg_defaults = ARRAY_SIZE(rt5631_reg),
1695	.cache_type = REGCACHE_RBTREE,
 
 
1696};
1697
1698static int rt5631_i2c_probe(struct i2c_client *i2c,
1699		    const struct i2c_device_id *id)
1700{
1701	struct rt5631_priv *rt5631;
1702	int ret;
1703
1704	rt5631 = devm_kzalloc(&i2c->dev, sizeof(struct rt5631_priv),
1705			      GFP_KERNEL);
1706	if (NULL == rt5631)
1707		return -ENOMEM;
1708
1709	i2c_set_clientdata(i2c, rt5631);
1710
1711	rt5631->regmap = devm_regmap_init_i2c(i2c, &rt5631_regmap_config);
1712	if (IS_ERR(rt5631->regmap))
1713		return PTR_ERR(rt5631->regmap);
1714
1715	ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_rt5631,
 
1716			rt5631_dai, ARRAY_SIZE(rt5631_dai));
1717	return ret;
1718}
1719
1720static int rt5631_i2c_remove(struct i2c_client *client)
1721{
1722	snd_soc_unregister_codec(&client->dev);
1723	return 0;
1724}
1725
1726static struct i2c_driver rt5631_i2c_driver = {
1727	.driver = {
1728		.name = "rt5631",
1729		.of_match_table = of_match_ptr(rt5631_i2c_dt_ids),
1730	},
1731	.probe = rt5631_i2c_probe,
1732	.remove   = rt5631_i2c_remove,
1733	.id_table = rt5631_i2c_id,
1734};
1735
1736module_i2c_driver(rt5631_i2c_driver);
1737
1738MODULE_DESCRIPTION("ASoC RT5631 driver");
1739MODULE_AUTHOR("flove <flove@realtek.com>");
1740MODULE_LICENSE("GPL");