18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * rt5677.c  --  RT5677 ALSA SoC audio codec driver
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright 2013 Realtek Semiconductor Corp.
68c2ecf20Sopenharmony_ci * Author: Oder Chiou <oder_chiou@realtek.com>
78c2ecf20Sopenharmony_ci */
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#include <linux/acpi.h>
108c2ecf20Sopenharmony_ci#include <linux/fs.h>
118c2ecf20Sopenharmony_ci#include <linux/module.h>
128c2ecf20Sopenharmony_ci#include <linux/moduleparam.h>
138c2ecf20Sopenharmony_ci#include <linux/init.h>
148c2ecf20Sopenharmony_ci#include <linux/delay.h>
158c2ecf20Sopenharmony_ci#include <linux/pm.h>
168c2ecf20Sopenharmony_ci#include <linux/regmap.h>
178c2ecf20Sopenharmony_ci#include <linux/i2c.h>
188c2ecf20Sopenharmony_ci#include <linux/platform_device.h>
198c2ecf20Sopenharmony_ci#include <linux/spi/spi.h>
208c2ecf20Sopenharmony_ci#include <linux/firmware.h>
218c2ecf20Sopenharmony_ci#include <linux/of_device.h>
228c2ecf20Sopenharmony_ci#include <linux/property.h>
238c2ecf20Sopenharmony_ci#include <linux/irq.h>
248c2ecf20Sopenharmony_ci#include <linux/interrupt.h>
258c2ecf20Sopenharmony_ci#include <linux/irqdomain.h>
268c2ecf20Sopenharmony_ci#include <linux/workqueue.h>
278c2ecf20Sopenharmony_ci#include <sound/core.h>
288c2ecf20Sopenharmony_ci#include <sound/pcm.h>
298c2ecf20Sopenharmony_ci#include <sound/pcm_params.h>
308c2ecf20Sopenharmony_ci#include <sound/soc.h>
318c2ecf20Sopenharmony_ci#include <sound/soc-dapm.h>
328c2ecf20Sopenharmony_ci#include <sound/initval.h>
338c2ecf20Sopenharmony_ci#include <sound/tlv.h>
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ci#include "rl6231.h"
368c2ecf20Sopenharmony_ci#include "rt5677.h"
378c2ecf20Sopenharmony_ci#include "rt5677-spi.h"
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci#define RT5677_DEVICE_ID 0x6327
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci/* Register controlling boot vector */
428c2ecf20Sopenharmony_ci#define RT5677_DSP_BOOT_VECTOR		0x1801f090
438c2ecf20Sopenharmony_ci#define RT5677_MODEL_ADDR		0x5FFC9800
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ci#define RT5677_PR_RANGE_BASE (0xff + 1)
468c2ecf20Sopenharmony_ci#define RT5677_PR_SPACING 0x100
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ci#define RT5677_PR_BASE (RT5677_PR_RANGE_BASE + (0 * RT5677_PR_SPACING))
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_cistatic const struct regmap_range_cfg rt5677_ranges[] = {
518c2ecf20Sopenharmony_ci	{
528c2ecf20Sopenharmony_ci		.name = "PR",
538c2ecf20Sopenharmony_ci		.range_min = RT5677_PR_BASE,
548c2ecf20Sopenharmony_ci		.range_max = RT5677_PR_BASE + 0xfd,
558c2ecf20Sopenharmony_ci		.selector_reg = RT5677_PRIV_INDEX,
568c2ecf20Sopenharmony_ci		.selector_mask = 0xff,
578c2ecf20Sopenharmony_ci		.selector_shift = 0x0,
588c2ecf20Sopenharmony_ci		.window_start = RT5677_PRIV_DATA,
598c2ecf20Sopenharmony_ci		.window_len = 0x1,
608c2ecf20Sopenharmony_ci	},
618c2ecf20Sopenharmony_ci};
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_cistatic const struct reg_sequence init_list[] = {
648c2ecf20Sopenharmony_ci	{RT5677_ASRC_12,	0x0018},
658c2ecf20Sopenharmony_ci	{RT5677_PR_BASE + 0x3d,	0x364d},
668c2ecf20Sopenharmony_ci	{RT5677_PR_BASE + 0x17,	0x4fc0},
678c2ecf20Sopenharmony_ci	{RT5677_PR_BASE + 0x13,	0x0312},
688c2ecf20Sopenharmony_ci	{RT5677_PR_BASE + 0x1e,	0x0000},
698c2ecf20Sopenharmony_ci	{RT5677_PR_BASE + 0x12,	0x0eaa},
708c2ecf20Sopenharmony_ci	{RT5677_PR_BASE + 0x14,	0x018a},
718c2ecf20Sopenharmony_ci	{RT5677_PR_BASE + 0x15,	0x0490},
728c2ecf20Sopenharmony_ci	{RT5677_PR_BASE + 0x38,	0x0f71},
738c2ecf20Sopenharmony_ci	{RT5677_PR_BASE + 0x39,	0x0f71},
748c2ecf20Sopenharmony_ci};
758c2ecf20Sopenharmony_ci#define RT5677_INIT_REG_LEN ARRAY_SIZE(init_list)
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_cistatic const struct reg_default rt5677_reg[] = {
788c2ecf20Sopenharmony_ci	{RT5677_RESET			, 0x0000},
798c2ecf20Sopenharmony_ci	{RT5677_LOUT1			, 0xa800},
808c2ecf20Sopenharmony_ci	{RT5677_IN1			, 0x0000},
818c2ecf20Sopenharmony_ci	{RT5677_MICBIAS			, 0x0000},
828c2ecf20Sopenharmony_ci	{RT5677_SLIMBUS_PARAM		, 0x0000},
838c2ecf20Sopenharmony_ci	{RT5677_SLIMBUS_RX		, 0x0000},
848c2ecf20Sopenharmony_ci	{RT5677_SLIMBUS_CTRL		, 0x0000},
858c2ecf20Sopenharmony_ci	{RT5677_SIDETONE_CTRL		, 0x000b},
868c2ecf20Sopenharmony_ci	{RT5677_ANA_DAC1_2_3_SRC	, 0x0000},
878c2ecf20Sopenharmony_ci	{RT5677_IF_DSP_DAC3_4_MIXER	, 0x1111},
888c2ecf20Sopenharmony_ci	{RT5677_DAC4_DIG_VOL		, 0xafaf},
898c2ecf20Sopenharmony_ci	{RT5677_DAC3_DIG_VOL		, 0xafaf},
908c2ecf20Sopenharmony_ci	{RT5677_DAC1_DIG_VOL		, 0xafaf},
918c2ecf20Sopenharmony_ci	{RT5677_DAC2_DIG_VOL		, 0xafaf},
928c2ecf20Sopenharmony_ci	{RT5677_IF_DSP_DAC2_MIXER	, 0x0011},
938c2ecf20Sopenharmony_ci	{RT5677_STO1_ADC_DIG_VOL	, 0x2f2f},
948c2ecf20Sopenharmony_ci	{RT5677_MONO_ADC_DIG_VOL	, 0x2f2f},
958c2ecf20Sopenharmony_ci	{RT5677_STO1_2_ADC_BST		, 0x0000},
968c2ecf20Sopenharmony_ci	{RT5677_STO2_ADC_DIG_VOL	, 0x2f2f},
978c2ecf20Sopenharmony_ci	{RT5677_ADC_BST_CTRL2		, 0x0000},
988c2ecf20Sopenharmony_ci	{RT5677_STO3_4_ADC_BST		, 0x0000},
998c2ecf20Sopenharmony_ci	{RT5677_STO3_ADC_DIG_VOL	, 0x2f2f},
1008c2ecf20Sopenharmony_ci	{RT5677_STO4_ADC_DIG_VOL	, 0x2f2f},
1018c2ecf20Sopenharmony_ci	{RT5677_STO4_ADC_MIXER		, 0xd4c0},
1028c2ecf20Sopenharmony_ci	{RT5677_STO3_ADC_MIXER		, 0xd4c0},
1038c2ecf20Sopenharmony_ci	{RT5677_STO2_ADC_MIXER		, 0xd4c0},
1048c2ecf20Sopenharmony_ci	{RT5677_STO1_ADC_MIXER		, 0xd4c0},
1058c2ecf20Sopenharmony_ci	{RT5677_MONO_ADC_MIXER		, 0xd4d1},
1068c2ecf20Sopenharmony_ci	{RT5677_ADC_IF_DSP_DAC1_MIXER	, 0x8080},
1078c2ecf20Sopenharmony_ci	{RT5677_STO1_DAC_MIXER		, 0xaaaa},
1088c2ecf20Sopenharmony_ci	{RT5677_MONO_DAC_MIXER		, 0xaaaa},
1098c2ecf20Sopenharmony_ci	{RT5677_DD1_MIXER		, 0xaaaa},
1108c2ecf20Sopenharmony_ci	{RT5677_DD2_MIXER		, 0xaaaa},
1118c2ecf20Sopenharmony_ci	{RT5677_IF3_DATA		, 0x0000},
1128c2ecf20Sopenharmony_ci	{RT5677_IF4_DATA		, 0x0000},
1138c2ecf20Sopenharmony_ci	{RT5677_PDM_OUT_CTRL		, 0x8888},
1148c2ecf20Sopenharmony_ci	{RT5677_PDM_DATA_CTRL1		, 0x0000},
1158c2ecf20Sopenharmony_ci	{RT5677_PDM_DATA_CTRL2		, 0x0000},
1168c2ecf20Sopenharmony_ci	{RT5677_PDM1_DATA_CTRL2		, 0x0000},
1178c2ecf20Sopenharmony_ci	{RT5677_PDM1_DATA_CTRL3		, 0x0000},
1188c2ecf20Sopenharmony_ci	{RT5677_PDM1_DATA_CTRL4		, 0x0000},
1198c2ecf20Sopenharmony_ci	{RT5677_PDM2_DATA_CTRL2		, 0x0000},
1208c2ecf20Sopenharmony_ci	{RT5677_PDM2_DATA_CTRL3		, 0x0000},
1218c2ecf20Sopenharmony_ci	{RT5677_PDM2_DATA_CTRL4		, 0x0000},
1228c2ecf20Sopenharmony_ci	{RT5677_TDM1_CTRL1		, 0x0300},
1238c2ecf20Sopenharmony_ci	{RT5677_TDM1_CTRL2		, 0x0000},
1248c2ecf20Sopenharmony_ci	{RT5677_TDM1_CTRL3		, 0x4000},
1258c2ecf20Sopenharmony_ci	{RT5677_TDM1_CTRL4		, 0x0123},
1268c2ecf20Sopenharmony_ci	{RT5677_TDM1_CTRL5		, 0x4567},
1278c2ecf20Sopenharmony_ci	{RT5677_TDM2_CTRL1		, 0x0300},
1288c2ecf20Sopenharmony_ci	{RT5677_TDM2_CTRL2		, 0x0000},
1298c2ecf20Sopenharmony_ci	{RT5677_TDM2_CTRL3		, 0x4000},
1308c2ecf20Sopenharmony_ci	{RT5677_TDM2_CTRL4		, 0x0123},
1318c2ecf20Sopenharmony_ci	{RT5677_TDM2_CTRL5		, 0x4567},
1328c2ecf20Sopenharmony_ci	{RT5677_I2C_MASTER_CTRL1	, 0x0001},
1338c2ecf20Sopenharmony_ci	{RT5677_I2C_MASTER_CTRL2	, 0x0000},
1348c2ecf20Sopenharmony_ci	{RT5677_I2C_MASTER_CTRL3	, 0x0000},
1358c2ecf20Sopenharmony_ci	{RT5677_I2C_MASTER_CTRL4	, 0x0000},
1368c2ecf20Sopenharmony_ci	{RT5677_I2C_MASTER_CTRL5	, 0x0000},
1378c2ecf20Sopenharmony_ci	{RT5677_I2C_MASTER_CTRL6	, 0x0000},
1388c2ecf20Sopenharmony_ci	{RT5677_I2C_MASTER_CTRL7	, 0x0000},
1398c2ecf20Sopenharmony_ci	{RT5677_I2C_MASTER_CTRL8	, 0x0000},
1408c2ecf20Sopenharmony_ci	{RT5677_DMIC_CTRL1		, 0x1505},
1418c2ecf20Sopenharmony_ci	{RT5677_DMIC_CTRL2		, 0x0055},
1428c2ecf20Sopenharmony_ci	{RT5677_HAP_GENE_CTRL1		, 0x0111},
1438c2ecf20Sopenharmony_ci	{RT5677_HAP_GENE_CTRL2		, 0x0064},
1448c2ecf20Sopenharmony_ci	{RT5677_HAP_GENE_CTRL3		, 0xef0e},
1458c2ecf20Sopenharmony_ci	{RT5677_HAP_GENE_CTRL4		, 0xf0f0},
1468c2ecf20Sopenharmony_ci	{RT5677_HAP_GENE_CTRL5		, 0xef0e},
1478c2ecf20Sopenharmony_ci	{RT5677_HAP_GENE_CTRL6		, 0xf0f0},
1488c2ecf20Sopenharmony_ci	{RT5677_HAP_GENE_CTRL7		, 0xef0e},
1498c2ecf20Sopenharmony_ci	{RT5677_HAP_GENE_CTRL8		, 0xf0f0},
1508c2ecf20Sopenharmony_ci	{RT5677_HAP_GENE_CTRL9		, 0xf000},
1518c2ecf20Sopenharmony_ci	{RT5677_HAP_GENE_CTRL10		, 0x0000},
1528c2ecf20Sopenharmony_ci	{RT5677_PWR_DIG1		, 0x0000},
1538c2ecf20Sopenharmony_ci	{RT5677_PWR_DIG2		, 0x0000},
1548c2ecf20Sopenharmony_ci	{RT5677_PWR_ANLG1		, 0x0055},
1558c2ecf20Sopenharmony_ci	{RT5677_PWR_ANLG2		, 0x0000},
1568c2ecf20Sopenharmony_ci	{RT5677_PWR_DSP1		, 0x0001},
1578c2ecf20Sopenharmony_ci	{RT5677_PWR_DSP_ST		, 0x0000},
1588c2ecf20Sopenharmony_ci	{RT5677_PWR_DSP2		, 0x0000},
1598c2ecf20Sopenharmony_ci	{RT5677_ADC_DAC_HPF_CTRL1	, 0x0e00},
1608c2ecf20Sopenharmony_ci	{RT5677_PRIV_INDEX		, 0x0000},
1618c2ecf20Sopenharmony_ci	{RT5677_PRIV_DATA		, 0x0000},
1628c2ecf20Sopenharmony_ci	{RT5677_I2S4_SDP		, 0x8000},
1638c2ecf20Sopenharmony_ci	{RT5677_I2S1_SDP		, 0x8000},
1648c2ecf20Sopenharmony_ci	{RT5677_I2S2_SDP		, 0x8000},
1658c2ecf20Sopenharmony_ci	{RT5677_I2S3_SDP		, 0x8000},
1668c2ecf20Sopenharmony_ci	{RT5677_CLK_TREE_CTRL1		, 0x1111},
1678c2ecf20Sopenharmony_ci	{RT5677_CLK_TREE_CTRL2		, 0x1111},
1688c2ecf20Sopenharmony_ci	{RT5677_CLK_TREE_CTRL3		, 0x0000},
1698c2ecf20Sopenharmony_ci	{RT5677_PLL1_CTRL1		, 0x0000},
1708c2ecf20Sopenharmony_ci	{RT5677_PLL1_CTRL2		, 0x0000},
1718c2ecf20Sopenharmony_ci	{RT5677_PLL2_CTRL1		, 0x0c60},
1728c2ecf20Sopenharmony_ci	{RT5677_PLL2_CTRL2		, 0x2000},
1738c2ecf20Sopenharmony_ci	{RT5677_GLB_CLK1		, 0x0000},
1748c2ecf20Sopenharmony_ci	{RT5677_GLB_CLK2		, 0x0000},
1758c2ecf20Sopenharmony_ci	{RT5677_ASRC_1			, 0x0000},
1768c2ecf20Sopenharmony_ci	{RT5677_ASRC_2			, 0x0000},
1778c2ecf20Sopenharmony_ci	{RT5677_ASRC_3			, 0x0000},
1788c2ecf20Sopenharmony_ci	{RT5677_ASRC_4			, 0x0000},
1798c2ecf20Sopenharmony_ci	{RT5677_ASRC_5			, 0x0000},
1808c2ecf20Sopenharmony_ci	{RT5677_ASRC_6			, 0x0000},
1818c2ecf20Sopenharmony_ci	{RT5677_ASRC_7			, 0x0000},
1828c2ecf20Sopenharmony_ci	{RT5677_ASRC_8			, 0x0000},
1838c2ecf20Sopenharmony_ci	{RT5677_ASRC_9			, 0x0000},
1848c2ecf20Sopenharmony_ci	{RT5677_ASRC_10			, 0x0000},
1858c2ecf20Sopenharmony_ci	{RT5677_ASRC_11			, 0x0000},
1868c2ecf20Sopenharmony_ci	{RT5677_ASRC_12			, 0x0018},
1878c2ecf20Sopenharmony_ci	{RT5677_ASRC_13			, 0x0000},
1888c2ecf20Sopenharmony_ci	{RT5677_ASRC_14			, 0x0000},
1898c2ecf20Sopenharmony_ci	{RT5677_ASRC_15			, 0x0000},
1908c2ecf20Sopenharmony_ci	{RT5677_ASRC_16			, 0x0000},
1918c2ecf20Sopenharmony_ci	{RT5677_ASRC_17			, 0x0000},
1928c2ecf20Sopenharmony_ci	{RT5677_ASRC_18			, 0x0000},
1938c2ecf20Sopenharmony_ci	{RT5677_ASRC_19			, 0x0000},
1948c2ecf20Sopenharmony_ci	{RT5677_ASRC_20			, 0x0000},
1958c2ecf20Sopenharmony_ci	{RT5677_ASRC_21			, 0x000c},
1968c2ecf20Sopenharmony_ci	{RT5677_ASRC_22			, 0x0000},
1978c2ecf20Sopenharmony_ci	{RT5677_ASRC_23			, 0x0000},
1988c2ecf20Sopenharmony_ci	{RT5677_VAD_CTRL1		, 0x2184},
1998c2ecf20Sopenharmony_ci	{RT5677_VAD_CTRL2		, 0x010a},
2008c2ecf20Sopenharmony_ci	{RT5677_VAD_CTRL3		, 0x0aea},
2018c2ecf20Sopenharmony_ci	{RT5677_VAD_CTRL4		, 0x000c},
2028c2ecf20Sopenharmony_ci	{RT5677_VAD_CTRL5		, 0x0000},
2038c2ecf20Sopenharmony_ci	{RT5677_DSP_INB_CTRL1		, 0x0000},
2048c2ecf20Sopenharmony_ci	{RT5677_DSP_INB_CTRL2		, 0x0000},
2058c2ecf20Sopenharmony_ci	{RT5677_DSP_IN_OUTB_CTRL	, 0x0000},
2068c2ecf20Sopenharmony_ci	{RT5677_DSP_OUTB0_1_DIG_VOL	, 0x2f2f},
2078c2ecf20Sopenharmony_ci	{RT5677_DSP_OUTB2_3_DIG_VOL	, 0x2f2f},
2088c2ecf20Sopenharmony_ci	{RT5677_DSP_OUTB4_5_DIG_VOL	, 0x2f2f},
2098c2ecf20Sopenharmony_ci	{RT5677_DSP_OUTB6_7_DIG_VOL	, 0x2f2f},
2108c2ecf20Sopenharmony_ci	{RT5677_ADC_EQ_CTRL1		, 0x6000},
2118c2ecf20Sopenharmony_ci	{RT5677_ADC_EQ_CTRL2		, 0x0000},
2128c2ecf20Sopenharmony_ci	{RT5677_EQ_CTRL1		, 0xc000},
2138c2ecf20Sopenharmony_ci	{RT5677_EQ_CTRL2		, 0x0000},
2148c2ecf20Sopenharmony_ci	{RT5677_EQ_CTRL3		, 0x0000},
2158c2ecf20Sopenharmony_ci	{RT5677_SOFT_VOL_ZERO_CROSS1	, 0x0009},
2168c2ecf20Sopenharmony_ci	{RT5677_JD_CTRL1		, 0x0000},
2178c2ecf20Sopenharmony_ci	{RT5677_JD_CTRL2		, 0x0000},
2188c2ecf20Sopenharmony_ci	{RT5677_JD_CTRL3		, 0x0000},
2198c2ecf20Sopenharmony_ci	{RT5677_IRQ_CTRL1		, 0x0000},
2208c2ecf20Sopenharmony_ci	{RT5677_IRQ_CTRL2		, 0x0000},
2218c2ecf20Sopenharmony_ci	{RT5677_GPIO_ST			, 0x0000},
2228c2ecf20Sopenharmony_ci	{RT5677_GPIO_CTRL1		, 0x0000},
2238c2ecf20Sopenharmony_ci	{RT5677_GPIO_CTRL2		, 0x0000},
2248c2ecf20Sopenharmony_ci	{RT5677_GPIO_CTRL3		, 0x0000},
2258c2ecf20Sopenharmony_ci	{RT5677_STO1_ADC_HI_FILTER1	, 0xb320},
2268c2ecf20Sopenharmony_ci	{RT5677_STO1_ADC_HI_FILTER2	, 0x0000},
2278c2ecf20Sopenharmony_ci	{RT5677_MONO_ADC_HI_FILTER1	, 0xb300},
2288c2ecf20Sopenharmony_ci	{RT5677_MONO_ADC_HI_FILTER2	, 0x0000},
2298c2ecf20Sopenharmony_ci	{RT5677_STO2_ADC_HI_FILTER1	, 0xb300},
2308c2ecf20Sopenharmony_ci	{RT5677_STO2_ADC_HI_FILTER2	, 0x0000},
2318c2ecf20Sopenharmony_ci	{RT5677_STO3_ADC_HI_FILTER1	, 0xb300},
2328c2ecf20Sopenharmony_ci	{RT5677_STO3_ADC_HI_FILTER2	, 0x0000},
2338c2ecf20Sopenharmony_ci	{RT5677_STO4_ADC_HI_FILTER1	, 0xb300},
2348c2ecf20Sopenharmony_ci	{RT5677_STO4_ADC_HI_FILTER2	, 0x0000},
2358c2ecf20Sopenharmony_ci	{RT5677_MB_DRC_CTRL1		, 0x0f20},
2368c2ecf20Sopenharmony_ci	{RT5677_DRC1_CTRL1		, 0x001f},
2378c2ecf20Sopenharmony_ci	{RT5677_DRC1_CTRL2		, 0x020c},
2388c2ecf20Sopenharmony_ci	{RT5677_DRC1_CTRL3		, 0x1f00},
2398c2ecf20Sopenharmony_ci	{RT5677_DRC1_CTRL4		, 0x0000},
2408c2ecf20Sopenharmony_ci	{RT5677_DRC1_CTRL5		, 0x0000},
2418c2ecf20Sopenharmony_ci	{RT5677_DRC1_CTRL6		, 0x0029},
2428c2ecf20Sopenharmony_ci	{RT5677_DRC2_CTRL1		, 0x001f},
2438c2ecf20Sopenharmony_ci	{RT5677_DRC2_CTRL2		, 0x020c},
2448c2ecf20Sopenharmony_ci	{RT5677_DRC2_CTRL3		, 0x1f00},
2458c2ecf20Sopenharmony_ci	{RT5677_DRC2_CTRL4		, 0x0000},
2468c2ecf20Sopenharmony_ci	{RT5677_DRC2_CTRL5		, 0x0000},
2478c2ecf20Sopenharmony_ci	{RT5677_DRC2_CTRL6		, 0x0029},
2488c2ecf20Sopenharmony_ci	{RT5677_DRC1_HL_CTRL1		, 0x8000},
2498c2ecf20Sopenharmony_ci	{RT5677_DRC1_HL_CTRL2		, 0x0200},
2508c2ecf20Sopenharmony_ci	{RT5677_DRC2_HL_CTRL1		, 0x8000},
2518c2ecf20Sopenharmony_ci	{RT5677_DRC2_HL_CTRL2		, 0x0200},
2528c2ecf20Sopenharmony_ci	{RT5677_DSP_INB1_SRC_CTRL1	, 0x5800},
2538c2ecf20Sopenharmony_ci	{RT5677_DSP_INB1_SRC_CTRL2	, 0x0000},
2548c2ecf20Sopenharmony_ci	{RT5677_DSP_INB1_SRC_CTRL3	, 0x0000},
2558c2ecf20Sopenharmony_ci	{RT5677_DSP_INB1_SRC_CTRL4	, 0x0800},
2568c2ecf20Sopenharmony_ci	{RT5677_DSP_INB2_SRC_CTRL1	, 0x5800},
2578c2ecf20Sopenharmony_ci	{RT5677_DSP_INB2_SRC_CTRL2	, 0x0000},
2588c2ecf20Sopenharmony_ci	{RT5677_DSP_INB2_SRC_CTRL3	, 0x0000},
2598c2ecf20Sopenharmony_ci	{RT5677_DSP_INB2_SRC_CTRL4	, 0x0800},
2608c2ecf20Sopenharmony_ci	{RT5677_DSP_INB3_SRC_CTRL1	, 0x5800},
2618c2ecf20Sopenharmony_ci	{RT5677_DSP_INB3_SRC_CTRL2	, 0x0000},
2628c2ecf20Sopenharmony_ci	{RT5677_DSP_INB3_SRC_CTRL3	, 0x0000},
2638c2ecf20Sopenharmony_ci	{RT5677_DSP_INB3_SRC_CTRL4	, 0x0800},
2648c2ecf20Sopenharmony_ci	{RT5677_DSP_OUTB1_SRC_CTRL1	, 0x5800},
2658c2ecf20Sopenharmony_ci	{RT5677_DSP_OUTB1_SRC_CTRL2	, 0x0000},
2668c2ecf20Sopenharmony_ci	{RT5677_DSP_OUTB1_SRC_CTRL3	, 0x0000},
2678c2ecf20Sopenharmony_ci	{RT5677_DSP_OUTB1_SRC_CTRL4	, 0x0800},
2688c2ecf20Sopenharmony_ci	{RT5677_DSP_OUTB2_SRC_CTRL1	, 0x5800},
2698c2ecf20Sopenharmony_ci	{RT5677_DSP_OUTB2_SRC_CTRL2	, 0x0000},
2708c2ecf20Sopenharmony_ci	{RT5677_DSP_OUTB2_SRC_CTRL3	, 0x0000},
2718c2ecf20Sopenharmony_ci	{RT5677_DSP_OUTB2_SRC_CTRL4	, 0x0800},
2728c2ecf20Sopenharmony_ci	{RT5677_DSP_OUTB_0123_MIXER_CTRL, 0xfefe},
2738c2ecf20Sopenharmony_ci	{RT5677_DSP_OUTB_45_MIXER_CTRL	, 0xfefe},
2748c2ecf20Sopenharmony_ci	{RT5677_DSP_OUTB_67_MIXER_CTRL	, 0xfefe},
2758c2ecf20Sopenharmony_ci	{RT5677_DIG_MISC		, 0x0000},
2768c2ecf20Sopenharmony_ci	{RT5677_GEN_CTRL1		, 0x0000},
2778c2ecf20Sopenharmony_ci	{RT5677_GEN_CTRL2		, 0x0000},
2788c2ecf20Sopenharmony_ci	{RT5677_VENDOR_ID		, 0x0000},
2798c2ecf20Sopenharmony_ci	{RT5677_VENDOR_ID1		, 0x10ec},
2808c2ecf20Sopenharmony_ci	{RT5677_VENDOR_ID2		, 0x6327},
2818c2ecf20Sopenharmony_ci};
2828c2ecf20Sopenharmony_ci
2838c2ecf20Sopenharmony_cistatic bool rt5677_volatile_register(struct device *dev, unsigned int reg)
2848c2ecf20Sopenharmony_ci{
2858c2ecf20Sopenharmony_ci	int i;
2868c2ecf20Sopenharmony_ci
2878c2ecf20Sopenharmony_ci	for (i = 0; i < ARRAY_SIZE(rt5677_ranges); i++) {
2888c2ecf20Sopenharmony_ci		if (reg >= rt5677_ranges[i].range_min &&
2898c2ecf20Sopenharmony_ci			reg <= rt5677_ranges[i].range_max) {
2908c2ecf20Sopenharmony_ci			return true;
2918c2ecf20Sopenharmony_ci		}
2928c2ecf20Sopenharmony_ci	}
2938c2ecf20Sopenharmony_ci
2948c2ecf20Sopenharmony_ci	switch (reg) {
2958c2ecf20Sopenharmony_ci	case RT5677_RESET:
2968c2ecf20Sopenharmony_ci	case RT5677_SLIMBUS_PARAM:
2978c2ecf20Sopenharmony_ci	case RT5677_PDM_DATA_CTRL1:
2988c2ecf20Sopenharmony_ci	case RT5677_PDM_DATA_CTRL2:
2998c2ecf20Sopenharmony_ci	case RT5677_PDM1_DATA_CTRL4:
3008c2ecf20Sopenharmony_ci	case RT5677_PDM2_DATA_CTRL4:
3018c2ecf20Sopenharmony_ci	case RT5677_I2C_MASTER_CTRL1:
3028c2ecf20Sopenharmony_ci	case RT5677_I2C_MASTER_CTRL7:
3038c2ecf20Sopenharmony_ci	case RT5677_I2C_MASTER_CTRL8:
3048c2ecf20Sopenharmony_ci	case RT5677_HAP_GENE_CTRL2:
3058c2ecf20Sopenharmony_ci	case RT5677_PWR_ANLG2: /* Modified by DSP firmware */
3068c2ecf20Sopenharmony_ci	case RT5677_PWR_DSP_ST:
3078c2ecf20Sopenharmony_ci	case RT5677_PRIV_DATA:
3088c2ecf20Sopenharmony_ci	case RT5677_ASRC_22:
3098c2ecf20Sopenharmony_ci	case RT5677_ASRC_23:
3108c2ecf20Sopenharmony_ci	case RT5677_VAD_CTRL5:
3118c2ecf20Sopenharmony_ci	case RT5677_ADC_EQ_CTRL1:
3128c2ecf20Sopenharmony_ci	case RT5677_EQ_CTRL1:
3138c2ecf20Sopenharmony_ci	case RT5677_IRQ_CTRL1:
3148c2ecf20Sopenharmony_ci	case RT5677_IRQ_CTRL2:
3158c2ecf20Sopenharmony_ci	case RT5677_GPIO_ST:
3168c2ecf20Sopenharmony_ci	case RT5677_GPIO_CTRL1: /* Modified by DSP firmware */
3178c2ecf20Sopenharmony_ci	case RT5677_GPIO_CTRL2: /* Modified by DSP firmware */
3188c2ecf20Sopenharmony_ci	case RT5677_DSP_INB1_SRC_CTRL4:
3198c2ecf20Sopenharmony_ci	case RT5677_DSP_INB2_SRC_CTRL4:
3208c2ecf20Sopenharmony_ci	case RT5677_DSP_INB3_SRC_CTRL4:
3218c2ecf20Sopenharmony_ci	case RT5677_DSP_OUTB1_SRC_CTRL4:
3228c2ecf20Sopenharmony_ci	case RT5677_DSP_OUTB2_SRC_CTRL4:
3238c2ecf20Sopenharmony_ci	case RT5677_VENDOR_ID:
3248c2ecf20Sopenharmony_ci	case RT5677_VENDOR_ID1:
3258c2ecf20Sopenharmony_ci	case RT5677_VENDOR_ID2:
3268c2ecf20Sopenharmony_ci		return true;
3278c2ecf20Sopenharmony_ci	default:
3288c2ecf20Sopenharmony_ci		return false;
3298c2ecf20Sopenharmony_ci	}
3308c2ecf20Sopenharmony_ci}
3318c2ecf20Sopenharmony_ci
3328c2ecf20Sopenharmony_cistatic bool rt5677_readable_register(struct device *dev, unsigned int reg)
3338c2ecf20Sopenharmony_ci{
3348c2ecf20Sopenharmony_ci	int i;
3358c2ecf20Sopenharmony_ci
3368c2ecf20Sopenharmony_ci	for (i = 0; i < ARRAY_SIZE(rt5677_ranges); i++) {
3378c2ecf20Sopenharmony_ci		if (reg >= rt5677_ranges[i].range_min &&
3388c2ecf20Sopenharmony_ci			reg <= rt5677_ranges[i].range_max) {
3398c2ecf20Sopenharmony_ci			return true;
3408c2ecf20Sopenharmony_ci		}
3418c2ecf20Sopenharmony_ci	}
3428c2ecf20Sopenharmony_ci
3438c2ecf20Sopenharmony_ci	switch (reg) {
3448c2ecf20Sopenharmony_ci	case RT5677_RESET:
3458c2ecf20Sopenharmony_ci	case RT5677_LOUT1:
3468c2ecf20Sopenharmony_ci	case RT5677_IN1:
3478c2ecf20Sopenharmony_ci	case RT5677_MICBIAS:
3488c2ecf20Sopenharmony_ci	case RT5677_SLIMBUS_PARAM:
3498c2ecf20Sopenharmony_ci	case RT5677_SLIMBUS_RX:
3508c2ecf20Sopenharmony_ci	case RT5677_SLIMBUS_CTRL:
3518c2ecf20Sopenharmony_ci	case RT5677_SIDETONE_CTRL:
3528c2ecf20Sopenharmony_ci	case RT5677_ANA_DAC1_2_3_SRC:
3538c2ecf20Sopenharmony_ci	case RT5677_IF_DSP_DAC3_4_MIXER:
3548c2ecf20Sopenharmony_ci	case RT5677_DAC4_DIG_VOL:
3558c2ecf20Sopenharmony_ci	case RT5677_DAC3_DIG_VOL:
3568c2ecf20Sopenharmony_ci	case RT5677_DAC1_DIG_VOL:
3578c2ecf20Sopenharmony_ci	case RT5677_DAC2_DIG_VOL:
3588c2ecf20Sopenharmony_ci	case RT5677_IF_DSP_DAC2_MIXER:
3598c2ecf20Sopenharmony_ci	case RT5677_STO1_ADC_DIG_VOL:
3608c2ecf20Sopenharmony_ci	case RT5677_MONO_ADC_DIG_VOL:
3618c2ecf20Sopenharmony_ci	case RT5677_STO1_2_ADC_BST:
3628c2ecf20Sopenharmony_ci	case RT5677_STO2_ADC_DIG_VOL:
3638c2ecf20Sopenharmony_ci	case RT5677_ADC_BST_CTRL2:
3648c2ecf20Sopenharmony_ci	case RT5677_STO3_4_ADC_BST:
3658c2ecf20Sopenharmony_ci	case RT5677_STO3_ADC_DIG_VOL:
3668c2ecf20Sopenharmony_ci	case RT5677_STO4_ADC_DIG_VOL:
3678c2ecf20Sopenharmony_ci	case RT5677_STO4_ADC_MIXER:
3688c2ecf20Sopenharmony_ci	case RT5677_STO3_ADC_MIXER:
3698c2ecf20Sopenharmony_ci	case RT5677_STO2_ADC_MIXER:
3708c2ecf20Sopenharmony_ci	case RT5677_STO1_ADC_MIXER:
3718c2ecf20Sopenharmony_ci	case RT5677_MONO_ADC_MIXER:
3728c2ecf20Sopenharmony_ci	case RT5677_ADC_IF_DSP_DAC1_MIXER:
3738c2ecf20Sopenharmony_ci	case RT5677_STO1_DAC_MIXER:
3748c2ecf20Sopenharmony_ci	case RT5677_MONO_DAC_MIXER:
3758c2ecf20Sopenharmony_ci	case RT5677_DD1_MIXER:
3768c2ecf20Sopenharmony_ci	case RT5677_DD2_MIXER:
3778c2ecf20Sopenharmony_ci	case RT5677_IF3_DATA:
3788c2ecf20Sopenharmony_ci	case RT5677_IF4_DATA:
3798c2ecf20Sopenharmony_ci	case RT5677_PDM_OUT_CTRL:
3808c2ecf20Sopenharmony_ci	case RT5677_PDM_DATA_CTRL1:
3818c2ecf20Sopenharmony_ci	case RT5677_PDM_DATA_CTRL2:
3828c2ecf20Sopenharmony_ci	case RT5677_PDM1_DATA_CTRL2:
3838c2ecf20Sopenharmony_ci	case RT5677_PDM1_DATA_CTRL3:
3848c2ecf20Sopenharmony_ci	case RT5677_PDM1_DATA_CTRL4:
3858c2ecf20Sopenharmony_ci	case RT5677_PDM2_DATA_CTRL2:
3868c2ecf20Sopenharmony_ci	case RT5677_PDM2_DATA_CTRL3:
3878c2ecf20Sopenharmony_ci	case RT5677_PDM2_DATA_CTRL4:
3888c2ecf20Sopenharmony_ci	case RT5677_TDM1_CTRL1:
3898c2ecf20Sopenharmony_ci	case RT5677_TDM1_CTRL2:
3908c2ecf20Sopenharmony_ci	case RT5677_TDM1_CTRL3:
3918c2ecf20Sopenharmony_ci	case RT5677_TDM1_CTRL4:
3928c2ecf20Sopenharmony_ci	case RT5677_TDM1_CTRL5:
3938c2ecf20Sopenharmony_ci	case RT5677_TDM2_CTRL1:
3948c2ecf20Sopenharmony_ci	case RT5677_TDM2_CTRL2:
3958c2ecf20Sopenharmony_ci	case RT5677_TDM2_CTRL3:
3968c2ecf20Sopenharmony_ci	case RT5677_TDM2_CTRL4:
3978c2ecf20Sopenharmony_ci	case RT5677_TDM2_CTRL5:
3988c2ecf20Sopenharmony_ci	case RT5677_I2C_MASTER_CTRL1:
3998c2ecf20Sopenharmony_ci	case RT5677_I2C_MASTER_CTRL2:
4008c2ecf20Sopenharmony_ci	case RT5677_I2C_MASTER_CTRL3:
4018c2ecf20Sopenharmony_ci	case RT5677_I2C_MASTER_CTRL4:
4028c2ecf20Sopenharmony_ci	case RT5677_I2C_MASTER_CTRL5:
4038c2ecf20Sopenharmony_ci	case RT5677_I2C_MASTER_CTRL6:
4048c2ecf20Sopenharmony_ci	case RT5677_I2C_MASTER_CTRL7:
4058c2ecf20Sopenharmony_ci	case RT5677_I2C_MASTER_CTRL8:
4068c2ecf20Sopenharmony_ci	case RT5677_DMIC_CTRL1:
4078c2ecf20Sopenharmony_ci	case RT5677_DMIC_CTRL2:
4088c2ecf20Sopenharmony_ci	case RT5677_HAP_GENE_CTRL1:
4098c2ecf20Sopenharmony_ci	case RT5677_HAP_GENE_CTRL2:
4108c2ecf20Sopenharmony_ci	case RT5677_HAP_GENE_CTRL3:
4118c2ecf20Sopenharmony_ci	case RT5677_HAP_GENE_CTRL4:
4128c2ecf20Sopenharmony_ci	case RT5677_HAP_GENE_CTRL5:
4138c2ecf20Sopenharmony_ci	case RT5677_HAP_GENE_CTRL6:
4148c2ecf20Sopenharmony_ci	case RT5677_HAP_GENE_CTRL7:
4158c2ecf20Sopenharmony_ci	case RT5677_HAP_GENE_CTRL8:
4168c2ecf20Sopenharmony_ci	case RT5677_HAP_GENE_CTRL9:
4178c2ecf20Sopenharmony_ci	case RT5677_HAP_GENE_CTRL10:
4188c2ecf20Sopenharmony_ci	case RT5677_PWR_DIG1:
4198c2ecf20Sopenharmony_ci	case RT5677_PWR_DIG2:
4208c2ecf20Sopenharmony_ci	case RT5677_PWR_ANLG1:
4218c2ecf20Sopenharmony_ci	case RT5677_PWR_ANLG2:
4228c2ecf20Sopenharmony_ci	case RT5677_PWR_DSP1:
4238c2ecf20Sopenharmony_ci	case RT5677_PWR_DSP_ST:
4248c2ecf20Sopenharmony_ci	case RT5677_PWR_DSP2:
4258c2ecf20Sopenharmony_ci	case RT5677_ADC_DAC_HPF_CTRL1:
4268c2ecf20Sopenharmony_ci	case RT5677_PRIV_INDEX:
4278c2ecf20Sopenharmony_ci	case RT5677_PRIV_DATA:
4288c2ecf20Sopenharmony_ci	case RT5677_I2S4_SDP:
4298c2ecf20Sopenharmony_ci	case RT5677_I2S1_SDP:
4308c2ecf20Sopenharmony_ci	case RT5677_I2S2_SDP:
4318c2ecf20Sopenharmony_ci	case RT5677_I2S3_SDP:
4328c2ecf20Sopenharmony_ci	case RT5677_CLK_TREE_CTRL1:
4338c2ecf20Sopenharmony_ci	case RT5677_CLK_TREE_CTRL2:
4348c2ecf20Sopenharmony_ci	case RT5677_CLK_TREE_CTRL3:
4358c2ecf20Sopenharmony_ci	case RT5677_PLL1_CTRL1:
4368c2ecf20Sopenharmony_ci	case RT5677_PLL1_CTRL2:
4378c2ecf20Sopenharmony_ci	case RT5677_PLL2_CTRL1:
4388c2ecf20Sopenharmony_ci	case RT5677_PLL2_CTRL2:
4398c2ecf20Sopenharmony_ci	case RT5677_GLB_CLK1:
4408c2ecf20Sopenharmony_ci	case RT5677_GLB_CLK2:
4418c2ecf20Sopenharmony_ci	case RT5677_ASRC_1:
4428c2ecf20Sopenharmony_ci	case RT5677_ASRC_2:
4438c2ecf20Sopenharmony_ci	case RT5677_ASRC_3:
4448c2ecf20Sopenharmony_ci	case RT5677_ASRC_4:
4458c2ecf20Sopenharmony_ci	case RT5677_ASRC_5:
4468c2ecf20Sopenharmony_ci	case RT5677_ASRC_6:
4478c2ecf20Sopenharmony_ci	case RT5677_ASRC_7:
4488c2ecf20Sopenharmony_ci	case RT5677_ASRC_8:
4498c2ecf20Sopenharmony_ci	case RT5677_ASRC_9:
4508c2ecf20Sopenharmony_ci	case RT5677_ASRC_10:
4518c2ecf20Sopenharmony_ci	case RT5677_ASRC_11:
4528c2ecf20Sopenharmony_ci	case RT5677_ASRC_12:
4538c2ecf20Sopenharmony_ci	case RT5677_ASRC_13:
4548c2ecf20Sopenharmony_ci	case RT5677_ASRC_14:
4558c2ecf20Sopenharmony_ci	case RT5677_ASRC_15:
4568c2ecf20Sopenharmony_ci	case RT5677_ASRC_16:
4578c2ecf20Sopenharmony_ci	case RT5677_ASRC_17:
4588c2ecf20Sopenharmony_ci	case RT5677_ASRC_18:
4598c2ecf20Sopenharmony_ci	case RT5677_ASRC_19:
4608c2ecf20Sopenharmony_ci	case RT5677_ASRC_20:
4618c2ecf20Sopenharmony_ci	case RT5677_ASRC_21:
4628c2ecf20Sopenharmony_ci	case RT5677_ASRC_22:
4638c2ecf20Sopenharmony_ci	case RT5677_ASRC_23:
4648c2ecf20Sopenharmony_ci	case RT5677_VAD_CTRL1:
4658c2ecf20Sopenharmony_ci	case RT5677_VAD_CTRL2:
4668c2ecf20Sopenharmony_ci	case RT5677_VAD_CTRL3:
4678c2ecf20Sopenharmony_ci	case RT5677_VAD_CTRL4:
4688c2ecf20Sopenharmony_ci	case RT5677_VAD_CTRL5:
4698c2ecf20Sopenharmony_ci	case RT5677_DSP_INB_CTRL1:
4708c2ecf20Sopenharmony_ci	case RT5677_DSP_INB_CTRL2:
4718c2ecf20Sopenharmony_ci	case RT5677_DSP_IN_OUTB_CTRL:
4728c2ecf20Sopenharmony_ci	case RT5677_DSP_OUTB0_1_DIG_VOL:
4738c2ecf20Sopenharmony_ci	case RT5677_DSP_OUTB2_3_DIG_VOL:
4748c2ecf20Sopenharmony_ci	case RT5677_DSP_OUTB4_5_DIG_VOL:
4758c2ecf20Sopenharmony_ci	case RT5677_DSP_OUTB6_7_DIG_VOL:
4768c2ecf20Sopenharmony_ci	case RT5677_ADC_EQ_CTRL1:
4778c2ecf20Sopenharmony_ci	case RT5677_ADC_EQ_CTRL2:
4788c2ecf20Sopenharmony_ci	case RT5677_EQ_CTRL1:
4798c2ecf20Sopenharmony_ci	case RT5677_EQ_CTRL2:
4808c2ecf20Sopenharmony_ci	case RT5677_EQ_CTRL3:
4818c2ecf20Sopenharmony_ci	case RT5677_SOFT_VOL_ZERO_CROSS1:
4828c2ecf20Sopenharmony_ci	case RT5677_JD_CTRL1:
4838c2ecf20Sopenharmony_ci	case RT5677_JD_CTRL2:
4848c2ecf20Sopenharmony_ci	case RT5677_JD_CTRL3:
4858c2ecf20Sopenharmony_ci	case RT5677_IRQ_CTRL1:
4868c2ecf20Sopenharmony_ci	case RT5677_IRQ_CTRL2:
4878c2ecf20Sopenharmony_ci	case RT5677_GPIO_ST:
4888c2ecf20Sopenharmony_ci	case RT5677_GPIO_CTRL1:
4898c2ecf20Sopenharmony_ci	case RT5677_GPIO_CTRL2:
4908c2ecf20Sopenharmony_ci	case RT5677_GPIO_CTRL3:
4918c2ecf20Sopenharmony_ci	case RT5677_STO1_ADC_HI_FILTER1:
4928c2ecf20Sopenharmony_ci	case RT5677_STO1_ADC_HI_FILTER2:
4938c2ecf20Sopenharmony_ci	case RT5677_MONO_ADC_HI_FILTER1:
4948c2ecf20Sopenharmony_ci	case RT5677_MONO_ADC_HI_FILTER2:
4958c2ecf20Sopenharmony_ci	case RT5677_STO2_ADC_HI_FILTER1:
4968c2ecf20Sopenharmony_ci	case RT5677_STO2_ADC_HI_FILTER2:
4978c2ecf20Sopenharmony_ci	case RT5677_STO3_ADC_HI_FILTER1:
4988c2ecf20Sopenharmony_ci	case RT5677_STO3_ADC_HI_FILTER2:
4998c2ecf20Sopenharmony_ci	case RT5677_STO4_ADC_HI_FILTER1:
5008c2ecf20Sopenharmony_ci	case RT5677_STO4_ADC_HI_FILTER2:
5018c2ecf20Sopenharmony_ci	case RT5677_MB_DRC_CTRL1:
5028c2ecf20Sopenharmony_ci	case RT5677_DRC1_CTRL1:
5038c2ecf20Sopenharmony_ci	case RT5677_DRC1_CTRL2:
5048c2ecf20Sopenharmony_ci	case RT5677_DRC1_CTRL3:
5058c2ecf20Sopenharmony_ci	case RT5677_DRC1_CTRL4:
5068c2ecf20Sopenharmony_ci	case RT5677_DRC1_CTRL5:
5078c2ecf20Sopenharmony_ci	case RT5677_DRC1_CTRL6:
5088c2ecf20Sopenharmony_ci	case RT5677_DRC2_CTRL1:
5098c2ecf20Sopenharmony_ci	case RT5677_DRC2_CTRL2:
5108c2ecf20Sopenharmony_ci	case RT5677_DRC2_CTRL3:
5118c2ecf20Sopenharmony_ci	case RT5677_DRC2_CTRL4:
5128c2ecf20Sopenharmony_ci	case RT5677_DRC2_CTRL5:
5138c2ecf20Sopenharmony_ci	case RT5677_DRC2_CTRL6:
5148c2ecf20Sopenharmony_ci	case RT5677_DRC1_HL_CTRL1:
5158c2ecf20Sopenharmony_ci	case RT5677_DRC1_HL_CTRL2:
5168c2ecf20Sopenharmony_ci	case RT5677_DRC2_HL_CTRL1:
5178c2ecf20Sopenharmony_ci	case RT5677_DRC2_HL_CTRL2:
5188c2ecf20Sopenharmony_ci	case RT5677_DSP_INB1_SRC_CTRL1:
5198c2ecf20Sopenharmony_ci	case RT5677_DSP_INB1_SRC_CTRL2:
5208c2ecf20Sopenharmony_ci	case RT5677_DSP_INB1_SRC_CTRL3:
5218c2ecf20Sopenharmony_ci	case RT5677_DSP_INB1_SRC_CTRL4:
5228c2ecf20Sopenharmony_ci	case RT5677_DSP_INB2_SRC_CTRL1:
5238c2ecf20Sopenharmony_ci	case RT5677_DSP_INB2_SRC_CTRL2:
5248c2ecf20Sopenharmony_ci	case RT5677_DSP_INB2_SRC_CTRL3:
5258c2ecf20Sopenharmony_ci	case RT5677_DSP_INB2_SRC_CTRL4:
5268c2ecf20Sopenharmony_ci	case RT5677_DSP_INB3_SRC_CTRL1:
5278c2ecf20Sopenharmony_ci	case RT5677_DSP_INB3_SRC_CTRL2:
5288c2ecf20Sopenharmony_ci	case RT5677_DSP_INB3_SRC_CTRL3:
5298c2ecf20Sopenharmony_ci	case RT5677_DSP_INB3_SRC_CTRL4:
5308c2ecf20Sopenharmony_ci	case RT5677_DSP_OUTB1_SRC_CTRL1:
5318c2ecf20Sopenharmony_ci	case RT5677_DSP_OUTB1_SRC_CTRL2:
5328c2ecf20Sopenharmony_ci	case RT5677_DSP_OUTB1_SRC_CTRL3:
5338c2ecf20Sopenharmony_ci	case RT5677_DSP_OUTB1_SRC_CTRL4:
5348c2ecf20Sopenharmony_ci	case RT5677_DSP_OUTB2_SRC_CTRL1:
5358c2ecf20Sopenharmony_ci	case RT5677_DSP_OUTB2_SRC_CTRL2:
5368c2ecf20Sopenharmony_ci	case RT5677_DSP_OUTB2_SRC_CTRL3:
5378c2ecf20Sopenharmony_ci	case RT5677_DSP_OUTB2_SRC_CTRL4:
5388c2ecf20Sopenharmony_ci	case RT5677_DSP_OUTB_0123_MIXER_CTRL:
5398c2ecf20Sopenharmony_ci	case RT5677_DSP_OUTB_45_MIXER_CTRL:
5408c2ecf20Sopenharmony_ci	case RT5677_DSP_OUTB_67_MIXER_CTRL:
5418c2ecf20Sopenharmony_ci	case RT5677_DIG_MISC:
5428c2ecf20Sopenharmony_ci	case RT5677_GEN_CTRL1:
5438c2ecf20Sopenharmony_ci	case RT5677_GEN_CTRL2:
5448c2ecf20Sopenharmony_ci	case RT5677_VENDOR_ID:
5458c2ecf20Sopenharmony_ci	case RT5677_VENDOR_ID1:
5468c2ecf20Sopenharmony_ci	case RT5677_VENDOR_ID2:
5478c2ecf20Sopenharmony_ci		return true;
5488c2ecf20Sopenharmony_ci	default:
5498c2ecf20Sopenharmony_ci		return false;
5508c2ecf20Sopenharmony_ci	}
5518c2ecf20Sopenharmony_ci}
5528c2ecf20Sopenharmony_ci
5538c2ecf20Sopenharmony_ci/**
5548c2ecf20Sopenharmony_ci * rt5677_dsp_mode_i2c_write_addr - Write value to address on DSP mode.
5558c2ecf20Sopenharmony_ci * @rt5677: Private Data.
5568c2ecf20Sopenharmony_ci * @addr: Address index.
5578c2ecf20Sopenharmony_ci * @value: Address data.
5588c2ecf20Sopenharmony_ci * @opcode: opcode value
5598c2ecf20Sopenharmony_ci *
5608c2ecf20Sopenharmony_ci * Returns 0 for success or negative error code.
5618c2ecf20Sopenharmony_ci */
5628c2ecf20Sopenharmony_cistatic int rt5677_dsp_mode_i2c_write_addr(struct rt5677_priv *rt5677,
5638c2ecf20Sopenharmony_ci		unsigned int addr, unsigned int value, unsigned int opcode)
5648c2ecf20Sopenharmony_ci{
5658c2ecf20Sopenharmony_ci	struct snd_soc_component *component = rt5677->component;
5668c2ecf20Sopenharmony_ci	int ret;
5678c2ecf20Sopenharmony_ci
5688c2ecf20Sopenharmony_ci	mutex_lock(&rt5677->dsp_cmd_lock);
5698c2ecf20Sopenharmony_ci
5708c2ecf20Sopenharmony_ci	ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_ADDR_MSB,
5718c2ecf20Sopenharmony_ci		addr >> 16);
5728c2ecf20Sopenharmony_ci	if (ret < 0) {
5738c2ecf20Sopenharmony_ci		dev_err(component->dev, "Failed to set addr msb value: %d\n", ret);
5748c2ecf20Sopenharmony_ci		goto err;
5758c2ecf20Sopenharmony_ci	}
5768c2ecf20Sopenharmony_ci
5778c2ecf20Sopenharmony_ci	ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_ADDR_LSB,
5788c2ecf20Sopenharmony_ci		addr & 0xffff);
5798c2ecf20Sopenharmony_ci	if (ret < 0) {
5808c2ecf20Sopenharmony_ci		dev_err(component->dev, "Failed to set addr lsb value: %d\n", ret);
5818c2ecf20Sopenharmony_ci		goto err;
5828c2ecf20Sopenharmony_ci	}
5838c2ecf20Sopenharmony_ci
5848c2ecf20Sopenharmony_ci	ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_DATA_MSB,
5858c2ecf20Sopenharmony_ci		value >> 16);
5868c2ecf20Sopenharmony_ci	if (ret < 0) {
5878c2ecf20Sopenharmony_ci		dev_err(component->dev, "Failed to set data msb value: %d\n", ret);
5888c2ecf20Sopenharmony_ci		goto err;
5898c2ecf20Sopenharmony_ci	}
5908c2ecf20Sopenharmony_ci
5918c2ecf20Sopenharmony_ci	ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_DATA_LSB,
5928c2ecf20Sopenharmony_ci		value & 0xffff);
5938c2ecf20Sopenharmony_ci	if (ret < 0) {
5948c2ecf20Sopenharmony_ci		dev_err(component->dev, "Failed to set data lsb value: %d\n", ret);
5958c2ecf20Sopenharmony_ci		goto err;
5968c2ecf20Sopenharmony_ci	}
5978c2ecf20Sopenharmony_ci
5988c2ecf20Sopenharmony_ci	ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_OP_CODE,
5998c2ecf20Sopenharmony_ci		opcode);
6008c2ecf20Sopenharmony_ci	if (ret < 0) {
6018c2ecf20Sopenharmony_ci		dev_err(component->dev, "Failed to set op code value: %d\n", ret);
6028c2ecf20Sopenharmony_ci		goto err;
6038c2ecf20Sopenharmony_ci	}
6048c2ecf20Sopenharmony_ci
6058c2ecf20Sopenharmony_cierr:
6068c2ecf20Sopenharmony_ci	mutex_unlock(&rt5677->dsp_cmd_lock);
6078c2ecf20Sopenharmony_ci
6088c2ecf20Sopenharmony_ci	return ret;
6098c2ecf20Sopenharmony_ci}
6108c2ecf20Sopenharmony_ci
6118c2ecf20Sopenharmony_ci/**
6128c2ecf20Sopenharmony_ci * rt5677_dsp_mode_i2c_read_addr - Read value from address on DSP mode.
6138c2ecf20Sopenharmony_ci * @rt5677: Private Data.
6148c2ecf20Sopenharmony_ci * @addr: Address index.
6158c2ecf20Sopenharmony_ci * @value: Address data.
6168c2ecf20Sopenharmony_ci *
6178c2ecf20Sopenharmony_ci *
6188c2ecf20Sopenharmony_ci * Returns 0 for success or negative error code.
6198c2ecf20Sopenharmony_ci */
6208c2ecf20Sopenharmony_cistatic int rt5677_dsp_mode_i2c_read_addr(
6218c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677, unsigned int addr, unsigned int *value)
6228c2ecf20Sopenharmony_ci{
6238c2ecf20Sopenharmony_ci	struct snd_soc_component *component = rt5677->component;
6248c2ecf20Sopenharmony_ci	int ret;
6258c2ecf20Sopenharmony_ci	unsigned int msb, lsb;
6268c2ecf20Sopenharmony_ci
6278c2ecf20Sopenharmony_ci	mutex_lock(&rt5677->dsp_cmd_lock);
6288c2ecf20Sopenharmony_ci
6298c2ecf20Sopenharmony_ci	ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_ADDR_MSB,
6308c2ecf20Sopenharmony_ci		addr >> 16);
6318c2ecf20Sopenharmony_ci	if (ret < 0) {
6328c2ecf20Sopenharmony_ci		dev_err(component->dev, "Failed to set addr msb value: %d\n", ret);
6338c2ecf20Sopenharmony_ci		goto err;
6348c2ecf20Sopenharmony_ci	}
6358c2ecf20Sopenharmony_ci
6368c2ecf20Sopenharmony_ci	ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_ADDR_LSB,
6378c2ecf20Sopenharmony_ci		addr & 0xffff);
6388c2ecf20Sopenharmony_ci	if (ret < 0) {
6398c2ecf20Sopenharmony_ci		dev_err(component->dev, "Failed to set addr lsb value: %d\n", ret);
6408c2ecf20Sopenharmony_ci		goto err;
6418c2ecf20Sopenharmony_ci	}
6428c2ecf20Sopenharmony_ci
6438c2ecf20Sopenharmony_ci	ret = regmap_write(rt5677->regmap_physical, RT5677_DSP_I2C_OP_CODE,
6448c2ecf20Sopenharmony_ci		0x0002);
6458c2ecf20Sopenharmony_ci	if (ret < 0) {
6468c2ecf20Sopenharmony_ci		dev_err(component->dev, "Failed to set op code value: %d\n", ret);
6478c2ecf20Sopenharmony_ci		goto err;
6488c2ecf20Sopenharmony_ci	}
6498c2ecf20Sopenharmony_ci
6508c2ecf20Sopenharmony_ci	regmap_read(rt5677->regmap_physical, RT5677_DSP_I2C_DATA_MSB, &msb);
6518c2ecf20Sopenharmony_ci	regmap_read(rt5677->regmap_physical, RT5677_DSP_I2C_DATA_LSB, &lsb);
6528c2ecf20Sopenharmony_ci	*value = (msb << 16) | lsb;
6538c2ecf20Sopenharmony_ci
6548c2ecf20Sopenharmony_cierr:
6558c2ecf20Sopenharmony_ci	mutex_unlock(&rt5677->dsp_cmd_lock);
6568c2ecf20Sopenharmony_ci
6578c2ecf20Sopenharmony_ci	return ret;
6588c2ecf20Sopenharmony_ci}
6598c2ecf20Sopenharmony_ci
6608c2ecf20Sopenharmony_ci/**
6618c2ecf20Sopenharmony_ci * rt5677_dsp_mode_i2c_write - Write register on DSP mode.
6628c2ecf20Sopenharmony_ci * @rt5677: Private Data.
6638c2ecf20Sopenharmony_ci * @reg: Register index.
6648c2ecf20Sopenharmony_ci * @value: Register data.
6658c2ecf20Sopenharmony_ci *
6668c2ecf20Sopenharmony_ci *
6678c2ecf20Sopenharmony_ci * Returns 0 for success or negative error code.
6688c2ecf20Sopenharmony_ci */
6698c2ecf20Sopenharmony_cistatic int rt5677_dsp_mode_i2c_write(struct rt5677_priv *rt5677,
6708c2ecf20Sopenharmony_ci		unsigned int reg, unsigned int value)
6718c2ecf20Sopenharmony_ci{
6728c2ecf20Sopenharmony_ci	return rt5677_dsp_mode_i2c_write_addr(rt5677, 0x18020000 + reg * 2,
6738c2ecf20Sopenharmony_ci		value, 0x0001);
6748c2ecf20Sopenharmony_ci}
6758c2ecf20Sopenharmony_ci
6768c2ecf20Sopenharmony_ci/**
6778c2ecf20Sopenharmony_ci * rt5677_dsp_mode_i2c_read - Read register on DSP mode.
6788c2ecf20Sopenharmony_ci * @rt5677: Private Data
6798c2ecf20Sopenharmony_ci * @reg: Register index.
6808c2ecf20Sopenharmony_ci * @value: Register data.
6818c2ecf20Sopenharmony_ci *
6828c2ecf20Sopenharmony_ci *
6838c2ecf20Sopenharmony_ci * Returns 0 for success or negative error code.
6848c2ecf20Sopenharmony_ci */
6858c2ecf20Sopenharmony_cistatic int rt5677_dsp_mode_i2c_read(
6868c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677, unsigned int reg, unsigned int *value)
6878c2ecf20Sopenharmony_ci{
6888c2ecf20Sopenharmony_ci	int ret = rt5677_dsp_mode_i2c_read_addr(rt5677, 0x18020000 + reg * 2,
6898c2ecf20Sopenharmony_ci		value);
6908c2ecf20Sopenharmony_ci
6918c2ecf20Sopenharmony_ci	*value &= 0xffff;
6928c2ecf20Sopenharmony_ci
6938c2ecf20Sopenharmony_ci	return ret;
6948c2ecf20Sopenharmony_ci}
6958c2ecf20Sopenharmony_ci
6968c2ecf20Sopenharmony_cistatic void rt5677_set_dsp_mode(struct rt5677_priv *rt5677, bool on)
6978c2ecf20Sopenharmony_ci{
6988c2ecf20Sopenharmony_ci	if (on) {
6998c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_PWR_DSP1,
7008c2ecf20Sopenharmony_ci			RT5677_PWR_DSP, RT5677_PWR_DSP);
7018c2ecf20Sopenharmony_ci		rt5677->is_dsp_mode = true;
7028c2ecf20Sopenharmony_ci	} else {
7038c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_PWR_DSP1,
7048c2ecf20Sopenharmony_ci			RT5677_PWR_DSP, 0x0);
7058c2ecf20Sopenharmony_ci		rt5677->is_dsp_mode = false;
7068c2ecf20Sopenharmony_ci	}
7078c2ecf20Sopenharmony_ci}
7088c2ecf20Sopenharmony_ci
7098c2ecf20Sopenharmony_cistatic unsigned int rt5677_set_vad_source(struct rt5677_priv *rt5677)
7108c2ecf20Sopenharmony_ci{
7118c2ecf20Sopenharmony_ci	struct snd_soc_dapm_context *dapm =
7128c2ecf20Sopenharmony_ci			snd_soc_component_get_dapm(rt5677->component);
7138c2ecf20Sopenharmony_ci	/* Force dapm to sync before we enable the
7148c2ecf20Sopenharmony_ci	 * DSP to prevent write corruption
7158c2ecf20Sopenharmony_ci	 */
7168c2ecf20Sopenharmony_ci	snd_soc_dapm_sync(dapm);
7178c2ecf20Sopenharmony_ci
7188c2ecf20Sopenharmony_ci	/* DMIC1 power = enabled
7198c2ecf20Sopenharmony_ci	 * DMIC CLK = 256 * fs / 12
7208c2ecf20Sopenharmony_ci	 */
7218c2ecf20Sopenharmony_ci	regmap_update_bits(rt5677->regmap, RT5677_DMIC_CTRL1,
7228c2ecf20Sopenharmony_ci		RT5677_DMIC_CLK_MASK, 5 << RT5677_DMIC_CLK_SFT);
7238c2ecf20Sopenharmony_ci
7248c2ecf20Sopenharmony_ci	/* I2S pre divide 2 = /6 (clk_sys2) */
7258c2ecf20Sopenharmony_ci	regmap_update_bits(rt5677->regmap, RT5677_CLK_TREE_CTRL1,
7268c2ecf20Sopenharmony_ci		RT5677_I2S_PD2_MASK, RT5677_I2S_PD2_6);
7278c2ecf20Sopenharmony_ci
7288c2ecf20Sopenharmony_ci	/* DSP Clock = MCLK1 (bypassed PLL2) */
7298c2ecf20Sopenharmony_ci	regmap_write(rt5677->regmap, RT5677_GLB_CLK2,
7308c2ecf20Sopenharmony_ci		RT5677_DSP_CLK_SRC_BYPASS);
7318c2ecf20Sopenharmony_ci
7328c2ecf20Sopenharmony_ci	/* SAD Threshold1 */
7338c2ecf20Sopenharmony_ci	regmap_write(rt5677->regmap, RT5677_VAD_CTRL2, 0x013f);
7348c2ecf20Sopenharmony_ci	/* SAD Threshold2 */
7358c2ecf20Sopenharmony_ci	regmap_write(rt5677->regmap, RT5677_VAD_CTRL3, 0x0ae5);
7368c2ecf20Sopenharmony_ci	/* SAD Sample Rate Converter = Up 6 (8K to 48K)
7378c2ecf20Sopenharmony_ci	 * SAD Output Sample Rate = Same as I2S
7388c2ecf20Sopenharmony_ci	 * SAD Threshold3
7398c2ecf20Sopenharmony_ci	 */
7408c2ecf20Sopenharmony_ci	regmap_update_bits(rt5677->regmap, RT5677_VAD_CTRL4,
7418c2ecf20Sopenharmony_ci		RT5677_VAD_OUT_SRC_RATE_MASK | RT5677_VAD_OUT_SRC_MASK |
7428c2ecf20Sopenharmony_ci		RT5677_VAD_LV_DIFF_MASK, 0x7f << RT5677_VAD_LV_DIFF_SFT);
7438c2ecf20Sopenharmony_ci	/* Minimum frame level within a pre-determined duration = 32 frames
7448c2ecf20Sopenharmony_ci	 * Bypass ADPCM Encoder/Decoder = Bypass ADPCM
7458c2ecf20Sopenharmony_ci	 * Automatic Push Data to SAD Buffer Once SAD Flag is triggered = enable
7468c2ecf20Sopenharmony_ci	 * SAD Buffer Over-Writing = enable
7478c2ecf20Sopenharmony_ci	 * SAD Buffer Pop Mode Control = disable
7488c2ecf20Sopenharmony_ci	 * SAD Buffer Push Mode Control = enable
7498c2ecf20Sopenharmony_ci	 * SAD Detector Control = enable
7508c2ecf20Sopenharmony_ci	 * SAD Function Control = enable
7518c2ecf20Sopenharmony_ci	 * SAD Function Reset = normal
7528c2ecf20Sopenharmony_ci	 */
7538c2ecf20Sopenharmony_ci	regmap_write(rt5677->regmap, RT5677_VAD_CTRL1,
7548c2ecf20Sopenharmony_ci		RT5677_VAD_FUNC_RESET | RT5677_VAD_FUNC_ENABLE |
7558c2ecf20Sopenharmony_ci		RT5677_VAD_DET_ENABLE | RT5677_VAD_BUF_PUSH |
7568c2ecf20Sopenharmony_ci		RT5677_VAD_BUF_OW | RT5677_VAD_FG2ENC |
7578c2ecf20Sopenharmony_ci		RT5677_VAD_ADPCM_BYPASS | 1 << RT5677_VAD_MIN_DUR_SFT);
7588c2ecf20Sopenharmony_ci
7598c2ecf20Sopenharmony_ci	/* VAD/SAD is not routed to the IRQ output (i.e. MX-BE[14] = 0), but it
7608c2ecf20Sopenharmony_ci	 * is routed to DSP_IRQ_0, so DSP firmware may use it to sleep and save
7618c2ecf20Sopenharmony_ci	 * power. See ALC5677 datasheet section 9.17 "GPIO, Interrupt and Jack
7628c2ecf20Sopenharmony_ci	 * Detection" for more info.
7638c2ecf20Sopenharmony_ci	 */
7648c2ecf20Sopenharmony_ci
7658c2ecf20Sopenharmony_ci	/* Private register, no doc */
7668c2ecf20Sopenharmony_ci	regmap_update_bits(rt5677->regmap, RT5677_PR_BASE + RT5677_BIAS_CUR4,
7678c2ecf20Sopenharmony_ci		0x0f00, 0x0100);
7688c2ecf20Sopenharmony_ci
7698c2ecf20Sopenharmony_ci	/* LDO2 output = 1.2V
7708c2ecf20Sopenharmony_ci	 * LDO1 output = 1.2V (LDO_IN = 1.8V)
7718c2ecf20Sopenharmony_ci	 */
7728c2ecf20Sopenharmony_ci	regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG1,
7738c2ecf20Sopenharmony_ci		RT5677_LDO1_SEL_MASK | RT5677_LDO2_SEL_MASK,
7748c2ecf20Sopenharmony_ci		5 << RT5677_LDO1_SEL_SFT | 5 << RT5677_LDO2_SEL_SFT);
7758c2ecf20Sopenharmony_ci
7768c2ecf20Sopenharmony_ci	/* Codec core power =  power on
7778c2ecf20Sopenharmony_ci	 * LDO1 power = power on
7788c2ecf20Sopenharmony_ci	 */
7798c2ecf20Sopenharmony_ci	regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2,
7808c2ecf20Sopenharmony_ci		RT5677_PWR_CORE | RT5677_PWR_LDO1,
7818c2ecf20Sopenharmony_ci		RT5677_PWR_CORE | RT5677_PWR_LDO1);
7828c2ecf20Sopenharmony_ci
7838c2ecf20Sopenharmony_ci	/* Isolation for DCVDD4 = normal (set during probe)
7848c2ecf20Sopenharmony_ci	 * Isolation for DCVDD2 = normal (set during probe)
7858c2ecf20Sopenharmony_ci	 * Isolation for DSP = normal
7868c2ecf20Sopenharmony_ci	 * Isolation for Band 0~7 = disable
7878c2ecf20Sopenharmony_ci	 * Isolation for InBound 4~10 and OutBound 4~10 = disable
7888c2ecf20Sopenharmony_ci	 */
7898c2ecf20Sopenharmony_ci	regmap_write(rt5677->regmap, RT5677_PWR_DSP2,
7908c2ecf20Sopenharmony_ci		RT5677_PWR_CORE_ISO | RT5677_PWR_DSP_ISO |
7918c2ecf20Sopenharmony_ci		RT5677_PWR_SR7_ISO | RT5677_PWR_SR6_ISO |
7928c2ecf20Sopenharmony_ci		RT5677_PWR_SR5_ISO | RT5677_PWR_SR4_ISO |
7938c2ecf20Sopenharmony_ci		RT5677_PWR_SR3_ISO | RT5677_PWR_SR2_ISO |
7948c2ecf20Sopenharmony_ci		RT5677_PWR_SR1_ISO | RT5677_PWR_SR0_ISO |
7958c2ecf20Sopenharmony_ci		RT5677_PWR_MLT_ISO);
7968c2ecf20Sopenharmony_ci
7978c2ecf20Sopenharmony_ci	/* System Band 0~7 = power on
7988c2ecf20Sopenharmony_ci	 * InBound 4~10 and OutBound 4~10 = power on
7998c2ecf20Sopenharmony_ci	 * DSP = power on
8008c2ecf20Sopenharmony_ci	 * DSP CPU = stop (will be set to "run" after firmware loaded)
8018c2ecf20Sopenharmony_ci	 */
8028c2ecf20Sopenharmony_ci	regmap_write(rt5677->regmap, RT5677_PWR_DSP1,
8038c2ecf20Sopenharmony_ci		RT5677_PWR_SR7 | RT5677_PWR_SR6 |
8048c2ecf20Sopenharmony_ci		RT5677_PWR_SR5 | RT5677_PWR_SR4 |
8058c2ecf20Sopenharmony_ci		RT5677_PWR_SR3 | RT5677_PWR_SR2 |
8068c2ecf20Sopenharmony_ci		RT5677_PWR_SR1 | RT5677_PWR_SR0 |
8078c2ecf20Sopenharmony_ci		RT5677_PWR_MLT | RT5677_PWR_DSP |
8088c2ecf20Sopenharmony_ci		RT5677_PWR_DSP_CPU);
8098c2ecf20Sopenharmony_ci
8108c2ecf20Sopenharmony_ci	return 0;
8118c2ecf20Sopenharmony_ci}
8128c2ecf20Sopenharmony_ci
8138c2ecf20Sopenharmony_cistatic int rt5677_parse_and_load_dsp(struct rt5677_priv *rt5677, const u8 *buf,
8148c2ecf20Sopenharmony_ci		unsigned int len)
8158c2ecf20Sopenharmony_ci{
8168c2ecf20Sopenharmony_ci	struct snd_soc_component *component = rt5677->component;
8178c2ecf20Sopenharmony_ci	Elf32_Ehdr *elf_hdr;
8188c2ecf20Sopenharmony_ci	Elf32_Phdr *pr_hdr;
8198c2ecf20Sopenharmony_ci	Elf32_Half i;
8208c2ecf20Sopenharmony_ci	int ret = 0;
8218c2ecf20Sopenharmony_ci
8228c2ecf20Sopenharmony_ci	if (!buf || (len < sizeof(Elf32_Ehdr)))
8238c2ecf20Sopenharmony_ci		return -ENOMEM;
8248c2ecf20Sopenharmony_ci
8258c2ecf20Sopenharmony_ci	elf_hdr = (Elf32_Ehdr *)buf;
8268c2ecf20Sopenharmony_ci#ifndef EM_XTENSA
8278c2ecf20Sopenharmony_ci#define EM_XTENSA	94
8288c2ecf20Sopenharmony_ci#endif
8298c2ecf20Sopenharmony_ci	if (strncmp(elf_hdr->e_ident, ELFMAG, sizeof(ELFMAG) - 1))
8308c2ecf20Sopenharmony_ci		dev_err(component->dev, "Wrong ELF header prefix\n");
8318c2ecf20Sopenharmony_ci	if (elf_hdr->e_ehsize != sizeof(Elf32_Ehdr))
8328c2ecf20Sopenharmony_ci		dev_err(component->dev, "Wrong Elf header size\n");
8338c2ecf20Sopenharmony_ci	if (elf_hdr->e_machine != EM_XTENSA)
8348c2ecf20Sopenharmony_ci		dev_err(component->dev, "Wrong DSP code file\n");
8358c2ecf20Sopenharmony_ci
8368c2ecf20Sopenharmony_ci	if (len < elf_hdr->e_phoff)
8378c2ecf20Sopenharmony_ci		return -ENOMEM;
8388c2ecf20Sopenharmony_ci	pr_hdr = (Elf32_Phdr *)(buf + elf_hdr->e_phoff);
8398c2ecf20Sopenharmony_ci	for (i = 0; i < elf_hdr->e_phnum; i++) {
8408c2ecf20Sopenharmony_ci		/* TODO: handle p_memsz != p_filesz */
8418c2ecf20Sopenharmony_ci		if (pr_hdr->p_paddr && pr_hdr->p_filesz) {
8428c2ecf20Sopenharmony_ci			dev_info(component->dev, "Load 0x%x bytes to 0x%x\n",
8438c2ecf20Sopenharmony_ci					pr_hdr->p_filesz, pr_hdr->p_paddr);
8448c2ecf20Sopenharmony_ci
8458c2ecf20Sopenharmony_ci			ret = rt5677_spi_write(pr_hdr->p_paddr,
8468c2ecf20Sopenharmony_ci					buf + pr_hdr->p_offset,
8478c2ecf20Sopenharmony_ci					pr_hdr->p_filesz);
8488c2ecf20Sopenharmony_ci			if (ret)
8498c2ecf20Sopenharmony_ci				dev_err(component->dev, "Load firmware failed %d\n",
8508c2ecf20Sopenharmony_ci						ret);
8518c2ecf20Sopenharmony_ci		}
8528c2ecf20Sopenharmony_ci		pr_hdr++;
8538c2ecf20Sopenharmony_ci	}
8548c2ecf20Sopenharmony_ci	return ret;
8558c2ecf20Sopenharmony_ci}
8568c2ecf20Sopenharmony_ci
8578c2ecf20Sopenharmony_cistatic int rt5677_load_dsp_from_file(struct rt5677_priv *rt5677)
8588c2ecf20Sopenharmony_ci{
8598c2ecf20Sopenharmony_ci	const struct firmware *fwp;
8608c2ecf20Sopenharmony_ci	struct device *dev = rt5677->component->dev;
8618c2ecf20Sopenharmony_ci	int ret = 0;
8628c2ecf20Sopenharmony_ci
8638c2ecf20Sopenharmony_ci	/* Load dsp firmware from rt5677_elf_vad file */
8648c2ecf20Sopenharmony_ci	ret = request_firmware(&fwp, "rt5677_elf_vad", dev);
8658c2ecf20Sopenharmony_ci	if (ret) {
8668c2ecf20Sopenharmony_ci		dev_err(dev, "Request rt5677_elf_vad failed %d\n", ret);
8678c2ecf20Sopenharmony_ci		return ret;
8688c2ecf20Sopenharmony_ci	}
8698c2ecf20Sopenharmony_ci	dev_info(dev, "Requested rt5677_elf_vad (%zu)\n", fwp->size);
8708c2ecf20Sopenharmony_ci
8718c2ecf20Sopenharmony_ci	ret = rt5677_parse_and_load_dsp(rt5677, fwp->data, fwp->size);
8728c2ecf20Sopenharmony_ci	release_firmware(fwp);
8738c2ecf20Sopenharmony_ci	return ret;
8748c2ecf20Sopenharmony_ci}
8758c2ecf20Sopenharmony_ci
8768c2ecf20Sopenharmony_cistatic int rt5677_set_dsp_vad(struct snd_soc_component *component, bool on)
8778c2ecf20Sopenharmony_ci{
8788c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
8798c2ecf20Sopenharmony_ci	rt5677->dsp_vad_en_request = on;
8808c2ecf20Sopenharmony_ci	rt5677->dsp_vad_en = on;
8818c2ecf20Sopenharmony_ci
8828c2ecf20Sopenharmony_ci	if (!IS_ENABLED(CONFIG_SND_SOC_RT5677_SPI))
8838c2ecf20Sopenharmony_ci		return -ENXIO;
8848c2ecf20Sopenharmony_ci
8858c2ecf20Sopenharmony_ci	schedule_delayed_work(&rt5677->dsp_work, 0);
8868c2ecf20Sopenharmony_ci	return 0;
8878c2ecf20Sopenharmony_ci}
8888c2ecf20Sopenharmony_ci
8898c2ecf20Sopenharmony_cistatic void rt5677_dsp_work(struct work_struct *work)
8908c2ecf20Sopenharmony_ci{
8918c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 =
8928c2ecf20Sopenharmony_ci		container_of(work, struct rt5677_priv, dsp_work.work);
8938c2ecf20Sopenharmony_ci	static bool activity;
8948c2ecf20Sopenharmony_ci	bool enable = rt5677->dsp_vad_en;
8958c2ecf20Sopenharmony_ci	int i, val;
8968c2ecf20Sopenharmony_ci
8978c2ecf20Sopenharmony_ci
8988c2ecf20Sopenharmony_ci	dev_info(rt5677->component->dev, "DSP VAD: enable=%d, activity=%d\n",
8998c2ecf20Sopenharmony_ci			enable, activity);
9008c2ecf20Sopenharmony_ci
9018c2ecf20Sopenharmony_ci	if (enable && !activity) {
9028c2ecf20Sopenharmony_ci		activity = true;
9038c2ecf20Sopenharmony_ci
9048c2ecf20Sopenharmony_ci		/* Before a hotword is detected, GPIO1 pin is configured as IRQ
9058c2ecf20Sopenharmony_ci		 * output so that jack detect works. When a hotword is detected,
9068c2ecf20Sopenharmony_ci		 * the DSP firmware configures the GPIO1 pin as GPIO1 and
9078c2ecf20Sopenharmony_ci		 * drives a 1. rt5677_irq() is called after a rising edge on
9088c2ecf20Sopenharmony_ci		 * the GPIO1 pin, due to either jack detect event or hotword
9098c2ecf20Sopenharmony_ci		 * event, or both. All possible events are checked and handled
9108c2ecf20Sopenharmony_ci		 * in rt5677_irq() where GPIO1 pin is configured back to IRQ
9118c2ecf20Sopenharmony_ci		 * output if a hotword is detected.
9128c2ecf20Sopenharmony_ci		 */
9138c2ecf20Sopenharmony_ci
9148c2ecf20Sopenharmony_ci		rt5677_set_vad_source(rt5677);
9158c2ecf20Sopenharmony_ci		rt5677_set_dsp_mode(rt5677, true);
9168c2ecf20Sopenharmony_ci
9178c2ecf20Sopenharmony_ci#define RT5677_BOOT_RETRY 20
9188c2ecf20Sopenharmony_ci		for (i = 0; i < RT5677_BOOT_RETRY; i++) {
9198c2ecf20Sopenharmony_ci			regmap_read(rt5677->regmap, RT5677_PWR_DSP_ST, &val);
9208c2ecf20Sopenharmony_ci			if (val == 0x3ff)
9218c2ecf20Sopenharmony_ci				break;
9228c2ecf20Sopenharmony_ci			udelay(500);
9238c2ecf20Sopenharmony_ci		}
9248c2ecf20Sopenharmony_ci		if (i == RT5677_BOOT_RETRY && val != 0x3ff) {
9258c2ecf20Sopenharmony_ci			dev_err(rt5677->component->dev, "DSP Boot Timed Out!");
9268c2ecf20Sopenharmony_ci			return;
9278c2ecf20Sopenharmony_ci		}
9288c2ecf20Sopenharmony_ci
9298c2ecf20Sopenharmony_ci		/* Boot the firmware from IRAM instead of SRAM0. */
9308c2ecf20Sopenharmony_ci		rt5677_dsp_mode_i2c_write_addr(rt5677, RT5677_DSP_BOOT_VECTOR,
9318c2ecf20Sopenharmony_ci			0x0009, 0x0003);
9328c2ecf20Sopenharmony_ci		rt5677_dsp_mode_i2c_write_addr(rt5677, RT5677_DSP_BOOT_VECTOR,
9338c2ecf20Sopenharmony_ci			0x0019, 0x0003);
9348c2ecf20Sopenharmony_ci		rt5677_dsp_mode_i2c_write_addr(rt5677, RT5677_DSP_BOOT_VECTOR,
9358c2ecf20Sopenharmony_ci			0x0009, 0x0003);
9368c2ecf20Sopenharmony_ci
9378c2ecf20Sopenharmony_ci		rt5677_load_dsp_from_file(rt5677);
9388c2ecf20Sopenharmony_ci
9398c2ecf20Sopenharmony_ci		/* Set DSP CPU to Run */
9408c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_PWR_DSP1,
9418c2ecf20Sopenharmony_ci			RT5677_PWR_DSP_CPU, 0x0);
9428c2ecf20Sopenharmony_ci	} else if (!enable && activity) {
9438c2ecf20Sopenharmony_ci		activity = false;
9448c2ecf20Sopenharmony_ci
9458c2ecf20Sopenharmony_ci		/* Don't turn off the DSP while handling irqs */
9468c2ecf20Sopenharmony_ci		mutex_lock(&rt5677->irq_lock);
9478c2ecf20Sopenharmony_ci		/* Set DSP CPU to Stop */
9488c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_PWR_DSP1,
9498c2ecf20Sopenharmony_ci			RT5677_PWR_DSP_CPU, RT5677_PWR_DSP_CPU);
9508c2ecf20Sopenharmony_ci
9518c2ecf20Sopenharmony_ci		rt5677_set_dsp_mode(rt5677, false);
9528c2ecf20Sopenharmony_ci
9538c2ecf20Sopenharmony_ci		/* Disable and clear VAD interrupt */
9548c2ecf20Sopenharmony_ci		regmap_write(rt5677->regmap, RT5677_VAD_CTRL1, 0x2184);
9558c2ecf20Sopenharmony_ci
9568c2ecf20Sopenharmony_ci		/* Set GPIO1 pin back to be IRQ output for jack detect */
9578c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL1,
9588c2ecf20Sopenharmony_ci			RT5677_GPIO1_PIN_MASK, RT5677_GPIO1_PIN_IRQ);
9598c2ecf20Sopenharmony_ci
9608c2ecf20Sopenharmony_ci		mutex_unlock(&rt5677->irq_lock);
9618c2ecf20Sopenharmony_ci	}
9628c2ecf20Sopenharmony_ci}
9638c2ecf20Sopenharmony_ci
9648c2ecf20Sopenharmony_cistatic const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -6525, 75, 0);
9658c2ecf20Sopenharmony_cistatic const DECLARE_TLV_DB_SCALE(adc_vol_tlv, -1725, 75, 0);
9668c2ecf20Sopenharmony_cistatic const DECLARE_TLV_DB_SCALE(adc_bst_tlv, 0, 1200, 0);
9678c2ecf20Sopenharmony_cistatic const DECLARE_TLV_DB_SCALE(st_vol_tlv, -4650, 150, 0);
9688c2ecf20Sopenharmony_ci
9698c2ecf20Sopenharmony_ci/* {0, +20, +24, +30, +35, +40, +44, +50, +52} dB */
9708c2ecf20Sopenharmony_cistatic const DECLARE_TLV_DB_RANGE(bst_tlv,
9718c2ecf20Sopenharmony_ci	0, 0, TLV_DB_SCALE_ITEM(0, 0, 0),
9728c2ecf20Sopenharmony_ci	1, 1, TLV_DB_SCALE_ITEM(2000, 0, 0),
9738c2ecf20Sopenharmony_ci	2, 2, TLV_DB_SCALE_ITEM(2400, 0, 0),
9748c2ecf20Sopenharmony_ci	3, 5, TLV_DB_SCALE_ITEM(3000, 500, 0),
9758c2ecf20Sopenharmony_ci	6, 6, TLV_DB_SCALE_ITEM(4400, 0, 0),
9768c2ecf20Sopenharmony_ci	7, 7, TLV_DB_SCALE_ITEM(5000, 0, 0),
9778c2ecf20Sopenharmony_ci	8, 8, TLV_DB_SCALE_ITEM(5200, 0, 0)
9788c2ecf20Sopenharmony_ci);
9798c2ecf20Sopenharmony_ci
9808c2ecf20Sopenharmony_cistatic int rt5677_dsp_vad_get(struct snd_kcontrol *kcontrol,
9818c2ecf20Sopenharmony_ci		struct snd_ctl_elem_value *ucontrol)
9828c2ecf20Sopenharmony_ci{
9838c2ecf20Sopenharmony_ci	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
9848c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
9858c2ecf20Sopenharmony_ci
9868c2ecf20Sopenharmony_ci	ucontrol->value.integer.value[0] = rt5677->dsp_vad_en_request;
9878c2ecf20Sopenharmony_ci
9888c2ecf20Sopenharmony_ci	return 0;
9898c2ecf20Sopenharmony_ci}
9908c2ecf20Sopenharmony_ci
9918c2ecf20Sopenharmony_cistatic int rt5677_dsp_vad_put(struct snd_kcontrol *kcontrol,
9928c2ecf20Sopenharmony_ci		struct snd_ctl_elem_value *ucontrol)
9938c2ecf20Sopenharmony_ci{
9948c2ecf20Sopenharmony_ci	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
9958c2ecf20Sopenharmony_ci
9968c2ecf20Sopenharmony_ci	rt5677_set_dsp_vad(component, !!ucontrol->value.integer.value[0]);
9978c2ecf20Sopenharmony_ci
9988c2ecf20Sopenharmony_ci	return 0;
9998c2ecf20Sopenharmony_ci}
10008c2ecf20Sopenharmony_ci
10018c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_snd_controls[] = {
10028c2ecf20Sopenharmony_ci	/* OUTPUT Control */
10038c2ecf20Sopenharmony_ci	SOC_SINGLE("OUT1 Playback Switch", RT5677_LOUT1,
10048c2ecf20Sopenharmony_ci		RT5677_LOUT1_L_MUTE_SFT, 1, 1),
10058c2ecf20Sopenharmony_ci	SOC_SINGLE("OUT2 Playback Switch", RT5677_LOUT1,
10068c2ecf20Sopenharmony_ci		RT5677_LOUT2_L_MUTE_SFT, 1, 1),
10078c2ecf20Sopenharmony_ci	SOC_SINGLE("OUT3 Playback Switch", RT5677_LOUT1,
10088c2ecf20Sopenharmony_ci		RT5677_LOUT3_L_MUTE_SFT, 1, 1),
10098c2ecf20Sopenharmony_ci
10108c2ecf20Sopenharmony_ci	/* DAC Digital Volume */
10118c2ecf20Sopenharmony_ci	SOC_DOUBLE_TLV("DAC1 Playback Volume", RT5677_DAC1_DIG_VOL,
10128c2ecf20Sopenharmony_ci		RT5677_L_VOL_SFT, RT5677_R_VOL_SFT, 127, 0, dac_vol_tlv),
10138c2ecf20Sopenharmony_ci	SOC_DOUBLE_TLV("DAC2 Playback Volume", RT5677_DAC2_DIG_VOL,
10148c2ecf20Sopenharmony_ci		RT5677_L_VOL_SFT, RT5677_R_VOL_SFT, 127, 0, dac_vol_tlv),
10158c2ecf20Sopenharmony_ci	SOC_DOUBLE_TLV("DAC3 Playback Volume", RT5677_DAC3_DIG_VOL,
10168c2ecf20Sopenharmony_ci		RT5677_L_VOL_SFT, RT5677_R_VOL_SFT, 127, 0, dac_vol_tlv),
10178c2ecf20Sopenharmony_ci	SOC_DOUBLE_TLV("DAC4 Playback Volume", RT5677_DAC4_DIG_VOL,
10188c2ecf20Sopenharmony_ci		RT5677_L_VOL_SFT, RT5677_R_VOL_SFT, 127, 0, dac_vol_tlv),
10198c2ecf20Sopenharmony_ci
10208c2ecf20Sopenharmony_ci	/* IN1/IN2 Control */
10218c2ecf20Sopenharmony_ci	SOC_SINGLE_TLV("IN1 Boost", RT5677_IN1, RT5677_BST_SFT1, 8, 0, bst_tlv),
10228c2ecf20Sopenharmony_ci	SOC_SINGLE_TLV("IN2 Boost", RT5677_IN1, RT5677_BST_SFT2, 8, 0, bst_tlv),
10238c2ecf20Sopenharmony_ci
10248c2ecf20Sopenharmony_ci	/* ADC Digital Volume Control */
10258c2ecf20Sopenharmony_ci	SOC_DOUBLE("ADC1 Capture Switch", RT5677_STO1_ADC_DIG_VOL,
10268c2ecf20Sopenharmony_ci		RT5677_L_MUTE_SFT, RT5677_R_MUTE_SFT, 1, 1),
10278c2ecf20Sopenharmony_ci	SOC_DOUBLE("ADC2 Capture Switch", RT5677_STO2_ADC_DIG_VOL,
10288c2ecf20Sopenharmony_ci		RT5677_L_MUTE_SFT, RT5677_R_MUTE_SFT, 1, 1),
10298c2ecf20Sopenharmony_ci	SOC_DOUBLE("ADC3 Capture Switch", RT5677_STO3_ADC_DIG_VOL,
10308c2ecf20Sopenharmony_ci		RT5677_L_MUTE_SFT, RT5677_R_MUTE_SFT, 1, 1),
10318c2ecf20Sopenharmony_ci	SOC_DOUBLE("ADC4 Capture Switch", RT5677_STO4_ADC_DIG_VOL,
10328c2ecf20Sopenharmony_ci		RT5677_L_MUTE_SFT, RT5677_R_MUTE_SFT, 1, 1),
10338c2ecf20Sopenharmony_ci	SOC_DOUBLE("Mono ADC Capture Switch", RT5677_MONO_ADC_DIG_VOL,
10348c2ecf20Sopenharmony_ci		RT5677_L_MUTE_SFT, RT5677_R_MUTE_SFT, 1, 1),
10358c2ecf20Sopenharmony_ci
10368c2ecf20Sopenharmony_ci	SOC_DOUBLE_TLV("ADC1 Capture Volume", RT5677_STO1_ADC_DIG_VOL,
10378c2ecf20Sopenharmony_ci		RT5677_STO1_ADC_L_VOL_SFT, RT5677_STO1_ADC_R_VOL_SFT, 63, 0,
10388c2ecf20Sopenharmony_ci		adc_vol_tlv),
10398c2ecf20Sopenharmony_ci	SOC_DOUBLE_TLV("ADC2 Capture Volume", RT5677_STO2_ADC_DIG_VOL,
10408c2ecf20Sopenharmony_ci		RT5677_STO1_ADC_L_VOL_SFT, RT5677_STO1_ADC_R_VOL_SFT, 63, 0,
10418c2ecf20Sopenharmony_ci		adc_vol_tlv),
10428c2ecf20Sopenharmony_ci	SOC_DOUBLE_TLV("ADC3 Capture Volume", RT5677_STO3_ADC_DIG_VOL,
10438c2ecf20Sopenharmony_ci		RT5677_STO1_ADC_L_VOL_SFT, RT5677_STO1_ADC_R_VOL_SFT, 63, 0,
10448c2ecf20Sopenharmony_ci		adc_vol_tlv),
10458c2ecf20Sopenharmony_ci	SOC_DOUBLE_TLV("ADC4 Capture Volume", RT5677_STO4_ADC_DIG_VOL,
10468c2ecf20Sopenharmony_ci		RT5677_STO1_ADC_L_VOL_SFT, RT5677_STO1_ADC_R_VOL_SFT, 63, 0,
10478c2ecf20Sopenharmony_ci		adc_vol_tlv),
10488c2ecf20Sopenharmony_ci	SOC_DOUBLE_TLV("Mono ADC Capture Volume", RT5677_MONO_ADC_DIG_VOL,
10498c2ecf20Sopenharmony_ci		RT5677_MONO_ADC_L_VOL_SFT, RT5677_MONO_ADC_R_VOL_SFT, 63, 0,
10508c2ecf20Sopenharmony_ci		adc_vol_tlv),
10518c2ecf20Sopenharmony_ci
10528c2ecf20Sopenharmony_ci	/* Sidetone Control */
10538c2ecf20Sopenharmony_ci	SOC_SINGLE_TLV("Sidetone Volume", RT5677_SIDETONE_CTRL,
10548c2ecf20Sopenharmony_ci		RT5677_ST_VOL_SFT, 31, 0, st_vol_tlv),
10558c2ecf20Sopenharmony_ci
10568c2ecf20Sopenharmony_ci	/* ADC Boost Volume Control */
10578c2ecf20Sopenharmony_ci	SOC_DOUBLE_TLV("STO1 ADC Boost Volume", RT5677_STO1_2_ADC_BST,
10588c2ecf20Sopenharmony_ci		RT5677_STO1_ADC_L_BST_SFT, RT5677_STO1_ADC_R_BST_SFT, 3, 0,
10598c2ecf20Sopenharmony_ci		adc_bst_tlv),
10608c2ecf20Sopenharmony_ci	SOC_DOUBLE_TLV("STO2 ADC Boost Volume", RT5677_STO1_2_ADC_BST,
10618c2ecf20Sopenharmony_ci		RT5677_STO2_ADC_L_BST_SFT, RT5677_STO2_ADC_R_BST_SFT, 3, 0,
10628c2ecf20Sopenharmony_ci		adc_bst_tlv),
10638c2ecf20Sopenharmony_ci	SOC_DOUBLE_TLV("STO3 ADC Boost Volume", RT5677_STO3_4_ADC_BST,
10648c2ecf20Sopenharmony_ci		RT5677_STO3_ADC_L_BST_SFT, RT5677_STO3_ADC_R_BST_SFT, 3, 0,
10658c2ecf20Sopenharmony_ci		adc_bst_tlv),
10668c2ecf20Sopenharmony_ci	SOC_DOUBLE_TLV("STO4 ADC Boost Volume", RT5677_STO3_4_ADC_BST,
10678c2ecf20Sopenharmony_ci		RT5677_STO4_ADC_L_BST_SFT, RT5677_STO4_ADC_R_BST_SFT, 3, 0,
10688c2ecf20Sopenharmony_ci		adc_bst_tlv),
10698c2ecf20Sopenharmony_ci	SOC_DOUBLE_TLV("Mono ADC Boost Volume", RT5677_ADC_BST_CTRL2,
10708c2ecf20Sopenharmony_ci		RT5677_MONO_ADC_L_BST_SFT, RT5677_MONO_ADC_R_BST_SFT, 3, 0,
10718c2ecf20Sopenharmony_ci		adc_bst_tlv),
10728c2ecf20Sopenharmony_ci
10738c2ecf20Sopenharmony_ci	SOC_SINGLE_EXT("DSP VAD Switch", SND_SOC_NOPM, 0, 1, 0,
10748c2ecf20Sopenharmony_ci		rt5677_dsp_vad_get, rt5677_dsp_vad_put),
10758c2ecf20Sopenharmony_ci};
10768c2ecf20Sopenharmony_ci
10778c2ecf20Sopenharmony_ci/**
10788c2ecf20Sopenharmony_ci * set_dmic_clk - Set parameter of dmic.
10798c2ecf20Sopenharmony_ci *
10808c2ecf20Sopenharmony_ci * @w: DAPM widget.
10818c2ecf20Sopenharmony_ci * @kcontrol: The kcontrol of this widget.
10828c2ecf20Sopenharmony_ci * @event: Event id.
10838c2ecf20Sopenharmony_ci *
10848c2ecf20Sopenharmony_ci * Choose dmic clock between 1MHz and 3MHz.
10858c2ecf20Sopenharmony_ci * It is better for clock to approximate 3MHz.
10868c2ecf20Sopenharmony_ci */
10878c2ecf20Sopenharmony_cistatic int set_dmic_clk(struct snd_soc_dapm_widget *w,
10888c2ecf20Sopenharmony_ci	struct snd_kcontrol *kcontrol, int event)
10898c2ecf20Sopenharmony_ci{
10908c2ecf20Sopenharmony_ci	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
10918c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
10928c2ecf20Sopenharmony_ci	int idx, rate;
10938c2ecf20Sopenharmony_ci
10948c2ecf20Sopenharmony_ci	rate = rt5677->sysclk / rl6231_get_pre_div(rt5677->regmap,
10958c2ecf20Sopenharmony_ci		RT5677_CLK_TREE_CTRL1, RT5677_I2S_PD1_SFT);
10968c2ecf20Sopenharmony_ci	idx = rl6231_calc_dmic_clk(rate);
10978c2ecf20Sopenharmony_ci	if (idx < 0)
10988c2ecf20Sopenharmony_ci		dev_err(component->dev, "Failed to set DMIC clock\n");
10998c2ecf20Sopenharmony_ci	else
11008c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_DMIC_CTRL1,
11018c2ecf20Sopenharmony_ci			RT5677_DMIC_CLK_MASK, idx << RT5677_DMIC_CLK_SFT);
11028c2ecf20Sopenharmony_ci	return idx;
11038c2ecf20Sopenharmony_ci}
11048c2ecf20Sopenharmony_ci
11058c2ecf20Sopenharmony_cistatic int is_sys_clk_from_pll(struct snd_soc_dapm_widget *source,
11068c2ecf20Sopenharmony_ci			 struct snd_soc_dapm_widget *sink)
11078c2ecf20Sopenharmony_ci{
11088c2ecf20Sopenharmony_ci	struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
11098c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
11108c2ecf20Sopenharmony_ci	unsigned int val;
11118c2ecf20Sopenharmony_ci
11128c2ecf20Sopenharmony_ci	regmap_read(rt5677->regmap, RT5677_GLB_CLK1, &val);
11138c2ecf20Sopenharmony_ci	val &= RT5677_SCLK_SRC_MASK;
11148c2ecf20Sopenharmony_ci	if (val == RT5677_SCLK_SRC_PLL1)
11158c2ecf20Sopenharmony_ci		return 1;
11168c2ecf20Sopenharmony_ci	else
11178c2ecf20Sopenharmony_ci		return 0;
11188c2ecf20Sopenharmony_ci}
11198c2ecf20Sopenharmony_ci
11208c2ecf20Sopenharmony_cistatic int is_using_asrc(struct snd_soc_dapm_widget *source,
11218c2ecf20Sopenharmony_ci			 struct snd_soc_dapm_widget *sink)
11228c2ecf20Sopenharmony_ci{
11238c2ecf20Sopenharmony_ci	struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
11248c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
11258c2ecf20Sopenharmony_ci	unsigned int reg, shift, val;
11268c2ecf20Sopenharmony_ci
11278c2ecf20Sopenharmony_ci	if (source->reg == RT5677_ASRC_1) {
11288c2ecf20Sopenharmony_ci		switch (source->shift) {
11298c2ecf20Sopenharmony_ci		case 12:
11308c2ecf20Sopenharmony_ci			reg = RT5677_ASRC_4;
11318c2ecf20Sopenharmony_ci			shift = 0;
11328c2ecf20Sopenharmony_ci			break;
11338c2ecf20Sopenharmony_ci		case 13:
11348c2ecf20Sopenharmony_ci			reg = RT5677_ASRC_4;
11358c2ecf20Sopenharmony_ci			shift = 4;
11368c2ecf20Sopenharmony_ci			break;
11378c2ecf20Sopenharmony_ci		case 14:
11388c2ecf20Sopenharmony_ci			reg = RT5677_ASRC_4;
11398c2ecf20Sopenharmony_ci			shift = 8;
11408c2ecf20Sopenharmony_ci			break;
11418c2ecf20Sopenharmony_ci		case 15:
11428c2ecf20Sopenharmony_ci			reg = RT5677_ASRC_4;
11438c2ecf20Sopenharmony_ci			shift = 12;
11448c2ecf20Sopenharmony_ci			break;
11458c2ecf20Sopenharmony_ci		default:
11468c2ecf20Sopenharmony_ci			return 0;
11478c2ecf20Sopenharmony_ci		}
11488c2ecf20Sopenharmony_ci	} else {
11498c2ecf20Sopenharmony_ci		switch (source->shift) {
11508c2ecf20Sopenharmony_ci		case 0:
11518c2ecf20Sopenharmony_ci			reg = RT5677_ASRC_6;
11528c2ecf20Sopenharmony_ci			shift = 8;
11538c2ecf20Sopenharmony_ci			break;
11548c2ecf20Sopenharmony_ci		case 1:
11558c2ecf20Sopenharmony_ci			reg = RT5677_ASRC_6;
11568c2ecf20Sopenharmony_ci			shift = 12;
11578c2ecf20Sopenharmony_ci			break;
11588c2ecf20Sopenharmony_ci		case 2:
11598c2ecf20Sopenharmony_ci			reg = RT5677_ASRC_5;
11608c2ecf20Sopenharmony_ci			shift = 0;
11618c2ecf20Sopenharmony_ci			break;
11628c2ecf20Sopenharmony_ci		case 3:
11638c2ecf20Sopenharmony_ci			reg = RT5677_ASRC_5;
11648c2ecf20Sopenharmony_ci			shift = 4;
11658c2ecf20Sopenharmony_ci			break;
11668c2ecf20Sopenharmony_ci		case 4:
11678c2ecf20Sopenharmony_ci			reg = RT5677_ASRC_5;
11688c2ecf20Sopenharmony_ci			shift = 8;
11698c2ecf20Sopenharmony_ci			break;
11708c2ecf20Sopenharmony_ci		case 5:
11718c2ecf20Sopenharmony_ci			reg = RT5677_ASRC_5;
11728c2ecf20Sopenharmony_ci			shift = 12;
11738c2ecf20Sopenharmony_ci			break;
11748c2ecf20Sopenharmony_ci		case 12:
11758c2ecf20Sopenharmony_ci			reg = RT5677_ASRC_3;
11768c2ecf20Sopenharmony_ci			shift = 0;
11778c2ecf20Sopenharmony_ci			break;
11788c2ecf20Sopenharmony_ci		case 13:
11798c2ecf20Sopenharmony_ci			reg = RT5677_ASRC_3;
11808c2ecf20Sopenharmony_ci			shift = 4;
11818c2ecf20Sopenharmony_ci			break;
11828c2ecf20Sopenharmony_ci		case 14:
11838c2ecf20Sopenharmony_ci			reg = RT5677_ASRC_3;
11848c2ecf20Sopenharmony_ci			shift = 12;
11858c2ecf20Sopenharmony_ci			break;
11868c2ecf20Sopenharmony_ci		default:
11878c2ecf20Sopenharmony_ci			return 0;
11888c2ecf20Sopenharmony_ci		}
11898c2ecf20Sopenharmony_ci	}
11908c2ecf20Sopenharmony_ci
11918c2ecf20Sopenharmony_ci	regmap_read(rt5677->regmap, reg, &val);
11928c2ecf20Sopenharmony_ci	val = (val >> shift) & 0xf;
11938c2ecf20Sopenharmony_ci
11948c2ecf20Sopenharmony_ci	switch (val) {
11958c2ecf20Sopenharmony_ci	case 1 ... 6:
11968c2ecf20Sopenharmony_ci		return 1;
11978c2ecf20Sopenharmony_ci	default:
11988c2ecf20Sopenharmony_ci		return 0;
11998c2ecf20Sopenharmony_ci	}
12008c2ecf20Sopenharmony_ci
12018c2ecf20Sopenharmony_ci}
12028c2ecf20Sopenharmony_ci
12038c2ecf20Sopenharmony_cistatic int can_use_asrc(struct snd_soc_dapm_widget *source,
12048c2ecf20Sopenharmony_ci			 struct snd_soc_dapm_widget *sink)
12058c2ecf20Sopenharmony_ci{
12068c2ecf20Sopenharmony_ci	struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
12078c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
12088c2ecf20Sopenharmony_ci
12098c2ecf20Sopenharmony_ci	if (rt5677->sysclk > rt5677->lrck[RT5677_AIF1] * 384)
12108c2ecf20Sopenharmony_ci		return 1;
12118c2ecf20Sopenharmony_ci
12128c2ecf20Sopenharmony_ci	return 0;
12138c2ecf20Sopenharmony_ci}
12148c2ecf20Sopenharmony_ci
12158c2ecf20Sopenharmony_ci/**
12168c2ecf20Sopenharmony_ci * rt5677_sel_asrc_clk_src - select ASRC clock source for a set of filters
12178c2ecf20Sopenharmony_ci * @component: SoC audio component device.
12188c2ecf20Sopenharmony_ci * @filter_mask: mask of filters.
12198c2ecf20Sopenharmony_ci * @clk_src: clock source
12208c2ecf20Sopenharmony_ci *
12218c2ecf20Sopenharmony_ci * The ASRC function is for asynchronous MCLK and LRCK. Also, since RT5677 can
12228c2ecf20Sopenharmony_ci * only support standard 32fs or 64fs i2s format, ASRC should be enabled to
12238c2ecf20Sopenharmony_ci * support special i2s clock format such as Intel's 100fs(100 * sampling rate).
12248c2ecf20Sopenharmony_ci * ASRC function will track i2s clock and generate a corresponding system clock
12258c2ecf20Sopenharmony_ci * for codec. This function provides an API to select the clock source for a
12268c2ecf20Sopenharmony_ci * set of filters specified by the mask. And the codec driver will turn on ASRC
12278c2ecf20Sopenharmony_ci * for these filters if ASRC is selected as their clock source.
12288c2ecf20Sopenharmony_ci */
12298c2ecf20Sopenharmony_ciint rt5677_sel_asrc_clk_src(struct snd_soc_component *component,
12308c2ecf20Sopenharmony_ci		unsigned int filter_mask, unsigned int clk_src)
12318c2ecf20Sopenharmony_ci{
12328c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
12338c2ecf20Sopenharmony_ci	unsigned int asrc3_mask = 0, asrc3_value = 0;
12348c2ecf20Sopenharmony_ci	unsigned int asrc4_mask = 0, asrc4_value = 0;
12358c2ecf20Sopenharmony_ci	unsigned int asrc5_mask = 0, asrc5_value = 0;
12368c2ecf20Sopenharmony_ci	unsigned int asrc6_mask = 0, asrc6_value = 0;
12378c2ecf20Sopenharmony_ci	unsigned int asrc7_mask = 0, asrc7_value = 0;
12388c2ecf20Sopenharmony_ci	unsigned int asrc8_mask = 0, asrc8_value = 0;
12398c2ecf20Sopenharmony_ci
12408c2ecf20Sopenharmony_ci	switch (clk_src) {
12418c2ecf20Sopenharmony_ci	case RT5677_CLK_SEL_SYS:
12428c2ecf20Sopenharmony_ci	case RT5677_CLK_SEL_I2S1_ASRC:
12438c2ecf20Sopenharmony_ci	case RT5677_CLK_SEL_I2S2_ASRC:
12448c2ecf20Sopenharmony_ci	case RT5677_CLK_SEL_I2S3_ASRC:
12458c2ecf20Sopenharmony_ci	case RT5677_CLK_SEL_I2S4_ASRC:
12468c2ecf20Sopenharmony_ci	case RT5677_CLK_SEL_I2S5_ASRC:
12478c2ecf20Sopenharmony_ci	case RT5677_CLK_SEL_I2S6_ASRC:
12488c2ecf20Sopenharmony_ci	case RT5677_CLK_SEL_SYS2:
12498c2ecf20Sopenharmony_ci	case RT5677_CLK_SEL_SYS3:
12508c2ecf20Sopenharmony_ci	case RT5677_CLK_SEL_SYS4:
12518c2ecf20Sopenharmony_ci	case RT5677_CLK_SEL_SYS5:
12528c2ecf20Sopenharmony_ci	case RT5677_CLK_SEL_SYS6:
12538c2ecf20Sopenharmony_ci	case RT5677_CLK_SEL_SYS7:
12548c2ecf20Sopenharmony_ci		break;
12558c2ecf20Sopenharmony_ci
12568c2ecf20Sopenharmony_ci	default:
12578c2ecf20Sopenharmony_ci		return -EINVAL;
12588c2ecf20Sopenharmony_ci	}
12598c2ecf20Sopenharmony_ci
12608c2ecf20Sopenharmony_ci	/* ASRC 3 */
12618c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_DA_STEREO_FILTER) {
12628c2ecf20Sopenharmony_ci		asrc3_mask |= RT5677_DA_STO_CLK_SEL_MASK;
12638c2ecf20Sopenharmony_ci		asrc3_value = (asrc3_value & ~RT5677_DA_STO_CLK_SEL_MASK)
12648c2ecf20Sopenharmony_ci			| (clk_src << RT5677_DA_STO_CLK_SEL_SFT);
12658c2ecf20Sopenharmony_ci	}
12668c2ecf20Sopenharmony_ci
12678c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_DA_MONO2_L_FILTER) {
12688c2ecf20Sopenharmony_ci		asrc3_mask |= RT5677_DA_MONO2L_CLK_SEL_MASK;
12698c2ecf20Sopenharmony_ci		asrc3_value = (asrc3_value & ~RT5677_DA_MONO2L_CLK_SEL_MASK)
12708c2ecf20Sopenharmony_ci			| (clk_src << RT5677_DA_MONO2L_CLK_SEL_SFT);
12718c2ecf20Sopenharmony_ci	}
12728c2ecf20Sopenharmony_ci
12738c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_DA_MONO2_R_FILTER) {
12748c2ecf20Sopenharmony_ci		asrc3_mask |= RT5677_DA_MONO2R_CLK_SEL_MASK;
12758c2ecf20Sopenharmony_ci		asrc3_value = (asrc3_value & ~RT5677_DA_MONO2R_CLK_SEL_MASK)
12768c2ecf20Sopenharmony_ci			| (clk_src << RT5677_DA_MONO2R_CLK_SEL_SFT);
12778c2ecf20Sopenharmony_ci	}
12788c2ecf20Sopenharmony_ci
12798c2ecf20Sopenharmony_ci	if (asrc3_mask)
12808c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_ASRC_3, asrc3_mask,
12818c2ecf20Sopenharmony_ci			asrc3_value);
12828c2ecf20Sopenharmony_ci
12838c2ecf20Sopenharmony_ci	/* ASRC 4 */
12848c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_DA_MONO3_L_FILTER) {
12858c2ecf20Sopenharmony_ci		asrc4_mask |= RT5677_DA_MONO3L_CLK_SEL_MASK;
12868c2ecf20Sopenharmony_ci		asrc4_value = (asrc4_value & ~RT5677_DA_MONO3L_CLK_SEL_MASK)
12878c2ecf20Sopenharmony_ci			| (clk_src << RT5677_DA_MONO3L_CLK_SEL_SFT);
12888c2ecf20Sopenharmony_ci	}
12898c2ecf20Sopenharmony_ci
12908c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_DA_MONO3_R_FILTER) {
12918c2ecf20Sopenharmony_ci		asrc4_mask |= RT5677_DA_MONO3R_CLK_SEL_MASK;
12928c2ecf20Sopenharmony_ci		asrc4_value = (asrc4_value & ~RT5677_DA_MONO3R_CLK_SEL_MASK)
12938c2ecf20Sopenharmony_ci			| (clk_src << RT5677_DA_MONO3R_CLK_SEL_SFT);
12948c2ecf20Sopenharmony_ci	}
12958c2ecf20Sopenharmony_ci
12968c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_DA_MONO4_L_FILTER) {
12978c2ecf20Sopenharmony_ci		asrc4_mask |= RT5677_DA_MONO4L_CLK_SEL_MASK;
12988c2ecf20Sopenharmony_ci		asrc4_value = (asrc4_value & ~RT5677_DA_MONO4L_CLK_SEL_MASK)
12998c2ecf20Sopenharmony_ci			| (clk_src << RT5677_DA_MONO4L_CLK_SEL_SFT);
13008c2ecf20Sopenharmony_ci	}
13018c2ecf20Sopenharmony_ci
13028c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_DA_MONO4_R_FILTER) {
13038c2ecf20Sopenharmony_ci		asrc4_mask |= RT5677_DA_MONO4R_CLK_SEL_MASK;
13048c2ecf20Sopenharmony_ci		asrc4_value = (asrc4_value & ~RT5677_DA_MONO4R_CLK_SEL_MASK)
13058c2ecf20Sopenharmony_ci			| (clk_src << RT5677_DA_MONO4R_CLK_SEL_SFT);
13068c2ecf20Sopenharmony_ci	}
13078c2ecf20Sopenharmony_ci
13088c2ecf20Sopenharmony_ci	if (asrc4_mask)
13098c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_ASRC_4, asrc4_mask,
13108c2ecf20Sopenharmony_ci			asrc4_value);
13118c2ecf20Sopenharmony_ci
13128c2ecf20Sopenharmony_ci	/* ASRC 5 */
13138c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_AD_STEREO1_FILTER) {
13148c2ecf20Sopenharmony_ci		asrc5_mask |= RT5677_AD_STO1_CLK_SEL_MASK;
13158c2ecf20Sopenharmony_ci		asrc5_value = (asrc5_value & ~RT5677_AD_STO1_CLK_SEL_MASK)
13168c2ecf20Sopenharmony_ci			| (clk_src << RT5677_AD_STO1_CLK_SEL_SFT);
13178c2ecf20Sopenharmony_ci	}
13188c2ecf20Sopenharmony_ci
13198c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_AD_STEREO2_FILTER) {
13208c2ecf20Sopenharmony_ci		asrc5_mask |= RT5677_AD_STO2_CLK_SEL_MASK;
13218c2ecf20Sopenharmony_ci		asrc5_value = (asrc5_value & ~RT5677_AD_STO2_CLK_SEL_MASK)
13228c2ecf20Sopenharmony_ci			| (clk_src << RT5677_AD_STO2_CLK_SEL_SFT);
13238c2ecf20Sopenharmony_ci	}
13248c2ecf20Sopenharmony_ci
13258c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_AD_STEREO3_FILTER) {
13268c2ecf20Sopenharmony_ci		asrc5_mask |= RT5677_AD_STO3_CLK_SEL_MASK;
13278c2ecf20Sopenharmony_ci		asrc5_value = (asrc5_value & ~RT5677_AD_STO3_CLK_SEL_MASK)
13288c2ecf20Sopenharmony_ci			| (clk_src << RT5677_AD_STO3_CLK_SEL_SFT);
13298c2ecf20Sopenharmony_ci	}
13308c2ecf20Sopenharmony_ci
13318c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_AD_STEREO4_FILTER) {
13328c2ecf20Sopenharmony_ci		asrc5_mask |= RT5677_AD_STO4_CLK_SEL_MASK;
13338c2ecf20Sopenharmony_ci		asrc5_value = (asrc5_value & ~RT5677_AD_STO4_CLK_SEL_MASK)
13348c2ecf20Sopenharmony_ci			| (clk_src << RT5677_AD_STO4_CLK_SEL_SFT);
13358c2ecf20Sopenharmony_ci	}
13368c2ecf20Sopenharmony_ci
13378c2ecf20Sopenharmony_ci	if (asrc5_mask)
13388c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_ASRC_5, asrc5_mask,
13398c2ecf20Sopenharmony_ci			asrc5_value);
13408c2ecf20Sopenharmony_ci
13418c2ecf20Sopenharmony_ci	/* ASRC 6 */
13428c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_AD_MONO_L_FILTER) {
13438c2ecf20Sopenharmony_ci		asrc6_mask |= RT5677_AD_MONOL_CLK_SEL_MASK;
13448c2ecf20Sopenharmony_ci		asrc6_value = (asrc6_value & ~RT5677_AD_MONOL_CLK_SEL_MASK)
13458c2ecf20Sopenharmony_ci			| (clk_src << RT5677_AD_MONOL_CLK_SEL_SFT);
13468c2ecf20Sopenharmony_ci	}
13478c2ecf20Sopenharmony_ci
13488c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_AD_MONO_R_FILTER) {
13498c2ecf20Sopenharmony_ci		asrc6_mask |= RT5677_AD_MONOR_CLK_SEL_MASK;
13508c2ecf20Sopenharmony_ci		asrc6_value = (asrc6_value & ~RT5677_AD_MONOR_CLK_SEL_MASK)
13518c2ecf20Sopenharmony_ci			| (clk_src << RT5677_AD_MONOR_CLK_SEL_SFT);
13528c2ecf20Sopenharmony_ci	}
13538c2ecf20Sopenharmony_ci
13548c2ecf20Sopenharmony_ci	if (asrc6_mask)
13558c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_ASRC_6, asrc6_mask,
13568c2ecf20Sopenharmony_ci			asrc6_value);
13578c2ecf20Sopenharmony_ci
13588c2ecf20Sopenharmony_ci	/* ASRC 7 */
13598c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_DSP_OB_0_3_FILTER) {
13608c2ecf20Sopenharmony_ci		asrc7_mask |= RT5677_DSP_OB_0_3_CLK_SEL_MASK;
13618c2ecf20Sopenharmony_ci		asrc7_value = (asrc7_value & ~RT5677_DSP_OB_0_3_CLK_SEL_MASK)
13628c2ecf20Sopenharmony_ci			| (clk_src << RT5677_DSP_OB_0_3_CLK_SEL_SFT);
13638c2ecf20Sopenharmony_ci	}
13648c2ecf20Sopenharmony_ci
13658c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_DSP_OB_4_7_FILTER) {
13668c2ecf20Sopenharmony_ci		asrc7_mask |= RT5677_DSP_OB_4_7_CLK_SEL_MASK;
13678c2ecf20Sopenharmony_ci		asrc7_value = (asrc7_value & ~RT5677_DSP_OB_4_7_CLK_SEL_MASK)
13688c2ecf20Sopenharmony_ci			| (clk_src << RT5677_DSP_OB_4_7_CLK_SEL_SFT);
13698c2ecf20Sopenharmony_ci	}
13708c2ecf20Sopenharmony_ci
13718c2ecf20Sopenharmony_ci	if (asrc7_mask)
13728c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_ASRC_7, asrc7_mask,
13738c2ecf20Sopenharmony_ci			asrc7_value);
13748c2ecf20Sopenharmony_ci
13758c2ecf20Sopenharmony_ci	/* ASRC 8 */
13768c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_I2S1_SOURCE) {
13778c2ecf20Sopenharmony_ci		asrc8_mask |= RT5677_I2S1_CLK_SEL_MASK;
13788c2ecf20Sopenharmony_ci		asrc8_value = (asrc8_value & ~RT5677_I2S1_CLK_SEL_MASK)
13798c2ecf20Sopenharmony_ci			| ((clk_src - 1) << RT5677_I2S1_CLK_SEL_SFT);
13808c2ecf20Sopenharmony_ci	}
13818c2ecf20Sopenharmony_ci
13828c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_I2S2_SOURCE) {
13838c2ecf20Sopenharmony_ci		asrc8_mask |= RT5677_I2S2_CLK_SEL_MASK;
13848c2ecf20Sopenharmony_ci		asrc8_value = (asrc8_value & ~RT5677_I2S2_CLK_SEL_MASK)
13858c2ecf20Sopenharmony_ci			| ((clk_src - 1) << RT5677_I2S2_CLK_SEL_SFT);
13868c2ecf20Sopenharmony_ci	}
13878c2ecf20Sopenharmony_ci
13888c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_I2S3_SOURCE) {
13898c2ecf20Sopenharmony_ci		asrc8_mask |= RT5677_I2S3_CLK_SEL_MASK;
13908c2ecf20Sopenharmony_ci		asrc8_value = (asrc8_value & ~RT5677_I2S3_CLK_SEL_MASK)
13918c2ecf20Sopenharmony_ci			| ((clk_src - 1) << RT5677_I2S3_CLK_SEL_SFT);
13928c2ecf20Sopenharmony_ci	}
13938c2ecf20Sopenharmony_ci
13948c2ecf20Sopenharmony_ci	if (filter_mask & RT5677_I2S4_SOURCE) {
13958c2ecf20Sopenharmony_ci		asrc8_mask |= RT5677_I2S4_CLK_SEL_MASK;
13968c2ecf20Sopenharmony_ci		asrc8_value = (asrc8_value & ~RT5677_I2S4_CLK_SEL_MASK)
13978c2ecf20Sopenharmony_ci			| ((clk_src - 1) << RT5677_I2S4_CLK_SEL_SFT);
13988c2ecf20Sopenharmony_ci	}
13998c2ecf20Sopenharmony_ci
14008c2ecf20Sopenharmony_ci	if (asrc8_mask)
14018c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_ASRC_8, asrc8_mask,
14028c2ecf20Sopenharmony_ci			asrc8_value);
14038c2ecf20Sopenharmony_ci
14048c2ecf20Sopenharmony_ci	return 0;
14058c2ecf20Sopenharmony_ci}
14068c2ecf20Sopenharmony_ciEXPORT_SYMBOL_GPL(rt5677_sel_asrc_clk_src);
14078c2ecf20Sopenharmony_ci
14088c2ecf20Sopenharmony_cistatic int rt5677_dmic_use_asrc(struct snd_soc_dapm_widget *source,
14098c2ecf20Sopenharmony_ci			 struct snd_soc_dapm_widget *sink)
14108c2ecf20Sopenharmony_ci{
14118c2ecf20Sopenharmony_ci	struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
14128c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
14138c2ecf20Sopenharmony_ci	unsigned int asrc_setting;
14148c2ecf20Sopenharmony_ci
14158c2ecf20Sopenharmony_ci	switch (source->shift) {
14168c2ecf20Sopenharmony_ci	case 11:
14178c2ecf20Sopenharmony_ci		regmap_read(rt5677->regmap, RT5677_ASRC_5, &asrc_setting);
14188c2ecf20Sopenharmony_ci		asrc_setting = (asrc_setting & RT5677_AD_STO1_CLK_SEL_MASK) >>
14198c2ecf20Sopenharmony_ci				RT5677_AD_STO1_CLK_SEL_SFT;
14208c2ecf20Sopenharmony_ci		break;
14218c2ecf20Sopenharmony_ci
14228c2ecf20Sopenharmony_ci	case 10:
14238c2ecf20Sopenharmony_ci		regmap_read(rt5677->regmap, RT5677_ASRC_5, &asrc_setting);
14248c2ecf20Sopenharmony_ci		asrc_setting = (asrc_setting & RT5677_AD_STO2_CLK_SEL_MASK) >>
14258c2ecf20Sopenharmony_ci				RT5677_AD_STO2_CLK_SEL_SFT;
14268c2ecf20Sopenharmony_ci		break;
14278c2ecf20Sopenharmony_ci
14288c2ecf20Sopenharmony_ci	case 9:
14298c2ecf20Sopenharmony_ci		regmap_read(rt5677->regmap, RT5677_ASRC_5, &asrc_setting);
14308c2ecf20Sopenharmony_ci		asrc_setting = (asrc_setting & RT5677_AD_STO3_CLK_SEL_MASK) >>
14318c2ecf20Sopenharmony_ci				RT5677_AD_STO3_CLK_SEL_SFT;
14328c2ecf20Sopenharmony_ci		break;
14338c2ecf20Sopenharmony_ci
14348c2ecf20Sopenharmony_ci	case 8:
14358c2ecf20Sopenharmony_ci		regmap_read(rt5677->regmap, RT5677_ASRC_5, &asrc_setting);
14368c2ecf20Sopenharmony_ci		asrc_setting = (asrc_setting & RT5677_AD_STO4_CLK_SEL_MASK) >>
14378c2ecf20Sopenharmony_ci			RT5677_AD_STO4_CLK_SEL_SFT;
14388c2ecf20Sopenharmony_ci		break;
14398c2ecf20Sopenharmony_ci
14408c2ecf20Sopenharmony_ci	case 7:
14418c2ecf20Sopenharmony_ci		regmap_read(rt5677->regmap, RT5677_ASRC_6, &asrc_setting);
14428c2ecf20Sopenharmony_ci		asrc_setting = (asrc_setting & RT5677_AD_MONOL_CLK_SEL_MASK) >>
14438c2ecf20Sopenharmony_ci			RT5677_AD_MONOL_CLK_SEL_SFT;
14448c2ecf20Sopenharmony_ci		break;
14458c2ecf20Sopenharmony_ci
14468c2ecf20Sopenharmony_ci	case 6:
14478c2ecf20Sopenharmony_ci		regmap_read(rt5677->regmap, RT5677_ASRC_6, &asrc_setting);
14488c2ecf20Sopenharmony_ci		asrc_setting = (asrc_setting & RT5677_AD_MONOR_CLK_SEL_MASK) >>
14498c2ecf20Sopenharmony_ci			RT5677_AD_MONOR_CLK_SEL_SFT;
14508c2ecf20Sopenharmony_ci		break;
14518c2ecf20Sopenharmony_ci
14528c2ecf20Sopenharmony_ci	default:
14538c2ecf20Sopenharmony_ci		return 0;
14548c2ecf20Sopenharmony_ci	}
14558c2ecf20Sopenharmony_ci
14568c2ecf20Sopenharmony_ci	if (asrc_setting >= RT5677_CLK_SEL_I2S1_ASRC &&
14578c2ecf20Sopenharmony_ci	    asrc_setting <= RT5677_CLK_SEL_I2S6_ASRC)
14588c2ecf20Sopenharmony_ci		return 1;
14598c2ecf20Sopenharmony_ci
14608c2ecf20Sopenharmony_ci	return 0;
14618c2ecf20Sopenharmony_ci}
14628c2ecf20Sopenharmony_ci
14638c2ecf20Sopenharmony_ci/* Digital Mixer */
14648c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto1_adc_l_mix[] = {
14658c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_STO1_ADC_MIXER,
14668c2ecf20Sopenharmony_ci			RT5677_M_STO1_ADC_L1_SFT, 1, 1),
14678c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_STO1_ADC_MIXER,
14688c2ecf20Sopenharmony_ci			RT5677_M_STO1_ADC_L2_SFT, 1, 1),
14698c2ecf20Sopenharmony_ci};
14708c2ecf20Sopenharmony_ci
14718c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto1_adc_r_mix[] = {
14728c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_STO1_ADC_MIXER,
14738c2ecf20Sopenharmony_ci			RT5677_M_STO1_ADC_R1_SFT, 1, 1),
14748c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_STO1_ADC_MIXER,
14758c2ecf20Sopenharmony_ci			RT5677_M_STO1_ADC_R2_SFT, 1, 1),
14768c2ecf20Sopenharmony_ci};
14778c2ecf20Sopenharmony_ci
14788c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto2_adc_l_mix[] = {
14798c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_STO2_ADC_MIXER,
14808c2ecf20Sopenharmony_ci			RT5677_M_STO2_ADC_L1_SFT, 1, 1),
14818c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_STO2_ADC_MIXER,
14828c2ecf20Sopenharmony_ci			RT5677_M_STO2_ADC_L2_SFT, 1, 1),
14838c2ecf20Sopenharmony_ci};
14848c2ecf20Sopenharmony_ci
14858c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto2_adc_r_mix[] = {
14868c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_STO2_ADC_MIXER,
14878c2ecf20Sopenharmony_ci			RT5677_M_STO2_ADC_R1_SFT, 1, 1),
14888c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_STO2_ADC_MIXER,
14898c2ecf20Sopenharmony_ci			RT5677_M_STO2_ADC_R2_SFT, 1, 1),
14908c2ecf20Sopenharmony_ci};
14918c2ecf20Sopenharmony_ci
14928c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto3_adc_l_mix[] = {
14938c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_STO3_ADC_MIXER,
14948c2ecf20Sopenharmony_ci			RT5677_M_STO3_ADC_L1_SFT, 1, 1),
14958c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_STO3_ADC_MIXER,
14968c2ecf20Sopenharmony_ci			RT5677_M_STO3_ADC_L2_SFT, 1, 1),
14978c2ecf20Sopenharmony_ci};
14988c2ecf20Sopenharmony_ci
14998c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto3_adc_r_mix[] = {
15008c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_STO3_ADC_MIXER,
15018c2ecf20Sopenharmony_ci			RT5677_M_STO3_ADC_R1_SFT, 1, 1),
15028c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_STO3_ADC_MIXER,
15038c2ecf20Sopenharmony_ci			RT5677_M_STO3_ADC_R2_SFT, 1, 1),
15048c2ecf20Sopenharmony_ci};
15058c2ecf20Sopenharmony_ci
15068c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto4_adc_l_mix[] = {
15078c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_STO4_ADC_MIXER,
15088c2ecf20Sopenharmony_ci			RT5677_M_STO4_ADC_L1_SFT, 1, 1),
15098c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_STO4_ADC_MIXER,
15108c2ecf20Sopenharmony_ci			RT5677_M_STO4_ADC_L2_SFT, 1, 1),
15118c2ecf20Sopenharmony_ci};
15128c2ecf20Sopenharmony_ci
15138c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto4_adc_r_mix[] = {
15148c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_STO4_ADC_MIXER,
15158c2ecf20Sopenharmony_ci			RT5677_M_STO4_ADC_R1_SFT, 1, 1),
15168c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_STO4_ADC_MIXER,
15178c2ecf20Sopenharmony_ci			RT5677_M_STO4_ADC_R2_SFT, 1, 1),
15188c2ecf20Sopenharmony_ci};
15198c2ecf20Sopenharmony_ci
15208c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_mono_adc_l_mix[] = {
15218c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_MONO_ADC_MIXER,
15228c2ecf20Sopenharmony_ci			RT5677_M_MONO_ADC_L1_SFT, 1, 1),
15238c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_MONO_ADC_MIXER,
15248c2ecf20Sopenharmony_ci			RT5677_M_MONO_ADC_L2_SFT, 1, 1),
15258c2ecf20Sopenharmony_ci};
15268c2ecf20Sopenharmony_ci
15278c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_mono_adc_r_mix[] = {
15288c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC1 Switch", RT5677_MONO_ADC_MIXER,
15298c2ecf20Sopenharmony_ci			RT5677_M_MONO_ADC_R1_SFT, 1, 1),
15308c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("ADC2 Switch", RT5677_MONO_ADC_MIXER,
15318c2ecf20Sopenharmony_ci			RT5677_M_MONO_ADC_R2_SFT, 1, 1),
15328c2ecf20Sopenharmony_ci};
15338c2ecf20Sopenharmony_ci
15348c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_dac_l_mix[] = {
15358c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("Stereo ADC Switch", RT5677_ADC_IF_DSP_DAC1_MIXER,
15368c2ecf20Sopenharmony_ci			RT5677_M_ADDA_MIXER1_L_SFT, 1, 1),
15378c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("DAC1 Switch", RT5677_ADC_IF_DSP_DAC1_MIXER,
15388c2ecf20Sopenharmony_ci			RT5677_M_DAC1_L_SFT, 1, 1),
15398c2ecf20Sopenharmony_ci};
15408c2ecf20Sopenharmony_ci
15418c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_dac_r_mix[] = {
15428c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("Stereo ADC Switch", RT5677_ADC_IF_DSP_DAC1_MIXER,
15438c2ecf20Sopenharmony_ci			RT5677_M_ADDA_MIXER1_R_SFT, 1, 1),
15448c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("DAC1 Switch", RT5677_ADC_IF_DSP_DAC1_MIXER,
15458c2ecf20Sopenharmony_ci			RT5677_M_DAC1_R_SFT, 1, 1),
15468c2ecf20Sopenharmony_ci};
15478c2ecf20Sopenharmony_ci
15488c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto1_dac_l_mix[] = {
15498c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ST L Switch", RT5677_STO1_DAC_MIXER,
15508c2ecf20Sopenharmony_ci			RT5677_M_ST_DAC1_L_SFT, 1, 1),
15518c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC1 L Switch", RT5677_STO1_DAC_MIXER,
15528c2ecf20Sopenharmony_ci			RT5677_M_DAC1_L_STO_L_SFT, 1, 1),
15538c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC2 L Switch", RT5677_STO1_DAC_MIXER,
15548c2ecf20Sopenharmony_ci			RT5677_M_DAC2_L_STO_L_SFT, 1, 1),
15558c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC1 R Switch", RT5677_STO1_DAC_MIXER,
15568c2ecf20Sopenharmony_ci			RT5677_M_DAC1_R_STO_L_SFT, 1, 1),
15578c2ecf20Sopenharmony_ci};
15588c2ecf20Sopenharmony_ci
15598c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto1_dac_r_mix[] = {
15608c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ST R Switch", RT5677_STO1_DAC_MIXER,
15618c2ecf20Sopenharmony_ci			RT5677_M_ST_DAC1_R_SFT, 1, 1),
15628c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC1 R Switch", RT5677_STO1_DAC_MIXER,
15638c2ecf20Sopenharmony_ci			RT5677_M_DAC1_R_STO_R_SFT, 1, 1),
15648c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC2 R Switch", RT5677_STO1_DAC_MIXER,
15658c2ecf20Sopenharmony_ci			RT5677_M_DAC2_R_STO_R_SFT, 1, 1),
15668c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC1 L Switch", RT5677_STO1_DAC_MIXER,
15678c2ecf20Sopenharmony_ci			RT5677_M_DAC1_L_STO_R_SFT, 1, 1),
15688c2ecf20Sopenharmony_ci};
15698c2ecf20Sopenharmony_ci
15708c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_mono_dac_l_mix[] = {
15718c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ST L Switch", RT5677_MONO_DAC_MIXER,
15728c2ecf20Sopenharmony_ci			RT5677_M_ST_DAC2_L_SFT, 1, 1),
15738c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC1 L Switch", RT5677_MONO_DAC_MIXER,
15748c2ecf20Sopenharmony_ci			RT5677_M_DAC1_L_MONO_L_SFT, 1, 1),
15758c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC2 L Switch", RT5677_MONO_DAC_MIXER,
15768c2ecf20Sopenharmony_ci			RT5677_M_DAC2_L_MONO_L_SFT, 1, 1),
15778c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC2 R Switch", RT5677_MONO_DAC_MIXER,
15788c2ecf20Sopenharmony_ci			RT5677_M_DAC2_R_MONO_L_SFT, 1, 1),
15798c2ecf20Sopenharmony_ci};
15808c2ecf20Sopenharmony_ci
15818c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_mono_dac_r_mix[] = {
15828c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("ST R Switch", RT5677_MONO_DAC_MIXER,
15838c2ecf20Sopenharmony_ci			RT5677_M_ST_DAC2_R_SFT, 1, 1),
15848c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC1 R Switch", RT5677_MONO_DAC_MIXER,
15858c2ecf20Sopenharmony_ci			RT5677_M_DAC1_R_MONO_R_SFT, 1, 1),
15868c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC2 R Switch", RT5677_MONO_DAC_MIXER,
15878c2ecf20Sopenharmony_ci			RT5677_M_DAC2_R_MONO_R_SFT, 1, 1),
15888c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC2 L Switch", RT5677_MONO_DAC_MIXER,
15898c2ecf20Sopenharmony_ci			RT5677_M_DAC2_L_MONO_R_SFT, 1, 1),
15908c2ecf20Sopenharmony_ci};
15918c2ecf20Sopenharmony_ci
15928c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_dd1_l_mix[] = {
15938c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("Sto DAC Mix L Switch", RT5677_DD1_MIXER,
15948c2ecf20Sopenharmony_ci			RT5677_M_STO_L_DD1_L_SFT, 1, 1),
15958c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("Mono DAC Mix L Switch", RT5677_DD1_MIXER,
15968c2ecf20Sopenharmony_ci			RT5677_M_MONO_L_DD1_L_SFT, 1, 1),
15978c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC3 L Switch", RT5677_DD1_MIXER,
15988c2ecf20Sopenharmony_ci			RT5677_M_DAC3_L_DD1_L_SFT, 1, 1),
15998c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC3 R Switch", RT5677_DD1_MIXER,
16008c2ecf20Sopenharmony_ci			RT5677_M_DAC3_R_DD1_L_SFT, 1, 1),
16018c2ecf20Sopenharmony_ci};
16028c2ecf20Sopenharmony_ci
16038c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_dd1_r_mix[] = {
16048c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("Sto DAC Mix R Switch", RT5677_DD1_MIXER,
16058c2ecf20Sopenharmony_ci			RT5677_M_STO_R_DD1_R_SFT, 1, 1),
16068c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("Mono DAC Mix R Switch", RT5677_DD1_MIXER,
16078c2ecf20Sopenharmony_ci			RT5677_M_MONO_R_DD1_R_SFT, 1, 1),
16088c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC3 R Switch", RT5677_DD1_MIXER,
16098c2ecf20Sopenharmony_ci			RT5677_M_DAC3_R_DD1_R_SFT, 1, 1),
16108c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC3 L Switch", RT5677_DD1_MIXER,
16118c2ecf20Sopenharmony_ci			RT5677_M_DAC3_L_DD1_R_SFT, 1, 1),
16128c2ecf20Sopenharmony_ci};
16138c2ecf20Sopenharmony_ci
16148c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_dd2_l_mix[] = {
16158c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("Sto DAC Mix L Switch", RT5677_DD2_MIXER,
16168c2ecf20Sopenharmony_ci			RT5677_M_STO_L_DD2_L_SFT, 1, 1),
16178c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("Mono DAC Mix L Switch", RT5677_DD2_MIXER,
16188c2ecf20Sopenharmony_ci			RT5677_M_MONO_L_DD2_L_SFT, 1, 1),
16198c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC4 L Switch", RT5677_DD2_MIXER,
16208c2ecf20Sopenharmony_ci			RT5677_M_DAC4_L_DD2_L_SFT, 1, 1),
16218c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC4 R Switch", RT5677_DD2_MIXER,
16228c2ecf20Sopenharmony_ci			RT5677_M_DAC4_R_DD2_L_SFT, 1, 1),
16238c2ecf20Sopenharmony_ci};
16248c2ecf20Sopenharmony_ci
16258c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_dd2_r_mix[] = {
16268c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("Sto DAC Mix R Switch", RT5677_DD2_MIXER,
16278c2ecf20Sopenharmony_ci			RT5677_M_STO_R_DD2_R_SFT, 1, 1),
16288c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("Mono DAC Mix R Switch", RT5677_DD2_MIXER,
16298c2ecf20Sopenharmony_ci			RT5677_M_MONO_R_DD2_R_SFT, 1, 1),
16308c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC4 R Switch", RT5677_DD2_MIXER,
16318c2ecf20Sopenharmony_ci			RT5677_M_DAC4_R_DD2_R_SFT, 1, 1),
16328c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE_AUTODISABLE("DAC4 L Switch", RT5677_DD2_MIXER,
16338c2ecf20Sopenharmony_ci			RT5677_M_DAC4_L_DD2_R_SFT, 1, 1),
16348c2ecf20Sopenharmony_ci};
16358c2ecf20Sopenharmony_ci
16368c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_ob_01_mix[] = {
16378c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB01 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
16388c2ecf20Sopenharmony_ci			RT5677_DSP_IB_01_H_SFT, 1, 1),
16398c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB23 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
16408c2ecf20Sopenharmony_ci			RT5677_DSP_IB_23_H_SFT, 1, 1),
16418c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB45 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
16428c2ecf20Sopenharmony_ci			RT5677_DSP_IB_45_H_SFT, 1, 1),
16438c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB6 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
16448c2ecf20Sopenharmony_ci			RT5677_DSP_IB_6_H_SFT, 1, 1),
16458c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB7 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
16468c2ecf20Sopenharmony_ci			RT5677_DSP_IB_7_H_SFT, 1, 1),
16478c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB8 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
16488c2ecf20Sopenharmony_ci			RT5677_DSP_IB_8_H_SFT, 1, 1),
16498c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB9 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
16508c2ecf20Sopenharmony_ci			RT5677_DSP_IB_9_H_SFT, 1, 1),
16518c2ecf20Sopenharmony_ci};
16528c2ecf20Sopenharmony_ci
16538c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_ob_23_mix[] = {
16548c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB01 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
16558c2ecf20Sopenharmony_ci			RT5677_DSP_IB_01_L_SFT, 1, 1),
16568c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB23 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
16578c2ecf20Sopenharmony_ci			RT5677_DSP_IB_23_L_SFT, 1, 1),
16588c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB45 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
16598c2ecf20Sopenharmony_ci			RT5677_DSP_IB_45_L_SFT, 1, 1),
16608c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB6 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
16618c2ecf20Sopenharmony_ci			RT5677_DSP_IB_6_L_SFT, 1, 1),
16628c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB7 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
16638c2ecf20Sopenharmony_ci			RT5677_DSP_IB_7_L_SFT, 1, 1),
16648c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB8 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
16658c2ecf20Sopenharmony_ci			RT5677_DSP_IB_8_L_SFT, 1, 1),
16668c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB9 Switch", RT5677_DSP_OUTB_0123_MIXER_CTRL,
16678c2ecf20Sopenharmony_ci			RT5677_DSP_IB_9_L_SFT, 1, 1),
16688c2ecf20Sopenharmony_ci};
16698c2ecf20Sopenharmony_ci
16708c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_ob_4_mix[] = {
16718c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB01 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
16728c2ecf20Sopenharmony_ci			RT5677_DSP_IB_01_H_SFT, 1, 1),
16738c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB23 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
16748c2ecf20Sopenharmony_ci			RT5677_DSP_IB_23_H_SFT, 1, 1),
16758c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB45 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
16768c2ecf20Sopenharmony_ci			RT5677_DSP_IB_45_H_SFT, 1, 1),
16778c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB6 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
16788c2ecf20Sopenharmony_ci			RT5677_DSP_IB_6_H_SFT, 1, 1),
16798c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB7 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
16808c2ecf20Sopenharmony_ci			RT5677_DSP_IB_7_H_SFT, 1, 1),
16818c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB8 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
16828c2ecf20Sopenharmony_ci			RT5677_DSP_IB_8_H_SFT, 1, 1),
16838c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB9 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
16848c2ecf20Sopenharmony_ci			RT5677_DSP_IB_9_H_SFT, 1, 1),
16858c2ecf20Sopenharmony_ci};
16868c2ecf20Sopenharmony_ci
16878c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_ob_5_mix[] = {
16888c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB01 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
16898c2ecf20Sopenharmony_ci			RT5677_DSP_IB_01_L_SFT, 1, 1),
16908c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB23 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
16918c2ecf20Sopenharmony_ci			RT5677_DSP_IB_23_L_SFT, 1, 1),
16928c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB45 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
16938c2ecf20Sopenharmony_ci			RT5677_DSP_IB_45_L_SFT, 1, 1),
16948c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB6 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
16958c2ecf20Sopenharmony_ci			RT5677_DSP_IB_6_L_SFT, 1, 1),
16968c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB7 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
16978c2ecf20Sopenharmony_ci			RT5677_DSP_IB_7_L_SFT, 1, 1),
16988c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB8 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
16998c2ecf20Sopenharmony_ci			RT5677_DSP_IB_8_L_SFT, 1, 1),
17008c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB9 Switch", RT5677_DSP_OUTB_45_MIXER_CTRL,
17018c2ecf20Sopenharmony_ci			RT5677_DSP_IB_9_L_SFT, 1, 1),
17028c2ecf20Sopenharmony_ci};
17038c2ecf20Sopenharmony_ci
17048c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_ob_6_mix[] = {
17058c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB01 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
17068c2ecf20Sopenharmony_ci			RT5677_DSP_IB_01_H_SFT, 1, 1),
17078c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB23 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
17088c2ecf20Sopenharmony_ci			RT5677_DSP_IB_23_H_SFT, 1, 1),
17098c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB45 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
17108c2ecf20Sopenharmony_ci			RT5677_DSP_IB_45_H_SFT, 1, 1),
17118c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB6 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
17128c2ecf20Sopenharmony_ci			RT5677_DSP_IB_6_H_SFT, 1, 1),
17138c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB7 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
17148c2ecf20Sopenharmony_ci			RT5677_DSP_IB_7_H_SFT, 1, 1),
17158c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB8 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
17168c2ecf20Sopenharmony_ci			RT5677_DSP_IB_8_H_SFT, 1, 1),
17178c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB9 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
17188c2ecf20Sopenharmony_ci			RT5677_DSP_IB_9_H_SFT, 1, 1),
17198c2ecf20Sopenharmony_ci};
17208c2ecf20Sopenharmony_ci
17218c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_ob_7_mix[] = {
17228c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB01 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
17238c2ecf20Sopenharmony_ci			RT5677_DSP_IB_01_L_SFT, 1, 1),
17248c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB23 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
17258c2ecf20Sopenharmony_ci			RT5677_DSP_IB_23_L_SFT, 1, 1),
17268c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB45 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
17278c2ecf20Sopenharmony_ci			RT5677_DSP_IB_45_L_SFT, 1, 1),
17288c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB6 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
17298c2ecf20Sopenharmony_ci			RT5677_DSP_IB_6_L_SFT, 1, 1),
17308c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB7 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
17318c2ecf20Sopenharmony_ci			RT5677_DSP_IB_7_L_SFT, 1, 1),
17328c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB8 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
17338c2ecf20Sopenharmony_ci			RT5677_DSP_IB_8_L_SFT, 1, 1),
17348c2ecf20Sopenharmony_ci	SOC_DAPM_SINGLE("IB9 Switch", RT5677_DSP_OUTB_67_MIXER_CTRL,
17358c2ecf20Sopenharmony_ci			RT5677_DSP_IB_9_L_SFT, 1, 1),
17368c2ecf20Sopenharmony_ci};
17378c2ecf20Sopenharmony_ci
17388c2ecf20Sopenharmony_ci
17398c2ecf20Sopenharmony_ci/* Mux */
17408c2ecf20Sopenharmony_ci/* DAC1 L/R Source */ /* MX-29 [10:8] */
17418c2ecf20Sopenharmony_cistatic const char * const rt5677_dac1_src[] = {
17428c2ecf20Sopenharmony_ci	"IF1 DAC 01", "IF2 DAC 01", "IF3 DAC LR", "IF4 DAC LR", "SLB DAC 01",
17438c2ecf20Sopenharmony_ci	"OB 01"
17448c2ecf20Sopenharmony_ci};
17458c2ecf20Sopenharmony_ci
17468c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
17478c2ecf20Sopenharmony_ci	rt5677_dac1_enum, RT5677_ADC_IF_DSP_DAC1_MIXER,
17488c2ecf20Sopenharmony_ci	RT5677_DAC1_L_SEL_SFT, rt5677_dac1_src);
17498c2ecf20Sopenharmony_ci
17508c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_dac1_mux =
17518c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("DAC1 Source", rt5677_dac1_enum);
17528c2ecf20Sopenharmony_ci
17538c2ecf20Sopenharmony_ci/* ADDA1 L/R Source */ /* MX-29 [1:0] */
17548c2ecf20Sopenharmony_cistatic const char * const rt5677_adda1_src[] = {
17558c2ecf20Sopenharmony_ci	"STO1 ADC MIX", "STO2 ADC MIX", "OB 67",
17568c2ecf20Sopenharmony_ci};
17578c2ecf20Sopenharmony_ci
17588c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
17598c2ecf20Sopenharmony_ci	rt5677_adda1_enum, RT5677_ADC_IF_DSP_DAC1_MIXER,
17608c2ecf20Sopenharmony_ci	RT5677_ADDA1_SEL_SFT, rt5677_adda1_src);
17618c2ecf20Sopenharmony_ci
17628c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_adda1_mux =
17638c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("ADDA1 Source", rt5677_adda1_enum);
17648c2ecf20Sopenharmony_ci
17658c2ecf20Sopenharmony_ci
17668c2ecf20Sopenharmony_ci/*DAC2 L/R Source*/ /* MX-1B [6:4] [2:0] */
17678c2ecf20Sopenharmony_cistatic const char * const rt5677_dac2l_src[] = {
17688c2ecf20Sopenharmony_ci	"IF1 DAC 2", "IF2 DAC 2", "IF3 DAC L", "IF4 DAC L", "SLB DAC 2",
17698c2ecf20Sopenharmony_ci	"OB 2",
17708c2ecf20Sopenharmony_ci};
17718c2ecf20Sopenharmony_ci
17728c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
17738c2ecf20Sopenharmony_ci	rt5677_dac2l_enum, RT5677_IF_DSP_DAC2_MIXER,
17748c2ecf20Sopenharmony_ci	RT5677_SEL_DAC2_L_SRC_SFT, rt5677_dac2l_src);
17758c2ecf20Sopenharmony_ci
17768c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_dac2_l_mux =
17778c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("DAC2 L Source", rt5677_dac2l_enum);
17788c2ecf20Sopenharmony_ci
17798c2ecf20Sopenharmony_cistatic const char * const rt5677_dac2r_src[] = {
17808c2ecf20Sopenharmony_ci	"IF1 DAC 3", "IF2 DAC 3", "IF3 DAC R", "IF4 DAC R", "SLB DAC 3",
17818c2ecf20Sopenharmony_ci	"OB 3", "Haptic Generator", "VAD ADC"
17828c2ecf20Sopenharmony_ci};
17838c2ecf20Sopenharmony_ci
17848c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
17858c2ecf20Sopenharmony_ci	rt5677_dac2r_enum, RT5677_IF_DSP_DAC2_MIXER,
17868c2ecf20Sopenharmony_ci	RT5677_SEL_DAC2_R_SRC_SFT, rt5677_dac2r_src);
17878c2ecf20Sopenharmony_ci
17888c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_dac2_r_mux =
17898c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("DAC2 R Source", rt5677_dac2r_enum);
17908c2ecf20Sopenharmony_ci
17918c2ecf20Sopenharmony_ci/*DAC3 L/R Source*/ /* MX-16 [6:4] [2:0] */
17928c2ecf20Sopenharmony_cistatic const char * const rt5677_dac3l_src[] = {
17938c2ecf20Sopenharmony_ci	"IF1 DAC 4", "IF2 DAC 4", "IF3 DAC L", "IF4 DAC L",
17948c2ecf20Sopenharmony_ci	"SLB DAC 4", "OB 4"
17958c2ecf20Sopenharmony_ci};
17968c2ecf20Sopenharmony_ci
17978c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
17988c2ecf20Sopenharmony_ci	rt5677_dac3l_enum, RT5677_IF_DSP_DAC3_4_MIXER,
17998c2ecf20Sopenharmony_ci	RT5677_SEL_DAC3_L_SRC_SFT, rt5677_dac3l_src);
18008c2ecf20Sopenharmony_ci
18018c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_dac3_l_mux =
18028c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("DAC3 L Source", rt5677_dac3l_enum);
18038c2ecf20Sopenharmony_ci
18048c2ecf20Sopenharmony_cistatic const char * const rt5677_dac3r_src[] = {
18058c2ecf20Sopenharmony_ci	"IF1 DAC 5", "IF2 DAC 5", "IF3 DAC R", "IF4 DAC R",
18068c2ecf20Sopenharmony_ci	"SLB DAC 5", "OB 5"
18078c2ecf20Sopenharmony_ci};
18088c2ecf20Sopenharmony_ci
18098c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
18108c2ecf20Sopenharmony_ci	rt5677_dac3r_enum, RT5677_IF_DSP_DAC3_4_MIXER,
18118c2ecf20Sopenharmony_ci	RT5677_SEL_DAC3_R_SRC_SFT, rt5677_dac3r_src);
18128c2ecf20Sopenharmony_ci
18138c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_dac3_r_mux =
18148c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("DAC3 R Source", rt5677_dac3r_enum);
18158c2ecf20Sopenharmony_ci
18168c2ecf20Sopenharmony_ci/*DAC4 L/R Source*/ /* MX-16 [14:12] [10:8] */
18178c2ecf20Sopenharmony_cistatic const char * const rt5677_dac4l_src[] = {
18188c2ecf20Sopenharmony_ci	"IF1 DAC 6", "IF2 DAC 6", "IF3 DAC L", "IF4 DAC L",
18198c2ecf20Sopenharmony_ci	"SLB DAC 6", "OB 6"
18208c2ecf20Sopenharmony_ci};
18218c2ecf20Sopenharmony_ci
18228c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
18238c2ecf20Sopenharmony_ci	rt5677_dac4l_enum, RT5677_IF_DSP_DAC3_4_MIXER,
18248c2ecf20Sopenharmony_ci	RT5677_SEL_DAC4_L_SRC_SFT, rt5677_dac4l_src);
18258c2ecf20Sopenharmony_ci
18268c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_dac4_l_mux =
18278c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("DAC4 L Source", rt5677_dac4l_enum);
18288c2ecf20Sopenharmony_ci
18298c2ecf20Sopenharmony_cistatic const char * const rt5677_dac4r_src[] = {
18308c2ecf20Sopenharmony_ci	"IF1 DAC 7", "IF2 DAC 7", "IF3 DAC R", "IF4 DAC R",
18318c2ecf20Sopenharmony_ci	"SLB DAC 7", "OB 7"
18328c2ecf20Sopenharmony_ci};
18338c2ecf20Sopenharmony_ci
18348c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
18358c2ecf20Sopenharmony_ci	rt5677_dac4r_enum, RT5677_IF_DSP_DAC3_4_MIXER,
18368c2ecf20Sopenharmony_ci	RT5677_SEL_DAC4_R_SRC_SFT, rt5677_dac4r_src);
18378c2ecf20Sopenharmony_ci
18388c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_dac4_r_mux =
18398c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("DAC4 R Source", rt5677_dac4r_enum);
18408c2ecf20Sopenharmony_ci
18418c2ecf20Sopenharmony_ci/* In/OutBound Source Pass SRC */ /* MX-A5 [3] [4] [0] [1] [2] */
18428c2ecf20Sopenharmony_cistatic const char * const rt5677_iob_bypass_src[] = {
18438c2ecf20Sopenharmony_ci	"Bypass", "Pass SRC"
18448c2ecf20Sopenharmony_ci};
18458c2ecf20Sopenharmony_ci
18468c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
18478c2ecf20Sopenharmony_ci	rt5677_ob01_bypass_src_enum, RT5677_DSP_IN_OUTB_CTRL,
18488c2ecf20Sopenharmony_ci	RT5677_SEL_SRC_OB01_SFT, rt5677_iob_bypass_src);
18498c2ecf20Sopenharmony_ci
18508c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_ob01_bypass_src_mux =
18518c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("OB01 Bypass Source", rt5677_ob01_bypass_src_enum);
18528c2ecf20Sopenharmony_ci
18538c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
18548c2ecf20Sopenharmony_ci	rt5677_ob23_bypass_src_enum, RT5677_DSP_IN_OUTB_CTRL,
18558c2ecf20Sopenharmony_ci	RT5677_SEL_SRC_OB23_SFT, rt5677_iob_bypass_src);
18568c2ecf20Sopenharmony_ci
18578c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_ob23_bypass_src_mux =
18588c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("OB23 Bypass Source", rt5677_ob23_bypass_src_enum);
18598c2ecf20Sopenharmony_ci
18608c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
18618c2ecf20Sopenharmony_ci	rt5677_ib01_bypass_src_enum, RT5677_DSP_IN_OUTB_CTRL,
18628c2ecf20Sopenharmony_ci	RT5677_SEL_SRC_IB01_SFT, rt5677_iob_bypass_src);
18638c2ecf20Sopenharmony_ci
18648c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_ib01_bypass_src_mux =
18658c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IB01 Bypass Source", rt5677_ib01_bypass_src_enum);
18668c2ecf20Sopenharmony_ci
18678c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
18688c2ecf20Sopenharmony_ci	rt5677_ib23_bypass_src_enum, RT5677_DSP_IN_OUTB_CTRL,
18698c2ecf20Sopenharmony_ci	RT5677_SEL_SRC_IB23_SFT, rt5677_iob_bypass_src);
18708c2ecf20Sopenharmony_ci
18718c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_ib23_bypass_src_mux =
18728c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IB23 Bypass Source", rt5677_ib23_bypass_src_enum);
18738c2ecf20Sopenharmony_ci
18748c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
18758c2ecf20Sopenharmony_ci	rt5677_ib45_bypass_src_enum, RT5677_DSP_IN_OUTB_CTRL,
18768c2ecf20Sopenharmony_ci	RT5677_SEL_SRC_IB45_SFT, rt5677_iob_bypass_src);
18778c2ecf20Sopenharmony_ci
18788c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_ib45_bypass_src_mux =
18798c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IB45 Bypass Source", rt5677_ib45_bypass_src_enum);
18808c2ecf20Sopenharmony_ci
18818c2ecf20Sopenharmony_ci/* Stereo ADC Source 2 */ /* MX-27 MX26 MX25 [11:10] */
18828c2ecf20Sopenharmony_cistatic const char * const rt5677_stereo_adc2_src[] = {
18838c2ecf20Sopenharmony_ci	"DD MIX1", "DMIC", "Stereo DAC MIX"
18848c2ecf20Sopenharmony_ci};
18858c2ecf20Sopenharmony_ci
18868c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
18878c2ecf20Sopenharmony_ci	rt5677_stereo1_adc2_enum, RT5677_STO1_ADC_MIXER,
18888c2ecf20Sopenharmony_ci	RT5677_SEL_STO1_ADC2_SFT, rt5677_stereo_adc2_src);
18898c2ecf20Sopenharmony_ci
18908c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto1_adc2_mux =
18918c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Stereo1 ADC2 Source", rt5677_stereo1_adc2_enum);
18928c2ecf20Sopenharmony_ci
18938c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
18948c2ecf20Sopenharmony_ci	rt5677_stereo2_adc2_enum, RT5677_STO2_ADC_MIXER,
18958c2ecf20Sopenharmony_ci	RT5677_SEL_STO2_ADC2_SFT, rt5677_stereo_adc2_src);
18968c2ecf20Sopenharmony_ci
18978c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto2_adc2_mux =
18988c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Stereo2 ADC2 Source", rt5677_stereo2_adc2_enum);
18998c2ecf20Sopenharmony_ci
19008c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
19018c2ecf20Sopenharmony_ci	rt5677_stereo3_adc2_enum, RT5677_STO3_ADC_MIXER,
19028c2ecf20Sopenharmony_ci	RT5677_SEL_STO3_ADC2_SFT, rt5677_stereo_adc2_src);
19038c2ecf20Sopenharmony_ci
19048c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto3_adc2_mux =
19058c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Stereo3 ADC2 Source", rt5677_stereo3_adc2_enum);
19068c2ecf20Sopenharmony_ci
19078c2ecf20Sopenharmony_ci/* DMIC Source */ /* MX-28 [9:8][1:0] MX-27 MX-26 MX-25 MX-24 [9:8] */
19088c2ecf20Sopenharmony_cistatic const char * const rt5677_dmic_src[] = {
19098c2ecf20Sopenharmony_ci	"DMIC1", "DMIC2", "DMIC3", "DMIC4"
19108c2ecf20Sopenharmony_ci};
19118c2ecf20Sopenharmony_ci
19128c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
19138c2ecf20Sopenharmony_ci	rt5677_mono_dmic_l_enum, RT5677_MONO_ADC_MIXER,
19148c2ecf20Sopenharmony_ci	RT5677_SEL_MONO_DMIC_L_SFT, rt5677_dmic_src);
19158c2ecf20Sopenharmony_ci
19168c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_mono_dmic_l_mux =
19178c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Mono DMIC L Source", rt5677_mono_dmic_l_enum);
19188c2ecf20Sopenharmony_ci
19198c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
19208c2ecf20Sopenharmony_ci	rt5677_mono_dmic_r_enum, RT5677_MONO_ADC_MIXER,
19218c2ecf20Sopenharmony_ci	RT5677_SEL_MONO_DMIC_R_SFT, rt5677_dmic_src);
19228c2ecf20Sopenharmony_ci
19238c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_mono_dmic_r_mux =
19248c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Mono DMIC R Source", rt5677_mono_dmic_r_enum);
19258c2ecf20Sopenharmony_ci
19268c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
19278c2ecf20Sopenharmony_ci	rt5677_stereo1_dmic_enum, RT5677_STO1_ADC_MIXER,
19288c2ecf20Sopenharmony_ci	RT5677_SEL_STO1_DMIC_SFT, rt5677_dmic_src);
19298c2ecf20Sopenharmony_ci
19308c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto1_dmic_mux =
19318c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Stereo1 DMIC Source", rt5677_stereo1_dmic_enum);
19328c2ecf20Sopenharmony_ci
19338c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
19348c2ecf20Sopenharmony_ci	rt5677_stereo2_dmic_enum, RT5677_STO2_ADC_MIXER,
19358c2ecf20Sopenharmony_ci	RT5677_SEL_STO2_DMIC_SFT, rt5677_dmic_src);
19368c2ecf20Sopenharmony_ci
19378c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto2_dmic_mux =
19388c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Stereo2 DMIC Source", rt5677_stereo2_dmic_enum);
19398c2ecf20Sopenharmony_ci
19408c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
19418c2ecf20Sopenharmony_ci	rt5677_stereo3_dmic_enum, RT5677_STO3_ADC_MIXER,
19428c2ecf20Sopenharmony_ci	RT5677_SEL_STO3_DMIC_SFT, rt5677_dmic_src);
19438c2ecf20Sopenharmony_ci
19448c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto3_dmic_mux =
19458c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Stereo3 DMIC Source", rt5677_stereo3_dmic_enum);
19468c2ecf20Sopenharmony_ci
19478c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
19488c2ecf20Sopenharmony_ci	rt5677_stereo4_dmic_enum, RT5677_STO4_ADC_MIXER,
19498c2ecf20Sopenharmony_ci	RT5677_SEL_STO4_DMIC_SFT, rt5677_dmic_src);
19508c2ecf20Sopenharmony_ci
19518c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto4_dmic_mux =
19528c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Stereo4 DMIC Source", rt5677_stereo4_dmic_enum);
19538c2ecf20Sopenharmony_ci
19548c2ecf20Sopenharmony_ci/* Stereo2 ADC Source */ /* MX-26 [0] */
19558c2ecf20Sopenharmony_cistatic const char * const rt5677_stereo2_adc_lr_src[] = {
19568c2ecf20Sopenharmony_ci	"L", "LR"
19578c2ecf20Sopenharmony_ci};
19588c2ecf20Sopenharmony_ci
19598c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
19608c2ecf20Sopenharmony_ci	rt5677_stereo2_adc_lr_enum, RT5677_STO2_ADC_MIXER,
19618c2ecf20Sopenharmony_ci	RT5677_SEL_STO2_LR_MIX_SFT, rt5677_stereo2_adc_lr_src);
19628c2ecf20Sopenharmony_ci
19638c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto2_adc_lr_mux =
19648c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Stereo2 ADC LR Source", rt5677_stereo2_adc_lr_enum);
19658c2ecf20Sopenharmony_ci
19668c2ecf20Sopenharmony_ci/* Stereo1 ADC Source 1 */ /* MX-27 MX26 MX25 [13:12] */
19678c2ecf20Sopenharmony_cistatic const char * const rt5677_stereo_adc1_src[] = {
19688c2ecf20Sopenharmony_ci	"DD MIX1", "ADC1/2", "Stereo DAC MIX"
19698c2ecf20Sopenharmony_ci};
19708c2ecf20Sopenharmony_ci
19718c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
19728c2ecf20Sopenharmony_ci	rt5677_stereo1_adc1_enum, RT5677_STO1_ADC_MIXER,
19738c2ecf20Sopenharmony_ci	RT5677_SEL_STO1_ADC1_SFT, rt5677_stereo_adc1_src);
19748c2ecf20Sopenharmony_ci
19758c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto1_adc1_mux =
19768c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Stereo1 ADC1 Source", rt5677_stereo1_adc1_enum);
19778c2ecf20Sopenharmony_ci
19788c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
19798c2ecf20Sopenharmony_ci	rt5677_stereo2_adc1_enum, RT5677_STO2_ADC_MIXER,
19808c2ecf20Sopenharmony_ci	RT5677_SEL_STO2_ADC1_SFT, rt5677_stereo_adc1_src);
19818c2ecf20Sopenharmony_ci
19828c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto2_adc1_mux =
19838c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Stereo2 ADC1 Source", rt5677_stereo2_adc1_enum);
19848c2ecf20Sopenharmony_ci
19858c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
19868c2ecf20Sopenharmony_ci	rt5677_stereo3_adc1_enum, RT5677_STO3_ADC_MIXER,
19878c2ecf20Sopenharmony_ci	RT5677_SEL_STO3_ADC1_SFT, rt5677_stereo_adc1_src);
19888c2ecf20Sopenharmony_ci
19898c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto3_adc1_mux =
19908c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Stereo3 ADC1 Source", rt5677_stereo3_adc1_enum);
19918c2ecf20Sopenharmony_ci
19928c2ecf20Sopenharmony_ci/* Mono ADC Left Source 2 */ /* MX-28 [11:10] */
19938c2ecf20Sopenharmony_cistatic const char * const rt5677_mono_adc2_l_src[] = {
19948c2ecf20Sopenharmony_ci	"DD MIX1L", "DMIC", "MONO DAC MIXL"
19958c2ecf20Sopenharmony_ci};
19968c2ecf20Sopenharmony_ci
19978c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
19988c2ecf20Sopenharmony_ci	rt5677_mono_adc2_l_enum, RT5677_MONO_ADC_MIXER,
19998c2ecf20Sopenharmony_ci	RT5677_SEL_MONO_ADC_L2_SFT, rt5677_mono_adc2_l_src);
20008c2ecf20Sopenharmony_ci
20018c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_mono_adc2_l_mux =
20028c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Mono ADC2 L Source", rt5677_mono_adc2_l_enum);
20038c2ecf20Sopenharmony_ci
20048c2ecf20Sopenharmony_ci/* Mono ADC Left Source 1 */ /* MX-28 [13:12] */
20058c2ecf20Sopenharmony_cistatic const char * const rt5677_mono_adc1_l_src[] = {
20068c2ecf20Sopenharmony_ci	"DD MIX1L", "ADC1", "MONO DAC MIXL"
20078c2ecf20Sopenharmony_ci};
20088c2ecf20Sopenharmony_ci
20098c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
20108c2ecf20Sopenharmony_ci	rt5677_mono_adc1_l_enum, RT5677_MONO_ADC_MIXER,
20118c2ecf20Sopenharmony_ci	RT5677_SEL_MONO_ADC_L1_SFT, rt5677_mono_adc1_l_src);
20128c2ecf20Sopenharmony_ci
20138c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_mono_adc1_l_mux =
20148c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Mono ADC1 L Source", rt5677_mono_adc1_l_enum);
20158c2ecf20Sopenharmony_ci
20168c2ecf20Sopenharmony_ci/* Mono ADC Right Source 2 */ /* MX-28 [3:2] */
20178c2ecf20Sopenharmony_cistatic const char * const rt5677_mono_adc2_r_src[] = {
20188c2ecf20Sopenharmony_ci	"DD MIX1R", "DMIC", "MONO DAC MIXR"
20198c2ecf20Sopenharmony_ci};
20208c2ecf20Sopenharmony_ci
20218c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
20228c2ecf20Sopenharmony_ci	rt5677_mono_adc2_r_enum, RT5677_MONO_ADC_MIXER,
20238c2ecf20Sopenharmony_ci	RT5677_SEL_MONO_ADC_R2_SFT, rt5677_mono_adc2_r_src);
20248c2ecf20Sopenharmony_ci
20258c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_mono_adc2_r_mux =
20268c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Mono ADC2 R Source", rt5677_mono_adc2_r_enum);
20278c2ecf20Sopenharmony_ci
20288c2ecf20Sopenharmony_ci/* Mono ADC Right Source 1 */ /* MX-28 [5:4] */
20298c2ecf20Sopenharmony_cistatic const char * const rt5677_mono_adc1_r_src[] = {
20308c2ecf20Sopenharmony_ci	"DD MIX1R", "ADC2", "MONO DAC MIXR"
20318c2ecf20Sopenharmony_ci};
20328c2ecf20Sopenharmony_ci
20338c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
20348c2ecf20Sopenharmony_ci	rt5677_mono_adc1_r_enum, RT5677_MONO_ADC_MIXER,
20358c2ecf20Sopenharmony_ci	RT5677_SEL_MONO_ADC_R1_SFT, rt5677_mono_adc1_r_src);
20368c2ecf20Sopenharmony_ci
20378c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_mono_adc1_r_mux =
20388c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Mono ADC1 R Source", rt5677_mono_adc1_r_enum);
20398c2ecf20Sopenharmony_ci
20408c2ecf20Sopenharmony_ci/* Stereo4 ADC Source 2 */ /* MX-24 [11:10] */
20418c2ecf20Sopenharmony_cistatic const char * const rt5677_stereo4_adc2_src[] = {
20428c2ecf20Sopenharmony_ci	"DD MIX1", "DMIC", "DD MIX2"
20438c2ecf20Sopenharmony_ci};
20448c2ecf20Sopenharmony_ci
20458c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
20468c2ecf20Sopenharmony_ci	rt5677_stereo4_adc2_enum, RT5677_STO4_ADC_MIXER,
20478c2ecf20Sopenharmony_ci	RT5677_SEL_STO4_ADC2_SFT, rt5677_stereo4_adc2_src);
20488c2ecf20Sopenharmony_ci
20498c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto4_adc2_mux =
20508c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Stereo4 ADC2 Source", rt5677_stereo4_adc2_enum);
20518c2ecf20Sopenharmony_ci
20528c2ecf20Sopenharmony_ci
20538c2ecf20Sopenharmony_ci/* Stereo4 ADC Source 1 */ /* MX-24 [13:12] */
20548c2ecf20Sopenharmony_cistatic const char * const rt5677_stereo4_adc1_src[] = {
20558c2ecf20Sopenharmony_ci	"DD MIX1", "ADC1/2", "DD MIX2"
20568c2ecf20Sopenharmony_ci};
20578c2ecf20Sopenharmony_ci
20588c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
20598c2ecf20Sopenharmony_ci	rt5677_stereo4_adc1_enum, RT5677_STO4_ADC_MIXER,
20608c2ecf20Sopenharmony_ci	RT5677_SEL_STO4_ADC1_SFT, rt5677_stereo4_adc1_src);
20618c2ecf20Sopenharmony_ci
20628c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sto4_adc1_mux =
20638c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Stereo4 ADC1 Source", rt5677_stereo4_adc1_enum);
20648c2ecf20Sopenharmony_ci
20658c2ecf20Sopenharmony_ci/* InBound0/1 Source */ /* MX-A3 [14:12] */
20668c2ecf20Sopenharmony_cistatic const char * const rt5677_inbound01_src[] = {
20678c2ecf20Sopenharmony_ci	"IF1 DAC 01", "IF2 DAC 01", "SLB DAC 01", "STO1 ADC MIX",
20688c2ecf20Sopenharmony_ci	"VAD ADC/DAC1 FS"
20698c2ecf20Sopenharmony_ci};
20708c2ecf20Sopenharmony_ci
20718c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
20728c2ecf20Sopenharmony_ci	rt5677_inbound01_enum, RT5677_DSP_INB_CTRL1,
20738c2ecf20Sopenharmony_ci	RT5677_IB01_SRC_SFT, rt5677_inbound01_src);
20748c2ecf20Sopenharmony_ci
20758c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_ib01_src_mux =
20768c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("InBound0/1 Source", rt5677_inbound01_enum);
20778c2ecf20Sopenharmony_ci
20788c2ecf20Sopenharmony_ci/* InBound2/3 Source */ /* MX-A3 [10:8] */
20798c2ecf20Sopenharmony_cistatic const char * const rt5677_inbound23_src[] = {
20808c2ecf20Sopenharmony_ci	"IF1 DAC 23", "IF2 DAC 23", "SLB DAC 23", "STO2 ADC MIX",
20818c2ecf20Sopenharmony_ci	"DAC1 FS", "IF4 DAC"
20828c2ecf20Sopenharmony_ci};
20838c2ecf20Sopenharmony_ci
20848c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
20858c2ecf20Sopenharmony_ci	rt5677_inbound23_enum, RT5677_DSP_INB_CTRL1,
20868c2ecf20Sopenharmony_ci	RT5677_IB23_SRC_SFT, rt5677_inbound23_src);
20878c2ecf20Sopenharmony_ci
20888c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_ib23_src_mux =
20898c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("InBound2/3 Source", rt5677_inbound23_enum);
20908c2ecf20Sopenharmony_ci
20918c2ecf20Sopenharmony_ci/* InBound4/5 Source */ /* MX-A3 [6:4] */
20928c2ecf20Sopenharmony_cistatic const char * const rt5677_inbound45_src[] = {
20938c2ecf20Sopenharmony_ci	"IF1 DAC 45", "IF2 DAC 45", "SLB DAC 45", "STO3 ADC MIX",
20948c2ecf20Sopenharmony_ci	"IF3 DAC"
20958c2ecf20Sopenharmony_ci};
20968c2ecf20Sopenharmony_ci
20978c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
20988c2ecf20Sopenharmony_ci	rt5677_inbound45_enum, RT5677_DSP_INB_CTRL1,
20998c2ecf20Sopenharmony_ci	RT5677_IB45_SRC_SFT, rt5677_inbound45_src);
21008c2ecf20Sopenharmony_ci
21018c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_ib45_src_mux =
21028c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("InBound4/5 Source", rt5677_inbound45_enum);
21038c2ecf20Sopenharmony_ci
21048c2ecf20Sopenharmony_ci/* InBound6 Source */ /* MX-A3 [2:0] */
21058c2ecf20Sopenharmony_cistatic const char * const rt5677_inbound6_src[] = {
21068c2ecf20Sopenharmony_ci	"IF1 DAC 6", "IF2 DAC 6", "SLB DAC 6", "STO4 ADC MIX L",
21078c2ecf20Sopenharmony_ci	"IF4 DAC L", "STO1 ADC MIX L", "STO2 ADC MIX L", "STO3 ADC MIX L"
21088c2ecf20Sopenharmony_ci};
21098c2ecf20Sopenharmony_ci
21108c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
21118c2ecf20Sopenharmony_ci	rt5677_inbound6_enum, RT5677_DSP_INB_CTRL1,
21128c2ecf20Sopenharmony_ci	RT5677_IB6_SRC_SFT, rt5677_inbound6_src);
21138c2ecf20Sopenharmony_ci
21148c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_ib6_src_mux =
21158c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("InBound6 Source", rt5677_inbound6_enum);
21168c2ecf20Sopenharmony_ci
21178c2ecf20Sopenharmony_ci/* InBound7 Source */ /* MX-A4 [14:12] */
21188c2ecf20Sopenharmony_cistatic const char * const rt5677_inbound7_src[] = {
21198c2ecf20Sopenharmony_ci	"IF1 DAC 7", "IF2 DAC 7", "SLB DAC 7", "STO4 ADC MIX R",
21208c2ecf20Sopenharmony_ci	"IF4 DAC R", "STO1 ADC MIX R", "STO2 ADC MIX R", "STO3 ADC MIX R"
21218c2ecf20Sopenharmony_ci};
21228c2ecf20Sopenharmony_ci
21238c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
21248c2ecf20Sopenharmony_ci	rt5677_inbound7_enum, RT5677_DSP_INB_CTRL2,
21258c2ecf20Sopenharmony_ci	RT5677_IB7_SRC_SFT, rt5677_inbound7_src);
21268c2ecf20Sopenharmony_ci
21278c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_ib7_src_mux =
21288c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("InBound7 Source", rt5677_inbound7_enum);
21298c2ecf20Sopenharmony_ci
21308c2ecf20Sopenharmony_ci/* InBound8 Source */ /* MX-A4 [10:8] */
21318c2ecf20Sopenharmony_cistatic const char * const rt5677_inbound8_src[] = {
21328c2ecf20Sopenharmony_ci	"STO1 ADC MIX L", "STO2 ADC MIX L", "STO3 ADC MIX L", "STO4 ADC MIX L",
21338c2ecf20Sopenharmony_ci	"MONO ADC MIX L", "DACL1 FS"
21348c2ecf20Sopenharmony_ci};
21358c2ecf20Sopenharmony_ci
21368c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
21378c2ecf20Sopenharmony_ci	rt5677_inbound8_enum, RT5677_DSP_INB_CTRL2,
21388c2ecf20Sopenharmony_ci	RT5677_IB8_SRC_SFT, rt5677_inbound8_src);
21398c2ecf20Sopenharmony_ci
21408c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_ib8_src_mux =
21418c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("InBound8 Source", rt5677_inbound8_enum);
21428c2ecf20Sopenharmony_ci
21438c2ecf20Sopenharmony_ci/* InBound9 Source */ /* MX-A4 [6:4] */
21448c2ecf20Sopenharmony_cistatic const char * const rt5677_inbound9_src[] = {
21458c2ecf20Sopenharmony_ci	"STO1 ADC MIX R", "STO2 ADC MIX R", "STO3 ADC MIX R", "STO4 ADC MIX R",
21468c2ecf20Sopenharmony_ci	"MONO ADC MIX R", "DACR1 FS", "DAC1 FS"
21478c2ecf20Sopenharmony_ci};
21488c2ecf20Sopenharmony_ci
21498c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
21508c2ecf20Sopenharmony_ci	rt5677_inbound9_enum, RT5677_DSP_INB_CTRL2,
21518c2ecf20Sopenharmony_ci	RT5677_IB9_SRC_SFT, rt5677_inbound9_src);
21528c2ecf20Sopenharmony_ci
21538c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_ib9_src_mux =
21548c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("InBound9 Source", rt5677_inbound9_enum);
21558c2ecf20Sopenharmony_ci
21568c2ecf20Sopenharmony_ci/* VAD Source */ /* MX-9F [6:4] */
21578c2ecf20Sopenharmony_cistatic const char * const rt5677_vad_src[] = {
21588c2ecf20Sopenharmony_ci	"STO1 ADC MIX L", "MONO ADC MIX L", "MONO ADC MIX R", "STO2 ADC MIX L",
21598c2ecf20Sopenharmony_ci	"STO3 ADC MIX L"
21608c2ecf20Sopenharmony_ci};
21618c2ecf20Sopenharmony_ci
21628c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
21638c2ecf20Sopenharmony_ci	rt5677_vad_enum, RT5677_VAD_CTRL4,
21648c2ecf20Sopenharmony_ci	RT5677_VAD_SRC_SFT, rt5677_vad_src);
21658c2ecf20Sopenharmony_ci
21668c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_vad_src_mux =
21678c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("VAD Source", rt5677_vad_enum);
21688c2ecf20Sopenharmony_ci
21698c2ecf20Sopenharmony_ci/* Sidetone Source */ /* MX-13 [11:9] */
21708c2ecf20Sopenharmony_cistatic const char * const rt5677_sidetone_src[] = {
21718c2ecf20Sopenharmony_ci	"DMIC1 L", "DMIC2 L", "DMIC3 L", "DMIC4 L", "ADC1", "ADC2"
21728c2ecf20Sopenharmony_ci};
21738c2ecf20Sopenharmony_ci
21748c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
21758c2ecf20Sopenharmony_ci	rt5677_sidetone_enum, RT5677_SIDETONE_CTRL,
21768c2ecf20Sopenharmony_ci	RT5677_ST_SEL_SFT, rt5677_sidetone_src);
21778c2ecf20Sopenharmony_ci
21788c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_sidetone_mux =
21798c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Sidetone Source", rt5677_sidetone_enum);
21808c2ecf20Sopenharmony_ci
21818c2ecf20Sopenharmony_ci/* DAC1/2 Source */ /* MX-15 [1:0] */
21828c2ecf20Sopenharmony_cistatic const char * const rt5677_dac12_src[] = {
21838c2ecf20Sopenharmony_ci	"STO1 DAC MIX", "MONO DAC MIX", "DD MIX1", "DD MIX2"
21848c2ecf20Sopenharmony_ci};
21858c2ecf20Sopenharmony_ci
21868c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
21878c2ecf20Sopenharmony_ci	rt5677_dac12_enum, RT5677_ANA_DAC1_2_3_SRC,
21888c2ecf20Sopenharmony_ci	RT5677_ANA_DAC1_2_SRC_SEL_SFT, rt5677_dac12_src);
21898c2ecf20Sopenharmony_ci
21908c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_dac12_mux =
21918c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Analog DAC1/2 Source", rt5677_dac12_enum);
21928c2ecf20Sopenharmony_ci
21938c2ecf20Sopenharmony_ci/* DAC3 Source */ /* MX-15 [5:4] */
21948c2ecf20Sopenharmony_cistatic const char * const rt5677_dac3_src[] = {
21958c2ecf20Sopenharmony_ci	"MONO DAC MIXL", "MONO DAC MIXR", "DD MIX1L", "DD MIX2L"
21968c2ecf20Sopenharmony_ci};
21978c2ecf20Sopenharmony_ci
21988c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
21998c2ecf20Sopenharmony_ci	rt5677_dac3_enum, RT5677_ANA_DAC1_2_3_SRC,
22008c2ecf20Sopenharmony_ci	RT5677_ANA_DAC3_SRC_SEL_SFT, rt5677_dac3_src);
22018c2ecf20Sopenharmony_ci
22028c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_dac3_mux =
22038c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("Analog DAC3 Source", rt5677_dac3_enum);
22048c2ecf20Sopenharmony_ci
22058c2ecf20Sopenharmony_ci/* PDM channel Source */ /* MX-31 [13:12][9:8][5:4][1:0] */
22068c2ecf20Sopenharmony_cistatic const char * const rt5677_pdm_src[] = {
22078c2ecf20Sopenharmony_ci	"STO1 DAC MIX", "MONO DAC MIX", "DD MIX1", "DD MIX2"
22088c2ecf20Sopenharmony_ci};
22098c2ecf20Sopenharmony_ci
22108c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
22118c2ecf20Sopenharmony_ci	rt5677_pdm1_l_enum, RT5677_PDM_OUT_CTRL,
22128c2ecf20Sopenharmony_ci	RT5677_SEL_PDM1_L_SFT, rt5677_pdm_src);
22138c2ecf20Sopenharmony_ci
22148c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_pdm1_l_mux =
22158c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("PDM1 Source", rt5677_pdm1_l_enum);
22168c2ecf20Sopenharmony_ci
22178c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
22188c2ecf20Sopenharmony_ci	rt5677_pdm2_l_enum, RT5677_PDM_OUT_CTRL,
22198c2ecf20Sopenharmony_ci	RT5677_SEL_PDM2_L_SFT, rt5677_pdm_src);
22208c2ecf20Sopenharmony_ci
22218c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_pdm2_l_mux =
22228c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("PDM2 Source", rt5677_pdm2_l_enum);
22238c2ecf20Sopenharmony_ci
22248c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
22258c2ecf20Sopenharmony_ci	rt5677_pdm1_r_enum, RT5677_PDM_OUT_CTRL,
22268c2ecf20Sopenharmony_ci	RT5677_SEL_PDM1_R_SFT, rt5677_pdm_src);
22278c2ecf20Sopenharmony_ci
22288c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_pdm1_r_mux =
22298c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("PDM1 Source", rt5677_pdm1_r_enum);
22308c2ecf20Sopenharmony_ci
22318c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
22328c2ecf20Sopenharmony_ci	rt5677_pdm2_r_enum, RT5677_PDM_OUT_CTRL,
22338c2ecf20Sopenharmony_ci	RT5677_SEL_PDM2_R_SFT, rt5677_pdm_src);
22348c2ecf20Sopenharmony_ci
22358c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_pdm2_r_mux =
22368c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("PDM2 Source", rt5677_pdm2_r_enum);
22378c2ecf20Sopenharmony_ci
22388c2ecf20Sopenharmony_ci/* TDM IF1/2 SLB ADC1 Data Selection */ /* MX-3C MX-41 [5:4] MX-08 [1:0] */
22398c2ecf20Sopenharmony_cistatic const char * const rt5677_if12_adc1_src[] = {
22408c2ecf20Sopenharmony_ci	"STO1 ADC MIX", "OB01", "VAD ADC"
22418c2ecf20Sopenharmony_ci};
22428c2ecf20Sopenharmony_ci
22438c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
22448c2ecf20Sopenharmony_ci	rt5677_if1_adc1_enum, RT5677_TDM1_CTRL2,
22458c2ecf20Sopenharmony_ci	RT5677_IF1_ADC1_SFT, rt5677_if12_adc1_src);
22468c2ecf20Sopenharmony_ci
22478c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if1_adc1_mux =
22488c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF1 ADC1 Source", rt5677_if1_adc1_enum);
22498c2ecf20Sopenharmony_ci
22508c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
22518c2ecf20Sopenharmony_ci	rt5677_if2_adc1_enum, RT5677_TDM2_CTRL2,
22528c2ecf20Sopenharmony_ci	RT5677_IF2_ADC1_SFT, rt5677_if12_adc1_src);
22538c2ecf20Sopenharmony_ci
22548c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if2_adc1_mux =
22558c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF2 ADC1 Source", rt5677_if2_adc1_enum);
22568c2ecf20Sopenharmony_ci
22578c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
22588c2ecf20Sopenharmony_ci	rt5677_slb_adc1_enum, RT5677_SLIMBUS_RX,
22598c2ecf20Sopenharmony_ci	RT5677_SLB_ADC1_SFT, rt5677_if12_adc1_src);
22608c2ecf20Sopenharmony_ci
22618c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_slb_adc1_mux =
22628c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("SLB ADC1 Source", rt5677_slb_adc1_enum);
22638c2ecf20Sopenharmony_ci
22648c2ecf20Sopenharmony_ci/* TDM IF1/2 SLB ADC2 Data Selection */ /* MX-3C MX-41 [7:6] MX-08 [3:2] */
22658c2ecf20Sopenharmony_cistatic const char * const rt5677_if12_adc2_src[] = {
22668c2ecf20Sopenharmony_ci	"STO2 ADC MIX", "OB23"
22678c2ecf20Sopenharmony_ci};
22688c2ecf20Sopenharmony_ci
22698c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
22708c2ecf20Sopenharmony_ci	rt5677_if1_adc2_enum, RT5677_TDM1_CTRL2,
22718c2ecf20Sopenharmony_ci	RT5677_IF1_ADC2_SFT, rt5677_if12_adc2_src);
22728c2ecf20Sopenharmony_ci
22738c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if1_adc2_mux =
22748c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF1 ADC2 Source", rt5677_if1_adc2_enum);
22758c2ecf20Sopenharmony_ci
22768c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
22778c2ecf20Sopenharmony_ci	rt5677_if2_adc2_enum, RT5677_TDM2_CTRL2,
22788c2ecf20Sopenharmony_ci	RT5677_IF2_ADC2_SFT, rt5677_if12_adc2_src);
22798c2ecf20Sopenharmony_ci
22808c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if2_adc2_mux =
22818c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF2 ADC2 Source", rt5677_if2_adc2_enum);
22828c2ecf20Sopenharmony_ci
22838c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
22848c2ecf20Sopenharmony_ci	rt5677_slb_adc2_enum, RT5677_SLIMBUS_RX,
22858c2ecf20Sopenharmony_ci	RT5677_SLB_ADC2_SFT, rt5677_if12_adc2_src);
22868c2ecf20Sopenharmony_ci
22878c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_slb_adc2_mux =
22888c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("SLB ADC2 Source", rt5677_slb_adc2_enum);
22898c2ecf20Sopenharmony_ci
22908c2ecf20Sopenharmony_ci/* TDM IF1/2 SLB ADC3 Data Selection */ /* MX-3C MX-41 [9:8] MX-08 [5:4] */
22918c2ecf20Sopenharmony_cistatic const char * const rt5677_if12_adc3_src[] = {
22928c2ecf20Sopenharmony_ci	"STO3 ADC MIX", "MONO ADC MIX", "OB45"
22938c2ecf20Sopenharmony_ci};
22948c2ecf20Sopenharmony_ci
22958c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
22968c2ecf20Sopenharmony_ci	rt5677_if1_adc3_enum, RT5677_TDM1_CTRL2,
22978c2ecf20Sopenharmony_ci	RT5677_IF1_ADC3_SFT, rt5677_if12_adc3_src);
22988c2ecf20Sopenharmony_ci
22998c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if1_adc3_mux =
23008c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF1 ADC3 Source", rt5677_if1_adc3_enum);
23018c2ecf20Sopenharmony_ci
23028c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
23038c2ecf20Sopenharmony_ci	rt5677_if2_adc3_enum, RT5677_TDM2_CTRL2,
23048c2ecf20Sopenharmony_ci	RT5677_IF2_ADC3_SFT, rt5677_if12_adc3_src);
23058c2ecf20Sopenharmony_ci
23068c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if2_adc3_mux =
23078c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF2 ADC3 Source", rt5677_if2_adc3_enum);
23088c2ecf20Sopenharmony_ci
23098c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
23108c2ecf20Sopenharmony_ci	rt5677_slb_adc3_enum, RT5677_SLIMBUS_RX,
23118c2ecf20Sopenharmony_ci	RT5677_SLB_ADC3_SFT, rt5677_if12_adc3_src);
23128c2ecf20Sopenharmony_ci
23138c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_slb_adc3_mux =
23148c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("SLB ADC3 Source", rt5677_slb_adc3_enum);
23158c2ecf20Sopenharmony_ci
23168c2ecf20Sopenharmony_ci/* TDM IF1/2 SLB ADC4 Data Selection */ /* MX-3C MX-41 [11:10] MX-08 [7:6] */
23178c2ecf20Sopenharmony_cistatic const char * const rt5677_if12_adc4_src[] = {
23188c2ecf20Sopenharmony_ci	"STO4 ADC MIX", "OB67", "OB01"
23198c2ecf20Sopenharmony_ci};
23208c2ecf20Sopenharmony_ci
23218c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
23228c2ecf20Sopenharmony_ci	rt5677_if1_adc4_enum, RT5677_TDM1_CTRL2,
23238c2ecf20Sopenharmony_ci	RT5677_IF1_ADC4_SFT, rt5677_if12_adc4_src);
23248c2ecf20Sopenharmony_ci
23258c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if1_adc4_mux =
23268c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF1 ADC4 Source", rt5677_if1_adc4_enum);
23278c2ecf20Sopenharmony_ci
23288c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
23298c2ecf20Sopenharmony_ci	rt5677_if2_adc4_enum, RT5677_TDM2_CTRL2,
23308c2ecf20Sopenharmony_ci	RT5677_IF2_ADC4_SFT, rt5677_if12_adc4_src);
23318c2ecf20Sopenharmony_ci
23328c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if2_adc4_mux =
23338c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF2 ADC4 Source", rt5677_if2_adc4_enum);
23348c2ecf20Sopenharmony_ci
23358c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
23368c2ecf20Sopenharmony_ci	rt5677_slb_adc4_enum, RT5677_SLIMBUS_RX,
23378c2ecf20Sopenharmony_ci	RT5677_SLB_ADC4_SFT, rt5677_if12_adc4_src);
23388c2ecf20Sopenharmony_ci
23398c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_slb_adc4_mux =
23408c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("SLB ADC4 Source", rt5677_slb_adc4_enum);
23418c2ecf20Sopenharmony_ci
23428c2ecf20Sopenharmony_ci/* Interface3/4 ADC Data Input */ /* MX-2F [3:0] MX-30 [7:4] */
23438c2ecf20Sopenharmony_cistatic const char * const rt5677_if34_adc_src[] = {
23448c2ecf20Sopenharmony_ci	"STO1 ADC MIX", "STO2 ADC MIX", "STO3 ADC MIX", "STO4 ADC MIX",
23458c2ecf20Sopenharmony_ci	"MONO ADC MIX", "OB01", "OB23", "VAD ADC"
23468c2ecf20Sopenharmony_ci};
23478c2ecf20Sopenharmony_ci
23488c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
23498c2ecf20Sopenharmony_ci	rt5677_if3_adc_enum, RT5677_IF3_DATA,
23508c2ecf20Sopenharmony_ci	RT5677_IF3_ADC_IN_SFT, rt5677_if34_adc_src);
23518c2ecf20Sopenharmony_ci
23528c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if3_adc_mux =
23538c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF3 ADC Source", rt5677_if3_adc_enum);
23548c2ecf20Sopenharmony_ci
23558c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
23568c2ecf20Sopenharmony_ci	rt5677_if4_adc_enum, RT5677_IF4_DATA,
23578c2ecf20Sopenharmony_ci	RT5677_IF4_ADC_IN_SFT, rt5677_if34_adc_src);
23588c2ecf20Sopenharmony_ci
23598c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if4_adc_mux =
23608c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF4 ADC Source", rt5677_if4_adc_enum);
23618c2ecf20Sopenharmony_ci
23628c2ecf20Sopenharmony_ci/* TDM IF1/2 ADC Data Selection */ /* MX-3B MX-40 [7:6][5:4][3:2][1:0] */
23638c2ecf20Sopenharmony_cistatic const char * const rt5677_if12_adc_swap_src[] = {
23648c2ecf20Sopenharmony_ci	"L/R", "R/L", "L/L", "R/R"
23658c2ecf20Sopenharmony_ci};
23668c2ecf20Sopenharmony_ci
23678c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
23688c2ecf20Sopenharmony_ci	rt5677_if1_adc1_swap_enum, RT5677_TDM1_CTRL1,
23698c2ecf20Sopenharmony_ci	RT5677_IF1_ADC1_SWAP_SFT, rt5677_if12_adc_swap_src);
23708c2ecf20Sopenharmony_ci
23718c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if1_adc1_swap_mux =
23728c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF1 ADC1 Swap Source", rt5677_if1_adc1_swap_enum);
23738c2ecf20Sopenharmony_ci
23748c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
23758c2ecf20Sopenharmony_ci	rt5677_if1_adc2_swap_enum, RT5677_TDM1_CTRL1,
23768c2ecf20Sopenharmony_ci	RT5677_IF1_ADC2_SWAP_SFT, rt5677_if12_adc_swap_src);
23778c2ecf20Sopenharmony_ci
23788c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if1_adc2_swap_mux =
23798c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF1 ADC2 Swap Source", rt5677_if1_adc2_swap_enum);
23808c2ecf20Sopenharmony_ci
23818c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
23828c2ecf20Sopenharmony_ci	rt5677_if1_adc3_swap_enum, RT5677_TDM1_CTRL1,
23838c2ecf20Sopenharmony_ci	RT5677_IF1_ADC3_SWAP_SFT, rt5677_if12_adc_swap_src);
23848c2ecf20Sopenharmony_ci
23858c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if1_adc3_swap_mux =
23868c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF1 ADC3 Swap Source", rt5677_if1_adc3_swap_enum);
23878c2ecf20Sopenharmony_ci
23888c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
23898c2ecf20Sopenharmony_ci	rt5677_if1_adc4_swap_enum, RT5677_TDM1_CTRL1,
23908c2ecf20Sopenharmony_ci	RT5677_IF1_ADC4_SWAP_SFT, rt5677_if12_adc_swap_src);
23918c2ecf20Sopenharmony_ci
23928c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if1_adc4_swap_mux =
23938c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF1 ADC4 Swap Source", rt5677_if1_adc4_swap_enum);
23948c2ecf20Sopenharmony_ci
23958c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
23968c2ecf20Sopenharmony_ci	rt5677_if2_adc1_swap_enum, RT5677_TDM2_CTRL1,
23978c2ecf20Sopenharmony_ci	RT5677_IF1_ADC2_SWAP_SFT, rt5677_if12_adc_swap_src);
23988c2ecf20Sopenharmony_ci
23998c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if2_adc1_swap_mux =
24008c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF1 ADC2 Swap Source", rt5677_if2_adc1_swap_enum);
24018c2ecf20Sopenharmony_ci
24028c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
24038c2ecf20Sopenharmony_ci	rt5677_if2_adc2_swap_enum, RT5677_TDM2_CTRL1,
24048c2ecf20Sopenharmony_ci	RT5677_IF2_ADC2_SWAP_SFT, rt5677_if12_adc_swap_src);
24058c2ecf20Sopenharmony_ci
24068c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if2_adc2_swap_mux =
24078c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF2 ADC2 Swap Source", rt5677_if2_adc2_swap_enum);
24088c2ecf20Sopenharmony_ci
24098c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
24108c2ecf20Sopenharmony_ci	rt5677_if2_adc3_swap_enum, RT5677_TDM2_CTRL1,
24118c2ecf20Sopenharmony_ci	RT5677_IF2_ADC3_SWAP_SFT, rt5677_if12_adc_swap_src);
24128c2ecf20Sopenharmony_ci
24138c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if2_adc3_swap_mux =
24148c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF2 ADC3 Swap Source", rt5677_if2_adc3_swap_enum);
24158c2ecf20Sopenharmony_ci
24168c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
24178c2ecf20Sopenharmony_ci	rt5677_if2_adc4_swap_enum, RT5677_TDM2_CTRL1,
24188c2ecf20Sopenharmony_ci	RT5677_IF2_ADC4_SWAP_SFT, rt5677_if12_adc_swap_src);
24198c2ecf20Sopenharmony_ci
24208c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if2_adc4_swap_mux =
24218c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF2 ADC4 Swap Source", rt5677_if2_adc4_swap_enum);
24228c2ecf20Sopenharmony_ci
24238c2ecf20Sopenharmony_ci/* TDM IF1 ADC Data Selection */ /* MX-3C [2:0] */
24248c2ecf20Sopenharmony_cistatic const char * const rt5677_if1_adc_tdm_swap_src[] = {
24258c2ecf20Sopenharmony_ci	"1/2/3/4", "2/1/3/4", "2/3/1/4", "4/1/2/3", "1/3/2/4", "1/4/2/3",
24268c2ecf20Sopenharmony_ci	"3/1/2/4", "3/4/1/2"
24278c2ecf20Sopenharmony_ci};
24288c2ecf20Sopenharmony_ci
24298c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
24308c2ecf20Sopenharmony_ci	rt5677_if1_adc_tdm_swap_enum, RT5677_TDM1_CTRL2,
24318c2ecf20Sopenharmony_ci	RT5677_IF1_ADC_CTRL_SFT, rt5677_if1_adc_tdm_swap_src);
24328c2ecf20Sopenharmony_ci
24338c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if1_adc_tdm_swap_mux =
24348c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF1 ADC TDM Swap Source", rt5677_if1_adc_tdm_swap_enum);
24358c2ecf20Sopenharmony_ci
24368c2ecf20Sopenharmony_ci/* TDM IF2 ADC Data Selection */ /* MX-41[2:0] */
24378c2ecf20Sopenharmony_cistatic const char * const rt5677_if2_adc_tdm_swap_src[] = {
24388c2ecf20Sopenharmony_ci	"1/2/3/4", "2/1/3/4", "3/1/2/4", "4/1/2/3", "1/3/2/4", "1/4/2/3",
24398c2ecf20Sopenharmony_ci	"2/3/1/4", "3/4/1/2"
24408c2ecf20Sopenharmony_ci};
24418c2ecf20Sopenharmony_ci
24428c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
24438c2ecf20Sopenharmony_ci	rt5677_if2_adc_tdm_swap_enum, RT5677_TDM2_CTRL2,
24448c2ecf20Sopenharmony_ci	RT5677_IF2_ADC_CTRL_SFT, rt5677_if2_adc_tdm_swap_src);
24458c2ecf20Sopenharmony_ci
24468c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if2_adc_tdm_swap_mux =
24478c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF2 ADC TDM Swap Source", rt5677_if2_adc_tdm_swap_enum);
24488c2ecf20Sopenharmony_ci
24498c2ecf20Sopenharmony_ci/* TDM IF1/2 DAC Data Selection */ /* MX-3E[14:12][10:8][6:4][2:0]
24508c2ecf20Sopenharmony_ci					MX-3F[14:12][10:8][6:4][2:0]
24518c2ecf20Sopenharmony_ci					MX-43[14:12][10:8][6:4][2:0]
24528c2ecf20Sopenharmony_ci					MX-44[14:12][10:8][6:4][2:0] */
24538c2ecf20Sopenharmony_cistatic const char * const rt5677_if12_dac_tdm_sel_src[] = {
24548c2ecf20Sopenharmony_ci	"Slot0", "Slot1", "Slot2", "Slot3", "Slot4", "Slot5", "Slot6", "Slot7"
24558c2ecf20Sopenharmony_ci};
24568c2ecf20Sopenharmony_ci
24578c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
24588c2ecf20Sopenharmony_ci	rt5677_if1_dac0_tdm_sel_enum, RT5677_TDM1_CTRL4,
24598c2ecf20Sopenharmony_ci	RT5677_IF1_DAC0_SFT, rt5677_if12_dac_tdm_sel_src);
24608c2ecf20Sopenharmony_ci
24618c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if1_dac0_tdm_sel_mux =
24628c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF1 DAC0 TDM Source", rt5677_if1_dac0_tdm_sel_enum);
24638c2ecf20Sopenharmony_ci
24648c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
24658c2ecf20Sopenharmony_ci	rt5677_if1_dac1_tdm_sel_enum, RT5677_TDM1_CTRL4,
24668c2ecf20Sopenharmony_ci	RT5677_IF1_DAC1_SFT, rt5677_if12_dac_tdm_sel_src);
24678c2ecf20Sopenharmony_ci
24688c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if1_dac1_tdm_sel_mux =
24698c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF1 DAC1 TDM Source", rt5677_if1_dac1_tdm_sel_enum);
24708c2ecf20Sopenharmony_ci
24718c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
24728c2ecf20Sopenharmony_ci	rt5677_if1_dac2_tdm_sel_enum, RT5677_TDM1_CTRL4,
24738c2ecf20Sopenharmony_ci	RT5677_IF1_DAC2_SFT, rt5677_if12_dac_tdm_sel_src);
24748c2ecf20Sopenharmony_ci
24758c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if1_dac2_tdm_sel_mux =
24768c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF1 DAC2 TDM Source", rt5677_if1_dac2_tdm_sel_enum);
24778c2ecf20Sopenharmony_ci
24788c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
24798c2ecf20Sopenharmony_ci	rt5677_if1_dac3_tdm_sel_enum, RT5677_TDM1_CTRL4,
24808c2ecf20Sopenharmony_ci	RT5677_IF1_DAC3_SFT, rt5677_if12_dac_tdm_sel_src);
24818c2ecf20Sopenharmony_ci
24828c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if1_dac3_tdm_sel_mux =
24838c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF1 DAC3 TDM Source", rt5677_if1_dac3_tdm_sel_enum);
24848c2ecf20Sopenharmony_ci
24858c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
24868c2ecf20Sopenharmony_ci	rt5677_if1_dac4_tdm_sel_enum, RT5677_TDM1_CTRL5,
24878c2ecf20Sopenharmony_ci	RT5677_IF1_DAC4_SFT, rt5677_if12_dac_tdm_sel_src);
24888c2ecf20Sopenharmony_ci
24898c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if1_dac4_tdm_sel_mux =
24908c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF1 DAC4 TDM Source", rt5677_if1_dac4_tdm_sel_enum);
24918c2ecf20Sopenharmony_ci
24928c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
24938c2ecf20Sopenharmony_ci	rt5677_if1_dac5_tdm_sel_enum, RT5677_TDM1_CTRL5,
24948c2ecf20Sopenharmony_ci	RT5677_IF1_DAC5_SFT, rt5677_if12_dac_tdm_sel_src);
24958c2ecf20Sopenharmony_ci
24968c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if1_dac5_tdm_sel_mux =
24978c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF1 DAC5 TDM Source", rt5677_if1_dac5_tdm_sel_enum);
24988c2ecf20Sopenharmony_ci
24998c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
25008c2ecf20Sopenharmony_ci	rt5677_if1_dac6_tdm_sel_enum, RT5677_TDM1_CTRL5,
25018c2ecf20Sopenharmony_ci	RT5677_IF1_DAC6_SFT, rt5677_if12_dac_tdm_sel_src);
25028c2ecf20Sopenharmony_ci
25038c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if1_dac6_tdm_sel_mux =
25048c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF1 DAC6 TDM Source", rt5677_if1_dac6_tdm_sel_enum);
25058c2ecf20Sopenharmony_ci
25068c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
25078c2ecf20Sopenharmony_ci	rt5677_if1_dac7_tdm_sel_enum, RT5677_TDM1_CTRL5,
25088c2ecf20Sopenharmony_ci	RT5677_IF1_DAC7_SFT, rt5677_if12_dac_tdm_sel_src);
25098c2ecf20Sopenharmony_ci
25108c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if1_dac7_tdm_sel_mux =
25118c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF1 DAC7 TDM Source", rt5677_if1_dac7_tdm_sel_enum);
25128c2ecf20Sopenharmony_ci
25138c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
25148c2ecf20Sopenharmony_ci	rt5677_if2_dac0_tdm_sel_enum, RT5677_TDM2_CTRL4,
25158c2ecf20Sopenharmony_ci	RT5677_IF2_DAC0_SFT, rt5677_if12_dac_tdm_sel_src);
25168c2ecf20Sopenharmony_ci
25178c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if2_dac0_tdm_sel_mux =
25188c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF2 DAC0 TDM Source", rt5677_if2_dac0_tdm_sel_enum);
25198c2ecf20Sopenharmony_ci
25208c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
25218c2ecf20Sopenharmony_ci	rt5677_if2_dac1_tdm_sel_enum, RT5677_TDM2_CTRL4,
25228c2ecf20Sopenharmony_ci	RT5677_IF2_DAC1_SFT, rt5677_if12_dac_tdm_sel_src);
25238c2ecf20Sopenharmony_ci
25248c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if2_dac1_tdm_sel_mux =
25258c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF2 DAC1 TDM Source", rt5677_if2_dac1_tdm_sel_enum);
25268c2ecf20Sopenharmony_ci
25278c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
25288c2ecf20Sopenharmony_ci	rt5677_if2_dac2_tdm_sel_enum, RT5677_TDM2_CTRL4,
25298c2ecf20Sopenharmony_ci	RT5677_IF2_DAC2_SFT, rt5677_if12_dac_tdm_sel_src);
25308c2ecf20Sopenharmony_ci
25318c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if2_dac2_tdm_sel_mux =
25328c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF2 DAC2 TDM Source", rt5677_if2_dac2_tdm_sel_enum);
25338c2ecf20Sopenharmony_ci
25348c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
25358c2ecf20Sopenharmony_ci	rt5677_if2_dac3_tdm_sel_enum, RT5677_TDM2_CTRL4,
25368c2ecf20Sopenharmony_ci	RT5677_IF2_DAC3_SFT, rt5677_if12_dac_tdm_sel_src);
25378c2ecf20Sopenharmony_ci
25388c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if2_dac3_tdm_sel_mux =
25398c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF2 DAC3 TDM Source", rt5677_if2_dac3_tdm_sel_enum);
25408c2ecf20Sopenharmony_ci
25418c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
25428c2ecf20Sopenharmony_ci	rt5677_if2_dac4_tdm_sel_enum, RT5677_TDM2_CTRL5,
25438c2ecf20Sopenharmony_ci	RT5677_IF2_DAC4_SFT, rt5677_if12_dac_tdm_sel_src);
25448c2ecf20Sopenharmony_ci
25458c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if2_dac4_tdm_sel_mux =
25468c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF2 DAC4 TDM Source", rt5677_if2_dac4_tdm_sel_enum);
25478c2ecf20Sopenharmony_ci
25488c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
25498c2ecf20Sopenharmony_ci	rt5677_if2_dac5_tdm_sel_enum, RT5677_TDM2_CTRL5,
25508c2ecf20Sopenharmony_ci	RT5677_IF2_DAC5_SFT, rt5677_if12_dac_tdm_sel_src);
25518c2ecf20Sopenharmony_ci
25528c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if2_dac5_tdm_sel_mux =
25538c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF2 DAC5 TDM Source", rt5677_if2_dac5_tdm_sel_enum);
25548c2ecf20Sopenharmony_ci
25558c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
25568c2ecf20Sopenharmony_ci	rt5677_if2_dac6_tdm_sel_enum, RT5677_TDM2_CTRL5,
25578c2ecf20Sopenharmony_ci	RT5677_IF2_DAC6_SFT, rt5677_if12_dac_tdm_sel_src);
25588c2ecf20Sopenharmony_ci
25598c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if2_dac6_tdm_sel_mux =
25608c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF2 DAC6 TDM Source", rt5677_if2_dac6_tdm_sel_enum);
25618c2ecf20Sopenharmony_ci
25628c2ecf20Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(
25638c2ecf20Sopenharmony_ci	rt5677_if2_dac7_tdm_sel_enum, RT5677_TDM2_CTRL5,
25648c2ecf20Sopenharmony_ci	RT5677_IF2_DAC7_SFT, rt5677_if12_dac_tdm_sel_src);
25658c2ecf20Sopenharmony_ci
25668c2ecf20Sopenharmony_cistatic const struct snd_kcontrol_new rt5677_if2_dac7_tdm_sel_mux =
25678c2ecf20Sopenharmony_ci	SOC_DAPM_ENUM("IF2 DAC7 TDM Source", rt5677_if2_dac7_tdm_sel_enum);
25688c2ecf20Sopenharmony_ci
25698c2ecf20Sopenharmony_cistatic int rt5677_bst1_event(struct snd_soc_dapm_widget *w,
25708c2ecf20Sopenharmony_ci	struct snd_kcontrol *kcontrol, int event)
25718c2ecf20Sopenharmony_ci{
25728c2ecf20Sopenharmony_ci	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
25738c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
25748c2ecf20Sopenharmony_ci
25758c2ecf20Sopenharmony_ci	switch (event) {
25768c2ecf20Sopenharmony_ci	case SND_SOC_DAPM_POST_PMU:
25778c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2,
25788c2ecf20Sopenharmony_ci			RT5677_PWR_BST1_P, RT5677_PWR_BST1_P);
25798c2ecf20Sopenharmony_ci		break;
25808c2ecf20Sopenharmony_ci
25818c2ecf20Sopenharmony_ci	case SND_SOC_DAPM_PRE_PMD:
25828c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2,
25838c2ecf20Sopenharmony_ci			RT5677_PWR_BST1_P, 0);
25848c2ecf20Sopenharmony_ci		break;
25858c2ecf20Sopenharmony_ci
25868c2ecf20Sopenharmony_ci	default:
25878c2ecf20Sopenharmony_ci		return 0;
25888c2ecf20Sopenharmony_ci	}
25898c2ecf20Sopenharmony_ci
25908c2ecf20Sopenharmony_ci	return 0;
25918c2ecf20Sopenharmony_ci}
25928c2ecf20Sopenharmony_ci
25938c2ecf20Sopenharmony_cistatic int rt5677_bst2_event(struct snd_soc_dapm_widget *w,
25948c2ecf20Sopenharmony_ci	struct snd_kcontrol *kcontrol, int event)
25958c2ecf20Sopenharmony_ci{
25968c2ecf20Sopenharmony_ci	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
25978c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
25988c2ecf20Sopenharmony_ci
25998c2ecf20Sopenharmony_ci	switch (event) {
26008c2ecf20Sopenharmony_ci	case SND_SOC_DAPM_POST_PMU:
26018c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2,
26028c2ecf20Sopenharmony_ci			RT5677_PWR_BST2_P, RT5677_PWR_BST2_P);
26038c2ecf20Sopenharmony_ci		break;
26048c2ecf20Sopenharmony_ci
26058c2ecf20Sopenharmony_ci	case SND_SOC_DAPM_PRE_PMD:
26068c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2,
26078c2ecf20Sopenharmony_ci			RT5677_PWR_BST2_P, 0);
26088c2ecf20Sopenharmony_ci		break;
26098c2ecf20Sopenharmony_ci
26108c2ecf20Sopenharmony_ci	default:
26118c2ecf20Sopenharmony_ci		return 0;
26128c2ecf20Sopenharmony_ci	}
26138c2ecf20Sopenharmony_ci
26148c2ecf20Sopenharmony_ci	return 0;
26158c2ecf20Sopenharmony_ci}
26168c2ecf20Sopenharmony_ci
26178c2ecf20Sopenharmony_cistatic int rt5677_set_pll1_event(struct snd_soc_dapm_widget *w,
26188c2ecf20Sopenharmony_ci	struct snd_kcontrol *kcontrol, int event)
26198c2ecf20Sopenharmony_ci{
26208c2ecf20Sopenharmony_ci	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
26218c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
26228c2ecf20Sopenharmony_ci
26238c2ecf20Sopenharmony_ci	switch (event) {
26248c2ecf20Sopenharmony_ci	case SND_SOC_DAPM_PRE_PMU:
26258c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_PLL1_CTRL2, 0x2, 0x2);
26268c2ecf20Sopenharmony_ci		break;
26278c2ecf20Sopenharmony_ci
26288c2ecf20Sopenharmony_ci	case SND_SOC_DAPM_POST_PMU:
26298c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_PLL1_CTRL2, 0x2, 0x0);
26308c2ecf20Sopenharmony_ci		break;
26318c2ecf20Sopenharmony_ci
26328c2ecf20Sopenharmony_ci	default:
26338c2ecf20Sopenharmony_ci		return 0;
26348c2ecf20Sopenharmony_ci	}
26358c2ecf20Sopenharmony_ci
26368c2ecf20Sopenharmony_ci	return 0;
26378c2ecf20Sopenharmony_ci}
26388c2ecf20Sopenharmony_ci
26398c2ecf20Sopenharmony_cistatic int rt5677_set_pll2_event(struct snd_soc_dapm_widget *w,
26408c2ecf20Sopenharmony_ci	struct snd_kcontrol *kcontrol, int event)
26418c2ecf20Sopenharmony_ci{
26428c2ecf20Sopenharmony_ci	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
26438c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
26448c2ecf20Sopenharmony_ci
26458c2ecf20Sopenharmony_ci	switch (event) {
26468c2ecf20Sopenharmony_ci	case SND_SOC_DAPM_PRE_PMU:
26478c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_PLL2_CTRL2, 0x2, 0x2);
26488c2ecf20Sopenharmony_ci		break;
26498c2ecf20Sopenharmony_ci
26508c2ecf20Sopenharmony_ci	case SND_SOC_DAPM_POST_PMU:
26518c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_PLL2_CTRL2, 0x2, 0x0);
26528c2ecf20Sopenharmony_ci		break;
26538c2ecf20Sopenharmony_ci
26548c2ecf20Sopenharmony_ci	default:
26558c2ecf20Sopenharmony_ci		return 0;
26568c2ecf20Sopenharmony_ci	}
26578c2ecf20Sopenharmony_ci
26588c2ecf20Sopenharmony_ci	return 0;
26598c2ecf20Sopenharmony_ci}
26608c2ecf20Sopenharmony_ci
26618c2ecf20Sopenharmony_cistatic int rt5677_set_micbias1_event(struct snd_soc_dapm_widget *w,
26628c2ecf20Sopenharmony_ci	struct snd_kcontrol *kcontrol, int event)
26638c2ecf20Sopenharmony_ci{
26648c2ecf20Sopenharmony_ci	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
26658c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
26668c2ecf20Sopenharmony_ci
26678c2ecf20Sopenharmony_ci	switch (event) {
26688c2ecf20Sopenharmony_ci	case SND_SOC_DAPM_POST_PMU:
26698c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2,
26708c2ecf20Sopenharmony_ci			RT5677_PWR_CLK_MB1 | RT5677_PWR_PP_MB1 |
26718c2ecf20Sopenharmony_ci			RT5677_PWR_CLK_MB, RT5677_PWR_CLK_MB1 |
26728c2ecf20Sopenharmony_ci			RT5677_PWR_PP_MB1 | RT5677_PWR_CLK_MB);
26738c2ecf20Sopenharmony_ci		break;
26748c2ecf20Sopenharmony_ci
26758c2ecf20Sopenharmony_ci	case SND_SOC_DAPM_PRE_PMD:
26768c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2,
26778c2ecf20Sopenharmony_ci			RT5677_PWR_CLK_MB1 | RT5677_PWR_PP_MB1 |
26788c2ecf20Sopenharmony_ci			RT5677_PWR_CLK_MB, 0);
26798c2ecf20Sopenharmony_ci		break;
26808c2ecf20Sopenharmony_ci
26818c2ecf20Sopenharmony_ci	default:
26828c2ecf20Sopenharmony_ci		return 0;
26838c2ecf20Sopenharmony_ci	}
26848c2ecf20Sopenharmony_ci
26858c2ecf20Sopenharmony_ci	return 0;
26868c2ecf20Sopenharmony_ci}
26878c2ecf20Sopenharmony_ci
26888c2ecf20Sopenharmony_cistatic int rt5677_if1_adc_tdm_event(struct snd_soc_dapm_widget *w,
26898c2ecf20Sopenharmony_ci	struct snd_kcontrol *kcontrol, int event)
26908c2ecf20Sopenharmony_ci{
26918c2ecf20Sopenharmony_ci	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
26928c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
26938c2ecf20Sopenharmony_ci	unsigned int value;
26948c2ecf20Sopenharmony_ci
26958c2ecf20Sopenharmony_ci	switch (event) {
26968c2ecf20Sopenharmony_ci	case SND_SOC_DAPM_PRE_PMU:
26978c2ecf20Sopenharmony_ci		regmap_read(rt5677->regmap, RT5677_TDM1_CTRL2, &value);
26988c2ecf20Sopenharmony_ci		if (value & RT5677_IF1_ADC_CTRL_MASK)
26998c2ecf20Sopenharmony_ci			regmap_update_bits(rt5677->regmap, RT5677_TDM1_CTRL1,
27008c2ecf20Sopenharmony_ci				RT5677_IF1_ADC_MODE_MASK,
27018c2ecf20Sopenharmony_ci				RT5677_IF1_ADC_MODE_TDM);
27028c2ecf20Sopenharmony_ci		break;
27038c2ecf20Sopenharmony_ci
27048c2ecf20Sopenharmony_ci	default:
27058c2ecf20Sopenharmony_ci		return 0;
27068c2ecf20Sopenharmony_ci	}
27078c2ecf20Sopenharmony_ci
27088c2ecf20Sopenharmony_ci	return 0;
27098c2ecf20Sopenharmony_ci}
27108c2ecf20Sopenharmony_ci
27118c2ecf20Sopenharmony_cistatic int rt5677_if2_adc_tdm_event(struct snd_soc_dapm_widget *w,
27128c2ecf20Sopenharmony_ci	struct snd_kcontrol *kcontrol, int event)
27138c2ecf20Sopenharmony_ci{
27148c2ecf20Sopenharmony_ci	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
27158c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
27168c2ecf20Sopenharmony_ci	unsigned int value;
27178c2ecf20Sopenharmony_ci
27188c2ecf20Sopenharmony_ci	switch (event) {
27198c2ecf20Sopenharmony_ci	case SND_SOC_DAPM_PRE_PMU:
27208c2ecf20Sopenharmony_ci		regmap_read(rt5677->regmap, RT5677_TDM2_CTRL2, &value);
27218c2ecf20Sopenharmony_ci		if (value & RT5677_IF2_ADC_CTRL_MASK)
27228c2ecf20Sopenharmony_ci			regmap_update_bits(rt5677->regmap, RT5677_TDM2_CTRL1,
27238c2ecf20Sopenharmony_ci				RT5677_IF2_ADC_MODE_MASK,
27248c2ecf20Sopenharmony_ci				RT5677_IF2_ADC_MODE_TDM);
27258c2ecf20Sopenharmony_ci		break;
27268c2ecf20Sopenharmony_ci
27278c2ecf20Sopenharmony_ci	default:
27288c2ecf20Sopenharmony_ci		return 0;
27298c2ecf20Sopenharmony_ci	}
27308c2ecf20Sopenharmony_ci
27318c2ecf20Sopenharmony_ci	return 0;
27328c2ecf20Sopenharmony_ci}
27338c2ecf20Sopenharmony_ci
27348c2ecf20Sopenharmony_cistatic int rt5677_vref_event(struct snd_soc_dapm_widget *w,
27358c2ecf20Sopenharmony_ci	struct snd_kcontrol *kcontrol, int event)
27368c2ecf20Sopenharmony_ci{
27378c2ecf20Sopenharmony_ci	struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
27388c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
27398c2ecf20Sopenharmony_ci
27408c2ecf20Sopenharmony_ci	switch (event) {
27418c2ecf20Sopenharmony_ci	case SND_SOC_DAPM_POST_PMU:
27428c2ecf20Sopenharmony_ci		if (snd_soc_component_get_bias_level(component) != SND_SOC_BIAS_ON &&
27438c2ecf20Sopenharmony_ci			!rt5677->is_vref_slow) {
27448c2ecf20Sopenharmony_ci			mdelay(20);
27458c2ecf20Sopenharmony_ci			regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG1,
27468c2ecf20Sopenharmony_ci				RT5677_PWR_FV1 | RT5677_PWR_FV2,
27478c2ecf20Sopenharmony_ci				RT5677_PWR_FV1 | RT5677_PWR_FV2);
27488c2ecf20Sopenharmony_ci			rt5677->is_vref_slow = true;
27498c2ecf20Sopenharmony_ci		}
27508c2ecf20Sopenharmony_ci		break;
27518c2ecf20Sopenharmony_ci
27528c2ecf20Sopenharmony_ci	default:
27538c2ecf20Sopenharmony_ci		return 0;
27548c2ecf20Sopenharmony_ci	}
27558c2ecf20Sopenharmony_ci
27568c2ecf20Sopenharmony_ci	return 0;
27578c2ecf20Sopenharmony_ci}
27588c2ecf20Sopenharmony_ci
27598c2ecf20Sopenharmony_cistatic int rt5677_filter_power_event(struct snd_soc_dapm_widget *w,
27608c2ecf20Sopenharmony_ci	struct snd_kcontrol *kcontrol, int event)
27618c2ecf20Sopenharmony_ci{
27628c2ecf20Sopenharmony_ci	switch (event) {
27638c2ecf20Sopenharmony_ci	case SND_SOC_DAPM_POST_PMU:
27648c2ecf20Sopenharmony_ci		msleep(50);
27658c2ecf20Sopenharmony_ci		break;
27668c2ecf20Sopenharmony_ci
27678c2ecf20Sopenharmony_ci	default:
27688c2ecf20Sopenharmony_ci		return 0;
27698c2ecf20Sopenharmony_ci	}
27708c2ecf20Sopenharmony_ci
27718c2ecf20Sopenharmony_ci	return 0;
27728c2ecf20Sopenharmony_ci}
27738c2ecf20Sopenharmony_ci
27748c2ecf20Sopenharmony_cistatic const struct snd_soc_dapm_widget rt5677_dapm_widgets[] = {
27758c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("PLL1", RT5677_PWR_ANLG2, RT5677_PWR_PLL1_BIT,
27768c2ecf20Sopenharmony_ci		0, rt5677_set_pll1_event, SND_SOC_DAPM_PRE_PMU |
27778c2ecf20Sopenharmony_ci		SND_SOC_DAPM_POST_PMU),
27788c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("PLL2", RT5677_PWR_ANLG2, RT5677_PWR_PLL2_BIT,
27798c2ecf20Sopenharmony_ci		0, rt5677_set_pll2_event, SND_SOC_DAPM_PRE_PMU |
27808c2ecf20Sopenharmony_ci		SND_SOC_DAPM_POST_PMU),
27818c2ecf20Sopenharmony_ci
27828c2ecf20Sopenharmony_ci	/* ASRC */
27838c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("I2S1 ASRC", 1, RT5677_ASRC_1, 0, 0, NULL, 0),
27848c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("I2S2 ASRC", 1, RT5677_ASRC_1, 1, 0, NULL, 0),
27858c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("I2S3 ASRC", 1, RT5677_ASRC_1, 2, 0, NULL, 0),
27868c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("I2S4 ASRC", 1, RT5677_ASRC_1, 3, 0, NULL, 0),
27878c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("DAC STO ASRC", 1, RT5677_ASRC_2, 14, 0,
27888c2ecf20Sopenharmony_ci		rt5677_filter_power_event, SND_SOC_DAPM_POST_PMU),
27898c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("DAC MONO2 L ASRC", 1, RT5677_ASRC_2, 13, 0, NULL,
27908c2ecf20Sopenharmony_ci		0),
27918c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("DAC MONO2 R ASRC", 1, RT5677_ASRC_2, 12, 0, NULL,
27928c2ecf20Sopenharmony_ci		0),
27938c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("DAC MONO3 L ASRC", 1, RT5677_ASRC_1, 15, 0, NULL,
27948c2ecf20Sopenharmony_ci		0),
27958c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("DAC MONO3 R ASRC", 1, RT5677_ASRC_1, 14, 0, NULL,
27968c2ecf20Sopenharmony_ci		0),
27978c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("DAC MONO4 L ASRC", 1, RT5677_ASRC_1, 13, 0, NULL,
27988c2ecf20Sopenharmony_ci		0),
27998c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("DAC MONO4 R ASRC", 1, RT5677_ASRC_1, 12, 0, NULL,
28008c2ecf20Sopenharmony_ci		0),
28018c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("DMIC STO1 ASRC", 1, RT5677_ASRC_2, 11, 0, NULL,
28028c2ecf20Sopenharmony_ci		0),
28038c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("DMIC STO2 ASRC", 1, RT5677_ASRC_2, 10, 0, NULL,
28048c2ecf20Sopenharmony_ci		0),
28058c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("DMIC STO3 ASRC", 1, RT5677_ASRC_2, 9, 0, NULL,
28068c2ecf20Sopenharmony_ci		0),
28078c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("DMIC STO4 ASRC", 1, RT5677_ASRC_2, 8, 0, NULL,
28088c2ecf20Sopenharmony_ci		0),
28098c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("DMIC MONO L ASRC", 1, RT5677_ASRC_2, 7, 0, NULL,
28108c2ecf20Sopenharmony_ci		0),
28118c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("DMIC MONO R ASRC", 1, RT5677_ASRC_2, 6, 0, NULL,
28128c2ecf20Sopenharmony_ci		0),
28138c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("ADC STO1 ASRC", 1, RT5677_ASRC_2, 5, 0, NULL, 0),
28148c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("ADC STO2 ASRC", 1, RT5677_ASRC_2, 4, 0, NULL, 0),
28158c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("ADC STO3 ASRC", 1, RT5677_ASRC_2, 3, 0, NULL, 0),
28168c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("ADC STO4 ASRC", 1, RT5677_ASRC_2, 2, 0, NULL, 0),
28178c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("ADC MONO L ASRC", 1, RT5677_ASRC_2, 1, 0, NULL,
28188c2ecf20Sopenharmony_ci		0),
28198c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY_S("ADC MONO R ASRC", 1, RT5677_ASRC_2, 0, 0, NULL,
28208c2ecf20Sopenharmony_ci		0),
28218c2ecf20Sopenharmony_ci
28228c2ecf20Sopenharmony_ci	/* Input Side */
28238c2ecf20Sopenharmony_ci	/* micbias */
28248c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("MICBIAS1", RT5677_PWR_ANLG2, RT5677_PWR_MB1_BIT,
28258c2ecf20Sopenharmony_ci		0, rt5677_set_micbias1_event, SND_SOC_DAPM_PRE_PMD |
28268c2ecf20Sopenharmony_ci		SND_SOC_DAPM_POST_PMU),
28278c2ecf20Sopenharmony_ci
28288c2ecf20Sopenharmony_ci	/* Input Lines */
28298c2ecf20Sopenharmony_ci	SND_SOC_DAPM_INPUT("DMIC L1"),
28308c2ecf20Sopenharmony_ci	SND_SOC_DAPM_INPUT("DMIC R1"),
28318c2ecf20Sopenharmony_ci	SND_SOC_DAPM_INPUT("DMIC L2"),
28328c2ecf20Sopenharmony_ci	SND_SOC_DAPM_INPUT("DMIC R2"),
28338c2ecf20Sopenharmony_ci	SND_SOC_DAPM_INPUT("DMIC L3"),
28348c2ecf20Sopenharmony_ci	SND_SOC_DAPM_INPUT("DMIC R3"),
28358c2ecf20Sopenharmony_ci	SND_SOC_DAPM_INPUT("DMIC L4"),
28368c2ecf20Sopenharmony_ci	SND_SOC_DAPM_INPUT("DMIC R4"),
28378c2ecf20Sopenharmony_ci
28388c2ecf20Sopenharmony_ci	SND_SOC_DAPM_INPUT("IN1P"),
28398c2ecf20Sopenharmony_ci	SND_SOC_DAPM_INPUT("IN1N"),
28408c2ecf20Sopenharmony_ci	SND_SOC_DAPM_INPUT("IN2P"),
28418c2ecf20Sopenharmony_ci	SND_SOC_DAPM_INPUT("IN2N"),
28428c2ecf20Sopenharmony_ci
28438c2ecf20Sopenharmony_ci	SND_SOC_DAPM_INPUT("Haptic Generator"),
28448c2ecf20Sopenharmony_ci
28458c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("DMIC1", SND_SOC_NOPM, 0, 0, NULL, 0),
28468c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("DMIC2", SND_SOC_NOPM, 0, 0, NULL, 0),
28478c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("DMIC3", SND_SOC_NOPM, 0, 0, NULL, 0),
28488c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("DMIC4", SND_SOC_NOPM, 0, 0, NULL, 0),
28498c2ecf20Sopenharmony_ci
28508c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("DMIC1 power", RT5677_DMIC_CTRL1,
28518c2ecf20Sopenharmony_ci		RT5677_DMIC_1_EN_SFT, 0, NULL, 0),
28528c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("DMIC2 power", RT5677_DMIC_CTRL1,
28538c2ecf20Sopenharmony_ci		RT5677_DMIC_2_EN_SFT, 0, NULL, 0),
28548c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("DMIC3 power", RT5677_DMIC_CTRL1,
28558c2ecf20Sopenharmony_ci		RT5677_DMIC_3_EN_SFT, 0, NULL, 0),
28568c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("DMIC4 power", RT5677_DMIC_CTRL2,
28578c2ecf20Sopenharmony_ci		RT5677_DMIC_4_EN_SFT, 0, NULL, 0),
28588c2ecf20Sopenharmony_ci
28598c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("DMIC CLK", SND_SOC_NOPM, 0, 0,
28608c2ecf20Sopenharmony_ci		set_dmic_clk, SND_SOC_DAPM_PRE_PMU),
28618c2ecf20Sopenharmony_ci
28628c2ecf20Sopenharmony_ci	/* Boost */
28638c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA_E("BST1", RT5677_PWR_ANLG2,
28648c2ecf20Sopenharmony_ci		RT5677_PWR_BST1_BIT, 0, NULL, 0, rt5677_bst1_event,
28658c2ecf20Sopenharmony_ci		SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
28668c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA_E("BST2", RT5677_PWR_ANLG2,
28678c2ecf20Sopenharmony_ci		RT5677_PWR_BST2_BIT, 0, NULL, 0, rt5677_bst2_event,
28688c2ecf20Sopenharmony_ci		SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
28698c2ecf20Sopenharmony_ci
28708c2ecf20Sopenharmony_ci	/* ADCs */
28718c2ecf20Sopenharmony_ci	SND_SOC_DAPM_ADC("ADC 1", NULL, SND_SOC_NOPM,
28728c2ecf20Sopenharmony_ci		0, 0),
28738c2ecf20Sopenharmony_ci	SND_SOC_DAPM_ADC("ADC 2", NULL, SND_SOC_NOPM,
28748c2ecf20Sopenharmony_ci		0, 0),
28758c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("ADC 1_2", SND_SOC_NOPM, 0, 0, NULL, 0),
28768c2ecf20Sopenharmony_ci
28778c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("ADC 1 power", RT5677_PWR_DIG1,
28788c2ecf20Sopenharmony_ci		RT5677_PWR_ADC_L_BIT, 0, NULL, 0),
28798c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("ADC 2 power", RT5677_PWR_DIG1,
28808c2ecf20Sopenharmony_ci		RT5677_PWR_ADC_R_BIT, 0, NULL, 0),
28818c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("ADC1 clock", RT5677_PWR_DIG1,
28828c2ecf20Sopenharmony_ci		RT5677_PWR_ADCFED1_BIT, 0, NULL, 0),
28838c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("ADC2 clock", RT5677_PWR_DIG1,
28848c2ecf20Sopenharmony_ci		RT5677_PWR_ADCFED2_BIT, 0, NULL, 0),
28858c2ecf20Sopenharmony_ci
28868c2ecf20Sopenharmony_ci	/* ADC Mux */
28878c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Stereo1 DMIC Mux", SND_SOC_NOPM, 0, 0,
28888c2ecf20Sopenharmony_ci				&rt5677_sto1_dmic_mux),
28898c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Stereo1 ADC1 Mux", SND_SOC_NOPM, 0, 0,
28908c2ecf20Sopenharmony_ci				&rt5677_sto1_adc1_mux),
28918c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Stereo1 ADC2 Mux", SND_SOC_NOPM, 0, 0,
28928c2ecf20Sopenharmony_ci				&rt5677_sto1_adc2_mux),
28938c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Stereo2 DMIC Mux", SND_SOC_NOPM, 0, 0,
28948c2ecf20Sopenharmony_ci				&rt5677_sto2_dmic_mux),
28958c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Stereo2 ADC1 Mux", SND_SOC_NOPM, 0, 0,
28968c2ecf20Sopenharmony_ci				&rt5677_sto2_adc1_mux),
28978c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Stereo2 ADC2 Mux", SND_SOC_NOPM, 0, 0,
28988c2ecf20Sopenharmony_ci				&rt5677_sto2_adc2_mux),
28998c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Stereo2 ADC LR Mux", SND_SOC_NOPM, 0, 0,
29008c2ecf20Sopenharmony_ci				&rt5677_sto2_adc_lr_mux),
29018c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Stereo3 DMIC Mux", SND_SOC_NOPM, 0, 0,
29028c2ecf20Sopenharmony_ci				&rt5677_sto3_dmic_mux),
29038c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Stereo3 ADC1 Mux", SND_SOC_NOPM, 0, 0,
29048c2ecf20Sopenharmony_ci				&rt5677_sto3_adc1_mux),
29058c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Stereo3 ADC2 Mux", SND_SOC_NOPM, 0, 0,
29068c2ecf20Sopenharmony_ci				&rt5677_sto3_adc2_mux),
29078c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Stereo4 DMIC Mux", SND_SOC_NOPM, 0, 0,
29088c2ecf20Sopenharmony_ci				&rt5677_sto4_dmic_mux),
29098c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Stereo4 ADC1 Mux", SND_SOC_NOPM, 0, 0,
29108c2ecf20Sopenharmony_ci				&rt5677_sto4_adc1_mux),
29118c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Stereo4 ADC2 Mux", SND_SOC_NOPM, 0, 0,
29128c2ecf20Sopenharmony_ci				&rt5677_sto4_adc2_mux),
29138c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Mono DMIC L Mux", SND_SOC_NOPM, 0, 0,
29148c2ecf20Sopenharmony_ci				&rt5677_mono_dmic_l_mux),
29158c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Mono DMIC R Mux", SND_SOC_NOPM, 0, 0,
29168c2ecf20Sopenharmony_ci				&rt5677_mono_dmic_r_mux),
29178c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Mono ADC2 L Mux", SND_SOC_NOPM, 0, 0,
29188c2ecf20Sopenharmony_ci				&rt5677_mono_adc2_l_mux),
29198c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Mono ADC1 L Mux", SND_SOC_NOPM, 0, 0,
29208c2ecf20Sopenharmony_ci				&rt5677_mono_adc1_l_mux),
29218c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Mono ADC1 R Mux", SND_SOC_NOPM, 0, 0,
29228c2ecf20Sopenharmony_ci				&rt5677_mono_adc1_r_mux),
29238c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Mono ADC2 R Mux", SND_SOC_NOPM, 0, 0,
29248c2ecf20Sopenharmony_ci				&rt5677_mono_adc2_r_mux),
29258c2ecf20Sopenharmony_ci
29268c2ecf20Sopenharmony_ci	/* ADC Mixer */
29278c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("adc stereo1 filter", RT5677_PWR_DIG2,
29288c2ecf20Sopenharmony_ci		RT5677_PWR_ADC_S1F_BIT, 0, NULL, 0),
29298c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("adc stereo2 filter", RT5677_PWR_DIG2,
29308c2ecf20Sopenharmony_ci		RT5677_PWR_ADC_S2F_BIT, 0, NULL, 0),
29318c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("adc stereo3 filter", RT5677_PWR_DIG2,
29328c2ecf20Sopenharmony_ci		RT5677_PWR_ADC_S3F_BIT, 0, NULL, 0),
29338c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("adc stereo4 filter", RT5677_PWR_DIG2,
29348c2ecf20Sopenharmony_ci		RT5677_PWR_ADC_S4F_BIT, 0, NULL, 0),
29358c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("Sto1 ADC MIXL", SND_SOC_NOPM, 0, 0,
29368c2ecf20Sopenharmony_ci		rt5677_sto1_adc_l_mix, ARRAY_SIZE(rt5677_sto1_adc_l_mix)),
29378c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("Sto1 ADC MIXR", SND_SOC_NOPM, 0, 0,
29388c2ecf20Sopenharmony_ci		rt5677_sto1_adc_r_mix, ARRAY_SIZE(rt5677_sto1_adc_r_mix)),
29398c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("Sto2 ADC MIXL", SND_SOC_NOPM, 0, 0,
29408c2ecf20Sopenharmony_ci		rt5677_sto2_adc_l_mix, ARRAY_SIZE(rt5677_sto2_adc_l_mix)),
29418c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("Sto2 ADC MIXR", SND_SOC_NOPM, 0, 0,
29428c2ecf20Sopenharmony_ci		rt5677_sto2_adc_r_mix, ARRAY_SIZE(rt5677_sto2_adc_r_mix)),
29438c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("Sto3 ADC MIXL", SND_SOC_NOPM, 0, 0,
29448c2ecf20Sopenharmony_ci		rt5677_sto3_adc_l_mix, ARRAY_SIZE(rt5677_sto3_adc_l_mix)),
29458c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("Sto3 ADC MIXR", SND_SOC_NOPM, 0, 0,
29468c2ecf20Sopenharmony_ci		rt5677_sto3_adc_r_mix, ARRAY_SIZE(rt5677_sto3_adc_r_mix)),
29478c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("Sto4 ADC MIXL", SND_SOC_NOPM, 0, 0,
29488c2ecf20Sopenharmony_ci		rt5677_sto4_adc_l_mix, ARRAY_SIZE(rt5677_sto4_adc_l_mix)),
29498c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("Sto4 ADC MIXR", SND_SOC_NOPM, 0, 0,
29508c2ecf20Sopenharmony_ci		rt5677_sto4_adc_r_mix, ARRAY_SIZE(rt5677_sto4_adc_r_mix)),
29518c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("adc mono left filter", RT5677_PWR_DIG2,
29528c2ecf20Sopenharmony_ci		RT5677_PWR_ADC_MF_L_BIT, 0, NULL, 0),
29538c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("Mono ADC MIXL", SND_SOC_NOPM, 0, 0,
29548c2ecf20Sopenharmony_ci		rt5677_mono_adc_l_mix, ARRAY_SIZE(rt5677_mono_adc_l_mix)),
29558c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("adc mono right filter", RT5677_PWR_DIG2,
29568c2ecf20Sopenharmony_ci		RT5677_PWR_ADC_MF_R_BIT, 0, NULL, 0),
29578c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("Mono ADC MIXR", SND_SOC_NOPM, 0, 0,
29588c2ecf20Sopenharmony_ci		rt5677_mono_adc_r_mix, ARRAY_SIZE(rt5677_mono_adc_r_mix)),
29598c2ecf20Sopenharmony_ci
29608c2ecf20Sopenharmony_ci	/* ADC PGA */
29618c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("Stereo1 ADC MIXL", SND_SOC_NOPM, 0, 0, NULL, 0),
29628c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("Stereo1 ADC MIXR", SND_SOC_NOPM, 0, 0, NULL, 0),
29638c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("Stereo1 ADC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
29648c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("Stereo2 ADC MIXL", SND_SOC_NOPM, 0, 0, NULL, 0),
29658c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("Stereo2 ADC MIXR", SND_SOC_NOPM, 0, 0, NULL, 0),
29668c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("Stereo2 ADC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
29678c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("Stereo3 ADC MIXL", SND_SOC_NOPM, 0, 0, NULL, 0),
29688c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("Stereo3 ADC MIXR", SND_SOC_NOPM, 0, 0, NULL, 0),
29698c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("Stereo3 ADC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
29708c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("Stereo4 ADC MIXL", SND_SOC_NOPM, 0, 0, NULL, 0),
29718c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("Stereo4 ADC MIXR", SND_SOC_NOPM, 0, 0, NULL, 0),
29728c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("Stereo4 ADC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
29738c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("Sto2 ADC LR MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
29748c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("Mono ADC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
29758c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF1 ADC", SND_SOC_NOPM, 0, 0, NULL, 0),
29768c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF2 ADC", SND_SOC_NOPM, 0, 0, NULL, 0),
29778c2ecf20Sopenharmony_ci
29788c2ecf20Sopenharmony_ci	/* DSP */
29798c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IB9 Mux", SND_SOC_NOPM, 0, 0,
29808c2ecf20Sopenharmony_ci			&rt5677_ib9_src_mux),
29818c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IB8 Mux", SND_SOC_NOPM, 0, 0,
29828c2ecf20Sopenharmony_ci			&rt5677_ib8_src_mux),
29838c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IB7 Mux", SND_SOC_NOPM, 0, 0,
29848c2ecf20Sopenharmony_ci			&rt5677_ib7_src_mux),
29858c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IB6 Mux", SND_SOC_NOPM, 0, 0,
29868c2ecf20Sopenharmony_ci			&rt5677_ib6_src_mux),
29878c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IB45 Mux", SND_SOC_NOPM, 0, 0,
29888c2ecf20Sopenharmony_ci			&rt5677_ib45_src_mux),
29898c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IB23 Mux", SND_SOC_NOPM, 0, 0,
29908c2ecf20Sopenharmony_ci			&rt5677_ib23_src_mux),
29918c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IB01 Mux", SND_SOC_NOPM, 0, 0,
29928c2ecf20Sopenharmony_ci			&rt5677_ib01_src_mux),
29938c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IB45 Bypass Mux", SND_SOC_NOPM, 0, 0,
29948c2ecf20Sopenharmony_ci			&rt5677_ib45_bypass_src_mux),
29958c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IB23 Bypass Mux", SND_SOC_NOPM, 0, 0,
29968c2ecf20Sopenharmony_ci			&rt5677_ib23_bypass_src_mux),
29978c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IB01 Bypass Mux", SND_SOC_NOPM, 0, 0,
29988c2ecf20Sopenharmony_ci			&rt5677_ib01_bypass_src_mux),
29998c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("OB23 Bypass Mux", SND_SOC_NOPM, 0, 0,
30008c2ecf20Sopenharmony_ci			&rt5677_ob23_bypass_src_mux),
30018c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("OB01 Bypass Mux", SND_SOC_NOPM, 0, 0,
30028c2ecf20Sopenharmony_ci			&rt5677_ob01_bypass_src_mux),
30038c2ecf20Sopenharmony_ci
30048c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("OB45", SND_SOC_NOPM, 0, 0, NULL, 0),
30058c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("OB67", SND_SOC_NOPM, 0, 0, NULL, 0),
30068c2ecf20Sopenharmony_ci
30078c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("OutBound2", SND_SOC_NOPM, 0, 0, NULL, 0),
30088c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("OutBound3", SND_SOC_NOPM, 0, 0, NULL, 0),
30098c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("OutBound4", SND_SOC_NOPM, 0, 0, NULL, 0),
30108c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("OutBound5", SND_SOC_NOPM, 0, 0, NULL, 0),
30118c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("OutBound6", SND_SOC_NOPM, 0, 0, NULL, 0),
30128c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("OutBound7", SND_SOC_NOPM, 0, 0, NULL, 0),
30138c2ecf20Sopenharmony_ci
30148c2ecf20Sopenharmony_ci	/* Digital Interface */
30158c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("I2S1", RT5677_PWR_DIG1,
30168c2ecf20Sopenharmony_ci		RT5677_PWR_I2S1_BIT, 0, NULL, 0),
30178c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF1 DAC0", SND_SOC_NOPM, 0, 0, NULL, 0),
30188c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF1 DAC1", SND_SOC_NOPM, 0, 0, NULL, 0),
30198c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF1 DAC2", SND_SOC_NOPM, 0, 0, NULL, 0),
30208c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF1 DAC3", SND_SOC_NOPM, 0, 0, NULL, 0),
30218c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF1 DAC4", SND_SOC_NOPM, 0, 0, NULL, 0),
30228c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF1 DAC5", SND_SOC_NOPM, 0, 0, NULL, 0),
30238c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF1 DAC6", SND_SOC_NOPM, 0, 0, NULL, 0),
30248c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF1 DAC7", SND_SOC_NOPM, 0, 0, NULL, 0),
30258c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF1 DAC01", SND_SOC_NOPM, 0, 0, NULL, 0),
30268c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF1 DAC23", SND_SOC_NOPM, 0, 0, NULL, 0),
30278c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF1 DAC45", SND_SOC_NOPM, 0, 0, NULL, 0),
30288c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF1 DAC67", SND_SOC_NOPM, 0, 0, NULL, 0),
30298c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF1 ADC1", SND_SOC_NOPM, 0, 0, NULL, 0),
30308c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF1 ADC2", SND_SOC_NOPM, 0, 0, NULL, 0),
30318c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF1 ADC3", SND_SOC_NOPM, 0, 0, NULL, 0),
30328c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF1 ADC4", SND_SOC_NOPM, 0, 0, NULL, 0),
30338c2ecf20Sopenharmony_ci
30348c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("I2S2", RT5677_PWR_DIG1,
30358c2ecf20Sopenharmony_ci		RT5677_PWR_I2S2_BIT, 0, NULL, 0),
30368c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF2 DAC0", SND_SOC_NOPM, 0, 0, NULL, 0),
30378c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF2 DAC1", SND_SOC_NOPM, 0, 0, NULL, 0),
30388c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF2 DAC2", SND_SOC_NOPM, 0, 0, NULL, 0),
30398c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF2 DAC3", SND_SOC_NOPM, 0, 0, NULL, 0),
30408c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF2 DAC4", SND_SOC_NOPM, 0, 0, NULL, 0),
30418c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF2 DAC5", SND_SOC_NOPM, 0, 0, NULL, 0),
30428c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF2 DAC6", SND_SOC_NOPM, 0, 0, NULL, 0),
30438c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF2 DAC7", SND_SOC_NOPM, 0, 0, NULL, 0),
30448c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF2 DAC01", SND_SOC_NOPM, 0, 0, NULL, 0),
30458c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF2 DAC23", SND_SOC_NOPM, 0, 0, NULL, 0),
30468c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF2 DAC45", SND_SOC_NOPM, 0, 0, NULL, 0),
30478c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF2 DAC67", SND_SOC_NOPM, 0, 0, NULL, 0),
30488c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF2 ADC1", SND_SOC_NOPM, 0, 0, NULL, 0),
30498c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF2 ADC2", SND_SOC_NOPM, 0, 0, NULL, 0),
30508c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF2 ADC3", SND_SOC_NOPM, 0, 0, NULL, 0),
30518c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF2 ADC4", SND_SOC_NOPM, 0, 0, NULL, 0),
30528c2ecf20Sopenharmony_ci
30538c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("I2S3", RT5677_PWR_DIG1,
30548c2ecf20Sopenharmony_ci		RT5677_PWR_I2S3_BIT, 0, NULL, 0),
30558c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF3 DAC", SND_SOC_NOPM, 0, 0, NULL, 0),
30568c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF3 DAC L", SND_SOC_NOPM, 0, 0, NULL, 0),
30578c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF3 DAC R", SND_SOC_NOPM, 0, 0, NULL, 0),
30588c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF3 ADC", SND_SOC_NOPM, 0, 0, NULL, 0),
30598c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF3 ADC L", SND_SOC_NOPM, 0, 0, NULL, 0),
30608c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF3 ADC R", SND_SOC_NOPM, 0, 0, NULL, 0),
30618c2ecf20Sopenharmony_ci
30628c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("I2S4", RT5677_PWR_DIG1,
30638c2ecf20Sopenharmony_ci		RT5677_PWR_I2S4_BIT, 0, NULL, 0),
30648c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF4 DAC", SND_SOC_NOPM, 0, 0, NULL, 0),
30658c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF4 DAC L", SND_SOC_NOPM, 0, 0, NULL, 0),
30668c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF4 DAC R", SND_SOC_NOPM, 0, 0, NULL, 0),
30678c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF4 ADC", SND_SOC_NOPM, 0, 0, NULL, 0),
30688c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF4 ADC L", SND_SOC_NOPM, 0, 0, NULL, 0),
30698c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("IF4 ADC R", SND_SOC_NOPM, 0, 0, NULL, 0),
30708c2ecf20Sopenharmony_ci
30718c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("SLB", RT5677_PWR_DIG1,
30728c2ecf20Sopenharmony_ci		RT5677_PWR_SLB_BIT, 0, NULL, 0),
30738c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("SLB DAC0", SND_SOC_NOPM, 0, 0, NULL, 0),
30748c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("SLB DAC1", SND_SOC_NOPM, 0, 0, NULL, 0),
30758c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("SLB DAC2", SND_SOC_NOPM, 0, 0, NULL, 0),
30768c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("SLB DAC3", SND_SOC_NOPM, 0, 0, NULL, 0),
30778c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("SLB DAC4", SND_SOC_NOPM, 0, 0, NULL, 0),
30788c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("SLB DAC5", SND_SOC_NOPM, 0, 0, NULL, 0),
30798c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("SLB DAC6", SND_SOC_NOPM, 0, 0, NULL, 0),
30808c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("SLB DAC7", SND_SOC_NOPM, 0, 0, NULL, 0),
30818c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("SLB DAC01", SND_SOC_NOPM, 0, 0, NULL, 0),
30828c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("SLB DAC23", SND_SOC_NOPM, 0, 0, NULL, 0),
30838c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("SLB DAC45", SND_SOC_NOPM, 0, 0, NULL, 0),
30848c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("SLB DAC67", SND_SOC_NOPM, 0, 0, NULL, 0),
30858c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("SLB ADC1", SND_SOC_NOPM, 0, 0, NULL, 0),
30868c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("SLB ADC2", SND_SOC_NOPM, 0, 0, NULL, 0),
30878c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("SLB ADC3", SND_SOC_NOPM, 0, 0, NULL, 0),
30888c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("SLB ADC4", SND_SOC_NOPM, 0, 0, NULL, 0),
30898c2ecf20Sopenharmony_ci
30908c2ecf20Sopenharmony_ci	/* Digital Interface Select */
30918c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF1 ADC1 Mux", SND_SOC_NOPM, 0, 0,
30928c2ecf20Sopenharmony_ci			&rt5677_if1_adc1_mux),
30938c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF1 ADC2 Mux", SND_SOC_NOPM, 0, 0,
30948c2ecf20Sopenharmony_ci			&rt5677_if1_adc2_mux),
30958c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF1 ADC3 Mux", SND_SOC_NOPM, 0, 0,
30968c2ecf20Sopenharmony_ci			&rt5677_if1_adc3_mux),
30978c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF1 ADC4 Mux", SND_SOC_NOPM, 0, 0,
30988c2ecf20Sopenharmony_ci			&rt5677_if1_adc4_mux),
30998c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF1 ADC1 Swap Mux", SND_SOC_NOPM, 0, 0,
31008c2ecf20Sopenharmony_ci			&rt5677_if1_adc1_swap_mux),
31018c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF1 ADC2 Swap Mux", SND_SOC_NOPM, 0, 0,
31028c2ecf20Sopenharmony_ci			&rt5677_if1_adc2_swap_mux),
31038c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF1 ADC3 Swap Mux", SND_SOC_NOPM, 0, 0,
31048c2ecf20Sopenharmony_ci			&rt5677_if1_adc3_swap_mux),
31058c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF1 ADC4 Swap Mux", SND_SOC_NOPM, 0, 0,
31068c2ecf20Sopenharmony_ci			&rt5677_if1_adc4_swap_mux),
31078c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX_E("IF1 ADC TDM Swap Mux", SND_SOC_NOPM, 0, 0,
31088c2ecf20Sopenharmony_ci			&rt5677_if1_adc_tdm_swap_mux, rt5677_if1_adc_tdm_event,
31098c2ecf20Sopenharmony_ci			SND_SOC_DAPM_PRE_PMU),
31108c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF2 ADC1 Mux", SND_SOC_NOPM, 0, 0,
31118c2ecf20Sopenharmony_ci			&rt5677_if2_adc1_mux),
31128c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF2 ADC2 Mux", SND_SOC_NOPM, 0, 0,
31138c2ecf20Sopenharmony_ci			&rt5677_if2_adc2_mux),
31148c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF2 ADC3 Mux", SND_SOC_NOPM, 0, 0,
31158c2ecf20Sopenharmony_ci			&rt5677_if2_adc3_mux),
31168c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF2 ADC4 Mux", SND_SOC_NOPM, 0, 0,
31178c2ecf20Sopenharmony_ci			&rt5677_if2_adc4_mux),
31188c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF2 ADC1 Swap Mux", SND_SOC_NOPM, 0, 0,
31198c2ecf20Sopenharmony_ci			&rt5677_if2_adc1_swap_mux),
31208c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF2 ADC2 Swap Mux", SND_SOC_NOPM, 0, 0,
31218c2ecf20Sopenharmony_ci			&rt5677_if2_adc2_swap_mux),
31228c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF2 ADC3 Swap Mux", SND_SOC_NOPM, 0, 0,
31238c2ecf20Sopenharmony_ci			&rt5677_if2_adc3_swap_mux),
31248c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF2 ADC4 Swap Mux", SND_SOC_NOPM, 0, 0,
31258c2ecf20Sopenharmony_ci			&rt5677_if2_adc4_swap_mux),
31268c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX_E("IF2 ADC TDM Swap Mux", SND_SOC_NOPM, 0, 0,
31278c2ecf20Sopenharmony_ci			&rt5677_if2_adc_tdm_swap_mux, rt5677_if2_adc_tdm_event,
31288c2ecf20Sopenharmony_ci			SND_SOC_DAPM_PRE_PMU),
31298c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF3 ADC Mux", SND_SOC_NOPM, 0, 0,
31308c2ecf20Sopenharmony_ci			&rt5677_if3_adc_mux),
31318c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF4 ADC Mux", SND_SOC_NOPM, 0, 0,
31328c2ecf20Sopenharmony_ci			&rt5677_if4_adc_mux),
31338c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("SLB ADC1 Mux", SND_SOC_NOPM, 0, 0,
31348c2ecf20Sopenharmony_ci			&rt5677_slb_adc1_mux),
31358c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("SLB ADC2 Mux", SND_SOC_NOPM, 0, 0,
31368c2ecf20Sopenharmony_ci			&rt5677_slb_adc2_mux),
31378c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("SLB ADC3 Mux", SND_SOC_NOPM, 0, 0,
31388c2ecf20Sopenharmony_ci			&rt5677_slb_adc3_mux),
31398c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("SLB ADC4 Mux", SND_SOC_NOPM, 0, 0,
31408c2ecf20Sopenharmony_ci			&rt5677_slb_adc4_mux),
31418c2ecf20Sopenharmony_ci
31428c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF1 DAC0 Mux", SND_SOC_NOPM, 0, 0,
31438c2ecf20Sopenharmony_ci			&rt5677_if1_dac0_tdm_sel_mux),
31448c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF1 DAC1 Mux", SND_SOC_NOPM, 0, 0,
31458c2ecf20Sopenharmony_ci			&rt5677_if1_dac1_tdm_sel_mux),
31468c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF1 DAC2 Mux", SND_SOC_NOPM, 0, 0,
31478c2ecf20Sopenharmony_ci			&rt5677_if1_dac2_tdm_sel_mux),
31488c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF1 DAC3 Mux", SND_SOC_NOPM, 0, 0,
31498c2ecf20Sopenharmony_ci			&rt5677_if1_dac3_tdm_sel_mux),
31508c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF1 DAC4 Mux", SND_SOC_NOPM, 0, 0,
31518c2ecf20Sopenharmony_ci			&rt5677_if1_dac4_tdm_sel_mux),
31528c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF1 DAC5 Mux", SND_SOC_NOPM, 0, 0,
31538c2ecf20Sopenharmony_ci			&rt5677_if1_dac5_tdm_sel_mux),
31548c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF1 DAC6 Mux", SND_SOC_NOPM, 0, 0,
31558c2ecf20Sopenharmony_ci			&rt5677_if1_dac6_tdm_sel_mux),
31568c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF1 DAC7 Mux", SND_SOC_NOPM, 0, 0,
31578c2ecf20Sopenharmony_ci			&rt5677_if1_dac7_tdm_sel_mux),
31588c2ecf20Sopenharmony_ci
31598c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF2 DAC0 Mux", SND_SOC_NOPM, 0, 0,
31608c2ecf20Sopenharmony_ci			&rt5677_if2_dac0_tdm_sel_mux),
31618c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF2 DAC1 Mux", SND_SOC_NOPM, 0, 0,
31628c2ecf20Sopenharmony_ci			&rt5677_if2_dac1_tdm_sel_mux),
31638c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF2 DAC2 Mux", SND_SOC_NOPM, 0, 0,
31648c2ecf20Sopenharmony_ci			&rt5677_if2_dac2_tdm_sel_mux),
31658c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF2 DAC3 Mux", SND_SOC_NOPM, 0, 0,
31668c2ecf20Sopenharmony_ci			&rt5677_if2_dac3_tdm_sel_mux),
31678c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF2 DAC4 Mux", SND_SOC_NOPM, 0, 0,
31688c2ecf20Sopenharmony_ci			&rt5677_if2_dac4_tdm_sel_mux),
31698c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF2 DAC5 Mux", SND_SOC_NOPM, 0, 0,
31708c2ecf20Sopenharmony_ci			&rt5677_if2_dac5_tdm_sel_mux),
31718c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF2 DAC6 Mux", SND_SOC_NOPM, 0, 0,
31728c2ecf20Sopenharmony_ci			&rt5677_if2_dac6_tdm_sel_mux),
31738c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("IF2 DAC7 Mux", SND_SOC_NOPM, 0, 0,
31748c2ecf20Sopenharmony_ci			&rt5677_if2_dac7_tdm_sel_mux),
31758c2ecf20Sopenharmony_ci
31768c2ecf20Sopenharmony_ci	/* Audio Interface */
31778c2ecf20Sopenharmony_ci	SND_SOC_DAPM_AIF_IN("AIF1RX", "AIF1 Playback", 0, SND_SOC_NOPM, 0, 0),
31788c2ecf20Sopenharmony_ci	SND_SOC_DAPM_AIF_OUT("AIF1TX", "AIF1 Capture", 0, SND_SOC_NOPM, 0, 0),
31798c2ecf20Sopenharmony_ci	SND_SOC_DAPM_AIF_IN("AIF2RX", "AIF2 Playback", 0, SND_SOC_NOPM, 0, 0),
31808c2ecf20Sopenharmony_ci	SND_SOC_DAPM_AIF_OUT("AIF2TX", "AIF2 Capture", 0, SND_SOC_NOPM, 0, 0),
31818c2ecf20Sopenharmony_ci	SND_SOC_DAPM_AIF_IN("AIF3RX", "AIF3 Playback", 0, SND_SOC_NOPM, 0, 0),
31828c2ecf20Sopenharmony_ci	SND_SOC_DAPM_AIF_OUT("AIF3TX", "AIF3 Capture", 0, SND_SOC_NOPM, 0, 0),
31838c2ecf20Sopenharmony_ci	SND_SOC_DAPM_AIF_IN("AIF4RX", "AIF4 Playback", 0, SND_SOC_NOPM, 0, 0),
31848c2ecf20Sopenharmony_ci	SND_SOC_DAPM_AIF_OUT("AIF4TX", "AIF4 Capture", 0, SND_SOC_NOPM, 0, 0),
31858c2ecf20Sopenharmony_ci	SND_SOC_DAPM_AIF_IN("SLBRX", "SLIMBus Playback", 0, SND_SOC_NOPM, 0, 0),
31868c2ecf20Sopenharmony_ci	SND_SOC_DAPM_AIF_OUT("SLBTX", "SLIMBus Capture", 0, SND_SOC_NOPM, 0, 0),
31878c2ecf20Sopenharmony_ci	SND_SOC_DAPM_AIF_OUT("DSPTX", "DSP Buffer", 0, SND_SOC_NOPM, 0, 0),
31888c2ecf20Sopenharmony_ci
31898c2ecf20Sopenharmony_ci	/* Sidetone Mux */
31908c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("Sidetone Mux", SND_SOC_NOPM, 0, 0,
31918c2ecf20Sopenharmony_ci			&rt5677_sidetone_mux),
31928c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("Sidetone Power", RT5677_SIDETONE_CTRL,
31938c2ecf20Sopenharmony_ci		RT5677_ST_EN_SFT, 0, NULL, 0),
31948c2ecf20Sopenharmony_ci
31958c2ecf20Sopenharmony_ci	/* VAD Mux*/
31968c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("VAD ADC Mux", SND_SOC_NOPM, 0, 0,
31978c2ecf20Sopenharmony_ci			&rt5677_vad_src_mux),
31988c2ecf20Sopenharmony_ci
31998c2ecf20Sopenharmony_ci	/* Tensilica DSP */
32008c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("Tensilica DSP", SND_SOC_NOPM, 0, 0, NULL, 0),
32018c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("OB01 MIX", SND_SOC_NOPM, 0, 0,
32028c2ecf20Sopenharmony_ci		rt5677_ob_01_mix, ARRAY_SIZE(rt5677_ob_01_mix)),
32038c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("OB23 MIX", SND_SOC_NOPM, 0, 0,
32048c2ecf20Sopenharmony_ci		rt5677_ob_23_mix, ARRAY_SIZE(rt5677_ob_23_mix)),
32058c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("OB4 MIX", SND_SOC_NOPM, 0, 0,
32068c2ecf20Sopenharmony_ci		rt5677_ob_4_mix, ARRAY_SIZE(rt5677_ob_4_mix)),
32078c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("OB5 MIX", SND_SOC_NOPM, 0, 0,
32088c2ecf20Sopenharmony_ci		rt5677_ob_5_mix, ARRAY_SIZE(rt5677_ob_5_mix)),
32098c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("OB6 MIX", SND_SOC_NOPM, 0, 0,
32108c2ecf20Sopenharmony_ci		rt5677_ob_6_mix, ARRAY_SIZE(rt5677_ob_6_mix)),
32118c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("OB7 MIX", SND_SOC_NOPM, 0, 0,
32128c2ecf20Sopenharmony_ci		rt5677_ob_7_mix, ARRAY_SIZE(rt5677_ob_7_mix)),
32138c2ecf20Sopenharmony_ci
32148c2ecf20Sopenharmony_ci	/* Output Side */
32158c2ecf20Sopenharmony_ci	/* DAC mixer before sound effect */
32168c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("DAC1 MIXL", SND_SOC_NOPM, 0, 0,
32178c2ecf20Sopenharmony_ci		rt5677_dac_l_mix, ARRAY_SIZE(rt5677_dac_l_mix)),
32188c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("DAC1 MIXR", SND_SOC_NOPM, 0, 0,
32198c2ecf20Sopenharmony_ci		rt5677_dac_r_mix, ARRAY_SIZE(rt5677_dac_r_mix)),
32208c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("DAC1 FS", SND_SOC_NOPM, 0, 0, NULL, 0),
32218c2ecf20Sopenharmony_ci
32228c2ecf20Sopenharmony_ci	/* DAC Mux */
32238c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("DAC1 Mux", SND_SOC_NOPM, 0, 0,
32248c2ecf20Sopenharmony_ci				&rt5677_dac1_mux),
32258c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("ADDA1 Mux", SND_SOC_NOPM, 0, 0,
32268c2ecf20Sopenharmony_ci				&rt5677_adda1_mux),
32278c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("DAC12 SRC Mux", SND_SOC_NOPM, 0, 0,
32288c2ecf20Sopenharmony_ci				&rt5677_dac12_mux),
32298c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("DAC3 SRC Mux", SND_SOC_NOPM, 0, 0,
32308c2ecf20Sopenharmony_ci				&rt5677_dac3_mux),
32318c2ecf20Sopenharmony_ci
32328c2ecf20Sopenharmony_ci	/* DAC2 channel Mux */
32338c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("DAC2 L Mux", SND_SOC_NOPM, 0, 0,
32348c2ecf20Sopenharmony_ci				&rt5677_dac2_l_mux),
32358c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("DAC2 R Mux", SND_SOC_NOPM, 0, 0,
32368c2ecf20Sopenharmony_ci				&rt5677_dac2_r_mux),
32378c2ecf20Sopenharmony_ci
32388c2ecf20Sopenharmony_ci	/* DAC3 channel Mux */
32398c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("DAC3 L Mux", SND_SOC_NOPM, 0, 0,
32408c2ecf20Sopenharmony_ci			&rt5677_dac3_l_mux),
32418c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("DAC3 R Mux", SND_SOC_NOPM, 0, 0,
32428c2ecf20Sopenharmony_ci			&rt5677_dac3_r_mux),
32438c2ecf20Sopenharmony_ci
32448c2ecf20Sopenharmony_ci	/* DAC4 channel Mux */
32458c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("DAC4 L Mux", SND_SOC_NOPM, 0, 0,
32468c2ecf20Sopenharmony_ci			&rt5677_dac4_l_mux),
32478c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("DAC4 R Mux", SND_SOC_NOPM, 0, 0,
32488c2ecf20Sopenharmony_ci			&rt5677_dac4_r_mux),
32498c2ecf20Sopenharmony_ci
32508c2ecf20Sopenharmony_ci	/* DAC Mixer */
32518c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("dac stereo1 filter", RT5677_PWR_DIG2,
32528c2ecf20Sopenharmony_ci		RT5677_PWR_DAC_S1F_BIT, 0, rt5677_filter_power_event,
32538c2ecf20Sopenharmony_ci		SND_SOC_DAPM_POST_PMU),
32548c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("dac mono2 left filter", RT5677_PWR_DIG2,
32558c2ecf20Sopenharmony_ci		RT5677_PWR_DAC_M2F_L_BIT, 0, rt5677_filter_power_event,
32568c2ecf20Sopenharmony_ci		SND_SOC_DAPM_POST_PMU),
32578c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("dac mono2 right filter", RT5677_PWR_DIG2,
32588c2ecf20Sopenharmony_ci		RT5677_PWR_DAC_M2F_R_BIT, 0, rt5677_filter_power_event,
32598c2ecf20Sopenharmony_ci		SND_SOC_DAPM_POST_PMU),
32608c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("dac mono3 left filter", RT5677_PWR_DIG2,
32618c2ecf20Sopenharmony_ci		RT5677_PWR_DAC_M3F_L_BIT, 0, rt5677_filter_power_event,
32628c2ecf20Sopenharmony_ci		SND_SOC_DAPM_POST_PMU),
32638c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("dac mono3 right filter", RT5677_PWR_DIG2,
32648c2ecf20Sopenharmony_ci		RT5677_PWR_DAC_M3F_R_BIT, 0, rt5677_filter_power_event,
32658c2ecf20Sopenharmony_ci		SND_SOC_DAPM_POST_PMU),
32668c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("dac mono4 left filter", RT5677_PWR_DIG2,
32678c2ecf20Sopenharmony_ci		RT5677_PWR_DAC_M4F_L_BIT, 0, rt5677_filter_power_event,
32688c2ecf20Sopenharmony_ci		SND_SOC_DAPM_POST_PMU),
32698c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("dac mono4 right filter", RT5677_PWR_DIG2,
32708c2ecf20Sopenharmony_ci		RT5677_PWR_DAC_M4F_R_BIT, 0, rt5677_filter_power_event,
32718c2ecf20Sopenharmony_ci		SND_SOC_DAPM_POST_PMU),
32728c2ecf20Sopenharmony_ci
32738c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("Stereo DAC MIXL", SND_SOC_NOPM, 0, 0,
32748c2ecf20Sopenharmony_ci		rt5677_sto1_dac_l_mix, ARRAY_SIZE(rt5677_sto1_dac_l_mix)),
32758c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("Stereo DAC MIXR", SND_SOC_NOPM, 0, 0,
32768c2ecf20Sopenharmony_ci		rt5677_sto1_dac_r_mix, ARRAY_SIZE(rt5677_sto1_dac_r_mix)),
32778c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("Mono DAC MIXL", SND_SOC_NOPM, 0, 0,
32788c2ecf20Sopenharmony_ci		rt5677_mono_dac_l_mix, ARRAY_SIZE(rt5677_mono_dac_l_mix)),
32798c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("Mono DAC MIXR", SND_SOC_NOPM, 0, 0,
32808c2ecf20Sopenharmony_ci		rt5677_mono_dac_r_mix, ARRAY_SIZE(rt5677_mono_dac_r_mix)),
32818c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("DD1 MIXL", SND_SOC_NOPM, 0, 0,
32828c2ecf20Sopenharmony_ci		rt5677_dd1_l_mix, ARRAY_SIZE(rt5677_dd1_l_mix)),
32838c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("DD1 MIXR", SND_SOC_NOPM, 0, 0,
32848c2ecf20Sopenharmony_ci		rt5677_dd1_r_mix, ARRAY_SIZE(rt5677_dd1_r_mix)),
32858c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("DD2 MIXL", SND_SOC_NOPM, 0, 0,
32868c2ecf20Sopenharmony_ci		rt5677_dd2_l_mix, ARRAY_SIZE(rt5677_dd2_l_mix)),
32878c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MIXER("DD2 MIXR", SND_SOC_NOPM, 0, 0,
32888c2ecf20Sopenharmony_ci		rt5677_dd2_r_mix, ARRAY_SIZE(rt5677_dd2_r_mix)),
32898c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("Stereo DAC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
32908c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("Mono DAC MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
32918c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("DD1 MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
32928c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA("DD2 MIX", SND_SOC_NOPM, 0, 0, NULL, 0),
32938c2ecf20Sopenharmony_ci
32948c2ecf20Sopenharmony_ci	/* DACs */
32958c2ecf20Sopenharmony_ci	SND_SOC_DAPM_DAC("DAC 1", NULL, RT5677_PWR_DIG1,
32968c2ecf20Sopenharmony_ci		RT5677_PWR_DAC1_BIT, 0),
32978c2ecf20Sopenharmony_ci	SND_SOC_DAPM_DAC("DAC 2", NULL, RT5677_PWR_DIG1,
32988c2ecf20Sopenharmony_ci		RT5677_PWR_DAC2_BIT, 0),
32998c2ecf20Sopenharmony_ci	SND_SOC_DAPM_DAC("DAC 3", NULL, RT5677_PWR_DIG1,
33008c2ecf20Sopenharmony_ci		RT5677_PWR_DAC3_BIT, 0),
33018c2ecf20Sopenharmony_ci
33028c2ecf20Sopenharmony_ci	/* PDM */
33038c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("PDM1 Power", RT5677_PWR_DIG2,
33048c2ecf20Sopenharmony_ci		RT5677_PWR_PDM1_BIT, 0, NULL, 0),
33058c2ecf20Sopenharmony_ci	SND_SOC_DAPM_SUPPLY("PDM2 Power", RT5677_PWR_DIG2,
33068c2ecf20Sopenharmony_ci		RT5677_PWR_PDM2_BIT, 0, NULL, 0),
33078c2ecf20Sopenharmony_ci
33088c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("PDM1 L Mux", RT5677_PDM_OUT_CTRL, RT5677_M_PDM1_L_SFT,
33098c2ecf20Sopenharmony_ci		1, &rt5677_pdm1_l_mux),
33108c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("PDM1 R Mux", RT5677_PDM_OUT_CTRL, RT5677_M_PDM1_R_SFT,
33118c2ecf20Sopenharmony_ci		1, &rt5677_pdm1_r_mux),
33128c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("PDM2 L Mux", RT5677_PDM_OUT_CTRL, RT5677_M_PDM2_L_SFT,
33138c2ecf20Sopenharmony_ci		1, &rt5677_pdm2_l_mux),
33148c2ecf20Sopenharmony_ci	SND_SOC_DAPM_MUX("PDM2 R Mux", RT5677_PDM_OUT_CTRL, RT5677_M_PDM2_R_SFT,
33158c2ecf20Sopenharmony_ci		1, &rt5677_pdm2_r_mux),
33168c2ecf20Sopenharmony_ci
33178c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA_S("LOUT1 amp", 0, RT5677_PWR_ANLG1, RT5677_PWR_LO1_BIT,
33188c2ecf20Sopenharmony_ci		0, NULL, 0),
33198c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA_S("LOUT2 amp", 0, RT5677_PWR_ANLG1, RT5677_PWR_LO2_BIT,
33208c2ecf20Sopenharmony_ci		0, NULL, 0),
33218c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA_S("LOUT3 amp", 0, RT5677_PWR_ANLG1, RT5677_PWR_LO3_BIT,
33228c2ecf20Sopenharmony_ci		0, NULL, 0),
33238c2ecf20Sopenharmony_ci
33248c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA_S("LOUT1 vref", 1, SND_SOC_NOPM, 0, 0,
33258c2ecf20Sopenharmony_ci		rt5677_vref_event, SND_SOC_DAPM_POST_PMU),
33268c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA_S("LOUT2 vref", 1, SND_SOC_NOPM, 0, 0,
33278c2ecf20Sopenharmony_ci		rt5677_vref_event, SND_SOC_DAPM_POST_PMU),
33288c2ecf20Sopenharmony_ci	SND_SOC_DAPM_PGA_S("LOUT3 vref", 1, SND_SOC_NOPM, 0, 0,
33298c2ecf20Sopenharmony_ci		rt5677_vref_event, SND_SOC_DAPM_POST_PMU),
33308c2ecf20Sopenharmony_ci
33318c2ecf20Sopenharmony_ci	/* Output Lines */
33328c2ecf20Sopenharmony_ci	SND_SOC_DAPM_OUTPUT("LOUT1"),
33338c2ecf20Sopenharmony_ci	SND_SOC_DAPM_OUTPUT("LOUT2"),
33348c2ecf20Sopenharmony_ci	SND_SOC_DAPM_OUTPUT("LOUT3"),
33358c2ecf20Sopenharmony_ci	SND_SOC_DAPM_OUTPUT("PDM1L"),
33368c2ecf20Sopenharmony_ci	SND_SOC_DAPM_OUTPUT("PDM1R"),
33378c2ecf20Sopenharmony_ci	SND_SOC_DAPM_OUTPUT("PDM2L"),
33388c2ecf20Sopenharmony_ci	SND_SOC_DAPM_OUTPUT("PDM2R"),
33398c2ecf20Sopenharmony_ci
33408c2ecf20Sopenharmony_ci	SND_SOC_DAPM_POST("vref", rt5677_vref_event),
33418c2ecf20Sopenharmony_ci};
33428c2ecf20Sopenharmony_ci
33438c2ecf20Sopenharmony_cistatic const struct snd_soc_dapm_route rt5677_dapm_routes[] = {
33448c2ecf20Sopenharmony_ci	{ "Stereo1 DMIC Mux", NULL, "DMIC STO1 ASRC", rt5677_dmic_use_asrc },
33458c2ecf20Sopenharmony_ci	{ "Stereo2 DMIC Mux", NULL, "DMIC STO2 ASRC", rt5677_dmic_use_asrc },
33468c2ecf20Sopenharmony_ci	{ "Stereo3 DMIC Mux", NULL, "DMIC STO3 ASRC", rt5677_dmic_use_asrc },
33478c2ecf20Sopenharmony_ci	{ "Stereo4 DMIC Mux", NULL, "DMIC STO4 ASRC", rt5677_dmic_use_asrc },
33488c2ecf20Sopenharmony_ci	{ "Mono DMIC L Mux", NULL, "DMIC MONO L ASRC", rt5677_dmic_use_asrc },
33498c2ecf20Sopenharmony_ci	{ "Mono DMIC R Mux", NULL, "DMIC MONO R ASRC", rt5677_dmic_use_asrc },
33508c2ecf20Sopenharmony_ci	{ "I2S1", NULL, "I2S1 ASRC", can_use_asrc},
33518c2ecf20Sopenharmony_ci	{ "I2S2", NULL, "I2S2 ASRC", can_use_asrc},
33528c2ecf20Sopenharmony_ci	{ "I2S3", NULL, "I2S3 ASRC", can_use_asrc},
33538c2ecf20Sopenharmony_ci	{ "I2S4", NULL, "I2S4 ASRC", can_use_asrc},
33548c2ecf20Sopenharmony_ci
33558c2ecf20Sopenharmony_ci	{ "dac stereo1 filter", NULL, "DAC STO ASRC", is_using_asrc },
33568c2ecf20Sopenharmony_ci	{ "dac mono2 left filter", NULL, "DAC MONO2 L ASRC", is_using_asrc },
33578c2ecf20Sopenharmony_ci	{ "dac mono2 right filter", NULL, "DAC MONO2 R ASRC", is_using_asrc },
33588c2ecf20Sopenharmony_ci	{ "dac mono3 left filter", NULL, "DAC MONO3 L ASRC", is_using_asrc },
33598c2ecf20Sopenharmony_ci	{ "dac mono3 right filter", NULL, "DAC MONO3 R ASRC", is_using_asrc },
33608c2ecf20Sopenharmony_ci	{ "dac mono4 left filter", NULL, "DAC MONO4 L ASRC", is_using_asrc },
33618c2ecf20Sopenharmony_ci	{ "dac mono4 right filter", NULL, "DAC MONO4 R ASRC", is_using_asrc },
33628c2ecf20Sopenharmony_ci	{ "adc stereo1 filter", NULL, "ADC STO1 ASRC", is_using_asrc },
33638c2ecf20Sopenharmony_ci	{ "adc stereo2 filter", NULL, "ADC STO2 ASRC", is_using_asrc },
33648c2ecf20Sopenharmony_ci	{ "adc stereo3 filter", NULL, "ADC STO3 ASRC", is_using_asrc },
33658c2ecf20Sopenharmony_ci	{ "adc stereo4 filter", NULL, "ADC STO4 ASRC", is_using_asrc },
33668c2ecf20Sopenharmony_ci	{ "adc mono left filter", NULL, "ADC MONO L ASRC", is_using_asrc },
33678c2ecf20Sopenharmony_ci	{ "adc mono right filter", NULL, "ADC MONO R ASRC", is_using_asrc },
33688c2ecf20Sopenharmony_ci
33698c2ecf20Sopenharmony_ci	{ "DMIC1", NULL, "DMIC L1" },
33708c2ecf20Sopenharmony_ci	{ "DMIC1", NULL, "DMIC R1" },
33718c2ecf20Sopenharmony_ci	{ "DMIC2", NULL, "DMIC L2" },
33728c2ecf20Sopenharmony_ci	{ "DMIC2", NULL, "DMIC R2" },
33738c2ecf20Sopenharmony_ci	{ "DMIC3", NULL, "DMIC L3" },
33748c2ecf20Sopenharmony_ci	{ "DMIC3", NULL, "DMIC R3" },
33758c2ecf20Sopenharmony_ci	{ "DMIC4", NULL, "DMIC L4" },
33768c2ecf20Sopenharmony_ci	{ "DMIC4", NULL, "DMIC R4" },
33778c2ecf20Sopenharmony_ci
33788c2ecf20Sopenharmony_ci	{ "DMIC L1", NULL, "DMIC CLK" },
33798c2ecf20Sopenharmony_ci	{ "DMIC R1", NULL, "DMIC CLK" },
33808c2ecf20Sopenharmony_ci	{ "DMIC L2", NULL, "DMIC CLK" },
33818c2ecf20Sopenharmony_ci	{ "DMIC R2", NULL, "DMIC CLK" },
33828c2ecf20Sopenharmony_ci	{ "DMIC L3", NULL, "DMIC CLK" },
33838c2ecf20Sopenharmony_ci	{ "DMIC R3", NULL, "DMIC CLK" },
33848c2ecf20Sopenharmony_ci	{ "DMIC L4", NULL, "DMIC CLK" },
33858c2ecf20Sopenharmony_ci	{ "DMIC R4", NULL, "DMIC CLK" },
33868c2ecf20Sopenharmony_ci
33878c2ecf20Sopenharmony_ci	{ "DMIC L1", NULL, "DMIC1 power" },
33888c2ecf20Sopenharmony_ci	{ "DMIC R1", NULL, "DMIC1 power" },
33898c2ecf20Sopenharmony_ci	{ "DMIC L3", NULL, "DMIC3 power" },
33908c2ecf20Sopenharmony_ci	{ "DMIC R3", NULL, "DMIC3 power" },
33918c2ecf20Sopenharmony_ci	{ "DMIC L4", NULL, "DMIC4 power" },
33928c2ecf20Sopenharmony_ci	{ "DMIC R4", NULL, "DMIC4 power" },
33938c2ecf20Sopenharmony_ci
33948c2ecf20Sopenharmony_ci	{ "BST1", NULL, "IN1P" },
33958c2ecf20Sopenharmony_ci	{ "BST1", NULL, "IN1N" },
33968c2ecf20Sopenharmony_ci	{ "BST2", NULL, "IN2P" },
33978c2ecf20Sopenharmony_ci	{ "BST2", NULL, "IN2N" },
33988c2ecf20Sopenharmony_ci
33998c2ecf20Sopenharmony_ci	{ "IN1P", NULL, "MICBIAS1" },
34008c2ecf20Sopenharmony_ci	{ "IN1N", NULL, "MICBIAS1" },
34018c2ecf20Sopenharmony_ci	{ "IN2P", NULL, "MICBIAS1" },
34028c2ecf20Sopenharmony_ci	{ "IN2N", NULL, "MICBIAS1" },
34038c2ecf20Sopenharmony_ci
34048c2ecf20Sopenharmony_ci	{ "ADC 1", NULL, "BST1" },
34058c2ecf20Sopenharmony_ci	{ "ADC 1", NULL, "ADC 1 power" },
34068c2ecf20Sopenharmony_ci	{ "ADC 1", NULL, "ADC1 clock" },
34078c2ecf20Sopenharmony_ci	{ "ADC 2", NULL, "BST2" },
34088c2ecf20Sopenharmony_ci	{ "ADC 2", NULL, "ADC 2 power" },
34098c2ecf20Sopenharmony_ci	{ "ADC 2", NULL, "ADC2 clock" },
34108c2ecf20Sopenharmony_ci
34118c2ecf20Sopenharmony_ci	{ "Stereo1 DMIC Mux", "DMIC1", "DMIC1" },
34128c2ecf20Sopenharmony_ci	{ "Stereo1 DMIC Mux", "DMIC2", "DMIC2" },
34138c2ecf20Sopenharmony_ci	{ "Stereo1 DMIC Mux", "DMIC3", "DMIC3" },
34148c2ecf20Sopenharmony_ci	{ "Stereo1 DMIC Mux", "DMIC4", "DMIC4" },
34158c2ecf20Sopenharmony_ci
34168c2ecf20Sopenharmony_ci	{ "Stereo2 DMIC Mux", "DMIC1", "DMIC1" },
34178c2ecf20Sopenharmony_ci	{ "Stereo2 DMIC Mux", "DMIC2", "DMIC2" },
34188c2ecf20Sopenharmony_ci	{ "Stereo2 DMIC Mux", "DMIC3", "DMIC3" },
34198c2ecf20Sopenharmony_ci	{ "Stereo2 DMIC Mux", "DMIC4", "DMIC4" },
34208c2ecf20Sopenharmony_ci
34218c2ecf20Sopenharmony_ci	{ "Stereo3 DMIC Mux", "DMIC1", "DMIC1" },
34228c2ecf20Sopenharmony_ci	{ "Stereo3 DMIC Mux", "DMIC2", "DMIC2" },
34238c2ecf20Sopenharmony_ci	{ "Stereo3 DMIC Mux", "DMIC3", "DMIC3" },
34248c2ecf20Sopenharmony_ci	{ "Stereo3 DMIC Mux", "DMIC4", "DMIC4" },
34258c2ecf20Sopenharmony_ci
34268c2ecf20Sopenharmony_ci	{ "Stereo4 DMIC Mux", "DMIC1", "DMIC1" },
34278c2ecf20Sopenharmony_ci	{ "Stereo4 DMIC Mux", "DMIC2", "DMIC2" },
34288c2ecf20Sopenharmony_ci	{ "Stereo4 DMIC Mux", "DMIC3", "DMIC3" },
34298c2ecf20Sopenharmony_ci	{ "Stereo4 DMIC Mux", "DMIC4", "DMIC4" },
34308c2ecf20Sopenharmony_ci
34318c2ecf20Sopenharmony_ci	{ "Mono DMIC L Mux", "DMIC1", "DMIC1" },
34328c2ecf20Sopenharmony_ci	{ "Mono DMIC L Mux", "DMIC2", "DMIC2" },
34338c2ecf20Sopenharmony_ci	{ "Mono DMIC L Mux", "DMIC3", "DMIC3" },
34348c2ecf20Sopenharmony_ci	{ "Mono DMIC L Mux", "DMIC4", "DMIC4" },
34358c2ecf20Sopenharmony_ci
34368c2ecf20Sopenharmony_ci	{ "Mono DMIC R Mux", "DMIC1", "DMIC1" },
34378c2ecf20Sopenharmony_ci	{ "Mono DMIC R Mux", "DMIC2", "DMIC2" },
34388c2ecf20Sopenharmony_ci	{ "Mono DMIC R Mux", "DMIC3", "DMIC3" },
34398c2ecf20Sopenharmony_ci	{ "Mono DMIC R Mux", "DMIC4", "DMIC4" },
34408c2ecf20Sopenharmony_ci
34418c2ecf20Sopenharmony_ci	{ "ADC 1_2", NULL, "ADC 1" },
34428c2ecf20Sopenharmony_ci	{ "ADC 1_2", NULL, "ADC 2" },
34438c2ecf20Sopenharmony_ci
34448c2ecf20Sopenharmony_ci	{ "Stereo1 ADC1 Mux", "DD MIX1", "DD1 MIX" },
34458c2ecf20Sopenharmony_ci	{ "Stereo1 ADC1 Mux", "ADC1/2", "ADC 1_2" },
34468c2ecf20Sopenharmony_ci	{ "Stereo1 ADC1 Mux", "Stereo DAC MIX", "Stereo DAC MIX" },
34478c2ecf20Sopenharmony_ci
34488c2ecf20Sopenharmony_ci	{ "Stereo1 ADC2 Mux", "DD MIX1", "DD1 MIX" },
34498c2ecf20Sopenharmony_ci	{ "Stereo1 ADC2 Mux", "DMIC", "Stereo1 DMIC Mux" },
34508c2ecf20Sopenharmony_ci	{ "Stereo1 ADC2 Mux", "Stereo DAC MIX", "Stereo DAC MIX" },
34518c2ecf20Sopenharmony_ci
34528c2ecf20Sopenharmony_ci	{ "Stereo2 ADC1 Mux", "DD MIX1", "DD1 MIX" },
34538c2ecf20Sopenharmony_ci	{ "Stereo2 ADC1 Mux", "ADC1/2", "ADC 1_2" },
34548c2ecf20Sopenharmony_ci	{ "Stereo2 ADC1 Mux", "Stereo DAC MIX", "Stereo DAC MIX" },
34558c2ecf20Sopenharmony_ci
34568c2ecf20Sopenharmony_ci	{ "Stereo2 ADC2 Mux", "DD MIX1", "DD1 MIX" },
34578c2ecf20Sopenharmony_ci	{ "Stereo2 ADC2 Mux", "DMIC", "Stereo2 DMIC Mux" },
34588c2ecf20Sopenharmony_ci	{ "Stereo2 ADC2 Mux", "Stereo DAC MIX", "Stereo DAC MIX" },
34598c2ecf20Sopenharmony_ci
34608c2ecf20Sopenharmony_ci	{ "Stereo3 ADC1 Mux", "DD MIX1", "DD1 MIX" },
34618c2ecf20Sopenharmony_ci	{ "Stereo3 ADC1 Mux", "ADC1/2", "ADC 1_2" },
34628c2ecf20Sopenharmony_ci	{ "Stereo3 ADC1 Mux", "Stereo DAC MIX", "Stereo DAC MIX" },
34638c2ecf20Sopenharmony_ci
34648c2ecf20Sopenharmony_ci	{ "Stereo3 ADC2 Mux", "DD MIX1", "DD1 MIX" },
34658c2ecf20Sopenharmony_ci	{ "Stereo3 ADC2 Mux", "DMIC", "Stereo3 DMIC Mux" },
34668c2ecf20Sopenharmony_ci	{ "Stereo3 ADC2 Mux", "Stereo DAC MIX", "Stereo DAC MIX" },
34678c2ecf20Sopenharmony_ci
34688c2ecf20Sopenharmony_ci	{ "Stereo4 ADC1 Mux", "DD MIX1", "DD1 MIX" },
34698c2ecf20Sopenharmony_ci	{ "Stereo4 ADC1 Mux", "ADC1/2", "ADC 1_2" },
34708c2ecf20Sopenharmony_ci	{ "Stereo4 ADC1 Mux", "DD MIX2", "DD2 MIX" },
34718c2ecf20Sopenharmony_ci
34728c2ecf20Sopenharmony_ci	{ "Stereo4 ADC2 Mux", "DD MIX1", "DD1 MIX" },
34738c2ecf20Sopenharmony_ci	{ "Stereo4 ADC2 Mux", "DMIC", "Stereo3 DMIC Mux" },
34748c2ecf20Sopenharmony_ci	{ "Stereo4 ADC2 Mux", "DD MIX2", "DD2 MIX" },
34758c2ecf20Sopenharmony_ci
34768c2ecf20Sopenharmony_ci	{ "Mono ADC2 L Mux", "DD MIX1L", "DD1 MIXL" },
34778c2ecf20Sopenharmony_ci	{ "Mono ADC2 L Mux", "DMIC", "Mono DMIC L Mux" },
34788c2ecf20Sopenharmony_ci	{ "Mono ADC2 L Mux", "MONO DAC MIXL", "Mono DAC MIXL" },
34798c2ecf20Sopenharmony_ci
34808c2ecf20Sopenharmony_ci	{ "Mono ADC1 L Mux", "DD MIX1L", "DD1 MIXL" },
34818c2ecf20Sopenharmony_ci	{ "Mono ADC1 L Mux", "ADC1", "ADC 1" },
34828c2ecf20Sopenharmony_ci	{ "Mono ADC1 L Mux", "MONO DAC MIXL", "Mono DAC MIXL" },
34838c2ecf20Sopenharmony_ci
34848c2ecf20Sopenharmony_ci	{ "Mono ADC1 R Mux", "DD MIX1R", "DD1 MIXR" },
34858c2ecf20Sopenharmony_ci	{ "Mono ADC1 R Mux", "ADC2", "ADC 2" },
34868c2ecf20Sopenharmony_ci	{ "Mono ADC1 R Mux", "MONO DAC MIXR", "Mono DAC MIXR" },
34878c2ecf20Sopenharmony_ci
34888c2ecf20Sopenharmony_ci	{ "Mono ADC2 R Mux", "DD MIX1R", "DD1 MIXR" },
34898c2ecf20Sopenharmony_ci	{ "Mono ADC2 R Mux", "DMIC", "Mono DMIC R Mux" },
34908c2ecf20Sopenharmony_ci	{ "Mono ADC2 R Mux", "MONO DAC MIXR", "Mono DAC MIXR" },
34918c2ecf20Sopenharmony_ci
34928c2ecf20Sopenharmony_ci	{ "Sto1 ADC MIXL", "ADC1 Switch", "Stereo1 ADC1 Mux" },
34938c2ecf20Sopenharmony_ci	{ "Sto1 ADC MIXL", "ADC2 Switch", "Stereo1 ADC2 Mux" },
34948c2ecf20Sopenharmony_ci	{ "Sto1 ADC MIXR", "ADC1 Switch", "Stereo1 ADC1 Mux" },
34958c2ecf20Sopenharmony_ci	{ "Sto1 ADC MIXR", "ADC2 Switch", "Stereo1 ADC2 Mux" },
34968c2ecf20Sopenharmony_ci
34978c2ecf20Sopenharmony_ci	{ "Stereo1 ADC MIXL", NULL, "Sto1 ADC MIXL" },
34988c2ecf20Sopenharmony_ci	{ "Stereo1 ADC MIXL", NULL, "adc stereo1 filter" },
34998c2ecf20Sopenharmony_ci	{ "Stereo1 ADC MIXR", NULL, "Sto1 ADC MIXR" },
35008c2ecf20Sopenharmony_ci	{ "Stereo1 ADC MIXR", NULL, "adc stereo1 filter" },
35018c2ecf20Sopenharmony_ci	{ "adc stereo1 filter", NULL, "PLL1", is_sys_clk_from_pll },
35028c2ecf20Sopenharmony_ci
35038c2ecf20Sopenharmony_ci	{ "Stereo1 ADC MIX", NULL, "Stereo1 ADC MIXL" },
35048c2ecf20Sopenharmony_ci	{ "Stereo1 ADC MIX", NULL, "Stereo1 ADC MIXR" },
35058c2ecf20Sopenharmony_ci
35068c2ecf20Sopenharmony_ci	{ "Sto2 ADC MIXL", "ADC1 Switch", "Stereo2 ADC1 Mux" },
35078c2ecf20Sopenharmony_ci	{ "Sto2 ADC MIXL", "ADC2 Switch", "Stereo2 ADC2 Mux" },
35088c2ecf20Sopenharmony_ci	{ "Sto2 ADC MIXR", "ADC1 Switch", "Stereo2 ADC1 Mux" },
35098c2ecf20Sopenharmony_ci	{ "Sto2 ADC MIXR", "ADC2 Switch", "Stereo2 ADC2 Mux" },
35108c2ecf20Sopenharmony_ci
35118c2ecf20Sopenharmony_ci	{ "Sto2 ADC LR MIX", NULL, "Sto2 ADC MIXL" },
35128c2ecf20Sopenharmony_ci	{ "Sto2 ADC LR MIX", NULL, "Sto2 ADC MIXR" },
35138c2ecf20Sopenharmony_ci
35148c2ecf20Sopenharmony_ci	{ "Stereo2 ADC LR Mux", "L", "Sto2 ADC MIXL" },
35158c2ecf20Sopenharmony_ci	{ "Stereo2 ADC LR Mux", "LR", "Sto2 ADC LR MIX" },
35168c2ecf20Sopenharmony_ci
35178c2ecf20Sopenharmony_ci	{ "Stereo2 ADC MIXL", NULL, "Stereo2 ADC LR Mux" },
35188c2ecf20Sopenharmony_ci	{ "Stereo2 ADC MIXL", NULL, "adc stereo2 filter" },
35198c2ecf20Sopenharmony_ci	{ "Stereo2 ADC MIXR", NULL, "Sto2 ADC MIXR" },
35208c2ecf20Sopenharmony_ci	{ "Stereo2 ADC MIXR", NULL, "adc stereo2 filter" },
35218c2ecf20Sopenharmony_ci	{ "adc stereo2 filter", NULL, "PLL1", is_sys_clk_from_pll },
35228c2ecf20Sopenharmony_ci
35238c2ecf20Sopenharmony_ci	{ "Stereo2 ADC MIX", NULL, "Stereo2 ADC MIXL" },
35248c2ecf20Sopenharmony_ci	{ "Stereo2 ADC MIX", NULL, "Stereo2 ADC MIXR" },
35258c2ecf20Sopenharmony_ci
35268c2ecf20Sopenharmony_ci	{ "Sto3 ADC MIXL", "ADC1 Switch", "Stereo3 ADC1 Mux" },
35278c2ecf20Sopenharmony_ci	{ "Sto3 ADC MIXL", "ADC2 Switch", "Stereo3 ADC2 Mux" },
35288c2ecf20Sopenharmony_ci	{ "Sto3 ADC MIXR", "ADC1 Switch", "Stereo3 ADC1 Mux" },
35298c2ecf20Sopenharmony_ci	{ "Sto3 ADC MIXR", "ADC2 Switch", "Stereo3 ADC2 Mux" },
35308c2ecf20Sopenharmony_ci
35318c2ecf20Sopenharmony_ci	{ "Stereo3 ADC MIXL", NULL, "Sto3 ADC MIXL" },
35328c2ecf20Sopenharmony_ci	{ "Stereo3 ADC MIXL", NULL, "adc stereo3 filter" },
35338c2ecf20Sopenharmony_ci	{ "Stereo3 ADC MIXR", NULL, "Sto3 ADC MIXR" },
35348c2ecf20Sopenharmony_ci	{ "Stereo3 ADC MIXR", NULL, "adc stereo3 filter" },
35358c2ecf20Sopenharmony_ci	{ "adc stereo3 filter", NULL, "PLL1", is_sys_clk_from_pll },
35368c2ecf20Sopenharmony_ci
35378c2ecf20Sopenharmony_ci	{ "Stereo3 ADC MIX", NULL, "Stereo3 ADC MIXL" },
35388c2ecf20Sopenharmony_ci	{ "Stereo3 ADC MIX", NULL, "Stereo3 ADC MIXR" },
35398c2ecf20Sopenharmony_ci
35408c2ecf20Sopenharmony_ci	{ "Sto4 ADC MIXL", "ADC1 Switch", "Stereo4 ADC1 Mux" },
35418c2ecf20Sopenharmony_ci	{ "Sto4 ADC MIXL", "ADC2 Switch", "Stereo4 ADC2 Mux" },
35428c2ecf20Sopenharmony_ci	{ "Sto4 ADC MIXR", "ADC1 Switch", "Stereo4 ADC1 Mux" },
35438c2ecf20Sopenharmony_ci	{ "Sto4 ADC MIXR", "ADC2 Switch", "Stereo4 ADC2 Mux" },
35448c2ecf20Sopenharmony_ci
35458c2ecf20Sopenharmony_ci	{ "Stereo4 ADC MIXL", NULL, "Sto4 ADC MIXL" },
35468c2ecf20Sopenharmony_ci	{ "Stereo4 ADC MIXL", NULL, "adc stereo4 filter" },
35478c2ecf20Sopenharmony_ci	{ "Stereo4 ADC MIXR", NULL, "Sto4 ADC MIXR" },
35488c2ecf20Sopenharmony_ci	{ "Stereo4 ADC MIXR", NULL, "adc stereo4 filter" },
35498c2ecf20Sopenharmony_ci	{ "adc stereo4 filter", NULL, "PLL1", is_sys_clk_from_pll },
35508c2ecf20Sopenharmony_ci
35518c2ecf20Sopenharmony_ci	{ "Stereo4 ADC MIX", NULL, "Stereo4 ADC MIXL" },
35528c2ecf20Sopenharmony_ci	{ "Stereo4 ADC MIX", NULL, "Stereo4 ADC MIXR" },
35538c2ecf20Sopenharmony_ci
35548c2ecf20Sopenharmony_ci	{ "Mono ADC MIXL", "ADC1 Switch", "Mono ADC1 L Mux" },
35558c2ecf20Sopenharmony_ci	{ "Mono ADC MIXL", "ADC2 Switch", "Mono ADC2 L Mux" },
35568c2ecf20Sopenharmony_ci	{ "Mono ADC MIXL", NULL, "adc mono left filter" },
35578c2ecf20Sopenharmony_ci	{ "adc mono left filter", NULL, "PLL1", is_sys_clk_from_pll },
35588c2ecf20Sopenharmony_ci
35598c2ecf20Sopenharmony_ci	{ "Mono ADC MIXR", "ADC1 Switch", "Mono ADC1 R Mux" },
35608c2ecf20Sopenharmony_ci	{ "Mono ADC MIXR", "ADC2 Switch", "Mono ADC2 R Mux" },
35618c2ecf20Sopenharmony_ci	{ "Mono ADC MIXR", NULL, "adc mono right filter" },
35628c2ecf20Sopenharmony_ci	{ "adc mono right filter", NULL, "PLL1", is_sys_clk_from_pll },
35638c2ecf20Sopenharmony_ci
35648c2ecf20Sopenharmony_ci	{ "Mono ADC MIX", NULL, "Mono ADC MIXL" },
35658c2ecf20Sopenharmony_ci	{ "Mono ADC MIX", NULL, "Mono ADC MIXR" },
35668c2ecf20Sopenharmony_ci
35678c2ecf20Sopenharmony_ci	{ "VAD ADC Mux", "STO1 ADC MIX L", "Stereo1 ADC MIXL" },
35688c2ecf20Sopenharmony_ci	{ "VAD ADC Mux", "MONO ADC MIX L", "Mono ADC MIXL" },
35698c2ecf20Sopenharmony_ci	{ "VAD ADC Mux", "MONO ADC MIX R", "Mono ADC MIXR" },
35708c2ecf20Sopenharmony_ci	{ "VAD ADC Mux", "STO2 ADC MIX L", "Stereo2 ADC MIXL" },
35718c2ecf20Sopenharmony_ci	{ "VAD ADC Mux", "STO3 ADC MIX L", "Stereo3 ADC MIXL" },
35728c2ecf20Sopenharmony_ci
35738c2ecf20Sopenharmony_ci	{ "IF1 ADC1 Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
35748c2ecf20Sopenharmony_ci	{ "IF1 ADC1 Mux", "OB01", "OB01 Bypass Mux" },
35758c2ecf20Sopenharmony_ci	{ "IF1 ADC1 Mux", "VAD ADC", "VAD ADC Mux" },
35768c2ecf20Sopenharmony_ci
35778c2ecf20Sopenharmony_ci	{ "IF1 ADC2 Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
35788c2ecf20Sopenharmony_ci	{ "IF1 ADC2 Mux", "OB23", "OB23 Bypass Mux" },
35798c2ecf20Sopenharmony_ci
35808c2ecf20Sopenharmony_ci	{ "IF1 ADC3 Mux", "STO3 ADC MIX", "Stereo3 ADC MIX" },
35818c2ecf20Sopenharmony_ci	{ "IF1 ADC3 Mux", "MONO ADC MIX", "Mono ADC MIX" },
35828c2ecf20Sopenharmony_ci	{ "IF1 ADC3 Mux", "OB45", "OB45" },
35838c2ecf20Sopenharmony_ci
35848c2ecf20Sopenharmony_ci	{ "IF1 ADC4 Mux", "STO4 ADC MIX", "Stereo4 ADC MIX" },
35858c2ecf20Sopenharmony_ci	{ "IF1 ADC4 Mux", "OB67", "OB67" },
35868c2ecf20Sopenharmony_ci	{ "IF1 ADC4 Mux", "OB01", "OB01 Bypass Mux" },
35878c2ecf20Sopenharmony_ci
35888c2ecf20Sopenharmony_ci	{ "IF1 ADC1 Swap Mux", "L/R", "IF1 ADC1 Mux" },
35898c2ecf20Sopenharmony_ci	{ "IF1 ADC1 Swap Mux", "R/L", "IF1 ADC1 Mux" },
35908c2ecf20Sopenharmony_ci	{ "IF1 ADC1 Swap Mux", "L/L", "IF1 ADC1 Mux" },
35918c2ecf20Sopenharmony_ci	{ "IF1 ADC1 Swap Mux", "R/R", "IF1 ADC1 Mux" },
35928c2ecf20Sopenharmony_ci
35938c2ecf20Sopenharmony_ci	{ "IF1 ADC2 Swap Mux", "L/R", "IF1 ADC2 Mux" },
35948c2ecf20Sopenharmony_ci	{ "IF1 ADC2 Swap Mux", "R/L", "IF1 ADC2 Mux" },
35958c2ecf20Sopenharmony_ci	{ "IF1 ADC2 Swap Mux", "L/L", "IF1 ADC2 Mux" },
35968c2ecf20Sopenharmony_ci	{ "IF1 ADC2 Swap Mux", "R/R", "IF1 ADC2 Mux" },
35978c2ecf20Sopenharmony_ci
35988c2ecf20Sopenharmony_ci	{ "IF1 ADC3 Swap Mux", "L/R", "IF1 ADC3 Mux" },
35998c2ecf20Sopenharmony_ci	{ "IF1 ADC3 Swap Mux", "R/L", "IF1 ADC3 Mux" },
36008c2ecf20Sopenharmony_ci	{ "IF1 ADC3 Swap Mux", "L/L", "IF1 ADC3 Mux" },
36018c2ecf20Sopenharmony_ci	{ "IF1 ADC3 Swap Mux", "R/R", "IF1 ADC3 Mux" },
36028c2ecf20Sopenharmony_ci
36038c2ecf20Sopenharmony_ci	{ "IF1 ADC4 Swap Mux", "L/R", "IF1 ADC4 Mux" },
36048c2ecf20Sopenharmony_ci	{ "IF1 ADC4 Swap Mux", "R/L", "IF1 ADC4 Mux" },
36058c2ecf20Sopenharmony_ci	{ "IF1 ADC4 Swap Mux", "L/L", "IF1 ADC4 Mux" },
36068c2ecf20Sopenharmony_ci	{ "IF1 ADC4 Swap Mux", "R/R", "IF1 ADC4 Mux" },
36078c2ecf20Sopenharmony_ci
36088c2ecf20Sopenharmony_ci	{ "IF1 ADC", NULL, "IF1 ADC1 Swap Mux" },
36098c2ecf20Sopenharmony_ci	{ "IF1 ADC", NULL, "IF1 ADC2 Swap Mux" },
36108c2ecf20Sopenharmony_ci	{ "IF1 ADC", NULL, "IF1 ADC3 Swap Mux" },
36118c2ecf20Sopenharmony_ci	{ "IF1 ADC", NULL, "IF1 ADC4 Swap Mux" },
36128c2ecf20Sopenharmony_ci
36138c2ecf20Sopenharmony_ci	{ "IF1 ADC TDM Swap Mux", "1/2/3/4", "IF1 ADC" },
36148c2ecf20Sopenharmony_ci	{ "IF1 ADC TDM Swap Mux", "2/1/3/4", "IF1 ADC" },
36158c2ecf20Sopenharmony_ci	{ "IF1 ADC TDM Swap Mux", "2/3/1/4", "IF1 ADC" },
36168c2ecf20Sopenharmony_ci	{ "IF1 ADC TDM Swap Mux", "4/1/2/3", "IF1 ADC" },
36178c2ecf20Sopenharmony_ci	{ "IF1 ADC TDM Swap Mux", "1/3/2/4", "IF1 ADC" },
36188c2ecf20Sopenharmony_ci	{ "IF1 ADC TDM Swap Mux", "1/4/2/3", "IF1 ADC" },
36198c2ecf20Sopenharmony_ci	{ "IF1 ADC TDM Swap Mux", "3/1/2/4", "IF1 ADC" },
36208c2ecf20Sopenharmony_ci	{ "IF1 ADC TDM Swap Mux", "3/4/1/2", "IF1 ADC" },
36218c2ecf20Sopenharmony_ci
36228c2ecf20Sopenharmony_ci	{ "AIF1TX", NULL, "I2S1" },
36238c2ecf20Sopenharmony_ci	{ "AIF1TX", NULL, "IF1 ADC TDM Swap Mux" },
36248c2ecf20Sopenharmony_ci
36258c2ecf20Sopenharmony_ci	{ "IF2 ADC1 Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
36268c2ecf20Sopenharmony_ci	{ "IF2 ADC1 Mux", "OB01", "OB01 Bypass Mux" },
36278c2ecf20Sopenharmony_ci	{ "IF2 ADC1 Mux", "VAD ADC", "VAD ADC Mux" },
36288c2ecf20Sopenharmony_ci
36298c2ecf20Sopenharmony_ci	{ "IF2 ADC2 Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
36308c2ecf20Sopenharmony_ci	{ "IF2 ADC2 Mux", "OB23", "OB23 Bypass Mux" },
36318c2ecf20Sopenharmony_ci
36328c2ecf20Sopenharmony_ci	{ "IF2 ADC3 Mux", "STO3 ADC MIX", "Stereo3 ADC MIX" },
36338c2ecf20Sopenharmony_ci	{ "IF2 ADC3 Mux", "MONO ADC MIX", "Mono ADC MIX" },
36348c2ecf20Sopenharmony_ci	{ "IF2 ADC3 Mux", "OB45", "OB45" },
36358c2ecf20Sopenharmony_ci
36368c2ecf20Sopenharmony_ci	{ "IF2 ADC4 Mux", "STO4 ADC MIX", "Stereo4 ADC MIX" },
36378c2ecf20Sopenharmony_ci	{ "IF2 ADC4 Mux", "OB67", "OB67" },
36388c2ecf20Sopenharmony_ci	{ "IF2 ADC4 Mux", "OB01", "OB01 Bypass Mux" },
36398c2ecf20Sopenharmony_ci
36408c2ecf20Sopenharmony_ci	{ "IF2 ADC1 Swap Mux", "L/R", "IF2 ADC1 Mux" },
36418c2ecf20Sopenharmony_ci	{ "IF2 ADC1 Swap Mux", "R/L", "IF2 ADC1 Mux" },
36428c2ecf20Sopenharmony_ci	{ "IF2 ADC1 Swap Mux", "L/L", "IF2 ADC1 Mux" },
36438c2ecf20Sopenharmony_ci	{ "IF2 ADC1 Swap Mux", "R/R", "IF2 ADC1 Mux" },
36448c2ecf20Sopenharmony_ci
36458c2ecf20Sopenharmony_ci	{ "IF2 ADC2 Swap Mux", "L/R", "IF2 ADC2 Mux" },
36468c2ecf20Sopenharmony_ci	{ "IF2 ADC2 Swap Mux", "R/L", "IF2 ADC2 Mux" },
36478c2ecf20Sopenharmony_ci	{ "IF2 ADC2 Swap Mux", "L/L", "IF2 ADC2 Mux" },
36488c2ecf20Sopenharmony_ci	{ "IF2 ADC2 Swap Mux", "R/R", "IF2 ADC2 Mux" },
36498c2ecf20Sopenharmony_ci
36508c2ecf20Sopenharmony_ci	{ "IF2 ADC3 Swap Mux", "L/R", "IF2 ADC3 Mux" },
36518c2ecf20Sopenharmony_ci	{ "IF2 ADC3 Swap Mux", "R/L", "IF2 ADC3 Mux" },
36528c2ecf20Sopenharmony_ci	{ "IF2 ADC3 Swap Mux", "L/L", "IF2 ADC3 Mux" },
36538c2ecf20Sopenharmony_ci	{ "IF2 ADC3 Swap Mux", "R/R", "IF2 ADC3 Mux" },
36548c2ecf20Sopenharmony_ci
36558c2ecf20Sopenharmony_ci	{ "IF2 ADC4 Swap Mux", "L/R", "IF2 ADC4 Mux" },
36568c2ecf20Sopenharmony_ci	{ "IF2 ADC4 Swap Mux", "R/L", "IF2 ADC4 Mux" },
36578c2ecf20Sopenharmony_ci	{ "IF2 ADC4 Swap Mux", "L/L", "IF2 ADC4 Mux" },
36588c2ecf20Sopenharmony_ci	{ "IF2 ADC4 Swap Mux", "R/R", "IF2 ADC4 Mux" },
36598c2ecf20Sopenharmony_ci
36608c2ecf20Sopenharmony_ci	{ "IF2 ADC", NULL, "IF2 ADC1 Swap Mux" },
36618c2ecf20Sopenharmony_ci	{ "IF2 ADC", NULL, "IF2 ADC2 Swap Mux" },
36628c2ecf20Sopenharmony_ci	{ "IF2 ADC", NULL, "IF2 ADC3 Swap Mux" },
36638c2ecf20Sopenharmony_ci	{ "IF2 ADC", NULL, "IF2 ADC4 Swap Mux" },
36648c2ecf20Sopenharmony_ci
36658c2ecf20Sopenharmony_ci	{ "IF2 ADC TDM Swap Mux", "1/2/3/4", "IF2 ADC" },
36668c2ecf20Sopenharmony_ci	{ "IF2 ADC TDM Swap Mux", "2/1/3/4", "IF2 ADC" },
36678c2ecf20Sopenharmony_ci	{ "IF2 ADC TDM Swap Mux", "3/1/2/4", "IF2 ADC" },
36688c2ecf20Sopenharmony_ci	{ "IF2 ADC TDM Swap Mux", "4/1/2/3", "IF2 ADC" },
36698c2ecf20Sopenharmony_ci	{ "IF2 ADC TDM Swap Mux", "1/3/2/4", "IF2 ADC" },
36708c2ecf20Sopenharmony_ci	{ "IF2 ADC TDM Swap Mux", "1/4/2/3", "IF2 ADC" },
36718c2ecf20Sopenharmony_ci	{ "IF2 ADC TDM Swap Mux", "2/3/1/4", "IF2 ADC" },
36728c2ecf20Sopenharmony_ci	{ "IF2 ADC TDM Swap Mux", "3/4/1/2", "IF2 ADC" },
36738c2ecf20Sopenharmony_ci
36748c2ecf20Sopenharmony_ci	{ "AIF2TX", NULL, "I2S2" },
36758c2ecf20Sopenharmony_ci	{ "AIF2TX", NULL, "IF2 ADC TDM Swap Mux" },
36768c2ecf20Sopenharmony_ci
36778c2ecf20Sopenharmony_ci	{ "IF3 ADC Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
36788c2ecf20Sopenharmony_ci	{ "IF3 ADC Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
36798c2ecf20Sopenharmony_ci	{ "IF3 ADC Mux", "STO3 ADC MIX", "Stereo3 ADC MIX" },
36808c2ecf20Sopenharmony_ci	{ "IF3 ADC Mux", "STO4 ADC MIX", "Stereo4 ADC MIX" },
36818c2ecf20Sopenharmony_ci	{ "IF3 ADC Mux", "MONO ADC MIX", "Mono ADC MIX" },
36828c2ecf20Sopenharmony_ci	{ "IF3 ADC Mux", "OB01", "OB01 Bypass Mux" },
36838c2ecf20Sopenharmony_ci	{ "IF3 ADC Mux", "OB23", "OB23 Bypass Mux" },
36848c2ecf20Sopenharmony_ci	{ "IF3 ADC Mux", "VAD ADC", "VAD ADC Mux" },
36858c2ecf20Sopenharmony_ci
36868c2ecf20Sopenharmony_ci	{ "AIF3TX", NULL, "I2S3" },
36878c2ecf20Sopenharmony_ci	{ "AIF3TX", NULL, "IF3 ADC Mux" },
36888c2ecf20Sopenharmony_ci
36898c2ecf20Sopenharmony_ci	{ "IF4 ADC Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
36908c2ecf20Sopenharmony_ci	{ "IF4 ADC Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
36918c2ecf20Sopenharmony_ci	{ "IF4 ADC Mux", "STO3 ADC MIX", "Stereo3 ADC MIX" },
36928c2ecf20Sopenharmony_ci	{ "IF4 ADC Mux", "STO4 ADC MIX", "Stereo4 ADC MIX" },
36938c2ecf20Sopenharmony_ci	{ "IF4 ADC Mux", "MONO ADC MIX", "Mono ADC MIX" },
36948c2ecf20Sopenharmony_ci	{ "IF4 ADC Mux", "OB01", "OB01 Bypass Mux" },
36958c2ecf20Sopenharmony_ci	{ "IF4 ADC Mux", "OB23", "OB23 Bypass Mux" },
36968c2ecf20Sopenharmony_ci	{ "IF4 ADC Mux", "VAD ADC", "VAD ADC Mux" },
36978c2ecf20Sopenharmony_ci
36988c2ecf20Sopenharmony_ci	{ "AIF4TX", NULL, "I2S4" },
36998c2ecf20Sopenharmony_ci	{ "AIF4TX", NULL, "IF4 ADC Mux" },
37008c2ecf20Sopenharmony_ci
37018c2ecf20Sopenharmony_ci	{ "SLB ADC1 Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
37028c2ecf20Sopenharmony_ci	{ "SLB ADC1 Mux", "OB01", "OB01 Bypass Mux" },
37038c2ecf20Sopenharmony_ci	{ "SLB ADC1 Mux", "VAD ADC", "VAD ADC Mux" },
37048c2ecf20Sopenharmony_ci
37058c2ecf20Sopenharmony_ci	{ "SLB ADC2 Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
37068c2ecf20Sopenharmony_ci	{ "SLB ADC2 Mux", "OB23", "OB23 Bypass Mux" },
37078c2ecf20Sopenharmony_ci
37088c2ecf20Sopenharmony_ci	{ "SLB ADC3 Mux", "STO3 ADC MIX", "Stereo3 ADC MIX" },
37098c2ecf20Sopenharmony_ci	{ "SLB ADC3 Mux", "MONO ADC MIX", "Mono ADC MIX" },
37108c2ecf20Sopenharmony_ci	{ "SLB ADC3 Mux", "OB45", "OB45" },
37118c2ecf20Sopenharmony_ci
37128c2ecf20Sopenharmony_ci	{ "SLB ADC4 Mux", "STO4 ADC MIX", "Stereo4 ADC MIX" },
37138c2ecf20Sopenharmony_ci	{ "SLB ADC4 Mux", "OB67", "OB67" },
37148c2ecf20Sopenharmony_ci	{ "SLB ADC4 Mux", "OB01", "OB01 Bypass Mux" },
37158c2ecf20Sopenharmony_ci
37168c2ecf20Sopenharmony_ci	{ "SLBTX", NULL, "SLB" },
37178c2ecf20Sopenharmony_ci	{ "SLBTX", NULL, "SLB ADC1 Mux" },
37188c2ecf20Sopenharmony_ci	{ "SLBTX", NULL, "SLB ADC2 Mux" },
37198c2ecf20Sopenharmony_ci	{ "SLBTX", NULL, "SLB ADC3 Mux" },
37208c2ecf20Sopenharmony_ci	{ "SLBTX", NULL, "SLB ADC4 Mux" },
37218c2ecf20Sopenharmony_ci
37228c2ecf20Sopenharmony_ci	{ "DSPTX", NULL, "IB01 Bypass Mux" },
37238c2ecf20Sopenharmony_ci
37248c2ecf20Sopenharmony_ci	{ "IB01 Mux", "IF1 DAC 01", "IF1 DAC01" },
37258c2ecf20Sopenharmony_ci	{ "IB01 Mux", "IF2 DAC 01", "IF2 DAC01" },
37268c2ecf20Sopenharmony_ci	{ "IB01 Mux", "SLB DAC 01", "SLB DAC01" },
37278c2ecf20Sopenharmony_ci	{ "IB01 Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
37288c2ecf20Sopenharmony_ci	/* The IB01 Mux controls the source for InBound0 and InBound1.
37298c2ecf20Sopenharmony_ci	 * When the mux option "VAD ADC/DAC1 FS" is selected, "VAD ADC" goes to
37308c2ecf20Sopenharmony_ci	 * InBound0 and "DAC1 FS" goes to InBound1. "VAD ADC" is used for
37318c2ecf20Sopenharmony_ci	 * hotwording. "DAC1 FS" is not used currently.
37328c2ecf20Sopenharmony_ci	 *
37338c2ecf20Sopenharmony_ci	 * Creating a common widget node for "VAD ADC" + "DAC1 FS" and
37348c2ecf20Sopenharmony_ci	 * connecting the common widget to IB01 Mux causes the issue where
37358c2ecf20Sopenharmony_ci	 * there is an active path going from system playback -> "DAC1 FS" ->
37368c2ecf20Sopenharmony_ci	 * IB01 Mux -> DSP Buffer -> hotword stream. This wrong path confuses
37378c2ecf20Sopenharmony_ci	 * DAPM. Therefore "DAC1 FS" is ignored for now.
37388c2ecf20Sopenharmony_ci	 */
37398c2ecf20Sopenharmony_ci	{ "IB01 Mux", "VAD ADC/DAC1 FS", "VAD ADC Mux" },
37408c2ecf20Sopenharmony_ci
37418c2ecf20Sopenharmony_ci	{ "IB01 Bypass Mux", "Bypass", "IB01 Mux" },
37428c2ecf20Sopenharmony_ci	{ "IB01 Bypass Mux", "Pass SRC", "IB01 Mux" },
37438c2ecf20Sopenharmony_ci
37448c2ecf20Sopenharmony_ci	{ "IB23 Mux", "IF1 DAC 23", "IF1 DAC23" },
37458c2ecf20Sopenharmony_ci	{ "IB23 Mux", "IF2 DAC 23", "IF2 DAC23" },
37468c2ecf20Sopenharmony_ci	{ "IB23 Mux", "SLB DAC 23", "SLB DAC23" },
37478c2ecf20Sopenharmony_ci	{ "IB23 Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
37488c2ecf20Sopenharmony_ci	{ "IB23 Mux", "DAC1 FS", "DAC1 FS" },
37498c2ecf20Sopenharmony_ci	{ "IB23 Mux", "IF4 DAC", "IF4 DAC" },
37508c2ecf20Sopenharmony_ci
37518c2ecf20Sopenharmony_ci	{ "IB23 Bypass Mux", "Bypass", "IB23 Mux" },
37528c2ecf20Sopenharmony_ci	{ "IB23 Bypass Mux", "Pass SRC", "IB23 Mux" },
37538c2ecf20Sopenharmony_ci
37548c2ecf20Sopenharmony_ci	{ "IB45 Mux", "IF1 DAC 45", "IF1 DAC45" },
37558c2ecf20Sopenharmony_ci	{ "IB45 Mux", "IF2 DAC 45", "IF2 DAC45" },
37568c2ecf20Sopenharmony_ci	{ "IB45 Mux", "SLB DAC 45", "SLB DAC45" },
37578c2ecf20Sopenharmony_ci	{ "IB45 Mux", "STO3 ADC MIX", "Stereo3 ADC MIX" },
37588c2ecf20Sopenharmony_ci	{ "IB45 Mux", "IF3 DAC", "IF3 DAC" },
37598c2ecf20Sopenharmony_ci
37608c2ecf20Sopenharmony_ci	{ "IB45 Bypass Mux", "Bypass", "IB45 Mux" },
37618c2ecf20Sopenharmony_ci	{ "IB45 Bypass Mux", "Pass SRC", "IB45 Mux" },
37628c2ecf20Sopenharmony_ci
37638c2ecf20Sopenharmony_ci	{ "IB6 Mux", "IF1 DAC 6", "IF1 DAC6 Mux" },
37648c2ecf20Sopenharmony_ci	{ "IB6 Mux", "IF2 DAC 6", "IF2 DAC6 Mux" },
37658c2ecf20Sopenharmony_ci	{ "IB6 Mux", "SLB DAC 6", "SLB DAC6" },
37668c2ecf20Sopenharmony_ci	{ "IB6 Mux", "STO4 ADC MIX L", "Stereo4 ADC MIXL" },
37678c2ecf20Sopenharmony_ci	{ "IB6 Mux", "IF4 DAC L", "IF4 DAC L" },
37688c2ecf20Sopenharmony_ci	{ "IB6 Mux", "STO1 ADC MIX L", "Stereo1 ADC MIXL" },
37698c2ecf20Sopenharmony_ci	{ "IB6 Mux", "STO2 ADC MIX L", "Stereo2 ADC MIXL" },
37708c2ecf20Sopenharmony_ci	{ "IB6 Mux", "STO3 ADC MIX L", "Stereo3 ADC MIXL" },
37718c2ecf20Sopenharmony_ci
37728c2ecf20Sopenharmony_ci	{ "IB7 Mux", "IF1 DAC 7", "IF1 DAC7 Mux" },
37738c2ecf20Sopenharmony_ci	{ "IB7 Mux", "IF2 DAC 7", "IF2 DAC7 Mux" },
37748c2ecf20Sopenharmony_ci	{ "IB7 Mux", "SLB DAC 7", "SLB DAC7" },
37758c2ecf20Sopenharmony_ci	{ "IB7 Mux", "STO4 ADC MIX R", "Stereo4 ADC MIXR" },
37768c2ecf20Sopenharmony_ci	{ "IB7 Mux", "IF4 DAC R", "IF4 DAC R" },
37778c2ecf20Sopenharmony_ci	{ "IB7 Mux", "STO1 ADC MIX R", "Stereo1 ADC MIXR" },
37788c2ecf20Sopenharmony_ci	{ "IB7 Mux", "STO2 ADC MIX R", "Stereo2 ADC MIXR" },
37798c2ecf20Sopenharmony_ci	{ "IB7 Mux", "STO3 ADC MIX R", "Stereo3 ADC MIXR" },
37808c2ecf20Sopenharmony_ci
37818c2ecf20Sopenharmony_ci	{ "IB8 Mux", "STO1 ADC MIX L", "Stereo1 ADC MIXL" },
37828c2ecf20Sopenharmony_ci	{ "IB8 Mux", "STO2 ADC MIX L", "Stereo2 ADC MIXL" },
37838c2ecf20Sopenharmony_ci	{ "IB8 Mux", "STO3 ADC MIX L", "Stereo3 ADC MIXL" },
37848c2ecf20Sopenharmony_ci	{ "IB8 Mux", "STO4 ADC MIX L", "Stereo4 ADC MIXL" },
37858c2ecf20Sopenharmony_ci	{ "IB8 Mux", "MONO ADC MIX L", "Mono ADC MIXL" },
37868c2ecf20Sopenharmony_ci	{ "IB8 Mux", "DACL1 FS", "DAC1 MIXL" },
37878c2ecf20Sopenharmony_ci
37888c2ecf20Sopenharmony_ci	{ "IB9 Mux", "STO1 ADC MIX R", "Stereo1 ADC MIXR" },
37898c2ecf20Sopenharmony_ci	{ "IB9 Mux", "STO2 ADC MIX R", "Stereo2 ADC MIXR" },
37908c2ecf20Sopenharmony_ci	{ "IB9 Mux", "STO3 ADC MIX R", "Stereo3 ADC MIXR" },
37918c2ecf20Sopenharmony_ci	{ "IB9 Mux", "STO4 ADC MIX R", "Stereo4 ADC MIXR" },
37928c2ecf20Sopenharmony_ci	{ "IB9 Mux", "MONO ADC MIX R", "Mono ADC MIXR" },
37938c2ecf20Sopenharmony_ci	{ "IB9 Mux", "DACR1 FS", "DAC1 MIXR" },
37948c2ecf20Sopenharmony_ci	{ "IB9 Mux", "DAC1 FS", "DAC1 FS" },
37958c2ecf20Sopenharmony_ci
37968c2ecf20Sopenharmony_ci	{ "OB01 MIX", "IB01 Switch", "IB01 Bypass Mux" },
37978c2ecf20Sopenharmony_ci	{ "OB01 MIX", "IB23 Switch", "IB23 Bypass Mux" },
37988c2ecf20Sopenharmony_ci	{ "OB01 MIX", "IB45 Switch", "IB45 Bypass Mux" },
37998c2ecf20Sopenharmony_ci	{ "OB01 MIX", "IB6 Switch", "IB6 Mux" },
38008c2ecf20Sopenharmony_ci	{ "OB01 MIX", "IB7 Switch", "IB7 Mux" },
38018c2ecf20Sopenharmony_ci	{ "OB01 MIX", "IB8 Switch", "IB8 Mux" },
38028c2ecf20Sopenharmony_ci	{ "OB01 MIX", "IB9 Switch", "IB9 Mux" },
38038c2ecf20Sopenharmony_ci
38048c2ecf20Sopenharmony_ci	{ "OB23 MIX", "IB01 Switch", "IB01 Bypass Mux" },
38058c2ecf20Sopenharmony_ci	{ "OB23 MIX", "IB23 Switch", "IB23 Bypass Mux" },
38068c2ecf20Sopenharmony_ci	{ "OB23 MIX", "IB45 Switch", "IB45 Bypass Mux" },
38078c2ecf20Sopenharmony_ci	{ "OB23 MIX", "IB6 Switch", "IB6 Mux" },
38088c2ecf20Sopenharmony_ci	{ "OB23 MIX", "IB7 Switch", "IB7 Mux" },
38098c2ecf20Sopenharmony_ci	{ "OB23 MIX", "IB8 Switch", "IB8 Mux" },
38108c2ecf20Sopenharmony_ci	{ "OB23 MIX", "IB9 Switch", "IB9 Mux" },
38118c2ecf20Sopenharmony_ci
38128c2ecf20Sopenharmony_ci	{ "OB4 MIX", "IB01 Switch", "IB01 Bypass Mux" },
38138c2ecf20Sopenharmony_ci	{ "OB4 MIX", "IB23 Switch", "IB23 Bypass Mux" },
38148c2ecf20Sopenharmony_ci	{ "OB4 MIX", "IB45 Switch", "IB45 Bypass Mux" },
38158c2ecf20Sopenharmony_ci	{ "OB4 MIX", "IB6 Switch", "IB6 Mux" },
38168c2ecf20Sopenharmony_ci	{ "OB4 MIX", "IB7 Switch", "IB7 Mux" },
38178c2ecf20Sopenharmony_ci	{ "OB4 MIX", "IB8 Switch", "IB8 Mux" },
38188c2ecf20Sopenharmony_ci	{ "OB4 MIX", "IB9 Switch", "IB9 Mux" },
38198c2ecf20Sopenharmony_ci
38208c2ecf20Sopenharmony_ci	{ "OB5 MIX", "IB01 Switch", "IB01 Bypass Mux" },
38218c2ecf20Sopenharmony_ci	{ "OB5 MIX", "IB23 Switch", "IB23 Bypass Mux" },
38228c2ecf20Sopenharmony_ci	{ "OB5 MIX", "IB45 Switch", "IB45 Bypass Mux" },
38238c2ecf20Sopenharmony_ci	{ "OB5 MIX", "IB6 Switch", "IB6 Mux" },
38248c2ecf20Sopenharmony_ci	{ "OB5 MIX", "IB7 Switch", "IB7 Mux" },
38258c2ecf20Sopenharmony_ci	{ "OB5 MIX", "IB8 Switch", "IB8 Mux" },
38268c2ecf20Sopenharmony_ci	{ "OB5 MIX", "IB9 Switch", "IB9 Mux" },
38278c2ecf20Sopenharmony_ci
38288c2ecf20Sopenharmony_ci	{ "OB6 MIX", "IB01 Switch", "IB01 Bypass Mux" },
38298c2ecf20Sopenharmony_ci	{ "OB6 MIX", "IB23 Switch", "IB23 Bypass Mux" },
38308c2ecf20Sopenharmony_ci	{ "OB6 MIX", "IB45 Switch", "IB45 Bypass Mux" },
38318c2ecf20Sopenharmony_ci	{ "OB6 MIX", "IB6 Switch", "IB6 Mux" },
38328c2ecf20Sopenharmony_ci	{ "OB6 MIX", "IB7 Switch", "IB7 Mux" },
38338c2ecf20Sopenharmony_ci	{ "OB6 MIX", "IB8 Switch", "IB8 Mux" },
38348c2ecf20Sopenharmony_ci	{ "OB6 MIX", "IB9 Switch", "IB9 Mux" },
38358c2ecf20Sopenharmony_ci
38368c2ecf20Sopenharmony_ci	{ "OB7 MIX", "IB01 Switch", "IB01 Bypass Mux" },
38378c2ecf20Sopenharmony_ci	{ "OB7 MIX", "IB23 Switch", "IB23 Bypass Mux" },
38388c2ecf20Sopenharmony_ci	{ "OB7 MIX", "IB45 Switch", "IB45 Bypass Mux" },
38398c2ecf20Sopenharmony_ci	{ "OB7 MIX", "IB6 Switch", "IB6 Mux" },
38408c2ecf20Sopenharmony_ci	{ "OB7 MIX", "IB7 Switch", "IB7 Mux" },
38418c2ecf20Sopenharmony_ci	{ "OB7 MIX", "IB8 Switch", "IB8 Mux" },
38428c2ecf20Sopenharmony_ci	{ "OB7 MIX", "IB9 Switch", "IB9 Mux" },
38438c2ecf20Sopenharmony_ci
38448c2ecf20Sopenharmony_ci	{ "OB01 Bypass Mux", "Bypass", "OB01 MIX" },
38458c2ecf20Sopenharmony_ci	{ "OB01 Bypass Mux", "Pass SRC", "OB01 MIX" },
38468c2ecf20Sopenharmony_ci	{ "OB23 Bypass Mux", "Bypass", "OB23 MIX" },
38478c2ecf20Sopenharmony_ci	{ "OB23 Bypass Mux", "Pass SRC", "OB23 MIX" },
38488c2ecf20Sopenharmony_ci
38498c2ecf20Sopenharmony_ci	{ "OutBound2", NULL, "OB23 Bypass Mux" },
38508c2ecf20Sopenharmony_ci	{ "OutBound3", NULL, "OB23 Bypass Mux" },
38518c2ecf20Sopenharmony_ci	{ "OutBound4", NULL, "OB4 MIX" },
38528c2ecf20Sopenharmony_ci	{ "OutBound5", NULL, "OB5 MIX" },
38538c2ecf20Sopenharmony_ci	{ "OutBound6", NULL, "OB6 MIX" },
38548c2ecf20Sopenharmony_ci	{ "OutBound7", NULL, "OB7 MIX" },
38558c2ecf20Sopenharmony_ci
38568c2ecf20Sopenharmony_ci	{ "OB45", NULL, "OutBound4" },
38578c2ecf20Sopenharmony_ci	{ "OB45", NULL, "OutBound5" },
38588c2ecf20Sopenharmony_ci	{ "OB67", NULL, "OutBound6" },
38598c2ecf20Sopenharmony_ci	{ "OB67", NULL, "OutBound7" },
38608c2ecf20Sopenharmony_ci
38618c2ecf20Sopenharmony_ci	{ "IF1 DAC0", NULL, "AIF1RX" },
38628c2ecf20Sopenharmony_ci	{ "IF1 DAC1", NULL, "AIF1RX" },
38638c2ecf20Sopenharmony_ci	{ "IF1 DAC2", NULL, "AIF1RX" },
38648c2ecf20Sopenharmony_ci	{ "IF1 DAC3", NULL, "AIF1RX" },
38658c2ecf20Sopenharmony_ci	{ "IF1 DAC4", NULL, "AIF1RX" },
38668c2ecf20Sopenharmony_ci	{ "IF1 DAC5", NULL, "AIF1RX" },
38678c2ecf20Sopenharmony_ci	{ "IF1 DAC6", NULL, "AIF1RX" },
38688c2ecf20Sopenharmony_ci	{ "IF1 DAC7", NULL, "AIF1RX" },
38698c2ecf20Sopenharmony_ci	{ "IF1 DAC0", NULL, "I2S1" },
38708c2ecf20Sopenharmony_ci	{ "IF1 DAC1", NULL, "I2S1" },
38718c2ecf20Sopenharmony_ci	{ "IF1 DAC2", NULL, "I2S1" },
38728c2ecf20Sopenharmony_ci	{ "IF1 DAC3", NULL, "I2S1" },
38738c2ecf20Sopenharmony_ci	{ "IF1 DAC4", NULL, "I2S1" },
38748c2ecf20Sopenharmony_ci	{ "IF1 DAC5", NULL, "I2S1" },
38758c2ecf20Sopenharmony_ci	{ "IF1 DAC6", NULL, "I2S1" },
38768c2ecf20Sopenharmony_ci	{ "IF1 DAC7", NULL, "I2S1" },
38778c2ecf20Sopenharmony_ci
38788c2ecf20Sopenharmony_ci	{ "IF1 DAC0 Mux", "Slot0", "IF1 DAC0" },
38798c2ecf20Sopenharmony_ci	{ "IF1 DAC0 Mux", "Slot1", "IF1 DAC1" },
38808c2ecf20Sopenharmony_ci	{ "IF1 DAC0 Mux", "Slot2", "IF1 DAC2" },
38818c2ecf20Sopenharmony_ci	{ "IF1 DAC0 Mux", "Slot3", "IF1 DAC3" },
38828c2ecf20Sopenharmony_ci	{ "IF1 DAC0 Mux", "Slot4", "IF1 DAC4" },
38838c2ecf20Sopenharmony_ci	{ "IF1 DAC0 Mux", "Slot5", "IF1 DAC5" },
38848c2ecf20Sopenharmony_ci	{ "IF1 DAC0 Mux", "Slot6", "IF1 DAC6" },
38858c2ecf20Sopenharmony_ci	{ "IF1 DAC0 Mux", "Slot7", "IF1 DAC7" },
38868c2ecf20Sopenharmony_ci
38878c2ecf20Sopenharmony_ci	{ "IF1 DAC1 Mux", "Slot0", "IF1 DAC0" },
38888c2ecf20Sopenharmony_ci	{ "IF1 DAC1 Mux", "Slot1", "IF1 DAC1" },
38898c2ecf20Sopenharmony_ci	{ "IF1 DAC1 Mux", "Slot2", "IF1 DAC2" },
38908c2ecf20Sopenharmony_ci	{ "IF1 DAC1 Mux", "Slot3", "IF1 DAC3" },
38918c2ecf20Sopenharmony_ci	{ "IF1 DAC1 Mux", "Slot4", "IF1 DAC4" },
38928c2ecf20Sopenharmony_ci	{ "IF1 DAC1 Mux", "Slot5", "IF1 DAC5" },
38938c2ecf20Sopenharmony_ci	{ "IF1 DAC1 Mux", "Slot6", "IF1 DAC6" },
38948c2ecf20Sopenharmony_ci	{ "IF1 DAC1 Mux", "Slot7", "IF1 DAC7" },
38958c2ecf20Sopenharmony_ci
38968c2ecf20Sopenharmony_ci	{ "IF1 DAC2 Mux", "Slot0", "IF1 DAC0" },
38978c2ecf20Sopenharmony_ci	{ "IF1 DAC2 Mux", "Slot1", "IF1 DAC1" },
38988c2ecf20Sopenharmony_ci	{ "IF1 DAC2 Mux", "Slot2", "IF1 DAC2" },
38998c2ecf20Sopenharmony_ci	{ "IF1 DAC2 Mux", "Slot3", "IF1 DAC3" },
39008c2ecf20Sopenharmony_ci	{ "IF1 DAC2 Mux", "Slot4", "IF1 DAC4" },
39018c2ecf20Sopenharmony_ci	{ "IF1 DAC2 Mux", "Slot5", "IF1 DAC5" },
39028c2ecf20Sopenharmony_ci	{ "IF1 DAC2 Mux", "Slot6", "IF1 DAC6" },
39038c2ecf20Sopenharmony_ci	{ "IF1 DAC2 Mux", "Slot7", "IF1 DAC7" },
39048c2ecf20Sopenharmony_ci
39058c2ecf20Sopenharmony_ci	{ "IF1 DAC3 Mux", "Slot0", "IF1 DAC0" },
39068c2ecf20Sopenharmony_ci	{ "IF1 DAC3 Mux", "Slot1", "IF1 DAC1" },
39078c2ecf20Sopenharmony_ci	{ "IF1 DAC3 Mux", "Slot2", "IF1 DAC2" },
39088c2ecf20Sopenharmony_ci	{ "IF1 DAC3 Mux", "Slot3", "IF1 DAC3" },
39098c2ecf20Sopenharmony_ci	{ "IF1 DAC3 Mux", "Slot4", "IF1 DAC4" },
39108c2ecf20Sopenharmony_ci	{ "IF1 DAC3 Mux", "Slot5", "IF1 DAC5" },
39118c2ecf20Sopenharmony_ci	{ "IF1 DAC3 Mux", "Slot6", "IF1 DAC6" },
39128c2ecf20Sopenharmony_ci	{ "IF1 DAC3 Mux", "Slot7", "IF1 DAC7" },
39138c2ecf20Sopenharmony_ci
39148c2ecf20Sopenharmony_ci	{ "IF1 DAC4 Mux", "Slot0", "IF1 DAC0" },
39158c2ecf20Sopenharmony_ci	{ "IF1 DAC4 Mux", "Slot1", "IF1 DAC1" },
39168c2ecf20Sopenharmony_ci	{ "IF1 DAC4 Mux", "Slot2", "IF1 DAC2" },
39178c2ecf20Sopenharmony_ci	{ "IF1 DAC4 Mux", "Slot3", "IF1 DAC3" },
39188c2ecf20Sopenharmony_ci	{ "IF1 DAC4 Mux", "Slot4", "IF1 DAC4" },
39198c2ecf20Sopenharmony_ci	{ "IF1 DAC4 Mux", "Slot5", "IF1 DAC5" },
39208c2ecf20Sopenharmony_ci	{ "IF1 DAC4 Mux", "Slot6", "IF1 DAC6" },
39218c2ecf20Sopenharmony_ci	{ "IF1 DAC4 Mux", "Slot7", "IF1 DAC7" },
39228c2ecf20Sopenharmony_ci
39238c2ecf20Sopenharmony_ci	{ "IF1 DAC5 Mux", "Slot0", "IF1 DAC0" },
39248c2ecf20Sopenharmony_ci	{ "IF1 DAC5 Mux", "Slot1", "IF1 DAC1" },
39258c2ecf20Sopenharmony_ci	{ "IF1 DAC5 Mux", "Slot2", "IF1 DAC2" },
39268c2ecf20Sopenharmony_ci	{ "IF1 DAC5 Mux", "Slot3", "IF1 DAC3" },
39278c2ecf20Sopenharmony_ci	{ "IF1 DAC5 Mux", "Slot4", "IF1 DAC4" },
39288c2ecf20Sopenharmony_ci	{ "IF1 DAC5 Mux", "Slot5", "IF1 DAC5" },
39298c2ecf20Sopenharmony_ci	{ "IF1 DAC5 Mux", "Slot6", "IF1 DAC6" },
39308c2ecf20Sopenharmony_ci	{ "IF1 DAC5 Mux", "Slot7", "IF1 DAC7" },
39318c2ecf20Sopenharmony_ci
39328c2ecf20Sopenharmony_ci	{ "IF1 DAC6 Mux", "Slot0", "IF1 DAC0" },
39338c2ecf20Sopenharmony_ci	{ "IF1 DAC6 Mux", "Slot1", "IF1 DAC1" },
39348c2ecf20Sopenharmony_ci	{ "IF1 DAC6 Mux", "Slot2", "IF1 DAC2" },
39358c2ecf20Sopenharmony_ci	{ "IF1 DAC6 Mux", "Slot3", "IF1 DAC3" },
39368c2ecf20Sopenharmony_ci	{ "IF1 DAC6 Mux", "Slot4", "IF1 DAC4" },
39378c2ecf20Sopenharmony_ci	{ "IF1 DAC6 Mux", "Slot5", "IF1 DAC5" },
39388c2ecf20Sopenharmony_ci	{ "IF1 DAC6 Mux", "Slot6", "IF1 DAC6" },
39398c2ecf20Sopenharmony_ci	{ "IF1 DAC6 Mux", "Slot7", "IF1 DAC7" },
39408c2ecf20Sopenharmony_ci
39418c2ecf20Sopenharmony_ci	{ "IF1 DAC7 Mux", "Slot0", "IF1 DAC0" },
39428c2ecf20Sopenharmony_ci	{ "IF1 DAC7 Mux", "Slot1", "IF1 DAC1" },
39438c2ecf20Sopenharmony_ci	{ "IF1 DAC7 Mux", "Slot2", "IF1 DAC2" },
39448c2ecf20Sopenharmony_ci	{ "IF1 DAC7 Mux", "Slot3", "IF1 DAC3" },
39458c2ecf20Sopenharmony_ci	{ "IF1 DAC7 Mux", "Slot4", "IF1 DAC4" },
39468c2ecf20Sopenharmony_ci	{ "IF1 DAC7 Mux", "Slot5", "IF1 DAC5" },
39478c2ecf20Sopenharmony_ci	{ "IF1 DAC7 Mux", "Slot6", "IF1 DAC6" },
39488c2ecf20Sopenharmony_ci	{ "IF1 DAC7 Mux", "Slot7", "IF1 DAC7" },
39498c2ecf20Sopenharmony_ci
39508c2ecf20Sopenharmony_ci	{ "IF1 DAC01", NULL, "IF1 DAC0 Mux" },
39518c2ecf20Sopenharmony_ci	{ "IF1 DAC01", NULL, "IF1 DAC1 Mux" },
39528c2ecf20Sopenharmony_ci	{ "IF1 DAC23", NULL, "IF1 DAC2 Mux" },
39538c2ecf20Sopenharmony_ci	{ "IF1 DAC23", NULL, "IF1 DAC3 Mux" },
39548c2ecf20Sopenharmony_ci	{ "IF1 DAC45", NULL, "IF1 DAC4 Mux" },
39558c2ecf20Sopenharmony_ci	{ "IF1 DAC45", NULL, "IF1 DAC5 Mux" },
39568c2ecf20Sopenharmony_ci	{ "IF1 DAC67", NULL, "IF1 DAC6 Mux" },
39578c2ecf20Sopenharmony_ci	{ "IF1 DAC67", NULL, "IF1 DAC7 Mux" },
39588c2ecf20Sopenharmony_ci
39598c2ecf20Sopenharmony_ci	{ "IF2 DAC0", NULL, "AIF2RX" },
39608c2ecf20Sopenharmony_ci	{ "IF2 DAC1", NULL, "AIF2RX" },
39618c2ecf20Sopenharmony_ci	{ "IF2 DAC2", NULL, "AIF2RX" },
39628c2ecf20Sopenharmony_ci	{ "IF2 DAC3", NULL, "AIF2RX" },
39638c2ecf20Sopenharmony_ci	{ "IF2 DAC4", NULL, "AIF2RX" },
39648c2ecf20Sopenharmony_ci	{ "IF2 DAC5", NULL, "AIF2RX" },
39658c2ecf20Sopenharmony_ci	{ "IF2 DAC6", NULL, "AIF2RX" },
39668c2ecf20Sopenharmony_ci	{ "IF2 DAC7", NULL, "AIF2RX" },
39678c2ecf20Sopenharmony_ci	{ "IF2 DAC0", NULL, "I2S2" },
39688c2ecf20Sopenharmony_ci	{ "IF2 DAC1", NULL, "I2S2" },
39698c2ecf20Sopenharmony_ci	{ "IF2 DAC2", NULL, "I2S2" },
39708c2ecf20Sopenharmony_ci	{ "IF2 DAC3", NULL, "I2S2" },
39718c2ecf20Sopenharmony_ci	{ "IF2 DAC4", NULL, "I2S2" },
39728c2ecf20Sopenharmony_ci	{ "IF2 DAC5", NULL, "I2S2" },
39738c2ecf20Sopenharmony_ci	{ "IF2 DAC6", NULL, "I2S2" },
39748c2ecf20Sopenharmony_ci	{ "IF2 DAC7", NULL, "I2S2" },
39758c2ecf20Sopenharmony_ci
39768c2ecf20Sopenharmony_ci	{ "IF2 DAC0 Mux", "Slot0", "IF2 DAC0" },
39778c2ecf20Sopenharmony_ci	{ "IF2 DAC0 Mux", "Slot1", "IF2 DAC1" },
39788c2ecf20Sopenharmony_ci	{ "IF2 DAC0 Mux", "Slot2", "IF2 DAC2" },
39798c2ecf20Sopenharmony_ci	{ "IF2 DAC0 Mux", "Slot3", "IF2 DAC3" },
39808c2ecf20Sopenharmony_ci	{ "IF2 DAC0 Mux", "Slot4", "IF2 DAC4" },
39818c2ecf20Sopenharmony_ci	{ "IF2 DAC0 Mux", "Slot5", "IF2 DAC5" },
39828c2ecf20Sopenharmony_ci	{ "IF2 DAC0 Mux", "Slot6", "IF2 DAC6" },
39838c2ecf20Sopenharmony_ci	{ "IF2 DAC0 Mux", "Slot7", "IF2 DAC7" },
39848c2ecf20Sopenharmony_ci
39858c2ecf20Sopenharmony_ci	{ "IF2 DAC1 Mux", "Slot0", "IF2 DAC0" },
39868c2ecf20Sopenharmony_ci	{ "IF2 DAC1 Mux", "Slot1", "IF2 DAC1" },
39878c2ecf20Sopenharmony_ci	{ "IF2 DAC1 Mux", "Slot2", "IF2 DAC2" },
39888c2ecf20Sopenharmony_ci	{ "IF2 DAC1 Mux", "Slot3", "IF2 DAC3" },
39898c2ecf20Sopenharmony_ci	{ "IF2 DAC1 Mux", "Slot4", "IF2 DAC4" },
39908c2ecf20Sopenharmony_ci	{ "IF2 DAC1 Mux", "Slot5", "IF2 DAC5" },
39918c2ecf20Sopenharmony_ci	{ "IF2 DAC1 Mux", "Slot6", "IF2 DAC6" },
39928c2ecf20Sopenharmony_ci	{ "IF2 DAC1 Mux", "Slot7", "IF2 DAC7" },
39938c2ecf20Sopenharmony_ci
39948c2ecf20Sopenharmony_ci	{ "IF2 DAC2 Mux", "Slot0", "IF2 DAC0" },
39958c2ecf20Sopenharmony_ci	{ "IF2 DAC2 Mux", "Slot1", "IF2 DAC1" },
39968c2ecf20Sopenharmony_ci	{ "IF2 DAC2 Mux", "Slot2", "IF2 DAC2" },
39978c2ecf20Sopenharmony_ci	{ "IF2 DAC2 Mux", "Slot3", "IF2 DAC3" },
39988c2ecf20Sopenharmony_ci	{ "IF2 DAC2 Mux", "Slot4", "IF2 DAC4" },
39998c2ecf20Sopenharmony_ci	{ "IF2 DAC2 Mux", "Slot5", "IF2 DAC5" },
40008c2ecf20Sopenharmony_ci	{ "IF2 DAC2 Mux", "Slot6", "IF2 DAC6" },
40018c2ecf20Sopenharmony_ci	{ "IF2 DAC2 Mux", "Slot7", "IF2 DAC7" },
40028c2ecf20Sopenharmony_ci
40038c2ecf20Sopenharmony_ci	{ "IF2 DAC3 Mux", "Slot0", "IF2 DAC0" },
40048c2ecf20Sopenharmony_ci	{ "IF2 DAC3 Mux", "Slot1", "IF2 DAC1" },
40058c2ecf20Sopenharmony_ci	{ "IF2 DAC3 Mux", "Slot2", "IF2 DAC2" },
40068c2ecf20Sopenharmony_ci	{ "IF2 DAC3 Mux", "Slot3", "IF2 DAC3" },
40078c2ecf20Sopenharmony_ci	{ "IF2 DAC3 Mux", "Slot4", "IF2 DAC4" },
40088c2ecf20Sopenharmony_ci	{ "IF2 DAC3 Mux", "Slot5", "IF2 DAC5" },
40098c2ecf20Sopenharmony_ci	{ "IF2 DAC3 Mux", "Slot6", "IF2 DAC6" },
40108c2ecf20Sopenharmony_ci	{ "IF2 DAC3 Mux", "Slot7", "IF2 DAC7" },
40118c2ecf20Sopenharmony_ci
40128c2ecf20Sopenharmony_ci	{ "IF2 DAC4 Mux", "Slot0", "IF2 DAC0" },
40138c2ecf20Sopenharmony_ci	{ "IF2 DAC4 Mux", "Slot1", "IF2 DAC1" },
40148c2ecf20Sopenharmony_ci	{ "IF2 DAC4 Mux", "Slot2", "IF2 DAC2" },
40158c2ecf20Sopenharmony_ci	{ "IF2 DAC4 Mux", "Slot3", "IF2 DAC3" },
40168c2ecf20Sopenharmony_ci	{ "IF2 DAC4 Mux", "Slot4", "IF2 DAC4" },
40178c2ecf20Sopenharmony_ci	{ "IF2 DAC4 Mux", "Slot5", "IF2 DAC5" },
40188c2ecf20Sopenharmony_ci	{ "IF2 DAC4 Mux", "Slot6", "IF2 DAC6" },
40198c2ecf20Sopenharmony_ci	{ "IF2 DAC4 Mux", "Slot7", "IF2 DAC7" },
40208c2ecf20Sopenharmony_ci
40218c2ecf20Sopenharmony_ci	{ "IF2 DAC5 Mux", "Slot0", "IF2 DAC0" },
40228c2ecf20Sopenharmony_ci	{ "IF2 DAC5 Mux", "Slot1", "IF2 DAC1" },
40238c2ecf20Sopenharmony_ci	{ "IF2 DAC5 Mux", "Slot2", "IF2 DAC2" },
40248c2ecf20Sopenharmony_ci	{ "IF2 DAC5 Mux", "Slot3", "IF2 DAC3" },
40258c2ecf20Sopenharmony_ci	{ "IF2 DAC5 Mux", "Slot4", "IF2 DAC4" },
40268c2ecf20Sopenharmony_ci	{ "IF2 DAC5 Mux", "Slot5", "IF2 DAC5" },
40278c2ecf20Sopenharmony_ci	{ "IF2 DAC5 Mux", "Slot6", "IF2 DAC6" },
40288c2ecf20Sopenharmony_ci	{ "IF2 DAC5 Mux", "Slot7", "IF2 DAC7" },
40298c2ecf20Sopenharmony_ci
40308c2ecf20Sopenharmony_ci	{ "IF2 DAC6 Mux", "Slot0", "IF2 DAC0" },
40318c2ecf20Sopenharmony_ci	{ "IF2 DAC6 Mux", "Slot1", "IF2 DAC1" },
40328c2ecf20Sopenharmony_ci	{ "IF2 DAC6 Mux", "Slot2", "IF2 DAC2" },
40338c2ecf20Sopenharmony_ci	{ "IF2 DAC6 Mux", "Slot3", "IF2 DAC3" },
40348c2ecf20Sopenharmony_ci	{ "IF2 DAC6 Mux", "Slot4", "IF2 DAC4" },
40358c2ecf20Sopenharmony_ci	{ "IF2 DAC6 Mux", "Slot5", "IF2 DAC5" },
40368c2ecf20Sopenharmony_ci	{ "IF2 DAC6 Mux", "Slot6", "IF2 DAC6" },
40378c2ecf20Sopenharmony_ci	{ "IF2 DAC6 Mux", "Slot7", "IF2 DAC7" },
40388c2ecf20Sopenharmony_ci
40398c2ecf20Sopenharmony_ci	{ "IF2 DAC7 Mux", "Slot0", "IF2 DAC0" },
40408c2ecf20Sopenharmony_ci	{ "IF2 DAC7 Mux", "Slot1", "IF2 DAC1" },
40418c2ecf20Sopenharmony_ci	{ "IF2 DAC7 Mux", "Slot2", "IF2 DAC2" },
40428c2ecf20Sopenharmony_ci	{ "IF2 DAC7 Mux", "Slot3", "IF2 DAC3" },
40438c2ecf20Sopenharmony_ci	{ "IF2 DAC7 Mux", "Slot4", "IF2 DAC4" },
40448c2ecf20Sopenharmony_ci	{ "IF2 DAC7 Mux", "Slot5", "IF2 DAC5" },
40458c2ecf20Sopenharmony_ci	{ "IF2 DAC7 Mux", "Slot6", "IF2 DAC6" },
40468c2ecf20Sopenharmony_ci	{ "IF2 DAC7 Mux", "Slot7", "IF2 DAC7" },
40478c2ecf20Sopenharmony_ci
40488c2ecf20Sopenharmony_ci	{ "IF2 DAC01", NULL, "IF2 DAC0 Mux" },
40498c2ecf20Sopenharmony_ci	{ "IF2 DAC01", NULL, "IF2 DAC1 Mux" },
40508c2ecf20Sopenharmony_ci	{ "IF2 DAC23", NULL, "IF2 DAC2 Mux" },
40518c2ecf20Sopenharmony_ci	{ "IF2 DAC23", NULL, "IF2 DAC3 Mux" },
40528c2ecf20Sopenharmony_ci	{ "IF2 DAC45", NULL, "IF2 DAC4 Mux" },
40538c2ecf20Sopenharmony_ci	{ "IF2 DAC45", NULL, "IF2 DAC5 Mux" },
40548c2ecf20Sopenharmony_ci	{ "IF2 DAC67", NULL, "IF2 DAC6 Mux" },
40558c2ecf20Sopenharmony_ci	{ "IF2 DAC67", NULL, "IF2 DAC7 Mux" },
40568c2ecf20Sopenharmony_ci
40578c2ecf20Sopenharmony_ci	{ "IF3 DAC", NULL, "AIF3RX" },
40588c2ecf20Sopenharmony_ci	{ "IF3 DAC", NULL, "I2S3" },
40598c2ecf20Sopenharmony_ci
40608c2ecf20Sopenharmony_ci	{ "IF4 DAC", NULL, "AIF4RX" },
40618c2ecf20Sopenharmony_ci	{ "IF4 DAC", NULL, "I2S4" },
40628c2ecf20Sopenharmony_ci
40638c2ecf20Sopenharmony_ci	{ "IF3 DAC L", NULL, "IF3 DAC" },
40648c2ecf20Sopenharmony_ci	{ "IF3 DAC R", NULL, "IF3 DAC" },
40658c2ecf20Sopenharmony_ci
40668c2ecf20Sopenharmony_ci	{ "IF4 DAC L", NULL, "IF4 DAC" },
40678c2ecf20Sopenharmony_ci	{ "IF4 DAC R", NULL, "IF4 DAC" },
40688c2ecf20Sopenharmony_ci
40698c2ecf20Sopenharmony_ci	{ "SLB DAC0", NULL, "SLBRX" },
40708c2ecf20Sopenharmony_ci	{ "SLB DAC1", NULL, "SLBRX" },
40718c2ecf20Sopenharmony_ci	{ "SLB DAC2", NULL, "SLBRX" },
40728c2ecf20Sopenharmony_ci	{ "SLB DAC3", NULL, "SLBRX" },
40738c2ecf20Sopenharmony_ci	{ "SLB DAC4", NULL, "SLBRX" },
40748c2ecf20Sopenharmony_ci	{ "SLB DAC5", NULL, "SLBRX" },
40758c2ecf20Sopenharmony_ci	{ "SLB DAC6", NULL, "SLBRX" },
40768c2ecf20Sopenharmony_ci	{ "SLB DAC7", NULL, "SLBRX" },
40778c2ecf20Sopenharmony_ci	{ "SLB DAC0", NULL, "SLB" },
40788c2ecf20Sopenharmony_ci	{ "SLB DAC1", NULL, "SLB" },
40798c2ecf20Sopenharmony_ci	{ "SLB DAC2", NULL, "SLB" },
40808c2ecf20Sopenharmony_ci	{ "SLB DAC3", NULL, "SLB" },
40818c2ecf20Sopenharmony_ci	{ "SLB DAC4", NULL, "SLB" },
40828c2ecf20Sopenharmony_ci	{ "SLB DAC5", NULL, "SLB" },
40838c2ecf20Sopenharmony_ci	{ "SLB DAC6", NULL, "SLB" },
40848c2ecf20Sopenharmony_ci	{ "SLB DAC7", NULL, "SLB" },
40858c2ecf20Sopenharmony_ci
40868c2ecf20Sopenharmony_ci	{ "SLB DAC01", NULL, "SLB DAC0" },
40878c2ecf20Sopenharmony_ci	{ "SLB DAC01", NULL, "SLB DAC1" },
40888c2ecf20Sopenharmony_ci	{ "SLB DAC23", NULL, "SLB DAC2" },
40898c2ecf20Sopenharmony_ci	{ "SLB DAC23", NULL, "SLB DAC3" },
40908c2ecf20Sopenharmony_ci	{ "SLB DAC45", NULL, "SLB DAC4" },
40918c2ecf20Sopenharmony_ci	{ "SLB DAC45", NULL, "SLB DAC5" },
40928c2ecf20Sopenharmony_ci	{ "SLB DAC67", NULL, "SLB DAC6" },
40938c2ecf20Sopenharmony_ci	{ "SLB DAC67", NULL, "SLB DAC7" },
40948c2ecf20Sopenharmony_ci
40958c2ecf20Sopenharmony_ci	{ "ADDA1 Mux", "STO1 ADC MIX", "Stereo1 ADC MIX" },
40968c2ecf20Sopenharmony_ci	{ "ADDA1 Mux", "STO2 ADC MIX", "Stereo2 ADC MIX" },
40978c2ecf20Sopenharmony_ci	{ "ADDA1 Mux", "OB 67", "OB67" },
40988c2ecf20Sopenharmony_ci
40998c2ecf20Sopenharmony_ci	{ "DAC1 Mux", "IF1 DAC 01", "IF1 DAC01" },
41008c2ecf20Sopenharmony_ci	{ "DAC1 Mux", "IF2 DAC 01", "IF2 DAC01" },
41018c2ecf20Sopenharmony_ci	{ "DAC1 Mux", "IF3 DAC LR", "IF3 DAC" },
41028c2ecf20Sopenharmony_ci	{ "DAC1 Mux", "IF4 DAC LR", "IF4 DAC" },
41038c2ecf20Sopenharmony_ci	{ "DAC1 Mux", "SLB DAC 01", "SLB DAC01" },
41048c2ecf20Sopenharmony_ci	{ "DAC1 Mux", "OB 01", "OB01 Bypass Mux" },
41058c2ecf20Sopenharmony_ci
41068c2ecf20Sopenharmony_ci	{ "DAC1 MIXL", "Stereo ADC Switch", "ADDA1 Mux" },
41078c2ecf20Sopenharmony_ci	{ "DAC1 MIXL", "DAC1 Switch", "DAC1 Mux" },
41088c2ecf20Sopenharmony_ci	{ "DAC1 MIXR", "Stereo ADC Switch", "ADDA1 Mux" },
41098c2ecf20Sopenharmony_ci	{ "DAC1 MIXR", "DAC1 Switch", "DAC1 Mux" },
41108c2ecf20Sopenharmony_ci
41118c2ecf20Sopenharmony_ci	{ "DAC1 FS", NULL, "DAC1 MIXL" },
41128c2ecf20Sopenharmony_ci	{ "DAC1 FS", NULL, "DAC1 MIXR" },
41138c2ecf20Sopenharmony_ci
41148c2ecf20Sopenharmony_ci	{ "DAC2 L Mux", "IF1 DAC 2", "IF1 DAC2 Mux" },
41158c2ecf20Sopenharmony_ci	{ "DAC2 L Mux", "IF2 DAC 2", "IF2 DAC2 Mux" },
41168c2ecf20Sopenharmony_ci	{ "DAC2 L Mux", "IF3 DAC L", "IF3 DAC L" },
41178c2ecf20Sopenharmony_ci	{ "DAC2 L Mux", "IF4 DAC L", "IF4 DAC L" },
41188c2ecf20Sopenharmony_ci	{ "DAC2 L Mux", "SLB DAC 2", "SLB DAC2" },
41198c2ecf20Sopenharmony_ci	{ "DAC2 L Mux", "OB 2", "OutBound2" },
41208c2ecf20Sopenharmony_ci
41218c2ecf20Sopenharmony_ci	{ "DAC2 R Mux", "IF1 DAC 3", "IF1 DAC3 Mux" },
41228c2ecf20Sopenharmony_ci	{ "DAC2 R Mux", "IF2 DAC 3", "IF2 DAC3 Mux" },
41238c2ecf20Sopenharmony_ci	{ "DAC2 R Mux", "IF3 DAC R", "IF3 DAC R" },
41248c2ecf20Sopenharmony_ci	{ "DAC2 R Mux", "IF4 DAC R", "IF4 DAC R" },
41258c2ecf20Sopenharmony_ci	{ "DAC2 R Mux", "SLB DAC 3", "SLB DAC3" },
41268c2ecf20Sopenharmony_ci	{ "DAC2 R Mux", "OB 3", "OutBound3" },
41278c2ecf20Sopenharmony_ci	{ "DAC2 R Mux", "Haptic Generator", "Haptic Generator" },
41288c2ecf20Sopenharmony_ci	{ "DAC2 R Mux", "VAD ADC", "VAD ADC Mux" },
41298c2ecf20Sopenharmony_ci
41308c2ecf20Sopenharmony_ci	{ "DAC3 L Mux", "IF1 DAC 4", "IF1 DAC4 Mux" },
41318c2ecf20Sopenharmony_ci	{ "DAC3 L Mux", "IF2 DAC 4", "IF2 DAC4 Mux" },
41328c2ecf20Sopenharmony_ci	{ "DAC3 L Mux", "IF3 DAC L", "IF3 DAC L" },
41338c2ecf20Sopenharmony_ci	{ "DAC3 L Mux", "IF4 DAC L", "IF4 DAC L" },
41348c2ecf20Sopenharmony_ci	{ "DAC3 L Mux", "SLB DAC 4", "SLB DAC4" },
41358c2ecf20Sopenharmony_ci	{ "DAC3 L Mux", "OB 4", "OutBound4" },
41368c2ecf20Sopenharmony_ci
41378c2ecf20Sopenharmony_ci	{ "DAC3 R Mux", "IF1 DAC 5", "IF1 DAC5 Mux" },
41388c2ecf20Sopenharmony_ci	{ "DAC3 R Mux", "IF2 DAC 5", "IF2 DAC5 Mux" },
41398c2ecf20Sopenharmony_ci	{ "DAC3 R Mux", "IF3 DAC R", "IF3 DAC R" },
41408c2ecf20Sopenharmony_ci	{ "DAC3 R Mux", "IF4 DAC R", "IF4 DAC R" },
41418c2ecf20Sopenharmony_ci	{ "DAC3 R Mux", "SLB DAC 5", "SLB DAC5" },
41428c2ecf20Sopenharmony_ci	{ "DAC3 R Mux", "OB 5", "OutBound5" },
41438c2ecf20Sopenharmony_ci
41448c2ecf20Sopenharmony_ci	{ "DAC4 L Mux", "IF1 DAC 6", "IF1 DAC6 Mux" },
41458c2ecf20Sopenharmony_ci	{ "DAC4 L Mux", "IF2 DAC 6", "IF2 DAC6 Mux" },
41468c2ecf20Sopenharmony_ci	{ "DAC4 L Mux", "IF3 DAC L", "IF3 DAC L" },
41478c2ecf20Sopenharmony_ci	{ "DAC4 L Mux", "IF4 DAC L", "IF4 DAC L" },
41488c2ecf20Sopenharmony_ci	{ "DAC4 L Mux", "SLB DAC 6", "SLB DAC6" },
41498c2ecf20Sopenharmony_ci	{ "DAC4 L Mux", "OB 6", "OutBound6" },
41508c2ecf20Sopenharmony_ci
41518c2ecf20Sopenharmony_ci	{ "DAC4 R Mux", "IF1 DAC 7", "IF1 DAC7 Mux" },
41528c2ecf20Sopenharmony_ci	{ "DAC4 R Mux", "IF2 DAC 7", "IF2 DAC7 Mux" },
41538c2ecf20Sopenharmony_ci	{ "DAC4 R Mux", "IF3 DAC R", "IF3 DAC R" },
41548c2ecf20Sopenharmony_ci	{ "DAC4 R Mux", "IF4 DAC R", "IF4 DAC R" },
41558c2ecf20Sopenharmony_ci	{ "DAC4 R Mux", "SLB DAC 7", "SLB DAC7" },
41568c2ecf20Sopenharmony_ci	{ "DAC4 R Mux", "OB 7", "OutBound7" },
41578c2ecf20Sopenharmony_ci
41588c2ecf20Sopenharmony_ci	{ "Sidetone Mux", "DMIC1 L", "DMIC L1" },
41598c2ecf20Sopenharmony_ci	{ "Sidetone Mux", "DMIC2 L", "DMIC L2" },
41608c2ecf20Sopenharmony_ci	{ "Sidetone Mux", "DMIC3 L", "DMIC L3" },
41618c2ecf20Sopenharmony_ci	{ "Sidetone Mux", "DMIC4 L", "DMIC L4" },
41628c2ecf20Sopenharmony_ci	{ "Sidetone Mux", "ADC1", "ADC 1" },
41638c2ecf20Sopenharmony_ci	{ "Sidetone Mux", "ADC2", "ADC 2" },
41648c2ecf20Sopenharmony_ci	{ "Sidetone Mux", NULL, "Sidetone Power" },
41658c2ecf20Sopenharmony_ci
41668c2ecf20Sopenharmony_ci	{ "Stereo DAC MIXL", "ST L Switch", "Sidetone Mux" },
41678c2ecf20Sopenharmony_ci	{ "Stereo DAC MIXL", "DAC1 L Switch", "DAC1 MIXL" },
41688c2ecf20Sopenharmony_ci	{ "Stereo DAC MIXL", "DAC2 L Switch", "DAC2 L Mux" },
41698c2ecf20Sopenharmony_ci	{ "Stereo DAC MIXL", "DAC1 R Switch", "DAC1 MIXR" },
41708c2ecf20Sopenharmony_ci	{ "Stereo DAC MIXL", NULL, "dac stereo1 filter" },
41718c2ecf20Sopenharmony_ci	{ "Stereo DAC MIXR", "ST R Switch", "Sidetone Mux" },
41728c2ecf20Sopenharmony_ci	{ "Stereo DAC MIXR", "DAC1 R Switch", "DAC1 MIXR" },
41738c2ecf20Sopenharmony_ci	{ "Stereo DAC MIXR", "DAC2 R Switch", "DAC2 R Mux" },
41748c2ecf20Sopenharmony_ci	{ "Stereo DAC MIXR", "DAC1 L Switch", "DAC1 MIXL" },
41758c2ecf20Sopenharmony_ci	{ "Stereo DAC MIXR", NULL, "dac stereo1 filter" },
41768c2ecf20Sopenharmony_ci	{ "dac stereo1 filter", NULL, "PLL1", is_sys_clk_from_pll },
41778c2ecf20Sopenharmony_ci
41788c2ecf20Sopenharmony_ci	{ "Mono DAC MIXL", "ST L Switch", "Sidetone Mux" },
41798c2ecf20Sopenharmony_ci	{ "Mono DAC MIXL", "DAC1 L Switch", "DAC1 MIXL" },
41808c2ecf20Sopenharmony_ci	{ "Mono DAC MIXL", "DAC2 L Switch", "DAC2 L Mux" },
41818c2ecf20Sopenharmony_ci	{ "Mono DAC MIXL", "DAC2 R Switch", "DAC2 R Mux" },
41828c2ecf20Sopenharmony_ci	{ "Mono DAC MIXL", NULL, "dac mono2 left filter" },
41838c2ecf20Sopenharmony_ci	{ "dac mono2 left filter", NULL, "PLL1", is_sys_clk_from_pll },
41848c2ecf20Sopenharmony_ci	{ "Mono DAC MIXR", "ST R Switch", "Sidetone Mux" },
41858c2ecf20Sopenharmony_ci	{ "Mono DAC MIXR", "DAC1 R Switch", "DAC1 MIXR" },
41868c2ecf20Sopenharmony_ci	{ "Mono DAC MIXR", "DAC2 R Switch", "DAC2 R Mux" },
41878c2ecf20Sopenharmony_ci	{ "Mono DAC MIXR", "DAC2 L Switch", "DAC2 L Mux" },
41888c2ecf20Sopenharmony_ci	{ "Mono DAC MIXR", NULL, "dac mono2 right filter" },
41898c2ecf20Sopenharmony_ci	{ "dac mono2 right filter", NULL, "PLL1", is_sys_clk_from_pll },
41908c2ecf20Sopenharmony_ci
41918c2ecf20Sopenharmony_ci	{ "DD1 MIXL", "Sto DAC Mix L Switch", "Stereo DAC MIXL" },
41928c2ecf20Sopenharmony_ci	{ "DD1 MIXL", "Mono DAC Mix L Switch", "Mono DAC MIXL" },
41938c2ecf20Sopenharmony_ci	{ "DD1 MIXL", "DAC3 L Switch", "DAC3 L Mux" },
41948c2ecf20Sopenharmony_ci	{ "DD1 MIXL", "DAC3 R Switch", "DAC3 R Mux" },
41958c2ecf20Sopenharmony_ci	{ "DD1 MIXL", NULL, "dac mono3 left filter" },
41968c2ecf20Sopenharmony_ci	{ "dac mono3 left filter", NULL, "PLL1", is_sys_clk_from_pll },
41978c2ecf20Sopenharmony_ci	{ "DD1 MIXR", "Sto DAC Mix R Switch", "Stereo DAC MIXR" },
41988c2ecf20Sopenharmony_ci	{ "DD1 MIXR", "Mono DAC Mix R Switch", "Mono DAC MIXR" },
41998c2ecf20Sopenharmony_ci	{ "DD1 MIXR", "DAC3 L Switch", "DAC3 L Mux" },
42008c2ecf20Sopenharmony_ci	{ "DD1 MIXR", "DAC3 R Switch", "DAC3 R Mux" },
42018c2ecf20Sopenharmony_ci	{ "DD1 MIXR", NULL, "dac mono3 right filter" },
42028c2ecf20Sopenharmony_ci	{ "dac mono3 right filter", NULL, "PLL1", is_sys_clk_from_pll },
42038c2ecf20Sopenharmony_ci
42048c2ecf20Sopenharmony_ci	{ "DD2 MIXL", "Sto DAC Mix L Switch", "Stereo DAC MIXL" },
42058c2ecf20Sopenharmony_ci	{ "DD2 MIXL", "Mono DAC Mix L Switch", "Mono DAC MIXL" },
42068c2ecf20Sopenharmony_ci	{ "DD2 MIXL", "DAC4 L Switch", "DAC4 L Mux" },
42078c2ecf20Sopenharmony_ci	{ "DD2 MIXL", "DAC4 R Switch", "DAC4 R Mux" },
42088c2ecf20Sopenharmony_ci	{ "DD2 MIXL", NULL, "dac mono4 left filter" },
42098c2ecf20Sopenharmony_ci	{ "dac mono4 left filter", NULL, "PLL1", is_sys_clk_from_pll },
42108c2ecf20Sopenharmony_ci	{ "DD2 MIXR", "Sto DAC Mix R Switch", "Stereo DAC MIXR" },
42118c2ecf20Sopenharmony_ci	{ "DD2 MIXR", "Mono DAC Mix R Switch", "Mono DAC MIXR" },
42128c2ecf20Sopenharmony_ci	{ "DD2 MIXR", "DAC4 L Switch", "DAC4 L Mux" },
42138c2ecf20Sopenharmony_ci	{ "DD2 MIXR", "DAC4 R Switch", "DAC4 R Mux" },
42148c2ecf20Sopenharmony_ci	{ "DD2 MIXR", NULL, "dac mono4 right filter" },
42158c2ecf20Sopenharmony_ci	{ "dac mono4 right filter", NULL, "PLL1", is_sys_clk_from_pll },
42168c2ecf20Sopenharmony_ci
42178c2ecf20Sopenharmony_ci	{ "Stereo DAC MIX", NULL, "Stereo DAC MIXL" },
42188c2ecf20Sopenharmony_ci	{ "Stereo DAC MIX", NULL, "Stereo DAC MIXR" },
42198c2ecf20Sopenharmony_ci	{ "Mono DAC MIX", NULL, "Mono DAC MIXL" },
42208c2ecf20Sopenharmony_ci	{ "Mono DAC MIX", NULL, "Mono DAC MIXR" },
42218c2ecf20Sopenharmony_ci	{ "DD1 MIX", NULL, "DD1 MIXL" },
42228c2ecf20Sopenharmony_ci	{ "DD1 MIX", NULL, "DD1 MIXR" },
42238c2ecf20Sopenharmony_ci	{ "DD2 MIX", NULL, "DD2 MIXL" },
42248c2ecf20Sopenharmony_ci	{ "DD2 MIX", NULL, "DD2 MIXR" },
42258c2ecf20Sopenharmony_ci
42268c2ecf20Sopenharmony_ci	{ "DAC12 SRC Mux", "STO1 DAC MIX", "Stereo DAC MIX" },
42278c2ecf20Sopenharmony_ci	{ "DAC12 SRC Mux", "MONO DAC MIX", "Mono DAC MIX" },
42288c2ecf20Sopenharmony_ci	{ "DAC12 SRC Mux", "DD MIX1", "DD1 MIX" },
42298c2ecf20Sopenharmony_ci	{ "DAC12 SRC Mux", "DD MIX2", "DD2 MIX" },
42308c2ecf20Sopenharmony_ci
42318c2ecf20Sopenharmony_ci	{ "DAC3 SRC Mux", "MONO DAC MIXL", "Mono DAC MIXL" },
42328c2ecf20Sopenharmony_ci	{ "DAC3 SRC Mux", "MONO DAC MIXR", "Mono DAC MIXR" },
42338c2ecf20Sopenharmony_ci	{ "DAC3 SRC Mux", "DD MIX1L", "DD1 MIXL" },
42348c2ecf20Sopenharmony_ci	{ "DAC3 SRC Mux", "DD MIX2L", "DD2 MIXL" },
42358c2ecf20Sopenharmony_ci
42368c2ecf20Sopenharmony_ci	{ "DAC 1", NULL, "DAC12 SRC Mux" },
42378c2ecf20Sopenharmony_ci	{ "DAC 2", NULL, "DAC12 SRC Mux" },
42388c2ecf20Sopenharmony_ci	{ "DAC 3", NULL, "DAC3 SRC Mux" },
42398c2ecf20Sopenharmony_ci
42408c2ecf20Sopenharmony_ci	{ "PDM1 L Mux", "STO1 DAC MIX", "Stereo DAC MIXL" },
42418c2ecf20Sopenharmony_ci	{ "PDM1 L Mux", "MONO DAC MIX", "Mono DAC MIXL" },
42428c2ecf20Sopenharmony_ci	{ "PDM1 L Mux", "DD MIX1", "DD1 MIXL" },
42438c2ecf20Sopenharmony_ci	{ "PDM1 L Mux", "DD MIX2", "DD2 MIXL" },
42448c2ecf20Sopenharmony_ci	{ "PDM1 L Mux", NULL, "PDM1 Power" },
42458c2ecf20Sopenharmony_ci	{ "PDM1 R Mux", "STO1 DAC MIX", "Stereo DAC MIXR" },
42468c2ecf20Sopenharmony_ci	{ "PDM1 R Mux", "MONO DAC MIX", "Mono DAC MIXR" },
42478c2ecf20Sopenharmony_ci	{ "PDM1 R Mux", "DD MIX1", "DD1 MIXR" },
42488c2ecf20Sopenharmony_ci	{ "PDM1 R Mux", "DD MIX2", "DD2 MIXR" },
42498c2ecf20Sopenharmony_ci	{ "PDM1 R Mux", NULL, "PDM1 Power" },
42508c2ecf20Sopenharmony_ci	{ "PDM2 L Mux", "STO1 DAC MIX", "Stereo DAC MIXL" },
42518c2ecf20Sopenharmony_ci	{ "PDM2 L Mux", "MONO DAC MIX", "Mono DAC MIXL" },
42528c2ecf20Sopenharmony_ci	{ "PDM2 L Mux", "DD MIX1", "DD1 MIXL" },
42538c2ecf20Sopenharmony_ci	{ "PDM2 L Mux", "DD MIX2", "DD2 MIXL" },
42548c2ecf20Sopenharmony_ci	{ "PDM2 L Mux", NULL, "PDM2 Power" },
42558c2ecf20Sopenharmony_ci	{ "PDM2 R Mux", "STO1 DAC MIX", "Stereo DAC MIXR" },
42568c2ecf20Sopenharmony_ci	{ "PDM2 R Mux", "MONO DAC MIX", "Mono DAC MIXR" },
42578c2ecf20Sopenharmony_ci	{ "PDM2 R Mux", "DD MIX1", "DD1 MIXR" },
42588c2ecf20Sopenharmony_ci	{ "PDM2 R Mux", "DD MIX1", "DD2 MIXR" },
42598c2ecf20Sopenharmony_ci	{ "PDM2 R Mux", NULL, "PDM2 Power" },
42608c2ecf20Sopenharmony_ci
42618c2ecf20Sopenharmony_ci	{ "LOUT1 amp", NULL, "DAC 1" },
42628c2ecf20Sopenharmony_ci	{ "LOUT2 amp", NULL, "DAC 2" },
42638c2ecf20Sopenharmony_ci	{ "LOUT3 amp", NULL, "DAC 3" },
42648c2ecf20Sopenharmony_ci
42658c2ecf20Sopenharmony_ci	{ "LOUT1 vref", NULL, "LOUT1 amp" },
42668c2ecf20Sopenharmony_ci	{ "LOUT2 vref", NULL, "LOUT2 amp" },
42678c2ecf20Sopenharmony_ci	{ "LOUT3 vref", NULL, "LOUT3 amp" },
42688c2ecf20Sopenharmony_ci
42698c2ecf20Sopenharmony_ci	{ "LOUT1", NULL, "LOUT1 vref" },
42708c2ecf20Sopenharmony_ci	{ "LOUT2", NULL, "LOUT2 vref" },
42718c2ecf20Sopenharmony_ci	{ "LOUT3", NULL, "LOUT3 vref" },
42728c2ecf20Sopenharmony_ci
42738c2ecf20Sopenharmony_ci	{ "PDM1L", NULL, "PDM1 L Mux" },
42748c2ecf20Sopenharmony_ci	{ "PDM1R", NULL, "PDM1 R Mux" },
42758c2ecf20Sopenharmony_ci	{ "PDM2L", NULL, "PDM2 L Mux" },
42768c2ecf20Sopenharmony_ci	{ "PDM2R", NULL, "PDM2 R Mux" },
42778c2ecf20Sopenharmony_ci};
42788c2ecf20Sopenharmony_ci
42798c2ecf20Sopenharmony_cistatic const struct snd_soc_dapm_route rt5677_dmic2_clk_1[] = {
42808c2ecf20Sopenharmony_ci	{ "DMIC L2", NULL, "DMIC1 power" },
42818c2ecf20Sopenharmony_ci	{ "DMIC R2", NULL, "DMIC1 power" },
42828c2ecf20Sopenharmony_ci};
42838c2ecf20Sopenharmony_ci
42848c2ecf20Sopenharmony_cistatic const struct snd_soc_dapm_route rt5677_dmic2_clk_2[] = {
42858c2ecf20Sopenharmony_ci	{ "DMIC L2", NULL, "DMIC2 power" },
42868c2ecf20Sopenharmony_ci	{ "DMIC R2", NULL, "DMIC2 power" },
42878c2ecf20Sopenharmony_ci};
42888c2ecf20Sopenharmony_ci
42898c2ecf20Sopenharmony_cistatic int rt5677_hw_params(struct snd_pcm_substream *substream,
42908c2ecf20Sopenharmony_ci	struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
42918c2ecf20Sopenharmony_ci{
42928c2ecf20Sopenharmony_ci	struct snd_soc_component *component = dai->component;
42938c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
42948c2ecf20Sopenharmony_ci	unsigned int val_len = 0, val_clk, mask_clk;
42958c2ecf20Sopenharmony_ci	int pre_div, bclk_ms, frame_size;
42968c2ecf20Sopenharmony_ci
42978c2ecf20Sopenharmony_ci	rt5677->lrck[dai->id] = params_rate(params);
42988c2ecf20Sopenharmony_ci	pre_div = rl6231_get_clk_info(rt5677->sysclk, rt5677->lrck[dai->id]);
42998c2ecf20Sopenharmony_ci	if (pre_div < 0) {
43008c2ecf20Sopenharmony_ci		dev_err(component->dev, "Unsupported clock setting: sysclk=%dHz lrck=%dHz\n",
43018c2ecf20Sopenharmony_ci			rt5677->sysclk, rt5677->lrck[dai->id]);
43028c2ecf20Sopenharmony_ci		return -EINVAL;
43038c2ecf20Sopenharmony_ci	}
43048c2ecf20Sopenharmony_ci	frame_size = snd_soc_params_to_frame_size(params);
43058c2ecf20Sopenharmony_ci	if (frame_size < 0) {
43068c2ecf20Sopenharmony_ci		dev_err(component->dev, "Unsupported frame size: %d\n", frame_size);
43078c2ecf20Sopenharmony_ci		return -EINVAL;
43088c2ecf20Sopenharmony_ci	}
43098c2ecf20Sopenharmony_ci	bclk_ms = frame_size > 32;
43108c2ecf20Sopenharmony_ci	rt5677->bclk[dai->id] = rt5677->lrck[dai->id] * (32 << bclk_ms);
43118c2ecf20Sopenharmony_ci
43128c2ecf20Sopenharmony_ci	dev_dbg(dai->dev, "bclk is %dHz and lrck is %dHz\n",
43138c2ecf20Sopenharmony_ci		rt5677->bclk[dai->id], rt5677->lrck[dai->id]);
43148c2ecf20Sopenharmony_ci	dev_dbg(dai->dev, "bclk_ms is %d and pre_div is %d for iis %d\n",
43158c2ecf20Sopenharmony_ci				bclk_ms, pre_div, dai->id);
43168c2ecf20Sopenharmony_ci
43178c2ecf20Sopenharmony_ci	switch (params_width(params)) {
43188c2ecf20Sopenharmony_ci	case 16:
43198c2ecf20Sopenharmony_ci		break;
43208c2ecf20Sopenharmony_ci	case 20:
43218c2ecf20Sopenharmony_ci		val_len |= RT5677_I2S_DL_20;
43228c2ecf20Sopenharmony_ci		break;
43238c2ecf20Sopenharmony_ci	case 24:
43248c2ecf20Sopenharmony_ci		val_len |= RT5677_I2S_DL_24;
43258c2ecf20Sopenharmony_ci		break;
43268c2ecf20Sopenharmony_ci	case 8:
43278c2ecf20Sopenharmony_ci		val_len |= RT5677_I2S_DL_8;
43288c2ecf20Sopenharmony_ci		break;
43298c2ecf20Sopenharmony_ci	default:
43308c2ecf20Sopenharmony_ci		return -EINVAL;
43318c2ecf20Sopenharmony_ci	}
43328c2ecf20Sopenharmony_ci
43338c2ecf20Sopenharmony_ci	switch (dai->id) {
43348c2ecf20Sopenharmony_ci	case RT5677_AIF1:
43358c2ecf20Sopenharmony_ci		mask_clk = RT5677_I2S_PD1_MASK;
43368c2ecf20Sopenharmony_ci		val_clk = pre_div << RT5677_I2S_PD1_SFT;
43378c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_I2S1_SDP,
43388c2ecf20Sopenharmony_ci			RT5677_I2S_DL_MASK, val_len);
43398c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_CLK_TREE_CTRL1,
43408c2ecf20Sopenharmony_ci			mask_clk, val_clk);
43418c2ecf20Sopenharmony_ci		break;
43428c2ecf20Sopenharmony_ci	case RT5677_AIF2:
43438c2ecf20Sopenharmony_ci		mask_clk = RT5677_I2S_PD2_MASK;
43448c2ecf20Sopenharmony_ci		val_clk = pre_div << RT5677_I2S_PD2_SFT;
43458c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_I2S2_SDP,
43468c2ecf20Sopenharmony_ci			RT5677_I2S_DL_MASK, val_len);
43478c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_CLK_TREE_CTRL1,
43488c2ecf20Sopenharmony_ci			mask_clk, val_clk);
43498c2ecf20Sopenharmony_ci		break;
43508c2ecf20Sopenharmony_ci	case RT5677_AIF3:
43518c2ecf20Sopenharmony_ci		mask_clk = RT5677_I2S_BCLK_MS3_MASK | RT5677_I2S_PD3_MASK;
43528c2ecf20Sopenharmony_ci		val_clk = bclk_ms << RT5677_I2S_BCLK_MS3_SFT |
43538c2ecf20Sopenharmony_ci			pre_div << RT5677_I2S_PD3_SFT;
43548c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_I2S3_SDP,
43558c2ecf20Sopenharmony_ci			RT5677_I2S_DL_MASK, val_len);
43568c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_CLK_TREE_CTRL1,
43578c2ecf20Sopenharmony_ci			mask_clk, val_clk);
43588c2ecf20Sopenharmony_ci		break;
43598c2ecf20Sopenharmony_ci	case RT5677_AIF4:
43608c2ecf20Sopenharmony_ci		mask_clk = RT5677_I2S_BCLK_MS4_MASK | RT5677_I2S_PD4_MASK;
43618c2ecf20Sopenharmony_ci		val_clk = bclk_ms << RT5677_I2S_BCLK_MS4_SFT |
43628c2ecf20Sopenharmony_ci			pre_div << RT5677_I2S_PD4_SFT;
43638c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_I2S4_SDP,
43648c2ecf20Sopenharmony_ci			RT5677_I2S_DL_MASK, val_len);
43658c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_CLK_TREE_CTRL1,
43668c2ecf20Sopenharmony_ci			mask_clk, val_clk);
43678c2ecf20Sopenharmony_ci		break;
43688c2ecf20Sopenharmony_ci	default:
43698c2ecf20Sopenharmony_ci		break;
43708c2ecf20Sopenharmony_ci	}
43718c2ecf20Sopenharmony_ci
43728c2ecf20Sopenharmony_ci	return 0;
43738c2ecf20Sopenharmony_ci}
43748c2ecf20Sopenharmony_ci
43758c2ecf20Sopenharmony_cistatic int rt5677_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
43768c2ecf20Sopenharmony_ci{
43778c2ecf20Sopenharmony_ci	struct snd_soc_component *component = dai->component;
43788c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
43798c2ecf20Sopenharmony_ci	unsigned int reg_val = 0;
43808c2ecf20Sopenharmony_ci
43818c2ecf20Sopenharmony_ci	switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
43828c2ecf20Sopenharmony_ci	case SND_SOC_DAIFMT_CBM_CFM:
43838c2ecf20Sopenharmony_ci		rt5677->master[dai->id] = 1;
43848c2ecf20Sopenharmony_ci		break;
43858c2ecf20Sopenharmony_ci	case SND_SOC_DAIFMT_CBS_CFS:
43868c2ecf20Sopenharmony_ci		reg_val |= RT5677_I2S_MS_S;
43878c2ecf20Sopenharmony_ci		rt5677->master[dai->id] = 0;
43888c2ecf20Sopenharmony_ci		break;
43898c2ecf20Sopenharmony_ci	default:
43908c2ecf20Sopenharmony_ci		return -EINVAL;
43918c2ecf20Sopenharmony_ci	}
43928c2ecf20Sopenharmony_ci
43938c2ecf20Sopenharmony_ci	switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
43948c2ecf20Sopenharmony_ci	case SND_SOC_DAIFMT_NB_NF:
43958c2ecf20Sopenharmony_ci		break;
43968c2ecf20Sopenharmony_ci	case SND_SOC_DAIFMT_IB_NF:
43978c2ecf20Sopenharmony_ci		reg_val |= RT5677_I2S_BP_INV;
43988c2ecf20Sopenharmony_ci		break;
43998c2ecf20Sopenharmony_ci	default:
44008c2ecf20Sopenharmony_ci		return -EINVAL;
44018c2ecf20Sopenharmony_ci	}
44028c2ecf20Sopenharmony_ci
44038c2ecf20Sopenharmony_ci	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
44048c2ecf20Sopenharmony_ci	case SND_SOC_DAIFMT_I2S:
44058c2ecf20Sopenharmony_ci		break;
44068c2ecf20Sopenharmony_ci	case SND_SOC_DAIFMT_LEFT_J:
44078c2ecf20Sopenharmony_ci		reg_val |= RT5677_I2S_DF_LEFT;
44088c2ecf20Sopenharmony_ci		break;
44098c2ecf20Sopenharmony_ci	case SND_SOC_DAIFMT_DSP_A:
44108c2ecf20Sopenharmony_ci		reg_val |= RT5677_I2S_DF_PCM_A;
44118c2ecf20Sopenharmony_ci		break;
44128c2ecf20Sopenharmony_ci	case SND_SOC_DAIFMT_DSP_B:
44138c2ecf20Sopenharmony_ci		reg_val |= RT5677_I2S_DF_PCM_B;
44148c2ecf20Sopenharmony_ci		break;
44158c2ecf20Sopenharmony_ci	default:
44168c2ecf20Sopenharmony_ci		return -EINVAL;
44178c2ecf20Sopenharmony_ci	}
44188c2ecf20Sopenharmony_ci
44198c2ecf20Sopenharmony_ci	switch (dai->id) {
44208c2ecf20Sopenharmony_ci	case RT5677_AIF1:
44218c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_I2S1_SDP,
44228c2ecf20Sopenharmony_ci			RT5677_I2S_MS_MASK | RT5677_I2S_BP_MASK |
44238c2ecf20Sopenharmony_ci			RT5677_I2S_DF_MASK, reg_val);
44248c2ecf20Sopenharmony_ci		break;
44258c2ecf20Sopenharmony_ci	case RT5677_AIF2:
44268c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_I2S2_SDP,
44278c2ecf20Sopenharmony_ci			RT5677_I2S_MS_MASK | RT5677_I2S_BP_MASK |
44288c2ecf20Sopenharmony_ci			RT5677_I2S_DF_MASK, reg_val);
44298c2ecf20Sopenharmony_ci		break;
44308c2ecf20Sopenharmony_ci	case RT5677_AIF3:
44318c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_I2S3_SDP,
44328c2ecf20Sopenharmony_ci			RT5677_I2S_MS_MASK | RT5677_I2S_BP_MASK |
44338c2ecf20Sopenharmony_ci			RT5677_I2S_DF_MASK, reg_val);
44348c2ecf20Sopenharmony_ci		break;
44358c2ecf20Sopenharmony_ci	case RT5677_AIF4:
44368c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_I2S4_SDP,
44378c2ecf20Sopenharmony_ci			RT5677_I2S_MS_MASK | RT5677_I2S_BP_MASK |
44388c2ecf20Sopenharmony_ci			RT5677_I2S_DF_MASK, reg_val);
44398c2ecf20Sopenharmony_ci		break;
44408c2ecf20Sopenharmony_ci	default:
44418c2ecf20Sopenharmony_ci		break;
44428c2ecf20Sopenharmony_ci	}
44438c2ecf20Sopenharmony_ci
44448c2ecf20Sopenharmony_ci
44458c2ecf20Sopenharmony_ci	return 0;
44468c2ecf20Sopenharmony_ci}
44478c2ecf20Sopenharmony_ci
44488c2ecf20Sopenharmony_cistatic int rt5677_set_dai_sysclk(struct snd_soc_dai *dai,
44498c2ecf20Sopenharmony_ci		int clk_id, unsigned int freq, int dir)
44508c2ecf20Sopenharmony_ci{
44518c2ecf20Sopenharmony_ci	struct snd_soc_component *component = dai->component;
44528c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
44538c2ecf20Sopenharmony_ci	unsigned int reg_val = 0;
44548c2ecf20Sopenharmony_ci
44558c2ecf20Sopenharmony_ci	if (freq == rt5677->sysclk && clk_id == rt5677->sysclk_src)
44568c2ecf20Sopenharmony_ci		return 0;
44578c2ecf20Sopenharmony_ci
44588c2ecf20Sopenharmony_ci	switch (clk_id) {
44598c2ecf20Sopenharmony_ci	case RT5677_SCLK_S_MCLK:
44608c2ecf20Sopenharmony_ci		reg_val |= RT5677_SCLK_SRC_MCLK;
44618c2ecf20Sopenharmony_ci		break;
44628c2ecf20Sopenharmony_ci	case RT5677_SCLK_S_PLL1:
44638c2ecf20Sopenharmony_ci		reg_val |= RT5677_SCLK_SRC_PLL1;
44648c2ecf20Sopenharmony_ci		break;
44658c2ecf20Sopenharmony_ci	case RT5677_SCLK_S_RCCLK:
44668c2ecf20Sopenharmony_ci		reg_val |= RT5677_SCLK_SRC_RCCLK;
44678c2ecf20Sopenharmony_ci		break;
44688c2ecf20Sopenharmony_ci	default:
44698c2ecf20Sopenharmony_ci		dev_err(component->dev, "Invalid clock id (%d)\n", clk_id);
44708c2ecf20Sopenharmony_ci		return -EINVAL;
44718c2ecf20Sopenharmony_ci	}
44728c2ecf20Sopenharmony_ci	regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1,
44738c2ecf20Sopenharmony_ci		RT5677_SCLK_SRC_MASK, reg_val);
44748c2ecf20Sopenharmony_ci	rt5677->sysclk = freq;
44758c2ecf20Sopenharmony_ci	rt5677->sysclk_src = clk_id;
44768c2ecf20Sopenharmony_ci
44778c2ecf20Sopenharmony_ci	dev_dbg(dai->dev, "Sysclk is %dHz and clock id is %d\n", freq, clk_id);
44788c2ecf20Sopenharmony_ci
44798c2ecf20Sopenharmony_ci	return 0;
44808c2ecf20Sopenharmony_ci}
44818c2ecf20Sopenharmony_ci
44828c2ecf20Sopenharmony_ci/**
44838c2ecf20Sopenharmony_ci * rt5677_pll_calc - Calcualte PLL M/N/K code.
44848c2ecf20Sopenharmony_ci * @freq_in: external clock provided to codec.
44858c2ecf20Sopenharmony_ci * @freq_out: target clock which codec works on.
44868c2ecf20Sopenharmony_ci * @pll_code: Pointer to structure with M, N, K, bypass K and bypass M flag.
44878c2ecf20Sopenharmony_ci *
44888c2ecf20Sopenharmony_ci * Calcualte M/N/K code and bypass K/M flag to configure PLL for codec.
44898c2ecf20Sopenharmony_ci *
44908c2ecf20Sopenharmony_ci * Returns 0 for success or negative error code.
44918c2ecf20Sopenharmony_ci */
44928c2ecf20Sopenharmony_cistatic int rt5677_pll_calc(const unsigned int freq_in,
44938c2ecf20Sopenharmony_ci	const unsigned int freq_out, struct rl6231_pll_code *pll_code)
44948c2ecf20Sopenharmony_ci{
44958c2ecf20Sopenharmony_ci	if (RT5677_PLL_INP_MIN > freq_in)
44968c2ecf20Sopenharmony_ci		return -EINVAL;
44978c2ecf20Sopenharmony_ci
44988c2ecf20Sopenharmony_ci	return rl6231_pll_calc(freq_in, freq_out, pll_code);
44998c2ecf20Sopenharmony_ci}
45008c2ecf20Sopenharmony_ci
45018c2ecf20Sopenharmony_cistatic int rt5677_set_dai_pll(struct snd_soc_dai *dai, int pll_id, int source,
45028c2ecf20Sopenharmony_ci			unsigned int freq_in, unsigned int freq_out)
45038c2ecf20Sopenharmony_ci{
45048c2ecf20Sopenharmony_ci	struct snd_soc_component *component = dai->component;
45058c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
45068c2ecf20Sopenharmony_ci	struct rl6231_pll_code pll_code;
45078c2ecf20Sopenharmony_ci	int ret;
45088c2ecf20Sopenharmony_ci
45098c2ecf20Sopenharmony_ci	if (source == rt5677->pll_src && freq_in == rt5677->pll_in &&
45108c2ecf20Sopenharmony_ci	    freq_out == rt5677->pll_out)
45118c2ecf20Sopenharmony_ci		return 0;
45128c2ecf20Sopenharmony_ci
45138c2ecf20Sopenharmony_ci	if (!freq_in || !freq_out) {
45148c2ecf20Sopenharmony_ci		dev_dbg(component->dev, "PLL disabled\n");
45158c2ecf20Sopenharmony_ci
45168c2ecf20Sopenharmony_ci		rt5677->pll_in = 0;
45178c2ecf20Sopenharmony_ci		rt5677->pll_out = 0;
45188c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1,
45198c2ecf20Sopenharmony_ci			RT5677_SCLK_SRC_MASK, RT5677_SCLK_SRC_MCLK);
45208c2ecf20Sopenharmony_ci		return 0;
45218c2ecf20Sopenharmony_ci	}
45228c2ecf20Sopenharmony_ci
45238c2ecf20Sopenharmony_ci	switch (source) {
45248c2ecf20Sopenharmony_ci	case RT5677_PLL1_S_MCLK:
45258c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1,
45268c2ecf20Sopenharmony_ci			RT5677_PLL1_SRC_MASK, RT5677_PLL1_SRC_MCLK);
45278c2ecf20Sopenharmony_ci		break;
45288c2ecf20Sopenharmony_ci	case RT5677_PLL1_S_BCLK1:
45298c2ecf20Sopenharmony_ci	case RT5677_PLL1_S_BCLK2:
45308c2ecf20Sopenharmony_ci	case RT5677_PLL1_S_BCLK3:
45318c2ecf20Sopenharmony_ci	case RT5677_PLL1_S_BCLK4:
45328c2ecf20Sopenharmony_ci		switch (dai->id) {
45338c2ecf20Sopenharmony_ci		case RT5677_AIF1:
45348c2ecf20Sopenharmony_ci			regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1,
45358c2ecf20Sopenharmony_ci				RT5677_PLL1_SRC_MASK, RT5677_PLL1_SRC_BCLK1);
45368c2ecf20Sopenharmony_ci			break;
45378c2ecf20Sopenharmony_ci		case RT5677_AIF2:
45388c2ecf20Sopenharmony_ci			regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1,
45398c2ecf20Sopenharmony_ci				RT5677_PLL1_SRC_MASK, RT5677_PLL1_SRC_BCLK2);
45408c2ecf20Sopenharmony_ci			break;
45418c2ecf20Sopenharmony_ci		case RT5677_AIF3:
45428c2ecf20Sopenharmony_ci			regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1,
45438c2ecf20Sopenharmony_ci				RT5677_PLL1_SRC_MASK, RT5677_PLL1_SRC_BCLK3);
45448c2ecf20Sopenharmony_ci			break;
45458c2ecf20Sopenharmony_ci		case RT5677_AIF4:
45468c2ecf20Sopenharmony_ci			regmap_update_bits(rt5677->regmap, RT5677_GLB_CLK1,
45478c2ecf20Sopenharmony_ci				RT5677_PLL1_SRC_MASK, RT5677_PLL1_SRC_BCLK4);
45488c2ecf20Sopenharmony_ci			break;
45498c2ecf20Sopenharmony_ci		default:
45508c2ecf20Sopenharmony_ci			break;
45518c2ecf20Sopenharmony_ci		}
45528c2ecf20Sopenharmony_ci		break;
45538c2ecf20Sopenharmony_ci	default:
45548c2ecf20Sopenharmony_ci		dev_err(component->dev, "Unknown PLL source %d\n", source);
45558c2ecf20Sopenharmony_ci		return -EINVAL;
45568c2ecf20Sopenharmony_ci	}
45578c2ecf20Sopenharmony_ci
45588c2ecf20Sopenharmony_ci	ret = rt5677_pll_calc(freq_in, freq_out, &pll_code);
45598c2ecf20Sopenharmony_ci	if (ret < 0) {
45608c2ecf20Sopenharmony_ci		dev_err(component->dev, "Unsupport input clock %d\n", freq_in);
45618c2ecf20Sopenharmony_ci		return ret;
45628c2ecf20Sopenharmony_ci	}
45638c2ecf20Sopenharmony_ci
45648c2ecf20Sopenharmony_ci	dev_dbg(component->dev, "m_bypass=%d m=%d n=%d k=%d\n",
45658c2ecf20Sopenharmony_ci		pll_code.m_bp, (pll_code.m_bp ? 0 : pll_code.m_code),
45668c2ecf20Sopenharmony_ci		pll_code.n_code, pll_code.k_code);
45678c2ecf20Sopenharmony_ci
45688c2ecf20Sopenharmony_ci	regmap_write(rt5677->regmap, RT5677_PLL1_CTRL1,
45698c2ecf20Sopenharmony_ci		pll_code.n_code << RT5677_PLL_N_SFT | pll_code.k_code);
45708c2ecf20Sopenharmony_ci	regmap_write(rt5677->regmap, RT5677_PLL1_CTRL2,
45718c2ecf20Sopenharmony_ci		(pll_code.m_bp ? 0 : pll_code.m_code) << RT5677_PLL_M_SFT |
45728c2ecf20Sopenharmony_ci		pll_code.m_bp << RT5677_PLL_M_BP_SFT);
45738c2ecf20Sopenharmony_ci
45748c2ecf20Sopenharmony_ci	rt5677->pll_in = freq_in;
45758c2ecf20Sopenharmony_ci	rt5677->pll_out = freq_out;
45768c2ecf20Sopenharmony_ci	rt5677->pll_src = source;
45778c2ecf20Sopenharmony_ci
45788c2ecf20Sopenharmony_ci	return 0;
45798c2ecf20Sopenharmony_ci}
45808c2ecf20Sopenharmony_ci
45818c2ecf20Sopenharmony_cistatic int rt5677_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
45828c2ecf20Sopenharmony_ci			unsigned int rx_mask, int slots, int slot_width)
45838c2ecf20Sopenharmony_ci{
45848c2ecf20Sopenharmony_ci	struct snd_soc_component *component = dai->component;
45858c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
45868c2ecf20Sopenharmony_ci	unsigned int val = 0, slot_width_25 = 0;
45878c2ecf20Sopenharmony_ci
45888c2ecf20Sopenharmony_ci	if (rx_mask || tx_mask)
45898c2ecf20Sopenharmony_ci		val |= (1 << 12);
45908c2ecf20Sopenharmony_ci
45918c2ecf20Sopenharmony_ci	switch (slots) {
45928c2ecf20Sopenharmony_ci	case 4:
45938c2ecf20Sopenharmony_ci		val |= (1 << 10);
45948c2ecf20Sopenharmony_ci		break;
45958c2ecf20Sopenharmony_ci	case 6:
45968c2ecf20Sopenharmony_ci		val |= (2 << 10);
45978c2ecf20Sopenharmony_ci		break;
45988c2ecf20Sopenharmony_ci	case 8:
45998c2ecf20Sopenharmony_ci		val |= (3 << 10);
46008c2ecf20Sopenharmony_ci		break;
46018c2ecf20Sopenharmony_ci	case 2:
46028c2ecf20Sopenharmony_ci	default:
46038c2ecf20Sopenharmony_ci		break;
46048c2ecf20Sopenharmony_ci	}
46058c2ecf20Sopenharmony_ci
46068c2ecf20Sopenharmony_ci	switch (slot_width) {
46078c2ecf20Sopenharmony_ci	case 20:
46088c2ecf20Sopenharmony_ci		val |= (1 << 8);
46098c2ecf20Sopenharmony_ci		break;
46108c2ecf20Sopenharmony_ci	case 25:
46118c2ecf20Sopenharmony_ci		slot_width_25 = 0x8080;
46128c2ecf20Sopenharmony_ci		fallthrough;
46138c2ecf20Sopenharmony_ci	case 24:
46148c2ecf20Sopenharmony_ci		val |= (2 << 8);
46158c2ecf20Sopenharmony_ci		break;
46168c2ecf20Sopenharmony_ci	case 32:
46178c2ecf20Sopenharmony_ci		val |= (3 << 8);
46188c2ecf20Sopenharmony_ci		break;
46198c2ecf20Sopenharmony_ci	case 16:
46208c2ecf20Sopenharmony_ci	default:
46218c2ecf20Sopenharmony_ci		break;
46228c2ecf20Sopenharmony_ci	}
46238c2ecf20Sopenharmony_ci
46248c2ecf20Sopenharmony_ci	switch (dai->id) {
46258c2ecf20Sopenharmony_ci	case RT5677_AIF1:
46268c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_TDM1_CTRL1, 0x1f00,
46278c2ecf20Sopenharmony_ci			val);
46288c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC, 0x8000,
46298c2ecf20Sopenharmony_ci			slot_width_25);
46308c2ecf20Sopenharmony_ci		break;
46318c2ecf20Sopenharmony_ci	case RT5677_AIF2:
46328c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_TDM2_CTRL1, 0x1f00,
46338c2ecf20Sopenharmony_ci			val);
46348c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC, 0x80,
46358c2ecf20Sopenharmony_ci			slot_width_25);
46368c2ecf20Sopenharmony_ci		break;
46378c2ecf20Sopenharmony_ci	default:
46388c2ecf20Sopenharmony_ci		break;
46398c2ecf20Sopenharmony_ci	}
46408c2ecf20Sopenharmony_ci
46418c2ecf20Sopenharmony_ci	return 0;
46428c2ecf20Sopenharmony_ci}
46438c2ecf20Sopenharmony_ci
46448c2ecf20Sopenharmony_cistatic int rt5677_set_bias_level(struct snd_soc_component *component,
46458c2ecf20Sopenharmony_ci			enum snd_soc_bias_level level)
46468c2ecf20Sopenharmony_ci{
46478c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
46488c2ecf20Sopenharmony_ci	enum snd_soc_bias_level prev_bias =
46498c2ecf20Sopenharmony_ci		snd_soc_component_get_bias_level(component);
46508c2ecf20Sopenharmony_ci
46518c2ecf20Sopenharmony_ci	switch (level) {
46528c2ecf20Sopenharmony_ci	case SND_SOC_BIAS_ON:
46538c2ecf20Sopenharmony_ci		break;
46548c2ecf20Sopenharmony_ci
46558c2ecf20Sopenharmony_ci	case SND_SOC_BIAS_PREPARE:
46568c2ecf20Sopenharmony_ci		if (prev_bias == SND_SOC_BIAS_STANDBY) {
46578c2ecf20Sopenharmony_ci
46588c2ecf20Sopenharmony_ci			regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG1,
46598c2ecf20Sopenharmony_ci				RT5677_LDO1_SEL_MASK | RT5677_LDO2_SEL_MASK,
46608c2ecf20Sopenharmony_ci				5 << RT5677_LDO1_SEL_SFT |
46618c2ecf20Sopenharmony_ci				5 << RT5677_LDO2_SEL_SFT);
46628c2ecf20Sopenharmony_ci			regmap_update_bits(rt5677->regmap,
46638c2ecf20Sopenharmony_ci				RT5677_PR_BASE + RT5677_BIAS_CUR4,
46648c2ecf20Sopenharmony_ci				0x0f00, 0x0f00);
46658c2ecf20Sopenharmony_ci			regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG1,
46668c2ecf20Sopenharmony_ci				RT5677_PWR_FV1 | RT5677_PWR_FV2 |
46678c2ecf20Sopenharmony_ci				RT5677_PWR_VREF1 | RT5677_PWR_MB |
46688c2ecf20Sopenharmony_ci				RT5677_PWR_BG | RT5677_PWR_VREF2,
46698c2ecf20Sopenharmony_ci				RT5677_PWR_VREF1 | RT5677_PWR_MB |
46708c2ecf20Sopenharmony_ci				RT5677_PWR_BG | RT5677_PWR_VREF2);
46718c2ecf20Sopenharmony_ci			rt5677->is_vref_slow = false;
46728c2ecf20Sopenharmony_ci			regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2,
46738c2ecf20Sopenharmony_ci				RT5677_PWR_CORE, RT5677_PWR_CORE);
46748c2ecf20Sopenharmony_ci			regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC,
46758c2ecf20Sopenharmony_ci				0x1, 0x1);
46768c2ecf20Sopenharmony_ci		}
46778c2ecf20Sopenharmony_ci		break;
46788c2ecf20Sopenharmony_ci
46798c2ecf20Sopenharmony_ci	case SND_SOC_BIAS_STANDBY:
46808c2ecf20Sopenharmony_ci		if (prev_bias == SND_SOC_BIAS_OFF &&
46818c2ecf20Sopenharmony_ci				rt5677->dsp_vad_en_request) {
46828c2ecf20Sopenharmony_ci			/* Re-enable the DSP if it was turned off at suspend */
46838c2ecf20Sopenharmony_ci			rt5677->dsp_vad_en = true;
46848c2ecf20Sopenharmony_ci			/* The delay is to wait for MCLK */
46858c2ecf20Sopenharmony_ci			schedule_delayed_work(&rt5677->dsp_work,
46868c2ecf20Sopenharmony_ci					msecs_to_jiffies(1000));
46878c2ecf20Sopenharmony_ci		}
46888c2ecf20Sopenharmony_ci		break;
46898c2ecf20Sopenharmony_ci
46908c2ecf20Sopenharmony_ci	case SND_SOC_BIAS_OFF:
46918c2ecf20Sopenharmony_ci		flush_delayed_work(&rt5677->dsp_work);
46928c2ecf20Sopenharmony_ci		if (rt5677->is_dsp_mode) {
46938c2ecf20Sopenharmony_ci			/* Turn off the DSP before suspend */
46948c2ecf20Sopenharmony_ci			rt5677->dsp_vad_en = false;
46958c2ecf20Sopenharmony_ci			schedule_delayed_work(&rt5677->dsp_work, 0);
46968c2ecf20Sopenharmony_ci			flush_delayed_work(&rt5677->dsp_work);
46978c2ecf20Sopenharmony_ci		}
46988c2ecf20Sopenharmony_ci
46998c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC, 0x1, 0x0);
47008c2ecf20Sopenharmony_ci		regmap_write(rt5677->regmap, RT5677_PWR_DIG1, 0x0000);
47018c2ecf20Sopenharmony_ci		regmap_write(rt5677->regmap, RT5677_PWR_ANLG1,
47028c2ecf20Sopenharmony_ci			2 << RT5677_LDO1_SEL_SFT |
47038c2ecf20Sopenharmony_ci			2 << RT5677_LDO2_SEL_SFT);
47048c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_PWR_ANLG2,
47058c2ecf20Sopenharmony_ci			RT5677_PWR_CORE, 0);
47068c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap,
47078c2ecf20Sopenharmony_ci			RT5677_PR_BASE + RT5677_BIAS_CUR4, 0x0f00, 0x0000);
47088c2ecf20Sopenharmony_ci
47098c2ecf20Sopenharmony_ci		if (rt5677->dsp_vad_en)
47108c2ecf20Sopenharmony_ci			rt5677_set_dsp_vad(component, true);
47118c2ecf20Sopenharmony_ci		break;
47128c2ecf20Sopenharmony_ci
47138c2ecf20Sopenharmony_ci	default:
47148c2ecf20Sopenharmony_ci		break;
47158c2ecf20Sopenharmony_ci	}
47168c2ecf20Sopenharmony_ci
47178c2ecf20Sopenharmony_ci	return 0;
47188c2ecf20Sopenharmony_ci}
47198c2ecf20Sopenharmony_ci
47208c2ecf20Sopenharmony_ci#ifdef CONFIG_GPIOLIB
47218c2ecf20Sopenharmony_cistatic void rt5677_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
47228c2ecf20Sopenharmony_ci{
47238c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = gpiochip_get_data(chip);
47248c2ecf20Sopenharmony_ci
47258c2ecf20Sopenharmony_ci	switch (offset) {
47268c2ecf20Sopenharmony_ci	case RT5677_GPIO1 ... RT5677_GPIO5:
47278c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL2,
47288c2ecf20Sopenharmony_ci			0x1 << (offset * 3 + 1), !!value << (offset * 3 + 1));
47298c2ecf20Sopenharmony_ci		break;
47308c2ecf20Sopenharmony_ci
47318c2ecf20Sopenharmony_ci	case RT5677_GPIO6:
47328c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL3,
47338c2ecf20Sopenharmony_ci			RT5677_GPIO6_OUT_MASK, !!value << RT5677_GPIO6_OUT_SFT);
47348c2ecf20Sopenharmony_ci		break;
47358c2ecf20Sopenharmony_ci
47368c2ecf20Sopenharmony_ci	default:
47378c2ecf20Sopenharmony_ci		break;
47388c2ecf20Sopenharmony_ci	}
47398c2ecf20Sopenharmony_ci}
47408c2ecf20Sopenharmony_ci
47418c2ecf20Sopenharmony_cistatic int rt5677_gpio_direction_out(struct gpio_chip *chip,
47428c2ecf20Sopenharmony_ci				     unsigned offset, int value)
47438c2ecf20Sopenharmony_ci{
47448c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = gpiochip_get_data(chip);
47458c2ecf20Sopenharmony_ci
47468c2ecf20Sopenharmony_ci	switch (offset) {
47478c2ecf20Sopenharmony_ci	case RT5677_GPIO1 ... RT5677_GPIO5:
47488c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL2,
47498c2ecf20Sopenharmony_ci			0x3 << (offset * 3 + 1),
47508c2ecf20Sopenharmony_ci			(0x2 | !!value) << (offset * 3 + 1));
47518c2ecf20Sopenharmony_ci		break;
47528c2ecf20Sopenharmony_ci
47538c2ecf20Sopenharmony_ci	case RT5677_GPIO6:
47548c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL3,
47558c2ecf20Sopenharmony_ci			RT5677_GPIO6_DIR_MASK | RT5677_GPIO6_OUT_MASK,
47568c2ecf20Sopenharmony_ci			RT5677_GPIO6_DIR_OUT | !!value << RT5677_GPIO6_OUT_SFT);
47578c2ecf20Sopenharmony_ci		break;
47588c2ecf20Sopenharmony_ci
47598c2ecf20Sopenharmony_ci	default:
47608c2ecf20Sopenharmony_ci		break;
47618c2ecf20Sopenharmony_ci	}
47628c2ecf20Sopenharmony_ci
47638c2ecf20Sopenharmony_ci	return 0;
47648c2ecf20Sopenharmony_ci}
47658c2ecf20Sopenharmony_ci
47668c2ecf20Sopenharmony_cistatic int rt5677_gpio_get(struct gpio_chip *chip, unsigned offset)
47678c2ecf20Sopenharmony_ci{
47688c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = gpiochip_get_data(chip);
47698c2ecf20Sopenharmony_ci	int value, ret;
47708c2ecf20Sopenharmony_ci
47718c2ecf20Sopenharmony_ci	ret = regmap_read(rt5677->regmap, RT5677_GPIO_ST, &value);
47728c2ecf20Sopenharmony_ci	if (ret < 0)
47738c2ecf20Sopenharmony_ci		return ret;
47748c2ecf20Sopenharmony_ci
47758c2ecf20Sopenharmony_ci	return (value & (0x1 << offset)) >> offset;
47768c2ecf20Sopenharmony_ci}
47778c2ecf20Sopenharmony_ci
47788c2ecf20Sopenharmony_cistatic int rt5677_gpio_direction_in(struct gpio_chip *chip, unsigned offset)
47798c2ecf20Sopenharmony_ci{
47808c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = gpiochip_get_data(chip);
47818c2ecf20Sopenharmony_ci
47828c2ecf20Sopenharmony_ci	switch (offset) {
47838c2ecf20Sopenharmony_ci	case RT5677_GPIO1 ... RT5677_GPIO5:
47848c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL2,
47858c2ecf20Sopenharmony_ci			0x1 << (offset * 3 + 2), 0x0);
47868c2ecf20Sopenharmony_ci		break;
47878c2ecf20Sopenharmony_ci
47888c2ecf20Sopenharmony_ci	case RT5677_GPIO6:
47898c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL3,
47908c2ecf20Sopenharmony_ci			RT5677_GPIO6_DIR_MASK, RT5677_GPIO6_DIR_IN);
47918c2ecf20Sopenharmony_ci		break;
47928c2ecf20Sopenharmony_ci
47938c2ecf20Sopenharmony_ci	default:
47948c2ecf20Sopenharmony_ci		break;
47958c2ecf20Sopenharmony_ci	}
47968c2ecf20Sopenharmony_ci
47978c2ecf20Sopenharmony_ci	return 0;
47988c2ecf20Sopenharmony_ci}
47998c2ecf20Sopenharmony_ci
48008c2ecf20Sopenharmony_ci/** Configures the gpio as
48018c2ecf20Sopenharmony_ci *   0 - floating
48028c2ecf20Sopenharmony_ci *   1 - pull down
48038c2ecf20Sopenharmony_ci *   2 - pull up
48048c2ecf20Sopenharmony_ci */
48058c2ecf20Sopenharmony_cistatic void rt5677_gpio_config(struct rt5677_priv *rt5677, unsigned offset,
48068c2ecf20Sopenharmony_ci		int value)
48078c2ecf20Sopenharmony_ci{
48088c2ecf20Sopenharmony_ci	int shift;
48098c2ecf20Sopenharmony_ci
48108c2ecf20Sopenharmony_ci	switch (offset) {
48118c2ecf20Sopenharmony_ci	case RT5677_GPIO1 ... RT5677_GPIO2:
48128c2ecf20Sopenharmony_ci		shift = 2 * (1 - offset);
48138c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap,
48148c2ecf20Sopenharmony_ci			RT5677_PR_BASE + RT5677_DIG_IN_PIN_ST_CTRL2,
48158c2ecf20Sopenharmony_ci			0x3 << shift,
48168c2ecf20Sopenharmony_ci			(value & 0x3) << shift);
48178c2ecf20Sopenharmony_ci		break;
48188c2ecf20Sopenharmony_ci
48198c2ecf20Sopenharmony_ci	case RT5677_GPIO3 ... RT5677_GPIO6:
48208c2ecf20Sopenharmony_ci		shift = 2 * (9 - offset);
48218c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap,
48228c2ecf20Sopenharmony_ci			RT5677_PR_BASE + RT5677_DIG_IN_PIN_ST_CTRL3,
48238c2ecf20Sopenharmony_ci			0x3 << shift,
48248c2ecf20Sopenharmony_ci			(value & 0x3) << shift);
48258c2ecf20Sopenharmony_ci		break;
48268c2ecf20Sopenharmony_ci
48278c2ecf20Sopenharmony_ci	default:
48288c2ecf20Sopenharmony_ci		break;
48298c2ecf20Sopenharmony_ci	}
48308c2ecf20Sopenharmony_ci}
48318c2ecf20Sopenharmony_ci
48328c2ecf20Sopenharmony_cistatic int rt5677_to_irq(struct gpio_chip *chip, unsigned offset)
48338c2ecf20Sopenharmony_ci{
48348c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = gpiochip_get_data(chip);
48358c2ecf20Sopenharmony_ci	int irq;
48368c2ecf20Sopenharmony_ci
48378c2ecf20Sopenharmony_ci	if ((rt5677->pdata.jd1_gpio == 1 && offset == RT5677_GPIO1) ||
48388c2ecf20Sopenharmony_ci		(rt5677->pdata.jd1_gpio == 2 &&
48398c2ecf20Sopenharmony_ci			offset == RT5677_GPIO2) ||
48408c2ecf20Sopenharmony_ci		(rt5677->pdata.jd1_gpio == 3 &&
48418c2ecf20Sopenharmony_ci			offset == RT5677_GPIO3)) {
48428c2ecf20Sopenharmony_ci		irq = RT5677_IRQ_JD1;
48438c2ecf20Sopenharmony_ci	} else if ((rt5677->pdata.jd2_gpio == 1 && offset == RT5677_GPIO4) ||
48448c2ecf20Sopenharmony_ci		(rt5677->pdata.jd2_gpio == 2 &&
48458c2ecf20Sopenharmony_ci			offset == RT5677_GPIO5) ||
48468c2ecf20Sopenharmony_ci		(rt5677->pdata.jd2_gpio == 3 &&
48478c2ecf20Sopenharmony_ci			offset == RT5677_GPIO6)) {
48488c2ecf20Sopenharmony_ci		irq = RT5677_IRQ_JD2;
48498c2ecf20Sopenharmony_ci	} else if ((rt5677->pdata.jd3_gpio == 1 &&
48508c2ecf20Sopenharmony_ci			offset == RT5677_GPIO4) ||
48518c2ecf20Sopenharmony_ci		(rt5677->pdata.jd3_gpio == 2 &&
48528c2ecf20Sopenharmony_ci			offset == RT5677_GPIO5) ||
48538c2ecf20Sopenharmony_ci		(rt5677->pdata.jd3_gpio == 3 &&
48548c2ecf20Sopenharmony_ci			offset == RT5677_GPIO6)) {
48558c2ecf20Sopenharmony_ci		irq = RT5677_IRQ_JD3;
48568c2ecf20Sopenharmony_ci	} else {
48578c2ecf20Sopenharmony_ci		return -ENXIO;
48588c2ecf20Sopenharmony_ci	}
48598c2ecf20Sopenharmony_ci
48608c2ecf20Sopenharmony_ci	return irq_create_mapping(rt5677->domain, irq);
48618c2ecf20Sopenharmony_ci}
48628c2ecf20Sopenharmony_ci
48638c2ecf20Sopenharmony_cistatic const struct gpio_chip rt5677_template_chip = {
48648c2ecf20Sopenharmony_ci	.label			= RT5677_DRV_NAME,
48658c2ecf20Sopenharmony_ci	.owner			= THIS_MODULE,
48668c2ecf20Sopenharmony_ci	.direction_output	= rt5677_gpio_direction_out,
48678c2ecf20Sopenharmony_ci	.set			= rt5677_gpio_set,
48688c2ecf20Sopenharmony_ci	.direction_input	= rt5677_gpio_direction_in,
48698c2ecf20Sopenharmony_ci	.get			= rt5677_gpio_get,
48708c2ecf20Sopenharmony_ci	.to_irq			= rt5677_to_irq,
48718c2ecf20Sopenharmony_ci	.can_sleep		= 1,
48728c2ecf20Sopenharmony_ci};
48738c2ecf20Sopenharmony_ci
48748c2ecf20Sopenharmony_cistatic void rt5677_init_gpio(struct i2c_client *i2c)
48758c2ecf20Sopenharmony_ci{
48768c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = i2c_get_clientdata(i2c);
48778c2ecf20Sopenharmony_ci	int ret;
48788c2ecf20Sopenharmony_ci
48798c2ecf20Sopenharmony_ci	rt5677->gpio_chip = rt5677_template_chip;
48808c2ecf20Sopenharmony_ci	rt5677->gpio_chip.ngpio = RT5677_GPIO_NUM;
48818c2ecf20Sopenharmony_ci	rt5677->gpio_chip.parent = &i2c->dev;
48828c2ecf20Sopenharmony_ci	rt5677->gpio_chip.base = -1;
48838c2ecf20Sopenharmony_ci
48848c2ecf20Sopenharmony_ci	ret = gpiochip_add_data(&rt5677->gpio_chip, rt5677);
48858c2ecf20Sopenharmony_ci	if (ret != 0)
48868c2ecf20Sopenharmony_ci		dev_err(&i2c->dev, "Failed to add GPIOs: %d\n", ret);
48878c2ecf20Sopenharmony_ci}
48888c2ecf20Sopenharmony_ci
48898c2ecf20Sopenharmony_cistatic void rt5677_free_gpio(struct i2c_client *i2c)
48908c2ecf20Sopenharmony_ci{
48918c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = i2c_get_clientdata(i2c);
48928c2ecf20Sopenharmony_ci
48938c2ecf20Sopenharmony_ci	gpiochip_remove(&rt5677->gpio_chip);
48948c2ecf20Sopenharmony_ci}
48958c2ecf20Sopenharmony_ci#else
48968c2ecf20Sopenharmony_cistatic void rt5677_gpio_config(struct rt5677_priv *rt5677, unsigned offset,
48978c2ecf20Sopenharmony_ci		int value)
48988c2ecf20Sopenharmony_ci{
48998c2ecf20Sopenharmony_ci}
49008c2ecf20Sopenharmony_ci
49018c2ecf20Sopenharmony_cistatic void rt5677_init_gpio(struct i2c_client *i2c)
49028c2ecf20Sopenharmony_ci{
49038c2ecf20Sopenharmony_ci}
49048c2ecf20Sopenharmony_ci
49058c2ecf20Sopenharmony_cistatic void rt5677_free_gpio(struct i2c_client *i2c)
49068c2ecf20Sopenharmony_ci{
49078c2ecf20Sopenharmony_ci}
49088c2ecf20Sopenharmony_ci#endif
49098c2ecf20Sopenharmony_ci
49108c2ecf20Sopenharmony_cistatic int rt5677_probe(struct snd_soc_component *component)
49118c2ecf20Sopenharmony_ci{
49128c2ecf20Sopenharmony_ci	struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
49138c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
49148c2ecf20Sopenharmony_ci	int i;
49158c2ecf20Sopenharmony_ci
49168c2ecf20Sopenharmony_ci	rt5677->component = component;
49178c2ecf20Sopenharmony_ci
49188c2ecf20Sopenharmony_ci	if (rt5677->pdata.dmic2_clk_pin == RT5677_DMIC_CLK2) {
49198c2ecf20Sopenharmony_ci		snd_soc_dapm_add_routes(dapm,
49208c2ecf20Sopenharmony_ci			rt5677_dmic2_clk_2,
49218c2ecf20Sopenharmony_ci			ARRAY_SIZE(rt5677_dmic2_clk_2));
49228c2ecf20Sopenharmony_ci	} else { /*use dmic1 clock by default*/
49238c2ecf20Sopenharmony_ci		snd_soc_dapm_add_routes(dapm,
49248c2ecf20Sopenharmony_ci			rt5677_dmic2_clk_1,
49258c2ecf20Sopenharmony_ci			ARRAY_SIZE(rt5677_dmic2_clk_1));
49268c2ecf20Sopenharmony_ci	}
49278c2ecf20Sopenharmony_ci
49288c2ecf20Sopenharmony_ci	snd_soc_component_force_bias_level(component, SND_SOC_BIAS_OFF);
49298c2ecf20Sopenharmony_ci
49308c2ecf20Sopenharmony_ci	regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC,
49318c2ecf20Sopenharmony_ci			~RT5677_IRQ_DEBOUNCE_SEL_MASK, 0x0020);
49328c2ecf20Sopenharmony_ci	regmap_write(rt5677->regmap, RT5677_PWR_DSP2,
49338c2ecf20Sopenharmony_ci			RT5677_PWR_SLIM_ISO | RT5677_PWR_CORE_ISO);
49348c2ecf20Sopenharmony_ci
49358c2ecf20Sopenharmony_ci	for (i = 0; i < RT5677_GPIO_NUM; i++)
49368c2ecf20Sopenharmony_ci		rt5677_gpio_config(rt5677, i, rt5677->pdata.gpio_config[i]);
49378c2ecf20Sopenharmony_ci
49388c2ecf20Sopenharmony_ci	mutex_init(&rt5677->dsp_cmd_lock);
49398c2ecf20Sopenharmony_ci	mutex_init(&rt5677->dsp_pri_lock);
49408c2ecf20Sopenharmony_ci
49418c2ecf20Sopenharmony_ci	return 0;
49428c2ecf20Sopenharmony_ci}
49438c2ecf20Sopenharmony_ci
49448c2ecf20Sopenharmony_cistatic void rt5677_remove(struct snd_soc_component *component)
49458c2ecf20Sopenharmony_ci{
49468c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
49478c2ecf20Sopenharmony_ci
49488c2ecf20Sopenharmony_ci	cancel_delayed_work_sync(&rt5677->dsp_work);
49498c2ecf20Sopenharmony_ci
49508c2ecf20Sopenharmony_ci	regmap_write(rt5677->regmap, RT5677_RESET, 0x10ec);
49518c2ecf20Sopenharmony_ci	gpiod_set_value_cansleep(rt5677->pow_ldo2, 0);
49528c2ecf20Sopenharmony_ci	gpiod_set_value_cansleep(rt5677->reset_pin, 1);
49538c2ecf20Sopenharmony_ci}
49548c2ecf20Sopenharmony_ci
49558c2ecf20Sopenharmony_ci#ifdef CONFIG_PM
49568c2ecf20Sopenharmony_cistatic int rt5677_suspend(struct snd_soc_component *component)
49578c2ecf20Sopenharmony_ci{
49588c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
49598c2ecf20Sopenharmony_ci
49608c2ecf20Sopenharmony_ci	if (rt5677->irq) {
49618c2ecf20Sopenharmony_ci		cancel_delayed_work_sync(&rt5677->resume_irq_check);
49628c2ecf20Sopenharmony_ci		disable_irq(rt5677->irq);
49638c2ecf20Sopenharmony_ci	}
49648c2ecf20Sopenharmony_ci
49658c2ecf20Sopenharmony_ci	if (!rt5677->dsp_vad_en) {
49668c2ecf20Sopenharmony_ci		regcache_cache_only(rt5677->regmap, true);
49678c2ecf20Sopenharmony_ci		regcache_mark_dirty(rt5677->regmap);
49688c2ecf20Sopenharmony_ci
49698c2ecf20Sopenharmony_ci		gpiod_set_value_cansleep(rt5677->pow_ldo2, 0);
49708c2ecf20Sopenharmony_ci		gpiod_set_value_cansleep(rt5677->reset_pin, 1);
49718c2ecf20Sopenharmony_ci	}
49728c2ecf20Sopenharmony_ci
49738c2ecf20Sopenharmony_ci	return 0;
49748c2ecf20Sopenharmony_ci}
49758c2ecf20Sopenharmony_ci
49768c2ecf20Sopenharmony_cistatic int rt5677_resume(struct snd_soc_component *component)
49778c2ecf20Sopenharmony_ci{
49788c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
49798c2ecf20Sopenharmony_ci
49808c2ecf20Sopenharmony_ci	if (!rt5677->dsp_vad_en) {
49818c2ecf20Sopenharmony_ci		rt5677->pll_src = 0;
49828c2ecf20Sopenharmony_ci		rt5677->pll_in = 0;
49838c2ecf20Sopenharmony_ci		rt5677->pll_out = 0;
49848c2ecf20Sopenharmony_ci		gpiod_set_value_cansleep(rt5677->pow_ldo2, 1);
49858c2ecf20Sopenharmony_ci		gpiod_set_value_cansleep(rt5677->reset_pin, 0);
49868c2ecf20Sopenharmony_ci		if (rt5677->pow_ldo2 || rt5677->reset_pin)
49878c2ecf20Sopenharmony_ci			msleep(10);
49888c2ecf20Sopenharmony_ci
49898c2ecf20Sopenharmony_ci		regcache_cache_only(rt5677->regmap, false);
49908c2ecf20Sopenharmony_ci		regcache_sync(rt5677->regmap);
49918c2ecf20Sopenharmony_ci	}
49928c2ecf20Sopenharmony_ci
49938c2ecf20Sopenharmony_ci	if (rt5677->irq) {
49948c2ecf20Sopenharmony_ci		enable_irq(rt5677->irq);
49958c2ecf20Sopenharmony_ci		schedule_delayed_work(&rt5677->resume_irq_check, 0);
49968c2ecf20Sopenharmony_ci	}
49978c2ecf20Sopenharmony_ci
49988c2ecf20Sopenharmony_ci	return 0;
49998c2ecf20Sopenharmony_ci}
50008c2ecf20Sopenharmony_ci#else
50018c2ecf20Sopenharmony_ci#define rt5677_suspend NULL
50028c2ecf20Sopenharmony_ci#define rt5677_resume NULL
50038c2ecf20Sopenharmony_ci#endif
50048c2ecf20Sopenharmony_ci
50058c2ecf20Sopenharmony_cistatic int rt5677_read(void *context, unsigned int reg, unsigned int *val)
50068c2ecf20Sopenharmony_ci{
50078c2ecf20Sopenharmony_ci	struct i2c_client *client = context;
50088c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = i2c_get_clientdata(client);
50098c2ecf20Sopenharmony_ci
50108c2ecf20Sopenharmony_ci	if (rt5677->is_dsp_mode) {
50118c2ecf20Sopenharmony_ci		if (reg > 0xff) {
50128c2ecf20Sopenharmony_ci			mutex_lock(&rt5677->dsp_pri_lock);
50138c2ecf20Sopenharmony_ci			rt5677_dsp_mode_i2c_write(rt5677, RT5677_PRIV_INDEX,
50148c2ecf20Sopenharmony_ci				reg & 0xff);
50158c2ecf20Sopenharmony_ci			rt5677_dsp_mode_i2c_read(rt5677, RT5677_PRIV_DATA, val);
50168c2ecf20Sopenharmony_ci			mutex_unlock(&rt5677->dsp_pri_lock);
50178c2ecf20Sopenharmony_ci		} else {
50188c2ecf20Sopenharmony_ci			rt5677_dsp_mode_i2c_read(rt5677, reg, val);
50198c2ecf20Sopenharmony_ci		}
50208c2ecf20Sopenharmony_ci	} else {
50218c2ecf20Sopenharmony_ci		regmap_read(rt5677->regmap_physical, reg, val);
50228c2ecf20Sopenharmony_ci	}
50238c2ecf20Sopenharmony_ci
50248c2ecf20Sopenharmony_ci	return 0;
50258c2ecf20Sopenharmony_ci}
50268c2ecf20Sopenharmony_ci
50278c2ecf20Sopenharmony_cistatic int rt5677_write(void *context, unsigned int reg, unsigned int val)
50288c2ecf20Sopenharmony_ci{
50298c2ecf20Sopenharmony_ci	struct i2c_client *client = context;
50308c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = i2c_get_clientdata(client);
50318c2ecf20Sopenharmony_ci
50328c2ecf20Sopenharmony_ci	if (rt5677->is_dsp_mode) {
50338c2ecf20Sopenharmony_ci		if (reg > 0xff) {
50348c2ecf20Sopenharmony_ci			mutex_lock(&rt5677->dsp_pri_lock);
50358c2ecf20Sopenharmony_ci			rt5677_dsp_mode_i2c_write(rt5677, RT5677_PRIV_INDEX,
50368c2ecf20Sopenharmony_ci				reg & 0xff);
50378c2ecf20Sopenharmony_ci			rt5677_dsp_mode_i2c_write(rt5677, RT5677_PRIV_DATA,
50388c2ecf20Sopenharmony_ci				val);
50398c2ecf20Sopenharmony_ci			mutex_unlock(&rt5677->dsp_pri_lock);
50408c2ecf20Sopenharmony_ci		} else {
50418c2ecf20Sopenharmony_ci			rt5677_dsp_mode_i2c_write(rt5677, reg, val);
50428c2ecf20Sopenharmony_ci		}
50438c2ecf20Sopenharmony_ci	} else {
50448c2ecf20Sopenharmony_ci		regmap_write(rt5677->regmap_physical, reg, val);
50458c2ecf20Sopenharmony_ci	}
50468c2ecf20Sopenharmony_ci
50478c2ecf20Sopenharmony_ci	return 0;
50488c2ecf20Sopenharmony_ci}
50498c2ecf20Sopenharmony_ci
50508c2ecf20Sopenharmony_ci#define RT5677_STEREO_RATES SNDRV_PCM_RATE_8000_96000
50518c2ecf20Sopenharmony_ci#define RT5677_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
50528c2ecf20Sopenharmony_ci			SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
50538c2ecf20Sopenharmony_ci
50548c2ecf20Sopenharmony_cistatic const struct snd_soc_dai_ops rt5677_aif_dai_ops = {
50558c2ecf20Sopenharmony_ci	.hw_params = rt5677_hw_params,
50568c2ecf20Sopenharmony_ci	.set_fmt = rt5677_set_dai_fmt,
50578c2ecf20Sopenharmony_ci	.set_sysclk = rt5677_set_dai_sysclk,
50588c2ecf20Sopenharmony_ci	.set_pll = rt5677_set_dai_pll,
50598c2ecf20Sopenharmony_ci	.set_tdm_slot = rt5677_set_tdm_slot,
50608c2ecf20Sopenharmony_ci};
50618c2ecf20Sopenharmony_ci
50628c2ecf20Sopenharmony_cistatic const struct snd_soc_dai_ops rt5677_dsp_dai_ops = {
50638c2ecf20Sopenharmony_ci	.set_sysclk = rt5677_set_dai_sysclk,
50648c2ecf20Sopenharmony_ci	.set_pll = rt5677_set_dai_pll,
50658c2ecf20Sopenharmony_ci};
50668c2ecf20Sopenharmony_ci
50678c2ecf20Sopenharmony_cistatic struct snd_soc_dai_driver rt5677_dai[] = {
50688c2ecf20Sopenharmony_ci	{
50698c2ecf20Sopenharmony_ci		.name = "rt5677-aif1",
50708c2ecf20Sopenharmony_ci		.id = RT5677_AIF1,
50718c2ecf20Sopenharmony_ci		.playback = {
50728c2ecf20Sopenharmony_ci			.stream_name = "AIF1 Playback",
50738c2ecf20Sopenharmony_ci			.channels_min = 1,
50748c2ecf20Sopenharmony_ci			.channels_max = 2,
50758c2ecf20Sopenharmony_ci			.rates = RT5677_STEREO_RATES,
50768c2ecf20Sopenharmony_ci			.formats = RT5677_FORMATS,
50778c2ecf20Sopenharmony_ci		},
50788c2ecf20Sopenharmony_ci		.capture = {
50798c2ecf20Sopenharmony_ci			.stream_name = "AIF1 Capture",
50808c2ecf20Sopenharmony_ci			.channels_min = 1,
50818c2ecf20Sopenharmony_ci			.channels_max = 2,
50828c2ecf20Sopenharmony_ci			.rates = RT5677_STEREO_RATES,
50838c2ecf20Sopenharmony_ci			.formats = RT5677_FORMATS,
50848c2ecf20Sopenharmony_ci		},
50858c2ecf20Sopenharmony_ci		.ops = &rt5677_aif_dai_ops,
50868c2ecf20Sopenharmony_ci	},
50878c2ecf20Sopenharmony_ci	{
50888c2ecf20Sopenharmony_ci		.name = "rt5677-aif2",
50898c2ecf20Sopenharmony_ci		.id = RT5677_AIF2,
50908c2ecf20Sopenharmony_ci		.playback = {
50918c2ecf20Sopenharmony_ci			.stream_name = "AIF2 Playback",
50928c2ecf20Sopenharmony_ci			.channels_min = 1,
50938c2ecf20Sopenharmony_ci			.channels_max = 2,
50948c2ecf20Sopenharmony_ci			.rates = RT5677_STEREO_RATES,
50958c2ecf20Sopenharmony_ci			.formats = RT5677_FORMATS,
50968c2ecf20Sopenharmony_ci		},
50978c2ecf20Sopenharmony_ci		.capture = {
50988c2ecf20Sopenharmony_ci			.stream_name = "AIF2 Capture",
50998c2ecf20Sopenharmony_ci			.channels_min = 1,
51008c2ecf20Sopenharmony_ci			.channels_max = 2,
51018c2ecf20Sopenharmony_ci			.rates = RT5677_STEREO_RATES,
51028c2ecf20Sopenharmony_ci			.formats = RT5677_FORMATS,
51038c2ecf20Sopenharmony_ci		},
51048c2ecf20Sopenharmony_ci		.ops = &rt5677_aif_dai_ops,
51058c2ecf20Sopenharmony_ci	},
51068c2ecf20Sopenharmony_ci	{
51078c2ecf20Sopenharmony_ci		.name = "rt5677-aif3",
51088c2ecf20Sopenharmony_ci		.id = RT5677_AIF3,
51098c2ecf20Sopenharmony_ci		.playback = {
51108c2ecf20Sopenharmony_ci			.stream_name = "AIF3 Playback",
51118c2ecf20Sopenharmony_ci			.channels_min = 1,
51128c2ecf20Sopenharmony_ci			.channels_max = 2,
51138c2ecf20Sopenharmony_ci			.rates = RT5677_STEREO_RATES,
51148c2ecf20Sopenharmony_ci			.formats = RT5677_FORMATS,
51158c2ecf20Sopenharmony_ci		},
51168c2ecf20Sopenharmony_ci		.capture = {
51178c2ecf20Sopenharmony_ci			.stream_name = "AIF3 Capture",
51188c2ecf20Sopenharmony_ci			.channels_min = 1,
51198c2ecf20Sopenharmony_ci			.channels_max = 2,
51208c2ecf20Sopenharmony_ci			.rates = RT5677_STEREO_RATES,
51218c2ecf20Sopenharmony_ci			.formats = RT5677_FORMATS,
51228c2ecf20Sopenharmony_ci		},
51238c2ecf20Sopenharmony_ci		.ops = &rt5677_aif_dai_ops,
51248c2ecf20Sopenharmony_ci	},
51258c2ecf20Sopenharmony_ci	{
51268c2ecf20Sopenharmony_ci		.name = "rt5677-aif4",
51278c2ecf20Sopenharmony_ci		.id = RT5677_AIF4,
51288c2ecf20Sopenharmony_ci		.playback = {
51298c2ecf20Sopenharmony_ci			.stream_name = "AIF4 Playback",
51308c2ecf20Sopenharmony_ci			.channels_min = 1,
51318c2ecf20Sopenharmony_ci			.channels_max = 2,
51328c2ecf20Sopenharmony_ci			.rates = RT5677_STEREO_RATES,
51338c2ecf20Sopenharmony_ci			.formats = RT5677_FORMATS,
51348c2ecf20Sopenharmony_ci		},
51358c2ecf20Sopenharmony_ci		.capture = {
51368c2ecf20Sopenharmony_ci			.stream_name = "AIF4 Capture",
51378c2ecf20Sopenharmony_ci			.channels_min = 1,
51388c2ecf20Sopenharmony_ci			.channels_max = 2,
51398c2ecf20Sopenharmony_ci			.rates = RT5677_STEREO_RATES,
51408c2ecf20Sopenharmony_ci			.formats = RT5677_FORMATS,
51418c2ecf20Sopenharmony_ci		},
51428c2ecf20Sopenharmony_ci		.ops = &rt5677_aif_dai_ops,
51438c2ecf20Sopenharmony_ci	},
51448c2ecf20Sopenharmony_ci	{
51458c2ecf20Sopenharmony_ci		.name = "rt5677-slimbus",
51468c2ecf20Sopenharmony_ci		.id = RT5677_AIF5,
51478c2ecf20Sopenharmony_ci		.playback = {
51488c2ecf20Sopenharmony_ci			.stream_name = "SLIMBus Playback",
51498c2ecf20Sopenharmony_ci			.channels_min = 1,
51508c2ecf20Sopenharmony_ci			.channels_max = 2,
51518c2ecf20Sopenharmony_ci			.rates = RT5677_STEREO_RATES,
51528c2ecf20Sopenharmony_ci			.formats = RT5677_FORMATS,
51538c2ecf20Sopenharmony_ci		},
51548c2ecf20Sopenharmony_ci		.capture = {
51558c2ecf20Sopenharmony_ci			.stream_name = "SLIMBus Capture",
51568c2ecf20Sopenharmony_ci			.channels_min = 1,
51578c2ecf20Sopenharmony_ci			.channels_max = 2,
51588c2ecf20Sopenharmony_ci			.rates = RT5677_STEREO_RATES,
51598c2ecf20Sopenharmony_ci			.formats = RT5677_FORMATS,
51608c2ecf20Sopenharmony_ci		},
51618c2ecf20Sopenharmony_ci		.ops = &rt5677_aif_dai_ops,
51628c2ecf20Sopenharmony_ci	},
51638c2ecf20Sopenharmony_ci	{
51648c2ecf20Sopenharmony_ci		.name = "rt5677-dspbuffer",
51658c2ecf20Sopenharmony_ci		.id = RT5677_DSPBUFF,
51668c2ecf20Sopenharmony_ci		.capture = {
51678c2ecf20Sopenharmony_ci			.stream_name = "DSP Buffer",
51688c2ecf20Sopenharmony_ci			.channels_min = 1,
51698c2ecf20Sopenharmony_ci			.channels_max = 1,
51708c2ecf20Sopenharmony_ci			.rates = SNDRV_PCM_RATE_16000,
51718c2ecf20Sopenharmony_ci			.formats = SNDRV_PCM_FMTBIT_S16_LE,
51728c2ecf20Sopenharmony_ci		},
51738c2ecf20Sopenharmony_ci		.ops = &rt5677_dsp_dai_ops,
51748c2ecf20Sopenharmony_ci	},
51758c2ecf20Sopenharmony_ci};
51768c2ecf20Sopenharmony_ci
51778c2ecf20Sopenharmony_cistatic const struct snd_soc_component_driver soc_component_dev_rt5677 = {
51788c2ecf20Sopenharmony_ci	.name			= RT5677_DRV_NAME,
51798c2ecf20Sopenharmony_ci	.probe			= rt5677_probe,
51808c2ecf20Sopenharmony_ci	.remove			= rt5677_remove,
51818c2ecf20Sopenharmony_ci	.suspend		= rt5677_suspend,
51828c2ecf20Sopenharmony_ci	.resume			= rt5677_resume,
51838c2ecf20Sopenharmony_ci	.set_bias_level		= rt5677_set_bias_level,
51848c2ecf20Sopenharmony_ci	.controls		= rt5677_snd_controls,
51858c2ecf20Sopenharmony_ci	.num_controls		= ARRAY_SIZE(rt5677_snd_controls),
51868c2ecf20Sopenharmony_ci	.dapm_widgets		= rt5677_dapm_widgets,
51878c2ecf20Sopenharmony_ci	.num_dapm_widgets	= ARRAY_SIZE(rt5677_dapm_widgets),
51888c2ecf20Sopenharmony_ci	.dapm_routes		= rt5677_dapm_routes,
51898c2ecf20Sopenharmony_ci	.num_dapm_routes	= ARRAY_SIZE(rt5677_dapm_routes),
51908c2ecf20Sopenharmony_ci	.use_pmdown_time	= 1,
51918c2ecf20Sopenharmony_ci	.endianness		= 1,
51928c2ecf20Sopenharmony_ci	.non_legacy_dai_naming	= 1,
51938c2ecf20Sopenharmony_ci};
51948c2ecf20Sopenharmony_ci
51958c2ecf20Sopenharmony_cistatic const struct regmap_config rt5677_regmap_physical = {
51968c2ecf20Sopenharmony_ci	.name = "physical",
51978c2ecf20Sopenharmony_ci	.reg_bits = 8,
51988c2ecf20Sopenharmony_ci	.val_bits = 16,
51998c2ecf20Sopenharmony_ci
52008c2ecf20Sopenharmony_ci	.max_register = RT5677_VENDOR_ID2 + 1 + (ARRAY_SIZE(rt5677_ranges) *
52018c2ecf20Sopenharmony_ci						RT5677_PR_SPACING),
52028c2ecf20Sopenharmony_ci	.readable_reg = rt5677_readable_register,
52038c2ecf20Sopenharmony_ci
52048c2ecf20Sopenharmony_ci	.cache_type = REGCACHE_NONE,
52058c2ecf20Sopenharmony_ci	.ranges = rt5677_ranges,
52068c2ecf20Sopenharmony_ci	.num_ranges = ARRAY_SIZE(rt5677_ranges),
52078c2ecf20Sopenharmony_ci};
52088c2ecf20Sopenharmony_ci
52098c2ecf20Sopenharmony_cistatic const struct regmap_config rt5677_regmap = {
52108c2ecf20Sopenharmony_ci	.reg_bits = 8,
52118c2ecf20Sopenharmony_ci	.val_bits = 16,
52128c2ecf20Sopenharmony_ci
52138c2ecf20Sopenharmony_ci	.max_register = RT5677_VENDOR_ID2 + 1 + (ARRAY_SIZE(rt5677_ranges) *
52148c2ecf20Sopenharmony_ci						RT5677_PR_SPACING),
52158c2ecf20Sopenharmony_ci
52168c2ecf20Sopenharmony_ci	.volatile_reg = rt5677_volatile_register,
52178c2ecf20Sopenharmony_ci	.readable_reg = rt5677_readable_register,
52188c2ecf20Sopenharmony_ci	.reg_read = rt5677_read,
52198c2ecf20Sopenharmony_ci	.reg_write = rt5677_write,
52208c2ecf20Sopenharmony_ci
52218c2ecf20Sopenharmony_ci	.cache_type = REGCACHE_RBTREE,
52228c2ecf20Sopenharmony_ci	.reg_defaults = rt5677_reg,
52238c2ecf20Sopenharmony_ci	.num_reg_defaults = ARRAY_SIZE(rt5677_reg),
52248c2ecf20Sopenharmony_ci	.ranges = rt5677_ranges,
52258c2ecf20Sopenharmony_ci	.num_ranges = ARRAY_SIZE(rt5677_ranges),
52268c2ecf20Sopenharmony_ci};
52278c2ecf20Sopenharmony_ci
52288c2ecf20Sopenharmony_cistatic const struct of_device_id rt5677_of_match[] = {
52298c2ecf20Sopenharmony_ci	{ .compatible = "realtek,rt5677", .data = (const void *)RT5677 },
52308c2ecf20Sopenharmony_ci	{ }
52318c2ecf20Sopenharmony_ci};
52328c2ecf20Sopenharmony_ciMODULE_DEVICE_TABLE(of, rt5677_of_match);
52338c2ecf20Sopenharmony_ci
52348c2ecf20Sopenharmony_cistatic const struct acpi_device_id rt5677_acpi_match[] = {
52358c2ecf20Sopenharmony_ci	{ "RT5677CE", RT5677 },
52368c2ecf20Sopenharmony_ci	{ }
52378c2ecf20Sopenharmony_ci};
52388c2ecf20Sopenharmony_ciMODULE_DEVICE_TABLE(acpi, rt5677_acpi_match);
52398c2ecf20Sopenharmony_ci
52408c2ecf20Sopenharmony_cistatic void rt5677_read_device_properties(struct rt5677_priv *rt5677,
52418c2ecf20Sopenharmony_ci		struct device *dev)
52428c2ecf20Sopenharmony_ci{
52438c2ecf20Sopenharmony_ci	u32 val;
52448c2ecf20Sopenharmony_ci
52458c2ecf20Sopenharmony_ci	rt5677->pdata.in1_diff =
52468c2ecf20Sopenharmony_ci		device_property_read_bool(dev, "IN1") ||
52478c2ecf20Sopenharmony_ci		device_property_read_bool(dev, "realtek,in1-differential");
52488c2ecf20Sopenharmony_ci
52498c2ecf20Sopenharmony_ci	rt5677->pdata.in2_diff =
52508c2ecf20Sopenharmony_ci		device_property_read_bool(dev, "IN2") ||
52518c2ecf20Sopenharmony_ci		device_property_read_bool(dev, "realtek,in2-differential");
52528c2ecf20Sopenharmony_ci
52538c2ecf20Sopenharmony_ci	rt5677->pdata.lout1_diff =
52548c2ecf20Sopenharmony_ci		device_property_read_bool(dev, "OUT1") ||
52558c2ecf20Sopenharmony_ci		device_property_read_bool(dev, "realtek,lout1-differential");
52568c2ecf20Sopenharmony_ci
52578c2ecf20Sopenharmony_ci	rt5677->pdata.lout2_diff =
52588c2ecf20Sopenharmony_ci		device_property_read_bool(dev, "OUT2") ||
52598c2ecf20Sopenharmony_ci		device_property_read_bool(dev, "realtek,lout2-differential");
52608c2ecf20Sopenharmony_ci
52618c2ecf20Sopenharmony_ci	rt5677->pdata.lout3_diff =
52628c2ecf20Sopenharmony_ci		device_property_read_bool(dev, "OUT3") ||
52638c2ecf20Sopenharmony_ci		device_property_read_bool(dev, "realtek,lout3-differential");
52648c2ecf20Sopenharmony_ci
52658c2ecf20Sopenharmony_ci	device_property_read_u8_array(dev, "realtek,gpio-config",
52668c2ecf20Sopenharmony_ci				      rt5677->pdata.gpio_config,
52678c2ecf20Sopenharmony_ci				      RT5677_GPIO_NUM);
52688c2ecf20Sopenharmony_ci
52698c2ecf20Sopenharmony_ci	if (!device_property_read_u32(dev, "DCLK", &val) ||
52708c2ecf20Sopenharmony_ci	    !device_property_read_u32(dev, "realtek,dmic2_clk_pin", &val))
52718c2ecf20Sopenharmony_ci		rt5677->pdata.dmic2_clk_pin = val;
52728c2ecf20Sopenharmony_ci
52738c2ecf20Sopenharmony_ci	if (!device_property_read_u32(dev, "JD1", &val) ||
52748c2ecf20Sopenharmony_ci	    !device_property_read_u32(dev, "realtek,jd1-gpio", &val))
52758c2ecf20Sopenharmony_ci		rt5677->pdata.jd1_gpio = val;
52768c2ecf20Sopenharmony_ci
52778c2ecf20Sopenharmony_ci	if (!device_property_read_u32(dev, "JD2", &val) ||
52788c2ecf20Sopenharmony_ci	    !device_property_read_u32(dev, "realtek,jd2-gpio", &val))
52798c2ecf20Sopenharmony_ci		rt5677->pdata.jd2_gpio = val;
52808c2ecf20Sopenharmony_ci
52818c2ecf20Sopenharmony_ci	if (!device_property_read_u32(dev, "JD3", &val) ||
52828c2ecf20Sopenharmony_ci	    !device_property_read_u32(dev, "realtek,jd3-gpio", &val))
52838c2ecf20Sopenharmony_ci		rt5677->pdata.jd3_gpio = val;
52848c2ecf20Sopenharmony_ci}
52858c2ecf20Sopenharmony_ci
52868c2ecf20Sopenharmony_cistruct rt5677_irq_desc {
52878c2ecf20Sopenharmony_ci	unsigned int enable_mask;
52888c2ecf20Sopenharmony_ci	unsigned int status_mask;
52898c2ecf20Sopenharmony_ci	unsigned int polarity_mask;
52908c2ecf20Sopenharmony_ci};
52918c2ecf20Sopenharmony_ci
52928c2ecf20Sopenharmony_cistatic const struct rt5677_irq_desc rt5677_irq_descs[] = {
52938c2ecf20Sopenharmony_ci	[RT5677_IRQ_JD1] = {
52948c2ecf20Sopenharmony_ci		.enable_mask = RT5677_EN_IRQ_GPIO_JD1,
52958c2ecf20Sopenharmony_ci		.status_mask = RT5677_STA_GPIO_JD1,
52968c2ecf20Sopenharmony_ci		.polarity_mask = RT5677_INV_GPIO_JD1,
52978c2ecf20Sopenharmony_ci	},
52988c2ecf20Sopenharmony_ci	[RT5677_IRQ_JD2] = {
52998c2ecf20Sopenharmony_ci		.enable_mask = RT5677_EN_IRQ_GPIO_JD2,
53008c2ecf20Sopenharmony_ci		.status_mask = RT5677_STA_GPIO_JD2,
53018c2ecf20Sopenharmony_ci		.polarity_mask = RT5677_INV_GPIO_JD2,
53028c2ecf20Sopenharmony_ci	},
53038c2ecf20Sopenharmony_ci	[RT5677_IRQ_JD3] = {
53048c2ecf20Sopenharmony_ci		.enable_mask = RT5677_EN_IRQ_GPIO_JD3,
53058c2ecf20Sopenharmony_ci		.status_mask = RT5677_STA_GPIO_JD3,
53068c2ecf20Sopenharmony_ci		.polarity_mask = RT5677_INV_GPIO_JD3,
53078c2ecf20Sopenharmony_ci	},
53088c2ecf20Sopenharmony_ci};
53098c2ecf20Sopenharmony_ci
53108c2ecf20Sopenharmony_cistatic bool rt5677_check_hotword(struct rt5677_priv *rt5677)
53118c2ecf20Sopenharmony_ci{
53128c2ecf20Sopenharmony_ci	int reg_gpio;
53138c2ecf20Sopenharmony_ci
53148c2ecf20Sopenharmony_ci	if (!rt5677->is_dsp_mode)
53158c2ecf20Sopenharmony_ci		return false;
53168c2ecf20Sopenharmony_ci
53178c2ecf20Sopenharmony_ci	if (regmap_read(rt5677->regmap, RT5677_GPIO_CTRL1, &reg_gpio))
53188c2ecf20Sopenharmony_ci		return false;
53198c2ecf20Sopenharmony_ci
53208c2ecf20Sopenharmony_ci	/* Firmware sets GPIO1 pin to be GPIO1 after hotword is detected */
53218c2ecf20Sopenharmony_ci	if ((reg_gpio & RT5677_GPIO1_PIN_MASK) == RT5677_GPIO1_PIN_IRQ)
53228c2ecf20Sopenharmony_ci		return false;
53238c2ecf20Sopenharmony_ci
53248c2ecf20Sopenharmony_ci	/* Set GPIO1 pin back to be IRQ output for jack detect */
53258c2ecf20Sopenharmony_ci	regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL1,
53268c2ecf20Sopenharmony_ci			RT5677_GPIO1_PIN_MASK, RT5677_GPIO1_PIN_IRQ);
53278c2ecf20Sopenharmony_ci
53288c2ecf20Sopenharmony_ci	rt5677_spi_hotword_detected();
53298c2ecf20Sopenharmony_ci	return true;
53308c2ecf20Sopenharmony_ci}
53318c2ecf20Sopenharmony_ci
53328c2ecf20Sopenharmony_cistatic irqreturn_t rt5677_irq(int unused, void *data)
53338c2ecf20Sopenharmony_ci{
53348c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = data;
53358c2ecf20Sopenharmony_ci	int ret = 0, loop, i, reg_irq, virq;
53368c2ecf20Sopenharmony_ci	bool irq_fired = false;
53378c2ecf20Sopenharmony_ci
53388c2ecf20Sopenharmony_ci	mutex_lock(&rt5677->irq_lock);
53398c2ecf20Sopenharmony_ci
53408c2ecf20Sopenharmony_ci	/*
53418c2ecf20Sopenharmony_ci	 * Loop to handle interrupts until the last i2c read shows no pending
53428c2ecf20Sopenharmony_ci	 * irqs. The interrupt line is shared by multiple interrupt sources.
53438c2ecf20Sopenharmony_ci	 * After the regmap_read() below, a new interrupt source line may
53448c2ecf20Sopenharmony_ci	 * become high before the regmap_write() finishes, so there isn't a
53458c2ecf20Sopenharmony_ci	 * rising edge on the shared interrupt line for the new interrupt. Thus,
53468c2ecf20Sopenharmony_ci	 * the loop is needed to avoid missing irqs.
53478c2ecf20Sopenharmony_ci	 *
53488c2ecf20Sopenharmony_ci	 * A safeguard of 20 loops is used to avoid hanging in the irq handler
53498c2ecf20Sopenharmony_ci	 * if there is something wrong with the interrupt status update. The
53508c2ecf20Sopenharmony_ci	 * interrupt sources here are audio jack plug/unplug events which
53518c2ecf20Sopenharmony_ci	 * shouldn't happen at a high frequency for a long period of time.
53528c2ecf20Sopenharmony_ci	 * Empirically, more than 3 loops have never been seen.
53538c2ecf20Sopenharmony_ci	 */
53548c2ecf20Sopenharmony_ci	for (loop = 0; loop < 20; loop++) {
53558c2ecf20Sopenharmony_ci		/* Read interrupt status */
53568c2ecf20Sopenharmony_ci		ret = regmap_read(rt5677->regmap, RT5677_IRQ_CTRL1, &reg_irq);
53578c2ecf20Sopenharmony_ci		if (ret) {
53588c2ecf20Sopenharmony_ci			dev_err(rt5677->dev, "failed reading IRQ status: %d\n",
53598c2ecf20Sopenharmony_ci				ret);
53608c2ecf20Sopenharmony_ci			goto exit;
53618c2ecf20Sopenharmony_ci		}
53628c2ecf20Sopenharmony_ci
53638c2ecf20Sopenharmony_ci		irq_fired = false;
53648c2ecf20Sopenharmony_ci		for (i = 0; i < RT5677_IRQ_NUM; i++) {
53658c2ecf20Sopenharmony_ci			if (reg_irq & rt5677_irq_descs[i].status_mask) {
53668c2ecf20Sopenharmony_ci				irq_fired = true;
53678c2ecf20Sopenharmony_ci				virq = irq_find_mapping(rt5677->domain, i);
53688c2ecf20Sopenharmony_ci				if (virq)
53698c2ecf20Sopenharmony_ci					handle_nested_irq(virq);
53708c2ecf20Sopenharmony_ci
53718c2ecf20Sopenharmony_ci				/* Clear the interrupt by flipping the polarity
53728c2ecf20Sopenharmony_ci				 * of the interrupt source line that fired
53738c2ecf20Sopenharmony_ci				 */
53748c2ecf20Sopenharmony_ci				reg_irq ^= rt5677_irq_descs[i].polarity_mask;
53758c2ecf20Sopenharmony_ci			}
53768c2ecf20Sopenharmony_ci		}
53778c2ecf20Sopenharmony_ci
53788c2ecf20Sopenharmony_ci		/* Exit the loop only when we know for sure that GPIO1 pin
53798c2ecf20Sopenharmony_ci		 * was low at some point since irq_lock was acquired. Any event
53808c2ecf20Sopenharmony_ci		 * after that point creates a rising edge that triggers another
53818c2ecf20Sopenharmony_ci		 * call to rt5677_irq().
53828c2ecf20Sopenharmony_ci		 */
53838c2ecf20Sopenharmony_ci		if (!irq_fired && !rt5677_check_hotword(rt5677))
53848c2ecf20Sopenharmony_ci			goto exit;
53858c2ecf20Sopenharmony_ci
53868c2ecf20Sopenharmony_ci		ret = regmap_write(rt5677->regmap, RT5677_IRQ_CTRL1, reg_irq);
53878c2ecf20Sopenharmony_ci		if (ret) {
53888c2ecf20Sopenharmony_ci			dev_err(rt5677->dev, "failed updating IRQ status: %d\n",
53898c2ecf20Sopenharmony_ci				ret);
53908c2ecf20Sopenharmony_ci			goto exit;
53918c2ecf20Sopenharmony_ci		}
53928c2ecf20Sopenharmony_ci	}
53938c2ecf20Sopenharmony_ciexit:
53948c2ecf20Sopenharmony_ci	WARN_ON_ONCE(loop == 20);
53958c2ecf20Sopenharmony_ci	mutex_unlock(&rt5677->irq_lock);
53968c2ecf20Sopenharmony_ci	if (irq_fired)
53978c2ecf20Sopenharmony_ci		return IRQ_HANDLED;
53988c2ecf20Sopenharmony_ci	else
53998c2ecf20Sopenharmony_ci		return IRQ_NONE;
54008c2ecf20Sopenharmony_ci}
54018c2ecf20Sopenharmony_ci
54028c2ecf20Sopenharmony_cistatic void rt5677_resume_irq_check(struct work_struct *work)
54038c2ecf20Sopenharmony_ci{
54048c2ecf20Sopenharmony_ci	int i, virq;
54058c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 =
54068c2ecf20Sopenharmony_ci		container_of(work, struct rt5677_priv, resume_irq_check.work);
54078c2ecf20Sopenharmony_ci
54088c2ecf20Sopenharmony_ci	/* This is needed to check and clear the interrupt status register
54098c2ecf20Sopenharmony_ci	 * at resume. If the headset is plugged/unplugged when the device is
54108c2ecf20Sopenharmony_ci	 * fully suspended, there won't be a rising edge at resume to trigger
54118c2ecf20Sopenharmony_ci	 * the interrupt. Without this, we miss the next unplug/plug event.
54128c2ecf20Sopenharmony_ci	 */
54138c2ecf20Sopenharmony_ci	rt5677_irq(0, rt5677);
54148c2ecf20Sopenharmony_ci
54158c2ecf20Sopenharmony_ci	/* Call all enabled jack detect irq handlers again. This is needed in
54168c2ecf20Sopenharmony_ci	 * addition to the above check for a corner case caused by jack gpio
54178c2ecf20Sopenharmony_ci	 * debounce. After codec irq is disabled at suspend, the delayed work
54188c2ecf20Sopenharmony_ci	 * scheduled by soc-jack may run and read wrong jack gpio values, since
54198c2ecf20Sopenharmony_ci	 * the regmap is in cache only mode. At resume, there is no irq because
54208c2ecf20Sopenharmony_ci	 * rt5677_irq has already ran and cleared the irq status at suspend.
54218c2ecf20Sopenharmony_ci	 * Without this explicit check, unplug the headset right after suspend
54228c2ecf20Sopenharmony_ci	 * starts, then after resume the headset is still shown as plugged in.
54238c2ecf20Sopenharmony_ci	 */
54248c2ecf20Sopenharmony_ci	mutex_lock(&rt5677->irq_lock);
54258c2ecf20Sopenharmony_ci	for (i = 0; i < RT5677_IRQ_NUM; i++) {
54268c2ecf20Sopenharmony_ci		if (rt5677->irq_en & rt5677_irq_descs[i].enable_mask) {
54278c2ecf20Sopenharmony_ci			virq = irq_find_mapping(rt5677->domain, i);
54288c2ecf20Sopenharmony_ci			if (virq)
54298c2ecf20Sopenharmony_ci				handle_nested_irq(virq);
54308c2ecf20Sopenharmony_ci		}
54318c2ecf20Sopenharmony_ci	}
54328c2ecf20Sopenharmony_ci	mutex_unlock(&rt5677->irq_lock);
54338c2ecf20Sopenharmony_ci}
54348c2ecf20Sopenharmony_ci
54358c2ecf20Sopenharmony_cistatic void rt5677_irq_bus_lock(struct irq_data *data)
54368c2ecf20Sopenharmony_ci{
54378c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = irq_data_get_irq_chip_data(data);
54388c2ecf20Sopenharmony_ci
54398c2ecf20Sopenharmony_ci	mutex_lock(&rt5677->irq_lock);
54408c2ecf20Sopenharmony_ci}
54418c2ecf20Sopenharmony_ci
54428c2ecf20Sopenharmony_cistatic void rt5677_irq_bus_sync_unlock(struct irq_data *data)
54438c2ecf20Sopenharmony_ci{
54448c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = irq_data_get_irq_chip_data(data);
54458c2ecf20Sopenharmony_ci
54468c2ecf20Sopenharmony_ci	// Set the enable/disable bits for the jack detect IRQs.
54478c2ecf20Sopenharmony_ci	regmap_update_bits(rt5677->regmap, RT5677_IRQ_CTRL1,
54488c2ecf20Sopenharmony_ci			RT5677_EN_IRQ_GPIO_JD1 | RT5677_EN_IRQ_GPIO_JD2 |
54498c2ecf20Sopenharmony_ci			RT5677_EN_IRQ_GPIO_JD3, rt5677->irq_en);
54508c2ecf20Sopenharmony_ci	mutex_unlock(&rt5677->irq_lock);
54518c2ecf20Sopenharmony_ci}
54528c2ecf20Sopenharmony_ci
54538c2ecf20Sopenharmony_cistatic void rt5677_irq_enable(struct irq_data *data)
54548c2ecf20Sopenharmony_ci{
54558c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = irq_data_get_irq_chip_data(data);
54568c2ecf20Sopenharmony_ci
54578c2ecf20Sopenharmony_ci	rt5677->irq_en |= rt5677_irq_descs[data->hwirq].enable_mask;
54588c2ecf20Sopenharmony_ci}
54598c2ecf20Sopenharmony_ci
54608c2ecf20Sopenharmony_cistatic void rt5677_irq_disable(struct irq_data *data)
54618c2ecf20Sopenharmony_ci{
54628c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = irq_data_get_irq_chip_data(data);
54638c2ecf20Sopenharmony_ci
54648c2ecf20Sopenharmony_ci	rt5677->irq_en &= ~rt5677_irq_descs[data->hwirq].enable_mask;
54658c2ecf20Sopenharmony_ci}
54668c2ecf20Sopenharmony_ci
54678c2ecf20Sopenharmony_cistatic struct irq_chip rt5677_irq_chip = {
54688c2ecf20Sopenharmony_ci	.name			= "rt5677_irq_chip",
54698c2ecf20Sopenharmony_ci	.irq_bus_lock		= rt5677_irq_bus_lock,
54708c2ecf20Sopenharmony_ci	.irq_bus_sync_unlock	= rt5677_irq_bus_sync_unlock,
54718c2ecf20Sopenharmony_ci	.irq_disable		= rt5677_irq_disable,
54728c2ecf20Sopenharmony_ci	.irq_enable		= rt5677_irq_enable,
54738c2ecf20Sopenharmony_ci};
54748c2ecf20Sopenharmony_ci
54758c2ecf20Sopenharmony_cistatic int rt5677_irq_map(struct irq_domain *h, unsigned int virq,
54768c2ecf20Sopenharmony_ci			  irq_hw_number_t hw)
54778c2ecf20Sopenharmony_ci{
54788c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = h->host_data;
54798c2ecf20Sopenharmony_ci
54808c2ecf20Sopenharmony_ci	irq_set_chip_data(virq, rt5677);
54818c2ecf20Sopenharmony_ci	irq_set_chip(virq, &rt5677_irq_chip);
54828c2ecf20Sopenharmony_ci	irq_set_nested_thread(virq, 1);
54838c2ecf20Sopenharmony_ci	irq_set_noprobe(virq);
54848c2ecf20Sopenharmony_ci	return 0;
54858c2ecf20Sopenharmony_ci}
54868c2ecf20Sopenharmony_ci
54878c2ecf20Sopenharmony_ci
54888c2ecf20Sopenharmony_cistatic const struct irq_domain_ops rt5677_domain_ops = {
54898c2ecf20Sopenharmony_ci	.map	= rt5677_irq_map,
54908c2ecf20Sopenharmony_ci	.xlate	= irq_domain_xlate_twocell,
54918c2ecf20Sopenharmony_ci};
54928c2ecf20Sopenharmony_ci
54938c2ecf20Sopenharmony_cistatic int rt5677_init_irq(struct i2c_client *i2c)
54948c2ecf20Sopenharmony_ci{
54958c2ecf20Sopenharmony_ci	int ret;
54968c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677 = i2c_get_clientdata(i2c);
54978c2ecf20Sopenharmony_ci	unsigned int jd_mask = 0, jd_val = 0;
54988c2ecf20Sopenharmony_ci
54998c2ecf20Sopenharmony_ci	if (!rt5677->pdata.jd1_gpio &&
55008c2ecf20Sopenharmony_ci		!rt5677->pdata.jd2_gpio &&
55018c2ecf20Sopenharmony_ci		!rt5677->pdata.jd3_gpio)
55028c2ecf20Sopenharmony_ci		return 0;
55038c2ecf20Sopenharmony_ci
55048c2ecf20Sopenharmony_ci	if (!i2c->irq) {
55058c2ecf20Sopenharmony_ci		dev_err(&i2c->dev, "No interrupt specified\n");
55068c2ecf20Sopenharmony_ci		return -EINVAL;
55078c2ecf20Sopenharmony_ci	}
55088c2ecf20Sopenharmony_ci
55098c2ecf20Sopenharmony_ci	mutex_init(&rt5677->irq_lock);
55108c2ecf20Sopenharmony_ci	INIT_DELAYED_WORK(&rt5677->resume_irq_check, rt5677_resume_irq_check);
55118c2ecf20Sopenharmony_ci
55128c2ecf20Sopenharmony_ci	/*
55138c2ecf20Sopenharmony_ci	 * Select RC as the debounce clock so that GPIO works even when
55148c2ecf20Sopenharmony_ci	 * MCLK is gated which happens when there is no audio stream
55158c2ecf20Sopenharmony_ci	 * (SND_SOC_BIAS_OFF).
55168c2ecf20Sopenharmony_ci	 */
55178c2ecf20Sopenharmony_ci	regmap_update_bits(rt5677->regmap, RT5677_DIG_MISC,
55188c2ecf20Sopenharmony_ci			RT5677_IRQ_DEBOUNCE_SEL_MASK,
55198c2ecf20Sopenharmony_ci			RT5677_IRQ_DEBOUNCE_SEL_RC);
55208c2ecf20Sopenharmony_ci	/* Enable auto power on RC when GPIO states are changed */
55218c2ecf20Sopenharmony_ci	regmap_update_bits(rt5677->regmap, RT5677_GEN_CTRL1, 0xff, 0xff);
55228c2ecf20Sopenharmony_ci
55238c2ecf20Sopenharmony_ci	/* Select and enable jack detection sources per platform data */
55248c2ecf20Sopenharmony_ci	if (rt5677->pdata.jd1_gpio) {
55258c2ecf20Sopenharmony_ci		jd_mask	|= RT5677_SEL_GPIO_JD1_MASK;
55268c2ecf20Sopenharmony_ci		jd_val	|= rt5677->pdata.jd1_gpio << RT5677_SEL_GPIO_JD1_SFT;
55278c2ecf20Sopenharmony_ci	}
55288c2ecf20Sopenharmony_ci	if (rt5677->pdata.jd2_gpio) {
55298c2ecf20Sopenharmony_ci		jd_mask	|= RT5677_SEL_GPIO_JD2_MASK;
55308c2ecf20Sopenharmony_ci		jd_val	|= rt5677->pdata.jd2_gpio << RT5677_SEL_GPIO_JD2_SFT;
55318c2ecf20Sopenharmony_ci	}
55328c2ecf20Sopenharmony_ci	if (rt5677->pdata.jd3_gpio) {
55338c2ecf20Sopenharmony_ci		jd_mask	|= RT5677_SEL_GPIO_JD3_MASK;
55348c2ecf20Sopenharmony_ci		jd_val	|= rt5677->pdata.jd3_gpio << RT5677_SEL_GPIO_JD3_SFT;
55358c2ecf20Sopenharmony_ci	}
55368c2ecf20Sopenharmony_ci	regmap_update_bits(rt5677->regmap, RT5677_JD_CTRL1, jd_mask, jd_val);
55378c2ecf20Sopenharmony_ci
55388c2ecf20Sopenharmony_ci	/* Set GPIO1 pin to be IRQ output */
55398c2ecf20Sopenharmony_ci	regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL1,
55408c2ecf20Sopenharmony_ci			RT5677_GPIO1_PIN_MASK, RT5677_GPIO1_PIN_IRQ);
55418c2ecf20Sopenharmony_ci
55428c2ecf20Sopenharmony_ci	/* Ready to listen for interrupts */
55438c2ecf20Sopenharmony_ci	rt5677->domain = irq_domain_add_linear(i2c->dev.of_node,
55448c2ecf20Sopenharmony_ci			RT5677_IRQ_NUM, &rt5677_domain_ops, rt5677);
55458c2ecf20Sopenharmony_ci	if (!rt5677->domain) {
55468c2ecf20Sopenharmony_ci		dev_err(&i2c->dev, "Failed to create IRQ domain\n");
55478c2ecf20Sopenharmony_ci		return -ENOMEM;
55488c2ecf20Sopenharmony_ci	}
55498c2ecf20Sopenharmony_ci
55508c2ecf20Sopenharmony_ci	ret = devm_request_threaded_irq(&i2c->dev, i2c->irq, NULL, rt5677_irq,
55518c2ecf20Sopenharmony_ci			IRQF_TRIGGER_RISING | IRQF_ONESHOT,
55528c2ecf20Sopenharmony_ci			"rt5677", rt5677);
55538c2ecf20Sopenharmony_ci	if (ret)
55548c2ecf20Sopenharmony_ci		dev_err(&i2c->dev, "Failed to request IRQ: %d\n", ret);
55558c2ecf20Sopenharmony_ci
55568c2ecf20Sopenharmony_ci	rt5677->irq = i2c->irq;
55578c2ecf20Sopenharmony_ci
55588c2ecf20Sopenharmony_ci	return ret;
55598c2ecf20Sopenharmony_ci}
55608c2ecf20Sopenharmony_ci
55618c2ecf20Sopenharmony_cistatic int rt5677_i2c_probe(struct i2c_client *i2c)
55628c2ecf20Sopenharmony_ci{
55638c2ecf20Sopenharmony_ci	struct rt5677_priv *rt5677;
55648c2ecf20Sopenharmony_ci	int ret;
55658c2ecf20Sopenharmony_ci	unsigned int val;
55668c2ecf20Sopenharmony_ci
55678c2ecf20Sopenharmony_ci	rt5677 = devm_kzalloc(&i2c->dev, sizeof(struct rt5677_priv),
55688c2ecf20Sopenharmony_ci				GFP_KERNEL);
55698c2ecf20Sopenharmony_ci	if (rt5677 == NULL)
55708c2ecf20Sopenharmony_ci		return -ENOMEM;
55718c2ecf20Sopenharmony_ci
55728c2ecf20Sopenharmony_ci	rt5677->dev = &i2c->dev;
55738c2ecf20Sopenharmony_ci	rt5677->set_dsp_vad = rt5677_set_dsp_vad;
55748c2ecf20Sopenharmony_ci	INIT_DELAYED_WORK(&rt5677->dsp_work, rt5677_dsp_work);
55758c2ecf20Sopenharmony_ci	i2c_set_clientdata(i2c, rt5677);
55768c2ecf20Sopenharmony_ci
55778c2ecf20Sopenharmony_ci	if (i2c->dev.of_node) {
55788c2ecf20Sopenharmony_ci		const struct of_device_id *match_id;
55798c2ecf20Sopenharmony_ci
55808c2ecf20Sopenharmony_ci		match_id = of_match_device(rt5677_of_match, &i2c->dev);
55818c2ecf20Sopenharmony_ci		if (match_id)
55828c2ecf20Sopenharmony_ci			rt5677->type = (enum rt5677_type)match_id->data;
55838c2ecf20Sopenharmony_ci	} else if (ACPI_HANDLE(&i2c->dev)) {
55848c2ecf20Sopenharmony_ci		const struct acpi_device_id *acpi_id;
55858c2ecf20Sopenharmony_ci
55868c2ecf20Sopenharmony_ci		acpi_id = acpi_match_device(rt5677_acpi_match, &i2c->dev);
55878c2ecf20Sopenharmony_ci		if (acpi_id)
55888c2ecf20Sopenharmony_ci			rt5677->type = (enum rt5677_type)acpi_id->driver_data;
55898c2ecf20Sopenharmony_ci	} else {
55908c2ecf20Sopenharmony_ci		return -EINVAL;
55918c2ecf20Sopenharmony_ci	}
55928c2ecf20Sopenharmony_ci
55938c2ecf20Sopenharmony_ci	rt5677_read_device_properties(rt5677, &i2c->dev);
55948c2ecf20Sopenharmony_ci
55958c2ecf20Sopenharmony_ci	/* pow-ldo2 and reset are optional. The codec pins may be statically
55968c2ecf20Sopenharmony_ci	 * connected on the board without gpios. If the gpio device property
55978c2ecf20Sopenharmony_ci	 * isn't specified, devm_gpiod_get_optional returns NULL.
55988c2ecf20Sopenharmony_ci	 */
55998c2ecf20Sopenharmony_ci	rt5677->pow_ldo2 = devm_gpiod_get_optional(&i2c->dev,
56008c2ecf20Sopenharmony_ci			"realtek,pow-ldo2", GPIOD_OUT_HIGH);
56018c2ecf20Sopenharmony_ci	if (IS_ERR(rt5677->pow_ldo2)) {
56028c2ecf20Sopenharmony_ci		ret = PTR_ERR(rt5677->pow_ldo2);
56038c2ecf20Sopenharmony_ci		dev_err(&i2c->dev, "Failed to request POW_LDO2: %d\n", ret);
56048c2ecf20Sopenharmony_ci		return ret;
56058c2ecf20Sopenharmony_ci	}
56068c2ecf20Sopenharmony_ci	rt5677->reset_pin = devm_gpiod_get_optional(&i2c->dev,
56078c2ecf20Sopenharmony_ci			"realtek,reset", GPIOD_OUT_LOW);
56088c2ecf20Sopenharmony_ci	if (IS_ERR(rt5677->reset_pin)) {
56098c2ecf20Sopenharmony_ci		ret = PTR_ERR(rt5677->reset_pin);
56108c2ecf20Sopenharmony_ci		dev_err(&i2c->dev, "Failed to request RESET: %d\n", ret);
56118c2ecf20Sopenharmony_ci		return ret;
56128c2ecf20Sopenharmony_ci	}
56138c2ecf20Sopenharmony_ci
56148c2ecf20Sopenharmony_ci	if (rt5677->pow_ldo2 || rt5677->reset_pin) {
56158c2ecf20Sopenharmony_ci		/* Wait a while until I2C bus becomes available. The datasheet
56168c2ecf20Sopenharmony_ci		 * does not specify the exact we should wait but startup
56178c2ecf20Sopenharmony_ci		 * sequence mentiones at least a few milliseconds.
56188c2ecf20Sopenharmony_ci		 */
56198c2ecf20Sopenharmony_ci		msleep(10);
56208c2ecf20Sopenharmony_ci	}
56218c2ecf20Sopenharmony_ci
56228c2ecf20Sopenharmony_ci	rt5677->regmap_physical = devm_regmap_init_i2c(i2c,
56238c2ecf20Sopenharmony_ci					&rt5677_regmap_physical);
56248c2ecf20Sopenharmony_ci	if (IS_ERR(rt5677->regmap_physical)) {
56258c2ecf20Sopenharmony_ci		ret = PTR_ERR(rt5677->regmap_physical);
56268c2ecf20Sopenharmony_ci		dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
56278c2ecf20Sopenharmony_ci			ret);
56288c2ecf20Sopenharmony_ci		return ret;
56298c2ecf20Sopenharmony_ci	}
56308c2ecf20Sopenharmony_ci
56318c2ecf20Sopenharmony_ci	rt5677->regmap = devm_regmap_init(&i2c->dev, NULL, i2c, &rt5677_regmap);
56328c2ecf20Sopenharmony_ci	if (IS_ERR(rt5677->regmap)) {
56338c2ecf20Sopenharmony_ci		ret = PTR_ERR(rt5677->regmap);
56348c2ecf20Sopenharmony_ci		dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
56358c2ecf20Sopenharmony_ci			ret);
56368c2ecf20Sopenharmony_ci		return ret;
56378c2ecf20Sopenharmony_ci	}
56388c2ecf20Sopenharmony_ci
56398c2ecf20Sopenharmony_ci	regmap_read(rt5677->regmap, RT5677_VENDOR_ID2, &val);
56408c2ecf20Sopenharmony_ci	if (val != RT5677_DEVICE_ID) {
56418c2ecf20Sopenharmony_ci		dev_err(&i2c->dev,
56428c2ecf20Sopenharmony_ci			"Device with ID register %#x is not rt5677\n", val);
56438c2ecf20Sopenharmony_ci		return -ENODEV;
56448c2ecf20Sopenharmony_ci	}
56458c2ecf20Sopenharmony_ci
56468c2ecf20Sopenharmony_ci	regmap_write(rt5677->regmap, RT5677_RESET, 0x10ec);
56478c2ecf20Sopenharmony_ci
56488c2ecf20Sopenharmony_ci	ret = regmap_register_patch(rt5677->regmap, init_list,
56498c2ecf20Sopenharmony_ci				    ARRAY_SIZE(init_list));
56508c2ecf20Sopenharmony_ci	if (ret != 0)
56518c2ecf20Sopenharmony_ci		dev_warn(&i2c->dev, "Failed to apply regmap patch: %d\n", ret);
56528c2ecf20Sopenharmony_ci
56538c2ecf20Sopenharmony_ci	if (rt5677->pdata.in1_diff)
56548c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_IN1,
56558c2ecf20Sopenharmony_ci					RT5677_IN_DF1, RT5677_IN_DF1);
56568c2ecf20Sopenharmony_ci
56578c2ecf20Sopenharmony_ci	if (rt5677->pdata.in2_diff)
56588c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_IN1,
56598c2ecf20Sopenharmony_ci					RT5677_IN_DF2, RT5677_IN_DF2);
56608c2ecf20Sopenharmony_ci
56618c2ecf20Sopenharmony_ci	if (rt5677->pdata.lout1_diff)
56628c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_LOUT1,
56638c2ecf20Sopenharmony_ci					RT5677_LOUT1_L_DF, RT5677_LOUT1_L_DF);
56648c2ecf20Sopenharmony_ci
56658c2ecf20Sopenharmony_ci	if (rt5677->pdata.lout2_diff)
56668c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_LOUT1,
56678c2ecf20Sopenharmony_ci					RT5677_LOUT2_L_DF, RT5677_LOUT2_L_DF);
56688c2ecf20Sopenharmony_ci
56698c2ecf20Sopenharmony_ci	if (rt5677->pdata.lout3_diff)
56708c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_LOUT1,
56718c2ecf20Sopenharmony_ci					RT5677_LOUT3_L_DF, RT5677_LOUT3_L_DF);
56728c2ecf20Sopenharmony_ci
56738c2ecf20Sopenharmony_ci	if (rt5677->pdata.dmic2_clk_pin == RT5677_DMIC_CLK2) {
56748c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_GEN_CTRL2,
56758c2ecf20Sopenharmony_ci					RT5677_GPIO5_FUNC_MASK,
56768c2ecf20Sopenharmony_ci					RT5677_GPIO5_FUNC_DMIC);
56778c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_GPIO_CTRL2,
56788c2ecf20Sopenharmony_ci					RT5677_GPIO5_DIR_MASK,
56798c2ecf20Sopenharmony_ci					RT5677_GPIO5_DIR_OUT);
56808c2ecf20Sopenharmony_ci	}
56818c2ecf20Sopenharmony_ci
56828c2ecf20Sopenharmony_ci	if (rt5677->pdata.micbias1_vdd_3v3)
56838c2ecf20Sopenharmony_ci		regmap_update_bits(rt5677->regmap, RT5677_MICBIAS,
56848c2ecf20Sopenharmony_ci			RT5677_MICBIAS1_CTRL_VDD_MASK,
56858c2ecf20Sopenharmony_ci			RT5677_MICBIAS1_CTRL_VDD_3_3V);
56868c2ecf20Sopenharmony_ci
56878c2ecf20Sopenharmony_ci	rt5677_init_gpio(i2c);
56888c2ecf20Sopenharmony_ci	ret = rt5677_init_irq(i2c);
56898c2ecf20Sopenharmony_ci	if (ret)
56908c2ecf20Sopenharmony_ci		dev_err(&i2c->dev, "Failed to initialize irq: %d\n", ret);
56918c2ecf20Sopenharmony_ci
56928c2ecf20Sopenharmony_ci	return devm_snd_soc_register_component(&i2c->dev,
56938c2ecf20Sopenharmony_ci				      &soc_component_dev_rt5677,
56948c2ecf20Sopenharmony_ci				      rt5677_dai, ARRAY_SIZE(rt5677_dai));
56958c2ecf20Sopenharmony_ci}
56968c2ecf20Sopenharmony_ci
56978c2ecf20Sopenharmony_cistatic int rt5677_i2c_remove(struct i2c_client *i2c)
56988c2ecf20Sopenharmony_ci{
56998c2ecf20Sopenharmony_ci	rt5677_free_gpio(i2c);
57008c2ecf20Sopenharmony_ci
57018c2ecf20Sopenharmony_ci	return 0;
57028c2ecf20Sopenharmony_ci}
57038c2ecf20Sopenharmony_ci
57048c2ecf20Sopenharmony_cistatic struct i2c_driver rt5677_i2c_driver = {
57058c2ecf20Sopenharmony_ci	.driver = {
57068c2ecf20Sopenharmony_ci		.name = RT5677_DRV_NAME,
57078c2ecf20Sopenharmony_ci		.of_match_table = rt5677_of_match,
57088c2ecf20Sopenharmony_ci		.acpi_match_table = ACPI_PTR(rt5677_acpi_match),
57098c2ecf20Sopenharmony_ci	},
57108c2ecf20Sopenharmony_ci	.probe_new = rt5677_i2c_probe,
57118c2ecf20Sopenharmony_ci	.remove   = rt5677_i2c_remove,
57128c2ecf20Sopenharmony_ci};
57138c2ecf20Sopenharmony_cimodule_i2c_driver(rt5677_i2c_driver);
57148c2ecf20Sopenharmony_ci
57158c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("ASoC RT5677 driver");
57168c2ecf20Sopenharmony_ciMODULE_AUTHOR("Oder Chiou <oder_chiou@realtek.com>");
57178c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL v2");
5718