cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

rt5677.c (187318B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * rt5677.c  --  RT5677 ALSA SoC audio codec driver
      4 *
      5 * Copyright 2013 Realtek Semiconductor Corp.
      6 * Author: Oder Chiou <oder_chiou@realtek.com>
      7 */
      8
      9#include <linux/acpi.h>
     10#include <linux/fs.h>
     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/regmap.h>
     17#include <linux/i2c.h>
     18#include <linux/platform_device.h>
     19#include <linux/spi/spi.h>
     20#include <linux/firmware.h>
     21#include <linux/of_device.h>
     22#include <linux/property.h>
     23#include <linux/irq.h>
     24#include <linux/interrupt.h>
     25#include <linux/irqdomain.h>
     26#include <linux/workqueue.h>
     27#include <sound/core.h>
     28#include <sound/pcm.h>
     29#include <sound/pcm_params.h>
     30#include <sound/soc.h>
     31#include <sound/soc-dapm.h>
     32#include <sound/initval.h>
     33#include <sound/tlv.h>
     34
     35#include "rl6231.h"
     36#include "rt5677.h"
     37#include "rt5677-spi.h"
     38
     39#define RT5677_DEVICE_ID 0x6327
     40
     41/* Register controlling boot vector */
     42#define RT5677_DSP_BOOT_VECTOR		0x1801f090
     43#define RT5677_MODEL_ADDR		0x5FFC9800
     44
     45#define RT5677_PR_RANGE_BASE (0xff + 1)
     46#define RT5677_PR_SPACING 0x100
     47
     48#define RT5677_PR_BASE (RT5677_PR_RANGE_BASE + (0 * RT5677_PR_SPACING))
     49
     50static const struct regmap_range_cfg rt5677_ranges[] = {
     51	{
     52		.name = "PR",
     53		.range_min = RT5677_PR_BASE,
     54		.range_max = RT5677_PR_BASE + 0xfd,
     55		.selector_reg = RT5677_PRIV_INDEX,
     56		.selector_mask = 0xff,
     57		.selector_shift = 0x0,
     58		.window_start = RT5677_PRIV_DATA,
     59		.window_len = 0x1,
     60	},
     61};
     62
     63static const struct reg_sequence init_list[] = {
     64	{RT5677_ASRC_12,	0x0018},
     65	{RT5677_PR_BASE + 0x3d,	0x364d},
     66	{RT5677_PR_BASE + 0x17,	0x4fc0},
     67	{RT5677_PR_BASE + 0x13,	0x0312},
     68	{RT5677_PR_BASE + 0x1e,	0x0000},
     69	{RT5677_PR_BASE + 0x12,	0x0eaa},
     70	{RT5677_PR_BASE + 0x14,	0x018a},
     71	{RT5677_PR_BASE + 0x15,	0x0490},
     72	{RT5677_PR_BASE + 0x38,	0x0f71},
     73	{RT5677_PR_BASE + 0x39,	0x0f71},
     74};
     75#define RT5677_INIT_REG_LEN ARRAY_SIZE(init_list)
     76
     77static const struct reg_default rt5677_reg[] = {
     78	{RT5677_RESET			, 0x0000},
     79	{RT5677_LOUT1			, 0xa800},
     80	{RT5677_IN1			, 0x0000},
     81	{RT5677_MICBIAS			, 0x0000},
     82	{RT5677_SLIMBUS_PARAM		, 0x0000},
     83	{RT5677_SLIMBUS_RX		, 0x0000},
     84	{RT5677_SLIMBUS_CTRL		, 0x0000},
     85	{RT5677_SIDETONE_CTRL		, 0x000b},
     86	{RT5677_ANA_DAC1_2_3_SRC	, 0x0000},
     87	{RT5677_IF_DSP_DAC3_4_MIXER	, 0x1111},
     88	{RT5677_DAC4_DIG_VOL		, 0xafaf},
     89	{RT5677_DAC3_DIG_VOL		, 0xafaf},
     90	{RT5677_DAC1_DIG_VOL		, 0xafaf},
     91	{RT5677_DAC2_DIG_VOL		, 0xafaf},
     92	{RT5677_IF_DSP_DAC2_MIXER	, 0x0011},
     93	{RT5677_STO1_ADC_DIG_VOL	, 0x2f2f},
     94	{RT5677_MONO_ADC_DIG_VOL	, 0x2f2f},
     95	{RT5677_STO1_2_ADC_BST		, 0x0000},
     96	{RT5677_STO2_ADC_DIG_VOL	, 0x2f2f},
     97	{RT5677_ADC_BST_CTRL2		, 0x0000},
     98	{RT5677_STO3_4_ADC_BST		, 0x0000},
     99	{RT5677_STO3_ADC_DIG_VOL	, 0x2f2f},
    100	{RT5677_STO4_ADC_DIG_VOL	, 0x2f2f},
    101	{RT5677_STO4_ADC_MIXER		, 0xd4c0},
    102	{RT5677_STO3_ADC_MIXER		, 0xd4c0},
    103	{RT5677_STO2_ADC_MIXER		, 0xd4c0},
    104	{RT5677_STO1_ADC_MIXER		, 0xd4c0},
    105	{RT5677_MONO_ADC_MIXER		, 0xd4d1},
    106	{RT5677_ADC_IF_DSP_DAC1_MIXER	, 0x8080},
    107	{RT5677_STO1_DAC_MIXER		, 0xaaaa},
    108	{RT5677_MONO_DAC_MIXER		, 0xaaaa},
    109	{RT5677_DD1_MIXER		, 0xaaaa},
    110	{RT5677_DD2_MIXER		, 0xaaaa},
    111	{RT5677_IF3_DATA		, 0x0000},
    112	{RT5677_IF4_DATA		, 0x0000},
    113	{RT5677_PDM_OUT_CTRL		, 0x8888},
    114	{RT5677_PDM_DATA_CTRL1		, 0x0000},
    115	{RT5677_PDM_DATA_CTRL2		, 0x0000},
    116	{RT5677_PDM1_DATA_CTRL2		, 0x0000},
    117	{RT5677_PDM1_DATA_CTRL3		, 0x0000},
    118	{RT5677_PDM1_DATA_CTRL4		, 0x0000},
    119	{RT5677_PDM2_DATA_CTRL2		, 0x0000},
    120	{RT5677_PDM2_DATA_CTRL3		, 0x0000},
    121	{RT5677_PDM2_DATA_CTRL4		, 0x0000},
    122	{RT5677_TDM1_CTRL1		, 0x0300},
    123	{RT5677_TDM1_CTRL2		, 0x0000},
    124	{RT5677_TDM1_CTRL3		, 0x4000},
    125	{RT5677_TDM1_CTRL4		, 0x0123},
    126	{RT5677_TDM1_CTRL5		, 0x4567},
    127	{RT5677_TDM2_CTRL1		, 0x0300},
    128	{RT5677_TDM2_CTRL2		, 0x0000},
    129	{RT5677_TDM2_CTRL3		, 0x4000},
    130	{RT5677_TDM2_CTRL4		, 0x0123},
    131	{RT5677_TDM2_CTRL5		, 0x4567},
    132	{RT5677_I2C_MASTER_CTRL1	, 0x0001},
    133	{RT5677_I2C_MASTER_CTRL2	, 0x0000},
    134	{RT5677_I2C_MASTER_CTRL3	, 0x0000},
    135	{RT5677_I2C_MASTER_CTRL4	, 0x0000},
    136	{RT5677_I2C_MASTER_CTRL5	, 0x0000},
    137	{RT5677_I2C_MASTER_CTRL6	, 0x0000},
    138	{RT5677_I2C_MASTER_CTRL7	, 0x0000},
    139	{RT5677_I2C_MASTER_CTRL8	, 0x0000},
    140	{RT5677_DMIC_CTRL1		, 0x1505},
    141	{RT5677_DMIC_CTRL2		, 0x0055},
    142	{RT5677_HAP_GENE_CTRL1		, 0x0111},
    143	{RT5677_HAP_GENE_CTRL2		, 0x0064},
    144	{RT5677_HAP_GENE_CTRL3		, 0xef0e},
    145	{RT5677_HAP_GENE_CTRL4		, 0xf0f0},
    146	{RT5677_HAP_GENE_CTRL5		, 0xef0e},
    147	{RT5677_HAP_GENE_CTRL6		, 0xf0f0},
    148	{RT5677_HAP_GENE_CTRL7		, 0xef0e},
    149	{RT5677_HAP_GENE_CTRL8		, 0xf0f0},
    150	{RT5677_HAP_GENE_CTRL9		, 0xf000},
    151	{RT5677_HAP_GENE_CTRL10		, 0x0000},
    152	{RT5677_PWR_DIG1		, 0x0000},
    153	{RT5677_PWR_DIG2		, 0x0000},
    154	{RT5677_PWR_ANLG1		, 0x0055},
    155	{RT5677_PWR_ANLG2		, 0x0000},
    156	{RT5677_PWR_DSP1		, 0x0001},
    157	{RT5677_PWR_DSP_ST		, 0x0000},
    158	{RT5677_PWR_DSP2		, 0x0000},
    159	{RT5677_ADC_DAC_HPF_CTRL1	, 0x0e00},
    160	{RT5677_PRIV_INDEX		, 0x0000},
    161	{RT5677_PRIV_DATA		, 0x0000},
    162	{RT5677_I2S4_SDP		, 0x8000},
    163	{RT5677_I2S1_SDP		, 0x8000},
    164	{RT5677_I2S2_SDP		, 0x8000},
    165	{RT5677_I2S3_SDP		, 0x8000},
    166	{RT5677_CLK_TREE_CTRL1		, 0x1111},
    167	{RT5677_CLK_TREE_CTRL2		, 0x1111},
    168	{RT5677_CLK_TREE_CTRL3		, 0x0000},
    169	{RT5677_PLL1_CTRL1		, 0x0000},
    170	{RT5677_PLL1_CTRL2		, 0x0000},
    171	{RT5677_PLL2_CTRL1		, 0x0c60},
    172	{RT5677_PLL2_CTRL2		, 0x2000},
    173	{RT5677_GLB_CLK1		, 0x0000},
    174	{RT5677_GLB_CLK2		, 0x0000},
    175	{RT5677_ASRC_1			, 0x0000},
    176	{RT5677_ASRC_2			, 0x0000},
    177	{RT5677_ASRC_3			, 0x0000},
    178	{RT5677_ASRC_4			, 0x0000},
    179	{RT5677_ASRC_5			, 0x0000},
    180	{RT5677_ASRC_6			, 0x0000},
    181	{RT5677_ASRC_7			, 0x0000},
    182	{RT5677_ASRC_8			, 0x0000},
    183	{RT5677_ASRC_9			, 0x0000},
    184	{RT5677_ASRC_10			, 0x0000},
    185	{RT5677_ASRC_11			, 0x0000},
    186	{RT5677_ASRC_12			, 0x0018},
    187	{RT5677_ASRC_13			, 0x0000},
    188	{RT5677_ASRC_14			, 0x0000},
    189	{RT5677_ASRC_15			, 0x0000},
    190	{RT5677_ASRC_16			, 0x0000},
    191	{RT5677_ASRC_17			, 0x0000},
    192	{RT5677_ASRC_18			, 0x0000},
    193	{RT5677_ASRC_19			, 0x0000},
    194	{RT5677_ASRC_20			, 0x0000},
    195	{RT5677_ASRC_21			, 0x000c},
    196	{RT5677_ASRC_22			, 0x0000},
    197	{RT5677_ASRC_23			, 0x0000},
    198	{RT5677_VAD_CTRL1		, 0x2184},
    199	{RT5677_VAD_CTRL2		, 0x010a},
    200	{RT5677_VAD_CTRL3		, 0x0aea},
    201	{RT5677_VAD_CTRL4		, 0x000c},
    202	{RT5677_VAD_CTRL5		, 0x0000},
    203	{RT5677_DSP_INB_CTRL1		, 0x0000},
    204	{RT5677_DSP_INB_CTRL2		, 0x0000},
    205	{RT5677_DSP_IN_OUTB_CTRL	, 0x0000},
    206	{RT5677_DSP_OUTB0_1_DIG_VOL	, 0x2f2f},
    207	{RT5677_DSP_OUTB2_3_DIG_VOL	, 0x2f2f},
    208	{RT5677_DSP_OUTB4_5_DIG_VOL	, 0x2f2f},
    209	{RT5677_DSP_OUTB6_7_DIG_VOL	, 0x2f2f},
    210	{RT5677_ADC_EQ_CTRL1		, 0x6000},
    211	{RT5677_ADC_EQ_CTRL2		, 0x0000},
    212	{RT5677_EQ_CTRL1		, 0xc000},
    213	{RT5677_EQ_CTRL2		, 0x0000},
    214	{RT5677_EQ_CTRL3		, 0x0000},
    215	{RT5677_SOFT_VOL_ZERO_CROSS1	, 0x0009},
    216	{RT5677_JD_CTRL1		, 0x0000},
    217	{RT5677_JD_CTRL2		, 0x0000},
    218	{RT5677_JD_CTRL3		, 0x0000},
    219	{RT5677_IRQ_CTRL1		, 0x0000},
    220	{RT5677_IRQ_CTRL2		, 0x0000},
    221	{RT5677_GPIO_ST			, 0x0000},
    222	{RT5677_GPIO_CTRL1		, 0x0000},
    223	{RT5677_GPIO_CTRL2		, 0x0000},
    224	{RT5677_GPIO_CTRL3		, 0x0000},
    225	{RT5677_STO1_ADC_HI_FILTER1	, 0xb320},
    226	{RT5677_STO1_ADC_HI_FILTER2	, 0x0000},
    227	{RT5677_MONO_ADC_HI_FILTER1	, 0xb300},
    228	{RT5677_MONO_ADC_HI_FILTER2	, 0x0000},
    229	{RT5677_STO2_ADC_HI_FILTER1	, 0xb300},
    230	{RT5677_STO2_ADC_HI_FILTER2	, 0x0000},
    231	{RT5677_STO3_ADC_HI_FILTER1	, 0xb300},
    232	{RT5677_STO3_ADC_HI_FILTER2	, 0x0000},
    233	{RT5677_STO4_ADC_HI_FILTER1	, 0xb300},
    234	{RT5677_STO4_ADC_HI_FILTER2	, 0x0000},
    235	{RT5677_MB_DRC_CTRL1		, 0x0f20},
    236	{RT5677_DRC1_CTRL1		, 0x001f},
    237	{RT5677_DRC1_CTRL2		, 0x020c},
    238	{RT5677_DRC1_CTRL3		, 0x1f00},
    239	{RT5677_DRC1_CTRL4		, 0x0000},
    240	{RT5677_DRC1_CTRL5		, 0x0000},
    241	{RT5677_DRC1_CTRL6		, 0x0029},
    242	{RT5677_DRC2_CTRL1		, 0x001f},
    243	{RT5677_DRC2_CTRL2		, 0x020c},
    244	{RT5677_DRC2_CTRL3		, 0x1f00},
    245	{RT5677_DRC2_CTRL4		, 0x0000},
    246	{RT5677_DRC2_CTRL5		, 0x0000},
    247	{RT5677_DRC2_CTRL6		, 0x0029},
    248	{RT5677_DRC1_HL_CTRL1		, 0x8000},
    249	{RT5677_DRC1_HL_CTRL2		, 0x0200},
    250	{RT5677_DRC2_HL_CTRL1		, 0x8000},
    251	{RT5677_DRC2_HL_CTRL2		, 0x0200},
    252	{RT5677_DSP_INB1_SRC_CTRL1	, 0x5800},
    253	{RT5677_DSP_INB1_SRC_CTRL2	, 0x0000},
    254	{RT5677_DSP_INB1_SRC_CTRL3	, 0x0000},
    255	{RT5677_DSP_INB1_SRC_CTRL4	, 0x0800},
    256	{RT5677_DSP_INB2_SRC_CTRL1	, 0x5800},
    257	{RT5677_DSP_INB2_SRC_CTRL2	, 0x0000},
    258	{RT5677_DSP_INB2_SRC_CTRL3	, 0x0000},
    259	{RT5677_DSP_INB2_SRC_CTRL4	, 0x0800},
    260	{RT5677_DSP_INB3_SRC_CTRL1	, 0x5800},
    261	{RT5677_DSP_INB3_SRC_CTRL2	, 0x0000},
    262	{RT5677_DSP_INB3_SRC_CTRL3	, 0x0000},
    263	{RT5677_DSP_INB3_SRC_CTRL4	, 0x0800},
    264	{RT5677_DSP_OUTB1_SRC_CTRL1	, 0x5800},
    265	{RT5677_DSP_OUTB1_SRC_CTRL2	, 0x0000},
    266	{RT5677_DSP_OUTB1_SRC_CTRL3	, 0x0000},
    267	{RT5677_DSP_OUTB1_SRC_CTRL4	, 0x0800},
    268	{RT5677_DSP_OUTB2_SRC_CTRL1	, 0x5800},
    269	{RT5677_DSP_OUTB2_SRC_CTRL2	, 0x0000},
    270	{RT5677_DSP_OUTB2_SRC_CTRL3	, 0x0000},
    271	{RT5677_DSP_OUTB2_SRC_CTRL4	, 0x0800},
    272	{RT5677_DSP_OUTB_0123_MIXER_CTRL, 0xfefe},
    273	{RT5677_DSP_OUTB_45_MIXER_CTRL	, 0xfefe},
    274	{RT5677_DSP_OUTB_67_MIXER_CTRL	, 0xfefe},
    275	{RT5677_DIG_MISC		, 0x0000},
    276	{RT5677_GEN_CTRL1		, 0x0000},
    277	{RT5677_GEN_CTRL2		, 0x0000},
    278	{RT5677_VENDOR_ID		, 0x0000},
    279	{RT5677_VENDOR_ID1		, 0x10ec},
    280	{RT5677_VENDOR_ID2		, 0x6327},
    281};
    282
    283static bool rt5677_volatile_register(struct device *dev, unsigned int reg)
    284{
    285	int i;
    286
    287	for (i = 0; i < ARRAY_SIZE(rt5677_ranges); i++) {
    288		if (reg >= rt5677_ranges[i].range_min &&
    289			reg <= rt5677_ranges[i].range_max) {
    290			return true;
    291		}
    292	}
    293
    294	switch (reg) {
    295	case RT5677_RESET:
    296	case RT5677_SLIMBUS_PARAM:
    297	case RT5677_PDM_DATA_CTRL1:
    298	case RT5677_PDM_DATA_CTRL2:
    299	case RT5677_PDM1_DATA_CTRL4:
    300	case RT5677_PDM2_DATA_CTRL4:
    301	case RT5677_I2C_MASTER_CTRL1:
    302	case RT5677_I2C_MASTER_CTRL7:
    303	case RT5677_I2C_MASTER_CTRL8:
    304	case RT5677_HAP_GENE_CTRL2:
    305	case RT5677_PWR_ANLG2: /* Modified by DSP firmware */
    306	case RT5677_PWR_DSP_ST:
    307	case RT5677_PRIV_DATA:
    308	case RT5677_ASRC_22:
    309	case RT5677_ASRC_23:
    310	case RT5677_VAD_CTRL5:
    311	case RT5677_ADC_EQ_CTRL1:
    312	case RT5677_EQ_CTRL1:
    313	case RT5677_IRQ_CTRL1:
    314	case RT5677_IRQ_CTRL2:
    315	case RT5677_GPIO_ST:
    316	case RT5677_GPIO_CTRL1: /* Modified by DSP firmware */
    317	case RT5677_GPIO_CTRL2: /* Modified by DSP firmware */
    318	case RT5677_DSP_INB1_SRC_CTRL4:
    319	case RT5677_DSP_INB2_SRC_CTRL4:
    320	case RT5677_DSP_INB3_SRC_CTRL4:
    321	case RT5677_DSP_OUTB1_SRC_CTRL4:
    322	case RT5677_DSP_OUTB2_SRC_CTRL4:
    323	case RT5677_VENDOR_ID:
    324	case RT5677_VENDOR_ID1:
    325	case RT5677_VENDOR_ID2:
    326		return true;
    327	default:
    328		return false;
    329	}
    330}
    331
    332static bool rt5677_readable_register(struct device *dev, unsigned int reg)
    333{
    334	int i;
    335
    336	for (i = 0; i < ARRAY_SIZE(rt5677_ranges); i++) {
    337		if (reg >= rt5677_ranges[i].range_min &&
    338			reg <= rt5677_ranges[i].range_max) {
    339			return true;
    340		}
    341	}
    342
    343	switch (reg) {
    344	case RT5677_RESET:
    345	case RT5677_LOUT1:
    346	case RT5677_IN1:
    347	case RT5677_MICBIAS:
    348	case RT5677_SLIMBUS_PARAM:
    349	case RT5677_SLIMBUS_RX:
    350	case RT5677_SLIMBUS_CTRL:
    351	case RT5677_SIDETONE_CTRL:
    352	case RT5677_ANA_DAC1_2_3_SRC:
    353	case RT5677_IF_DSP_DAC3_4_MIXER:
    354	case RT5677_DAC4_DIG_VOL:
    355	case RT5677_DAC3_DIG_VOL:
    356	case RT5677_DAC1_DIG_VOL:
    357	case RT5677_DAC2_DIG_VOL:
    358	case RT5677_IF_DSP_DAC2_MIXER:
    359	case RT5677_STO1_ADC_DIG_VOL:
    360	case RT5677_MONO_ADC_DIG_VOL:
    361	case RT5677_STO1_2_ADC_BST:
    362	case RT5677_STO2_ADC_DIG_VOL:
    363	case RT5677_ADC_BST_CTRL2:
    364	case RT5677_STO3_4_ADC_BST:
    365	case RT5677_STO3_ADC_DIG_VOL:
    366	case RT5677_STO4_ADC_DIG_VOL:
    367	case RT5677_STO4_ADC_MIXER:
    368	case RT5677_STO3_ADC_MIXER:
    369	case RT5677_STO2_ADC_MIXER:
    370	case RT5677_STO1_ADC_MIXER:
    371	case RT5677_MONO_ADC_MIXER:
    372	case RT5677_ADC_IF_DSP_DAC1_MIXER:
    373	case RT5677_STO1_DAC_MIXER:
    374	case RT5677_MONO_DAC_MIXER:
    375	case RT5677_DD1_MIXER:
    376	case RT5677_DD2_MIXER:
    377	case RT5677_IF3_DATA:
    378	case RT5677_IF4_DATA:
    379	case RT5677_PDM_OUT_CTRL:
    380	case RT5677_PDM_DATA_CTRL1:
    381	case RT5677_PDM_DATA_CTRL2:
    382	case RT5677_PDM1_DATA_CTRL2:
    383	case RT5677_PDM1_DATA_CTRL3:
    384	case RT5677_PDM1_DATA_CTRL4:
    385	case RT5677_PDM2_DATA_CTRL2:
    386	case RT5677_PDM2_DATA_CTRL3:
    387	case RT5677_PDM2_DATA_CTRL4:
    388	case RT5677_TDM1_CTRL1:
    389	case RT5677_TDM1_CTRL2:
    390	case RT5677_TDM1_CTRL3:
    391	case RT5677_TDM1_CTRL4:
    392	case RT5677_TDM1_CTRL5:
    393	case RT5677_TDM2_CTRL1:
    394	case RT5677_TDM2_CTRL2:
    395	case RT5677_TDM2_CTRL3:
    396	case RT5677_TDM2_CTRL4:
    397	case RT5677_TDM2_CTRL5:
    398	case RT5677_I2C_MASTER_CTRL1:
    399	case RT5677_I2C_MASTER_CTRL2:
    400	case RT5677_I2C_MASTER_CTRL3:
    401	case RT5677_I2C_MASTER_CTRL4:
    402	case RT5677_I2C_MASTER_CTRL5:
    403	case RT5677_I2C_MASTER_CTRL6:
    404	case RT5677_I2C_MASTER_CTRL7:
    405	case RT5677_I2C_MASTER_CTRL8:
    406	case RT5677_DMIC_CTRL1:
    407	case RT5677_DMIC_CTRL2:
    408	case RT5677_HAP_GENE_CTRL1:
    409	case RT5677_HAP_GENE_CTRL2:
    410	case RT5677_HAP_GENE_CTRL3:
    411	case RT5677_HAP_GENE_CTRL4:
    412	case RT5677_HAP_GENE_CTRL5:
    413	case RT5677_HAP_GENE_CTRL6:
    414	case RT5677_HAP_GENE_CTRL7:
    415	case RT5677_HAP_GENE_CTRL8:
    416	case RT5677_HAP_GENE_CTRL9:
    417	case RT5677_HAP_GENE_CTRL10:
    418	case RT5677_PWR_DIG1:
    419	case RT5677_PWR_DIG2:
    420	case RT5677_PWR_ANLG1:
    421	case RT5677_PWR_ANLG2:
    422	case RT5677_PWR_DSP1:
    423	case RT5677_PWR_DSP_ST:
    424	case RT5677_PWR_DSP2:
    425	case RT5677_ADC_DAC_HPF_CTRL1:
    426	case RT5677_PRIV_INDEX:
    427	case RT5677_PRIV_DATA:
    428	case RT5677_I2S4_SDP:
    429	case RT5677_I2S1_SDP:
    430	case RT5677_I2S2_SDP:
    431	case RT5677_I2S3_SDP:
    432	case RT5677_CLK_TREE_CTRL1:
    433	case RT5677_CLK_TREE_CTRL2:
    434	case RT5677_CLK_TREE_CTRL3:
    435	case RT5677_PLL1_CTRL1:
    436	case RT5677_PLL1_CTRL2:
    437	case RT5677_PLL2_CTRL1:
    438	case RT5677_PLL2_CTRL2:
    439	case RT5677_GLB_CLK1:
    440	case RT5677_GLB_CLK2:
    441	case RT5677_ASRC_1:
    442	case RT5677_ASRC_2:
    443	case RT5677_ASRC_3:
    444	case RT5677_ASRC_4:
    445	case RT5677_ASRC_5:
    446	case RT5677_ASRC_6:
    447	case RT5677_ASRC_7:
    448	case RT5677_ASRC_8:
    449	case RT5677_ASRC_9:
    450	case RT5677_ASRC_10:
    451	case RT5677_ASRC_11:
    452	case RT5677_ASRC_12:
    453	case RT5677_ASRC_13:
    454	case RT5677_ASRC_14:
    455	case RT5677_ASRC_15:
    456	case RT5677_ASRC_16:
    457	case RT5677_ASRC_17:
    458	case RT5677_ASRC_18:
    459	case RT5677_ASRC_19:
    460	case RT5677_ASRC_20:
    461	case RT5677_ASRC_21:
    462	case RT5677_ASRC_22:
    463	case RT5677_ASRC_23:
    464	case RT5677_VAD_CTRL1:
    465	case RT5677_VAD_CTRL2:
    466	case RT5677_VAD_CTRL3:
    467	case RT5677_VAD_CTRL4:
    468	case RT5677_VAD_CTRL5:
    469	case RT5677_DSP_INB_CTRL1:
    470	case RT5677_DSP_INB_CTRL2:
    471	case RT5677_DSP_IN_OUTB_CTRL:
    472	case RT5677_DSP_OUTB0_1_DIG_VOL:
    473	case RT5677_DSP_OUTB2_3_DIG_VOL:
    474	case RT5677_DSP_OUTB4_5_DIG_VOL:
    475	case RT5677_DSP_OUTB6_7_DIG_VOL:
    476	case RT5677_ADC_EQ_CTRL1:
    477	case RT5677_ADC_EQ_CTRL2:
    478	case RT5677_EQ_CTRL1:
    479	case RT5677_EQ_CTRL2:
    480	case RT5677_EQ_CTRL3:
    481	case RT5677_SOFT_VOL_ZERO_CROSS1:
    482	case RT5677_JD_CTRL1:
    483	case RT5677_JD_CTRL2:
    484	case RT5677_JD_CTRL3:
    485	case RT5677_IRQ_CTRL1:
    486	case RT5677_IRQ_CTRL2:
    487	case RT5677_GPIO_ST:
    488	case RT5677_GPIO_CTRL1:
    489	case RT5677_GPIO_CTRL2:
    490	case RT5677_GPIO_CTRL3:
    491	case RT5677_STO1_ADC_HI_FILTER1:
    492	case RT5677_STO1_ADC_HI_FILTER2:
    493	case RT5677_MONO_ADC_HI_FILTER1:
    494	case RT5677_MONO_ADC_HI_FILTER2:
    495	case RT5677_STO2_ADC_HI_FILTER1:
    496	case RT5677_STO2_ADC_HI_FILTER2:
    497	case RT5677_STO3_ADC_HI_FILTER1:
    498	case RT5677_STO3_ADC_HI_FILTER2:
    499	case RT5677_STO4_ADC_HI_FILTER1:
    500	case RT5677_STO4_ADC_HI_FILTER2:
    501	case RT5677_MB_DRC_CTRL1:
    502	case RT5677_DRC1_CTRL1:
    503	case RT5677_DRC1_CTRL2:
    504	case RT5677_DRC1_CTRL3:
    505	case RT5677_DRC1_CTRL4:
    506	case RT5677_DRC1_CTRL5:
    507	case RT5677_DRC1_CTRL6:
    508	case RT5677_DRC2_CTRL1:
    509	case RT5677_DRC2_CTRL2:
    510	case RT5677_DRC2_CTRL3:
    511	case RT5677_DRC2_CTRL4:
    512	case RT5677_DRC2_CTRL5:
    513	case RT5677_DRC2_CTRL6:
    514	case RT5677_DRC1_HL_CTRL1:
    515	case RT5677_DRC1_HL_CTRL2:
    516	case RT5677_DRC2_HL_CTRL1:
    517	case RT5677_DRC2_HL_CTRL2:
    518	case RT5677_DSP_INB1_SRC_CTRL1:
    519	case RT5677_DSP_INB1_SRC_CTRL2:
    520	case RT5677_DSP_INB1_SRC_CTRL3:
    521	case RT5677_DSP_INB1_SRC_CTRL4:
    522	case RT5677_DSP_INB2_SRC_CTRL1:
    523	case RT5677_DSP_INB2_SRC_CTRL2:
    524	case RT5677_DSP_INB2_SRC_CTRL3:
    525	case RT5677_DSP_INB2_SRC_CTRL4:
    526	case RT5677_DSP_INB3_SRC_CTRL1:
    527	case RT5677_DSP_INB3_SRC_CTRL2:
    528	case RT5677_DSP_INB3_SRC_CTRL3:
    529	case RT5677_DSP_INB3_SRC_CTRL4:
    530	case RT5677_DSP_OUTB1_SRC_CTRL1:
    531	case RT5677_DSP_OUTB1_SRC_CTRL2:
    532	case RT5677_DSP_OUTB1_SRC_CTRL3:
    533	case RT5677_DSP_OUTB1_SRC_CTRL4:
    534	case RT5677_DSP_OUTB2_SRC_CTRL1:
    535	case RT5677_DSP_OUTB2_SRC_CTRL2:
    536	case RT5677_DSP_OUTB2_SRC_CTRL3:
    537	case RT5677_DSP_OUTB2_SRC_CTRL4:
    538	case RT5677_DSP_OUTB_0123_MIXER_CTRL:
    539	case RT5677_DSP_OUTB_45_MIXER_CTRL:
    540	case RT5677_DSP_OUTB_67_MIXER_CTRL:
    541	case RT5677_DIG_MISC:
    542	case RT5677_GEN_CTRL1:
    543	case RT5677_GEN_CTRL2:
    544	case RT5677_VENDOR_ID:
    545	case RT5677_VENDOR_ID1:
    546	case RT5677_VENDOR_ID2:
    547		return true;
    548	default:
    549		return false;
    550	}
    551}
    552
    553/**
    554 * rt5677_dsp_mode_i2c_write_addr - Write value to address on DSP mode.
    555 * @rt5677: Private Data.
    556 * @addr: Address index.
    557 * @value: Address data.
    558 * @opcode: opcode value
    559 *
    560 * Returns 0 for success or negative error code.
    561 */
    562static int rt5677_dsp_mode_i2c_write_addr(struct rt5677_priv *rt5677,
    563		unsigned int addr, unsigned int value, unsigned int opcode)
    564{
    565	struct snd_soc_component *component = rt5677->component;
    566	int ret;
    567
    568	mutex_lock(&rt5677->dsp_cmd_lock);
    569
    570	ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_ADDR_MSB,
    571		addr >> 16);
    572	if (ret < 0) {
    573		dev_err(component->dev, "Failed to set addr msb value: %d\n", ret);
    574		goto err;
    575	}
    576
    577	ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_ADDR_LSB,
    578		addr & 0xffff);
    579	if (ret < 0) {
    580		dev_err(component->dev, "Failed to set addr lsb value: %d\n", ret);
    581		goto err;
    582	}
    583
    584	ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_DATA_MSB,
    585		value >> 16);
    586	if (ret < 0) {
    587		dev_err(component->dev, "Failed to set data msb value: %d\n", ret);
    588		goto err;
    589	}
    590
    591	ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_DATA_LSB,
    592		value & 0xffff);
    593	if (ret < 0) {
    594		dev_err(component->dev, "Failed to set data lsb value: %d\n", ret);
    595		goto err;
    596	}
    597
    598	ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_OP_CODE,
    599		opcode);
    600	if (ret < 0) {
    601		dev_err(component->dev, "Failed to set op code value: %d\n", ret);
    602		goto err;
    603	}
    604
    605err:
    606	mutex_unlock(&rt5677->dsp_cmd_lock);
    607
    608	return ret;
    609}
    610
    611/**
    612 * rt5677_dsp_mode_i2c_read_addr - Read value from address on DSP mode.
    613 * @rt5677: Private Data.
    614 * @addr: Address index.
    615 * @value: Address data.
    616 *
    617 *
    618 * Returns 0 for success or negative error code.
    619 */
    620static int rt5677_dsp_mode_i2c_read_addr(
    621	struct rt5677_priv *rt5677, unsigned int addr, unsigned int *value)
    622{
    623	struct snd_soc_component *component = rt5677->component;
    624	int ret;
    625	unsigned int msb, lsb;
    626
    627	mutex_lock(&rt5677->dsp_cmd_lock);
    628
    629	ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_ADDR_MSB,
    630		addr >> 16);
    631	if (ret < 0) {
    632		dev_err(component->dev, "Failed to set addr msb value: %d\n", ret);
    633		goto err;
    634	}
    635
    636	ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_ADDR_LSB,
    637		addr & 0xffff);
    638	if (ret < 0) {
    639		dev_err(component->dev, "Failed to set addr lsb value: %d\n", ret);
    640		goto err;
    641	}
    642
    643	ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_OP_CODE,
    644		0x0002);
    645	if (ret < 0) {
    646		dev_err(component->dev, "Failed to set op code value: %d\n", ret);
    647		goto err;
    648	}
    649
    650	regmap_read(rt5677->regmap_physical, RT5677_DSP_I2C_DATA_MSB, &msb);
    651	regmap_read(rt5677->regmap_physical, RT5677_DSP_I2C_DATA_LSB, &lsb);
    652	*value = (msb << 16) | lsb;
    653
    654err:
    655	mutex_unlock(&rt5677->dsp_cmd_lock);
    656
    657	return ret;
    658}
    659
    660/**
    661 * rt5677_dsp_mode_i2c_write - Write register on DSP mode.
    662 * @rt5677: Private Data.
    663 * @reg: Register index.
    664 * @value: Register data.
    665 *
    666 *
    667 * Returns 0 for success or negative error code.
    668 */
    669static int rt5677_dsp_mode_i2c_write(struct rt5677_priv *rt5677,
    670		unsigned int reg, unsigned int value)
    671{
    672	return rt5677_dsp_mode_i2c_write_addr(rt5677, 0x18020000 + reg * 2,
    673		value, 0x0001);
    674}
    675
    676/**
    677 * rt5677_dsp_mode_i2c_read - Read register on DSP mode.
    678 * @rt5677: Private Data
    679 * @reg: Register index.
    680 * @value: Register data.
    681 *
    682 *
    683 * Returns 0 for success or negative error code.
    684 */
    685static int rt5677_dsp_mode_i2c_read(
    686	struct rt5677_priv *rt5677, unsigned int reg, unsigned int *value)
    687{
    688	int ret = rt5677_dsp_mode_i2c_read_addr(rt5677, 0x18020000 + reg * 2,
    689		value);
    690
    691	*value &= 0xffff;
    692
    693	return ret;
    694}
    695
    696static void rt5677_set_dsp_mode(struct rt5677_priv *rt5677, bool on)
    697{
    698	if (on) {
    699		regmap_update_bits(rt5677->regmap, RT5677_PWR_DSP1,
    700			RT5677_PWR_DSP, RT5677_PWR_DSP);
    701		rt5677->is_dsp_mode = true;
    702	} else {
    703		regmap_update_bits(rt5677->regmap, RT5677_PWR_DSP1,
    704			RT5677_PWR_DSP, 0x0);
    705		rt5677->is_dsp_mode = false;
    706	}
    707}
    708
    709static unsigned int rt5677_set_vad_source(struct rt5677_priv *rt5677)
    710{
    711	struct snd_soc_dapm_context *dapm =
    712			snd_soc_component_get_dapm(rt5677->component);
    713	/* Force dapm to sync before we enable the
    714	 * DSP to prevent write corruption
    715	 */
    716	snd_soc_dapm_sync(dapm);
    717
    718	/* DMIC1 power = enabled
    719	 * DMIC CLK = 256 * fs / 12
    720	 */
    721	regmap_update_bits(rt5677->regmap, RT5677_DMIC_CTRL1,
    722		RT5677_DMIC_CLK_MASK, 5 << RT5677_DMIC_CLK_SFT);
    723
    724	/* I2S pre divide 2 = /6 (clk_sys2) */
    725	regmap_update_bits(rt5677->regmap, RT5677_CLK_TREE_CTRL1,
    726		RT5677_I2S_PD2_MASK, RT5677_I2S_PD2_6);
    727
    728	/* DSP Clock = MCLK1 (bypassed PLL2) */
    729	regmap_write(rt5677->regmap, RT5677_GLB_CLK2,
    730		RT5677_DSP_CLK_SRC_BYPASS);
    731
    732	/* SAD Threshold1 */
    733	regmap_write(rt5677->regmap, RT5677_VAD_CTRL2, 0x013f);
    734	/* SAD Threshold2 */
    735	regmap_write(rt5677->regmap, RT5677_VAD_CTRL3, 0x0ae5);
    736	/* SAD Sample Rate Converter = Up 6 (8K to 48K)
    737	 * SAD Output Sample Rate = Same as I2S
    738	 * SAD Threshold3
    739	 */
    740	regmap_update_bits(rt5677->regmap, RT5677_VAD_CTRL4,
    741		RT5677_VAD_OUT_SRC_RATE_MASK | RT5677_VAD_OUT_SRC_MASK |
    742		RT5677_VAD_LV_DIFF_MASK, 0x7f << RT5677_VAD_LV_DIFF_SFT);
    743	/* Minimum frame level within a pre-determined duration = 32 frames
    744	 * Bypass ADPCM Encoder/Decoder = Bypass ADPCM
    745	 * Automatic Push Data to SAD Buffer Once SAD Flag is triggered = enable
    746	 * SAD Buffer Over-Writing = enable
    747	 * SAD Buffer Pop Mode Control = disable
    748	 * SAD Buffer Push Mode Control = enable
    749	 * SAD Detector Control = enable
    750	 * SAD Function Control = enable
    751	 * SAD Function Reset = normal
    752	 */
    753	regmap_write(rt5677->regmap, RT5677_VAD_CTRL1,
    754		RT5677_VAD_FUNC_RESET | RT5677_VAD_FUNC_ENABLE |
    755		RT5677_VAD_DET_ENABLE | RT5677_VAD_BUF_PUSH |
    756		RT5677_VAD_BUF_OW | RT5677_VAD_FG2ENC |
    757		RT5677_VAD_ADPCM_BYPASS | 1 << RT5677_VAD_MIN_DUR_SFT);
    758
    759	/* VAD/SAD is not routed to the IRQ output (i.e. MX-BE[14] = 0), but it
    760	 * is routed to DSP_IRQ_0, so DSP firmware may use it to sleep and save
    761	 * power. See ALC5677 datasheet section 9.17 "GPIO, Interrupt and Jack
    762	 * Detection" for more info.
    763	 */
    764
    765	/* Private register, no doc */
    766	regmap_update_bits(rt5677->regmap, RT5677_PR_BASE + RT5677_BIAS_CUR4,
    767		0x0f00, 0x0100);
    768
    769	/* LDO2 output = 1.2V
    770	 * LDO1 output = 1.2V (LDO_IN = 1.8V)
    771	 */
    772	regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG1,
    773		RT5677_LDO1_SEL_MASK | RT5677_LDO2_SEL_MASK,
    774		5 << RT5677_LDO1_SEL_SFT | 5 << RT5677_LDO2_SEL_SFT);
    775
    776	/* Codec core power =  power on
    777	 * LDO1 power = power on
    778	 */
    779	regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2,
    780		RT5677_PWR_CORE | RT5677_PWR_LDO1,
    781		RT5677_PWR_CORE | RT5677_PWR_LDO1);
    782
    783	/* Isolation for DCVDD4 = normal (set during probe)
    784	 * Isolation for DCVDD2 = normal (set during probe)
    785	 * Isolation for DSP = normal
    786	 * Isolation for Band 0~7 = disable
    787	 * Isolation for InBound 4~10 and OutBound 4~10 = disable
    788	 */
    789	regmap_write(rt5677->regmap, RT5677_PWR_DSP2,
    790		RT5677_PWR_CORE_ISO | RT5677_PWR_DSP_ISO |
    791		RT5677_PWR_SR7_ISO | RT5677_PWR_SR6_ISO |
    792		RT5677_PWR_SR5_ISO | RT5677_PWR_SR4_ISO |
    793		RT5677_PWR_SR3_ISO | RT5677_PWR_SR2_ISO |
    794		RT5677_PWR_SR1_ISO | RT5677_PWR_SR0_ISO |
    795		RT5677_PWR_MLT_ISO);
    796
    797	/* System Band 0~7 = power on
    798	 * InBound 4~10 and OutBound 4~10 = power on
    799	 * DSP = power on
    800	 * DSP CPU = stop (will be set to "run" after firmware loaded)
    801	 */
    802	regmap_write(rt5677->regmap, RT5677_PWR_DSP1,
    803		RT5677_PWR_SR7 | RT5677_PWR_SR6 |
    804		RT5677_PWR_SR5 | RT5677_PWR_SR4 |
    805		RT5677_PWR_SR3 | RT5677_PWR_SR2 |
    806		RT5677_PWR_SR1 | RT5677_PWR_SR0 |
    807		RT5677_PWR_MLT | RT5677_PWR_DSP |
    808		RT5677_PWR_DSP_CPU);
    809
    810	return 0;
    811}
    812
    813static int rt5677_parse_and_load_dsp(struct rt5677_priv *rt5677, const u8 *buf,
    814		unsigned int len)
    815{
    816	struct snd_soc_component *component = rt5677->component;
    817	Elf32_Ehdr *elf_hdr;
    818	Elf32_Phdr *pr_hdr;
    819	Elf32_Half i;
    820	int ret = 0;
    821
    822	if (!buf || (len < sizeof(Elf32_Ehdr)))
    823		return -ENOMEM;
    824
    825	elf_hdr = (Elf32_Ehdr *)buf;
    826#ifndef EM_XTENSA
    827#define EM_XTENSA	94
    828#endif
    829	if (strncmp(elf_hdr->e_ident, ELFMAG, sizeof(ELFMAG) - 1))
    830		dev_err(component->dev, "Wrong ELF header prefix\n");
    831	if (elf_hdr->e_ehsize != sizeof(Elf32_Ehdr))
    832		dev_err(component->dev, "Wrong Elf header size\n");
    833	if (elf_hdr->e_machine != EM_XTENSA)
    834		dev_err(component->dev, "Wrong DSP code file\n");
    835
    836	if (len < elf_hdr->e_phoff)
    837		return -ENOMEM;
    838	pr_hdr = (Elf32_Phdr *)(buf + elf_hdr->e_phoff);
    839	for (i = 0; i < elf_hdr->e_phnum; i++) {
    840		/* TODO: handle p_memsz != p_filesz */
    841		if (pr_hdr->p_paddr && pr_hdr->p_filesz) {
    842			dev_info(component->dev, "Load 0x%x bytes to 0x%x\n",
    843					pr_hdr->p_filesz, pr_hdr->p_paddr);
    844
    845			ret = rt5677_spi_write(pr_hdr->p_paddr,
    846					buf + pr_hdr->p_offset,
    847					pr_hdr->p_filesz);
    848			if (ret)
    849				dev_err(component->dev, "Load firmware failed %d\n",
    850						ret);
    851		}
    852		pr_hdr++;
    853	}
    854	return ret;
    855}
    856
    857static int rt5677_load_dsp_from_file(struct rt5677_priv *rt5677)
    858{
    859	const struct firmware *fwp;
    860	struct device *dev = rt5677->component->dev;
    861	int ret = 0;
    862
    863	/* Load dsp firmware from rt5677_elf_vad file */
    864	ret = request_firmware(&fwp, "rt5677_elf_vad", dev);
    865	if (ret) {
    866		dev_err(dev, "Request rt5677_elf_vad failed %d\n", ret);
    867		return ret;
    868	}
    869	dev_info(dev, "Requested rt5677_elf_vad (%zu)\n", fwp->size);
    870
    871	ret = rt5677_parse_and_load_dsp(rt5677, fwp->data, fwp->size);
    872	release_firmware(fwp);
    873	return ret;
    874}
    875
    876static int rt5677_set_dsp_vad(struct snd_soc_component *component, bool on)
    877{
    878	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
    879	rt5677->dsp_vad_en_request = on;
    880	rt5677->dsp_vad_en = on;
    881
    882	if (!IS_ENABLED(CONFIG_SND_SOC_RT5677_SPI))
    883		return -ENXIO;
    884
    885	schedule_delayed_work(&rt5677->dsp_work, 0);
    886	return 0;
    887}
    888
    889static void rt5677_dsp_work(struct work_struct *work)
    890{
    891	struct rt5677_priv *rt5677 =
    892		container_of(work, struct rt5677_priv, dsp_work.work);
    893	static bool activity;
    894	bool enable = rt5677->dsp_vad_en;
    895	int i, val;
    896
    897
    898	dev_info(rt5677->component->dev, "DSP VAD: enable=%d, activity=%d\n",
    899			enable, activity);
    900
    901	if (enable && !activity) {
    902		activity = true;
    903
    904		/* Before a hotword is detected, GPIO1 pin is configured as IRQ
    905		 * output so that jack detect works. When a hotword is detected,
    906		 * the DSP firmware configures the GPIO1 pin as GPIO1 and
    907		 * drives a 1. rt5677_irq() is called after a rising edge on
    908		 * the GPIO1 pin, due to either jack detect event or hotword
    909		 * event, or both. All possible events are checked and handled
    910		 * in rt5677_irq() where GPIO1 pin is configured back to IRQ
    911		 * output if a hotword is detected.
    912		 */
    913
    914		rt5677_set_vad_source(rt5677);
    915		rt5677_set_dsp_mode(rt5677, true);
    916
    917#define RT5677_BOOT_RETRY 20
    918		for (i = 0; i < RT5677_BOOT_RETRY; i++) {
    919			regmap_read(rt5677->regmap, RT5677_PWR_DSP_ST, &val);
    920			if (val == 0x3ff)
    921				break;
    922			udelay(500);
    923		}
    924		if (i == RT5677_BOOT_RETRY && val != 0x3ff) {
    925			dev_err(rt5677->component->dev, "DSP Boot Timed Out!");
    926			return;
    927		}
    928
    929		/* Boot the firmware from IRAM instead of SRAM0. */
    930		rt5677_dsp_mode_i2c_write_addr(rt5677, RT5677_DSP_BOOT_VECTOR,
    931			0x0009, 0x0003);
    932		rt5677_dsp_mode_i2c_write_addr(rt5677, RT5677_DSP_BOOT_VECTOR,
    933			0x0019, 0x0003);
    934		rt5677_dsp_mode_i2c_write_addr(rt5677, RT5677_DSP_BOOT_VECTOR,
    935			0x0009, 0x0003);
    936
    937		rt5677_load_dsp_from_file(rt5677);
    938
    939		/* Set DSP CPU to Run */
    940		regmap_update_bits(rt5677->regmap, RT5677_PWR_DSP1,
    941			RT5677_PWR_DSP_CPU, 0x0);
    942	} else if (!enable && activity) {
    943		activity = false;
    944
    945		/* Don't turn off the DSP while handling irqs */
    946		mutex_lock(&rt5677->irq_lock);
    947		/* Set DSP CPU to Stop */
    948		regmap_update_bits(rt5677->regmap, RT5677_PWR_DSP1,
    949			RT5677_PWR_DSP_CPU, RT5677_PWR_DSP_CPU);
    950
    951		rt5677_set_dsp_mode(rt5677, false);
    952
    953		/* Disable and clear VAD interrupt */
    954		regmap_write(rt5677->regmap, RT5677_VAD_CTRL1, 0x2184);
    955
    956		/* Set GPIO1 pin back to be IRQ output for jack detect */
    957		regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL1,
    958			RT5677_GPIO1_PIN_MASK, RT5677_GPIO1_PIN_IRQ);
    959
    960		mutex_unlock(&rt5677->irq_lock);
    961	}
    962}
    963
    964static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -6525, 75, 0);
    965static const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -1725, 75, 0);
    966static const DECLARE_TLV_DB_SCALE(adc_bst_tlv, 0, 1200, 0);
    967static const DECLARE_TLV_DB_SCALE(st_vol_tlv, -4650, 150, 0);
    968
    969/* {0, +20, +24, +30, +35, +40, +44, +50, +52} dB */
    970static const DECLARE_TLV_DB_RANGE(bst_tlv,
    971	0, 0, TLV_DB_SCALE_ITEM(0, 0, 0),
    972	1, 1, TLV_DB_SCALE_ITEM(2000, 0, 0),
    973	2, 2, TLV_DB_SCALE_ITEM(2400, 0, 0),
    974	3, 5, TLV_DB_SCALE_ITEM(3000, 500, 0),
    975	6, 6, TLV_DB_SCALE_ITEM(4400, 0, 0),
    976	7, 7, TLV_DB_SCALE_ITEM(5000, 0, 0),
    977	8, 8, TLV_DB_SCALE_ITEM(5200, 0, 0)
    978);
    979
    980static int rt5677_dsp_vad_get(struct snd_kcontrol *kcontrol,
    981		struct snd_ctl_elem_value *ucontrol)
    982{
    983	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
    984	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
    985
    986	ucontrol->value.integer.value[0] = rt5677->dsp_vad_en_request;
    987
    988	return 0;
    989}
    990
    991static int rt5677_dsp_vad_put(struct snd_kcontrol *kcontrol,
    992		struct snd_ctl_elem_value *ucontrol)
    993{
    994	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
    995
    996	rt5677_set_dsp_vad(component, !!ucontrol->value.integer.value[0]);
    997
    998	return 0;
    999}
   1000
   1001static const struct snd_kcontrol_new rt5677_snd_controls[] = {
   1002	/* OUTPUT Control */
   1003	SOC_SINGLE("OUT1 Playback Switch", RT5677_LOUT1,
   1004		RT5677_LOUT1_L_MUTE_SFT, 1, 1),
   1005	SOC_SINGLE("OUT2 Playback Switch", RT5677_LOUT1,
   1006		RT5677_LOUT2_L_MUTE_SFT, 1, 1),
   1007	SOC_SINGLE("OUT3 Playback Switch", RT5677_LOUT1,
   1008		RT5677_LOUT3_L_MUTE_SFT, 1, 1),
   1009
   1010	/* DAC Digital Volume */
   1011	SOC_DOUBLE_TLV("DAC1 Playback Volume", RT5677_DAC1_DIG_VOL,
   1012		RT5677_L_VOL_SFT, RT5677_R_VOL_SFT, 127, 0, dac_vol_tlv),
   1013	SOC_DOUBLE_TLV("DAC2 Playback Volume", RT5677_DAC2_DIG_VOL,
   1014		RT5677_L_VOL_SFT, RT5677_R_VOL_SFT, 127, 0, dac_vol_tlv),
   1015	SOC_DOUBLE_TLV("DAC3 Playback Volume", RT5677_DAC3_DIG_VOL,
   1016		RT5677_L_VOL_SFT, RT5677_R_VOL_SFT, 127, 0, dac_vol_tlv),
   1017	SOC_DOUBLE_TLV("DAC4 Playback Volume", RT5677_DAC4_DIG_VOL,
   1018		RT5677_L_VOL_SFT, RT5677_R_VOL_SFT, 127, 0, dac_vol_tlv),
   1019
   1020	/* IN1/IN2 Control */
   1021	SOC_SINGLE_TLV("IN1 Boost", RT5677_IN1, RT5677_BST_SFT1, 8, 0, bst_tlv),
   1022	SOC_SINGLE_TLV("IN2 Boost", RT5677_IN1, RT5677_BST_SFT2, 8, 0, bst_tlv),
   1023
   1024	/* ADC Digital Volume Control */
   1025	SOC_DOUBLE("ADC1 Capture Switch", RT5677_STO1_ADC_DIG_VOL,
   1026		RT5677_L_MUTE_SFT, RT5677_R_MUTE_SFT, 1, 1),
   1027	SOC_DOUBLE("ADC2 Capture Switch", RT5677_STO2_ADC_DIG_VOL,
   1028		RT5677_L_MUTE_SFT, RT5677_R_MUTE_SFT, 1, 1),
   1029	SOC_DOUBLE("ADC3 Capture Switch", RT5677_STO3_ADC_DIG_VOL,
   1030		RT5677_L_MUTE_SFT, RT5677_R_MUTE_SFT, 1, 1),
   1031	SOC_DOUBLE("ADC4 Capture Switch", RT5677_STO4_ADC_DIG_VOL,
   1032		RT5677_L_MUTE_SFT, RT5677_R_MUTE_SFT, 1, 1),
   1033	SOC_DOUBLE("Mono ADC Capture Switch", RT5677_MONO_ADC_DIG_VOL,
   1034		RT5677_L_MUTE_SFT, RT5677_R_MUTE_SFT, 1, 1),
   1035
   1036	SOC_DOUBLE_TLV("ADC1 Capture Volume", RT5677_STO1_ADC_DIG_VOL,
   1037		RT5677_STO1_ADC_L_VOL_SFT, RT5677_STO1_ADC_R_VOL_SFT, 63, 0,
   1038		adc_vol_tlv),
   1039	SOC_DOUBLE_TLV("ADC2 Capture Volume", RT5677_STO2_ADC_DIG_VOL,
   1040		RT5677_STO1_ADC_L_VOL_SFT, RT5677_STO1_ADC_R_VOL_SFT, 63, 0,
   1041		adc_vol_tlv),
   1042	SOC_DOUBLE_TLV("ADC3 Capture Volume", RT5677_STO3_ADC_DIG_VOL,
   1043		RT5677_STO1_ADC_L_VOL_SFT, RT5677_STO1_ADC_R_VOL_SFT, 63, 0,
   1044		adc_vol_tlv),
   1045	SOC_DOUBLE_TLV("ADC4 Capture Volume", RT5677_STO4_ADC_DIG_VOL,
   1046		RT5677_STO1_ADC_L_VOL_SFT, RT5677_STO1_ADC_R_VOL_SFT, 63, 0,
   1047		adc_vol_tlv),
   1048	SOC_DOUBLE_TLV("Mono ADC Capture Volume", RT5677_MONO_ADC_DIG_VOL,
   1049		RT5677_MONO_ADC_L_VOL_SFT, RT5677_MONO_ADC_R_VOL_SFT, 63, 0,
   1050		adc_vol_tlv),
   1051
   1052	/* Sidetone Control */
   1053	SOC_SINGLE_TLV("Sidetone Volume", RT5677_SIDETONE_CTRL,
   1054		RT5677_ST_VOL_SFT, 31, 0, st_vol_tlv),
   1055
   1056	/* ADC Boost Volume Control */
   1057	SOC_DOUBLE_TLV("STO1 ADC Boost Volume", RT5677_STO1_2_ADC_BST,
   1058		RT5677_STO1_ADC_L_BST_SFT, RT5677_STO1_ADC_R_BST_SFT, 3, 0,
   1059		adc_bst_tlv),
   1060	SOC_DOUBLE_TLV("STO2 ADC Boost Volume", RT5677_STO1_2_ADC_BST,
   1061		RT5677_STO2_ADC_L_BST_SFT, RT5677_STO2_ADC_R_BST_SFT, 3, 0,
   1062		adc_bst_tlv),
   1063	SOC_DOUBLE_TLV("STO3 ADC Boost Volume", RT5677_STO3_4_ADC_BST,
   1064		RT5677_STO3_ADC_L_BST_SFT, RT5677_STO3_ADC_R_BST_SFT, 3, 0,
   1065		adc_bst_tlv),
   1066	SOC_DOUBLE_TLV("STO4 ADC Boost Volume", RT5677_STO3_4_ADC_BST,
   1067		RT5677_STO4_ADC_L_BST_SFT, RT5677_STO4_ADC_R_BST_SFT, 3, 0,
   1068		adc_bst_tlv),
   1069	SOC_DOUBLE_TLV("Mono ADC Boost Volume", RT5677_ADC_BST_CTRL2,
   1070		RT5677_MONO_ADC_L_BST_SFT, RT5677_MONO_ADC_R_BST_SFT, 3, 0,
   1071		adc_bst_tlv),
   1072
   1073	SOC_SINGLE_EXT("DSP VAD Switch", SND_SOC_NOPM, 0, 1, 0,
   1074		rt5677_dsp_vad_get, rt5677_dsp_vad_put),
   1075};
   1076
   1077/**
   1078 * set_dmic_clk - Set parameter of dmic.
   1079 *
   1080 * @w: DAPM widget.
   1081 * @kcontrol: The kcontrol of this widget.
   1082 * @event: Event id.
   1083 *
   1084 * Choose dmic clock between 1MHz and 3MHz.
   1085 * It is better for clock to approximate 3MHz.
   1086 */
   1087static int set_dmic_clk(struct snd_soc_dapm_widget *w,
   1088	struct snd_kcontrol *kcontrol, int event)
   1089{
   1090	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
   1091	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   1092	int idx, rate;
   1093
   1094	rate = rt5677->sysclk / rl6231_get_pre_div(rt5677->regmap,
   1095		RT5677_CLK_TREE_CTRL1, RT5677_I2S_PD1_SFT);
   1096	idx = rl6231_calc_dmic_clk(rate);
   1097	if (idx < 0)
   1098		dev_err(component->dev, "Failed to set DMIC clock\n");
   1099	else
   1100		regmap_update_bits(rt5677->regmap, RT5677_DMIC_CTRL1,
   1101			RT5677_DMIC_CLK_MASK, idx << RT5677_DMIC_CLK_SFT);
   1102	return idx;
   1103}
   1104
   1105static int is_sys_clk_from_pll(struct snd_soc_dapm_widget *source,
   1106			 struct snd_soc_dapm_widget *sink)
   1107{
   1108	struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
   1109	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   1110	unsigned int val;
   1111
   1112	regmap_read(rt5677->regmap, RT5677_GLB_CLK1, &val);
   1113	val &= RT5677_SCLK_SRC_MASK;
   1114	if (val == RT5677_SCLK_SRC_PLL1)
   1115		return 1;
   1116	else
   1117		return 0;
   1118}
   1119
   1120static int is_using_asrc(struct snd_soc_dapm_widget *source,
   1121			 struct snd_soc_dapm_widget *sink)
   1122{
   1123	struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
   1124	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   1125	unsigned int reg, shift, val;
   1126
   1127	if (source->reg == RT5677_ASRC_1) {
   1128		switch (source->shift) {
   1129		case 12:
   1130			reg = RT5677_ASRC_4;
   1131			shift = 0;
   1132			break;
   1133		case 13:
   1134			reg = RT5677_ASRC_4;
   1135			shift = 4;
   1136			break;
   1137		case 14:
   1138			reg = RT5677_ASRC_4;
   1139			shift = 8;
   1140			break;
   1141		case 15:
   1142			reg = RT5677_ASRC_4;
   1143			shift = 12;
   1144			break;
   1145		default:
   1146			return 0;
   1147		}
   1148	} else {
   1149		switch (source->shift) {
   1150		case 0:
   1151			reg = RT5677_ASRC_6;
   1152			shift = 8;
   1153			break;
   1154		case 1:
   1155			reg = RT5677_ASRC_6;
   1156			shift = 12;
   1157			break;
   1158		case 2:
   1159			reg = RT5677_ASRC_5;
   1160			shift = 0;
   1161			break;
   1162		case 3:
   1163			reg = RT5677_ASRC_5;
   1164			shift = 4;
   1165			break;
   1166		case 4:
   1167			reg = RT5677_ASRC_5;
   1168			shift = 8;
   1169			break;
   1170		case 5:
   1171			reg = RT5677_ASRC_5;
   1172			shift = 12;
   1173			break;
   1174		case 12:
   1175			reg = RT5677_ASRC_3;
   1176			shift = 0;
   1177			break;
   1178		case 13:
   1179			reg = RT5677_ASRC_3;
   1180			shift = 4;
   1181			break;
   1182		case 14:
   1183			reg = RT5677_ASRC_3;
   1184			shift = 12;
   1185			break;
   1186		default:
   1187			return 0;
   1188		}
   1189	}
   1190
   1191	regmap_read(rt5677->regmap, reg, &val);
   1192	val = (val >> shift) & 0xf;
   1193
   1194	switch (val) {
   1195	case 1 ... 6:
   1196		return 1;
   1197	default:
   1198		return 0;
   1199	}
   1200
   1201}
   1202
   1203static int can_use_asrc(struct snd_soc_dapm_widget *source,
   1204			 struct snd_soc_dapm_widget *sink)
   1205{
   1206	struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
   1207	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   1208
   1209	if (rt5677->sysclk > rt5677->lrck[RT5677_AIF1] * 384)
   1210		return 1;
   1211
   1212	return 0;
   1213}
   1214
   1215/**
   1216 * rt5677_sel_asrc_clk_src - select ASRC clock source for a set of filters
   1217 * @component: SoC audio component device.
   1218 * @filter_mask: mask of filters.
   1219 * @clk_src: clock source
   1220 *
   1221 * The ASRC function is for asynchronous MCLK and LRCK. Also, since RT5677 can
   1222 * only support standard 32fs or 64fs i2s format, ASRC should be enabled to
   1223 * support special i2s clock format such as Intel's 100fs(100 * sampling rate).
   1224 * ASRC function will track i2s clock and generate a corresponding system clock
   1225 * for codec. This function provides an API to select the clock source for a
   1226 * set of filters specified by the mask. And the codec driver will turn on ASRC
   1227 * for these filters if ASRC is selected as their clock source.
   1228 */
   1229int rt5677_sel_asrc_clk_src(struct snd_soc_component *component,
   1230		unsigned int filter_mask, unsigned int clk_src)
   1231{
   1232	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   1233	unsigned int asrc3_mask = 0, asrc3_value = 0;
   1234	unsigned int asrc4_mask = 0, asrc4_value = 0;
   1235	unsigned int asrc5_mask = 0, asrc5_value = 0;
   1236	unsigned int asrc6_mask = 0, asrc6_value = 0;
   1237	unsigned int asrc7_mask = 0, asrc7_value = 0;
   1238	unsigned int asrc8_mask = 0, asrc8_value = 0;
   1239
   1240	switch (clk_src) {
   1241	case RT5677_CLK_SEL_SYS:
   1242	case RT5677_CLK_SEL_I2S1_ASRC:
   1243	case RT5677_CLK_SEL_I2S2_ASRC:
   1244	case RT5677_CLK_SEL_I2S3_ASRC:
   1245	case RT5677_CLK_SEL_I2S4_ASRC:
   1246	case RT5677_CLK_SEL_I2S5_ASRC:
   1247	case RT5677_CLK_SEL_I2S6_ASRC:
   1248	case RT5677_CLK_SEL_SYS2:
   1249	case RT5677_CLK_SEL_SYS3:
   1250	case RT5677_CLK_SEL_SYS4:
   1251	case RT5677_CLK_SEL_SYS5:
   1252	case RT5677_CLK_SEL_SYS6:
   1253	case RT5677_CLK_SEL_SYS7:
   1254		break;
   1255
   1256	default:
   1257		return -EINVAL;
   1258	}
   1259
   1260	/* ASRC 3 */
   1261	if (filter_mask & RT5677_DA_STEREO_FILTER) {
   1262		asrc3_mask |= RT5677_DA_STO_CLK_SEL_MASK;
   1263		asrc3_value = (asrc3_value & ~RT5677_DA_STO_CLK_SEL_MASK)
   1264			| (clk_src << RT5677_DA_STO_CLK_SEL_SFT);
   1265	}
   1266
   1267	if (filter_mask & RT5677_DA_MONO2_L_FILTER) {
   1268		asrc3_mask |= RT5677_DA_MONO2L_CLK_SEL_MASK;
   1269		asrc3_value = (asrc3_value & ~RT5677_DA_MONO2L_CLK_SEL_MASK)
   1270			| (clk_src << RT5677_DA_MONO2L_CLK_SEL_SFT);
   1271	}
   1272
   1273	if (filter_mask & RT5677_DA_MONO2_R_FILTER) {
   1274		asrc3_mask |= RT5677_DA_MONO2R_CLK_SEL_MASK;
   1275		asrc3_value = (asrc3_value & ~RT5677_DA_MONO2R_CLK_SEL_MASK)
   1276			| (clk_src << RT5677_DA_MONO2R_CLK_SEL_SFT);
   1277	}
   1278
   1279	if (asrc3_mask)
   1280		regmap_update_bits(rt5677->regmap, RT5677_ASRC_3, asrc3_mask,
   1281			asrc3_value);
   1282
   1283	/* ASRC 4 */
   1284	if (filter_mask & RT5677_DA_MONO3_L_FILTER) {
   1285		asrc4_mask |= RT5677_DA_MONO3L_CLK_SEL_MASK;
   1286		asrc4_value = (asrc4_value & ~RT5677_DA_MONO3L_CLK_SEL_MASK)
   1287			| (clk_src << RT5677_DA_MONO3L_CLK_SEL_SFT);
   1288	}
   1289
   1290	if (filter_mask & RT5677_DA_MONO3_R_FILTER) {
   1291		asrc4_mask |= RT5677_DA_MONO3R_CLK_SEL_MASK;
   1292		asrc4_value = (asrc4_value & ~RT5677_DA_MONO3R_CLK_SEL_MASK)
   1293			| (clk_src << RT5677_DA_MONO3R_CLK_SEL_SFT);
   1294	}
   1295
   1296	if (filter_mask & RT5677_DA_MONO4_L_FILTER) {
   1297		asrc4_mask |= RT5677_DA_MONO4L_CLK_SEL_MASK;
   1298		asrc4_value = (asrc4_value & ~RT5677_DA_MONO4L_CLK_SEL_MASK)
   1299			| (clk_src << RT5677_DA_MONO4L_CLK_SEL_SFT);
   1300	}
   1301
   1302	if (filter_mask & RT5677_DA_MONO4_R_FILTER) {
   1303		asrc4_mask |= RT5677_DA_MONO4R_CLK_SEL_MASK;
   1304		asrc4_value = (asrc4_value & ~RT5677_DA_MONO4R_CLK_SEL_MASK)
   1305			| (clk_src << RT5677_DA_MONO4R_CLK_SEL_SFT);
   1306	}
   1307
   1308	if (asrc4_mask)
   1309		regmap_update_bits(rt5677->regmap, RT5677_ASRC_4, asrc4_mask,
   1310			asrc4_value);
   1311
   1312	/* ASRC 5 */
   1313	if (filter_mask & RT5677_AD_STEREO1_FILTER) {
   1314		asrc5_mask |= RT5677_AD_STO1_CLK_SEL_MASK;
   1315		asrc5_value = (asrc5_value & ~RT5677_AD_STO1_CLK_SEL_MASK)
   1316			| (clk_src << RT5677_AD_STO1_CLK_SEL_SFT);
   1317	}
   1318
   1319	if (filter_mask & RT5677_AD_STEREO2_FILTER) {
   1320		asrc5_mask |= RT5677_AD_STO2_CLK_SEL_MASK;
   1321		asrc5_value = (asrc5_value & ~RT5677_AD_STO2_CLK_SEL_MASK)
   1322			| (clk_src << RT5677_AD_STO2_CLK_SEL_SFT);
   1323	}
   1324
   1325	if (filter_mask & RT5677_AD_STEREO3_FILTER) {
   1326		asrc5_mask |= RT5677_AD_STO3_CLK_SEL_MASK;
   1327		asrc5_value = (asrc5_value & ~RT5677_AD_STO3_CLK_SEL_MASK)
   1328			| (clk_src << RT5677_AD_STO3_CLK_SEL_SFT);
   1329	}
   1330
   1331	if (filter_mask & RT5677_AD_STEREO4_FILTER) {
   1332		asrc5_mask |= RT5677_AD_STO4_CLK_SEL_MASK;
   1333		asrc5_value = (asrc5_value & ~RT5677_AD_STO4_CLK_SEL_MASK)
   1334			| (clk_src << RT5677_AD_STO4_CLK_SEL_SFT);
   1335	}
   1336
   1337	if (asrc5_mask)
   1338		regmap_update_bits(rt5677->regmap, RT5677_ASRC_5, asrc5_mask,
   1339			asrc5_value);
   1340
   1341	/* ASRC 6 */
   1342	if (filter_mask & RT5677_AD_MONO_L_FILTER) {
   1343		asrc6_mask |= RT5677_AD_MONOL_CLK_SEL_MASK;
   1344		asrc6_value = (asrc6_value & ~RT5677_AD_MONOL_CLK_SEL_MASK)
   1345			| (clk_src << RT5677_AD_MONOL_CLK_SEL_SFT);
   1346	}
   1347
   1348	if (filter_mask & RT5677_AD_MONO_R_FILTER) {
   1349		asrc6_mask |= RT5677_AD_MONOR_CLK_SEL_MASK;
   1350		asrc6_value = (asrc6_value & ~RT5677_AD_MONOR_CLK_SEL_MASK)
   1351			| (clk_src << RT5677_AD_MONOR_CLK_SEL_SFT);
   1352	}
   1353
   1354	if (asrc6_mask)
   1355		regmap_update_bits(rt5677->regmap, RT5677_ASRC_6, asrc6_mask,
   1356			asrc6_value);
   1357
   1358	/* ASRC 7 */
   1359	if (filter_mask & RT5677_DSP_OB_0_3_FILTER) {
   1360		asrc7_mask |= RT5677_DSP_OB_0_3_CLK_SEL_MASK;
   1361		asrc7_value = (asrc7_value & ~RT5677_DSP_OB_0_3_CLK_SEL_MASK)
   1362			| (clk_src << RT5677_DSP_OB_0_3_CLK_SEL_SFT);
   1363	}
   1364
   1365	if (filter_mask & RT5677_DSP_OB_4_7_FILTER) {
   1366		asrc7_mask |= RT5677_DSP_OB_4_7_CLK_SEL_MASK;
   1367		asrc7_value = (asrc7_value & ~RT5677_DSP_OB_4_7_CLK_SEL_MASK)
   1368			| (clk_src << RT5677_DSP_OB_4_7_CLK_SEL_SFT);
   1369	}
   1370
   1371	if (asrc7_mask)
   1372		regmap_update_bits(rt5677->regmap, RT5677_ASRC_7, asrc7_mask,
   1373			asrc7_value);
   1374
   1375	/* ASRC 8 */
   1376	if (filter_mask & RT5677_I2S1_SOURCE) {
   1377		asrc8_mask |= RT5677_I2S1_CLK_SEL_MASK;
   1378		asrc8_value = (asrc8_value & ~RT5677_I2S1_CLK_SEL_MASK)
   1379			| ((clk_src - 1) << RT5677_I2S1_CLK_SEL_SFT);
   1380	}
   1381
   1382	if (filter_mask & RT5677_I2S2_SOURCE) {
   1383		asrc8_mask |= RT5677_I2S2_CLK_SEL_MASK;
   1384		asrc8_value = (asrc8_value & ~RT5677_I2S2_CLK_SEL_MASK)
   1385			| ((clk_src - 1) << RT5677_I2S2_CLK_SEL_SFT);
   1386	}
   1387
   1388	if (filter_mask & RT5677_I2S3_SOURCE) {
   1389		asrc8_mask |= RT5677_I2S3_CLK_SEL_MASK;
   1390		asrc8_value = (asrc8_value & ~RT5677_I2S3_CLK_SEL_MASK)
   1391			| ((clk_src - 1) << RT5677_I2S3_CLK_SEL_SFT);
   1392	}
   1393
   1394	if (filter_mask & RT5677_I2S4_SOURCE) {
   1395		asrc8_mask |= RT5677_I2S4_CLK_SEL_MASK;
   1396		asrc8_value = (asrc8_value & ~RT5677_I2S4_CLK_SEL_MASK)
   1397			| ((clk_src - 1) << RT5677_I2S4_CLK_SEL_SFT);
   1398	}
   1399
   1400	if (asrc8_mask)
   1401		regmap_update_bits(rt5677->regmap, RT5677_ASRC_8, asrc8_mask,
   1402			asrc8_value);
   1403
   1404	return 0;
   1405}
   1406EXPORT_SYMBOL_GPL(rt5677_sel_asrc_clk_src);
   1407
   1408static int rt5677_dmic_use_asrc(struct snd_soc_dapm_widget *source,
   1409			 struct snd_soc_dapm_widget *sink)
   1410{
   1411	struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
   1412	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   1413	unsigned int asrc_setting;
   1414
   1415	switch (source->shift) {
   1416	case 11:
   1417		regmap_read(rt5677->regmap, RT5677_ASRC_5, &asrc_setting);
   1418		asrc_setting = (asrc_setting & RT5677_AD_STO1_CLK_SEL_MASK) >>
   1419				RT5677_AD_STO1_CLK_SEL_SFT;
   1420		break;
   1421
   1422	case 10:
   1423		regmap_read(rt5677->regmap, RT5677_ASRC_5, &asrc_setting);
   1424		asrc_setting = (asrc_setting & RT5677_AD_STO2_CLK_SEL_MASK) >>
   1425				RT5677_AD_STO2_CLK_SEL_SFT;
   1426		break;
   1427
   1428	case 9:
   1429		regmap_read(rt5677->regmap, RT5677_ASRC_5, &asrc_setting);
   1430		asrc_setting = (asrc_setting & RT5677_AD_STO3_CLK_SEL_MASK) >>
   1431				RT5677_AD_STO3_CLK_SEL_SFT;
   1432		break;
   1433
   1434	case 8:
   1435		regmap_read(rt5677->regmap, RT5677_ASRC_5, &asrc_setting);
   1436		asrc_setting = (asrc_setting & RT5677_AD_STO4_CLK_SEL_MASK) >>
   1437			RT5677_AD_STO4_CLK_SEL_SFT;
   1438		break;
   1439
   1440	case 7:
   1441		regmap_read(rt5677->regmap, RT5677_ASRC_6, &asrc_setting);
   1442		asrc_setting = (asrc_setting & RT5677_AD_MONOL_CLK_SEL_MASK) >>
   1443			RT5677_AD_MONOL_CLK_SEL_SFT;
   1444		break;
   1445
   1446	case 6:
   1447		regmap_read(rt5677->regmap, RT5677_ASRC_6, &asrc_setting);
   1448		asrc_setting = (asrc_setting & RT5677_AD_MONOR_CLK_SEL_MASK) >>
   1449			RT5677_AD_MONOR_CLK_SEL_SFT;
   1450		break;
   1451
   1452	default:
   1453		return 0;
   1454	}
   1455
   1456	if (asrc_setting >= RT5677_CLK_SEL_I2S1_ASRC &&
   1457	    asrc_setting <= RT5677_CLK_SEL_I2S6_ASRC)
   1458		return 1;
   1459
   1460	return 0;
   1461}
   1462
   1463/* Digital Mixer */
   1464static const struct snd_kcontrol_new rt5677_sto1_adc_l_mix[] = {
   1465	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_STO1_ADC_MIXER,
   1466			RT5677_M_STO1_ADC_L1_SFT, 1, 1),
   1467	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_STO1_ADC_MIXER,
   1468			RT5677_M_STO1_ADC_L2_SFT, 1, 1),
   1469};
   1470
   1471static const struct snd_kcontrol_new rt5677_sto1_adc_r_mix[] = {
   1472	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_STO1_ADC_MIXER,
   1473			RT5677_M_STO1_ADC_R1_SFT, 1, 1),
   1474	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_STO1_ADC_MIXER,
   1475			RT5677_M_STO1_ADC_R2_SFT, 1, 1),
   1476};
   1477
   1478static const struct snd_kcontrol_new rt5677_sto2_adc_l_mix[] = {
   1479	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_STO2_ADC_MIXER,
   1480			RT5677_M_STO2_ADC_L1_SFT, 1, 1),
   1481	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_STO2_ADC_MIXER,
   1482			RT5677_M_STO2_ADC_L2_SFT, 1, 1),
   1483};
   1484
   1485static const struct snd_kcontrol_new rt5677_sto2_adc_r_mix[] = {
   1486	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_STO2_ADC_MIXER,
   1487			RT5677_M_STO2_ADC_R1_SFT, 1, 1),
   1488	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_STO2_ADC_MIXER,
   1489			RT5677_M_STO2_ADC_R2_SFT, 1, 1),
   1490};
   1491
   1492static const struct snd_kcontrol_new rt5677_sto3_adc_l_mix[] = {
   1493	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_STO3_ADC_MIXER,
   1494			RT5677_M_STO3_ADC_L1_SFT, 1, 1),
   1495	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_STO3_ADC_MIXER,
   1496			RT5677_M_STO3_ADC_L2_SFT, 1, 1),
   1497};
   1498
   1499static const struct snd_kcontrol_new rt5677_sto3_adc_r_mix[] = {
   1500	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_STO3_ADC_MIXER,
   1501			RT5677_M_STO3_ADC_R1_SFT, 1, 1),
   1502	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_STO3_ADC_MIXER,
   1503			RT5677_M_STO3_ADC_R2_SFT, 1, 1),
   1504};
   1505
   1506static const struct snd_kcontrol_new rt5677_sto4_adc_l_mix[] = {
   1507	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_STO4_ADC_MIXER,
   1508			RT5677_M_STO4_ADC_L1_SFT, 1, 1),
   1509	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_STO4_ADC_MIXER,
   1510			RT5677_M_STO4_ADC_L2_SFT, 1, 1),
   1511};
   1512
   1513static const struct snd_kcontrol_new rt5677_sto4_adc_r_mix[] = {
   1514	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_STO4_ADC_MIXER,
   1515			RT5677_M_STO4_ADC_R1_SFT, 1, 1),
   1516	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_STO4_ADC_MIXER,
   1517			RT5677_M_STO4_ADC_R2_SFT, 1, 1),
   1518};
   1519
   1520static const struct snd_kcontrol_new rt5677_mono_adc_l_mix[] = {
   1521	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_MONO_ADC_MIXER,
   1522			RT5677_M_MONO_ADC_L1_SFT, 1, 1),
   1523	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_MONO_ADC_MIXER,
   1524			RT5677_M_MONO_ADC_L2_SFT, 1, 1),
   1525};
   1526
   1527static const struct snd_kcontrol_new rt5677_mono_adc_r_mix[] = {
   1528	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_MONO_ADC_MIXER,
   1529			RT5677_M_MONO_ADC_R1_SFT, 1, 1),
   1530	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_MONO_ADC_MIXER,
   1531			RT5677_M_MONO_ADC_R2_SFT, 1, 1),
   1532};
   1533
   1534static const struct snd_kcontrol_new rt5677_dac_l_mix[] = {
   1535	SOC_DAPM_SINGLE("Stereo ADC Switch", RT5677_ADC_IF_DSP_DAC1_MIXER,
   1536			RT5677_M_ADDA_MIXER1_L_SFT, 1, 1),
   1537	SOC_DAPM_SINGLE("DAC1 Switch", RT5677_ADC_IF_DSP_DAC1_MIXER,
   1538			RT5677_M_DAC1_L_SFT, 1, 1),
   1539};
   1540
   1541static const struct snd_kcontrol_new rt5677_dac_r_mix[] = {
   1542	SOC_DAPM_SINGLE("Stereo ADC Switch", RT5677_ADC_IF_DSP_DAC1_MIXER,
   1543			RT5677_M_ADDA_MIXER1_R_SFT, 1, 1),
   1544	SOC_DAPM_SINGLE("DAC1 Switch", RT5677_ADC_IF_DSP_DAC1_MIXER,
   1545			RT5677_M_DAC1_R_SFT, 1, 1),
   1546};
   1547
   1548static const struct snd_kcontrol_new rt5677_sto1_dac_l_mix[] = {
   1549	SOC_DAPM_SINGLE_AUTODISABLE("ST L Switch", RT5677_STO1_DAC_MIXER,
   1550			RT5677_M_ST_DAC1_L_SFT, 1, 1),
   1551	SOC_DAPM_SINGLE_AUTODISABLE("DAC1 L Switch", RT5677_STO1_DAC_MIXER,
   1552			RT5677_M_DAC1_L_STO_L_SFT, 1, 1),
   1553	SOC_DAPM_SINGLE_AUTODISABLE("DAC2 L Switch", RT5677_STO1_DAC_MIXER,
   1554			RT5677_M_DAC2_L_STO_L_SFT, 1, 1),
   1555	SOC_DAPM_SINGLE_AUTODISABLE("DAC1 R Switch", RT5677_STO1_DAC_MIXER,
   1556			RT5677_M_DAC1_R_STO_L_SFT, 1, 1),
   1557};
   1558
   1559static const struct snd_kcontrol_new rt5677_sto1_dac_r_mix[] = {
   1560	SOC_DAPM_SINGLE_AUTODISABLE("ST R Switch", RT5677_STO1_DAC_MIXER,
   1561			RT5677_M_ST_DAC1_R_SFT, 1, 1),
   1562	SOC_DAPM_SINGLE_AUTODISABLE("DAC1 R Switch", RT5677_STO1_DAC_MIXER,
   1563			RT5677_M_DAC1_R_STO_R_SFT, 1, 1),
   1564	SOC_DAPM_SINGLE_AUTODISABLE("DAC2 R Switch", RT5677_STO1_DAC_MIXER,
   1565			RT5677_M_DAC2_R_STO_R_SFT, 1, 1),
   1566	SOC_DAPM_SINGLE_AUTODISABLE("DAC1 L Switch", RT5677_STO1_DAC_MIXER,
   1567			RT5677_M_DAC1_L_STO_R_SFT, 1, 1),
   1568};
   1569
   1570static const struct snd_kcontrol_new rt5677_mono_dac_l_mix[] = {
   1571	SOC_DAPM_SINGLE_AUTODISABLE("ST L Switch", RT5677_MONO_DAC_MIXER,
   1572			RT5677_M_ST_DAC2_L_SFT, 1, 1),
   1573	SOC_DAPM_SINGLE_AUTODISABLE("DAC1 L Switch", RT5677_MONO_DAC_MIXER,
   1574			RT5677_M_DAC1_L_MONO_L_SFT, 1, 1),
   1575	SOC_DAPM_SINGLE_AUTODISABLE("DAC2 L Switch", RT5677_MONO_DAC_MIXER,
   1576			RT5677_M_DAC2_L_MONO_L_SFT, 1, 1),
   1577	SOC_DAPM_SINGLE_AUTODISABLE("DAC2 R Switch", RT5677_MONO_DAC_MIXER,
   1578			RT5677_M_DAC2_R_MONO_L_SFT, 1, 1),
   1579};
   1580
   1581static const struct snd_kcontrol_new rt5677_mono_dac_r_mix[] = {
   1582	SOC_DAPM_SINGLE_AUTODISABLE("ST R Switch", RT5677_MONO_DAC_MIXER,
   1583			RT5677_M_ST_DAC2_R_SFT, 1, 1),
   1584	SOC_DAPM_SINGLE_AUTODISABLE("DAC1 R Switch", RT5677_MONO_DAC_MIXER,
   1585			RT5677_M_DAC1_R_MONO_R_SFT, 1, 1),
   1586	SOC_DAPM_SINGLE_AUTODISABLE("DAC2 R Switch", RT5677_MONO_DAC_MIXER,
   1587			RT5677_M_DAC2_R_MONO_R_SFT, 1, 1),
   1588	SOC_DAPM_SINGLE_AUTODISABLE("DAC2 L Switch", RT5677_MONO_DAC_MIXER,
   1589			RT5677_M_DAC2_L_MONO_R_SFT, 1, 1),
   1590};
   1591
   1592static const struct snd_kcontrol_new rt5677_dd1_l_mix[] = {
   1593	SOC_DAPM_SINGLE_AUTODISABLE("Sto DAC Mix L Switch", RT5677_DD1_MIXER,
   1594			RT5677_M_STO_L_DD1_L_SFT, 1, 1),
   1595	SOC_DAPM_SINGLE_AUTODISABLE("Mono DAC Mix L Switch", RT5677_DD1_MIXER,
   1596			RT5677_M_MONO_L_DD1_L_SFT, 1, 1),
   1597	SOC_DAPM_SINGLE_AUTODISABLE("DAC3 L Switch", RT5677_DD1_MIXER,
   1598			RT5677_M_DAC3_L_DD1_L_SFT, 1, 1),
   1599	SOC_DAPM_SINGLE_AUTODISABLE("DAC3 R Switch", RT5677_DD1_MIXER,
   1600			RT5677_M_DAC3_R_DD1_L_SFT, 1, 1),
   1601};
   1602
   1603static const struct snd_kcontrol_new rt5677_dd1_r_mix[] = {
   1604	SOC_DAPM_SINGLE_AUTODISABLE("Sto DAC Mix R Switch", RT5677_DD1_MIXER,
   1605			RT5677_M_STO_R_DD1_R_SFT, 1, 1),
   1606	SOC_DAPM_SINGLE_AUTODISABLE("Mono DAC Mix R Switch", RT5677_DD1_MIXER,
   1607			RT5677_M_MONO_R_DD1_R_SFT, 1, 1),
   1608	SOC_DAPM_SINGLE_AUTODISABLE("DAC3 R Switch", RT5677_DD1_MIXER,
   1609			RT5677_M_DAC3_R_DD1_R_SFT, 1, 1),
   1610	SOC_DAPM_SINGLE_AUTODISABLE("DAC3 L Switch", RT5677_DD1_MIXER,
   1611			RT5677_M_DAC3_L_DD1_R_SFT, 1, 1),
   1612};
   1613
   1614static const struct snd_kcontrol_new rt5677_dd2_l_mix[] = {
   1615	SOC_DAPM_SINGLE_AUTODISABLE("Sto DAC Mix L Switch", RT5677_DD2_MIXER,
   1616			RT5677_M_STO_L_DD2_L_SFT, 1, 1),
   1617	SOC_DAPM_SINGLE_AUTODISABLE("Mono DAC Mix L Switch", RT5677_DD2_MIXER,
   1618			RT5677_M_MONO_L_DD2_L_SFT, 1, 1),
   1619	SOC_DAPM_SINGLE_AUTODISABLE("DAC4 L Switch", RT5677_DD2_MIXER,
   1620			RT5677_M_DAC4_L_DD2_L_SFT, 1, 1),
   1621	SOC_DAPM_SINGLE_AUTODISABLE("DAC4 R Switch", RT5677_DD2_MIXER,
   1622			RT5677_M_DAC4_R_DD2_L_SFT, 1, 1),
   1623};
   1624
   1625static const struct snd_kcontrol_new rt5677_dd2_r_mix[] = {
   1626	SOC_DAPM_SINGLE_AUTODISABLE("Sto DAC Mix R Switch", RT5677_DD2_MIXER,
   1627			RT5677_M_STO_R_DD2_R_SFT, 1, 1),
   1628	SOC_DAPM_SINGLE_AUTODISABLE("Mono DAC Mix R Switch", RT5677_DD2_MIXER,
   1629			RT5677_M_MONO_R_DD2_R_SFT, 1, 1),
   1630	SOC_DAPM_SINGLE_AUTODISABLE("DAC4 R Switch", RT5677_DD2_MIXER,
   1631			RT5677_M_DAC4_R_DD2_R_SFT, 1, 1),
   1632	SOC_DAPM_SINGLE_AUTODISABLE("DAC4 L Switch", RT5677_DD2_MIXER,
   1633			RT5677_M_DAC4_L_DD2_R_SFT, 1, 1),
   1634};
   1635
   1636static const struct snd_kcontrol_new rt5677_ob_01_mix[] = {
   1637	SOC_DAPM_SINGLE("IB01 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
   1638			RT5677_DSP_IB_01_H_SFT, 1, 1),
   1639	SOC_DAPM_SINGLE("IB23 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
   1640			RT5677_DSP_IB_23_H_SFT, 1, 1),
   1641	SOC_DAPM_SINGLE("IB45 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
   1642			RT5677_DSP_IB_45_H_SFT, 1, 1),
   1643	SOC_DAPM_SINGLE("IB6 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
   1644			RT5677_DSP_IB_6_H_SFT, 1, 1),
   1645	SOC_DAPM_SINGLE("IB7 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
   1646			RT5677_DSP_IB_7_H_SFT, 1, 1),
   1647	SOC_DAPM_SINGLE("IB8 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
   1648			RT5677_DSP_IB_8_H_SFT, 1, 1),
   1649	SOC_DAPM_SINGLE("IB9 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
   1650			RT5677_DSP_IB_9_H_SFT, 1, 1),
   1651};
   1652
   1653static const struct snd_kcontrol_new rt5677_ob_23_mix[] = {
   1654	SOC_DAPM_SINGLE("IB01 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
   1655			RT5677_DSP_IB_01_L_SFT, 1, 1),
   1656	SOC_DAPM_SINGLE("IB23 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
   1657			RT5677_DSP_IB_23_L_SFT, 1, 1),
   1658	SOC_DAPM_SINGLE("IB45 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
   1659			RT5677_DSP_IB_45_L_SFT, 1, 1),
   1660	SOC_DAPM_SINGLE("IB6 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
   1661			RT5677_DSP_IB_6_L_SFT, 1, 1),
   1662	SOC_DAPM_SINGLE("IB7 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
   1663			RT5677_DSP_IB_7_L_SFT, 1, 1),
   1664	SOC_DAPM_SINGLE("IB8 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
   1665			RT5677_DSP_IB_8_L_SFT, 1, 1),
   1666	SOC_DAPM_SINGLE("IB9 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
   1667			RT5677_DSP_IB_9_L_SFT, 1, 1),
   1668};
   1669
   1670static const struct snd_kcontrol_new rt5677_ob_4_mix[] = {
   1671	SOC_DAPM_SINGLE("IB01 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
   1672			RT5677_DSP_IB_01_H_SFT, 1, 1),
   1673	SOC_DAPM_SINGLE("IB23 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
   1674			RT5677_DSP_IB_23_H_SFT, 1, 1),
   1675	SOC_DAPM_SINGLE("IB45 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
   1676			RT5677_DSP_IB_45_H_SFT, 1, 1),
   1677	SOC_DAPM_SINGLE("IB6 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
   1678			RT5677_DSP_IB_6_H_SFT, 1, 1),
   1679	SOC_DAPM_SINGLE("IB7 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
   1680			RT5677_DSP_IB_7_H_SFT, 1, 1),
   1681	SOC_DAPM_SINGLE("IB8 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
   1682			RT5677_DSP_IB_8_H_SFT, 1, 1),
   1683	SOC_DAPM_SINGLE("IB9 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
   1684			RT5677_DSP_IB_9_H_SFT, 1, 1),
   1685};
   1686
   1687static const struct snd_kcontrol_new rt5677_ob_5_mix[] = {
   1688	SOC_DAPM_SINGLE("IB01 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
   1689			RT5677_DSP_IB_01_L_SFT, 1, 1),
   1690	SOC_DAPM_SINGLE("IB23 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
   1691			RT5677_DSP_IB_23_L_SFT, 1, 1),
   1692	SOC_DAPM_SINGLE("IB45 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
   1693			RT5677_DSP_IB_45_L_SFT, 1, 1),
   1694	SOC_DAPM_SINGLE("IB6 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
   1695			RT5677_DSP_IB_6_L_SFT, 1, 1),
   1696	SOC_DAPM_SINGLE("IB7 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
   1697			RT5677_DSP_IB_7_L_SFT, 1, 1),
   1698	SOC_DAPM_SINGLE("IB8 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
   1699			RT5677_DSP_IB_8_L_SFT, 1, 1),
   1700	SOC_DAPM_SINGLE("IB9 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
   1701			RT5677_DSP_IB_9_L_SFT, 1, 1),
   1702};
   1703
   1704static const struct snd_kcontrol_new rt5677_ob_6_mix[] = {
   1705	SOC_DAPM_SINGLE("IB01 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
   1706			RT5677_DSP_IB_01_H_SFT, 1, 1),
   1707	SOC_DAPM_SINGLE("IB23 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
   1708			RT5677_DSP_IB_23_H_SFT, 1, 1),
   1709	SOC_DAPM_SINGLE("IB45 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
   1710			RT5677_DSP_IB_45_H_SFT, 1, 1),
   1711	SOC_DAPM_SINGLE("IB6 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
   1712			RT5677_DSP_IB_6_H_SFT, 1, 1),
   1713	SOC_DAPM_SINGLE("IB7 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
   1714			RT5677_DSP_IB_7_H_SFT, 1, 1),
   1715	SOC_DAPM_SINGLE("IB8 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
   1716			RT5677_DSP_IB_8_H_SFT, 1, 1),
   1717	SOC_DAPM_SINGLE("IB9 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
   1718			RT5677_DSP_IB_9_H_SFT, 1, 1),
   1719};
   1720
   1721static const struct snd_kcontrol_new rt5677_ob_7_mix[] = {
   1722	SOC_DAPM_SINGLE("IB01 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
   1723			RT5677_DSP_IB_01_L_SFT, 1, 1),
   1724	SOC_DAPM_SINGLE("IB23 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
   1725			RT5677_DSP_IB_23_L_SFT, 1, 1),
   1726	SOC_DAPM_SINGLE("IB45 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
   1727			RT5677_DSP_IB_45_L_SFT, 1, 1),
   1728	SOC_DAPM_SINGLE("IB6 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
   1729			RT5677_DSP_IB_6_L_SFT, 1, 1),
   1730	SOC_DAPM_SINGLE("IB7 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
   1731			RT5677_DSP_IB_7_L_SFT, 1, 1),
   1732	SOC_DAPM_SINGLE("IB8 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
   1733			RT5677_DSP_IB_8_L_SFT, 1, 1),
   1734	SOC_DAPM_SINGLE("IB9 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
   1735			RT5677_DSP_IB_9_L_SFT, 1, 1),
   1736};
   1737
   1738
   1739/* Mux */
   1740/* DAC1 L/R Source */ /* MX-29 [10:8] */
   1741static const char * const rt5677_dac1_src[] = {
   1742	"IF1 DAC 01", "IF2 DAC 01", "IF3 DAC LR", "IF4 DAC LR", "SLB DAC 01",
   1743	"OB 01"
   1744};
   1745
   1746static SOC_ENUM_SINGLE_DECL(
   1747	rt5677_dac1_enum, RT5677_ADC_IF_DSP_DAC1_MIXER,
   1748	RT5677_DAC1_L_SEL_SFT, rt5677_dac1_src);
   1749
   1750static const struct snd_kcontrol_new rt5677_dac1_mux =
   1751	SOC_DAPM_ENUM("DAC1 Source", rt5677_dac1_enum);
   1752
   1753/* ADDA1 L/R Source */ /* MX-29 [1:0] */
   1754static const char * const rt5677_adda1_src[] = {
   1755	"STO1 ADC MIX", "STO2 ADC MIX", "OB 67",
   1756};
   1757
   1758static SOC_ENUM_SINGLE_DECL(
   1759	rt5677_adda1_enum, RT5677_ADC_IF_DSP_DAC1_MIXER,
   1760	RT5677_ADDA1_SEL_SFT, rt5677_adda1_src);
   1761
   1762static const struct snd_kcontrol_new rt5677_adda1_mux =
   1763	SOC_DAPM_ENUM("ADDA1 Source", rt5677_adda1_enum);
   1764
   1765
   1766/*DAC2 L/R Source*/ /* MX-1B [6:4] [2:0] */
   1767static const char * const rt5677_dac2l_src[] = {
   1768	"IF1 DAC 2", "IF2 DAC 2", "IF3 DAC L", "IF4 DAC L", "SLB DAC 2",
   1769	"OB 2",
   1770};
   1771
   1772static SOC_ENUM_SINGLE_DECL(
   1773	rt5677_dac2l_enum, RT5677_IF_DSP_DAC2_MIXER,
   1774	RT5677_SEL_DAC2_L_SRC_SFT, rt5677_dac2l_src);
   1775
   1776static const struct snd_kcontrol_new rt5677_dac2_l_mux =
   1777	SOC_DAPM_ENUM("DAC2 L Source", rt5677_dac2l_enum);
   1778
   1779static const char * const rt5677_dac2r_src[] = {
   1780	"IF1 DAC 3", "IF2 DAC 3", "IF3 DAC R", "IF4 DAC R", "SLB DAC 3",
   1781	"OB 3", "Haptic Generator", "VAD ADC"
   1782};
   1783
   1784static SOC_ENUM_SINGLE_DECL(
   1785	rt5677_dac2r_enum, RT5677_IF_DSP_DAC2_MIXER,
   1786	RT5677_SEL_DAC2_R_SRC_SFT, rt5677_dac2r_src);
   1787
   1788static const struct snd_kcontrol_new rt5677_dac2_r_mux =
   1789	SOC_DAPM_ENUM("DAC2 R Source", rt5677_dac2r_enum);
   1790
   1791/*DAC3 L/R Source*/ /* MX-16 [6:4] [2:0] */
   1792static const char * const rt5677_dac3l_src[] = {
   1793	"IF1 DAC 4", "IF2 DAC 4", "IF3 DAC L", "IF4 DAC L",
   1794	"SLB DAC 4", "OB 4"
   1795};
   1796
   1797static SOC_ENUM_SINGLE_DECL(
   1798	rt5677_dac3l_enum, RT5677_IF_DSP_DAC3_4_MIXER,
   1799	RT5677_SEL_DAC3_L_SRC_SFT, rt5677_dac3l_src);
   1800
   1801static const struct snd_kcontrol_new rt5677_dac3_l_mux =
   1802	SOC_DAPM_ENUM("DAC3 L Source", rt5677_dac3l_enum);
   1803
   1804static const char * const rt5677_dac3r_src[] = {
   1805	"IF1 DAC 5", "IF2 DAC 5", "IF3 DAC R", "IF4 DAC R",
   1806	"SLB DAC 5", "OB 5"
   1807};
   1808
   1809static SOC_ENUM_SINGLE_DECL(
   1810	rt5677_dac3r_enum, RT5677_IF_DSP_DAC3_4_MIXER,
   1811	RT5677_SEL_DAC3_R_SRC_SFT, rt5677_dac3r_src);
   1812
   1813static const struct snd_kcontrol_new rt5677_dac3_r_mux =
   1814	SOC_DAPM_ENUM("DAC3 R Source", rt5677_dac3r_enum);
   1815
   1816/*DAC4 L/R Source*/ /* MX-16 [14:12] [10:8] */
   1817static const char * const rt5677_dac4l_src[] = {
   1818	"IF1 DAC 6", "IF2 DAC 6", "IF3 DAC L", "IF4 DAC L",
   1819	"SLB DAC 6", "OB 6"
   1820};
   1821
   1822static SOC_ENUM_SINGLE_DECL(
   1823	rt5677_dac4l_enum, RT5677_IF_DSP_DAC3_4_MIXER,
   1824	RT5677_SEL_DAC4_L_SRC_SFT, rt5677_dac4l_src);
   1825
   1826static const struct snd_kcontrol_new rt5677_dac4_l_mux =
   1827	SOC_DAPM_ENUM("DAC4 L Source", rt5677_dac4l_enum);
   1828
   1829static const char * const rt5677_dac4r_src[] = {
   1830	"IF1 DAC 7", "IF2 DAC 7", "IF3 DAC R", "IF4 DAC R",
   1831	"SLB DAC 7", "OB 7"
   1832};
   1833
   1834static SOC_ENUM_SINGLE_DECL(
   1835	rt5677_dac4r_enum, RT5677_IF_DSP_DAC3_4_MIXER,
   1836	RT5677_SEL_DAC4_R_SRC_SFT, rt5677_dac4r_src);
   1837
   1838static const struct snd_kcontrol_new rt5677_dac4_r_mux =
   1839	SOC_DAPM_ENUM("DAC4 R Source", rt5677_dac4r_enum);
   1840
   1841/* In/OutBound Source Pass SRC */ /* MX-A5 [3] [4] [0] [1] [2] */
   1842static const char * const rt5677_iob_bypass_src[] = {
   1843	"Bypass", "Pass SRC"
   1844};
   1845
   1846static SOC_ENUM_SINGLE_DECL(
   1847	rt5677_ob01_bypass_src_enum, RT5677_DSP_IN_OUTB_CTRL,
   1848	RT5677_SEL_SRC_OB01_SFT, rt5677_iob_bypass_src);
   1849
   1850static const struct snd_kcontrol_new rt5677_ob01_bypass_src_mux =
   1851	SOC_DAPM_ENUM("OB01 Bypass Source", rt5677_ob01_bypass_src_enum);
   1852
   1853static SOC_ENUM_SINGLE_DECL(
   1854	rt5677_ob23_bypass_src_enum, RT5677_DSP_IN_OUTB_CTRL,
   1855	RT5677_SEL_SRC_OB23_SFT, rt5677_iob_bypass_src);
   1856
   1857static const struct snd_kcontrol_new rt5677_ob23_bypass_src_mux =
   1858	SOC_DAPM_ENUM("OB23 Bypass Source", rt5677_ob23_bypass_src_enum);
   1859
   1860static SOC_ENUM_SINGLE_DECL(
   1861	rt5677_ib01_bypass_src_enum, RT5677_DSP_IN_OUTB_CTRL,
   1862	RT5677_SEL_SRC_IB01_SFT, rt5677_iob_bypass_src);
   1863
   1864static const struct snd_kcontrol_new rt5677_ib01_bypass_src_mux =
   1865	SOC_DAPM_ENUM("IB01 Bypass Source", rt5677_ib01_bypass_src_enum);
   1866
   1867static SOC_ENUM_SINGLE_DECL(
   1868	rt5677_ib23_bypass_src_enum, RT5677_DSP_IN_OUTB_CTRL,
   1869	RT5677_SEL_SRC_IB23_SFT, rt5677_iob_bypass_src);
   1870
   1871static const struct snd_kcontrol_new rt5677_ib23_bypass_src_mux =
   1872	SOC_DAPM_ENUM("IB23 Bypass Source", rt5677_ib23_bypass_src_enum);
   1873
   1874static SOC_ENUM_SINGLE_DECL(
   1875	rt5677_ib45_bypass_src_enum, RT5677_DSP_IN_OUTB_CTRL,
   1876	RT5677_SEL_SRC_IB45_SFT, rt5677_iob_bypass_src);
   1877
   1878static const struct snd_kcontrol_new rt5677_ib45_bypass_src_mux =
   1879	SOC_DAPM_ENUM("IB45 Bypass Source", rt5677_ib45_bypass_src_enum);
   1880
   1881/* Stereo ADC Source 2 */ /* MX-27 MX26 MX25 [11:10] */
   1882static const char * const rt5677_stereo_adc2_src[] = {
   1883	"DD MIX1", "DMIC", "Stereo DAC MIX"
   1884};
   1885
   1886static SOC_ENUM_SINGLE_DECL(
   1887	rt5677_stereo1_adc2_enum, RT5677_STO1_ADC_MIXER,
   1888	RT5677_SEL_STO1_ADC2_SFT, rt5677_stereo_adc2_src);
   1889
   1890static const struct snd_kcontrol_new rt5677_sto1_adc2_mux =
   1891	SOC_DAPM_ENUM("Stereo1 ADC2 Source", rt5677_stereo1_adc2_enum);
   1892
   1893static SOC_ENUM_SINGLE_DECL(
   1894	rt5677_stereo2_adc2_enum, RT5677_STO2_ADC_MIXER,
   1895	RT5677_SEL_STO2_ADC2_SFT, rt5677_stereo_adc2_src);
   1896
   1897static const struct snd_kcontrol_new rt5677_sto2_adc2_mux =
   1898	SOC_DAPM_ENUM("Stereo2 ADC2 Source", rt5677_stereo2_adc2_enum);
   1899
   1900static SOC_ENUM_SINGLE_DECL(
   1901	rt5677_stereo3_adc2_enum, RT5677_STO3_ADC_MIXER,
   1902	RT5677_SEL_STO3_ADC2_SFT, rt5677_stereo_adc2_src);
   1903
   1904static const struct snd_kcontrol_new rt5677_sto3_adc2_mux =
   1905	SOC_DAPM_ENUM("Stereo3 ADC2 Source", rt5677_stereo3_adc2_enum);
   1906
   1907/* DMIC Source */ /* MX-28 [9:8][1:0] MX-27 MX-26 MX-25 MX-24 [9:8] */
   1908static const char * const rt5677_dmic_src[] = {
   1909	"DMIC1", "DMIC2", "DMIC3", "DMIC4"
   1910};
   1911
   1912static SOC_ENUM_SINGLE_DECL(
   1913	rt5677_mono_dmic_l_enum, RT5677_MONO_ADC_MIXER,
   1914	RT5677_SEL_MONO_DMIC_L_SFT, rt5677_dmic_src);
   1915
   1916static const struct snd_kcontrol_new rt5677_mono_dmic_l_mux =
   1917	SOC_DAPM_ENUM("Mono DMIC L Source", rt5677_mono_dmic_l_enum);
   1918
   1919static SOC_ENUM_SINGLE_DECL(
   1920	rt5677_mono_dmic_r_enum, RT5677_MONO_ADC_MIXER,
   1921	RT5677_SEL_MONO_DMIC_R_SFT, rt5677_dmic_src);
   1922
   1923static const struct snd_kcontrol_new rt5677_mono_dmic_r_mux =
   1924	SOC_DAPM_ENUM("Mono DMIC R Source", rt5677_mono_dmic_r_enum);
   1925
   1926static SOC_ENUM_SINGLE_DECL(
   1927	rt5677_stereo1_dmic_enum, RT5677_STO1_ADC_MIXER,
   1928	RT5677_SEL_STO1_DMIC_SFT, rt5677_dmic_src);
   1929
   1930static const struct snd_kcontrol_new rt5677_sto1_dmic_mux =
   1931	SOC_DAPM_ENUM("Stereo1 DMIC Source", rt5677_stereo1_dmic_enum);
   1932
   1933static SOC_ENUM_SINGLE_DECL(
   1934	rt5677_stereo2_dmic_enum, RT5677_STO2_ADC_MIXER,
   1935	RT5677_SEL_STO2_DMIC_SFT, rt5677_dmic_src);
   1936
   1937static const struct snd_kcontrol_new rt5677_sto2_dmic_mux =
   1938	SOC_DAPM_ENUM("Stereo2 DMIC Source", rt5677_stereo2_dmic_enum);
   1939
   1940static SOC_ENUM_SINGLE_DECL(
   1941	rt5677_stereo3_dmic_enum, RT5677_STO3_ADC_MIXER,
   1942	RT5677_SEL_STO3_DMIC_SFT, rt5677_dmic_src);
   1943
   1944static const struct snd_kcontrol_new rt5677_sto3_dmic_mux =
   1945	SOC_DAPM_ENUM("Stereo3 DMIC Source", rt5677_stereo3_dmic_enum);
   1946
   1947static SOC_ENUM_SINGLE_DECL(
   1948	rt5677_stereo4_dmic_enum, RT5677_STO4_ADC_MIXER,
   1949	RT5677_SEL_STO4_DMIC_SFT, rt5677_dmic_src);
   1950
   1951static const struct snd_kcontrol_new rt5677_sto4_dmic_mux =
   1952	SOC_DAPM_ENUM("Stereo4 DMIC Source", rt5677_stereo4_dmic_enum);
   1953
   1954/* Stereo2 ADC Source */ /* MX-26 [0] */
   1955static const char * const rt5677_stereo2_adc_lr_src[] = {
   1956	"L", "LR"
   1957};
   1958
   1959static SOC_ENUM_SINGLE_DECL(
   1960	rt5677_stereo2_adc_lr_enum, RT5677_STO2_ADC_MIXER,
   1961	RT5677_SEL_STO2_LR_MIX_SFT, rt5677_stereo2_adc_lr_src);
   1962
   1963static const struct snd_kcontrol_new rt5677_sto2_adc_lr_mux =
   1964	SOC_DAPM_ENUM("Stereo2 ADC LR Source", rt5677_stereo2_adc_lr_enum);
   1965
   1966/* Stereo1 ADC Source 1 */ /* MX-27 MX26 MX25 [13:12] */
   1967static const char * const rt5677_stereo_adc1_src[] = {
   1968	"DD MIX1", "ADC1/2", "Stereo DAC MIX"
   1969};
   1970
   1971static SOC_ENUM_SINGLE_DECL(
   1972	rt5677_stereo1_adc1_enum, RT5677_STO1_ADC_MIXER,
   1973	RT5677_SEL_STO1_ADC1_SFT, rt5677_stereo_adc1_src);
   1974
   1975static const struct snd_kcontrol_new rt5677_sto1_adc1_mux =
   1976	SOC_DAPM_ENUM("Stereo1 ADC1 Source", rt5677_stereo1_adc1_enum);
   1977
   1978static SOC_ENUM_SINGLE_DECL(
   1979	rt5677_stereo2_adc1_enum, RT5677_STO2_ADC_MIXER,
   1980	RT5677_SEL_STO2_ADC1_SFT, rt5677_stereo_adc1_src);
   1981
   1982static const struct snd_kcontrol_new rt5677_sto2_adc1_mux =
   1983	SOC_DAPM_ENUM("Stereo2 ADC1 Source", rt5677_stereo2_adc1_enum);
   1984
   1985static SOC_ENUM_SINGLE_DECL(
   1986	rt5677_stereo3_adc1_enum, RT5677_STO3_ADC_MIXER,
   1987	RT5677_SEL_STO3_ADC1_SFT, rt5677_stereo_adc1_src);
   1988
   1989static const struct snd_kcontrol_new rt5677_sto3_adc1_mux =
   1990	SOC_DAPM_ENUM("Stereo3 ADC1 Source", rt5677_stereo3_adc1_enum);
   1991
   1992/* Mono ADC Left Source 2 */ /* MX-28 [11:10] */
   1993static const char * const rt5677_mono_adc2_l_src[] = {
   1994	"DD MIX1L", "DMIC", "MONO DAC MIXL"
   1995};
   1996
   1997static SOC_ENUM_SINGLE_DECL(
   1998	rt5677_mono_adc2_l_enum, RT5677_MONO_ADC_MIXER,
   1999	RT5677_SEL_MONO_ADC_L2_SFT, rt5677_mono_adc2_l_src);
   2000
   2001static const struct snd_kcontrol_new rt5677_mono_adc2_l_mux =
   2002	SOC_DAPM_ENUM("Mono ADC2 L Source", rt5677_mono_adc2_l_enum);
   2003
   2004/* Mono ADC Left Source 1 */ /* MX-28 [13:12] */
   2005static const char * const rt5677_mono_adc1_l_src[] = {
   2006	"DD MIX1L", "ADC1", "MONO DAC MIXL"
   2007};
   2008
   2009static SOC_ENUM_SINGLE_DECL(
   2010	rt5677_mono_adc1_l_enum, RT5677_MONO_ADC_MIXER,
   2011	RT5677_SEL_MONO_ADC_L1_SFT, rt5677_mono_adc1_l_src);
   2012
   2013static const struct snd_kcontrol_new rt5677_mono_adc1_l_mux =
   2014	SOC_DAPM_ENUM("Mono ADC1 L Source", rt5677_mono_adc1_l_enum);
   2015
   2016/* Mono ADC Right Source 2 */ /* MX-28 [3:2] */
   2017static const char * const rt5677_mono_adc2_r_src[] = {
   2018	"DD MIX1R", "DMIC", "MONO DAC MIXR"
   2019};
   2020
   2021static SOC_ENUM_SINGLE_DECL(
   2022	rt5677_mono_adc2_r_enum, RT5677_MONO_ADC_MIXER,
   2023	RT5677_SEL_MONO_ADC_R2_SFT, rt5677_mono_adc2_r_src);
   2024
   2025static const struct snd_kcontrol_new rt5677_mono_adc2_r_mux =
   2026	SOC_DAPM_ENUM("Mono ADC2 R Source", rt5677_mono_adc2_r_enum);
   2027
   2028/* Mono ADC Right Source 1 */ /* MX-28 [5:4] */
   2029static const char * const rt5677_mono_adc1_r_src[] = {
   2030	"DD MIX1R", "ADC2", "MONO DAC MIXR"
   2031};
   2032
   2033static SOC_ENUM_SINGLE_DECL(
   2034	rt5677_mono_adc1_r_enum, RT5677_MONO_ADC_MIXER,
   2035	RT5677_SEL_MONO_ADC_R1_SFT, rt5677_mono_adc1_r_src);
   2036
   2037static const struct snd_kcontrol_new rt5677_mono_adc1_r_mux =
   2038	SOC_DAPM_ENUM("Mono ADC1 R Source", rt5677_mono_adc1_r_enum);
   2039
   2040/* Stereo4 ADC Source 2 */ /* MX-24 [11:10] */
   2041static const char * const rt5677_stereo4_adc2_src[] = {
   2042	"DD MIX1", "DMIC", "DD MIX2"
   2043};
   2044
   2045static SOC_ENUM_SINGLE_DECL(
   2046	rt5677_stereo4_adc2_enum, RT5677_STO4_ADC_MIXER,
   2047	RT5677_SEL_STO4_ADC2_SFT, rt5677_stereo4_adc2_src);
   2048
   2049static const struct snd_kcontrol_new rt5677_sto4_adc2_mux =
   2050	SOC_DAPM_ENUM("Stereo4 ADC2 Source", rt5677_stereo4_adc2_enum);
   2051
   2052
   2053/* Stereo4 ADC Source 1 */ /* MX-24 [13:12] */
   2054static const char * const rt5677_stereo4_adc1_src[] = {
   2055	"DD MIX1", "ADC1/2", "DD MIX2"
   2056};
   2057
   2058static SOC_ENUM_SINGLE_DECL(
   2059	rt5677_stereo4_adc1_enum, RT5677_STO4_ADC_MIXER,
   2060	RT5677_SEL_STO4_ADC1_SFT, rt5677_stereo4_adc1_src);
   2061
   2062static const struct snd_kcontrol_new rt5677_sto4_adc1_mux =
   2063	SOC_DAPM_ENUM("Stereo4 ADC1 Source", rt5677_stereo4_adc1_enum);
   2064
   2065/* InBound0/1 Source */ /* MX-A3 [14:12] */
   2066static const char * const rt5677_inbound01_src[] = {
   2067	"IF1 DAC 01", "IF2 DAC 01", "SLB DAC 01", "STO1 ADC MIX",
   2068	"VAD ADC/DAC1 FS"
   2069};
   2070
   2071static SOC_ENUM_SINGLE_DECL(
   2072	rt5677_inbound01_enum, RT5677_DSP_INB_CTRL1,
   2073	RT5677_IB01_SRC_SFT, rt5677_inbound01_src);
   2074
   2075static const struct snd_kcontrol_new rt5677_ib01_src_mux =
   2076	SOC_DAPM_ENUM("InBound0/1 Source", rt5677_inbound01_enum);
   2077
   2078/* InBound2/3 Source */ /* MX-A3 [10:8] */
   2079static const char * const rt5677_inbound23_src[] = {
   2080	"IF1 DAC 23", "IF2 DAC 23", "SLB DAC 23", "STO2 ADC MIX",
   2081	"DAC1 FS", "IF4 DAC"
   2082};
   2083
   2084static SOC_ENUM_SINGLE_DECL(
   2085	rt5677_inbound23_enum, RT5677_DSP_INB_CTRL1,
   2086	RT5677_IB23_SRC_SFT, rt5677_inbound23_src);
   2087
   2088static const struct snd_kcontrol_new rt5677_ib23_src_mux =
   2089	SOC_DAPM_ENUM("InBound2/3 Source", rt5677_inbound23_enum);
   2090
   2091/* InBound4/5 Source */ /* MX-A3 [6:4] */
   2092static const char * const rt5677_inbound45_src[] = {
   2093	"IF1 DAC 45", "IF2 DAC 45", "SLB DAC 45", "STO3 ADC MIX",
   2094	"IF3 DAC"
   2095};
   2096
   2097static SOC_ENUM_SINGLE_DECL(
   2098	rt5677_inbound45_enum, RT5677_DSP_INB_CTRL1,
   2099	RT5677_IB45_SRC_SFT, rt5677_inbound45_src);
   2100
   2101static const struct snd_kcontrol_new rt5677_ib45_src_mux =
   2102	SOC_DAPM_ENUM("InBound4/5 Source", rt5677_inbound45_enum);
   2103
   2104/* InBound6 Source */ /* MX-A3 [2:0] */
   2105static const char * const rt5677_inbound6_src[] = {
   2106	"IF1 DAC 6", "IF2 DAC 6", "SLB DAC 6", "STO4 ADC MIX L",
   2107	"IF4 DAC L", "STO1 ADC MIX L", "STO2 ADC MIX L", "STO3 ADC MIX L"
   2108};
   2109
   2110static SOC_ENUM_SINGLE_DECL(
   2111	rt5677_inbound6_enum, RT5677_DSP_INB_CTRL1,
   2112	RT5677_IB6_SRC_SFT, rt5677_inbound6_src);
   2113
   2114static const struct snd_kcontrol_new rt5677_ib6_src_mux =
   2115	SOC_DAPM_ENUM("InBound6 Source", rt5677_inbound6_enum);
   2116
   2117/* InBound7 Source */ /* MX-A4 [14:12] */
   2118static const char * const rt5677_inbound7_src[] = {
   2119	"IF1 DAC 7", "IF2 DAC 7", "SLB DAC 7", "STO4 ADC MIX R",
   2120	"IF4 DAC R", "STO1 ADC MIX R", "STO2 ADC MIX R", "STO3 ADC MIX R"
   2121};
   2122
   2123static SOC_ENUM_SINGLE_DECL(
   2124	rt5677_inbound7_enum, RT5677_DSP_INB_CTRL2,
   2125	RT5677_IB7_SRC_SFT, rt5677_inbound7_src);
   2126
   2127static const struct snd_kcontrol_new rt5677_ib7_src_mux =
   2128	SOC_DAPM_ENUM("InBound7 Source", rt5677_inbound7_enum);
   2129
   2130/* InBound8 Source */ /* MX-A4 [10:8] */
   2131static const char * const rt5677_inbound8_src[] = {
   2132	"STO1 ADC MIX L", "STO2 ADC MIX L", "STO3 ADC MIX L", "STO4 ADC MIX L",
   2133	"MONO ADC MIX L", "DACL1 FS"
   2134};
   2135
   2136static SOC_ENUM_SINGLE_DECL(
   2137	rt5677_inbound8_enum, RT5677_DSP_INB_CTRL2,
   2138	RT5677_IB8_SRC_SFT, rt5677_inbound8_src);
   2139
   2140static const struct snd_kcontrol_new rt5677_ib8_src_mux =
   2141	SOC_DAPM_ENUM("InBound8 Source", rt5677_inbound8_enum);
   2142
   2143/* InBound9 Source */ /* MX-A4 [6:4] */
   2144static const char * const rt5677_inbound9_src[] = {
   2145	"STO1 ADC MIX R", "STO2 ADC MIX R", "STO3 ADC MIX R", "STO4 ADC MIX R",
   2146	"MONO ADC MIX R", "DACR1 FS", "DAC1 FS"
   2147};
   2148
   2149static SOC_ENUM_SINGLE_DECL(
   2150	rt5677_inbound9_enum, RT5677_DSP_INB_CTRL2,
   2151	RT5677_IB9_SRC_SFT, rt5677_inbound9_src);
   2152
   2153static const struct snd_kcontrol_new rt5677_ib9_src_mux =
   2154	SOC_DAPM_ENUM("InBound9 Source", rt5677_inbound9_enum);
   2155
   2156/* VAD Source */ /* MX-9F [6:4] */
   2157static const char * const rt5677_vad_src[] = {
   2158	"STO1 ADC MIX L", "MONO ADC MIX L", "MONO ADC MIX R", "STO2 ADC MIX L",
   2159	"STO3 ADC MIX L"
   2160};
   2161
   2162static SOC_ENUM_SINGLE_DECL(
   2163	rt5677_vad_enum, RT5677_VAD_CTRL4,
   2164	RT5677_VAD_SRC_SFT, rt5677_vad_src);
   2165
   2166static const struct snd_kcontrol_new rt5677_vad_src_mux =
   2167	SOC_DAPM_ENUM("VAD Source", rt5677_vad_enum);
   2168
   2169/* Sidetone Source */ /* MX-13 [11:9] */
   2170static const char * const rt5677_sidetone_src[] = {
   2171	"DMIC1 L", "DMIC2 L", "DMIC3 L", "DMIC4 L", "ADC1", "ADC2"
   2172};
   2173
   2174static SOC_ENUM_SINGLE_DECL(
   2175	rt5677_sidetone_enum, RT5677_SIDETONE_CTRL,
   2176	RT5677_ST_SEL_SFT, rt5677_sidetone_src);
   2177
   2178static const struct snd_kcontrol_new rt5677_sidetone_mux =
   2179	SOC_DAPM_ENUM("Sidetone Source", rt5677_sidetone_enum);
   2180
   2181/* DAC1/2 Source */ /* MX-15 [1:0] */
   2182static const char * const rt5677_dac12_src[] = {
   2183	"STO1 DAC MIX", "MONO DAC MIX", "DD MIX1", "DD MIX2"
   2184};
   2185
   2186static SOC_ENUM_SINGLE_DECL(
   2187	rt5677_dac12_enum, RT5677_ANA_DAC1_2_3_SRC,
   2188	RT5677_ANA_DAC1_2_SRC_SEL_SFT, rt5677_dac12_src);
   2189
   2190static const struct snd_kcontrol_new rt5677_dac12_mux =
   2191	SOC_DAPM_ENUM("Analog DAC1/2 Source", rt5677_dac12_enum);
   2192
   2193/* DAC3 Source */ /* MX-15 [5:4] */
   2194static const char * const rt5677_dac3_src[] = {
   2195	"MONO DAC MIXL", "MONO DAC MIXR", "DD MIX1L", "DD MIX2L"
   2196};
   2197
   2198static SOC_ENUM_SINGLE_DECL(
   2199	rt5677_dac3_enum, RT5677_ANA_DAC1_2_3_SRC,
   2200	RT5677_ANA_DAC3_SRC_SEL_SFT, rt5677_dac3_src);
   2201
   2202static const struct snd_kcontrol_new rt5677_dac3_mux =
   2203	SOC_DAPM_ENUM("Analog DAC3 Source", rt5677_dac3_enum);
   2204
   2205/* PDM channel Source */ /* MX-31 [13:12][9:8][5:4][1:0] */
   2206static const char * const rt5677_pdm_src[] = {
   2207	"STO1 DAC MIX", "MONO DAC MIX", "DD MIX1", "DD MIX2"
   2208};
   2209
   2210static SOC_ENUM_SINGLE_DECL(
   2211	rt5677_pdm1_l_enum, RT5677_PDM_OUT_CTRL,
   2212	RT5677_SEL_PDM1_L_SFT, rt5677_pdm_src);
   2213
   2214static const struct snd_kcontrol_new rt5677_pdm1_l_mux =
   2215	SOC_DAPM_ENUM("PDM1 Source", rt5677_pdm1_l_enum);
   2216
   2217static SOC_ENUM_SINGLE_DECL(
   2218	rt5677_pdm2_l_enum, RT5677_PDM_OUT_CTRL,
   2219	RT5677_SEL_PDM2_L_SFT, rt5677_pdm_src);
   2220
   2221static const struct snd_kcontrol_new rt5677_pdm2_l_mux =
   2222	SOC_DAPM_ENUM("PDM2 Source", rt5677_pdm2_l_enum);
   2223
   2224static SOC_ENUM_SINGLE_DECL(
   2225	rt5677_pdm1_r_enum, RT5677_PDM_OUT_CTRL,
   2226	RT5677_SEL_PDM1_R_SFT, rt5677_pdm_src);
   2227
   2228static const struct snd_kcontrol_new rt5677_pdm1_r_mux =
   2229	SOC_DAPM_ENUM("PDM1 Source", rt5677_pdm1_r_enum);
   2230
   2231static SOC_ENUM_SINGLE_DECL(
   2232	rt5677_pdm2_r_enum, RT5677_PDM_OUT_CTRL,
   2233	RT5677_SEL_PDM2_R_SFT, rt5677_pdm_src);
   2234
   2235static const struct snd_kcontrol_new rt5677_pdm2_r_mux =
   2236	SOC_DAPM_ENUM("PDM2 Source", rt5677_pdm2_r_enum);
   2237
   2238/* TDM IF1/2 SLB ADC1 Data Selection */ /* MX-3C MX-41 [5:4] MX-08 [1:0] */
   2239static const char * const rt5677_if12_adc1_src[] = {
   2240	"STO1 ADC MIX", "OB01", "VAD ADC"
   2241};
   2242
   2243static SOC_ENUM_SINGLE_DECL(
   2244	rt5677_if1_adc1_enum, RT5677_TDM1_CTRL2,
   2245	RT5677_IF1_ADC1_SFT, rt5677_if12_adc1_src);
   2246
   2247static const struct snd_kcontrol_new rt5677_if1_adc1_mux =
   2248	SOC_DAPM_ENUM("IF1 ADC1 Source", rt5677_if1_adc1_enum);
   2249
   2250static SOC_ENUM_SINGLE_DECL(
   2251	rt5677_if2_adc1_enum, RT5677_TDM2_CTRL2,
   2252	RT5677_IF2_ADC1_SFT, rt5677_if12_adc1_src);
   2253
   2254static const struct snd_kcontrol_new rt5677_if2_adc1_mux =
   2255	SOC_DAPM_ENUM("IF2 ADC1 Source", rt5677_if2_adc1_enum);
   2256
   2257static SOC_ENUM_SINGLE_DECL(
   2258	rt5677_slb_adc1_enum, RT5677_SLIMBUS_RX,
   2259	RT5677_SLB_ADC1_SFT, rt5677_if12_adc1_src);
   2260
   2261static const struct snd_kcontrol_new rt5677_slb_adc1_mux =
   2262	SOC_DAPM_ENUM("SLB ADC1 Source", rt5677_slb_adc1_enum);
   2263
   2264/* TDM IF1/2 SLB ADC2 Data Selection */ /* MX-3C MX-41 [7:6] MX-08 [3:2] */
   2265static const char * const rt5677_if12_adc2_src[] = {
   2266	"STO2 ADC MIX", "OB23"
   2267};
   2268
   2269static SOC_ENUM_SINGLE_DECL(
   2270	rt5677_if1_adc2_enum, RT5677_TDM1_CTRL2,
   2271	RT5677_IF1_ADC2_SFT, rt5677_if12_adc2_src);
   2272
   2273static const struct snd_kcontrol_new rt5677_if1_adc2_mux =
   2274	SOC_DAPM_ENUM("IF1 ADC2 Source", rt5677_if1_adc2_enum);
   2275
   2276static SOC_ENUM_SINGLE_DECL(
   2277	rt5677_if2_adc2_enum, RT5677_TDM2_CTRL2,
   2278	RT5677_IF2_ADC2_SFT, rt5677_if12_adc2_src);
   2279
   2280static const struct snd_kcontrol_new rt5677_if2_adc2_mux =
   2281	SOC_DAPM_ENUM("IF2 ADC2 Source", rt5677_if2_adc2_enum);
   2282
   2283static SOC_ENUM_SINGLE_DECL(
   2284	rt5677_slb_adc2_enum, RT5677_SLIMBUS_RX,
   2285	RT5677_SLB_ADC2_SFT, rt5677_if12_adc2_src);
   2286
   2287static const struct snd_kcontrol_new rt5677_slb_adc2_mux =
   2288	SOC_DAPM_ENUM("SLB ADC2 Source", rt5677_slb_adc2_enum);
   2289
   2290/* TDM IF1/2 SLB ADC3 Data Selection */ /* MX-3C MX-41 [9:8] MX-08 [5:4] */
   2291static const char * const rt5677_if12_adc3_src[] = {
   2292	"STO3 ADC MIX", "MONO ADC MIX", "OB45"
   2293};
   2294
   2295static SOC_ENUM_SINGLE_DECL(
   2296	rt5677_if1_adc3_enum, RT5677_TDM1_CTRL2,
   2297	RT5677_IF1_ADC3_SFT, rt5677_if12_adc3_src);
   2298
   2299static const struct snd_kcontrol_new rt5677_if1_adc3_mux =
   2300	SOC_DAPM_ENUM("IF1 ADC3 Source", rt5677_if1_adc3_enum);
   2301
   2302static SOC_ENUM_SINGLE_DECL(
   2303	rt5677_if2_adc3_enum, RT5677_TDM2_CTRL2,
   2304	RT5677_IF2_ADC3_SFT, rt5677_if12_adc3_src);
   2305
   2306static const struct snd_kcontrol_new rt5677_if2_adc3_mux =
   2307	SOC_DAPM_ENUM("IF2 ADC3 Source", rt5677_if2_adc3_enum);
   2308
   2309static SOC_ENUM_SINGLE_DECL(
   2310	rt5677_slb_adc3_enum, RT5677_SLIMBUS_RX,
   2311	RT5677_SLB_ADC3_SFT, rt5677_if12_adc3_src);
   2312
   2313static const struct snd_kcontrol_new rt5677_slb_adc3_mux =
   2314	SOC_DAPM_ENUM("SLB ADC3 Source", rt5677_slb_adc3_enum);
   2315
   2316/* TDM IF1/2 SLB ADC4 Data Selection */ /* MX-3C MX-41 [11:10] MX-08 [7:6] */
   2317static const char * const rt5677_if12_adc4_src[] = {
   2318	"STO4 ADC MIX", "OB67", "OB01"
   2319};
   2320
   2321static SOC_ENUM_SINGLE_DECL(
   2322	rt5677_if1_adc4_enum, RT5677_TDM1_CTRL2,
   2323	RT5677_IF1_ADC4_SFT, rt5677_if12_adc4_src);
   2324
   2325static const struct snd_kcontrol_new rt5677_if1_adc4_mux =
   2326	SOC_DAPM_ENUM("IF1 ADC4 Source", rt5677_if1_adc4_enum);
   2327
   2328static SOC_ENUM_SINGLE_DECL(
   2329	rt5677_if2_adc4_enum, RT5677_TDM2_CTRL2,
   2330	RT5677_IF2_ADC4_SFT, rt5677_if12_adc4_src);
   2331
   2332static const struct snd_kcontrol_new rt5677_if2_adc4_mux =
   2333	SOC_DAPM_ENUM("IF2 ADC4 Source", rt5677_if2_adc4_enum);
   2334
   2335static SOC_ENUM_SINGLE_DECL(
   2336	rt5677_slb_adc4_enum, RT5677_SLIMBUS_RX,
   2337	RT5677_SLB_ADC4_SFT, rt5677_if12_adc4_src);
   2338
   2339static const struct snd_kcontrol_new rt5677_slb_adc4_mux =
   2340	SOC_DAPM_ENUM("SLB ADC4 Source", rt5677_slb_adc4_enum);
   2341
   2342/* Interface3/4 ADC Data Input */ /* MX-2F [3:0] MX-30 [7:4] */
   2343static const char * const rt5677_if34_adc_src[] = {
   2344	"STO1 ADC MIX", "STO2 ADC MIX", "STO3 ADC MIX", "STO4 ADC MIX",
   2345	"MONO ADC MIX", "OB01", "OB23", "VAD ADC"
   2346};
   2347
   2348static SOC_ENUM_SINGLE_DECL(
   2349	rt5677_if3_adc_enum, RT5677_IF3_DATA,
   2350	RT5677_IF3_ADC_IN_SFT, rt5677_if34_adc_src);
   2351
   2352static const struct snd_kcontrol_new rt5677_if3_adc_mux =
   2353	SOC_DAPM_ENUM("IF3 ADC Source", rt5677_if3_adc_enum);
   2354
   2355static SOC_ENUM_SINGLE_DECL(
   2356	rt5677_if4_adc_enum, RT5677_IF4_DATA,
   2357	RT5677_IF4_ADC_IN_SFT, rt5677_if34_adc_src);
   2358
   2359static const struct snd_kcontrol_new rt5677_if4_adc_mux =
   2360	SOC_DAPM_ENUM("IF4 ADC Source", rt5677_if4_adc_enum);
   2361
   2362/* TDM IF1/2 ADC Data Selection */ /* MX-3B MX-40 [7:6][5:4][3:2][1:0] */
   2363static const char * const rt5677_if12_adc_swap_src[] = {
   2364	"L/R", "R/L", "L/L", "R/R"
   2365};
   2366
   2367static SOC_ENUM_SINGLE_DECL(
   2368	rt5677_if1_adc1_swap_enum, RT5677_TDM1_CTRL1,
   2369	RT5677_IF1_ADC1_SWAP_SFT, rt5677_if12_adc_swap_src);
   2370
   2371static const struct snd_kcontrol_new rt5677_if1_adc1_swap_mux =
   2372	SOC_DAPM_ENUM("IF1 ADC1 Swap Source", rt5677_if1_adc1_swap_enum);
   2373
   2374static SOC_ENUM_SINGLE_DECL(
   2375	rt5677_if1_adc2_swap_enum, RT5677_TDM1_CTRL1,
   2376	RT5677_IF1_ADC2_SWAP_SFT, rt5677_if12_adc_swap_src);
   2377
   2378static const struct snd_kcontrol_new rt5677_if1_adc2_swap_mux =
   2379	SOC_DAPM_ENUM("IF1 ADC2 Swap Source", rt5677_if1_adc2_swap_enum);
   2380
   2381static SOC_ENUM_SINGLE_DECL(
   2382	rt5677_if1_adc3_swap_enum, RT5677_TDM1_CTRL1,
   2383	RT5677_IF1_ADC3_SWAP_SFT, rt5677_if12_adc_swap_src);
   2384
   2385static const struct snd_kcontrol_new rt5677_if1_adc3_swap_mux =
   2386	SOC_DAPM_ENUM("IF1 ADC3 Swap Source", rt5677_if1_adc3_swap_enum);
   2387
   2388static SOC_ENUM_SINGLE_DECL(
   2389	rt5677_if1_adc4_swap_enum, RT5677_TDM1_CTRL1,
   2390	RT5677_IF1_ADC4_SWAP_SFT, rt5677_if12_adc_swap_src);
   2391
   2392static const struct snd_kcontrol_new rt5677_if1_adc4_swap_mux =
   2393	SOC_DAPM_ENUM("IF1 ADC4 Swap Source", rt5677_if1_adc4_swap_enum);
   2394
   2395static SOC_ENUM_SINGLE_DECL(
   2396	rt5677_if2_adc1_swap_enum, RT5677_TDM2_CTRL1,
   2397	RT5677_IF1_ADC2_SWAP_SFT, rt5677_if12_adc_swap_src);
   2398
   2399static const struct snd_kcontrol_new rt5677_if2_adc1_swap_mux =
   2400	SOC_DAPM_ENUM("IF1 ADC2 Swap Source", rt5677_if2_adc1_swap_enum);
   2401
   2402static SOC_ENUM_SINGLE_DECL(
   2403	rt5677_if2_adc2_swap_enum, RT5677_TDM2_CTRL1,
   2404	RT5677_IF2_ADC2_SWAP_SFT, rt5677_if12_adc_swap_src);
   2405
   2406static const struct snd_kcontrol_new rt5677_if2_adc2_swap_mux =
   2407	SOC_DAPM_ENUM("IF2 ADC2 Swap Source", rt5677_if2_adc2_swap_enum);
   2408
   2409static SOC_ENUM_SINGLE_DECL(
   2410	rt5677_if2_adc3_swap_enum, RT5677_TDM2_CTRL1,
   2411	RT5677_IF2_ADC3_SWAP_SFT, rt5677_if12_adc_swap_src);
   2412
   2413static const struct snd_kcontrol_new rt5677_if2_adc3_swap_mux =
   2414	SOC_DAPM_ENUM("IF2 ADC3 Swap Source", rt5677_if2_adc3_swap_enum);
   2415
   2416static SOC_ENUM_SINGLE_DECL(
   2417	rt5677_if2_adc4_swap_enum, RT5677_TDM2_CTRL1,
   2418	RT5677_IF2_ADC4_SWAP_SFT, rt5677_if12_adc_swap_src);
   2419
   2420static const struct snd_kcontrol_new rt5677_if2_adc4_swap_mux =
   2421	SOC_DAPM_ENUM("IF2 ADC4 Swap Source", rt5677_if2_adc4_swap_enum);
   2422
   2423/* TDM IF1 ADC Data Selection */ /* MX-3C [2:0] */
   2424static const char * const rt5677_if1_adc_tdm_swap_src[] = {
   2425	"1/2/3/4", "2/1/3/4", "2/3/1/4", "4/1/2/3", "1/3/2/4", "1/4/2/3",
   2426	"3/1/2/4", "3/4/1/2"
   2427};
   2428
   2429static SOC_ENUM_SINGLE_DECL(
   2430	rt5677_if1_adc_tdm_swap_enum, RT5677_TDM1_CTRL2,
   2431	RT5677_IF1_ADC_CTRL_SFT, rt5677_if1_adc_tdm_swap_src);
   2432
   2433static const struct snd_kcontrol_new rt5677_if1_adc_tdm_swap_mux =
   2434	SOC_DAPM_ENUM("IF1 ADC TDM Swap Source", rt5677_if1_adc_tdm_swap_enum);
   2435
   2436/* TDM IF2 ADC Data Selection */ /* MX-41[2:0] */
   2437static const char * const rt5677_if2_adc_tdm_swap_src[] = {
   2438	"1/2/3/4", "2/1/3/4", "3/1/2/4", "4/1/2/3", "1/3/2/4", "1/4/2/3",
   2439	"2/3/1/4", "3/4/1/2"
   2440};
   2441
   2442static SOC_ENUM_SINGLE_DECL(
   2443	rt5677_if2_adc_tdm_swap_enum, RT5677_TDM2_CTRL2,
   2444	RT5677_IF2_ADC_CTRL_SFT, rt5677_if2_adc_tdm_swap_src);
   2445
   2446static const struct snd_kcontrol_new rt5677_if2_adc_tdm_swap_mux =
   2447	SOC_DAPM_ENUM("IF2 ADC TDM Swap Source", rt5677_if2_adc_tdm_swap_enum);
   2448
   2449/* TDM IF1/2 DAC Data Selection */ /* MX-3E[14:12][10:8][6:4][2:0]
   2450					MX-3F[14:12][10:8][6:4][2:0]
   2451					MX-43[14:12][10:8][6:4][2:0]
   2452					MX-44[14:12][10:8][6:4][2:0] */
   2453static const char * const rt5677_if12_dac_tdm_sel_src[] = {
   2454	"Slot0", "Slot1", "Slot2", "Slot3", "Slot4", "Slot5", "Slot6", "Slot7"
   2455};
   2456
   2457static SOC_ENUM_SINGLE_DECL(
   2458	rt5677_if1_dac0_tdm_sel_enum, RT5677_TDM1_CTRL4,
   2459	RT5677_IF1_DAC0_SFT, rt5677_if12_dac_tdm_sel_src);
   2460
   2461static const struct snd_kcontrol_new rt5677_if1_dac0_tdm_sel_mux =
   2462	SOC_DAPM_ENUM("IF1 DAC0 TDM Source", rt5677_if1_dac0_tdm_sel_enum);
   2463
   2464static SOC_ENUM_SINGLE_DECL(
   2465	rt5677_if1_dac1_tdm_sel_enum, RT5677_TDM1_CTRL4,
   2466	RT5677_IF1_DAC1_SFT, rt5677_if12_dac_tdm_sel_src);
   2467
   2468static const struct snd_kcontrol_new rt5677_if1_dac1_tdm_sel_mux =
   2469	SOC_DAPM_ENUM("IF1 DAC1 TDM Source", rt5677_if1_dac1_tdm_sel_enum);
   2470
   2471static SOC_ENUM_SINGLE_DECL(
   2472	rt5677_if1_dac2_tdm_sel_enum, RT5677_TDM1_CTRL4,
   2473	RT5677_IF1_DAC2_SFT, rt5677_if12_dac_tdm_sel_src);
   2474
   2475static const struct snd_kcontrol_new rt5677_if1_dac2_tdm_sel_mux =
   2476	SOC_DAPM_ENUM("IF1 DAC2 TDM Source", rt5677_if1_dac2_tdm_sel_enum);
   2477
   2478static SOC_ENUM_SINGLE_DECL(
   2479	rt5677_if1_dac3_tdm_sel_enum, RT5677_TDM1_CTRL4,
   2480	RT5677_IF1_DAC3_SFT, rt5677_if12_dac_tdm_sel_src);
   2481
   2482static const struct snd_kcontrol_new rt5677_if1_dac3_tdm_sel_mux =
   2483	SOC_DAPM_ENUM("IF1 DAC3 TDM Source", rt5677_if1_dac3_tdm_sel_enum);
   2484
   2485static SOC_ENUM_SINGLE_DECL(
   2486	rt5677_if1_dac4_tdm_sel_enum, RT5677_TDM1_CTRL5,
   2487	RT5677_IF1_DAC4_SFT, rt5677_if12_dac_tdm_sel_src);
   2488
   2489static const struct snd_kcontrol_new rt5677_if1_dac4_tdm_sel_mux =
   2490	SOC_DAPM_ENUM("IF1 DAC4 TDM Source", rt5677_if1_dac4_tdm_sel_enum);
   2491
   2492static SOC_ENUM_SINGLE_DECL(
   2493	rt5677_if1_dac5_tdm_sel_enum, RT5677_TDM1_CTRL5,
   2494	RT5677_IF1_DAC5_SFT, rt5677_if12_dac_tdm_sel_src);
   2495
   2496static const struct snd_kcontrol_new rt5677_if1_dac5_tdm_sel_mux =
   2497	SOC_DAPM_ENUM("IF1 DAC5 TDM Source", rt5677_if1_dac5_tdm_sel_enum);
   2498
   2499static SOC_ENUM_SINGLE_DECL(
   2500	rt5677_if1_dac6_tdm_sel_enum, RT5677_TDM1_CTRL5,
   2501	RT5677_IF1_DAC6_SFT, rt5677_if12_dac_tdm_sel_src);
   2502
   2503static const struct snd_kcontrol_new rt5677_if1_dac6_tdm_sel_mux =
   2504	SOC_DAPM_ENUM("IF1 DAC6 TDM Source", rt5677_if1_dac6_tdm_sel_enum);
   2505
   2506static SOC_ENUM_SINGLE_DECL(
   2507	rt5677_if1_dac7_tdm_sel_enum, RT5677_TDM1_CTRL5,
   2508	RT5677_IF1_DAC7_SFT, rt5677_if12_dac_tdm_sel_src);
   2509
   2510static const struct snd_kcontrol_new rt5677_if1_dac7_tdm_sel_mux =
   2511	SOC_DAPM_ENUM("IF1 DAC7 TDM Source", rt5677_if1_dac7_tdm_sel_enum);
   2512
   2513static SOC_ENUM_SINGLE_DECL(
   2514	rt5677_if2_dac0_tdm_sel_enum, RT5677_TDM2_CTRL4,
   2515	RT5677_IF2_DAC0_SFT, rt5677_if12_dac_tdm_sel_src);
   2516
   2517static const struct snd_kcontrol_new rt5677_if2_dac0_tdm_sel_mux =
   2518	SOC_DAPM_ENUM("IF2 DAC0 TDM Source", rt5677_if2_dac0_tdm_sel_enum);
   2519
   2520static SOC_ENUM_SINGLE_DECL(
   2521	rt5677_if2_dac1_tdm_sel_enum, RT5677_TDM2_CTRL4,
   2522	RT5677_IF2_DAC1_SFT, rt5677_if12_dac_tdm_sel_src);
   2523
   2524static const struct snd_kcontrol_new rt5677_if2_dac1_tdm_sel_mux =
   2525	SOC_DAPM_ENUM("IF2 DAC1 TDM Source", rt5677_if2_dac1_tdm_sel_enum);
   2526
   2527static SOC_ENUM_SINGLE_DECL(
   2528	rt5677_if2_dac2_tdm_sel_enum, RT5677_TDM2_CTRL4,
   2529	RT5677_IF2_DAC2_SFT, rt5677_if12_dac_tdm_sel_src);
   2530
   2531static const struct snd_kcontrol_new rt5677_if2_dac2_tdm_sel_mux =
   2532	SOC_DAPM_ENUM("IF2 DAC2 TDM Source", rt5677_if2_dac2_tdm_sel_enum);
   2533
   2534static SOC_ENUM_SINGLE_DECL(
   2535	rt5677_if2_dac3_tdm_sel_enum, RT5677_TDM2_CTRL4,
   2536	RT5677_IF2_DAC3_SFT, rt5677_if12_dac_tdm_sel_src);
   2537
   2538static const struct snd_kcontrol_new rt5677_if2_dac3_tdm_sel_mux =
   2539	SOC_DAPM_ENUM("IF2 DAC3 TDM Source", rt5677_if2_dac3_tdm_sel_enum);
   2540
   2541static SOC_ENUM_SINGLE_DECL(
   2542	rt5677_if2_dac4_tdm_sel_enum, RT5677_TDM2_CTRL5,
   2543	RT5677_IF2_DAC4_SFT, rt5677_if12_dac_tdm_sel_src);
   2544
   2545static const struct snd_kcontrol_new rt5677_if2_dac4_tdm_sel_mux =
   2546	SOC_DAPM_ENUM("IF2 DAC4 TDM Source", rt5677_if2_dac4_tdm_sel_enum);
   2547
   2548static SOC_ENUM_SINGLE_DECL(
   2549	rt5677_if2_dac5_tdm_sel_enum, RT5677_TDM2_CTRL5,
   2550	RT5677_IF2_DAC5_SFT, rt5677_if12_dac_tdm_sel_src);
   2551
   2552static const struct snd_kcontrol_new rt5677_if2_dac5_tdm_sel_mux =
   2553	SOC_DAPM_ENUM("IF2 DAC5 TDM Source", rt5677_if2_dac5_tdm_sel_enum);
   2554
   2555static SOC_ENUM_SINGLE_DECL(
   2556	rt5677_if2_dac6_tdm_sel_enum, RT5677_TDM2_CTRL5,
   2557	RT5677_IF2_DAC6_SFT, rt5677_if12_dac_tdm_sel_src);
   2558
   2559static const struct snd_kcontrol_new rt5677_if2_dac6_tdm_sel_mux =
   2560	SOC_DAPM_ENUM("IF2 DAC6 TDM Source", rt5677_if2_dac6_tdm_sel_enum);
   2561
   2562static SOC_ENUM_SINGLE_DECL(
   2563	rt5677_if2_dac7_tdm_sel_enum, RT5677_TDM2_CTRL5,
   2564	RT5677_IF2_DAC7_SFT, rt5677_if12_dac_tdm_sel_src);
   2565
   2566static const struct snd_kcontrol_new rt5677_if2_dac7_tdm_sel_mux =
   2567	SOC_DAPM_ENUM("IF2 DAC7 TDM Source", rt5677_if2_dac7_tdm_sel_enum);
   2568
   2569static int rt5677_bst1_event(struct snd_soc_dapm_widget *w,
   2570	struct snd_kcontrol *kcontrol, int event)
   2571{
   2572	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
   2573	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   2574
   2575	switch (event) {
   2576	case SND_SOC_DAPM_POST_PMU:
   2577		regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2,
   2578			RT5677_PWR_BST1_P, RT5677_PWR_BST1_P);
   2579		break;
   2580
   2581	case SND_SOC_DAPM_PRE_PMD:
   2582		regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2,
   2583			RT5677_PWR_BST1_P, 0);
   2584		break;
   2585
   2586	default:
   2587		return 0;
   2588	}
   2589
   2590	return 0;
   2591}
   2592
   2593static int rt5677_bst2_event(struct snd_soc_dapm_widget *w,
   2594	struct snd_kcontrol *kcontrol, int event)
   2595{
   2596	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
   2597	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   2598
   2599	switch (event) {
   2600	case SND_SOC_DAPM_POST_PMU:
   2601		regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2,
   2602			RT5677_PWR_BST2_P, RT5677_PWR_BST2_P);
   2603		break;
   2604
   2605	case SND_SOC_DAPM_PRE_PMD:
   2606		regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2,
   2607			RT5677_PWR_BST2_P, 0);
   2608		break;
   2609
   2610	default:
   2611		return 0;
   2612	}
   2613
   2614	return 0;
   2615}
   2616
   2617static int rt5677_set_pll1_event(struct snd_soc_dapm_widget *w,
   2618	struct snd_kcontrol *kcontrol, int event)
   2619{
   2620	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
   2621	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   2622
   2623	switch (event) {
   2624	case SND_SOC_DAPM_PRE_PMU:
   2625		regmap_update_bits(rt5677->regmap, RT5677_PLL1_CTRL2, 0x2, 0x2);
   2626		break;
   2627
   2628	case SND_SOC_DAPM_POST_PMU:
   2629		regmap_update_bits(rt5677->regmap, RT5677_PLL1_CTRL2, 0x2, 0x0);
   2630		break;
   2631
   2632	default:
   2633		return 0;
   2634	}
   2635
   2636	return 0;
   2637}
   2638
   2639static int rt5677_set_pll2_event(struct snd_soc_dapm_widget *w,
   2640	struct snd_kcontrol *kcontrol, int event)
   2641{
   2642	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
   2643	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   2644
   2645	switch (event) {
   2646	case SND_SOC_DAPM_PRE_PMU:
   2647		regmap_update_bits(rt5677->regmap, RT5677_PLL2_CTRL2, 0x2, 0x2);
   2648		break;
   2649
   2650	case SND_SOC_DAPM_POST_PMU:
   2651		regmap_update_bits(rt5677->regmap, RT5677_PLL2_CTRL2, 0x2, 0x0);
   2652		break;
   2653
   2654	default:
   2655		return 0;
   2656	}
   2657
   2658	return 0;
   2659}
   2660
   2661static int rt5677_set_micbias1_event(struct snd_soc_dapm_widget *w,
   2662	struct snd_kcontrol *kcontrol, int event)
   2663{
   2664	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
   2665	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   2666
   2667	switch (event) {
   2668	case SND_SOC_DAPM_POST_PMU:
   2669		regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2,
   2670			RT5677_PWR_CLK_MB1 | RT5677_PWR_PP_MB1 |
   2671			RT5677_PWR_CLK_MB, RT5677_PWR_CLK_MB1 |
   2672			RT5677_PWR_PP_MB1 | RT5677_PWR_CLK_MB);
   2673		break;
   2674
   2675	case SND_SOC_DAPM_PRE_PMD:
   2676		regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2,
   2677			RT5677_PWR_CLK_MB1 | RT5677_PWR_PP_MB1 |
   2678			RT5677_PWR_CLK_MB, 0);
   2679		break;
   2680
   2681	default:
   2682		return 0;
   2683	}
   2684
   2685	return 0;
   2686}
   2687
   2688static int rt5677_if1_adc_tdm_event(struct snd_soc_dapm_widget *w,
   2689	struct snd_kcontrol *kcontrol, int event)
   2690{
   2691	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
   2692	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   2693	unsigned int value;
   2694
   2695	switch (event) {
   2696	case SND_SOC_DAPM_PRE_PMU:
   2697		regmap_read(rt5677->regmap, RT5677_TDM1_CTRL2, &value);
   2698		if (value & RT5677_IF1_ADC_CTRL_MASK)
   2699			regmap_update_bits(rt5677->regmap, RT5677_TDM1_CTRL1,
   2700				RT5677_IF1_ADC_MODE_MASK,
   2701				RT5677_IF1_ADC_MODE_TDM);
   2702		break;
   2703
   2704	default:
   2705		return 0;
   2706	}
   2707
   2708	return 0;
   2709}
   2710
   2711static int rt5677_if2_adc_tdm_event(struct snd_soc_dapm_widget *w,
   2712	struct snd_kcontrol *kcontrol, int event)
   2713{
   2714	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
   2715	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   2716	unsigned int value;
   2717
   2718	switch (event) {
   2719	case SND_SOC_DAPM_PRE_PMU:
   2720		regmap_read(rt5677->regmap, RT5677_TDM2_CTRL2, &value);
   2721		if (value & RT5677_IF2_ADC_CTRL_MASK)
   2722			regmap_update_bits(rt5677->regmap, RT5677_TDM2_CTRL1,
   2723				RT5677_IF2_ADC_MODE_MASK,
   2724				RT5677_IF2_ADC_MODE_TDM);
   2725		break;
   2726
   2727	default:
   2728		return 0;
   2729	}
   2730
   2731	return 0;
   2732}
   2733
   2734static int rt5677_vref_event(struct snd_soc_dapm_widget *w,
   2735	struct snd_kcontrol *kcontrol, int event)
   2736{
   2737	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
   2738	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   2739
   2740	switch (event) {
   2741	case SND_SOC_DAPM_POST_PMU:
   2742		if (snd_soc_component_get_bias_level(component) != SND_SOC_BIAS_ON &&
   2743			!rt5677->is_vref_slow) {
   2744			mdelay(20);
   2745			regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG1,
   2746				RT5677_PWR_FV1 | RT5677_PWR_FV2,
   2747				RT5677_PWR_FV1 | RT5677_PWR_FV2);
   2748			rt5677->is_vref_slow = true;
   2749		}
   2750		break;
   2751
   2752	default:
   2753		return 0;
   2754	}
   2755
   2756	return 0;
   2757}
   2758
   2759static int rt5677_filter_power_event(struct snd_soc_dapm_widget *w,
   2760	struct snd_kcontrol *kcontrol, int event)
   2761{
   2762	switch (event) {
   2763	case SND_SOC_DAPM_POST_PMU:
   2764		msleep(50);
   2765		break;
   2766
   2767	default:
   2768		return 0;
   2769	}
   2770
   2771	return 0;
   2772}
   2773
   2774static const struct snd_soc_dapm_widget rt5677_dapm_widgets[] = {
   2775	SND_SOC_DAPM_SUPPLY("PLL1", RT5677_PWR_ANLG2, RT5677_PWR_PLL1_BIT,
   2776		0, rt5677_set_pll1_event, SND_SOC_DAPM_PRE_PMU |
   2777		SND_SOC_DAPM_POST_PMU),
   2778	SND_SOC_DAPM_SUPPLY("PLL2", RT5677_PWR_ANLG2, RT5677_PWR_PLL2_BIT,
   2779		0, rt5677_set_pll2_event, SND_SOC_DAPM_PRE_PMU |
   2780		SND_SOC_DAPM_POST_PMU),
   2781
   2782	/* ASRC */
   2783	SND_SOC_DAPM_SUPPLY_S("I2S1 ASRC", 1, RT5677_ASRC_1, 0, 0, NULL, 0),
   2784	SND_SOC_DAPM_SUPPLY_S("I2S2 ASRC", 1, RT5677_ASRC_1, 1, 0, NULL, 0),
   2785	SND_SOC_DAPM_SUPPLY_S("I2S3 ASRC", 1, RT5677_ASRC_1, 2, 0, NULL, 0),
   2786	SND_SOC_DAPM_SUPPLY_S("I2S4 ASRC", 1, RT5677_ASRC_1, 3, 0, NULL, 0),
   2787	SND_SOC_DAPM_SUPPLY_S("DAC STO ASRC", 1, RT5677_ASRC_2, 14, 0,
   2788		rt5677_filter_power_event, SND_SOC_DAPM_POST_PMU),
   2789	SND_SOC_DAPM_SUPPLY_S("DAC MONO2 L ASRC", 1, RT5677_ASRC_2, 13, 0, NULL,
   2790		0),
   2791	SND_SOC_DAPM_SUPPLY_S("DAC MONO2 R ASRC", 1, RT5677_ASRC_2, 12, 0, NULL,
   2792		0),
   2793	SND_SOC_DAPM_SUPPLY_S("DAC MONO3 L ASRC", 1, RT5677_ASRC_1, 15, 0, NULL,
   2794		0),
   2795	SND_SOC_DAPM_SUPPLY_S("DAC MONO3 R ASRC", 1, RT5677_ASRC_1, 14, 0, NULL,
   2796		0),
   2797	SND_SOC_DAPM_SUPPLY_S("DAC MONO4 L ASRC", 1, RT5677_ASRC_1, 13, 0, NULL,
   2798		0),
   2799	SND_SOC_DAPM_SUPPLY_S("DAC MONO4 R ASRC", 1, RT5677_ASRC_1, 12, 0, NULL,
   2800		0),
   2801	SND_SOC_DAPM_SUPPLY_S("DMIC STO1 ASRC", 1, RT5677_ASRC_2, 11, 0, NULL,
   2802		0),
   2803	SND_SOC_DAPM_SUPPLY_S("DMIC STO2 ASRC", 1, RT5677_ASRC_2, 10, 0, NULL,
   2804		0),
   2805	SND_SOC_DAPM_SUPPLY_S("DMIC STO3 ASRC", 1, RT5677_ASRC_2, 9, 0, NULL,
   2806		0),
   2807	SND_SOC_DAPM_SUPPLY_S("DMIC STO4 ASRC", 1, RT5677_ASRC_2, 8, 0, NULL,
   2808		0),
   2809	SND_SOC_DAPM_SUPPLY_S("DMIC MONO L ASRC", 1, RT5677_ASRC_2, 7, 0, NULL,
   2810		0),
   2811	SND_SOC_DAPM_SUPPLY_S("DMIC MONO R ASRC", 1, RT5677_ASRC_2, 6, 0, NULL,
   2812		0),
   2813	SND_SOC_DAPM_SUPPLY_S("ADC STO1 ASRC", 1, RT5677_ASRC_2, 5, 0, NULL, 0),
   2814	SND_SOC_DAPM_SUPPLY_S("ADC STO2 ASRC", 1, RT5677_ASRC_2, 4, 0, NULL, 0),
   2815	SND_SOC_DAPM_SUPPLY_S("ADC STO3 ASRC", 1, RT5677_ASRC_2, 3, 0, NULL, 0),
   2816	SND_SOC_DAPM_SUPPLY_S("ADC STO4 ASRC", 1, RT5677_ASRC_2, 2, 0, NULL, 0),
   2817	SND_SOC_DAPM_SUPPLY_S("ADC MONO L ASRC", 1, RT5677_ASRC_2, 1, 0, NULL,
   2818		0),
   2819	SND_SOC_DAPM_SUPPLY_S("ADC MONO R ASRC", 1, RT5677_ASRC_2, 0, 0, NULL,
   2820		0),
   2821
   2822	/* Input Side */
   2823	/* micbias */
   2824	SND_SOC_DAPM_SUPPLY("MICBIAS1", RT5677_PWR_ANLG2, RT5677_PWR_MB1_BIT,
   2825		0, rt5677_set_micbias1_event, SND_SOC_DAPM_PRE_PMD |
   2826		SND_SOC_DAPM_POST_PMU),
   2827
   2828	/* Input Lines */
   2829	SND_SOC_DAPM_INPUT("DMIC L1"),
   2830	SND_SOC_DAPM_INPUT("DMIC R1"),
   2831	SND_SOC_DAPM_INPUT("DMIC L2"),
   2832	SND_SOC_DAPM_INPUT("DMIC R2"),
   2833	SND_SOC_DAPM_INPUT("DMIC L3"),
   2834	SND_SOC_DAPM_INPUT("DMIC R3"),
   2835	SND_SOC_DAPM_INPUT("DMIC L4"),
   2836	SND_SOC_DAPM_INPUT("DMIC R4"),
   2837
   2838	SND_SOC_DAPM_INPUT("IN1P"),
   2839	SND_SOC_DAPM_INPUT("IN1N"),
   2840	SND_SOC_DAPM_INPUT("IN2P"),
   2841	SND_SOC_DAPM_INPUT("IN2N"),
   2842
   2843	SND_SOC_DAPM_INPUT("Haptic Generator"),
   2844
   2845	SND_SOC_DAPM_PGA("DMIC1", SND_SOC_NOPM, 0, 0, NULL, 0),
   2846	SND_SOC_DAPM_PGA("DMIC2", SND_SOC_NOPM, 0, 0, NULL, 0),
   2847	SND_SOC_DAPM_PGA("DMIC3", SND_SOC_NOPM, 0, 0, NULL, 0),
   2848	SND_SOC_DAPM_PGA("DMIC4", SND_SOC_NOPM, 0, 0, NULL, 0),
   2849
   2850	SND_SOC_DAPM_SUPPLY("DMIC1 power", RT5677_DMIC_CTRL1,
   2851		RT5677_DMIC_1_EN_SFT, 0, NULL, 0),
   2852	SND_SOC_DAPM_SUPPLY("DMIC2 power", RT5677_DMIC_CTRL1,
   2853		RT5677_DMIC_2_EN_SFT, 0, NULL, 0),
   2854	SND_SOC_DAPM_SUPPLY("DMIC3 power", RT5677_DMIC_CTRL1,
   2855		RT5677_DMIC_3_EN_SFT, 0, NULL, 0),
   2856	SND_SOC_DAPM_SUPPLY("DMIC4 power", RT5677_DMIC_CTRL2,
   2857		RT5677_DMIC_4_EN_SFT, 0, NULL, 0),
   2858
   2859	SND_SOC_DAPM_SUPPLY("DMIC CLK", SND_SOC_NOPM, 0, 0,
   2860		set_dmic_clk, SND_SOC_DAPM_PRE_PMU),
   2861
   2862	/* Boost */
   2863	SND_SOC_DAPM_PGA_E("BST1", RT5677_PWR_ANLG2,
   2864		RT5677_PWR_BST1_BIT, 0, NULL, 0, rt5677_bst1_event,
   2865		SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
   2866	SND_SOC_DAPM_PGA_E("BST2", RT5677_PWR_ANLG2,
   2867		RT5677_PWR_BST2_BIT, 0, NULL, 0, rt5677_bst2_event,
   2868		SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
   2869
   2870	/* ADCs */
   2871	SND_SOC_DAPM_ADC("ADC 1", NULL, SND_SOC_NOPM,
   2872		0, 0),
   2873	SND_SOC_DAPM_ADC("ADC 2", NULL, SND_SOC_NOPM,
   2874		0, 0),
   2875	SND_SOC_DAPM_PGA("ADC 1_2", SND_SOC_NOPM, 0, 0, NULL, 0),
   2876
   2877	SND_SOC_DAPM_SUPPLY("ADC 1 power", RT5677_PWR_DIG1,
   2878		RT5677_PWR_ADC_L_BIT, 0, NULL, 0),
   2879	SND_SOC_DAPM_SUPPLY("ADC 2 power", RT5677_PWR_DIG1,
   2880		RT5677_PWR_ADC_R_BIT, 0, NULL, 0),
   2881	SND_SOC_DAPM_SUPPLY("ADC1 clock", RT5677_PWR_DIG1,
   2882		RT5677_PWR_ADCFED1_BIT, 0, NULL, 0),
   2883	SND_SOC_DAPM_SUPPLY("ADC2 clock", RT5677_PWR_DIG1,
   2884		RT5677_PWR_ADCFED2_BIT, 0, NULL, 0),
   2885
   2886	/* ADC Mux */
   2887	SND_SOC_DAPM_MUX("Stereo1 DMIC Mux", SND_SOC_NOPM, 0, 0,
   2888				&rt5677_sto1_dmic_mux),
   2889	SND_SOC_DAPM_MUX("Stereo1 ADC1 Mux", SND_SOC_NOPM, 0, 0,
   2890				&rt5677_sto1_adc1_mux),
   2891	SND_SOC_DAPM_MUX("Stereo1 ADC2 Mux", SND_SOC_NOPM, 0, 0,
   2892				&rt5677_sto1_adc2_mux),
   2893	SND_SOC_DAPM_MUX("Stereo2 DMIC Mux", SND_SOC_NOPM, 0, 0,
   2894				&rt5677_sto2_dmic_mux),
   2895	SND_SOC_DAPM_MUX("Stereo2 ADC1 Mux", SND_SOC_NOPM, 0, 0,
   2896				&rt5677_sto2_adc1_mux),
   2897	SND_SOC_DAPM_MUX("Stereo2 ADC2 Mux", SND_SOC_NOPM, 0, 0,
   2898				&rt5677_sto2_adc2_mux),
   2899	SND_SOC_DAPM_MUX("Stereo2 ADC LR Mux", SND_SOC_NOPM, 0, 0,
   2900				&rt5677_sto2_adc_lr_mux),
   2901	SND_SOC_DAPM_MUX("Stereo3 DMIC Mux", SND_SOC_NOPM, 0, 0,
   2902				&rt5677_sto3_dmic_mux),
   2903	SND_SOC_DAPM_MUX("Stereo3 ADC1 Mux", SND_SOC_NOPM, 0, 0,
   2904				&rt5677_sto3_adc1_mux),
   2905	SND_SOC_DAPM_MUX("Stereo3 ADC2 Mux", SND_SOC_NOPM, 0, 0,
   2906				&rt5677_sto3_adc2_mux),
   2907	SND_SOC_DAPM_MUX("Stereo4 DMIC Mux", SND_SOC_NOPM, 0, 0,
   2908				&rt5677_sto4_dmic_mux),
   2909	SND_SOC_DAPM_MUX("Stereo4 ADC1 Mux", SND_SOC_NOPM, 0, 0,
   2910				&rt5677_sto4_adc1_mux),
   2911	SND_SOC_DAPM_MUX("Stereo4 ADC2 Mux", SND_SOC_NOPM, 0, 0,
   2912				&rt5677_sto4_adc2_mux),
   2913	SND_SOC_DAPM_MUX("Mono DMIC L Mux", SND_SOC_NOPM, 0, 0,
   2914				&rt5677_mono_dmic_l_mux),
   2915	SND_SOC_DAPM_MUX("Mono DMIC R Mux", SND_SOC_NOPM, 0, 0,
   2916				&rt5677_mono_dmic_r_mux),
   2917	SND_SOC_DAPM_MUX("Mono ADC2 L Mux", SND_SOC_NOPM, 0, 0,
   2918				&rt5677_mono_adc2_l_mux),
   2919	SND_SOC_DAPM_MUX("Mono ADC1 L Mux", SND_SOC_NOPM, 0, 0,
   2920				&rt5677_mono_adc1_l_mux),
   2921	SND_SOC_DAPM_MUX("Mono ADC1 R Mux", SND_SOC_NOPM, 0, 0,
   2922				&rt5677_mono_adc1_r_mux),
   2923	SND_SOC_DAPM_MUX("Mono ADC2 R Mux", SND_SOC_NOPM, 0, 0,
   2924				&rt5677_mono_adc2_r_mux),
   2925
   2926	/* ADC Mixer */
   2927	SND_SOC_DAPM_SUPPLY("adc stereo1 filter", RT5677_PWR_DIG2,
   2928		RT5677_PWR_ADC_S1F_BIT, 0, NULL, 0),
   2929	SND_SOC_DAPM_SUPPLY("adc stereo2 filter", RT5677_PWR_DIG2,
   2930		RT5677_PWR_ADC_S2F_BIT, 0, NULL, 0),
   2931	SND_SOC_DAPM_SUPPLY("adc stereo3 filter", RT5677_PWR_DIG2,
   2932		RT5677_PWR_ADC_S3F_BIT, 0, NULL, 0),
   2933	SND_SOC_DAPM_SUPPLY("adc stereo4 filter", RT5677_PWR_DIG2,
   2934		RT5677_PWR_ADC_S4F_BIT, 0, NULL, 0),
   2935	SND_SOC_DAPM_MIXER("Sto1 ADC MIXL", SND_SOC_NOPM, 0, 0,
   2936		rt5677_sto1_adc_l_mix, ARRAY_SIZE(rt5677_sto1_adc_l_mix)),
   2937	SND_SOC_DAPM_MIXER("Sto1 ADC MIXR", SND_SOC_NOPM, 0, 0,
   2938		rt5677_sto1_adc_r_mix, ARRAY_SIZE(rt5677_sto1_adc_r_mix)),
   2939	SND_SOC_DAPM_MIXER("Sto2 ADC MIXL", SND_SOC_NOPM, 0, 0,
   2940		rt5677_sto2_adc_l_mix, ARRAY_SIZE(rt5677_sto2_adc_l_mix)),
   2941	SND_SOC_DAPM_MIXER("Sto2 ADC MIXR", SND_SOC_NOPM, 0, 0,
   2942		rt5677_sto2_adc_r_mix, ARRAY_SIZE(rt5677_sto2_adc_r_mix)),
   2943	SND_SOC_DAPM_MIXER("Sto3 ADC MIXL", SND_SOC_NOPM, 0, 0,
   2944		rt5677_sto3_adc_l_mix, ARRAY_SIZE(rt5677_sto3_adc_l_mix)),
   2945	SND_SOC_DAPM_MIXER("Sto3 ADC MIXR", SND_SOC_NOPM, 0, 0,
   2946		rt5677_sto3_adc_r_mix, ARRAY_SIZE(rt5677_sto3_adc_r_mix)),
   2947	SND_SOC_DAPM_MIXER("Sto4 ADC MIXL", SND_SOC_NOPM, 0, 0,
   2948		rt5677_sto4_adc_l_mix, ARRAY_SIZE(rt5677_sto4_adc_l_mix)),
   2949	SND_SOC_DAPM_MIXER("Sto4 ADC MIXR", SND_SOC_NOPM, 0, 0,
   2950		rt5677_sto4_adc_r_mix, ARRAY_SIZE(rt5677_sto4_adc_r_mix)),
   2951	SND_SOC_DAPM_SUPPLY("adc mono left filter", RT5677_PWR_DIG2,
   2952		RT5677_PWR_ADC_MF_L_BIT, 0, NULL, 0),
   2953	SND_SOC_DAPM_MIXER("Mono ADC MIXL", SND_SOC_NOPM, 0, 0,
   2954		rt5677_mono_adc_l_mix, ARRAY_SIZE(rt5677_mono_adc_l_mix)),
   2955	SND_SOC_DAPM_SUPPLY("adc mono right filter", RT5677_PWR_DIG2,
   2956		RT5677_PWR_ADC_MF_R_BIT, 0, NULL, 0),
   2957	SND_SOC_DAPM_MIXER("Mono ADC MIXR", SND_SOC_NOPM, 0, 0,
   2958		rt5677_mono_adc_r_mix, ARRAY_SIZE(rt5677_mono_adc_r_mix)),
   2959
   2960	/* ADC PGA */
   2961	SND_SOC_DAPM_PGA("Stereo1 ADC MIXL", SND_SOC_NOPM, 0, 0, NULL, 0),
   2962	SND_SOC_DAPM_PGA("Stereo1 ADC MIXR", SND_SOC_NOPM, 0, 0, NULL, 0),
   2963	SND_SOC_DAPM_PGA("Stereo1 ADC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
   2964	SND_SOC_DAPM_PGA("Stereo2 ADC MIXL", SND_SOC_NOPM, 0, 0, NULL, 0),
   2965	SND_SOC_DAPM_PGA("Stereo2 ADC MIXR", SND_SOC_NOPM, 0, 0, NULL, 0),
   2966	SND_SOC_DAPM_PGA("Stereo2 ADC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
   2967	SND_SOC_DAPM_PGA("Stereo3 ADC MIXL", SND_SOC_NOPM, 0, 0, NULL, 0),
   2968	SND_SOC_DAPM_PGA("Stereo3 ADC MIXR", SND_SOC_NOPM, 0, 0, NULL, 0),
   2969	SND_SOC_DAPM_PGA("Stereo3 ADC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
   2970	SND_SOC_DAPM_PGA("Stereo4 ADC MIXL", SND_SOC_NOPM, 0, 0, NULL, 0),
   2971	SND_SOC_DAPM_PGA("Stereo4 ADC MIXR", SND_SOC_NOPM, 0, 0, NULL, 0),
   2972	SND_SOC_DAPM_PGA("Stereo4 ADC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
   2973	SND_SOC_DAPM_PGA("Sto2 ADC LR MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
   2974	SND_SOC_DAPM_PGA("Mono ADC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
   2975	SND_SOC_DAPM_PGA("IF1 ADC", SND_SOC_NOPM, 0, 0, NULL, 0),
   2976	SND_SOC_DAPM_PGA("IF2 ADC", SND_SOC_NOPM, 0, 0, NULL, 0),
   2977
   2978	/* DSP */
   2979	SND_SOC_DAPM_MUX("IB9 Mux", SND_SOC_NOPM, 0, 0,
   2980			&rt5677_ib9_src_mux),
   2981	SND_SOC_DAPM_MUX("IB8 Mux", SND_SOC_NOPM, 0, 0,
   2982			&rt5677_ib8_src_mux),
   2983	SND_SOC_DAPM_MUX("IB7 Mux", SND_SOC_NOPM, 0, 0,
   2984			&rt5677_ib7_src_mux),
   2985	SND_SOC_DAPM_MUX("IB6 Mux", SND_SOC_NOPM, 0, 0,
   2986			&rt5677_ib6_src_mux),
   2987	SND_SOC_DAPM_MUX("IB45 Mux", SND_SOC_NOPM, 0, 0,
   2988			&rt5677_ib45_src_mux),
   2989	SND_SOC_DAPM_MUX("IB23 Mux", SND_SOC_NOPM, 0, 0,
   2990			&rt5677_ib23_src_mux),
   2991	SND_SOC_DAPM_MUX("IB01 Mux", SND_SOC_NOPM, 0, 0,
   2992			&rt5677_ib01_src_mux),
   2993	SND_SOC_DAPM_MUX("IB45 Bypass Mux", SND_SOC_NOPM, 0, 0,
   2994			&rt5677_ib45_bypass_src_mux),
   2995	SND_SOC_DAPM_MUX("IB23 Bypass Mux", SND_SOC_NOPM, 0, 0,
   2996			&rt5677_ib23_bypass_src_mux),
   2997	SND_SOC_DAPM_MUX("IB01 Bypass Mux", SND_SOC_NOPM, 0, 0,
   2998			&rt5677_ib01_bypass_src_mux),
   2999	SND_SOC_DAPM_MUX("OB23 Bypass Mux", SND_SOC_NOPM, 0, 0,
   3000			&rt5677_ob23_bypass_src_mux),
   3001	SND_SOC_DAPM_MUX("OB01 Bypass Mux", SND_SOC_NOPM, 0, 0,
   3002			&rt5677_ob01_bypass_src_mux),
   3003
   3004	SND_SOC_DAPM_PGA("OB45", SND_SOC_NOPM, 0, 0, NULL, 0),
   3005	SND_SOC_DAPM_PGA("OB67", SND_SOC_NOPM, 0, 0, NULL, 0),
   3006
   3007	SND_SOC_DAPM_PGA("OutBound2", SND_SOC_NOPM, 0, 0, NULL, 0),
   3008	SND_SOC_DAPM_PGA("OutBound3", SND_SOC_NOPM, 0, 0, NULL, 0),
   3009	SND_SOC_DAPM_PGA("OutBound4", SND_SOC_NOPM, 0, 0, NULL, 0),
   3010	SND_SOC_DAPM_PGA("OutBound5", SND_SOC_NOPM, 0, 0, NULL, 0),
   3011	SND_SOC_DAPM_PGA("OutBound6", SND_SOC_NOPM, 0, 0, NULL, 0),
   3012	SND_SOC_DAPM_PGA("OutBound7", SND_SOC_NOPM, 0, 0, NULL, 0),
   3013
   3014	/* Digital Interface */
   3015	SND_SOC_DAPM_SUPPLY("I2S1", RT5677_PWR_DIG1,
   3016		RT5677_PWR_I2S1_BIT, 0, NULL, 0),
   3017	SND_SOC_DAPM_PGA("IF1 DAC0", SND_SOC_NOPM, 0, 0, NULL, 0),
   3018	SND_SOC_DAPM_PGA("IF1 DAC1", SND_SOC_NOPM, 0, 0, NULL, 0),
   3019	SND_SOC_DAPM_PGA("IF1 DAC2", SND_SOC_NOPM, 0, 0, NULL, 0),
   3020	SND_SOC_DAPM_PGA("IF1 DAC3", SND_SOC_NOPM, 0, 0, NULL, 0),
   3021	SND_SOC_DAPM_PGA("IF1 DAC4", SND_SOC_NOPM, 0, 0, NULL, 0),
   3022	SND_SOC_DAPM_PGA("IF1 DAC5", SND_SOC_NOPM, 0, 0, NULL, 0),
   3023	SND_SOC_DAPM_PGA("IF1 DAC6", SND_SOC_NOPM, 0, 0, NULL, 0),
   3024	SND_SOC_DAPM_PGA("IF1 DAC7", SND_SOC_NOPM, 0, 0, NULL, 0),
   3025	SND_SOC_DAPM_PGA("IF1 DAC01", SND_SOC_NOPM, 0, 0, NULL, 0),
   3026	SND_SOC_DAPM_PGA("IF1 DAC23", SND_SOC_NOPM, 0, 0, NULL, 0),
   3027	SND_SOC_DAPM_PGA("IF1 DAC45", SND_SOC_NOPM, 0, 0, NULL, 0),
   3028	SND_SOC_DAPM_PGA("IF1 DAC67", SND_SOC_NOPM, 0, 0, NULL, 0),
   3029	SND_SOC_DAPM_PGA("IF1 ADC1", SND_SOC_NOPM, 0, 0, NULL, 0),
   3030	SND_SOC_DAPM_PGA("IF1 ADC2", SND_SOC_NOPM, 0, 0, NULL, 0),
   3031	SND_SOC_DAPM_PGA("IF1 ADC3", SND_SOC_NOPM, 0, 0, NULL, 0),
   3032	SND_SOC_DAPM_PGA("IF1 ADC4", SND_SOC_NOPM, 0, 0, NULL, 0),
   3033
   3034	SND_SOC_DAPM_SUPPLY("I2S2", RT5677_PWR_DIG1,
   3035		RT5677_PWR_I2S2_BIT, 0, NULL, 0),
   3036	SND_SOC_DAPM_PGA("IF2 DAC0", SND_SOC_NOPM, 0, 0, NULL, 0),
   3037	SND_SOC_DAPM_PGA("IF2 DAC1", SND_SOC_NOPM, 0, 0, NULL, 0),
   3038	SND_SOC_DAPM_PGA("IF2 DAC2", SND_SOC_NOPM, 0, 0, NULL, 0),
   3039	SND_SOC_DAPM_PGA("IF2 DAC3", SND_SOC_NOPM, 0, 0, NULL, 0),
   3040	SND_SOC_DAPM_PGA("IF2 DAC4", SND_SOC_NOPM, 0, 0, NULL, 0),
   3041	SND_SOC_DAPM_PGA("IF2 DAC5", SND_SOC_NOPM, 0, 0, NULL, 0),
   3042	SND_SOC_DAPM_PGA("IF2 DAC6", SND_SOC_NOPM, 0, 0, NULL, 0),
   3043	SND_SOC_DAPM_PGA("IF2 DAC7", SND_SOC_NOPM, 0, 0, NULL, 0),
   3044	SND_SOC_DAPM_PGA("IF2 DAC01", SND_SOC_NOPM, 0, 0, NULL, 0),
   3045	SND_SOC_DAPM_PGA("IF2 DAC23", SND_SOC_NOPM, 0, 0, NULL, 0),
   3046	SND_SOC_DAPM_PGA("IF2 DAC45", SND_SOC_NOPM, 0, 0, NULL, 0),
   3047	SND_SOC_DAPM_PGA("IF2 DAC67", SND_SOC_NOPM, 0, 0, NULL, 0),
   3048	SND_SOC_DAPM_PGA("IF2 ADC1", SND_SOC_NOPM, 0, 0, NULL, 0),
   3049	SND_SOC_DAPM_PGA("IF2 ADC2", SND_SOC_NOPM, 0, 0, NULL, 0),
   3050	SND_SOC_DAPM_PGA("IF2 ADC3", SND_SOC_NOPM, 0, 0, NULL, 0),
   3051	SND_SOC_DAPM_PGA("IF2 ADC4", SND_SOC_NOPM, 0, 0, NULL, 0),
   3052
   3053	SND_SOC_DAPM_SUPPLY("I2S3", RT5677_PWR_DIG1,
   3054		RT5677_PWR_I2S3_BIT, 0, NULL, 0),
   3055	SND_SOC_DAPM_PGA("IF3 DAC", SND_SOC_NOPM, 0, 0, NULL, 0),
   3056	SND_SOC_DAPM_PGA("IF3 DAC L", SND_SOC_NOPM, 0, 0, NULL, 0),
   3057	SND_SOC_DAPM_PGA("IF3 DAC R", SND_SOC_NOPM, 0, 0, NULL, 0),
   3058	SND_SOC_DAPM_PGA("IF3 ADC", SND_SOC_NOPM, 0, 0, NULL, 0),
   3059	SND_SOC_DAPM_PGA("IF3 ADC L", SND_SOC_NOPM, 0, 0, NULL, 0),
   3060	SND_SOC_DAPM_PGA("IF3 ADC R", SND_SOC_NOPM, 0, 0, NULL, 0),
   3061
   3062	SND_SOC_DAPM_SUPPLY("I2S4", RT5677_PWR_DIG1,
   3063		RT5677_PWR_I2S4_BIT, 0, NULL, 0),
   3064	SND_SOC_DAPM_PGA("IF4 DAC", SND_SOC_NOPM, 0, 0, NULL, 0),
   3065	SND_SOC_DAPM_PGA("IF4 DAC L", SND_SOC_NOPM, 0, 0, NULL, 0),
   3066	SND_SOC_DAPM_PGA("IF4 DAC R", SND_SOC_NOPM, 0, 0, NULL, 0),
   3067	SND_SOC_DAPM_PGA("IF4 ADC", SND_SOC_NOPM, 0, 0, NULL, 0),
   3068	SND_SOC_DAPM_PGA("IF4 ADC L", SND_SOC_NOPM, 0, 0, NULL, 0),
   3069	SND_SOC_DAPM_PGA("IF4 ADC R", SND_SOC_NOPM, 0, 0, NULL, 0),
   3070
   3071	SND_SOC_DAPM_SUPPLY("SLB", RT5677_PWR_DIG1,
   3072		RT5677_PWR_SLB_BIT, 0, NULL, 0),
   3073	SND_SOC_DAPM_PGA("SLB DAC0", SND_SOC_NOPM, 0, 0, NULL, 0),
   3074	SND_SOC_DAPM_PGA("SLB DAC1", SND_SOC_NOPM, 0, 0, NULL, 0),
   3075	SND_SOC_DAPM_PGA("SLB DAC2", SND_SOC_NOPM, 0, 0, NULL, 0),
   3076	SND_SOC_DAPM_PGA("SLB DAC3", SND_SOC_NOPM, 0, 0, NULL, 0),
   3077	SND_SOC_DAPM_PGA("SLB DAC4", SND_SOC_NOPM, 0, 0, NULL, 0),
   3078	SND_SOC_DAPM_PGA("SLB DAC5", SND_SOC_NOPM, 0, 0, NULL, 0),
   3079	SND_SOC_DAPM_PGA("SLB DAC6", SND_SOC_NOPM, 0, 0, NULL, 0),
   3080	SND_SOC_DAPM_PGA("SLB DAC7", SND_SOC_NOPM, 0, 0, NULL, 0),
   3081	SND_SOC_DAPM_PGA("SLB DAC01", SND_SOC_NOPM, 0, 0, NULL, 0),
   3082	SND_SOC_DAPM_PGA("SLB DAC23", SND_SOC_NOPM, 0, 0, NULL, 0),
   3083	SND_SOC_DAPM_PGA("SLB DAC45", SND_SOC_NOPM, 0, 0, NULL, 0),
   3084	SND_SOC_DAPM_PGA("SLB DAC67", SND_SOC_NOPM, 0, 0, NULL, 0),
   3085	SND_SOC_DAPM_PGA("SLB ADC1", SND_SOC_NOPM, 0, 0, NULL, 0),
   3086	SND_SOC_DAPM_PGA("SLB ADC2", SND_SOC_NOPM, 0, 0, NULL, 0),
   3087	SND_SOC_DAPM_PGA("SLB ADC3", SND_SOC_NOPM, 0, 0, NULL, 0),
   3088	SND_SOC_DAPM_PGA("SLB ADC4", SND_SOC_NOPM, 0, 0, NULL, 0),
   3089
   3090	/* Digital Interface Select */
   3091	SND_SOC_DAPM_MUX("IF1 ADC1 Mux", SND_SOC_NOPM, 0, 0,
   3092			&rt5677_if1_adc1_mux),
   3093	SND_SOC_DAPM_MUX("IF1 ADC2 Mux", SND_SOC_NOPM, 0, 0,
   3094			&rt5677_if1_adc2_mux),
   3095	SND_SOC_DAPM_MUX("IF1 ADC3 Mux", SND_SOC_NOPM, 0, 0,
   3096			&rt5677_if1_adc3_mux),
   3097	SND_SOC_DAPM_MUX("IF1 ADC4 Mux", SND_SOC_NOPM, 0, 0,
   3098			&rt5677_if1_adc4_mux),
   3099	SND_SOC_DAPM_MUX("IF1 ADC1 Swap Mux", SND_SOC_NOPM, 0, 0,
   3100			&rt5677_if1_adc1_swap_mux),
   3101	SND_SOC_DAPM_MUX("IF1 ADC2 Swap Mux", SND_SOC_NOPM, 0, 0,
   3102			&rt5677_if1_adc2_swap_mux),
   3103	SND_SOC_DAPM_MUX("IF1 ADC3 Swap Mux", SND_SOC_NOPM, 0, 0,
   3104			&rt5677_if1_adc3_swap_mux),
   3105	SND_SOC_DAPM_MUX("IF1 ADC4 Swap Mux", SND_SOC_NOPM, 0, 0,
   3106			&rt5677_if1_adc4_swap_mux),
   3107	SND_SOC_DAPM_MUX_E("IF1 ADC TDM Swap Mux", SND_SOC_NOPM, 0, 0,
   3108			&rt5677_if1_adc_tdm_swap_mux, rt5677_if1_adc_tdm_event,
   3109			SND_SOC_DAPM_PRE_PMU),
   3110	SND_SOC_DAPM_MUX("IF2 ADC1 Mux", SND_SOC_NOPM, 0, 0,
   3111			&rt5677_if2_adc1_mux),
   3112	SND_SOC_DAPM_MUX("IF2 ADC2 Mux", SND_SOC_NOPM, 0, 0,
   3113			&rt5677_if2_adc2_mux),
   3114	SND_SOC_DAPM_MUX("IF2 ADC3 Mux", SND_SOC_NOPM, 0, 0,
   3115			&rt5677_if2_adc3_mux),
   3116	SND_SOC_DAPM_MUX("IF2 ADC4 Mux", SND_SOC_NOPM, 0, 0,
   3117			&rt5677_if2_adc4_mux),
   3118	SND_SOC_DAPM_MUX("IF2 ADC1 Swap Mux", SND_SOC_NOPM, 0, 0,
   3119			&rt5677_if2_adc1_swap_mux),
   3120	SND_SOC_DAPM_MUX("IF2 ADC2 Swap Mux", SND_SOC_NOPM, 0, 0,
   3121			&rt5677_if2_adc2_swap_mux),
   3122	SND_SOC_DAPM_MUX("IF2 ADC3 Swap Mux", SND_SOC_NOPM, 0, 0,
   3123			&rt5677_if2_adc3_swap_mux),
   3124	SND_SOC_DAPM_MUX("IF2 ADC4 Swap Mux", SND_SOC_NOPM, 0, 0,
   3125			&rt5677_if2_adc4_swap_mux),
   3126	SND_SOC_DAPM_MUX_E("IF2 ADC TDM Swap Mux", SND_SOC_NOPM, 0, 0,
   3127			&rt5677_if2_adc_tdm_swap_mux, rt5677_if2_adc_tdm_event,
   3128			SND_SOC_DAPM_PRE_PMU),
   3129	SND_SOC_DAPM_MUX("IF3 ADC Mux", SND_SOC_NOPM, 0, 0,
   3130			&rt5677_if3_adc_mux),
   3131	SND_SOC_DAPM_MUX("IF4 ADC Mux", SND_SOC_NOPM, 0, 0,
   3132			&rt5677_if4_adc_mux),
   3133	SND_SOC_DAPM_MUX("SLB ADC1 Mux", SND_SOC_NOPM, 0, 0,
   3134			&rt5677_slb_adc1_mux),
   3135	SND_SOC_DAPM_MUX("SLB ADC2 Mux", SND_SOC_NOPM, 0, 0,
   3136			&rt5677_slb_adc2_mux),
   3137	SND_SOC_DAPM_MUX("SLB ADC3 Mux", SND_SOC_NOPM, 0, 0,
   3138			&rt5677_slb_adc3_mux),
   3139	SND_SOC_DAPM_MUX("SLB ADC4 Mux", SND_SOC_NOPM, 0, 0,
   3140			&rt5677_slb_adc4_mux),
   3141
   3142	SND_SOC_DAPM_MUX("IF1 DAC0 Mux", SND_SOC_NOPM, 0, 0,
   3143			&rt5677_if1_dac0_tdm_sel_mux),
   3144	SND_SOC_DAPM_MUX("IF1 DAC1 Mux", SND_SOC_NOPM, 0, 0,
   3145			&rt5677_if1_dac1_tdm_sel_mux),
   3146	SND_SOC_DAPM_MUX("IF1 DAC2 Mux", SND_SOC_NOPM, 0, 0,
   3147			&rt5677_if1_dac2_tdm_sel_mux),
   3148	SND_SOC_DAPM_MUX("IF1 DAC3 Mux", SND_SOC_NOPM, 0, 0,
   3149			&rt5677_if1_dac3_tdm_sel_mux),
   3150	SND_SOC_DAPM_MUX("IF1 DAC4 Mux", SND_SOC_NOPM, 0, 0,
   3151			&rt5677_if1_dac4_tdm_sel_mux),
   3152	SND_SOC_DAPM_MUX("IF1 DAC5 Mux", SND_SOC_NOPM, 0, 0,
   3153			&rt5677_if1_dac5_tdm_sel_mux),
   3154	SND_SOC_DAPM_MUX("IF1 DAC6 Mux", SND_SOC_NOPM, 0, 0,
   3155			&rt5677_if1_dac6_tdm_sel_mux),
   3156	SND_SOC_DAPM_MUX("IF1 DAC7 Mux", SND_SOC_NOPM, 0, 0,
   3157			&rt5677_if1_dac7_tdm_sel_mux),
   3158
   3159	SND_SOC_DAPM_MUX("IF2 DAC0 Mux", SND_SOC_NOPM, 0, 0,
   3160			&rt5677_if2_dac0_tdm_sel_mux),
   3161	SND_SOC_DAPM_MUX("IF2 DAC1 Mux", SND_SOC_NOPM, 0, 0,
   3162			&rt5677_if2_dac1_tdm_sel_mux),
   3163	SND_SOC_DAPM_MUX("IF2 DAC2 Mux", SND_SOC_NOPM, 0, 0,
   3164			&rt5677_if2_dac2_tdm_sel_mux),
   3165	SND_SOC_DAPM_MUX("IF2 DAC3 Mux", SND_SOC_NOPM, 0, 0,
   3166			&rt5677_if2_dac3_tdm_sel_mux),
   3167	SND_SOC_DAPM_MUX("IF2 DAC4 Mux", SND_SOC_NOPM, 0, 0,
   3168			&rt5677_if2_dac4_tdm_sel_mux),
   3169	SND_SOC_DAPM_MUX("IF2 DAC5 Mux", SND_SOC_NOPM, 0, 0,
   3170			&rt5677_if2_dac5_tdm_sel_mux),
   3171	SND_SOC_DAPM_MUX("IF2 DAC6 Mux", SND_SOC_NOPM, 0, 0,
   3172			&rt5677_if2_dac6_tdm_sel_mux),
   3173	SND_SOC_DAPM_MUX("IF2 DAC7 Mux", SND_SOC_NOPM, 0, 0,
   3174			&rt5677_if2_dac7_tdm_sel_mux),
   3175
   3176	/* Audio Interface */
   3177	SND_SOC_DAPM_AIF_IN("AIF1RX", "AIF1 Playback", 0, SND_SOC_NOPM, 0, 0),
   3178	SND_SOC_DAPM_AIF_OUT("AIF1TX", "AIF1 Capture", 0, SND_SOC_NOPM, 0, 0),
   3179	SND_SOC_DAPM_AIF_IN("AIF2RX", "AIF2 Playback", 0, SND_SOC_NOPM, 0, 0),
   3180	SND_SOC_DAPM_AIF_OUT("AIF2TX", "AIF2 Capture", 0, SND_SOC_NOPM, 0, 0),
   3181	SND_SOC_DAPM_AIF_IN("AIF3RX", "AIF3 Playback", 0, SND_SOC_NOPM, 0, 0),
   3182	SND_SOC_DAPM_AIF_OUT("AIF3TX", "AIF3 Capture", 0, SND_SOC_NOPM, 0, 0),
   3183	SND_SOC_DAPM_AIF_IN("AIF4RX", "AIF4 Playback", 0, SND_SOC_NOPM, 0, 0),
   3184	SND_SOC_DAPM_AIF_OUT("AIF4TX", "AIF4 Capture", 0, SND_SOC_NOPM, 0, 0),
   3185	SND_SOC_DAPM_AIF_IN("SLBRX", "SLIMBus Playback", 0, SND_SOC_NOPM, 0, 0),
   3186	SND_SOC_DAPM_AIF_OUT("SLBTX", "SLIMBus Capture", 0, SND_SOC_NOPM, 0, 0),
   3187	SND_SOC_DAPM_AIF_OUT("DSPTX", "DSP Buffer", 0, SND_SOC_NOPM, 0, 0),
   3188
   3189	/* Sidetone Mux */
   3190	SND_SOC_DAPM_MUX("Sidetone Mux", SND_SOC_NOPM, 0, 0,
   3191			&rt5677_sidetone_mux),
   3192	SND_SOC_DAPM_SUPPLY("Sidetone Power", RT5677_SIDETONE_CTRL,
   3193		RT5677_ST_EN_SFT, 0, NULL, 0),
   3194
   3195	/* VAD Mux*/
   3196	SND_SOC_DAPM_MUX("VAD ADC Mux", SND_SOC_NOPM, 0, 0,
   3197			&rt5677_vad_src_mux),
   3198
   3199	/* Tensilica DSP */
   3200	SND_SOC_DAPM_PGA("Tensilica DSP", SND_SOC_NOPM, 0, 0, NULL, 0),
   3201	SND_SOC_DAPM_MIXER("OB01 MIX", SND_SOC_NOPM, 0, 0,
   3202		rt5677_ob_01_mix, ARRAY_SIZE(rt5677_ob_01_mix)),
   3203	SND_SOC_DAPM_MIXER("OB23 MIX", SND_SOC_NOPM, 0, 0,
   3204		rt5677_ob_23_mix, ARRAY_SIZE(rt5677_ob_23_mix)),
   3205	SND_SOC_DAPM_MIXER("OB4 MIX", SND_SOC_NOPM, 0, 0,
   3206		rt5677_ob_4_mix, ARRAY_SIZE(rt5677_ob_4_mix)),
   3207	SND_SOC_DAPM_MIXER("OB5 MIX", SND_SOC_NOPM, 0, 0,
   3208		rt5677_ob_5_mix, ARRAY_SIZE(rt5677_ob_5_mix)),
   3209	SND_SOC_DAPM_MIXER("OB6 MIX", SND_SOC_NOPM, 0, 0,
   3210		rt5677_ob_6_mix, ARRAY_SIZE(rt5677_ob_6_mix)),
   3211	SND_SOC_DAPM_MIXER("OB7 MIX", SND_SOC_NOPM, 0, 0,
   3212		rt5677_ob_7_mix, ARRAY_SIZE(rt5677_ob_7_mix)),
   3213
   3214	/* Output Side */
   3215	/* DAC mixer before sound effect */
   3216	SND_SOC_DAPM_MIXER("DAC1 MIXL", SND_SOC_NOPM, 0, 0,
   3217		rt5677_dac_l_mix, ARRAY_SIZE(rt5677_dac_l_mix)),
   3218	SND_SOC_DAPM_MIXER("DAC1 MIXR", SND_SOC_NOPM, 0, 0,
   3219		rt5677_dac_r_mix, ARRAY_SIZE(rt5677_dac_r_mix)),
   3220	SND_SOC_DAPM_PGA("DAC1 FS", SND_SOC_NOPM, 0, 0, NULL, 0),
   3221
   3222	/* DAC Mux */
   3223	SND_SOC_DAPM_MUX("DAC1 Mux", SND_SOC_NOPM, 0, 0,
   3224				&rt5677_dac1_mux),
   3225	SND_SOC_DAPM_MUX("ADDA1 Mux", SND_SOC_NOPM, 0, 0,
   3226				&rt5677_adda1_mux),
   3227	SND_SOC_DAPM_MUX("DAC12 SRC Mux", SND_SOC_NOPM, 0, 0,
   3228				&rt5677_dac12_mux),
   3229	SND_SOC_DAPM_MUX("DAC3 SRC Mux", SND_SOC_NOPM, 0, 0,
   3230				&rt5677_dac3_mux),
   3231
   3232	/* DAC2 channel Mux */
   3233	SND_SOC_DAPM_MUX("DAC2 L Mux", SND_SOC_NOPM, 0, 0,
   3234				&rt5677_dac2_l_mux),
   3235	SND_SOC_DAPM_MUX("DAC2 R Mux", SND_SOC_NOPM, 0, 0,
   3236				&rt5677_dac2_r_mux),
   3237
   3238	/* DAC3 channel Mux */
   3239	SND_SOC_DAPM_MUX("DAC3 L Mux", SND_SOC_NOPM, 0, 0,
   3240			&rt5677_dac3_l_mux),
   3241	SND_SOC_DAPM_MUX("DAC3 R Mux", SND_SOC_NOPM, 0, 0,
   3242			&rt5677_dac3_r_mux),
   3243
   3244	/* DAC4 channel Mux */
   3245	SND_SOC_DAPM_MUX("DAC4 L Mux", SND_SOC_NOPM, 0, 0,
   3246			&rt5677_dac4_l_mux),
   3247	SND_SOC_DAPM_MUX("DAC4 R Mux", SND_SOC_NOPM, 0, 0,
   3248			&rt5677_dac4_r_mux),
   3249
   3250	/* DAC Mixer */
   3251	SND_SOC_DAPM_SUPPLY("dac stereo1 filter", RT5677_PWR_DIG2,
   3252		RT5677_PWR_DAC_S1F_BIT, 0, rt5677_filter_power_event,
   3253		SND_SOC_DAPM_POST_PMU),
   3254	SND_SOC_DAPM_SUPPLY("dac mono2 left filter", RT5677_PWR_DIG2,
   3255		RT5677_PWR_DAC_M2F_L_BIT, 0, rt5677_filter_power_event,
   3256		SND_SOC_DAPM_POST_PMU),
   3257	SND_SOC_DAPM_SUPPLY("dac mono2 right filter", RT5677_PWR_DIG2,
   3258		RT5677_PWR_DAC_M2F_R_BIT, 0, rt5677_filter_power_event,
   3259		SND_SOC_DAPM_POST_PMU),
   3260	SND_SOC_DAPM_SUPPLY("dac mono3 left filter", RT5677_PWR_DIG2,
   3261		RT5677_PWR_DAC_M3F_L_BIT, 0, rt5677_filter_power_event,
   3262		SND_SOC_DAPM_POST_PMU),
   3263	SND_SOC_DAPM_SUPPLY("dac mono3 right filter", RT5677_PWR_DIG2,
   3264		RT5677_PWR_DAC_M3F_R_BIT, 0, rt5677_filter_power_event,
   3265		SND_SOC_DAPM_POST_PMU),
   3266	SND_SOC_DAPM_SUPPLY("dac mono4 left filter", RT5677_PWR_DIG2,
   3267		RT5677_PWR_DAC_M4F_L_BIT, 0, rt5677_filter_power_event,
   3268		SND_SOC_DAPM_POST_PMU),
   3269	SND_SOC_DAPM_SUPPLY("dac mono4 right filter", RT5677_PWR_DIG2,
   3270		RT5677_PWR_DAC_M4F_R_BIT, 0, rt5677_filter_power_event,
   3271		SND_SOC_DAPM_POST_PMU),
   3272
   3273	SND_SOC_DAPM_MIXER("Stereo DAC MIXL", SND_SOC_NOPM, 0, 0,
   3274		rt5677_sto1_dac_l_mix, ARRAY_SIZE(rt5677_sto1_dac_l_mix)),
   3275	SND_SOC_DAPM_MIXER("Stereo DAC MIXR", SND_SOC_NOPM, 0, 0,
   3276		rt5677_sto1_dac_r_mix, ARRAY_SIZE(rt5677_sto1_dac_r_mix)),
   3277	SND_SOC_DAPM_MIXER("Mono DAC MIXL", SND_SOC_NOPM, 0, 0,
   3278		rt5677_mono_dac_l_mix, ARRAY_SIZE(rt5677_mono_dac_l_mix)),
   3279	SND_SOC_DAPM_MIXER("Mono DAC MIXR", SND_SOC_NOPM, 0, 0,
   3280		rt5677_mono_dac_r_mix, ARRAY_SIZE(rt5677_mono_dac_r_mix)),
   3281	SND_SOC_DAPM_MIXER("DD1 MIXL", SND_SOC_NOPM, 0, 0,
   3282		rt5677_dd1_l_mix, ARRAY_SIZE(rt5677_dd1_l_mix)),
   3283	SND_SOC_DAPM_MIXER("DD1 MIXR", SND_SOC_NOPM, 0, 0,
   3284		rt5677_dd1_r_mix, ARRAY_SIZE(rt5677_dd1_r_mix)),
   3285	SND_SOC_DAPM_MIXER("DD2 MIXL", SND_SOC_NOPM, 0, 0,
   3286		rt5677_dd2_l_mix, ARRAY_SIZE(rt5677_dd2_l_mix)),
   3287	SND_SOC_DAPM_MIXER("DD2 MIXR", SND_SOC_NOPM, 0, 0,
   3288		rt5677_dd2_r_mix, ARRAY_SIZE(rt5677_dd2_r_mix)),
   3289	SND_SOC_DAPM_PGA("Stereo DAC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
   3290	SND_SOC_DAPM_PGA("Mono DAC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
   3291	SND_SOC_DAPM_PGA("DD1 MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
   3292	SND_SOC_DAPM_PGA("DD2 MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
   3293
   3294	/* DACs */
   3295	SND_SOC_DAPM_DAC("DAC 1", NULL, RT5677_PWR_DIG1,
   3296		RT5677_PWR_DAC1_BIT, 0),
   3297	SND_SOC_DAPM_DAC("DAC 2", NULL, RT5677_PWR_DIG1,
   3298		RT5677_PWR_DAC2_BIT, 0),
   3299	SND_SOC_DAPM_DAC("DAC 3", NULL, RT5677_PWR_DIG1,
   3300		RT5677_PWR_DAC3_BIT, 0),
   3301
   3302	/* PDM */
   3303	SND_SOC_DAPM_SUPPLY("PDM1 Power", RT5677_PWR_DIG2,
   3304		RT5677_PWR_PDM1_BIT, 0, NULL, 0),
   3305	SND_SOC_DAPM_SUPPLY("PDM2 Power", RT5677_PWR_DIG2,
   3306		RT5677_PWR_PDM2_BIT, 0, NULL, 0),
   3307
   3308	SND_SOC_DAPM_MUX("PDM1 L Mux", RT5677_PDM_OUT_CTRL, RT5677_M_PDM1_L_SFT,
   3309		1, &rt5677_pdm1_l_mux),
   3310	SND_SOC_DAPM_MUX("PDM1 R Mux", RT5677_PDM_OUT_CTRL, RT5677_M_PDM1_R_SFT,
   3311		1, &rt5677_pdm1_r_mux),
   3312	SND_SOC_DAPM_MUX("PDM2 L Mux", RT5677_PDM_OUT_CTRL, RT5677_M_PDM2_L_SFT,
   3313		1, &rt5677_pdm2_l_mux),
   3314	SND_SOC_DAPM_MUX("PDM2 R Mux", RT5677_PDM_OUT_CTRL, RT5677_M_PDM2_R_SFT,
   3315		1, &rt5677_pdm2_r_mux),
   3316
   3317	SND_SOC_DAPM_PGA_S("LOUT1 amp", 0, RT5677_PWR_ANLG1, RT5677_PWR_LO1_BIT,
   3318		0, NULL, 0),
   3319	SND_SOC_DAPM_PGA_S("LOUT2 amp", 0, RT5677_PWR_ANLG1, RT5677_PWR_LO2_BIT,
   3320		0, NULL, 0),
   3321	SND_SOC_DAPM_PGA_S("LOUT3 amp", 0, RT5677_PWR_ANLG1, RT5677_PWR_LO3_BIT,
   3322		0, NULL, 0),
   3323
   3324	SND_SOC_DAPM_PGA_S("LOUT1 vref", 1, SND_SOC_NOPM, 0, 0,
   3325		rt5677_vref_event, SND_SOC_DAPM_POST_PMU),
   3326	SND_SOC_DAPM_PGA_S("LOUT2 vref", 1, SND_SOC_NOPM, 0, 0,
   3327		rt5677_vref_event, SND_SOC_DAPM_POST_PMU),
   3328	SND_SOC_DAPM_PGA_S("LOUT3 vref", 1, SND_SOC_NOPM, 0, 0,
   3329		rt5677_vref_event, SND_SOC_DAPM_POST_PMU),
   3330
   3331	/* Output Lines */
   3332	SND_SOC_DAPM_OUTPUT("LOUT1"),
   3333	SND_SOC_DAPM_OUTPUT("LOUT2"),
   3334	SND_SOC_DAPM_OUTPUT("LOUT3"),
   3335	SND_SOC_DAPM_OUTPUT("PDM1L"),
   3336	SND_SOC_DAPM_OUTPUT("PDM1R"),
   3337	SND_SOC_DAPM_OUTPUT("PDM2L"),
   3338	SND_SOC_DAPM_OUTPUT("PDM2R"),
   3339
   3340	SND_SOC_DAPM_POST("vref", rt5677_vref_event),
   3341};
   3342
   3343static const struct snd_soc_dapm_route rt5677_dapm_routes[] = {
   3344	{ "Stereo1 DMIC Mux", NULL, "DMIC STO1 ASRC", rt5677_dmic_use_asrc },
   3345	{ "Stereo2 DMIC Mux", NULL, "DMIC STO2 ASRC", rt5677_dmic_use_asrc },
   3346	{ "Stereo3 DMIC Mux", NULL, "DMIC STO3 ASRC", rt5677_dmic_use_asrc },
   3347	{ "Stereo4 DMIC Mux", NULL, "DMIC STO4 ASRC", rt5677_dmic_use_asrc },
   3348	{ "Mono DMIC L Mux", NULL, "DMIC MONO L ASRC", rt5677_dmic_use_asrc },
   3349	{ "Mono DMIC R Mux", NULL, "DMIC MONO R ASRC", rt5677_dmic_use_asrc },
   3350	{ "I2S1", NULL, "I2S1 ASRC", can_use_asrc},
   3351	{ "I2S2", NULL, "I2S2 ASRC", can_use_asrc},
   3352	{ "I2S3", NULL, "I2S3 ASRC", can_use_asrc},
   3353	{ "I2S4", NULL, "I2S4 ASRC", can_use_asrc},
   3354
   3355	{ "dac stereo1 filter", NULL, "DAC STO ASRC", is_using_asrc },
   3356	{ "dac mono2 left filter", NULL, "DAC MONO2 L ASRC", is_using_asrc },
   3357	{ "dac mono2 right filter", NULL, "DAC MONO2 R ASRC", is_using_asrc },
   3358	{ "dac mono3 left filter", NULL, "DAC MONO3 L ASRC", is_using_asrc },
   3359	{ "dac mono3 right filter", NULL, "DAC MONO3 R ASRC", is_using_asrc },
   3360	{ "dac mono4 left filter", NULL, "DAC MONO4 L ASRC", is_using_asrc },
   3361	{ "dac mono4 right filter", NULL, "DAC MONO4 R ASRC", is_using_asrc },
   3362	{ "adc stereo1 filter", NULL, "ADC STO1 ASRC", is_using_asrc },
   3363	{ "adc stereo2 filter", NULL, "ADC STO2 ASRC", is_using_asrc },
   3364	{ "adc stereo3 filter", NULL, "ADC STO3 ASRC", is_using_asrc },
   3365	{ "adc stereo4 filter", NULL, "ADC STO4 ASRC", is_using_asrc },
   3366	{ "adc mono left filter", NULL, "ADC MONO L ASRC", is_using_asrc },
   3367	{ "adc mono right filter", NULL, "ADC MONO R ASRC", is_using_asrc },
   3368
   3369	{ "DMIC1", NULL, "DMIC L1" },
   3370	{ "DMIC1", NULL, "DMIC R1" },
   3371	{ "DMIC2", NULL, "DMIC L2" },
   3372	{ "DMIC2", NULL, "DMIC R2" },
   3373	{ "DMIC3", NULL, "DMIC L3" },
   3374	{ "DMIC3", NULL, "DMIC R3" },
   3375	{ "DMIC4", NULL, "DMIC L4" },
   3376	{ "DMIC4", NULL, "DMIC R4" },
   3377
   3378	{ "DMIC L1", NULL, "DMIC CLK" },
   3379	{ "DMIC R1", NULL, "DMIC CLK" },
   3380	{ "DMIC L2", NULL, "DMIC CLK" },
   3381	{ "DMIC R2", NULL, "DMIC CLK" },
   3382	{ "DMIC L3", NULL, "DMIC CLK" },
   3383	{ "DMIC R3", NULL, "DMIC CLK" },
   3384	{ "DMIC L4", NULL, "DMIC CLK" },
   3385	{ "DMIC R4", NULL, "DMIC CLK" },
   3386
   3387	{ "DMIC L1", NULL, "DMIC1 power" },
   3388	{ "DMIC R1", NULL, "DMIC1 power" },
   3389	{ "DMIC L3", NULL, "DMIC3 power" },
   3390	{ "DMIC R3", NULL, "DMIC3 power" },
   3391	{ "DMIC L4", NULL, "DMIC4 power" },
   3392	{ "DMIC R4", NULL, "DMIC4 power" },
   3393
   3394	{ "BST1", NULL, "IN1P" },
   3395	{ "BST1", NULL, "IN1N" },
   3396	{ "BST2", NULL, "IN2P" },
   3397	{ "BST2", NULL, "IN2N" },
   3398
   3399	{ "IN1P", NULL, "MICBIAS1" },
   3400	{ "IN1N", NULL, "MICBIAS1" },
   3401	{ "IN2P", NULL, "MICBIAS1" },
   3402	{ "IN2N", NULL, "MICBIAS1" },
   3403
   3404	{ "ADC 1", NULL, "BST1" },
   3405	{ "ADC 1", NULL, "ADC 1 power" },
   3406	{ "ADC 1", NULL, "ADC1 clock" },
   3407	{ "ADC 2", NULL, "BST2" },
   3408	{ "ADC 2", NULL, "ADC 2 power" },
   3409	{ "ADC 2", NULL, "ADC2 clock" },
   3410
   3411	{ "Stereo1 DMIC Mux", "DMIC1", "DMIC1" },
   3412	{ "Stereo1 DMIC Mux", "DMIC2", "DMIC2" },
   3413	{ "Stereo1 DMIC Mux", "DMIC3", "DMIC3" },
   3414	{ "Stereo1 DMIC Mux", "DMIC4", "DMIC4" },
   3415
   3416	{ "Stereo2 DMIC Mux", "DMIC1", "DMIC1" },
   3417	{ "Stereo2 DMIC Mux", "DMIC2", "DMIC2" },
   3418	{ "Stereo2 DMIC Mux", "DMIC3", "DMIC3" },
   3419	{ "Stereo2 DMIC Mux", "DMIC4", "DMIC4" },
   3420
   3421	{ "Stereo3 DMIC Mux", "DMIC1", "DMIC1" },
   3422	{ "Stereo3 DMIC Mux", "DMIC2", "DMIC2" },
   3423	{ "Stereo3 DMIC Mux", "DMIC3", "DMIC3" },
   3424	{ "Stereo3 DMIC Mux", "DMIC4", "DMIC4" },
   3425
   3426	{ "Stereo4 DMIC Mux", "DMIC1", "DMIC1" },
   3427	{ "Stereo4 DMIC Mux", "DMIC2", "DMIC2" },
   3428	{ "Stereo4 DMIC Mux", "DMIC3", "DMIC3" },
   3429	{ "Stereo4 DMIC Mux", "DMIC4", "DMIC4" },
   3430
   3431	{ "Mono DMIC L Mux", "DMIC1", "DMIC1" },
   3432	{ "Mono DMIC L Mux", "DMIC2", "DMIC2" },
   3433	{ "Mono DMIC L Mux", "DMIC3", "DMIC3" },
   3434	{ "Mono DMIC L Mux", "DMIC4", "DMIC4" },
   3435
   3436	{ "Mono DMIC R Mux", "DMIC1", "DMIC1" },
   3437	{ "Mono DMIC R Mux", "DMIC2", "DMIC2" },
   3438	{ "Mono DMIC R Mux", "DMIC3", "DMIC3" },
   3439	{ "Mono DMIC R Mux", "DMIC4", "DMIC4" },
   3440
   3441	{ "ADC 1_2", NULL, "ADC 1" },
   3442	{ "ADC 1_2", NULL, "ADC 2" },
   3443
   3444	{ "Stereo1 ADC1 Mux", "DD MIX1", "DD1 MIX" },
   3445	{ "Stereo1 ADC1 Mux", "ADC1/2", "ADC 1_2" },
   3446	{ "Stereo1 ADC1 Mux", "Stereo DAC MIX", "Stereo DAC MIX" },
   3447
   3448	{ "Stereo1 ADC2 Mux", "DD MIX1", "DD1 MIX" },
   3449	{ "Stereo1 ADC2 Mux", "DMIC", "Stereo1 DMIC Mux" },
   3450	{ "Stereo1 ADC2 Mux", "Stereo DAC MIX", "Stereo DAC MIX" },
   3451
   3452	{ "Stereo2 ADC1 Mux", "DD MIX1", "DD1 MIX" },
   3453	{ "Stereo2 ADC1 Mux", "ADC1/2", "ADC 1_2" },
   3454	{ "Stereo2 ADC1 Mux", "Stereo DAC MIX", "Stereo DAC MIX" },
   3455
   3456	{ "Stereo2 ADC2 Mux", "DD MIX1", "DD1 MIX" },
   3457	{ "Stereo2 ADC2 Mux", "DMIC", "Stereo2 DMIC Mux" },
   3458	{ "Stereo2 ADC2 Mux", "Stereo DAC MIX", "Stereo DAC MIX" },
   3459
   3460	{ "Stereo3 ADC1 Mux", "DD MIX1", "DD1 MIX" },
   3461	{ "Stereo3 ADC1 Mux", "ADC1/2", "ADC 1_2" },
   3462	{ "Stereo3 ADC1 Mux", "Stereo DAC MIX", "Stereo DAC MIX" },
   3463
   3464	{ "Stereo3 ADC2 Mux", "DD MIX1", "DD1 MIX" },
   3465	{ "Stereo3 ADC2 Mux", "DMIC", "Stereo3 DMIC Mux" },
   3466	{ "Stereo3 ADC2 Mux", "Stereo DAC MIX", "Stereo DAC MIX" },
   3467
   3468	{ "Stereo4 ADC1 Mux", "DD MIX1", "DD1 MIX" },
   3469	{ "Stereo4 ADC1 Mux", "ADC1/2", "ADC 1_2" },
   3470	{ "Stereo4 ADC1 Mux", "DD MIX2", "DD2 MIX" },
   3471
   3472	{ "Stereo4 ADC2 Mux", "DD MIX1", "DD1 MIX" },
   3473	{ "Stereo4 ADC2 Mux", "DMIC", "Stereo3 DMIC Mux" },
   3474	{ "Stereo4 ADC2 Mux", "DD MIX2", "DD2 MIX" },
   3475
   3476	{ "Mono ADC2 L Mux", "DD MIX1L", "DD1 MIXL" },
   3477	{ "Mono ADC2 L Mux", "DMIC", "Mono DMIC L Mux" },
   3478	{ "Mono ADC2 L Mux", "MONO DAC MIXL", "Mono DAC MIXL" },
   3479
   3480	{ "Mono ADC1 L Mux", "DD MIX1L", "DD1 MIXL" },
   3481	{ "Mono ADC1 L Mux", "ADC1", "ADC 1" },
   3482	{ "Mono ADC1 L Mux", "MONO DAC MIXL", "Mono DAC MIXL" },
   3483
   3484	{ "Mono ADC1 R Mux", "DD MIX1R", "DD1 MIXR" },
   3485	{ "Mono ADC1 R Mux", "ADC2", "ADC 2" },
   3486	{ "Mono ADC1 R Mux", "MONO DAC MIXR", "Mono DAC MIXR" },
   3487
   3488	{ "Mono ADC2 R Mux", "DD MIX1R", "DD1 MIXR" },
   3489	{ "Mono ADC2 R Mux", "DMIC", "Mono DMIC R Mux" },
   3490	{ "Mono ADC2 R Mux", "MONO DAC MIXR", "Mono DAC MIXR" },
   3491
   3492	{ "Sto1 ADC MIXL", "ADC1 Switch", "Stereo1 ADC1 Mux" },
   3493	{ "Sto1 ADC MIXL", "ADC2 Switch", "Stereo1 ADC2 Mux" },
   3494	{ "Sto1 ADC MIXR", "ADC1 Switch", "Stereo1 ADC1 Mux" },
   3495	{ "Sto1 ADC MIXR", "ADC2 Switch", "Stereo1 ADC2 Mux" },
   3496
   3497	{ "Stereo1 ADC MIXL", NULL, "Sto1 ADC MIXL" },
   3498	{ "Stereo1 ADC MIXL", NULL, "adc stereo1 filter" },
   3499	{ "Stereo1 ADC MIXR", NULL, "Sto1 ADC MIXR" },
   3500	{ "Stereo1 ADC MIXR", NULL, "adc stereo1 filter" },
   3501	{ "adc stereo1 filter", NULL, "PLL1", is_sys_clk_from_pll },
   3502
   3503	{ "Stereo1 ADC MIX", NULL, "Stereo1 ADC MIXL" },
   3504	{ "Stereo1 ADC MIX", NULL, "Stereo1 ADC MIXR" },
   3505
   3506	{ "Sto2 ADC MIXL", "ADC1 Switch", "Stereo2 ADC1 Mux" },
   3507	{ "Sto2 ADC MIXL", "ADC2 Switch", "Stereo2 ADC2 Mux" },
   3508	{ "Sto2 ADC MIXR", "ADC1 Switch", "Stereo2 ADC1 Mux" },
   3509	{ "Sto2 ADC MIXR", "ADC2 Switch", "Stereo2 ADC2 Mux" },
   3510
   3511	{ "Sto2 ADC LR MIX", NULL, "Sto2 ADC MIXL" },
   3512	{ "Sto2 ADC LR MIX", NULL, "Sto2 ADC MIXR" },
   3513
   3514	{ "Stereo2 ADC LR Mux", "L", "Sto2 ADC MIXL" },
   3515	{ "Stereo2 ADC LR Mux", "LR", "Sto2 ADC LR MIX" },
   3516
   3517	{ "Stereo2 ADC MIXL", NULL, "Stereo2 ADC LR Mux" },
   3518	{ "Stereo2 ADC MIXL", NULL, "adc stereo2 filter" },
   3519	{ "Stereo2 ADC MIXR", NULL, "Sto2 ADC MIXR" },
   3520	{ "Stereo2 ADC MIXR", NULL, "adc stereo2 filter" },
   3521	{ "adc stereo2 filter", NULL, "PLL1", is_sys_clk_from_pll },
   3522
   3523	{ "Stereo2 ADC MIX", NULL, "Stereo2 ADC MIXL" },
   3524	{ "Stereo2 ADC MIX", NULL, "Stereo2 ADC MIXR" },
   3525
   3526	{ "Sto3 ADC MIXL", "ADC1 Switch", "Stereo3 ADC1 Mux" },
   3527	{ "Sto3 ADC MIXL", "ADC2 Switch", "Stereo3 ADC2 Mux" },
   3528	{ "Sto3 ADC MIXR", "ADC1 Switch", "Stereo3 ADC1 Mux" },
   3529	{ "Sto3 ADC MIXR", "ADC2 Switch", "Stereo3 ADC2 Mux" },
   3530
   3531	{ "Stereo3 ADC MIXL", NULL, "Sto3 ADC MIXL" },
   3532	{ "Stereo3 ADC MIXL", NULL, "adc stereo3 filter" },
   3533	{ "Stereo3 ADC MIXR", NULL, "Sto3 ADC MIXR" },
   3534	{ "Stereo3 ADC MIXR", NULL, "adc stereo3 filter" },
   3535	{ "adc stereo3 filter", NULL, "PLL1", is_sys_clk_from_pll },
   3536
   3537	{ "Stereo3 ADC MIX", NULL, "Stereo3 ADC MIXL" },
   3538	{ "Stereo3 ADC MIX", NULL, "Stereo3 ADC MIXR" },
   3539
   3540	{ "Sto4 ADC MIXL", "ADC1 Switch", "Stereo4 ADC1 Mux" },
   3541	{ "Sto4 ADC MIXL", "ADC2 Switch", "Stereo4 ADC2 Mux" },
   3542	{ "Sto4 ADC MIXR", "ADC1 Switch", "Stereo4 ADC1 Mux" },
   3543	{ "Sto4 ADC MIXR", "ADC2 Switch", "Stereo4 ADC2 Mux" },
   3544
   3545	{ "Stereo4 ADC MIXL", NULL, "Sto4 ADC MIXL" },
   3546	{ "Stereo4 ADC MIXL", NULL, "adc stereo4 filter" },
   3547	{ "Stereo4 ADC MIXR", NULL, "Sto4 ADC MIXR" },
   3548	{ "Stereo4 ADC MIXR", NULL, "adc stereo4 filter" },
   3549	{ "adc stereo4 filter", NULL, "PLL1", is_sys_clk_from_pll },
   3550
   3551	{ "Stereo4 ADC MIX", NULL, "Stereo4 ADC MIXL" },
   3552	{ "Stereo4 ADC MIX", NULL, "Stereo4 ADC MIXR" },
   3553
   3554	{ "Mono ADC MIXL", "ADC1 Switch", "Mono ADC1 L Mux" },
   3555	{ "Mono ADC MIXL", "ADC2 Switch", "Mono ADC2 L Mux" },
   3556	{ "Mono ADC MIXL", NULL, "adc mono left filter" },
   3557	{ "adc mono left filter", NULL, "PLL1", is_sys_clk_from_pll },
   3558
   3559	{ "Mono ADC MIXR", "ADC1 Switch", "Mono ADC1 R Mux" },
   3560	{ "Mono ADC MIXR", "ADC2 Switch", "Mono ADC2 R Mux" },
   3561	{ "Mono ADC MIXR", NULL, "adc mono right filter" },
   3562	{ "adc mono right filter", NULL, "PLL1", is_sys_clk_from_pll },
   3563
   3564	{ "Mono ADC MIX", NULL, "Mono ADC MIXL" },
   3565	{ "Mono ADC MIX", NULL, "Mono ADC MIXR" },
   3566
   3567	{ "VAD ADC Mux", "STO1 ADC MIX L", "Stereo1 ADC MIXL" },
   3568	{ "VAD ADC Mux", "MONO ADC MIX L", "Mono ADC MIXL" },
   3569	{ "VAD ADC Mux", "MONO ADC MIX R", "Mono ADC MIXR" },
   3570	{ "VAD ADC Mux", "STO2 ADC MIX L", "Stereo2 ADC MIXL" },
   3571	{ "VAD ADC Mux", "STO3 ADC MIX L", "Stereo3 ADC MIXL" },
   3572
   3573	{ "IF1 ADC1 Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
   3574	{ "IF1 ADC1 Mux", "OB01", "OB01 Bypass Mux" },
   3575	{ "IF1 ADC1 Mux", "VAD ADC", "VAD ADC Mux" },
   3576
   3577	{ "IF1 ADC2 Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
   3578	{ "IF1 ADC2 Mux", "OB23", "OB23 Bypass Mux" },
   3579
   3580	{ "IF1 ADC3 Mux", "STO3 ADC MIX", "Stereo3 ADC MIX" },
   3581	{ "IF1 ADC3 Mux", "MONO ADC MIX", "Mono ADC MIX" },
   3582	{ "IF1 ADC3 Mux", "OB45", "OB45" },
   3583
   3584	{ "IF1 ADC4 Mux", "STO4 ADC MIX", "Stereo4 ADC MIX" },
   3585	{ "IF1 ADC4 Mux", "OB67", "OB67" },
   3586	{ "IF1 ADC4 Mux", "OB01", "OB01 Bypass Mux" },
   3587
   3588	{ "IF1 ADC1 Swap Mux", "L/R", "IF1 ADC1 Mux" },
   3589	{ "IF1 ADC1 Swap Mux", "R/L", "IF1 ADC1 Mux" },
   3590	{ "IF1 ADC1 Swap Mux", "L/L", "IF1 ADC1 Mux" },
   3591	{ "IF1 ADC1 Swap Mux", "R/R", "IF1 ADC1 Mux" },
   3592
   3593	{ "IF1 ADC2 Swap Mux", "L/R", "IF1 ADC2 Mux" },
   3594	{ "IF1 ADC2 Swap Mux", "R/L", "IF1 ADC2 Mux" },
   3595	{ "IF1 ADC2 Swap Mux", "L/L", "IF1 ADC2 Mux" },
   3596	{ "IF1 ADC2 Swap Mux", "R/R", "IF1 ADC2 Mux" },
   3597
   3598	{ "IF1 ADC3 Swap Mux", "L/R", "IF1 ADC3 Mux" },
   3599	{ "IF1 ADC3 Swap Mux", "R/L", "IF1 ADC3 Mux" },
   3600	{ "IF1 ADC3 Swap Mux", "L/L", "IF1 ADC3 Mux" },
   3601	{ "IF1 ADC3 Swap Mux", "R/R", "IF1 ADC3 Mux" },
   3602
   3603	{ "IF1 ADC4 Swap Mux", "L/R", "IF1 ADC4 Mux" },
   3604	{ "IF1 ADC4 Swap Mux", "R/L", "IF1 ADC4 Mux" },
   3605	{ "IF1 ADC4 Swap Mux", "L/L", "IF1 ADC4 Mux" },
   3606	{ "IF1 ADC4 Swap Mux", "R/R", "IF1 ADC4 Mux" },
   3607
   3608	{ "IF1 ADC", NULL, "IF1 ADC1 Swap Mux" },
   3609	{ "IF1 ADC", NULL, "IF1 ADC2 Swap Mux" },
   3610	{ "IF1 ADC", NULL, "IF1 ADC3 Swap Mux" },
   3611	{ "IF1 ADC", NULL, "IF1 ADC4 Swap Mux" },
   3612
   3613	{ "IF1 ADC TDM Swap Mux", "1/2/3/4", "IF1 ADC" },
   3614	{ "IF1 ADC TDM Swap Mux", "2/1/3/4", "IF1 ADC" },
   3615	{ "IF1 ADC TDM Swap Mux", "2/3/1/4", "IF1 ADC" },
   3616	{ "IF1 ADC TDM Swap Mux", "4/1/2/3", "IF1 ADC" },
   3617	{ "IF1 ADC TDM Swap Mux", "1/3/2/4", "IF1 ADC" },
   3618	{ "IF1 ADC TDM Swap Mux", "1/4/2/3", "IF1 ADC" },
   3619	{ "IF1 ADC TDM Swap Mux", "3/1/2/4", "IF1 ADC" },
   3620	{ "IF1 ADC TDM Swap Mux", "3/4/1/2", "IF1 ADC" },
   3621
   3622	{ "AIF1TX", NULL, "I2S1" },
   3623	{ "AIF1TX", NULL, "IF1 ADC TDM Swap Mux" },
   3624
   3625	{ "IF2 ADC1 Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
   3626	{ "IF2 ADC1 Mux", "OB01", "OB01 Bypass Mux" },
   3627	{ "IF2 ADC1 Mux", "VAD ADC", "VAD ADC Mux" },
   3628
   3629	{ "IF2 ADC2 Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
   3630	{ "IF2 ADC2 Mux", "OB23", "OB23 Bypass Mux" },
   3631
   3632	{ "IF2 ADC3 Mux", "STO3 ADC MIX", "Stereo3 ADC MIX" },
   3633	{ "IF2 ADC3 Mux", "MONO ADC MIX", "Mono ADC MIX" },
   3634	{ "IF2 ADC3 Mux", "OB45", "OB45" },
   3635
   3636	{ "IF2 ADC4 Mux", "STO4 ADC MIX", "Stereo4 ADC MIX" },
   3637	{ "IF2 ADC4 Mux", "OB67", "OB67" },
   3638	{ "IF2 ADC4 Mux", "OB01", "OB01 Bypass Mux" },
   3639
   3640	{ "IF2 ADC1 Swap Mux", "L/R", "IF2 ADC1 Mux" },
   3641	{ "IF2 ADC1 Swap Mux", "R/L", "IF2 ADC1 Mux" },
   3642	{ "IF2 ADC1 Swap Mux", "L/L", "IF2 ADC1 Mux" },
   3643	{ "IF2 ADC1 Swap Mux", "R/R", "IF2 ADC1 Mux" },
   3644
   3645	{ "IF2 ADC2 Swap Mux", "L/R", "IF2 ADC2 Mux" },
   3646	{ "IF2 ADC2 Swap Mux", "R/L", "IF2 ADC2 Mux" },
   3647	{ "IF2 ADC2 Swap Mux", "L/L", "IF2 ADC2 Mux" },
   3648	{ "IF2 ADC2 Swap Mux", "R/R", "IF2 ADC2 Mux" },
   3649
   3650	{ "IF2 ADC3 Swap Mux", "L/R", "IF2 ADC3 Mux" },
   3651	{ "IF2 ADC3 Swap Mux", "R/L", "IF2 ADC3 Mux" },
   3652	{ "IF2 ADC3 Swap Mux", "L/L", "IF2 ADC3 Mux" },
   3653	{ "IF2 ADC3 Swap Mux", "R/R", "IF2 ADC3 Mux" },
   3654
   3655	{ "IF2 ADC4 Swap Mux", "L/R", "IF2 ADC4 Mux" },
   3656	{ "IF2 ADC4 Swap Mux", "R/L", "IF2 ADC4 Mux" },
   3657	{ "IF2 ADC4 Swap Mux", "L/L", "IF2 ADC4 Mux" },
   3658	{ "IF2 ADC4 Swap Mux", "R/R", "IF2 ADC4 Mux" },
   3659
   3660	{ "IF2 ADC", NULL, "IF2 ADC1 Swap Mux" },
   3661	{ "IF2 ADC", NULL, "IF2 ADC2 Swap Mux" },
   3662	{ "IF2 ADC", NULL, "IF2 ADC3 Swap Mux" },
   3663	{ "IF2 ADC", NULL, "IF2 ADC4 Swap Mux" },
   3664
   3665	{ "IF2 ADC TDM Swap Mux", "1/2/3/4", "IF2 ADC" },
   3666	{ "IF2 ADC TDM Swap Mux", "2/1/3/4", "IF2 ADC" },
   3667	{ "IF2 ADC TDM Swap Mux", "3/1/2/4", "IF2 ADC" },
   3668	{ "IF2 ADC TDM Swap Mux", "4/1/2/3", "IF2 ADC" },
   3669	{ "IF2 ADC TDM Swap Mux", "1/3/2/4", "IF2 ADC" },
   3670	{ "IF2 ADC TDM Swap Mux", "1/4/2/3", "IF2 ADC" },
   3671	{ "IF2 ADC TDM Swap Mux", "2/3/1/4", "IF2 ADC" },
   3672	{ "IF2 ADC TDM Swap Mux", "3/4/1/2", "IF2 ADC" },
   3673
   3674	{ "AIF2TX", NULL, "I2S2" },
   3675	{ "AIF2TX", NULL, "IF2 ADC TDM Swap Mux" },
   3676
   3677	{ "IF3 ADC Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
   3678	{ "IF3 ADC Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
   3679	{ "IF3 ADC Mux", "STO3 ADC MIX", "Stereo3 ADC MIX" },
   3680	{ "IF3 ADC Mux", "STO4 ADC MIX", "Stereo4 ADC MIX" },
   3681	{ "IF3 ADC Mux", "MONO ADC MIX", "Mono ADC MIX" },
   3682	{ "IF3 ADC Mux", "OB01", "OB01 Bypass Mux" },
   3683	{ "IF3 ADC Mux", "OB23", "OB23 Bypass Mux" },
   3684	{ "IF3 ADC Mux", "VAD ADC", "VAD ADC Mux" },
   3685
   3686	{ "AIF3TX", NULL, "I2S3" },
   3687	{ "AIF3TX", NULL, "IF3 ADC Mux" },
   3688
   3689	{ "IF4 ADC Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
   3690	{ "IF4 ADC Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
   3691	{ "IF4 ADC Mux", "STO3 ADC MIX", "Stereo3 ADC MIX" },
   3692	{ "IF4 ADC Mux", "STO4 ADC MIX", "Stereo4 ADC MIX" },
   3693	{ "IF4 ADC Mux", "MONO ADC MIX", "Mono ADC MIX" },
   3694	{ "IF4 ADC Mux", "OB01", "OB01 Bypass Mux" },
   3695	{ "IF4 ADC Mux", "OB23", "OB23 Bypass Mux" },
   3696	{ "IF4 ADC Mux", "VAD ADC", "VAD ADC Mux" },
   3697
   3698	{ "AIF4TX", NULL, "I2S4" },
   3699	{ "AIF4TX", NULL, "IF4 ADC Mux" },
   3700
   3701	{ "SLB ADC1 Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
   3702	{ "SLB ADC1 Mux", "OB01", "OB01 Bypass Mux" },
   3703	{ "SLB ADC1 Mux", "VAD ADC", "VAD ADC Mux" },
   3704
   3705	{ "SLB ADC2 Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
   3706	{ "SLB ADC2 Mux", "OB23", "OB23 Bypass Mux" },
   3707
   3708	{ "SLB ADC3 Mux", "STO3 ADC MIX", "Stereo3 ADC MIX" },
   3709	{ "SLB ADC3 Mux", "MONO ADC MIX", "Mono ADC MIX" },
   3710	{ "SLB ADC3 Mux", "OB45", "OB45" },
   3711
   3712	{ "SLB ADC4 Mux", "STO4 ADC MIX", "Stereo4 ADC MIX" },
   3713	{ "SLB ADC4 Mux", "OB67", "OB67" },
   3714	{ "SLB ADC4 Mux", "OB01", "OB01 Bypass Mux" },
   3715
   3716	{ "SLBTX", NULL, "SLB" },
   3717	{ "SLBTX", NULL, "SLB ADC1 Mux" },
   3718	{ "SLBTX", NULL, "SLB ADC2 Mux" },
   3719	{ "SLBTX", NULL, "SLB ADC3 Mux" },
   3720	{ "SLBTX", NULL, "SLB ADC4 Mux" },
   3721
   3722	{ "DSPTX", NULL, "IB01 Bypass Mux" },
   3723
   3724	{ "IB01 Mux", "IF1 DAC 01", "IF1 DAC01" },
   3725	{ "IB01 Mux", "IF2 DAC 01", "IF2 DAC01" },
   3726	{ "IB01 Mux", "SLB DAC 01", "SLB DAC01" },
   3727	{ "IB01 Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
   3728	/* The IB01 Mux controls the source for InBound0 and InBound1.
   3729	 * When the mux option "VAD ADC/DAC1 FS" is selected, "VAD ADC" goes to
   3730	 * InBound0 and "DAC1 FS" goes to InBound1. "VAD ADC" is used for
   3731	 * hotwording. "DAC1 FS" is not used currently.
   3732	 *
   3733	 * Creating a common widget node for "VAD ADC" + "DAC1 FS" and
   3734	 * connecting the common widget to IB01 Mux causes the issue where
   3735	 * there is an active path going from system playback -> "DAC1 FS" ->
   3736	 * IB01 Mux -> DSP Buffer -> hotword stream. This wrong path confuses
   3737	 * DAPM. Therefore "DAC1 FS" is ignored for now.
   3738	 */
   3739	{ "IB01 Mux", "VAD ADC/DAC1 FS", "VAD ADC Mux" },
   3740
   3741	{ "IB01 Bypass Mux", "Bypass", "IB01 Mux" },
   3742	{ "IB01 Bypass Mux", "Pass SRC", "IB01 Mux" },
   3743
   3744	{ "IB23 Mux", "IF1 DAC 23", "IF1 DAC23" },
   3745	{ "IB23 Mux", "IF2 DAC 23", "IF2 DAC23" },
   3746	{ "IB23 Mux", "SLB DAC 23", "SLB DAC23" },
   3747	{ "IB23 Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
   3748	{ "IB23 Mux", "DAC1 FS", "DAC1 FS" },
   3749	{ "IB23 Mux", "IF4 DAC", "IF4 DAC" },
   3750
   3751	{ "IB23 Bypass Mux", "Bypass", "IB23 Mux" },
   3752	{ "IB23 Bypass Mux", "Pass SRC", "IB23 Mux" },
   3753
   3754	{ "IB45 Mux", "IF1 DAC 45", "IF1 DAC45" },
   3755	{ "IB45 Mux", "IF2 DAC 45", "IF2 DAC45" },
   3756	{ "IB45 Mux", "SLB DAC 45", "SLB DAC45" },
   3757	{ "IB45 Mux", "STO3 ADC MIX", "Stereo3 ADC MIX" },
   3758	{ "IB45 Mux", "IF3 DAC", "IF3 DAC" },
   3759
   3760	{ "IB45 Bypass Mux", "Bypass", "IB45 Mux" },
   3761	{ "IB45 Bypass Mux", "Pass SRC", "IB45 Mux" },
   3762
   3763	{ "IB6 Mux", "IF1 DAC 6", "IF1 DAC6 Mux" },
   3764	{ "IB6 Mux", "IF2 DAC 6", "IF2 DAC6 Mux" },
   3765	{ "IB6 Mux", "SLB DAC 6", "SLB DAC6" },
   3766	{ "IB6 Mux", "STO4 ADC MIX L", "Stereo4 ADC MIXL" },
   3767	{ "IB6 Mux", "IF4 DAC L", "IF4 DAC L" },
   3768	{ "IB6 Mux", "STO1 ADC MIX L", "Stereo1 ADC MIXL" },
   3769	{ "IB6 Mux", "STO2 ADC MIX L", "Stereo2 ADC MIXL" },
   3770	{ "IB6 Mux", "STO3 ADC MIX L", "Stereo3 ADC MIXL" },
   3771
   3772	{ "IB7 Mux", "IF1 DAC 7", "IF1 DAC7 Mux" },
   3773	{ "IB7 Mux", "IF2 DAC 7", "IF2 DAC7 Mux" },
   3774	{ "IB7 Mux", "SLB DAC 7", "SLB DAC7" },
   3775	{ "IB7 Mux", "STO4 ADC MIX R", "Stereo4 ADC MIXR" },
   3776	{ "IB7 Mux", "IF4 DAC R", "IF4 DAC R" },
   3777	{ "IB7 Mux", "STO1 ADC MIX R", "Stereo1 ADC MIXR" },
   3778	{ "IB7 Mux", "STO2 ADC MIX R", "Stereo2 ADC MIXR" },
   3779	{ "IB7 Mux", "STO3 ADC MIX R", "Stereo3 ADC MIXR" },
   3780
   3781	{ "IB8 Mux", "STO1 ADC MIX L", "Stereo1 ADC MIXL" },
   3782	{ "IB8 Mux", "STO2 ADC MIX L", "Stereo2 ADC MIXL" },
   3783	{ "IB8 Mux", "STO3 ADC MIX L", "Stereo3 ADC MIXL" },
   3784	{ "IB8 Mux", "STO4 ADC MIX L", "Stereo4 ADC MIXL" },
   3785	{ "IB8 Mux", "MONO ADC MIX L", "Mono ADC MIXL" },
   3786	{ "IB8 Mux", "DACL1 FS", "DAC1 MIXL" },
   3787
   3788	{ "IB9 Mux", "STO1 ADC MIX R", "Stereo1 ADC MIXR" },
   3789	{ "IB9 Mux", "STO2 ADC MIX R", "Stereo2 ADC MIXR" },
   3790	{ "IB9 Mux", "STO3 ADC MIX R", "Stereo3 ADC MIXR" },
   3791	{ "IB9 Mux", "STO4 ADC MIX R", "Stereo4 ADC MIXR" },
   3792	{ "IB9 Mux", "MONO ADC MIX R", "Mono ADC MIXR" },
   3793	{ "IB9 Mux", "DACR1 FS", "DAC1 MIXR" },
   3794	{ "IB9 Mux", "DAC1 FS", "DAC1 FS" },
   3795
   3796	{ "OB01 MIX", "IB01 Switch", "IB01 Bypass Mux" },
   3797	{ "OB01 MIX", "IB23 Switch", "IB23 Bypass Mux" },
   3798	{ "OB01 MIX", "IB45 Switch", "IB45 Bypass Mux" },
   3799	{ "OB01 MIX", "IB6 Switch", "IB6 Mux" },
   3800	{ "OB01 MIX", "IB7 Switch", "IB7 Mux" },
   3801	{ "OB01 MIX", "IB8 Switch", "IB8 Mux" },
   3802	{ "OB01 MIX", "IB9 Switch", "IB9 Mux" },
   3803
   3804	{ "OB23 MIX", "IB01 Switch", "IB01 Bypass Mux" },
   3805	{ "OB23 MIX", "IB23 Switch", "IB23 Bypass Mux" },
   3806	{ "OB23 MIX", "IB45 Switch", "IB45 Bypass Mux" },
   3807	{ "OB23 MIX", "IB6 Switch", "IB6 Mux" },
   3808	{ "OB23 MIX", "IB7 Switch", "IB7 Mux" },
   3809	{ "OB23 MIX", "IB8 Switch", "IB8 Mux" },
   3810	{ "OB23 MIX", "IB9 Switch", "IB9 Mux" },
   3811
   3812	{ "OB4 MIX", "IB01 Switch", "IB01 Bypass Mux" },
   3813	{ "OB4 MIX", "IB23 Switch", "IB23 Bypass Mux" },
   3814	{ "OB4 MIX", "IB45 Switch", "IB45 Bypass Mux" },
   3815	{ "OB4 MIX", "IB6 Switch", "IB6 Mux" },
   3816	{ "OB4 MIX", "IB7 Switch", "IB7 Mux" },
   3817	{ "OB4 MIX", "IB8 Switch", "IB8 Mux" },
   3818	{ "OB4 MIX", "IB9 Switch", "IB9 Mux" },
   3819
   3820	{ "OB5 MIX", "IB01 Switch", "IB01 Bypass Mux" },
   3821	{ "OB5 MIX", "IB23 Switch", "IB23 Bypass Mux" },
   3822	{ "OB5 MIX", "IB45 Switch", "IB45 Bypass Mux" },
   3823	{ "OB5 MIX", "IB6 Switch", "IB6 Mux" },
   3824	{ "OB5 MIX", "IB7 Switch", "IB7 Mux" },
   3825	{ "OB5 MIX", "IB8 Switch", "IB8 Mux" },
   3826	{ "OB5 MIX", "IB9 Switch", "IB9 Mux" },
   3827
   3828	{ "OB6 MIX", "IB01 Switch", "IB01 Bypass Mux" },
   3829	{ "OB6 MIX", "IB23 Switch", "IB23 Bypass Mux" },
   3830	{ "OB6 MIX", "IB45 Switch", "IB45 Bypass Mux" },
   3831	{ "OB6 MIX", "IB6 Switch", "IB6 Mux" },
   3832	{ "OB6 MIX", "IB7 Switch", "IB7 Mux" },
   3833	{ "OB6 MIX", "IB8 Switch", "IB8 Mux" },
   3834	{ "OB6 MIX", "IB9 Switch", "IB9 Mux" },
   3835
   3836	{ "OB7 MIX", "IB01 Switch", "IB01 Bypass Mux" },
   3837	{ "OB7 MIX", "IB23 Switch", "IB23 Bypass Mux" },
   3838	{ "OB7 MIX", "IB45 Switch", "IB45 Bypass Mux" },
   3839	{ "OB7 MIX", "IB6 Switch", "IB6 Mux" },
   3840	{ "OB7 MIX", "IB7 Switch", "IB7 Mux" },
   3841	{ "OB7 MIX", "IB8 Switch", "IB8 Mux" },
   3842	{ "OB7 MIX", "IB9 Switch", "IB9 Mux" },
   3843
   3844	{ "OB01 Bypass Mux", "Bypass", "OB01 MIX" },
   3845	{ "OB01 Bypass Mux", "Pass SRC", "OB01 MIX" },
   3846	{ "OB23 Bypass Mux", "Bypass", "OB23 MIX" },
   3847	{ "OB23 Bypass Mux", "Pass SRC", "OB23 MIX" },
   3848
   3849	{ "OutBound2", NULL, "OB23 Bypass Mux" },
   3850	{ "OutBound3", NULL, "OB23 Bypass Mux" },
   3851	{ "OutBound4", NULL, "OB4 MIX" },
   3852	{ "OutBound5", NULL, "OB5 MIX" },
   3853	{ "OutBound6", NULL, "OB6 MIX" },
   3854	{ "OutBound7", NULL, "OB7 MIX" },
   3855
   3856	{ "OB45", NULL, "OutBound4" },
   3857	{ "OB45", NULL, "OutBound5" },
   3858	{ "OB67", NULL, "OutBound6" },
   3859	{ "OB67", NULL, "OutBound7" },
   3860
   3861	{ "IF1 DAC0", NULL, "AIF1RX" },
   3862	{ "IF1 DAC1", NULL, "AIF1RX" },
   3863	{ "IF1 DAC2", NULL, "AIF1RX" },
   3864	{ "IF1 DAC3", NULL, "AIF1RX" },
   3865	{ "IF1 DAC4", NULL, "AIF1RX" },
   3866	{ "IF1 DAC5", NULL, "AIF1RX" },
   3867	{ "IF1 DAC6", NULL, "AIF1RX" },
   3868	{ "IF1 DAC7", NULL, "AIF1RX" },
   3869	{ "IF1 DAC0", NULL, "I2S1" },
   3870	{ "IF1 DAC1", NULL, "I2S1" },
   3871	{ "IF1 DAC2", NULL, "I2S1" },
   3872	{ "IF1 DAC3", NULL, "I2S1" },
   3873	{ "IF1 DAC4", NULL, "I2S1" },
   3874	{ "IF1 DAC5", NULL, "I2S1" },
   3875	{ "IF1 DAC6", NULL, "I2S1" },
   3876	{ "IF1 DAC7", NULL, "I2S1" },
   3877
   3878	{ "IF1 DAC0 Mux", "Slot0", "IF1 DAC0" },
   3879	{ "IF1 DAC0 Mux", "Slot1", "IF1 DAC1" },
   3880	{ "IF1 DAC0 Mux", "Slot2", "IF1 DAC2" },
   3881	{ "IF1 DAC0 Mux", "Slot3", "IF1 DAC3" },
   3882	{ "IF1 DAC0 Mux", "Slot4", "IF1 DAC4" },
   3883	{ "IF1 DAC0 Mux", "Slot5", "IF1 DAC5" },
   3884	{ "IF1 DAC0 Mux", "Slot6", "IF1 DAC6" },
   3885	{ "IF1 DAC0 Mux", "Slot7", "IF1 DAC7" },
   3886
   3887	{ "IF1 DAC1 Mux", "Slot0", "IF1 DAC0" },
   3888	{ "IF1 DAC1 Mux", "Slot1", "IF1 DAC1" },
   3889	{ "IF1 DAC1 Mux", "Slot2", "IF1 DAC2" },
   3890	{ "IF1 DAC1 Mux", "Slot3", "IF1 DAC3" },
   3891	{ "IF1 DAC1 Mux", "Slot4", "IF1 DAC4" },
   3892	{ "IF1 DAC1 Mux", "Slot5", "IF1 DAC5" },
   3893	{ "IF1 DAC1 Mux", "Slot6", "IF1 DAC6" },
   3894	{ "IF1 DAC1 Mux", "Slot7", "IF1 DAC7" },
   3895
   3896	{ "IF1 DAC2 Mux", "Slot0", "IF1 DAC0" },
   3897	{ "IF1 DAC2 Mux", "Slot1", "IF1 DAC1" },
   3898	{ "IF1 DAC2 Mux", "Slot2", "IF1 DAC2" },
   3899	{ "IF1 DAC2 Mux", "Slot3", "IF1 DAC3" },
   3900	{ "IF1 DAC2 Mux", "Slot4", "IF1 DAC4" },
   3901	{ "IF1 DAC2 Mux", "Slot5", "IF1 DAC5" },
   3902	{ "IF1 DAC2 Mux", "Slot6", "IF1 DAC6" },
   3903	{ "IF1 DAC2 Mux", "Slot7", "IF1 DAC7" },
   3904
   3905	{ "IF1 DAC3 Mux", "Slot0", "IF1 DAC0" },
   3906	{ "IF1 DAC3 Mux", "Slot1", "IF1 DAC1" },
   3907	{ "IF1 DAC3 Mux", "Slot2", "IF1 DAC2" },
   3908	{ "IF1 DAC3 Mux", "Slot3", "IF1 DAC3" },
   3909	{ "IF1 DAC3 Mux", "Slot4", "IF1 DAC4" },
   3910	{ "IF1 DAC3 Mux", "Slot5", "IF1 DAC5" },
   3911	{ "IF1 DAC3 Mux", "Slot6", "IF1 DAC6" },
   3912	{ "IF1 DAC3 Mux", "Slot7", "IF1 DAC7" },
   3913
   3914	{ "IF1 DAC4 Mux", "Slot0", "IF1 DAC0" },
   3915	{ "IF1 DAC4 Mux", "Slot1", "IF1 DAC1" },
   3916	{ "IF1 DAC4 Mux", "Slot2", "IF1 DAC2" },
   3917	{ "IF1 DAC4 Mux", "Slot3", "IF1 DAC3" },
   3918	{ "IF1 DAC4 Mux", "Slot4", "IF1 DAC4" },
   3919	{ "IF1 DAC4 Mux", "Slot5", "IF1 DAC5" },
   3920	{ "IF1 DAC4 Mux", "Slot6", "IF1 DAC6" },
   3921	{ "IF1 DAC4 Mux", "Slot7", "IF1 DAC7" },
   3922
   3923	{ "IF1 DAC5 Mux", "Slot0", "IF1 DAC0" },
   3924	{ "IF1 DAC5 Mux", "Slot1", "IF1 DAC1" },
   3925	{ "IF1 DAC5 Mux", "Slot2", "IF1 DAC2" },
   3926	{ "IF1 DAC5 Mux", "Slot3", "IF1 DAC3" },
   3927	{ "IF1 DAC5 Mux", "Slot4", "IF1 DAC4" },
   3928	{ "IF1 DAC5 Mux", "Slot5", "IF1 DAC5" },
   3929	{ "IF1 DAC5 Mux", "Slot6", "IF1 DAC6" },
   3930	{ "IF1 DAC5 Mux", "Slot7", "IF1 DAC7" },
   3931
   3932	{ "IF1 DAC6 Mux", "Slot0", "IF1 DAC0" },
   3933	{ "IF1 DAC6 Mux", "Slot1", "IF1 DAC1" },
   3934	{ "IF1 DAC6 Mux", "Slot2", "IF1 DAC2" },
   3935	{ "IF1 DAC6 Mux", "Slot3", "IF1 DAC3" },
   3936	{ "IF1 DAC6 Mux", "Slot4", "IF1 DAC4" },
   3937	{ "IF1 DAC6 Mux", "Slot5", "IF1 DAC5" },
   3938	{ "IF1 DAC6 Mux", "Slot6", "IF1 DAC6" },
   3939	{ "IF1 DAC6 Mux", "Slot7", "IF1 DAC7" },
   3940
   3941	{ "IF1 DAC7 Mux", "Slot0", "IF1 DAC0" },
   3942	{ "IF1 DAC7 Mux", "Slot1", "IF1 DAC1" },
   3943	{ "IF1 DAC7 Mux", "Slot2", "IF1 DAC2" },
   3944	{ "IF1 DAC7 Mux", "Slot3", "IF1 DAC3" },
   3945	{ "IF1 DAC7 Mux", "Slot4", "IF1 DAC4" },
   3946	{ "IF1 DAC7 Mux", "Slot5", "IF1 DAC5" },
   3947	{ "IF1 DAC7 Mux", "Slot6", "IF1 DAC6" },
   3948	{ "IF1 DAC7 Mux", "Slot7", "IF1 DAC7" },
   3949
   3950	{ "IF1 DAC01", NULL, "IF1 DAC0 Mux" },
   3951	{ "IF1 DAC01", NULL, "IF1 DAC1 Mux" },
   3952	{ "IF1 DAC23", NULL, "IF1 DAC2 Mux" },
   3953	{ "IF1 DAC23", NULL, "IF1 DAC3 Mux" },
   3954	{ "IF1 DAC45", NULL, "IF1 DAC4 Mux" },
   3955	{ "IF1 DAC45", NULL, "IF1 DAC5 Mux" },
   3956	{ "IF1 DAC67", NULL, "IF1 DAC6 Mux" },
   3957	{ "IF1 DAC67", NULL, "IF1 DAC7 Mux" },
   3958
   3959	{ "IF2 DAC0", NULL, "AIF2RX" },
   3960	{ "IF2 DAC1", NULL, "AIF2RX" },
   3961	{ "IF2 DAC2", NULL, "AIF2RX" },
   3962	{ "IF2 DAC3", NULL, "AIF2RX" },
   3963	{ "IF2 DAC4", NULL, "AIF2RX" },
   3964	{ "IF2 DAC5", NULL, "AIF2RX" },
   3965	{ "IF2 DAC6", NULL, "AIF2RX" },
   3966	{ "IF2 DAC7", NULL, "AIF2RX" },
   3967	{ "IF2 DAC0", NULL, "I2S2" },
   3968	{ "IF2 DAC1", NULL, "I2S2" },
   3969	{ "IF2 DAC2", NULL, "I2S2" },
   3970	{ "IF2 DAC3", NULL, "I2S2" },
   3971	{ "IF2 DAC4", NULL, "I2S2" },
   3972	{ "IF2 DAC5", NULL, "I2S2" },
   3973	{ "IF2 DAC6", NULL, "I2S2" },
   3974	{ "IF2 DAC7", NULL, "I2S2" },
   3975
   3976	{ "IF2 DAC0 Mux", "Slot0", "IF2 DAC0" },
   3977	{ "IF2 DAC0 Mux", "Slot1", "IF2 DAC1" },
   3978	{ "IF2 DAC0 Mux", "Slot2", "IF2 DAC2" },
   3979	{ "IF2 DAC0 Mux", "Slot3", "IF2 DAC3" },
   3980	{ "IF2 DAC0 Mux", "Slot4", "IF2 DAC4" },
   3981	{ "IF2 DAC0 Mux", "Slot5", "IF2 DAC5" },
   3982	{ "IF2 DAC0 Mux", "Slot6", "IF2 DAC6" },
   3983	{ "IF2 DAC0 Mux", "Slot7", "IF2 DAC7" },
   3984
   3985	{ "IF2 DAC1 Mux", "Slot0", "IF2 DAC0" },
   3986	{ "IF2 DAC1 Mux", "Slot1", "IF2 DAC1" },
   3987	{ "IF2 DAC1 Mux", "Slot2", "IF2 DAC2" },
   3988	{ "IF2 DAC1 Mux", "Slot3", "IF2 DAC3" },
   3989	{ "IF2 DAC1 Mux", "Slot4", "IF2 DAC4" },
   3990	{ "IF2 DAC1 Mux", "Slot5", "IF2 DAC5" },
   3991	{ "IF2 DAC1 Mux", "Slot6", "IF2 DAC6" },
   3992	{ "IF2 DAC1 Mux", "Slot7", "IF2 DAC7" },
   3993
   3994	{ "IF2 DAC2 Mux", "Slot0", "IF2 DAC0" },
   3995	{ "IF2 DAC2 Mux", "Slot1", "IF2 DAC1" },
   3996	{ "IF2 DAC2 Mux", "Slot2", "IF2 DAC2" },
   3997	{ "IF2 DAC2 Mux", "Slot3", "IF2 DAC3" },
   3998	{ "IF2 DAC2 Mux", "Slot4", "IF2 DAC4" },
   3999	{ "IF2 DAC2 Mux", "Slot5", "IF2 DAC5" },
   4000	{ "IF2 DAC2 Mux", "Slot6", "IF2 DAC6" },
   4001	{ "IF2 DAC2 Mux", "Slot7", "IF2 DAC7" },
   4002
   4003	{ "IF2 DAC3 Mux", "Slot0", "IF2 DAC0" },
   4004	{ "IF2 DAC3 Mux", "Slot1", "IF2 DAC1" },
   4005	{ "IF2 DAC3 Mux", "Slot2", "IF2 DAC2" },
   4006	{ "IF2 DAC3 Mux", "Slot3", "IF2 DAC3" },
   4007	{ "IF2 DAC3 Mux", "Slot4", "IF2 DAC4" },
   4008	{ "IF2 DAC3 Mux", "Slot5", "IF2 DAC5" },
   4009	{ "IF2 DAC3 Mux", "Slot6", "IF2 DAC6" },
   4010	{ "IF2 DAC3 Mux", "Slot7", "IF2 DAC7" },
   4011
   4012	{ "IF2 DAC4 Mux", "Slot0", "IF2 DAC0" },
   4013	{ "IF2 DAC4 Mux", "Slot1", "IF2 DAC1" },
   4014	{ "IF2 DAC4 Mux", "Slot2", "IF2 DAC2" },
   4015	{ "IF2 DAC4 Mux", "Slot3", "IF2 DAC3" },
   4016	{ "IF2 DAC4 Mux", "Slot4", "IF2 DAC4" },
   4017	{ "IF2 DAC4 Mux", "Slot5", "IF2 DAC5" },
   4018	{ "IF2 DAC4 Mux", "Slot6", "IF2 DAC6" },
   4019	{ "IF2 DAC4 Mux", "Slot7", "IF2 DAC7" },
   4020
   4021	{ "IF2 DAC5 Mux", "Slot0", "IF2 DAC0" },
   4022	{ "IF2 DAC5 Mux", "Slot1", "IF2 DAC1" },
   4023	{ "IF2 DAC5 Mux", "Slot2", "IF2 DAC2" },
   4024	{ "IF2 DAC5 Mux", "Slot3", "IF2 DAC3" },
   4025	{ "IF2 DAC5 Mux", "Slot4", "IF2 DAC4" },
   4026	{ "IF2 DAC5 Mux", "Slot5", "IF2 DAC5" },
   4027	{ "IF2 DAC5 Mux", "Slot6", "IF2 DAC6" },
   4028	{ "IF2 DAC5 Mux", "Slot7", "IF2 DAC7" },
   4029
   4030	{ "IF2 DAC6 Mux", "Slot0", "IF2 DAC0" },
   4031	{ "IF2 DAC6 Mux", "Slot1", "IF2 DAC1" },
   4032	{ "IF2 DAC6 Mux", "Slot2", "IF2 DAC2" },
   4033	{ "IF2 DAC6 Mux", "Slot3", "IF2 DAC3" },
   4034	{ "IF2 DAC6 Mux", "Slot4", "IF2 DAC4" },
   4035	{ "IF2 DAC6 Mux", "Slot5", "IF2 DAC5" },
   4036	{ "IF2 DAC6 Mux", "Slot6", "IF2 DAC6" },
   4037	{ "IF2 DAC6 Mux", "Slot7", "IF2 DAC7" },
   4038
   4039	{ "IF2 DAC7 Mux", "Slot0", "IF2 DAC0" },
   4040	{ "IF2 DAC7 Mux", "Slot1", "IF2 DAC1" },
   4041	{ "IF2 DAC7 Mux", "Slot2", "IF2 DAC2" },
   4042	{ "IF2 DAC7 Mux", "Slot3", "IF2 DAC3" },
   4043	{ "IF2 DAC7 Mux", "Slot4", "IF2 DAC4" },
   4044	{ "IF2 DAC7 Mux", "Slot5", "IF2 DAC5" },
   4045	{ "IF2 DAC7 Mux", "Slot6", "IF2 DAC6" },
   4046	{ "IF2 DAC7 Mux", "Slot7", "IF2 DAC7" },
   4047
   4048	{ "IF2 DAC01", NULL, "IF2 DAC0 Mux" },
   4049	{ "IF2 DAC01", NULL, "IF2 DAC1 Mux" },
   4050	{ "IF2 DAC23", NULL, "IF2 DAC2 Mux" },
   4051	{ "IF2 DAC23", NULL, "IF2 DAC3 Mux" },
   4052	{ "IF2 DAC45", NULL, "IF2 DAC4 Mux" },
   4053	{ "IF2 DAC45", NULL, "IF2 DAC5 Mux" },
   4054	{ "IF2 DAC67", NULL, "IF2 DAC6 Mux" },
   4055	{ "IF2 DAC67", NULL, "IF2 DAC7 Mux" },
   4056
   4057	{ "IF3 DAC", NULL, "AIF3RX" },
   4058	{ "IF3 DAC", NULL, "I2S3" },
   4059
   4060	{ "IF4 DAC", NULL, "AIF4RX" },
   4061	{ "IF4 DAC", NULL, "I2S4" },
   4062
   4063	{ "IF3 DAC L", NULL, "IF3 DAC" },
   4064	{ "IF3 DAC R", NULL, "IF3 DAC" },
   4065
   4066	{ "IF4 DAC L", NULL, "IF4 DAC" },
   4067	{ "IF4 DAC R", NULL, "IF4 DAC" },
   4068
   4069	{ "SLB DAC0", NULL, "SLBRX" },
   4070	{ "SLB DAC1", NULL, "SLBRX" },
   4071	{ "SLB DAC2", NULL, "SLBRX" },
   4072	{ "SLB DAC3", NULL, "SLBRX" },
   4073	{ "SLB DAC4", NULL, "SLBRX" },
   4074	{ "SLB DAC5", NULL, "SLBRX" },
   4075	{ "SLB DAC6", NULL, "SLBRX" },
   4076	{ "SLB DAC7", NULL, "SLBRX" },
   4077	{ "SLB DAC0", NULL, "SLB" },
   4078	{ "SLB DAC1", NULL, "SLB" },
   4079	{ "SLB DAC2", NULL, "SLB" },
   4080	{ "SLB DAC3", NULL, "SLB" },
   4081	{ "SLB DAC4", NULL, "SLB" },
   4082	{ "SLB DAC5", NULL, "SLB" },
   4083	{ "SLB DAC6", NULL, "SLB" },
   4084	{ "SLB DAC7", NULL, "SLB" },
   4085
   4086	{ "SLB DAC01", NULL, "SLB DAC0" },
   4087	{ "SLB DAC01", NULL, "SLB DAC1" },
   4088	{ "SLB DAC23", NULL, "SLB DAC2" },
   4089	{ "SLB DAC23", NULL, "SLB DAC3" },
   4090	{ "SLB DAC45", NULL, "SLB DAC4" },
   4091	{ "SLB DAC45", NULL, "SLB DAC5" },
   4092	{ "SLB DAC67", NULL, "SLB DAC6" },
   4093	{ "SLB DAC67", NULL, "SLB DAC7" },
   4094
   4095	{ "ADDA1 Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
   4096	{ "ADDA1 Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
   4097	{ "ADDA1 Mux", "OB 67", "OB67" },
   4098
   4099	{ "DAC1 Mux", "IF1 DAC 01", "IF1 DAC01" },
   4100	{ "DAC1 Mux", "IF2 DAC 01", "IF2 DAC01" },
   4101	{ "DAC1 Mux", "IF3 DAC LR", "IF3 DAC" },
   4102	{ "DAC1 Mux", "IF4 DAC LR", "IF4 DAC" },
   4103	{ "DAC1 Mux", "SLB DAC 01", "SLB DAC01" },
   4104	{ "DAC1 Mux", "OB 01", "OB01 Bypass Mux" },
   4105
   4106	{ "DAC1 MIXL", "Stereo ADC Switch", "ADDA1 Mux" },
   4107	{ "DAC1 MIXL", "DAC1 Switch", "DAC1 Mux" },
   4108	{ "DAC1 MIXR", "Stereo ADC Switch", "ADDA1 Mux" },
   4109	{ "DAC1 MIXR", "DAC1 Switch", "DAC1 Mux" },
   4110
   4111	{ "DAC1 FS", NULL, "DAC1 MIXL" },
   4112	{ "DAC1 FS", NULL, "DAC1 MIXR" },
   4113
   4114	{ "DAC2 L Mux", "IF1 DAC 2", "IF1 DAC2 Mux" },
   4115	{ "DAC2 L Mux", "IF2 DAC 2", "IF2 DAC2 Mux" },
   4116	{ "DAC2 L Mux", "IF3 DAC L", "IF3 DAC L" },
   4117	{ "DAC2 L Mux", "IF4 DAC L", "IF4 DAC L" },
   4118	{ "DAC2 L Mux", "SLB DAC 2", "SLB DAC2" },
   4119	{ "DAC2 L Mux", "OB 2", "OutBound2" },
   4120
   4121	{ "DAC2 R Mux", "IF1 DAC 3", "IF1 DAC3 Mux" },
   4122	{ "DAC2 R Mux", "IF2 DAC 3", "IF2 DAC3 Mux" },
   4123	{ "DAC2 R Mux", "IF3 DAC R", "IF3 DAC R" },
   4124	{ "DAC2 R Mux", "IF4 DAC R", "IF4 DAC R" },
   4125	{ "DAC2 R Mux", "SLB DAC 3", "SLB DAC3" },
   4126	{ "DAC2 R Mux", "OB 3", "OutBound3" },
   4127	{ "DAC2 R Mux", "Haptic Generator", "Haptic Generator" },
   4128	{ "DAC2 R Mux", "VAD ADC", "VAD ADC Mux" },
   4129
   4130	{ "DAC3 L Mux", "IF1 DAC 4", "IF1 DAC4 Mux" },
   4131	{ "DAC3 L Mux", "IF2 DAC 4", "IF2 DAC4 Mux" },
   4132	{ "DAC3 L Mux", "IF3 DAC L", "IF3 DAC L" },
   4133	{ "DAC3 L Mux", "IF4 DAC L", "IF4 DAC L" },
   4134	{ "DAC3 L Mux", "SLB DAC 4", "SLB DAC4" },
   4135	{ "DAC3 L Mux", "OB 4", "OutBound4" },
   4136
   4137	{ "DAC3 R Mux", "IF1 DAC 5", "IF1 DAC5 Mux" },
   4138	{ "DAC3 R Mux", "IF2 DAC 5", "IF2 DAC5 Mux" },
   4139	{ "DAC3 R Mux", "IF3 DAC R", "IF3 DAC R" },
   4140	{ "DAC3 R Mux", "IF4 DAC R", "IF4 DAC R" },
   4141	{ "DAC3 R Mux", "SLB DAC 5", "SLB DAC5" },
   4142	{ "DAC3 R Mux", "OB 5", "OutBound5" },
   4143
   4144	{ "DAC4 L Mux", "IF1 DAC 6", "IF1 DAC6 Mux" },
   4145	{ "DAC4 L Mux", "IF2 DAC 6", "IF2 DAC6 Mux" },
   4146	{ "DAC4 L Mux", "IF3 DAC L", "IF3 DAC L" },
   4147	{ "DAC4 L Mux", "IF4 DAC L", "IF4 DAC L" },
   4148	{ "DAC4 L Mux", "SLB DAC 6", "SLB DAC6" },
   4149	{ "DAC4 L Mux", "OB 6", "OutBound6" },
   4150
   4151	{ "DAC4 R Mux", "IF1 DAC 7", "IF1 DAC7 Mux" },
   4152	{ "DAC4 R Mux", "IF2 DAC 7", "IF2 DAC7 Mux" },
   4153	{ "DAC4 R Mux", "IF3 DAC R", "IF3 DAC R" },
   4154	{ "DAC4 R Mux", "IF4 DAC R", "IF4 DAC R" },
   4155	{ "DAC4 R Mux", "SLB DAC 7", "SLB DAC7" },
   4156	{ "DAC4 R Mux", "OB 7", "OutBound7" },
   4157
   4158	{ "Sidetone Mux", "DMIC1 L", "DMIC L1" },
   4159	{ "Sidetone Mux", "DMIC2 L", "DMIC L2" },
   4160	{ "Sidetone Mux", "DMIC3 L", "DMIC L3" },
   4161	{ "Sidetone Mux", "DMIC4 L", "DMIC L4" },
   4162	{ "Sidetone Mux", "ADC1", "ADC 1" },
   4163	{ "Sidetone Mux", "ADC2", "ADC 2" },
   4164	{ "Sidetone Mux", NULL, "Sidetone Power" },
   4165
   4166	{ "Stereo DAC MIXL", "ST L Switch", "Sidetone Mux" },
   4167	{ "Stereo DAC MIXL", "DAC1 L Switch", "DAC1 MIXL" },
   4168	{ "Stereo DAC MIXL", "DAC2 L Switch", "DAC2 L Mux" },
   4169	{ "Stereo DAC MIXL", "DAC1 R Switch", "DAC1 MIXR" },
   4170	{ "Stereo DAC MIXL", NULL, "dac stereo1 filter" },
   4171	{ "Stereo DAC MIXR", "ST R Switch", "Sidetone Mux" },
   4172	{ "Stereo DAC MIXR", "DAC1 R Switch", "DAC1 MIXR" },
   4173	{ "Stereo DAC MIXR", "DAC2 R Switch", "DAC2 R Mux" },
   4174	{ "Stereo DAC MIXR", "DAC1 L Switch", "DAC1 MIXL" },
   4175	{ "Stereo DAC MIXR", NULL, "dac stereo1 filter" },
   4176	{ "dac stereo1 filter", NULL, "PLL1", is_sys_clk_from_pll },
   4177
   4178	{ "Mono DAC MIXL", "ST L Switch", "Sidetone Mux" },
   4179	{ "Mono DAC MIXL", "DAC1 L Switch", "DAC1 MIXL" },
   4180	{ "Mono DAC MIXL", "DAC2 L Switch", "DAC2 L Mux" },
   4181	{ "Mono DAC MIXL", "DAC2 R Switch", "DAC2 R Mux" },
   4182	{ "Mono DAC MIXL", NULL, "dac mono2 left filter" },
   4183	{ "dac mono2 left filter", NULL, "PLL1", is_sys_clk_from_pll },
   4184	{ "Mono DAC MIXR", "ST R Switch", "Sidetone Mux" },
   4185	{ "Mono DAC MIXR", "DAC1 R Switch", "DAC1 MIXR" },
   4186	{ "Mono DAC MIXR", "DAC2 R Switch", "DAC2 R Mux" },
   4187	{ "Mono DAC MIXR", "DAC2 L Switch", "DAC2 L Mux" },
   4188	{ "Mono DAC MIXR", NULL, "dac mono2 right filter" },
   4189	{ "dac mono2 right filter", NULL, "PLL1", is_sys_clk_from_pll },
   4190
   4191	{ "DD1 MIXL", "Sto DAC Mix L Switch", "Stereo DAC MIXL" },
   4192	{ "DD1 MIXL", "Mono DAC Mix L Switch", "Mono DAC MIXL" },
   4193	{ "DD1 MIXL", "DAC3 L Switch", "DAC3 L Mux" },
   4194	{ "DD1 MIXL", "DAC3 R Switch", "DAC3 R Mux" },
   4195	{ "DD1 MIXL", NULL, "dac mono3 left filter" },
   4196	{ "dac mono3 left filter", NULL, "PLL1", is_sys_clk_from_pll },
   4197	{ "DD1 MIXR", "Sto DAC Mix R Switch", "Stereo DAC MIXR" },
   4198	{ "DD1 MIXR", "Mono DAC Mix R Switch", "Mono DAC MIXR" },
   4199	{ "DD1 MIXR", "DAC3 L Switch", "DAC3 L Mux" },
   4200	{ "DD1 MIXR", "DAC3 R Switch", "DAC3 R Mux" },
   4201	{ "DD1 MIXR", NULL, "dac mono3 right filter" },
   4202	{ "dac mono3 right filter", NULL, "PLL1", is_sys_clk_from_pll },
   4203
   4204	{ "DD2 MIXL", "Sto DAC Mix L Switch", "Stereo DAC MIXL" },
   4205	{ "DD2 MIXL", "Mono DAC Mix L Switch", "Mono DAC MIXL" },
   4206	{ "DD2 MIXL", "DAC4 L Switch", "DAC4 L Mux" },
   4207	{ "DD2 MIXL", "DAC4 R Switch", "DAC4 R Mux" },
   4208	{ "DD2 MIXL", NULL, "dac mono4 left filter" },
   4209	{ "dac mono4 left filter", NULL, "PLL1", is_sys_clk_from_pll },
   4210	{ "DD2 MIXR", "Sto DAC Mix R Switch", "Stereo DAC MIXR" },
   4211	{ "DD2 MIXR", "Mono DAC Mix R Switch", "Mono DAC MIXR" },
   4212	{ "DD2 MIXR", "DAC4 L Switch", "DAC4 L Mux" },
   4213	{ "DD2 MIXR", "DAC4 R Switch", "DAC4 R Mux" },
   4214	{ "DD2 MIXR", NULL, "dac mono4 right filter" },
   4215	{ "dac mono4 right filter", NULL, "PLL1", is_sys_clk_from_pll },
   4216
   4217	{ "Stereo DAC MIX", NULL, "Stereo DAC MIXL" },
   4218	{ "Stereo DAC MIX", NULL, "Stereo DAC MIXR" },
   4219	{ "Mono DAC MIX", NULL, "Mono DAC MIXL" },
   4220	{ "Mono DAC MIX", NULL, "Mono DAC MIXR" },
   4221	{ "DD1 MIX", NULL, "DD1 MIXL" },
   4222	{ "DD1 MIX", NULL, "DD1 MIXR" },
   4223	{ "DD2 MIX", NULL, "DD2 MIXL" },
   4224	{ "DD2 MIX", NULL, "DD2 MIXR" },
   4225
   4226	{ "DAC12 SRC Mux", "STO1 DAC MIX", "Stereo DAC MIX" },
   4227	{ "DAC12 SRC Mux", "MONO DAC MIX", "Mono DAC MIX" },
   4228	{ "DAC12 SRC Mux", "DD MIX1", "DD1 MIX" },
   4229	{ "DAC12 SRC Mux", "DD MIX2", "DD2 MIX" },
   4230
   4231	{ "DAC3 SRC Mux", "MONO DAC MIXL", "Mono DAC MIXL" },
   4232	{ "DAC3 SRC Mux", "MONO DAC MIXR", "Mono DAC MIXR" },
   4233	{ "DAC3 SRC Mux", "DD MIX1L", "DD1 MIXL" },
   4234	{ "DAC3 SRC Mux", "DD MIX2L", "DD2 MIXL" },
   4235
   4236	{ "DAC 1", NULL, "DAC12 SRC Mux" },
   4237	{ "DAC 2", NULL, "DAC12 SRC Mux" },
   4238	{ "DAC 3", NULL, "DAC3 SRC Mux" },
   4239
   4240	{ "PDM1 L Mux", "STO1 DAC MIX", "Stereo DAC MIXL" },
   4241	{ "PDM1 L Mux", "MONO DAC MIX", "Mono DAC MIXL" },
   4242	{ "PDM1 L Mux", "DD MIX1", "DD1 MIXL" },
   4243	{ "PDM1 L Mux", "DD MIX2", "DD2 MIXL" },
   4244	{ "PDM1 L Mux", NULL, "PDM1 Power" },
   4245	{ "PDM1 R Mux", "STO1 DAC MIX", "Stereo DAC MIXR" },
   4246	{ "PDM1 R Mux", "MONO DAC MIX", "Mono DAC MIXR" },
   4247	{ "PDM1 R Mux", "DD MIX1", "DD1 MIXR" },
   4248	{ "PDM1 R Mux", "DD MIX2", "DD2 MIXR" },
   4249	{ "PDM1 R Mux", NULL, "PDM1 Power" },
   4250	{ "PDM2 L Mux", "STO1 DAC MIX", "Stereo DAC MIXL" },
   4251	{ "PDM2 L Mux", "MONO DAC MIX", "Mono DAC MIXL" },
   4252	{ "PDM2 L Mux", "DD MIX1", "DD1 MIXL" },
   4253	{ "PDM2 L Mux", "DD MIX2", "DD2 MIXL" },
   4254	{ "PDM2 L Mux", NULL, "PDM2 Power" },
   4255	{ "PDM2 R Mux", "STO1 DAC MIX", "Stereo DAC MIXR" },
   4256	{ "PDM2 R Mux", "MONO DAC MIX", "Mono DAC MIXR" },
   4257	{ "PDM2 R Mux", "DD MIX1", "DD1 MIXR" },
   4258	{ "PDM2 R Mux", "DD MIX1", "DD2 MIXR" },
   4259	{ "PDM2 R Mux", NULL, "PDM2 Power" },
   4260
   4261	{ "LOUT1 amp", NULL, "DAC 1" },
   4262	{ "LOUT2 amp", NULL, "DAC 2" },
   4263	{ "LOUT3 amp", NULL, "DAC 3" },
   4264
   4265	{ "LOUT1 vref", NULL, "LOUT1 amp" },
   4266	{ "LOUT2 vref", NULL, "LOUT2 amp" },
   4267	{ "LOUT3 vref", NULL, "LOUT3 amp" },
   4268
   4269	{ "LOUT1", NULL, "LOUT1 vref" },
   4270	{ "LOUT2", NULL, "LOUT2 vref" },
   4271	{ "LOUT3", NULL, "LOUT3 vref" },
   4272
   4273	{ "PDM1L", NULL, "PDM1 L Mux" },
   4274	{ "PDM1R", NULL, "PDM1 R Mux" },
   4275	{ "PDM2L", NULL, "PDM2 L Mux" },
   4276	{ "PDM2R", NULL, "PDM2 R Mux" },
   4277};
   4278
   4279static const struct snd_soc_dapm_route rt5677_dmic2_clk_1[] = {
   4280	{ "DMIC L2", NULL, "DMIC1 power" },
   4281	{ "DMIC R2", NULL, "DMIC1 power" },
   4282};
   4283
   4284static const struct snd_soc_dapm_route rt5677_dmic2_clk_2[] = {
   4285	{ "DMIC L2", NULL, "DMIC2 power" },
   4286	{ "DMIC R2", NULL, "DMIC2 power" },
   4287};
   4288
   4289static int rt5677_hw_params(struct snd_pcm_substream *substream,
   4290	struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
   4291{
   4292	struct snd_soc_component *component = dai->component;
   4293	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   4294	unsigned int val_len = 0, val_clk, mask_clk;
   4295	int pre_div, bclk_ms, frame_size;
   4296
   4297	rt5677->lrck[dai->id] = params_rate(params);
   4298	pre_div = rl6231_get_clk_info(rt5677->sysclk, rt5677->lrck[dai->id]);
   4299	if (pre_div < 0) {
   4300		dev_err(component->dev, "Unsupported clock setting: sysclk=%dHz lrck=%dHz\n",
   4301			rt5677->sysclk, rt5677->lrck[dai->id]);
   4302		return -EINVAL;
   4303	}
   4304	frame_size = snd_soc_params_to_frame_size(params);
   4305	if (frame_size < 0) {
   4306		dev_err(component->dev, "Unsupported frame size: %d\n", frame_size);
   4307		return -EINVAL;
   4308	}
   4309	bclk_ms = frame_size > 32;
   4310	rt5677->bclk[dai->id] = rt5677->lrck[dai->id] * (32 << bclk_ms);
   4311
   4312	dev_dbg(dai->dev, "bclk is %dHz and lrck is %dHz\n",
   4313		rt5677->bclk[dai->id], rt5677->lrck[dai->id]);
   4314	dev_dbg(dai->dev, "bclk_ms is %d and pre_div is %d for iis %d\n",
   4315				bclk_ms, pre_div, dai->id);
   4316
   4317	switch (params_width(params)) {
   4318	case 16:
   4319		break;
   4320	case 20:
   4321		val_len |= RT5677_I2S_DL_20;
   4322		break;
   4323	case 24:
   4324		val_len |= RT5677_I2S_DL_24;
   4325		break;
   4326	case 8:
   4327		val_len |= RT5677_I2S_DL_8;
   4328		break;
   4329	default:
   4330		return -EINVAL;
   4331	}
   4332
   4333	switch (dai->id) {
   4334	case RT5677_AIF1:
   4335		mask_clk = RT5677_I2S_PD1_MASK;
   4336		val_clk = pre_div << RT5677_I2S_PD1_SFT;
   4337		regmap_update_bits(rt5677->regmap, RT5677_I2S1_SDP,
   4338			RT5677_I2S_DL_MASK, val_len);
   4339		regmap_update_bits(rt5677->regmap, RT5677_CLK_TREE_CTRL1,
   4340			mask_clk, val_clk);
   4341		break;
   4342	case RT5677_AIF2:
   4343		mask_clk = RT5677_I2S_PD2_MASK;
   4344		val_clk = pre_div << RT5677_I2S_PD2_SFT;
   4345		regmap_update_bits(rt5677->regmap, RT5677_I2S2_SDP,
   4346			RT5677_I2S_DL_MASK, val_len);
   4347		regmap_update_bits(rt5677->regmap, RT5677_CLK_TREE_CTRL1,
   4348			mask_clk, val_clk);
   4349		break;
   4350	case RT5677_AIF3:
   4351		mask_clk = RT5677_I2S_BCLK_MS3_MASK | RT5677_I2S_PD3_MASK;
   4352		val_clk = bclk_ms << RT5677_I2S_BCLK_MS3_SFT |
   4353			pre_div << RT5677_I2S_PD3_SFT;
   4354		regmap_update_bits(rt5677->regmap, RT5677_I2S3_SDP,
   4355			RT5677_I2S_DL_MASK, val_len);
   4356		regmap_update_bits(rt5677->regmap, RT5677_CLK_TREE_CTRL1,
   4357			mask_clk, val_clk);
   4358		break;
   4359	case RT5677_AIF4:
   4360		mask_clk = RT5677_I2S_BCLK_MS4_MASK | RT5677_I2S_PD4_MASK;
   4361		val_clk = bclk_ms << RT5677_I2S_BCLK_MS4_SFT |
   4362			pre_div << RT5677_I2S_PD4_SFT;
   4363		regmap_update_bits(rt5677->regmap, RT5677_I2S4_SDP,
   4364			RT5677_I2S_DL_MASK, val_len);
   4365		regmap_update_bits(rt5677->regmap, RT5677_CLK_TREE_CTRL1,
   4366			mask_clk, val_clk);
   4367		break;
   4368	default:
   4369		break;
   4370	}
   4371
   4372	return 0;
   4373}
   4374
   4375static int rt5677_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
   4376{
   4377	struct snd_soc_component *component = dai->component;
   4378	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   4379	unsigned int reg_val = 0;
   4380
   4381	switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
   4382	case SND_SOC_DAIFMT_CBM_CFM:
   4383		rt5677->master[dai->id] = 1;
   4384		break;
   4385	case SND_SOC_DAIFMT_CBS_CFS:
   4386		reg_val |= RT5677_I2S_MS_S;
   4387		rt5677->master[dai->id] = 0;
   4388		break;
   4389	default:
   4390		return -EINVAL;
   4391	}
   4392
   4393	switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
   4394	case SND_SOC_DAIFMT_NB_NF:
   4395		break;
   4396	case SND_SOC_DAIFMT_IB_NF:
   4397		reg_val |= RT5677_I2S_BP_INV;
   4398		break;
   4399	default:
   4400		return -EINVAL;
   4401	}
   4402
   4403	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
   4404	case SND_SOC_DAIFMT_I2S:
   4405		break;
   4406	case SND_SOC_DAIFMT_LEFT_J:
   4407		reg_val |= RT5677_I2S_DF_LEFT;
   4408		break;
   4409	case SND_SOC_DAIFMT_DSP_A:
   4410		reg_val |= RT5677_I2S_DF_PCM_A;
   4411		break;
   4412	case SND_SOC_DAIFMT_DSP_B:
   4413		reg_val |= RT5677_I2S_DF_PCM_B;
   4414		break;
   4415	default:
   4416		return -EINVAL;
   4417	}
   4418
   4419	switch (dai->id) {
   4420	case RT5677_AIF1:
   4421		regmap_update_bits(rt5677->regmap, RT5677_I2S1_SDP,
   4422			RT5677_I2S_MS_MASK | RT5677_I2S_BP_MASK |
   4423			RT5677_I2S_DF_MASK, reg_val);
   4424		break;
   4425	case RT5677_AIF2:
   4426		regmap_update_bits(rt5677->regmap, RT5677_I2S2_SDP,
   4427			RT5677_I2S_MS_MASK | RT5677_I2S_BP_MASK |
   4428			RT5677_I2S_DF_MASK, reg_val);
   4429		break;
   4430	case RT5677_AIF3:
   4431		regmap_update_bits(rt5677->regmap, RT5677_I2S3_SDP,
   4432			RT5677_I2S_MS_MASK | RT5677_I2S_BP_MASK |
   4433			RT5677_I2S_DF_MASK, reg_val);
   4434		break;
   4435	case RT5677_AIF4:
   4436		regmap_update_bits(rt5677->regmap, RT5677_I2S4_SDP,
   4437			RT5677_I2S_MS_MASK | RT5677_I2S_BP_MASK |
   4438			RT5677_I2S_DF_MASK, reg_val);
   4439		break;
   4440	default:
   4441		break;
   4442	}
   4443
   4444
   4445	return 0;
   4446}
   4447
   4448static int rt5677_set_dai_sysclk(struct snd_soc_dai *dai,
   4449		int clk_id, unsigned int freq, int dir)
   4450{
   4451	struct snd_soc_component *component = dai->component;
   4452	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   4453	unsigned int reg_val = 0;
   4454
   4455	if (freq == rt5677->sysclk && clk_id == rt5677->sysclk_src)
   4456		return 0;
   4457
   4458	switch (clk_id) {
   4459	case RT5677_SCLK_S_MCLK:
   4460		reg_val |= RT5677_SCLK_SRC_MCLK;
   4461		break;
   4462	case RT5677_SCLK_S_PLL1:
   4463		reg_val |= RT5677_SCLK_SRC_PLL1;
   4464		break;
   4465	case RT5677_SCLK_S_RCCLK:
   4466		reg_val |= RT5677_SCLK_SRC_RCCLK;
   4467		break;
   4468	default:
   4469		dev_err(component->dev, "Invalid clock id (%d)\n", clk_id);
   4470		return -EINVAL;
   4471	}
   4472	regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1,
   4473		RT5677_SCLK_SRC_MASK, reg_val);
   4474	rt5677->sysclk = freq;
   4475	rt5677->sysclk_src = clk_id;
   4476
   4477	dev_dbg(dai->dev, "Sysclk is %dHz and clock id is %d\n", freq, clk_id);
   4478
   4479	return 0;
   4480}
   4481
   4482/**
   4483 * rt5677_pll_calc - Calcualte PLL M/N/K code.
   4484 * @freq_in: external clock provided to codec.
   4485 * @freq_out: target clock which codec works on.
   4486 * @pll_code: Pointer to structure with M, N, K, bypass K and bypass M flag.
   4487 *
   4488 * Calcualte M/N/K code and bypass K/M flag to configure PLL for codec.
   4489 *
   4490 * Returns 0 for success or negative error code.
   4491 */
   4492static int rt5677_pll_calc(const unsigned int freq_in,
   4493	const unsigned int freq_out, struct rl6231_pll_code *pll_code)
   4494{
   4495	if (RT5677_PLL_INP_MIN > freq_in)
   4496		return -EINVAL;
   4497
   4498	return rl6231_pll_calc(freq_in, freq_out, pll_code);
   4499}
   4500
   4501static int rt5677_set_dai_pll(struct snd_soc_dai *dai, int pll_id, int source,
   4502			unsigned int freq_in, unsigned int freq_out)
   4503{
   4504	struct snd_soc_component *component = dai->component;
   4505	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   4506	struct rl6231_pll_code pll_code;
   4507	int ret;
   4508
   4509	if (source == rt5677->pll_src && freq_in == rt5677->pll_in &&
   4510	    freq_out == rt5677->pll_out)
   4511		return 0;
   4512
   4513	if (!freq_in || !freq_out) {
   4514		dev_dbg(component->dev, "PLL disabled\n");
   4515
   4516		rt5677->pll_in = 0;
   4517		rt5677->pll_out = 0;
   4518		regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1,
   4519			RT5677_SCLK_SRC_MASK, RT5677_SCLK_SRC_MCLK);
   4520		return 0;
   4521	}
   4522
   4523	switch (source) {
   4524	case RT5677_PLL1_S_MCLK:
   4525		regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1,
   4526			RT5677_PLL1_SRC_MASK, RT5677_PLL1_SRC_MCLK);
   4527		break;
   4528	case RT5677_PLL1_S_BCLK1:
   4529	case RT5677_PLL1_S_BCLK2:
   4530	case RT5677_PLL1_S_BCLK3:
   4531	case RT5677_PLL1_S_BCLK4:
   4532		switch (dai->id) {
   4533		case RT5677_AIF1:
   4534			regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1,
   4535				RT5677_PLL1_SRC_MASK, RT5677_PLL1_SRC_BCLK1);
   4536			break;
   4537		case RT5677_AIF2:
   4538			regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1,
   4539				RT5677_PLL1_SRC_MASK, RT5677_PLL1_SRC_BCLK2);
   4540			break;
   4541		case RT5677_AIF3:
   4542			regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1,
   4543				RT5677_PLL1_SRC_MASK, RT5677_PLL1_SRC_BCLK3);
   4544			break;
   4545		case RT5677_AIF4:
   4546			regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1,
   4547				RT5677_PLL1_SRC_MASK, RT5677_PLL1_SRC_BCLK4);
   4548			break;
   4549		default:
   4550			break;
   4551		}
   4552		break;
   4553	default:
   4554		dev_err(component->dev, "Unknown PLL source %d\n", source);
   4555		return -EINVAL;
   4556	}
   4557
   4558	ret = rt5677_pll_calc(freq_in, freq_out, &pll_code);
   4559	if (ret < 0) {
   4560		dev_err(component->dev, "Unsupported input clock %d\n", freq_in);
   4561		return ret;
   4562	}
   4563
   4564	dev_dbg(component->dev, "m_bypass=%d m=%d n=%d k=%d\n",
   4565		pll_code.m_bp, (pll_code.m_bp ? 0 : pll_code.m_code),
   4566		pll_code.n_code, pll_code.k_code);
   4567
   4568	regmap_write(rt5677->regmap, RT5677_PLL1_CTRL1,
   4569		pll_code.n_code << RT5677_PLL_N_SFT | pll_code.k_code);
   4570	regmap_write(rt5677->regmap, RT5677_PLL1_CTRL2,
   4571		((pll_code.m_bp ? 0 : pll_code.m_code) << RT5677_PLL_M_SFT) |
   4572		(pll_code.m_bp << RT5677_PLL_M_BP_SFT));
   4573
   4574	rt5677->pll_in = freq_in;
   4575	rt5677->pll_out = freq_out;
   4576	rt5677->pll_src = source;
   4577
   4578	return 0;
   4579}
   4580
   4581static int rt5677_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
   4582			unsigned int rx_mask, int slots, int slot_width)
   4583{
   4584	struct snd_soc_component *component = dai->component;
   4585	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   4586	unsigned int val = 0, slot_width_25 = 0;
   4587
   4588	if (rx_mask || tx_mask)
   4589		val |= (1 << 12);
   4590
   4591	switch (slots) {
   4592	case 4:
   4593		val |= (1 << 10);
   4594		break;
   4595	case 6:
   4596		val |= (2 << 10);
   4597		break;
   4598	case 8:
   4599		val |= (3 << 10);
   4600		break;
   4601	case 2:
   4602	default:
   4603		break;
   4604	}
   4605
   4606	switch (slot_width) {
   4607	case 20:
   4608		val |= (1 << 8);
   4609		break;
   4610	case 25:
   4611		slot_width_25 = 0x8080;
   4612		fallthrough;
   4613	case 24:
   4614		val |= (2 << 8);
   4615		break;
   4616	case 32:
   4617		val |= (3 << 8);
   4618		break;
   4619	case 16:
   4620	default:
   4621		break;
   4622	}
   4623
   4624	switch (dai->id) {
   4625	case RT5677_AIF1:
   4626		regmap_update_bits(rt5677->regmap, RT5677_TDM1_CTRL1, 0x1f00,
   4627			val);
   4628		regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC, 0x8000,
   4629			slot_width_25);
   4630		break;
   4631	case RT5677_AIF2:
   4632		regmap_update_bits(rt5677->regmap, RT5677_TDM2_CTRL1, 0x1f00,
   4633			val);
   4634		regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC, 0x80,
   4635			slot_width_25);
   4636		break;
   4637	default:
   4638		break;
   4639	}
   4640
   4641	return 0;
   4642}
   4643
   4644static int rt5677_set_bias_level(struct snd_soc_component *component,
   4645			enum snd_soc_bias_level level)
   4646{
   4647	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   4648	enum snd_soc_bias_level prev_bias =
   4649		snd_soc_component_get_bias_level(component);
   4650
   4651	switch (level) {
   4652	case SND_SOC_BIAS_ON:
   4653		break;
   4654
   4655	case SND_SOC_BIAS_PREPARE:
   4656		if (prev_bias == SND_SOC_BIAS_STANDBY) {
   4657
   4658			regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG1,
   4659				RT5677_LDO1_SEL_MASK | RT5677_LDO2_SEL_MASK,
   4660				5 << RT5677_LDO1_SEL_SFT |
   4661				5 << RT5677_LDO2_SEL_SFT);
   4662			regmap_update_bits(rt5677->regmap,
   4663				RT5677_PR_BASE + RT5677_BIAS_CUR4,
   4664				0x0f00, 0x0f00);
   4665			regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG1,
   4666				RT5677_PWR_FV1 | RT5677_PWR_FV2 |
   4667				RT5677_PWR_VREF1 | RT5677_PWR_MB |
   4668				RT5677_PWR_BG | RT5677_PWR_VREF2,
   4669				RT5677_PWR_VREF1 | RT5677_PWR_MB |
   4670				RT5677_PWR_BG | RT5677_PWR_VREF2);
   4671			rt5677->is_vref_slow = false;
   4672			regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2,
   4673				RT5677_PWR_CORE, RT5677_PWR_CORE);
   4674			regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC,
   4675				0x1, 0x1);
   4676		}
   4677		break;
   4678
   4679	case SND_SOC_BIAS_STANDBY:
   4680		if (prev_bias == SND_SOC_BIAS_OFF &&
   4681				rt5677->dsp_vad_en_request) {
   4682			/* Re-enable the DSP if it was turned off at suspend */
   4683			rt5677->dsp_vad_en = true;
   4684			/* The delay is to wait for MCLK */
   4685			schedule_delayed_work(&rt5677->dsp_work,
   4686					msecs_to_jiffies(1000));
   4687		}
   4688		break;
   4689
   4690	case SND_SOC_BIAS_OFF:
   4691		flush_delayed_work(&rt5677->dsp_work);
   4692		if (rt5677->is_dsp_mode) {
   4693			/* Turn off the DSP before suspend */
   4694			rt5677->dsp_vad_en = false;
   4695			schedule_delayed_work(&rt5677->dsp_work, 0);
   4696			flush_delayed_work(&rt5677->dsp_work);
   4697		}
   4698
   4699		regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC, 0x1, 0x0);
   4700		regmap_write(rt5677->regmap, RT5677_PWR_DIG1, 0x0000);
   4701		regmap_write(rt5677->regmap, RT5677_PWR_ANLG1,
   4702			2 << RT5677_LDO1_SEL_SFT |
   4703			2 << RT5677_LDO2_SEL_SFT);
   4704		regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2,
   4705			RT5677_PWR_CORE, 0);
   4706		regmap_update_bits(rt5677->regmap,
   4707			RT5677_PR_BASE + RT5677_BIAS_CUR4, 0x0f00, 0x0000);
   4708
   4709		if (rt5677->dsp_vad_en)
   4710			rt5677_set_dsp_vad(component, true);
   4711		break;
   4712
   4713	default:
   4714		break;
   4715	}
   4716
   4717	return 0;
   4718}
   4719
   4720#ifdef CONFIG_GPIOLIB
   4721static void rt5677_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
   4722{
   4723	struct rt5677_priv *rt5677 = gpiochip_get_data(chip);
   4724
   4725	switch (offset) {
   4726	case RT5677_GPIO1 ... RT5677_GPIO5:
   4727		regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL2,
   4728			0x1 << (offset * 3 + 1), !!value << (offset * 3 + 1));
   4729		break;
   4730
   4731	case RT5677_GPIO6:
   4732		regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL3,
   4733			RT5677_GPIO6_OUT_MASK, !!value << RT5677_GPIO6_OUT_SFT);
   4734		break;
   4735
   4736	default:
   4737		break;
   4738	}
   4739}
   4740
   4741static int rt5677_gpio_direction_out(struct gpio_chip *chip,
   4742				     unsigned offset, int value)
   4743{
   4744	struct rt5677_priv *rt5677 = gpiochip_get_data(chip);
   4745
   4746	switch (offset) {
   4747	case RT5677_GPIO1 ... RT5677_GPIO5:
   4748		regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL2,
   4749			0x3 << (offset * 3 + 1),
   4750			(0x2 | !!value) << (offset * 3 + 1));
   4751		break;
   4752
   4753	case RT5677_GPIO6:
   4754		regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL3,
   4755			RT5677_GPIO6_DIR_MASK | RT5677_GPIO6_OUT_MASK,
   4756			RT5677_GPIO6_DIR_OUT | !!value << RT5677_GPIO6_OUT_SFT);
   4757		break;
   4758
   4759	default:
   4760		break;
   4761	}
   4762
   4763	return 0;
   4764}
   4765
   4766static int rt5677_gpio_get(struct gpio_chip *chip, unsigned offset)
   4767{
   4768	struct rt5677_priv *rt5677 = gpiochip_get_data(chip);
   4769	int value, ret;
   4770
   4771	ret = regmap_read(rt5677->regmap, RT5677_GPIO_ST, &value);
   4772	if (ret < 0)
   4773		return ret;
   4774
   4775	return (value & (0x1 << offset)) >> offset;
   4776}
   4777
   4778static int rt5677_gpio_direction_in(struct gpio_chip *chip, unsigned offset)
   4779{
   4780	struct rt5677_priv *rt5677 = gpiochip_get_data(chip);
   4781
   4782	switch (offset) {
   4783	case RT5677_GPIO1 ... RT5677_GPIO5:
   4784		regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL2,
   4785			0x1 << (offset * 3 + 2), 0x0);
   4786		break;
   4787
   4788	case RT5677_GPIO6:
   4789		regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL3,
   4790			RT5677_GPIO6_DIR_MASK, RT5677_GPIO6_DIR_IN);
   4791		break;
   4792
   4793	default:
   4794		break;
   4795	}
   4796
   4797	return 0;
   4798}
   4799
   4800/** Configures the gpio as
   4801 *   0 - floating
   4802 *   1 - pull down
   4803 *   2 - pull up
   4804 */
   4805static void rt5677_gpio_config(struct rt5677_priv *rt5677, unsigned offset,
   4806		int value)
   4807{
   4808	int shift;
   4809
   4810	switch (offset) {
   4811	case RT5677_GPIO1 ... RT5677_GPIO2:
   4812		shift = 2 * (1 - offset);
   4813		regmap_update_bits(rt5677->regmap,
   4814			RT5677_PR_BASE + RT5677_DIG_IN_PIN_ST_CTRL2,
   4815			0x3 << shift,
   4816			(value & 0x3) << shift);
   4817		break;
   4818
   4819	case RT5677_GPIO3 ... RT5677_GPIO6:
   4820		shift = 2 * (9 - offset);
   4821		regmap_update_bits(rt5677->regmap,
   4822			RT5677_PR_BASE + RT5677_DIG_IN_PIN_ST_CTRL3,
   4823			0x3 << shift,
   4824			(value & 0x3) << shift);
   4825		break;
   4826
   4827	default:
   4828		break;
   4829	}
   4830}
   4831
   4832static int rt5677_to_irq(struct gpio_chip *chip, unsigned offset)
   4833{
   4834	struct rt5677_priv *rt5677 = gpiochip_get_data(chip);
   4835	int irq;
   4836
   4837	if ((rt5677->pdata.jd1_gpio == 1 && offset == RT5677_GPIO1) ||
   4838		(rt5677->pdata.jd1_gpio == 2 &&
   4839			offset == RT5677_GPIO2) ||
   4840		(rt5677->pdata.jd1_gpio == 3 &&
   4841			offset == RT5677_GPIO3)) {
   4842		irq = RT5677_IRQ_JD1;
   4843	} else if ((rt5677->pdata.jd2_gpio == 1 && offset == RT5677_GPIO4) ||
   4844		(rt5677->pdata.jd2_gpio == 2 &&
   4845			offset == RT5677_GPIO5) ||
   4846		(rt5677->pdata.jd2_gpio == 3 &&
   4847			offset == RT5677_GPIO6)) {
   4848		irq = RT5677_IRQ_JD2;
   4849	} else if ((rt5677->pdata.jd3_gpio == 1 &&
   4850			offset == RT5677_GPIO4) ||
   4851		(rt5677->pdata.jd3_gpio == 2 &&
   4852			offset == RT5677_GPIO5) ||
   4853		(rt5677->pdata.jd3_gpio == 3 &&
   4854			offset == RT5677_GPIO6)) {
   4855		irq = RT5677_IRQ_JD3;
   4856	} else {
   4857		return -ENXIO;
   4858	}
   4859
   4860	return irq_create_mapping(rt5677->domain, irq);
   4861}
   4862
   4863static const struct gpio_chip rt5677_template_chip = {
   4864	.label			= RT5677_DRV_NAME,
   4865	.owner			= THIS_MODULE,
   4866	.direction_output	= rt5677_gpio_direction_out,
   4867	.set			= rt5677_gpio_set,
   4868	.direction_input	= rt5677_gpio_direction_in,
   4869	.get			= rt5677_gpio_get,
   4870	.to_irq			= rt5677_to_irq,
   4871	.can_sleep		= 1,
   4872};
   4873
   4874static void rt5677_init_gpio(struct i2c_client *i2c)
   4875{
   4876	struct rt5677_priv *rt5677 = i2c_get_clientdata(i2c);
   4877	int ret;
   4878
   4879	rt5677->gpio_chip = rt5677_template_chip;
   4880	rt5677->gpio_chip.ngpio = RT5677_GPIO_NUM;
   4881	rt5677->gpio_chip.parent = &i2c->dev;
   4882	rt5677->gpio_chip.base = -1;
   4883
   4884	ret = gpiochip_add_data(&rt5677->gpio_chip, rt5677);
   4885	if (ret != 0)
   4886		dev_err(&i2c->dev, "Failed to add GPIOs: %d\n", ret);
   4887}
   4888
   4889static void rt5677_free_gpio(struct i2c_client *i2c)
   4890{
   4891	struct rt5677_priv *rt5677 = i2c_get_clientdata(i2c);
   4892
   4893	gpiochip_remove(&rt5677->gpio_chip);
   4894}
   4895#else
   4896static void rt5677_gpio_config(struct rt5677_priv *rt5677, unsigned offset,
   4897		int value)
   4898{
   4899}
   4900
   4901static void rt5677_init_gpio(struct i2c_client *i2c)
   4902{
   4903}
   4904
   4905static void rt5677_free_gpio(struct i2c_client *i2c)
   4906{
   4907}
   4908#endif
   4909
   4910static int rt5677_probe(struct snd_soc_component *component)
   4911{
   4912	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
   4913	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   4914	int i;
   4915
   4916	rt5677->component = component;
   4917
   4918	if (rt5677->pdata.dmic2_clk_pin == RT5677_DMIC_CLK2) {
   4919		snd_soc_dapm_add_routes(dapm,
   4920			rt5677_dmic2_clk_2,
   4921			ARRAY_SIZE(rt5677_dmic2_clk_2));
   4922	} else { /*use dmic1 clock by default*/
   4923		snd_soc_dapm_add_routes(dapm,
   4924			rt5677_dmic2_clk_1,
   4925			ARRAY_SIZE(rt5677_dmic2_clk_1));
   4926	}
   4927
   4928	snd_soc_component_force_bias_level(component, SND_SOC_BIAS_OFF);
   4929
   4930	regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC,
   4931			~RT5677_IRQ_DEBOUNCE_SEL_MASK, 0x0020);
   4932	regmap_write(rt5677->regmap, RT5677_PWR_DSP2,
   4933			RT5677_PWR_SLIM_ISO | RT5677_PWR_CORE_ISO);
   4934
   4935	for (i = 0; i < RT5677_GPIO_NUM; i++)
   4936		rt5677_gpio_config(rt5677, i, rt5677->pdata.gpio_config[i]);
   4937
   4938	mutex_init(&rt5677->dsp_cmd_lock);
   4939	mutex_init(&rt5677->dsp_pri_lock);
   4940
   4941	return 0;
   4942}
   4943
   4944static void rt5677_remove(struct snd_soc_component *component)
   4945{
   4946	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   4947
   4948	cancel_delayed_work_sync(&rt5677->dsp_work);
   4949
   4950	regmap_write(rt5677->regmap, RT5677_RESET, 0x10ec);
   4951	gpiod_set_value_cansleep(rt5677->pow_ldo2, 0);
   4952	gpiod_set_value_cansleep(rt5677->reset_pin, 1);
   4953}
   4954
   4955#ifdef CONFIG_PM
   4956static int rt5677_suspend(struct snd_soc_component *component)
   4957{
   4958	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   4959
   4960	if (rt5677->irq) {
   4961		cancel_delayed_work_sync(&rt5677->resume_irq_check);
   4962		disable_irq(rt5677->irq);
   4963	}
   4964
   4965	if (!rt5677->dsp_vad_en) {
   4966		regcache_cache_only(rt5677->regmap, true);
   4967		regcache_mark_dirty(rt5677->regmap);
   4968
   4969		gpiod_set_value_cansleep(rt5677->pow_ldo2, 0);
   4970		gpiod_set_value_cansleep(rt5677->reset_pin, 1);
   4971	}
   4972
   4973	return 0;
   4974}
   4975
   4976static int rt5677_resume(struct snd_soc_component *component)
   4977{
   4978	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
   4979
   4980	if (!rt5677->dsp_vad_en) {
   4981		rt5677->pll_src = 0;
   4982		rt5677->pll_in = 0;
   4983		rt5677->pll_out = 0;
   4984		gpiod_set_value_cansleep(rt5677->pow_ldo2, 1);
   4985		gpiod_set_value_cansleep(rt5677->reset_pin, 0);
   4986		if (rt5677->pow_ldo2 || rt5677->reset_pin)
   4987			msleep(10);
   4988
   4989		regcache_cache_only(rt5677->regmap, false);
   4990		regcache_sync(rt5677->regmap);
   4991	}
   4992
   4993	if (rt5677->irq) {
   4994		enable_irq(rt5677->irq);
   4995		schedule_delayed_work(&rt5677->resume_irq_check, 0);
   4996	}
   4997
   4998	return 0;
   4999}
   5000#else
   5001#define rt5677_suspend NULL
   5002#define rt5677_resume NULL
   5003#endif
   5004
   5005static int rt5677_read(void *context, unsigned int reg, unsigned int *val)
   5006{
   5007	struct i2c_client *client = context;
   5008	struct rt5677_priv *rt5677 = i2c_get_clientdata(client);
   5009
   5010	if (rt5677->is_dsp_mode) {
   5011		if (reg > 0xff) {
   5012			mutex_lock(&rt5677->dsp_pri_lock);
   5013			rt5677_dsp_mode_i2c_write(rt5677, RT5677_PRIV_INDEX,
   5014				reg & 0xff);
   5015			rt5677_dsp_mode_i2c_read(rt5677, RT5677_PRIV_DATA, val);
   5016			mutex_unlock(&rt5677->dsp_pri_lock);
   5017		} else {
   5018			rt5677_dsp_mode_i2c_read(rt5677, reg, val);
   5019		}
   5020	} else {
   5021		regmap_read(rt5677->regmap_physical, reg, val);
   5022	}
   5023
   5024	return 0;
   5025}
   5026
   5027static int rt5677_write(void *context, unsigned int reg, unsigned int val)
   5028{
   5029	struct i2c_client *client = context;
   5030	struct rt5677_priv *rt5677 = i2c_get_clientdata(client);
   5031
   5032	if (rt5677->is_dsp_mode) {
   5033		if (reg > 0xff) {
   5034			mutex_lock(&rt5677->dsp_pri_lock);
   5035			rt5677_dsp_mode_i2c_write(rt5677, RT5677_PRIV_INDEX,
   5036				reg & 0xff);
   5037			rt5677_dsp_mode_i2c_write(rt5677, RT5677_PRIV_DATA,
   5038				val);
   5039			mutex_unlock(&rt5677->dsp_pri_lock);
   5040		} else {
   5041			rt5677_dsp_mode_i2c_write(rt5677, reg, val);
   5042		}
   5043	} else {
   5044		regmap_write(rt5677->regmap_physical, reg, val);
   5045	}
   5046
   5047	return 0;
   5048}
   5049
   5050#define RT5677_STEREO_RATES SNDRV_PCM_RATE_8000_96000
   5051#define RT5677_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
   5052			SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
   5053
   5054static const struct snd_soc_dai_ops rt5677_aif_dai_ops = {
   5055	.hw_params = rt5677_hw_params,
   5056	.set_fmt = rt5677_set_dai_fmt,
   5057	.set_sysclk = rt5677_set_dai_sysclk,
   5058	.set_pll = rt5677_set_dai_pll,
   5059	.set_tdm_slot = rt5677_set_tdm_slot,
   5060};
   5061
   5062static const struct snd_soc_dai_ops rt5677_dsp_dai_ops = {
   5063	.set_sysclk = rt5677_set_dai_sysclk,
   5064	.set_pll = rt5677_set_dai_pll,
   5065};
   5066
   5067static struct snd_soc_dai_driver rt5677_dai[] = {
   5068	{
   5069		.name = "rt5677-aif1",
   5070		.id = RT5677_AIF1,
   5071		.playback = {
   5072			.stream_name = "AIF1 Playback",
   5073			.channels_min = 1,
   5074			.channels_max = 2,
   5075			.rates = RT5677_STEREO_RATES,
   5076			.formats = RT5677_FORMATS,
   5077		},
   5078		.capture = {
   5079			.stream_name = "AIF1 Capture",
   5080			.channels_min = 1,
   5081			.channels_max = 2,
   5082			.rates = RT5677_STEREO_RATES,
   5083			.formats = RT5677_FORMATS,
   5084		},
   5085		.ops = &rt5677_aif_dai_ops,
   5086	},
   5087	{
   5088		.name = "rt5677-aif2",
   5089		.id = RT5677_AIF2,
   5090		.playback = {
   5091			.stream_name = "AIF2 Playback",
   5092			.channels_min = 1,
   5093			.channels_max = 2,
   5094			.rates = RT5677_STEREO_RATES,
   5095			.formats = RT5677_FORMATS,
   5096		},
   5097		.capture = {
   5098			.stream_name = "AIF2 Capture",
   5099			.channels_min = 1,
   5100			.channels_max = 2,
   5101			.rates = RT5677_STEREO_RATES,
   5102			.formats = RT5677_FORMATS,
   5103		},
   5104		.ops = &rt5677_aif_dai_ops,
   5105	},
   5106	{
   5107		.name = "rt5677-aif3",
   5108		.id = RT5677_AIF3,
   5109		.playback = {
   5110			.stream_name = "AIF3 Playback",
   5111			.channels_min = 1,
   5112			.channels_max = 2,
   5113			.rates = RT5677_STEREO_RATES,
   5114			.formats = RT5677_FORMATS,
   5115		},
   5116		.capture = {
   5117			.stream_name = "AIF3 Capture",
   5118			.channels_min = 1,
   5119			.channels_max = 2,
   5120			.rates = RT5677_STEREO_RATES,
   5121			.formats = RT5677_FORMATS,
   5122		},
   5123		.ops = &rt5677_aif_dai_ops,
   5124	},
   5125	{
   5126		.name = "rt5677-aif4",
   5127		.id = RT5677_AIF4,
   5128		.playback = {
   5129			.stream_name = "AIF4 Playback",
   5130			.channels_min = 1,
   5131			.channels_max = 2,
   5132			.rates = RT5677_STEREO_RATES,
   5133			.formats = RT5677_FORMATS,
   5134		},
   5135		.capture = {
   5136			.stream_name = "AIF4 Capture",
   5137			.channels_min = 1,
   5138			.channels_max = 2,
   5139			.rates = RT5677_STEREO_RATES,
   5140			.formats = RT5677_FORMATS,
   5141		},
   5142		.ops = &rt5677_aif_dai_ops,
   5143	},
   5144	{
   5145		.name = "rt5677-slimbus",
   5146		.id = RT5677_AIF5,
   5147		.playback = {
   5148			.stream_name = "SLIMBus Playback",
   5149			.channels_min = 1,
   5150			.channels_max = 2,
   5151			.rates = RT5677_STEREO_RATES,
   5152			.formats = RT5677_FORMATS,
   5153		},
   5154		.capture = {
   5155			.stream_name = "SLIMBus Capture",
   5156			.channels_min = 1,
   5157			.channels_max = 2,
   5158			.rates = RT5677_STEREO_RATES,
   5159			.formats = RT5677_FORMATS,
   5160		},
   5161		.ops = &rt5677_aif_dai_ops,
   5162	},
   5163	{
   5164		.name = "rt5677-dspbuffer",
   5165		.id = RT5677_DSPBUFF,
   5166		.capture = {
   5167			.stream_name = "DSP Buffer",
   5168			.channels_min = 1,
   5169			.channels_max = 1,
   5170			.rates = SNDRV_PCM_RATE_16000,
   5171			.formats = SNDRV_PCM_FMTBIT_S16_LE,
   5172		},
   5173		.ops = &rt5677_dsp_dai_ops,
   5174	},
   5175};
   5176
   5177static const struct snd_soc_component_driver soc_component_dev_rt5677 = {
   5178	.name			= RT5677_DRV_NAME,
   5179	.probe			= rt5677_probe,
   5180	.remove			= rt5677_remove,
   5181	.suspend		= rt5677_suspend,
   5182	.resume			= rt5677_resume,
   5183	.set_bias_level		= rt5677_set_bias_level,
   5184	.controls		= rt5677_snd_controls,
   5185	.num_controls		= ARRAY_SIZE(rt5677_snd_controls),
   5186	.dapm_widgets		= rt5677_dapm_widgets,
   5187	.num_dapm_widgets	= ARRAY_SIZE(rt5677_dapm_widgets),
   5188	.dapm_routes		= rt5677_dapm_routes,
   5189	.num_dapm_routes	= ARRAY_SIZE(rt5677_dapm_routes),
   5190	.use_pmdown_time	= 1,
   5191	.endianness		= 1,
   5192	.non_legacy_dai_naming	= 1,
   5193};
   5194
   5195static const struct regmap_config rt5677_regmap_physical = {
   5196	.name = "physical",
   5197	.reg_bits = 8,
   5198	.val_bits = 16,
   5199
   5200	.max_register = RT5677_VENDOR_ID2 + 1 + (ARRAY_SIZE(rt5677_ranges) *
   5201						RT5677_PR_SPACING),
   5202	.readable_reg = rt5677_readable_register,
   5203
   5204	.cache_type = REGCACHE_NONE,
   5205	.ranges = rt5677_ranges,
   5206	.num_ranges = ARRAY_SIZE(rt5677_ranges),
   5207};
   5208
   5209static const struct regmap_config rt5677_regmap = {
   5210	.reg_bits = 8,
   5211	.val_bits = 16,
   5212
   5213	.max_register = RT5677_VENDOR_ID2 + 1 + (ARRAY_SIZE(rt5677_ranges) *
   5214						RT5677_PR_SPACING),
   5215
   5216	.volatile_reg = rt5677_volatile_register,
   5217	.readable_reg = rt5677_readable_register,
   5218	.reg_read = rt5677_read,
   5219	.reg_write = rt5677_write,
   5220
   5221	.cache_type = REGCACHE_RBTREE,
   5222	.reg_defaults = rt5677_reg,
   5223	.num_reg_defaults = ARRAY_SIZE(rt5677_reg),
   5224	.ranges = rt5677_ranges,
   5225	.num_ranges = ARRAY_SIZE(rt5677_ranges),
   5226};
   5227
   5228static const struct of_device_id rt5677_of_match[] = {
   5229	{ .compatible = "realtek,rt5677", .data = (const void *)RT5677 },
   5230	{ }
   5231};
   5232MODULE_DEVICE_TABLE(of, rt5677_of_match);
   5233
   5234static const struct acpi_device_id rt5677_acpi_match[] = {
   5235	{ "RT5677CE", RT5677 },
   5236	{ }
   5237};
   5238MODULE_DEVICE_TABLE(acpi, rt5677_acpi_match);
   5239
   5240static void rt5677_read_device_properties(struct rt5677_priv *rt5677,
   5241		struct device *dev)
   5242{
   5243	u32 val;
   5244
   5245	rt5677->pdata.in1_diff =
   5246		device_property_read_bool(dev, "IN1") ||
   5247		device_property_read_bool(dev, "realtek,in1-differential");
   5248
   5249	rt5677->pdata.in2_diff =
   5250		device_property_read_bool(dev, "IN2") ||
   5251		device_property_read_bool(dev, "realtek,in2-differential");
   5252
   5253	rt5677->pdata.lout1_diff =
   5254		device_property_read_bool(dev, "OUT1") ||
   5255		device_property_read_bool(dev, "realtek,lout1-differential");
   5256
   5257	rt5677->pdata.lout2_diff =
   5258		device_property_read_bool(dev, "OUT2") ||
   5259		device_property_read_bool(dev, "realtek,lout2-differential");
   5260
   5261	rt5677->pdata.lout3_diff =
   5262		device_property_read_bool(dev, "OUT3") ||
   5263		device_property_read_bool(dev, "realtek,lout3-differential");
   5264
   5265	device_property_read_u8_array(dev, "realtek,gpio-config",
   5266				      rt5677->pdata.gpio_config,
   5267				      RT5677_GPIO_NUM);
   5268
   5269	if (!device_property_read_u32(dev, "DCLK", &val) ||
   5270	    !device_property_read_u32(dev, "realtek,dmic2_clk_pin", &val))
   5271		rt5677->pdata.dmic2_clk_pin = val;
   5272
   5273	if (!device_property_read_u32(dev, "JD1", &val) ||
   5274	    !device_property_read_u32(dev, "realtek,jd1-gpio", &val))
   5275		rt5677->pdata.jd1_gpio = val;
   5276
   5277	if (!device_property_read_u32(dev, "JD2", &val) ||
   5278	    !device_property_read_u32(dev, "realtek,jd2-gpio", &val))
   5279		rt5677->pdata.jd2_gpio = val;
   5280
   5281	if (!device_property_read_u32(dev, "JD3", &val) ||
   5282	    !device_property_read_u32(dev, "realtek,jd3-gpio", &val))
   5283		rt5677->pdata.jd3_gpio = val;
   5284}
   5285
   5286struct rt5677_irq_desc {
   5287	unsigned int enable_mask;
   5288	unsigned int status_mask;
   5289	unsigned int polarity_mask;
   5290};
   5291
   5292static const struct rt5677_irq_desc rt5677_irq_descs[] = {
   5293	[RT5677_IRQ_JD1] = {
   5294		.enable_mask = RT5677_EN_IRQ_GPIO_JD1,
   5295		.status_mask = RT5677_STA_GPIO_JD1,
   5296		.polarity_mask = RT5677_INV_GPIO_JD1,
   5297	},
   5298	[RT5677_IRQ_JD2] = {
   5299		.enable_mask = RT5677_EN_IRQ_GPIO_JD2,
   5300		.status_mask = RT5677_STA_GPIO_JD2,
   5301		.polarity_mask = RT5677_INV_GPIO_JD2,
   5302	},
   5303	[RT5677_IRQ_JD3] = {
   5304		.enable_mask = RT5677_EN_IRQ_GPIO_JD3,
   5305		.status_mask = RT5677_STA_GPIO_JD3,
   5306		.polarity_mask = RT5677_INV_GPIO_JD3,
   5307	},
   5308};
   5309
   5310static bool rt5677_check_hotword(struct rt5677_priv *rt5677)
   5311{
   5312	int reg_gpio;
   5313
   5314	if (!rt5677->is_dsp_mode)
   5315		return false;
   5316
   5317	if (regmap_read(rt5677->regmap, RT5677_GPIO_CTRL1, &reg_gpio))
   5318		return false;
   5319
   5320	/* Firmware sets GPIO1 pin to be GPIO1 after hotword is detected */
   5321	if ((reg_gpio & RT5677_GPIO1_PIN_MASK) == RT5677_GPIO1_PIN_IRQ)
   5322		return false;
   5323
   5324	/* Set GPIO1 pin back to be IRQ output for jack detect */
   5325	regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL1,
   5326			RT5677_GPIO1_PIN_MASK, RT5677_GPIO1_PIN_IRQ);
   5327
   5328	rt5677_spi_hotword_detected();
   5329	return true;
   5330}
   5331
   5332static irqreturn_t rt5677_irq(int unused, void *data)
   5333{
   5334	struct rt5677_priv *rt5677 = data;
   5335	int ret, loop, i, reg_irq, virq;
   5336	bool irq_fired = false;
   5337
   5338	mutex_lock(&rt5677->irq_lock);
   5339
   5340	/*
   5341	 * Loop to handle interrupts until the last i2c read shows no pending
   5342	 * irqs. The interrupt line is shared by multiple interrupt sources.
   5343	 * After the regmap_read() below, a new interrupt source line may
   5344	 * become high before the regmap_write() finishes, so there isn't a
   5345	 * rising edge on the shared interrupt line for the new interrupt. Thus,
   5346	 * the loop is needed to avoid missing irqs.
   5347	 *
   5348	 * A safeguard of 20 loops is used to avoid hanging in the irq handler
   5349	 * if there is something wrong with the interrupt status update. The
   5350	 * interrupt sources here are audio jack plug/unplug events which
   5351	 * shouldn't happen at a high frequency for a long period of time.
   5352	 * Empirically, more than 3 loops have never been seen.
   5353	 */
   5354	for (loop = 0; loop < 20; loop++) {
   5355		/* Read interrupt status */
   5356		ret = regmap_read(rt5677->regmap, RT5677_IRQ_CTRL1, &reg_irq);
   5357		if (ret) {
   5358			dev_err(rt5677->dev, "failed reading IRQ status: %d\n",
   5359				ret);
   5360			goto exit;
   5361		}
   5362
   5363		irq_fired = false;
   5364		for (i = 0; i < RT5677_IRQ_NUM; i++) {
   5365			if (reg_irq & rt5677_irq_descs[i].status_mask) {
   5366				irq_fired = true;
   5367				virq = irq_find_mapping(rt5677->domain, i);
   5368				if (virq)
   5369					handle_nested_irq(virq);
   5370
   5371				/* Clear the interrupt by flipping the polarity
   5372				 * of the interrupt source line that fired
   5373				 */
   5374				reg_irq ^= rt5677_irq_descs[i].polarity_mask;
   5375			}
   5376		}
   5377
   5378		/* Exit the loop only when we know for sure that GPIO1 pin
   5379		 * was low at some point since irq_lock was acquired. Any event
   5380		 * after that point creates a rising edge that triggers another
   5381		 * call to rt5677_irq().
   5382		 */
   5383		if (!irq_fired && !rt5677_check_hotword(rt5677))
   5384			goto exit;
   5385
   5386		ret = regmap_write(rt5677->regmap, RT5677_IRQ_CTRL1, reg_irq);
   5387		if (ret) {
   5388			dev_err(rt5677->dev, "failed updating IRQ status: %d\n",
   5389				ret);
   5390			goto exit;
   5391		}
   5392	}
   5393exit:
   5394	WARN_ON_ONCE(loop == 20);
   5395	mutex_unlock(&rt5677->irq_lock);
   5396	if (irq_fired)
   5397		return IRQ_HANDLED;
   5398	else
   5399		return IRQ_NONE;
   5400}
   5401
   5402static void rt5677_resume_irq_check(struct work_struct *work)
   5403{
   5404	int i, virq;
   5405	struct rt5677_priv *rt5677 =
   5406		container_of(work, struct rt5677_priv, resume_irq_check.work);
   5407
   5408	/* This is needed to check and clear the interrupt status register
   5409	 * at resume. If the headset is plugged/unplugged when the device is
   5410	 * fully suspended, there won't be a rising edge at resume to trigger
   5411	 * the interrupt. Without this, we miss the next unplug/plug event.
   5412	 */
   5413	rt5677_irq(0, rt5677);
   5414
   5415	/* Call all enabled jack detect irq handlers again. This is needed in
   5416	 * addition to the above check for a corner case caused by jack gpio
   5417	 * debounce. After codec irq is disabled at suspend, the delayed work
   5418	 * scheduled by soc-jack may run and read wrong jack gpio values, since
   5419	 * the regmap is in cache only mode. At resume, there is no irq because
   5420	 * rt5677_irq has already ran and cleared the irq status at suspend.
   5421	 * Without this explicit check, unplug the headset right after suspend
   5422	 * starts, then after resume the headset is still shown as plugged in.
   5423	 */
   5424	mutex_lock(&rt5677->irq_lock);
   5425	for (i = 0; i < RT5677_IRQ_NUM; i++) {
   5426		if (rt5677->irq_en & rt5677_irq_descs[i].enable_mask) {
   5427			virq = irq_find_mapping(rt5677->domain, i);
   5428			if (virq)
   5429				handle_nested_irq(virq);
   5430		}
   5431	}
   5432	mutex_unlock(&rt5677->irq_lock);
   5433}
   5434
   5435static void rt5677_irq_bus_lock(struct irq_data *data)
   5436{
   5437	struct rt5677_priv *rt5677 = irq_data_get_irq_chip_data(data);
   5438
   5439	mutex_lock(&rt5677->irq_lock);
   5440}
   5441
   5442static void rt5677_irq_bus_sync_unlock(struct irq_data *data)
   5443{
   5444	struct rt5677_priv *rt5677 = irq_data_get_irq_chip_data(data);
   5445
   5446	// Set the enable/disable bits for the jack detect IRQs.
   5447	regmap_update_bits(rt5677->regmap, RT5677_IRQ_CTRL1,
   5448			RT5677_EN_IRQ_GPIO_JD1 | RT5677_EN_IRQ_GPIO_JD2 |
   5449			RT5677_EN_IRQ_GPIO_JD3, rt5677->irq_en);
   5450	mutex_unlock(&rt5677->irq_lock);
   5451}
   5452
   5453static void rt5677_irq_enable(struct irq_data *data)
   5454{
   5455	struct rt5677_priv *rt5677 = irq_data_get_irq_chip_data(data);
   5456
   5457	rt5677->irq_en |= rt5677_irq_descs[data->hwirq].enable_mask;
   5458}
   5459
   5460static void rt5677_irq_disable(struct irq_data *data)
   5461{
   5462	struct rt5677_priv *rt5677 = irq_data_get_irq_chip_data(data);
   5463
   5464	rt5677->irq_en &= ~rt5677_irq_descs[data->hwirq].enable_mask;
   5465}
   5466
   5467static struct irq_chip rt5677_irq_chip = {
   5468	.name			= "rt5677_irq_chip",
   5469	.irq_bus_lock		= rt5677_irq_bus_lock,
   5470	.irq_bus_sync_unlock	= rt5677_irq_bus_sync_unlock,
   5471	.irq_disable		= rt5677_irq_disable,
   5472	.irq_enable		= rt5677_irq_enable,
   5473};
   5474
   5475static int rt5677_irq_map(struct irq_domain *h, unsigned int virq,
   5476			  irq_hw_number_t hw)
   5477{
   5478	struct rt5677_priv *rt5677 = h->host_data;
   5479
   5480	irq_set_chip_data(virq, rt5677);
   5481	irq_set_chip(virq, &rt5677_irq_chip);
   5482	irq_set_nested_thread(virq, 1);
   5483	irq_set_noprobe(virq);
   5484	return 0;
   5485}
   5486
   5487
   5488static const struct irq_domain_ops rt5677_domain_ops = {
   5489	.map	= rt5677_irq_map,
   5490	.xlate	= irq_domain_xlate_twocell,
   5491};
   5492
   5493static int rt5677_init_irq(struct i2c_client *i2c)
   5494{
   5495	int ret;
   5496	struct rt5677_priv *rt5677 = i2c_get_clientdata(i2c);
   5497	unsigned int jd_mask = 0, jd_val = 0;
   5498
   5499	if (!rt5677->pdata.jd1_gpio &&
   5500		!rt5677->pdata.jd2_gpio &&
   5501		!rt5677->pdata.jd3_gpio)
   5502		return 0;
   5503
   5504	if (!i2c->irq) {
   5505		dev_err(&i2c->dev, "No interrupt specified\n");
   5506		return -EINVAL;
   5507	}
   5508
   5509	mutex_init(&rt5677->irq_lock);
   5510	INIT_DELAYED_WORK(&rt5677->resume_irq_check, rt5677_resume_irq_check);
   5511
   5512	/*
   5513	 * Select RC as the debounce clock so that GPIO works even when
   5514	 * MCLK is gated which happens when there is no audio stream
   5515	 * (SND_SOC_BIAS_OFF).
   5516	 */
   5517	regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC,
   5518			RT5677_IRQ_DEBOUNCE_SEL_MASK,
   5519			RT5677_IRQ_DEBOUNCE_SEL_RC);
   5520	/* Enable auto power on RC when GPIO states are changed */
   5521	regmap_update_bits(rt5677->regmap, RT5677_GEN_CTRL1, 0xff, 0xff);
   5522
   5523	/* Select and enable jack detection sources per platform data */
   5524	if (rt5677->pdata.jd1_gpio) {
   5525		jd_mask	|= RT5677_SEL_GPIO_JD1_MASK;
   5526		jd_val	|= rt5677->pdata.jd1_gpio << RT5677_SEL_GPIO_JD1_SFT;
   5527	}
   5528	if (rt5677->pdata.jd2_gpio) {
   5529		jd_mask	|= RT5677_SEL_GPIO_JD2_MASK;
   5530		jd_val	|= rt5677->pdata.jd2_gpio << RT5677_SEL_GPIO_JD2_SFT;
   5531	}
   5532	if (rt5677->pdata.jd3_gpio) {
   5533		jd_mask	|= RT5677_SEL_GPIO_JD3_MASK;
   5534		jd_val	|= rt5677->pdata.jd3_gpio << RT5677_SEL_GPIO_JD3_SFT;
   5535	}
   5536	regmap_update_bits(rt5677->regmap, RT5677_JD_CTRL1, jd_mask, jd_val);
   5537
   5538	/* Set GPIO1 pin to be IRQ output */
   5539	regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL1,
   5540			RT5677_GPIO1_PIN_MASK, RT5677_GPIO1_PIN_IRQ);
   5541
   5542	/* Ready to listen for interrupts */
   5543	rt5677->domain = irq_domain_add_linear(i2c->dev.of_node,
   5544			RT5677_IRQ_NUM, &rt5677_domain_ops, rt5677);
   5545	if (!rt5677->domain) {
   5546		dev_err(&i2c->dev, "Failed to create IRQ domain\n");
   5547		return -ENOMEM;
   5548	}
   5549
   5550	ret = devm_request_threaded_irq(&i2c->dev, i2c->irq, NULL, rt5677_irq,
   5551			IRQF_TRIGGER_RISING | IRQF_ONESHOT,
   5552			"rt5677", rt5677);
   5553	if (ret)
   5554		dev_err(&i2c->dev, "Failed to request IRQ: %d\n", ret);
   5555
   5556	rt5677->irq = i2c->irq;
   5557
   5558	return ret;
   5559}
   5560
   5561static int rt5677_i2c_probe(struct i2c_client *i2c)
   5562{
   5563	struct rt5677_priv *rt5677;
   5564	int ret;
   5565	unsigned int val;
   5566
   5567	rt5677 = devm_kzalloc(&i2c->dev, sizeof(struct rt5677_priv),
   5568				GFP_KERNEL);
   5569	if (rt5677 == NULL)
   5570		return -ENOMEM;
   5571
   5572	rt5677->dev = &i2c->dev;
   5573	rt5677->set_dsp_vad = rt5677_set_dsp_vad;
   5574	INIT_DELAYED_WORK(&rt5677->dsp_work, rt5677_dsp_work);
   5575	i2c_set_clientdata(i2c, rt5677);
   5576
   5577	if (i2c->dev.of_node) {
   5578		const struct of_device_id *match_id;
   5579
   5580		match_id = of_match_device(rt5677_of_match, &i2c->dev);
   5581		if (match_id)
   5582			rt5677->type = (enum rt5677_type)match_id->data;
   5583	} else if (ACPI_HANDLE(&i2c->dev)) {
   5584		const struct acpi_device_id *acpi_id;
   5585
   5586		acpi_id = acpi_match_device(rt5677_acpi_match, &i2c->dev);
   5587		if (acpi_id)
   5588			rt5677->type = (enum rt5677_type)acpi_id->driver_data;
   5589	} else {
   5590		return -EINVAL;
   5591	}
   5592
   5593	rt5677_read_device_properties(rt5677, &i2c->dev);
   5594
   5595	/* pow-ldo2 and reset are optional. The codec pins may be statically
   5596	 * connected on the board without gpios. If the gpio device property
   5597	 * isn't specified, devm_gpiod_get_optional returns NULL.
   5598	 */
   5599	rt5677->pow_ldo2 = devm_gpiod_get_optional(&i2c->dev,
   5600			"realtek,pow-ldo2", GPIOD_OUT_HIGH);
   5601	if (IS_ERR(rt5677->pow_ldo2)) {
   5602		ret = PTR_ERR(rt5677->pow_ldo2);
   5603		dev_err(&i2c->dev, "Failed to request POW_LDO2: %d\n", ret);
   5604		return ret;
   5605	}
   5606	rt5677->reset_pin = devm_gpiod_get_optional(&i2c->dev,
   5607			"realtek,reset", GPIOD_OUT_LOW);
   5608	if (IS_ERR(rt5677->reset_pin)) {
   5609		ret = PTR_ERR(rt5677->reset_pin);
   5610		dev_err(&i2c->dev, "Failed to request RESET: %d\n", ret);
   5611		return ret;
   5612	}
   5613
   5614	if (rt5677->pow_ldo2 || rt5677->reset_pin) {
   5615		/* Wait a while until I2C bus becomes available. The datasheet
   5616		 * does not specify the exact we should wait but startup
   5617		 * sequence mentiones at least a few milliseconds.
   5618		 */
   5619		msleep(10);
   5620	}
   5621
   5622	rt5677->regmap_physical = devm_regmap_init_i2c(i2c,
   5623					&rt5677_regmap_physical);
   5624	if (IS_ERR(rt5677->regmap_physical)) {
   5625		ret = PTR_ERR(rt5677->regmap_physical);
   5626		dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
   5627			ret);
   5628		return ret;
   5629	}
   5630
   5631	rt5677->regmap = devm_regmap_init(&i2c->dev, NULL, i2c, &rt5677_regmap);
   5632	if (IS_ERR(rt5677->regmap)) {
   5633		ret = PTR_ERR(rt5677->regmap);
   5634		dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
   5635			ret);
   5636		return ret;
   5637	}
   5638
   5639	regmap_read(rt5677->regmap, RT5677_VENDOR_ID2, &val);
   5640	if (val != RT5677_DEVICE_ID) {
   5641		dev_err(&i2c->dev,
   5642			"Device with ID register %#x is not rt5677\n", val);
   5643		return -ENODEV;
   5644	}
   5645
   5646	regmap_write(rt5677->regmap, RT5677_RESET, 0x10ec);
   5647
   5648	ret = regmap_register_patch(rt5677->regmap, init_list,
   5649				    ARRAY_SIZE(init_list));
   5650	if (ret != 0)
   5651		dev_warn(&i2c->dev, "Failed to apply regmap patch: %d\n", ret);
   5652
   5653	if (rt5677->pdata.in1_diff)
   5654		regmap_update_bits(rt5677->regmap, RT5677_IN1,
   5655					RT5677_IN_DF1, RT5677_IN_DF1);
   5656
   5657	if (rt5677->pdata.in2_diff)
   5658		regmap_update_bits(rt5677->regmap, RT5677_IN1,
   5659					RT5677_IN_DF2, RT5677_IN_DF2);
   5660
   5661	if (rt5677->pdata.lout1_diff)
   5662		regmap_update_bits(rt5677->regmap, RT5677_LOUT1,
   5663					RT5677_LOUT1_L_DF, RT5677_LOUT1_L_DF);
   5664
   5665	if (rt5677->pdata.lout2_diff)
   5666		regmap_update_bits(rt5677->regmap, RT5677_LOUT1,
   5667					RT5677_LOUT2_L_DF, RT5677_LOUT2_L_DF);
   5668
   5669	if (rt5677->pdata.lout3_diff)
   5670		regmap_update_bits(rt5677->regmap, RT5677_LOUT1,
   5671					RT5677_LOUT3_L_DF, RT5677_LOUT3_L_DF);
   5672
   5673	if (rt5677->pdata.dmic2_clk_pin == RT5677_DMIC_CLK2) {
   5674		regmap_update_bits(rt5677->regmap, RT5677_GEN_CTRL2,
   5675					RT5677_GPIO5_FUNC_MASK,
   5676					RT5677_GPIO5_FUNC_DMIC);
   5677		regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL2,
   5678					RT5677_GPIO5_DIR_MASK,
   5679					RT5677_GPIO5_DIR_OUT);
   5680	}
   5681
   5682	if (rt5677->pdata.micbias1_vdd_3v3)
   5683		regmap_update_bits(rt5677->regmap, RT5677_MICBIAS,
   5684			RT5677_MICBIAS1_CTRL_VDD_MASK,
   5685			RT5677_MICBIAS1_CTRL_VDD_3_3V);
   5686
   5687	rt5677_init_gpio(i2c);
   5688	ret = rt5677_init_irq(i2c);
   5689	if (ret)
   5690		dev_err(&i2c->dev, "Failed to initialize irq: %d\n", ret);
   5691
   5692	return devm_snd_soc_register_component(&i2c->dev,
   5693				      &soc_component_dev_rt5677,
   5694				      rt5677_dai, ARRAY_SIZE(rt5677_dai));
   5695}
   5696
   5697static int rt5677_i2c_remove(struct i2c_client *i2c)
   5698{
   5699	rt5677_free_gpio(i2c);
   5700
   5701	return 0;
   5702}
   5703
   5704static struct i2c_driver rt5677_i2c_driver = {
   5705	.driver = {
   5706		.name = RT5677_DRV_NAME,
   5707		.of_match_table = rt5677_of_match,
   5708		.acpi_match_table = ACPI_PTR(rt5677_acpi_match),
   5709	},
   5710	.probe_new = rt5677_i2c_probe,
   5711	.remove   = rt5677_i2c_remove,
   5712};
   5713module_i2c_driver(rt5677_i2c_driver);
   5714
   5715MODULE_DESCRIPTION("ASoC RT5677 driver");
   5716MODULE_AUTHOR("Oder Chiou <oder_chiou@realtek.com>");
   5717MODULE_LICENSE("GPL v2");