162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci//
362306a36Sopenharmony_ci// ALSA SoC Audio driver for CS47L92 codec
462306a36Sopenharmony_ci//
562306a36Sopenharmony_ci// Copyright (C) 2016-2019 Cirrus Logic, Inc. and
662306a36Sopenharmony_ci//                         Cirrus Logic International Semiconductor Ltd.
762306a36Sopenharmony_ci//
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/module.h>
1062306a36Sopenharmony_ci#include <linux/moduleparam.h>
1162306a36Sopenharmony_ci#include <linux/device.h>
1262306a36Sopenharmony_ci#include <linux/delay.h>
1362306a36Sopenharmony_ci#include <linux/init.h>
1462306a36Sopenharmony_ci#include <linux/pm.h>
1562306a36Sopenharmony_ci#include <linux/pm_runtime.h>
1662306a36Sopenharmony_ci#include <linux/regmap.h>
1762306a36Sopenharmony_ci#include <sound/core.h>
1862306a36Sopenharmony_ci#include <sound/pcm.h>
1962306a36Sopenharmony_ci#include <sound/pcm_params.h>
2062306a36Sopenharmony_ci#include <sound/soc.h>
2162306a36Sopenharmony_ci#include <sound/tlv.h>
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci#include <linux/irqchip/irq-madera.h>
2462306a36Sopenharmony_ci#include <linux/mfd/madera/core.h>
2562306a36Sopenharmony_ci#include <linux/mfd/madera/registers.h>
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci#include "madera.h"
2862306a36Sopenharmony_ci#include "wm_adsp.h"
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci#define CS47L92_NUM_ADSP	1
3162306a36Sopenharmony_ci#define CS47L92_MONO_OUTPUTS	3
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci#define DRV_NAME "cs47l92-codec"
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_cistruct cs47l92 {
3662306a36Sopenharmony_ci	struct madera_priv core;
3762306a36Sopenharmony_ci	struct madera_fll fll[2];
3862306a36Sopenharmony_ci};
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_cistatic const struct cs_dsp_region cs47l92_dsp1_regions[] = {
4162306a36Sopenharmony_ci	{ .type = WMFW_ADSP2_PM, .base = 0x080000 },
4262306a36Sopenharmony_ci	{ .type = WMFW_ADSP2_ZM, .base = 0x0e0000 },
4362306a36Sopenharmony_ci	{ .type = WMFW_ADSP2_XM, .base = 0x0a0000 },
4462306a36Sopenharmony_ci	{ .type = WMFW_ADSP2_YM, .base = 0x0c0000 },
4562306a36Sopenharmony_ci};
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_cistatic const char * const cs47l92_outdemux_texts[] = {
4862306a36Sopenharmony_ci	"HPOUT3",
4962306a36Sopenharmony_ci	"HPOUT4",
5062306a36Sopenharmony_ci};
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_cistatic int cs47l92_put_demux(struct snd_kcontrol *kcontrol,
5362306a36Sopenharmony_ci			     struct snd_ctl_elem_value *ucontrol)
5462306a36Sopenharmony_ci{
5562306a36Sopenharmony_ci	struct snd_soc_component *component =
5662306a36Sopenharmony_ci		snd_soc_dapm_kcontrol_component(kcontrol);
5762306a36Sopenharmony_ci	struct snd_soc_dapm_context *dapm =
5862306a36Sopenharmony_ci		snd_soc_component_get_dapm(component);
5962306a36Sopenharmony_ci	struct cs47l92 *cs47l92 = snd_soc_component_get_drvdata(component);
6062306a36Sopenharmony_ci	struct madera_priv *priv = &cs47l92->core;
6162306a36Sopenharmony_ci	struct madera *madera = priv->madera;
6262306a36Sopenharmony_ci	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
6362306a36Sopenharmony_ci	unsigned int ep_sel, mux, change, cur;
6462306a36Sopenharmony_ci	bool out_mono;
6562306a36Sopenharmony_ci	int ret;
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci	if (ucontrol->value.enumerated.item[0] > e->items - 1)
6862306a36Sopenharmony_ci		return -EINVAL;
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci	mux = ucontrol->value.enumerated.item[0];
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci	snd_soc_dapm_mutex_lock(dapm);
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci	ep_sel = mux << e->shift_l;
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci	change = snd_soc_component_test_bits(component, MADERA_OUTPUT_ENABLES_1,
7762306a36Sopenharmony_ci					     MADERA_EP_SEL_MASK,
7862306a36Sopenharmony_ci					     ep_sel);
7962306a36Sopenharmony_ci	if (!change)
8062306a36Sopenharmony_ci		goto end;
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci	ret = regmap_read(madera->regmap, MADERA_OUTPUT_ENABLES_1, &cur);
8362306a36Sopenharmony_ci	if (ret != 0)
8462306a36Sopenharmony_ci		dev_warn(madera->dev, "Failed to read outputs: %d\n", ret);
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ci	/* EP_SEL should not be modified while HPOUT3 or 4 is enabled */
8762306a36Sopenharmony_ci	ret = regmap_update_bits(madera->regmap, MADERA_OUTPUT_ENABLES_1,
8862306a36Sopenharmony_ci				 MADERA_OUT3L_ENA | MADERA_OUT3R_ENA, 0);
8962306a36Sopenharmony_ci	if (ret)
9062306a36Sopenharmony_ci		dev_warn(madera->dev, "Failed to disable outputs: %d\n", ret);
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ci	usleep_range(2000, 3000); /* wait for wseq to complete */
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci	ret = regmap_update_bits(madera->regmap, MADERA_OUTPUT_ENABLES_1,
9562306a36Sopenharmony_ci				 MADERA_EP_SEL, ep_sel);
9662306a36Sopenharmony_ci	if (ret) {
9762306a36Sopenharmony_ci		dev_err(madera->dev, "Failed to set OUT3 demux: %d\n", ret);
9862306a36Sopenharmony_ci	} else {
9962306a36Sopenharmony_ci		out_mono = madera->pdata.codec.out_mono[2 + mux];
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci		ret = madera_set_output_mode(component, 3, out_mono);
10262306a36Sopenharmony_ci		if (ret < 0)
10362306a36Sopenharmony_ci			dev_warn(madera->dev,
10462306a36Sopenharmony_ci				 "Failed to set output mode: %d\n", ret);
10562306a36Sopenharmony_ci	}
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ci	ret = regmap_update_bits(madera->regmap, MADERA_OUTPUT_ENABLES_1,
10862306a36Sopenharmony_ci				 MADERA_OUT3L_ENA | MADERA_OUT3R_ENA, cur);
10962306a36Sopenharmony_ci	if (ret) {
11062306a36Sopenharmony_ci		dev_warn(madera->dev, "Failed to restore outputs: %d\n", ret);
11162306a36Sopenharmony_ci	} else {
11262306a36Sopenharmony_ci		/* wait for wseq */
11362306a36Sopenharmony_ci		if (cur & (MADERA_OUT3L_ENA | MADERA_OUT3R_ENA))
11462306a36Sopenharmony_ci			msleep(34); /* enable delay */
11562306a36Sopenharmony_ci		else
11662306a36Sopenharmony_ci			usleep_range(2000, 3000); /* disable delay */
11762306a36Sopenharmony_ci	}
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_ciend:
12062306a36Sopenharmony_ci	snd_soc_dapm_mutex_unlock(dapm);
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_ci	ret = snd_soc_dapm_mux_update_power(dapm, kcontrol, mux, e, NULL);
12362306a36Sopenharmony_ci	if (ret < 0) {
12462306a36Sopenharmony_ci		dev_err(madera->dev, "Failed to update demux power state: %d\n", ret);
12562306a36Sopenharmony_ci		return ret;
12662306a36Sopenharmony_ci	}
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ci	return change;
12962306a36Sopenharmony_ci}
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(cs47l92_outdemux_enum,
13262306a36Sopenharmony_ci			    MADERA_OUTPUT_ENABLES_1,
13362306a36Sopenharmony_ci			    MADERA_EP_SEL_SHIFT,
13462306a36Sopenharmony_ci			    cs47l92_outdemux_texts);
13562306a36Sopenharmony_ci
13662306a36Sopenharmony_cistatic const struct snd_kcontrol_new cs47l92_outdemux =
13762306a36Sopenharmony_ci	SOC_DAPM_ENUM_EXT("OUT3 Demux", cs47l92_outdemux_enum,
13862306a36Sopenharmony_ci			  snd_soc_dapm_get_enum_double, cs47l92_put_demux);
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_cistatic int cs47l92_adsp_power_ev(struct snd_soc_dapm_widget *w,
14162306a36Sopenharmony_ci				 struct snd_kcontrol *kcontrol,
14262306a36Sopenharmony_ci				 int event)
14362306a36Sopenharmony_ci{
14462306a36Sopenharmony_ci	struct snd_soc_component *component =
14562306a36Sopenharmony_ci		snd_soc_dapm_to_component(w->dapm);
14662306a36Sopenharmony_ci	struct cs47l92 *cs47l92 = snd_soc_component_get_drvdata(component);
14762306a36Sopenharmony_ci	struct madera_priv *priv = &cs47l92->core;
14862306a36Sopenharmony_ci	struct madera *madera = priv->madera;
14962306a36Sopenharmony_ci	unsigned int freq;
15062306a36Sopenharmony_ci	int ret;
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_ci	ret = regmap_read(madera->regmap, MADERA_DSP_CLOCK_2, &freq);
15362306a36Sopenharmony_ci	if (ret != 0) {
15462306a36Sopenharmony_ci		dev_err(madera->dev,
15562306a36Sopenharmony_ci			"Failed to read MADERA_DSP_CLOCK_2: %d\n", ret);
15662306a36Sopenharmony_ci		return ret;
15762306a36Sopenharmony_ci	}
15862306a36Sopenharmony_ci
15962306a36Sopenharmony_ci	switch (event) {
16062306a36Sopenharmony_ci	case SND_SOC_DAPM_PRE_PMU:
16162306a36Sopenharmony_ci		ret = madera_set_adsp_clk(&cs47l92->core, w->shift, freq);
16262306a36Sopenharmony_ci		if (ret)
16362306a36Sopenharmony_ci			return ret;
16462306a36Sopenharmony_ci		break;
16562306a36Sopenharmony_ci	default:
16662306a36Sopenharmony_ci		break;
16762306a36Sopenharmony_ci	}
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_ci	return wm_adsp_early_event(w, kcontrol, event);
17062306a36Sopenharmony_ci}
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_cistatic int cs47l92_outclk_ev(struct snd_soc_dapm_widget *w,
17362306a36Sopenharmony_ci			     struct snd_kcontrol *kcontrol,
17462306a36Sopenharmony_ci			     int event)
17562306a36Sopenharmony_ci{
17662306a36Sopenharmony_ci	struct snd_soc_component *component =
17762306a36Sopenharmony_ci		snd_soc_dapm_to_component(w->dapm);
17862306a36Sopenharmony_ci	struct cs47l92 *cs47l92 = snd_soc_component_get_drvdata(component);
17962306a36Sopenharmony_ci	struct madera_priv *priv = &cs47l92->core;
18062306a36Sopenharmony_ci	struct madera *madera = priv->madera;
18162306a36Sopenharmony_ci	unsigned int val;
18262306a36Sopenharmony_ci	int ret;
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ci	ret = regmap_read(madera->regmap, MADERA_OUTPUT_RATE_1, &val);
18562306a36Sopenharmony_ci	if (ret) {
18662306a36Sopenharmony_ci		dev_err(madera->dev, "Failed to read OUTCLK source: %d\n", ret);
18762306a36Sopenharmony_ci		return ret;
18862306a36Sopenharmony_ci	}
18962306a36Sopenharmony_ci
19062306a36Sopenharmony_ci	val &= MADERA_OUT_CLK_SRC_MASK;
19162306a36Sopenharmony_ci
19262306a36Sopenharmony_ci	switch (val) {
19362306a36Sopenharmony_ci	case MADERA_OUTCLK_MCLK1:
19462306a36Sopenharmony_ci	case MADERA_OUTCLK_MCLK2:
19562306a36Sopenharmony_ci	case MADERA_OUTCLK_MCLK3:
19662306a36Sopenharmony_ci		val -= (MADERA_OUTCLK_MCLK1 - MADERA_MCLK1);
19762306a36Sopenharmony_ci
19862306a36Sopenharmony_ci		switch (event) {
19962306a36Sopenharmony_ci		case SND_SOC_DAPM_PRE_PMU:
20062306a36Sopenharmony_ci			ret = clk_prepare_enable(madera->mclk[val].clk);
20162306a36Sopenharmony_ci			if (ret)
20262306a36Sopenharmony_ci				return ret;
20362306a36Sopenharmony_ci			break;
20462306a36Sopenharmony_ci		case SND_SOC_DAPM_POST_PMD:
20562306a36Sopenharmony_ci			clk_disable_unprepare(madera->mclk[val].clk);
20662306a36Sopenharmony_ci			break;
20762306a36Sopenharmony_ci		default:
20862306a36Sopenharmony_ci			break;
20962306a36Sopenharmony_ci		}
21062306a36Sopenharmony_ci		break;
21162306a36Sopenharmony_ci	default:
21262306a36Sopenharmony_ci		break;
21362306a36Sopenharmony_ci	}
21462306a36Sopenharmony_ci
21562306a36Sopenharmony_ci	return madera_domain_clk_ev(w, kcontrol, event);
21662306a36Sopenharmony_ci}
21762306a36Sopenharmony_ci
21862306a36Sopenharmony_ci#define CS47L92_NG_SRC(name, base) \
21962306a36Sopenharmony_ci	SOC_SINGLE(name " NG HPOUT1L Switch",  base,  0, 1, 0), \
22062306a36Sopenharmony_ci	SOC_SINGLE(name " NG HPOUT1R Switch",  base,  1, 1, 0), \
22162306a36Sopenharmony_ci	SOC_SINGLE(name " NG HPOUT2L Switch",  base,  2, 1, 0), \
22262306a36Sopenharmony_ci	SOC_SINGLE(name " NG HPOUT2R Switch",  base,  3, 1, 0), \
22362306a36Sopenharmony_ci	SOC_SINGLE(name " NG HPOUT3L Switch",  base,  4, 1, 0), \
22462306a36Sopenharmony_ci	SOC_SINGLE(name " NG HPOUT3R Switch",  base,  5, 1, 0), \
22562306a36Sopenharmony_ci	SOC_SINGLE(name " NG SPKDAT1L Switch", base,  8, 1, 0), \
22662306a36Sopenharmony_ci	SOC_SINGLE(name " NG SPKDAT1R Switch", base,  9, 1, 0)
22762306a36Sopenharmony_ci
22862306a36Sopenharmony_cistatic const struct snd_kcontrol_new cs47l92_snd_controls[] = {
22962306a36Sopenharmony_ciSOC_ENUM("IN1 OSR", madera_in_dmic_osr[0]),
23062306a36Sopenharmony_ciSOC_ENUM("IN2 OSR", madera_in_dmic_osr[1]),
23162306a36Sopenharmony_ciSOC_ENUM("IN3 OSR", madera_in_dmic_osr[2]),
23262306a36Sopenharmony_ciSOC_ENUM("IN4 OSR", madera_in_dmic_osr[3]),
23362306a36Sopenharmony_ci
23462306a36Sopenharmony_ciSOC_SINGLE_RANGE_TLV("IN1L Volume", MADERA_IN1L_CONTROL,
23562306a36Sopenharmony_ci		     MADERA_IN1L_PGA_VOL_SHIFT, 0x40, 0x5f, 0, madera_ana_tlv),
23662306a36Sopenharmony_ciSOC_SINGLE_RANGE_TLV("IN1R Volume", MADERA_IN1R_CONTROL,
23762306a36Sopenharmony_ci		     MADERA_IN1R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, madera_ana_tlv),
23862306a36Sopenharmony_ciSOC_SINGLE_RANGE_TLV("IN2L Volume", MADERA_IN2L_CONTROL,
23962306a36Sopenharmony_ci		     MADERA_IN2L_PGA_VOL_SHIFT, 0x40, 0x5f, 0, madera_ana_tlv),
24062306a36Sopenharmony_ciSOC_SINGLE_RANGE_TLV("IN2R Volume", MADERA_IN2R_CONTROL,
24162306a36Sopenharmony_ci		     MADERA_IN2R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, madera_ana_tlv),
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_ciSOC_ENUM("IN HPF Cutoff Frequency", madera_in_hpf_cut_enum),
24462306a36Sopenharmony_ci
24562306a36Sopenharmony_ciSOC_SINGLE_EXT("IN1L LP Switch", MADERA_ADC_DIGITAL_VOLUME_1L,
24662306a36Sopenharmony_ci	       MADERA_IN1L_LP_MODE_SHIFT, 1, 0,
24762306a36Sopenharmony_ci	       snd_soc_get_volsw, madera_lp_mode_put),
24862306a36Sopenharmony_ciSOC_SINGLE_EXT("IN1R LP Switch", MADERA_ADC_DIGITAL_VOLUME_1R,
24962306a36Sopenharmony_ci	       MADERA_IN1L_LP_MODE_SHIFT, 1, 0,
25062306a36Sopenharmony_ci	       snd_soc_get_volsw, madera_lp_mode_put),
25162306a36Sopenharmony_ciSOC_SINGLE_EXT("IN2L LP Switch", MADERA_ADC_DIGITAL_VOLUME_2L,
25262306a36Sopenharmony_ci	       MADERA_IN1L_LP_MODE_SHIFT, 1, 0,
25362306a36Sopenharmony_ci	       snd_soc_get_volsw, madera_lp_mode_put),
25462306a36Sopenharmony_ciSOC_SINGLE_EXT("IN2R LP Switch", MADERA_ADC_DIGITAL_VOLUME_2R,
25562306a36Sopenharmony_ci	       MADERA_IN1L_LP_MODE_SHIFT, 1, 0,
25662306a36Sopenharmony_ci	       snd_soc_get_volsw, madera_lp_mode_put),
25762306a36Sopenharmony_ci
25862306a36Sopenharmony_ciSOC_SINGLE("IN1L HPF Switch", MADERA_IN1L_CONTROL,
25962306a36Sopenharmony_ci	   MADERA_IN1L_HPF_SHIFT, 1, 0),
26062306a36Sopenharmony_ciSOC_SINGLE("IN1R HPF Switch", MADERA_IN1R_CONTROL,
26162306a36Sopenharmony_ci	   MADERA_IN1R_HPF_SHIFT, 1, 0),
26262306a36Sopenharmony_ciSOC_SINGLE("IN2L HPF Switch", MADERA_IN2L_CONTROL,
26362306a36Sopenharmony_ci	   MADERA_IN2L_HPF_SHIFT, 1, 0),
26462306a36Sopenharmony_ciSOC_SINGLE("IN2R HPF Switch", MADERA_IN2R_CONTROL,
26562306a36Sopenharmony_ci	   MADERA_IN2R_HPF_SHIFT, 1, 0),
26662306a36Sopenharmony_ciSOC_SINGLE("IN3L HPF Switch", MADERA_IN3L_CONTROL,
26762306a36Sopenharmony_ci	   MADERA_IN3L_HPF_SHIFT, 1, 0),
26862306a36Sopenharmony_ciSOC_SINGLE("IN3R HPF Switch", MADERA_IN3R_CONTROL,
26962306a36Sopenharmony_ci	   MADERA_IN3R_HPF_SHIFT, 1, 0),
27062306a36Sopenharmony_ciSOC_SINGLE("IN4L HPF Switch", MADERA_IN4L_CONTROL,
27162306a36Sopenharmony_ci	   MADERA_IN4L_HPF_SHIFT, 1, 0),
27262306a36Sopenharmony_ciSOC_SINGLE("IN4R HPF Switch", MADERA_IN4R_CONTROL,
27362306a36Sopenharmony_ci	   MADERA_IN4R_HPF_SHIFT, 1, 0),
27462306a36Sopenharmony_ci
27562306a36Sopenharmony_ciSOC_SINGLE_TLV("IN1L Digital Volume", MADERA_ADC_DIGITAL_VOLUME_1L,
27662306a36Sopenharmony_ci	       MADERA_IN1L_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),
27762306a36Sopenharmony_ciSOC_SINGLE_TLV("IN1R Digital Volume", MADERA_ADC_DIGITAL_VOLUME_1R,
27862306a36Sopenharmony_ci	       MADERA_IN1R_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),
27962306a36Sopenharmony_ciSOC_SINGLE_TLV("IN2L Digital Volume", MADERA_ADC_DIGITAL_VOLUME_2L,
28062306a36Sopenharmony_ci	       MADERA_IN2L_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),
28162306a36Sopenharmony_ciSOC_SINGLE_TLV("IN2R Digital Volume", MADERA_ADC_DIGITAL_VOLUME_2R,
28262306a36Sopenharmony_ci	       MADERA_IN2R_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),
28362306a36Sopenharmony_ciSOC_SINGLE_TLV("IN3L Digital Volume", MADERA_ADC_DIGITAL_VOLUME_3L,
28462306a36Sopenharmony_ci	       MADERA_IN3L_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),
28562306a36Sopenharmony_ciSOC_SINGLE_TLV("IN3R Digital Volume", MADERA_ADC_DIGITAL_VOLUME_3R,
28662306a36Sopenharmony_ci	       MADERA_IN3R_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),
28762306a36Sopenharmony_ciSOC_SINGLE_TLV("IN4L Digital Volume", MADERA_ADC_DIGITAL_VOLUME_4L,
28862306a36Sopenharmony_ci	       MADERA_IN4L_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),
28962306a36Sopenharmony_ciSOC_SINGLE_TLV("IN4R Digital Volume", MADERA_ADC_DIGITAL_VOLUME_4R,
29062306a36Sopenharmony_ci	       MADERA_IN4R_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),
29162306a36Sopenharmony_ci
29262306a36Sopenharmony_ciSOC_ENUM("Input Ramp Up", madera_in_vi_ramp),
29362306a36Sopenharmony_ciSOC_ENUM("Input Ramp Down", madera_in_vd_ramp),
29462306a36Sopenharmony_ci
29562306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("EQ1", MADERA_EQ1MIX_INPUT_1_SOURCE),
29662306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("EQ2", MADERA_EQ2MIX_INPUT_1_SOURCE),
29762306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("EQ3", MADERA_EQ3MIX_INPUT_1_SOURCE),
29862306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("EQ4", MADERA_EQ4MIX_INPUT_1_SOURCE),
29962306a36Sopenharmony_ci
30062306a36Sopenharmony_ciMADERA_EQ_CONTROL("EQ1 Coefficients", MADERA_EQ1_2),
30162306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ1 B1 Volume", MADERA_EQ1_1, MADERA_EQ1_B1_GAIN_SHIFT,
30262306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
30362306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ1 B2 Volume", MADERA_EQ1_1, MADERA_EQ1_B2_GAIN_SHIFT,
30462306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
30562306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ1 B3 Volume", MADERA_EQ1_1, MADERA_EQ1_B3_GAIN_SHIFT,
30662306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
30762306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ1 B4 Volume", MADERA_EQ1_2, MADERA_EQ1_B4_GAIN_SHIFT,
30862306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
30962306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ1 B5 Volume", MADERA_EQ1_2, MADERA_EQ1_B5_GAIN_SHIFT,
31062306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
31162306a36Sopenharmony_ci
31262306a36Sopenharmony_ciMADERA_EQ_CONTROL("EQ2 Coefficients", MADERA_EQ2_2),
31362306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ2 B1 Volume", MADERA_EQ2_1, MADERA_EQ2_B1_GAIN_SHIFT,
31462306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
31562306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ2 B2 Volume", MADERA_EQ2_1, MADERA_EQ2_B2_GAIN_SHIFT,
31662306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
31762306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ2 B3 Volume", MADERA_EQ2_1, MADERA_EQ2_B3_GAIN_SHIFT,
31862306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
31962306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ2 B4 Volume", MADERA_EQ2_2, MADERA_EQ2_B4_GAIN_SHIFT,
32062306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
32162306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ2 B5 Volume", MADERA_EQ2_2, MADERA_EQ2_B5_GAIN_SHIFT,
32262306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
32362306a36Sopenharmony_ci
32462306a36Sopenharmony_ciMADERA_EQ_CONTROL("EQ3 Coefficients", MADERA_EQ3_2),
32562306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ3 B1 Volume", MADERA_EQ3_1, MADERA_EQ3_B1_GAIN_SHIFT,
32662306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
32762306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ3 B2 Volume", MADERA_EQ3_1, MADERA_EQ3_B2_GAIN_SHIFT,
32862306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
32962306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ3 B3 Volume", MADERA_EQ3_1, MADERA_EQ3_B3_GAIN_SHIFT,
33062306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
33162306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ3 B4 Volume", MADERA_EQ3_2, MADERA_EQ3_B4_GAIN_SHIFT,
33262306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
33362306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ3 B5 Volume", MADERA_EQ3_2, MADERA_EQ3_B5_GAIN_SHIFT,
33462306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
33562306a36Sopenharmony_ci
33662306a36Sopenharmony_ciMADERA_EQ_CONTROL("EQ4 Coefficients", MADERA_EQ4_2),
33762306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ4 B1 Volume", MADERA_EQ4_1, MADERA_EQ4_B1_GAIN_SHIFT,
33862306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
33962306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ4 B2 Volume", MADERA_EQ4_1, MADERA_EQ4_B2_GAIN_SHIFT,
34062306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
34162306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ4 B3 Volume", MADERA_EQ4_1, MADERA_EQ4_B3_GAIN_SHIFT,
34262306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
34362306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ4 B4 Volume", MADERA_EQ4_2, MADERA_EQ4_B4_GAIN_SHIFT,
34462306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
34562306a36Sopenharmony_ciSOC_SINGLE_TLV("EQ4 B5 Volume", MADERA_EQ4_2, MADERA_EQ4_B5_GAIN_SHIFT,
34662306a36Sopenharmony_ci	       24, 0, madera_eq_tlv),
34762306a36Sopenharmony_ci
34862306a36Sopenharmony_ciSOC_SINGLE("DAC High Performance Mode Switch", MADERA_OUTPUT_RATE_1,
34962306a36Sopenharmony_ci	   MADERA_CP_DAC_MODE_SHIFT, 1, 0),
35062306a36Sopenharmony_ci
35162306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("DRC1L", MADERA_DRC1LMIX_INPUT_1_SOURCE),
35262306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("DRC1R", MADERA_DRC1RMIX_INPUT_1_SOURCE),
35362306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("DRC2L", MADERA_DRC2LMIX_INPUT_1_SOURCE),
35462306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("DRC2R", MADERA_DRC2RMIX_INPUT_1_SOURCE),
35562306a36Sopenharmony_ci
35662306a36Sopenharmony_ciSND_SOC_BYTES_MASK("DRC1", MADERA_DRC1_CTRL1, 5,
35762306a36Sopenharmony_ci		   MADERA_DRC1R_ENA | MADERA_DRC1L_ENA),
35862306a36Sopenharmony_ciSND_SOC_BYTES_MASK("DRC2", MADERA_DRC2_CTRL1, 5,
35962306a36Sopenharmony_ci		   MADERA_DRC2R_ENA | MADERA_DRC2L_ENA),
36062306a36Sopenharmony_ci
36162306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("LHPF1", MADERA_HPLP1MIX_INPUT_1_SOURCE),
36262306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("LHPF2", MADERA_HPLP2MIX_INPUT_1_SOURCE),
36362306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("LHPF3", MADERA_HPLP3MIX_INPUT_1_SOURCE),
36462306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("LHPF4", MADERA_HPLP4MIX_INPUT_1_SOURCE),
36562306a36Sopenharmony_ci
36662306a36Sopenharmony_ciMADERA_LHPF_CONTROL("LHPF1 Coefficients", MADERA_HPLPF1_2),
36762306a36Sopenharmony_ciMADERA_LHPF_CONTROL("LHPF2 Coefficients", MADERA_HPLPF2_2),
36862306a36Sopenharmony_ciMADERA_LHPF_CONTROL("LHPF3 Coefficients", MADERA_HPLPF3_2),
36962306a36Sopenharmony_ciMADERA_LHPF_CONTROL("LHPF4 Coefficients", MADERA_HPLPF4_2),
37062306a36Sopenharmony_ci
37162306a36Sopenharmony_ciSOC_ENUM("LHPF1 Mode", madera_lhpf1_mode),
37262306a36Sopenharmony_ciSOC_ENUM("LHPF2 Mode", madera_lhpf2_mode),
37362306a36Sopenharmony_ciSOC_ENUM("LHPF3 Mode", madera_lhpf3_mode),
37462306a36Sopenharmony_ciSOC_ENUM("LHPF4 Mode", madera_lhpf4_mode),
37562306a36Sopenharmony_ci
37662306a36Sopenharmony_ciMADERA_RATE_ENUM("ISRC1 FSL", madera_isrc_fsl[0]),
37762306a36Sopenharmony_ciMADERA_RATE_ENUM("ISRC2 FSL", madera_isrc_fsl[1]),
37862306a36Sopenharmony_ciMADERA_RATE_ENUM("ISRC1 FSH", madera_isrc_fsh[0]),
37962306a36Sopenharmony_ciMADERA_RATE_ENUM("ISRC2 FSH", madera_isrc_fsh[1]),
38062306a36Sopenharmony_ciMADERA_RATE_ENUM("ASRC1 Rate 1", madera_asrc1_bidir_rate[0]),
38162306a36Sopenharmony_ciMADERA_RATE_ENUM("ASRC1 Rate 2", madera_asrc1_bidir_rate[1]),
38262306a36Sopenharmony_ci
38362306a36Sopenharmony_ciWM_ADSP2_PRELOAD_SWITCH("DSP1", 1),
38462306a36Sopenharmony_ci
38562306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("DSP1L", MADERA_DSP1LMIX_INPUT_1_SOURCE),
38662306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("DSP1R", MADERA_DSP1RMIX_INPUT_1_SOURCE),
38762306a36Sopenharmony_ci
38862306a36Sopenharmony_ciSOC_SINGLE_TLV("Noise Generator Volume", MADERA_COMFORT_NOISE_GENERATOR,
38962306a36Sopenharmony_ci	       MADERA_NOISE_GEN_GAIN_SHIFT, 0x16, 0, madera_noise_tlv),
39062306a36Sopenharmony_ci
39162306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("HPOUT1L", MADERA_OUT1LMIX_INPUT_1_SOURCE),
39262306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("HPOUT1R", MADERA_OUT1RMIX_INPUT_1_SOURCE),
39362306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("HPOUT2L", MADERA_OUT2LMIX_INPUT_1_SOURCE),
39462306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("HPOUT2R", MADERA_OUT2RMIX_INPUT_1_SOURCE),
39562306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("HPOUT3L", MADERA_OUT3LMIX_INPUT_1_SOURCE),
39662306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("HPOUT3R", MADERA_OUT3RMIX_INPUT_1_SOURCE),
39762306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("SPKDAT1L", MADERA_OUT5LMIX_INPUT_1_SOURCE),
39862306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("SPKDAT1R", MADERA_OUT5RMIX_INPUT_1_SOURCE),
39962306a36Sopenharmony_ci
40062306a36Sopenharmony_ciSOC_SINGLE("HPOUT1 SC Protect Switch", MADERA_HP1_SHORT_CIRCUIT_CTRL,
40162306a36Sopenharmony_ci	   MADERA_HP1_SC_ENA_SHIFT, 1, 0),
40262306a36Sopenharmony_ciSOC_SINGLE("HPOUT2 SC Protect Switch", MADERA_HP2_SHORT_CIRCUIT_CTRL,
40362306a36Sopenharmony_ci	   MADERA_HP2_SC_ENA_SHIFT, 1, 0),
40462306a36Sopenharmony_ciSOC_SINGLE("HPOUT3 SC Protect Switch", MADERA_HP3_SHORT_CIRCUIT_CTRL,
40562306a36Sopenharmony_ci	   MADERA_HP3_SC_ENA_SHIFT, 1, 0),
40662306a36Sopenharmony_ci
40762306a36Sopenharmony_ciSOC_SINGLE("SPKDAT1 High Performance Switch", MADERA_OUTPUT_PATH_CONFIG_5L,
40862306a36Sopenharmony_ci	   MADERA_OUT5_OSR_SHIFT, 1, 0),
40962306a36Sopenharmony_ci
41062306a36Sopenharmony_ciSOC_DOUBLE_R("HPOUT1 Digital Switch", MADERA_DAC_DIGITAL_VOLUME_1L,
41162306a36Sopenharmony_ci	     MADERA_DAC_DIGITAL_VOLUME_1R, MADERA_OUT1L_MUTE_SHIFT, 1, 1),
41262306a36Sopenharmony_ciSOC_DOUBLE_R("HPOUT2 Digital Switch", MADERA_DAC_DIGITAL_VOLUME_2L,
41362306a36Sopenharmony_ci	     MADERA_DAC_DIGITAL_VOLUME_2R, MADERA_OUT2L_MUTE_SHIFT, 1, 1),
41462306a36Sopenharmony_ciSOC_DOUBLE_R("HPOUT3 Digital Switch", MADERA_DAC_DIGITAL_VOLUME_3L,
41562306a36Sopenharmony_ci	     MADERA_DAC_DIGITAL_VOLUME_3R, MADERA_OUT3L_MUTE_SHIFT, 1, 1),
41662306a36Sopenharmony_ciSOC_DOUBLE_R("SPKDAT1 Digital Switch", MADERA_DAC_DIGITAL_VOLUME_5L,
41762306a36Sopenharmony_ci	     MADERA_DAC_DIGITAL_VOLUME_5R, MADERA_OUT5L_MUTE_SHIFT, 1, 1),
41862306a36Sopenharmony_ci
41962306a36Sopenharmony_ciSOC_DOUBLE_R_TLV("HPOUT1 Digital Volume", MADERA_DAC_DIGITAL_VOLUME_1L,
42062306a36Sopenharmony_ci		 MADERA_DAC_DIGITAL_VOLUME_1R, MADERA_OUT1L_VOL_SHIFT,
42162306a36Sopenharmony_ci		 0xbf, 0, madera_digital_tlv),
42262306a36Sopenharmony_ciSOC_DOUBLE_R_TLV("HPOUT2 Digital Volume", MADERA_DAC_DIGITAL_VOLUME_2L,
42362306a36Sopenharmony_ci		 MADERA_DAC_DIGITAL_VOLUME_2R, MADERA_OUT2L_VOL_SHIFT,
42462306a36Sopenharmony_ci		 0xbf, 0, madera_digital_tlv),
42562306a36Sopenharmony_ciSOC_DOUBLE_R_TLV("HPOUT3 Digital Volume", MADERA_DAC_DIGITAL_VOLUME_3L,
42662306a36Sopenharmony_ci		 MADERA_DAC_DIGITAL_VOLUME_3R, MADERA_OUT3L_VOL_SHIFT,
42762306a36Sopenharmony_ci		 0xbf, 0, madera_digital_tlv),
42862306a36Sopenharmony_ciSOC_DOUBLE_R_TLV("SPKDAT1 Digital Volume", MADERA_DAC_DIGITAL_VOLUME_5L,
42962306a36Sopenharmony_ci		 MADERA_DAC_DIGITAL_VOLUME_5R, MADERA_OUT5L_VOL_SHIFT,
43062306a36Sopenharmony_ci		 0xbf, 0, madera_digital_tlv),
43162306a36Sopenharmony_ci
43262306a36Sopenharmony_ciSOC_DOUBLE("SPKDAT1 Switch", MADERA_PDM_SPK1_CTRL_1, MADERA_SPK1L_MUTE_SHIFT,
43362306a36Sopenharmony_ci	   MADERA_SPK1R_MUTE_SHIFT, 1, 1),
43462306a36Sopenharmony_ci
43562306a36Sopenharmony_ciSOC_ENUM("Output Ramp Up", madera_out_vi_ramp),
43662306a36Sopenharmony_ciSOC_ENUM("Output Ramp Down", madera_out_vd_ramp),
43762306a36Sopenharmony_ci
43862306a36Sopenharmony_ciSOC_SINGLE("Noise Gate Switch", MADERA_NOISE_GATE_CONTROL,
43962306a36Sopenharmony_ci	   MADERA_NGATE_ENA_SHIFT, 1, 0),
44062306a36Sopenharmony_ciSOC_SINGLE_TLV("Noise Gate Threshold Volume", MADERA_NOISE_GATE_CONTROL,
44162306a36Sopenharmony_ci	       MADERA_NGATE_THR_SHIFT, 7, 1, madera_ng_tlv),
44262306a36Sopenharmony_ciSOC_ENUM("Noise Gate Hold", madera_ng_hold),
44362306a36Sopenharmony_ci
44462306a36Sopenharmony_ciSOC_ENUM_EXT("DFC1RX Width", madera_dfc_width[0],
44562306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
44662306a36Sopenharmony_ciSOC_ENUM_EXT("DFC1RX Type", madera_dfc_type[0],
44762306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
44862306a36Sopenharmony_ciSOC_ENUM_EXT("DFC1TX Width", madera_dfc_width[1],
44962306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
45062306a36Sopenharmony_ciSOC_ENUM_EXT("DFC1TX Type", madera_dfc_type[1],
45162306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
45262306a36Sopenharmony_ciSOC_ENUM_EXT("DFC2RX Width", madera_dfc_width[2],
45362306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
45462306a36Sopenharmony_ciSOC_ENUM_EXT("DFC2RX Type", madera_dfc_type[2],
45562306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
45662306a36Sopenharmony_ciSOC_ENUM_EXT("DFC2TX Width", madera_dfc_width[3],
45762306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
45862306a36Sopenharmony_ciSOC_ENUM_EXT("DFC2TX Type", madera_dfc_type[3],
45962306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
46062306a36Sopenharmony_ciSOC_ENUM_EXT("DFC3RX Width", madera_dfc_width[4],
46162306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
46262306a36Sopenharmony_ciSOC_ENUM_EXT("DFC3RX Type", madera_dfc_type[4],
46362306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
46462306a36Sopenharmony_ciSOC_ENUM_EXT("DFC3TX Width", madera_dfc_width[5],
46562306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
46662306a36Sopenharmony_ciSOC_ENUM_EXT("DFC3TX Type", madera_dfc_type[5],
46762306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
46862306a36Sopenharmony_ciSOC_ENUM_EXT("DFC4RX Width", madera_dfc_width[6],
46962306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
47062306a36Sopenharmony_ciSOC_ENUM_EXT("DFC4RX Type", madera_dfc_type[6],
47162306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
47262306a36Sopenharmony_ciSOC_ENUM_EXT("DFC4TX Width", madera_dfc_width[7],
47362306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
47462306a36Sopenharmony_ciSOC_ENUM_EXT("DFC4TX Type", madera_dfc_type[7],
47562306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
47662306a36Sopenharmony_ciSOC_ENUM_EXT("DFC5RX Width", madera_dfc_width[8],
47762306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
47862306a36Sopenharmony_ciSOC_ENUM_EXT("DFC5RX Type", madera_dfc_type[8],
47962306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
48062306a36Sopenharmony_ciSOC_ENUM_EXT("DFC5TX Width", madera_dfc_width[9],
48162306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
48262306a36Sopenharmony_ciSOC_ENUM_EXT("DFC5TX Type", madera_dfc_type[9],
48362306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
48462306a36Sopenharmony_ciSOC_ENUM_EXT("DFC6RX Width", madera_dfc_width[10],
48562306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
48662306a36Sopenharmony_ciSOC_ENUM_EXT("DFC6RX Type", madera_dfc_type[10],
48762306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
48862306a36Sopenharmony_ciSOC_ENUM_EXT("DFC6TX Width", madera_dfc_width[11],
48962306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
49062306a36Sopenharmony_ciSOC_ENUM_EXT("DFC6TX Type", madera_dfc_type[11],
49162306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
49262306a36Sopenharmony_ciSOC_ENUM_EXT("DFC7RX Width", madera_dfc_width[12],
49362306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
49462306a36Sopenharmony_ciSOC_ENUM_EXT("DFC7RX Type", madera_dfc_type[12],
49562306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
49662306a36Sopenharmony_ciSOC_ENUM_EXT("DFC7TX Width", madera_dfc_width[13],
49762306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
49862306a36Sopenharmony_ciSOC_ENUM_EXT("DFC7TX Type", madera_dfc_type[13],
49962306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
50062306a36Sopenharmony_ciSOC_ENUM_EXT("DFC8RX Width", madera_dfc_width[14],
50162306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
50262306a36Sopenharmony_ciSOC_ENUM_EXT("DFC8RX Type", madera_dfc_type[14],
50362306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
50462306a36Sopenharmony_ciSOC_ENUM_EXT("DFC8TX Width", madera_dfc_width[15],
50562306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
50662306a36Sopenharmony_ciSOC_ENUM_EXT("DFC8TX Type", madera_dfc_type[15],
50762306a36Sopenharmony_ci	     snd_soc_get_enum_double, madera_dfc_put),
50862306a36Sopenharmony_ci
50962306a36Sopenharmony_ciCS47L92_NG_SRC("HPOUT1L", MADERA_NOISE_GATE_SELECT_1L),
51062306a36Sopenharmony_ciCS47L92_NG_SRC("HPOUT1R", MADERA_NOISE_GATE_SELECT_1R),
51162306a36Sopenharmony_ciCS47L92_NG_SRC("HPOUT2L", MADERA_NOISE_GATE_SELECT_2L),
51262306a36Sopenharmony_ciCS47L92_NG_SRC("HPOUT2R", MADERA_NOISE_GATE_SELECT_2R),
51362306a36Sopenharmony_ciCS47L92_NG_SRC("HPOUT3L", MADERA_NOISE_GATE_SELECT_3L),
51462306a36Sopenharmony_ciCS47L92_NG_SRC("HPOUT3R", MADERA_NOISE_GATE_SELECT_3R),
51562306a36Sopenharmony_ciCS47L92_NG_SRC("SPKDAT1L", MADERA_NOISE_GATE_SELECT_5L),
51662306a36Sopenharmony_ciCS47L92_NG_SRC("SPKDAT1R", MADERA_NOISE_GATE_SELECT_5R),
51762306a36Sopenharmony_ci
51862306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF1TX1", MADERA_AIF1TX1MIX_INPUT_1_SOURCE),
51962306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF1TX2", MADERA_AIF1TX2MIX_INPUT_1_SOURCE),
52062306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF1TX3", MADERA_AIF1TX3MIX_INPUT_1_SOURCE),
52162306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF1TX4", MADERA_AIF1TX4MIX_INPUT_1_SOURCE),
52262306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF1TX5", MADERA_AIF1TX5MIX_INPUT_1_SOURCE),
52362306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF1TX6", MADERA_AIF1TX6MIX_INPUT_1_SOURCE),
52462306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF1TX7", MADERA_AIF1TX7MIX_INPUT_1_SOURCE),
52562306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF1TX8", MADERA_AIF1TX8MIX_INPUT_1_SOURCE),
52662306a36Sopenharmony_ci
52762306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF2TX1", MADERA_AIF2TX1MIX_INPUT_1_SOURCE),
52862306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF2TX2", MADERA_AIF2TX2MIX_INPUT_1_SOURCE),
52962306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF2TX3", MADERA_AIF2TX3MIX_INPUT_1_SOURCE),
53062306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF2TX4", MADERA_AIF2TX4MIX_INPUT_1_SOURCE),
53162306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF2TX5", MADERA_AIF2TX5MIX_INPUT_1_SOURCE),
53262306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF2TX6", MADERA_AIF2TX6MIX_INPUT_1_SOURCE),
53362306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF2TX7", MADERA_AIF2TX7MIX_INPUT_1_SOURCE),
53462306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF2TX8", MADERA_AIF2TX8MIX_INPUT_1_SOURCE),
53562306a36Sopenharmony_ci
53662306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF3TX1", MADERA_AIF3TX1MIX_INPUT_1_SOURCE),
53762306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF3TX2", MADERA_AIF3TX2MIX_INPUT_1_SOURCE),
53862306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF3TX3", MADERA_AIF3TX3MIX_INPUT_1_SOURCE),
53962306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("AIF3TX4", MADERA_AIF3TX4MIX_INPUT_1_SOURCE),
54062306a36Sopenharmony_ci
54162306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("SLIMTX1", MADERA_SLIMTX1MIX_INPUT_1_SOURCE),
54262306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("SLIMTX2", MADERA_SLIMTX2MIX_INPUT_1_SOURCE),
54362306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("SLIMTX3", MADERA_SLIMTX3MIX_INPUT_1_SOURCE),
54462306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("SLIMTX4", MADERA_SLIMTX4MIX_INPUT_1_SOURCE),
54562306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("SLIMTX5", MADERA_SLIMTX5MIX_INPUT_1_SOURCE),
54662306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("SLIMTX6", MADERA_SLIMTX6MIX_INPUT_1_SOURCE),
54762306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("SLIMTX7", MADERA_SLIMTX7MIX_INPUT_1_SOURCE),
54862306a36Sopenharmony_ciMADERA_MIXER_CONTROLS("SLIMTX8", MADERA_SLIMTX8MIX_INPUT_1_SOURCE),
54962306a36Sopenharmony_ci
55062306a36Sopenharmony_ciMADERA_GAINMUX_CONTROLS("SPDIFTX1", MADERA_SPDIF1TX1MIX_INPUT_1_SOURCE),
55162306a36Sopenharmony_ciMADERA_GAINMUX_CONTROLS("SPDIFTX2", MADERA_SPDIF1TX2MIX_INPUT_1_SOURCE),
55262306a36Sopenharmony_ci
55362306a36Sopenharmony_ciWM_ADSP_FW_CONTROL("DSP1", 0),
55462306a36Sopenharmony_ci};
55562306a36Sopenharmony_ci
55662306a36Sopenharmony_ciMADERA_MIXER_ENUMS(EQ1, MADERA_EQ1MIX_INPUT_1_SOURCE);
55762306a36Sopenharmony_ciMADERA_MIXER_ENUMS(EQ2, MADERA_EQ2MIX_INPUT_1_SOURCE);
55862306a36Sopenharmony_ciMADERA_MIXER_ENUMS(EQ3, MADERA_EQ3MIX_INPUT_1_SOURCE);
55962306a36Sopenharmony_ciMADERA_MIXER_ENUMS(EQ4, MADERA_EQ4MIX_INPUT_1_SOURCE);
56062306a36Sopenharmony_ci
56162306a36Sopenharmony_ciMADERA_MIXER_ENUMS(DRC1L, MADERA_DRC1LMIX_INPUT_1_SOURCE);
56262306a36Sopenharmony_ciMADERA_MIXER_ENUMS(DRC1R, MADERA_DRC1RMIX_INPUT_1_SOURCE);
56362306a36Sopenharmony_ciMADERA_MIXER_ENUMS(DRC2L, MADERA_DRC2LMIX_INPUT_1_SOURCE);
56462306a36Sopenharmony_ciMADERA_MIXER_ENUMS(DRC2R, MADERA_DRC2RMIX_INPUT_1_SOURCE);
56562306a36Sopenharmony_ci
56662306a36Sopenharmony_ciMADERA_MIXER_ENUMS(LHPF1, MADERA_HPLP1MIX_INPUT_1_SOURCE);
56762306a36Sopenharmony_ciMADERA_MIXER_ENUMS(LHPF2, MADERA_HPLP2MIX_INPUT_1_SOURCE);
56862306a36Sopenharmony_ciMADERA_MIXER_ENUMS(LHPF3, MADERA_HPLP3MIX_INPUT_1_SOURCE);
56962306a36Sopenharmony_ciMADERA_MIXER_ENUMS(LHPF4, MADERA_HPLP4MIX_INPUT_1_SOURCE);
57062306a36Sopenharmony_ci
57162306a36Sopenharmony_ciMADERA_MIXER_ENUMS(DSP1L, MADERA_DSP1LMIX_INPUT_1_SOURCE);
57262306a36Sopenharmony_ciMADERA_MIXER_ENUMS(DSP1R, MADERA_DSP1RMIX_INPUT_1_SOURCE);
57362306a36Sopenharmony_ciMADERA_DSP_AUX_ENUMS(DSP1, MADERA_DSP1AUX1MIX_INPUT_1_SOURCE);
57462306a36Sopenharmony_ci
57562306a36Sopenharmony_ciMADERA_MIXER_ENUMS(PWM1, MADERA_PWM1MIX_INPUT_1_SOURCE);
57662306a36Sopenharmony_ciMADERA_MIXER_ENUMS(PWM2, MADERA_PWM2MIX_INPUT_1_SOURCE);
57762306a36Sopenharmony_ci
57862306a36Sopenharmony_ciMADERA_MIXER_ENUMS(OUT1L, MADERA_OUT1LMIX_INPUT_1_SOURCE);
57962306a36Sopenharmony_ciMADERA_MIXER_ENUMS(OUT1R, MADERA_OUT1RMIX_INPUT_1_SOURCE);
58062306a36Sopenharmony_ciMADERA_MIXER_ENUMS(OUT2L, MADERA_OUT2LMIX_INPUT_1_SOURCE);
58162306a36Sopenharmony_ciMADERA_MIXER_ENUMS(OUT2R, MADERA_OUT2RMIX_INPUT_1_SOURCE);
58262306a36Sopenharmony_ciMADERA_MIXER_ENUMS(OUT3L, MADERA_OUT3LMIX_INPUT_1_SOURCE);
58362306a36Sopenharmony_ciMADERA_MIXER_ENUMS(OUT3R, MADERA_OUT3RMIX_INPUT_1_SOURCE);
58462306a36Sopenharmony_ciMADERA_MIXER_ENUMS(SPKDAT1L, MADERA_OUT5LMIX_INPUT_1_SOURCE);
58562306a36Sopenharmony_ciMADERA_MIXER_ENUMS(SPKDAT1R, MADERA_OUT5RMIX_INPUT_1_SOURCE);
58662306a36Sopenharmony_ci
58762306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF1TX1, MADERA_AIF1TX1MIX_INPUT_1_SOURCE);
58862306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF1TX2, MADERA_AIF1TX2MIX_INPUT_1_SOURCE);
58962306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF1TX3, MADERA_AIF1TX3MIX_INPUT_1_SOURCE);
59062306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF1TX4, MADERA_AIF1TX4MIX_INPUT_1_SOURCE);
59162306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF1TX5, MADERA_AIF1TX5MIX_INPUT_1_SOURCE);
59262306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF1TX6, MADERA_AIF1TX6MIX_INPUT_1_SOURCE);
59362306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF1TX7, MADERA_AIF1TX7MIX_INPUT_1_SOURCE);
59462306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF1TX8, MADERA_AIF1TX8MIX_INPUT_1_SOURCE);
59562306a36Sopenharmony_ci
59662306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF2TX1, MADERA_AIF2TX1MIX_INPUT_1_SOURCE);
59762306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF2TX2, MADERA_AIF2TX2MIX_INPUT_1_SOURCE);
59862306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF2TX3, MADERA_AIF2TX3MIX_INPUT_1_SOURCE);
59962306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF2TX4, MADERA_AIF2TX4MIX_INPUT_1_SOURCE);
60062306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF2TX5, MADERA_AIF2TX5MIX_INPUT_1_SOURCE);
60162306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF2TX6, MADERA_AIF2TX6MIX_INPUT_1_SOURCE);
60262306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF2TX7, MADERA_AIF2TX7MIX_INPUT_1_SOURCE);
60362306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF2TX8, MADERA_AIF2TX8MIX_INPUT_1_SOURCE);
60462306a36Sopenharmony_ci
60562306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF3TX1, MADERA_AIF3TX1MIX_INPUT_1_SOURCE);
60662306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF3TX2, MADERA_AIF3TX2MIX_INPUT_1_SOURCE);
60762306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF3TX3, MADERA_AIF3TX3MIX_INPUT_1_SOURCE);
60862306a36Sopenharmony_ciMADERA_MIXER_ENUMS(AIF3TX4, MADERA_AIF3TX4MIX_INPUT_1_SOURCE);
60962306a36Sopenharmony_ci
61062306a36Sopenharmony_ciMADERA_MIXER_ENUMS(SLIMTX1, MADERA_SLIMTX1MIX_INPUT_1_SOURCE);
61162306a36Sopenharmony_ciMADERA_MIXER_ENUMS(SLIMTX2, MADERA_SLIMTX2MIX_INPUT_1_SOURCE);
61262306a36Sopenharmony_ciMADERA_MIXER_ENUMS(SLIMTX3, MADERA_SLIMTX3MIX_INPUT_1_SOURCE);
61362306a36Sopenharmony_ciMADERA_MIXER_ENUMS(SLIMTX4, MADERA_SLIMTX4MIX_INPUT_1_SOURCE);
61462306a36Sopenharmony_ciMADERA_MIXER_ENUMS(SLIMTX5, MADERA_SLIMTX5MIX_INPUT_1_SOURCE);
61562306a36Sopenharmony_ciMADERA_MIXER_ENUMS(SLIMTX6, MADERA_SLIMTX6MIX_INPUT_1_SOURCE);
61662306a36Sopenharmony_ciMADERA_MIXER_ENUMS(SLIMTX7, MADERA_SLIMTX7MIX_INPUT_1_SOURCE);
61762306a36Sopenharmony_ciMADERA_MIXER_ENUMS(SLIMTX8, MADERA_SLIMTX8MIX_INPUT_1_SOURCE);
61862306a36Sopenharmony_ci
61962306a36Sopenharmony_ciMADERA_MUX_ENUMS(SPD1TX1, MADERA_SPDIF1TX1MIX_INPUT_1_SOURCE);
62062306a36Sopenharmony_ciMADERA_MUX_ENUMS(SPD1TX2, MADERA_SPDIF1TX2MIX_INPUT_1_SOURCE);
62162306a36Sopenharmony_ci
62262306a36Sopenharmony_ciMADERA_MUX_ENUMS(ASRC1IN1L, MADERA_ASRC1_1LMIX_INPUT_1_SOURCE);
62362306a36Sopenharmony_ciMADERA_MUX_ENUMS(ASRC1IN1R, MADERA_ASRC1_1RMIX_INPUT_1_SOURCE);
62462306a36Sopenharmony_ciMADERA_MUX_ENUMS(ASRC1IN2L, MADERA_ASRC1_2LMIX_INPUT_1_SOURCE);
62562306a36Sopenharmony_ciMADERA_MUX_ENUMS(ASRC1IN2R, MADERA_ASRC1_2RMIX_INPUT_1_SOURCE);
62662306a36Sopenharmony_ci
62762306a36Sopenharmony_ciMADERA_MUX_ENUMS(ISRC1INT1, MADERA_ISRC1INT1MIX_INPUT_1_SOURCE);
62862306a36Sopenharmony_ciMADERA_MUX_ENUMS(ISRC1INT2, MADERA_ISRC1INT2MIX_INPUT_1_SOURCE);
62962306a36Sopenharmony_ci
63062306a36Sopenharmony_ciMADERA_MUX_ENUMS(ISRC1DEC1, MADERA_ISRC1DEC1MIX_INPUT_1_SOURCE);
63162306a36Sopenharmony_ciMADERA_MUX_ENUMS(ISRC1DEC2, MADERA_ISRC1DEC2MIX_INPUT_1_SOURCE);
63262306a36Sopenharmony_ci
63362306a36Sopenharmony_ciMADERA_MUX_ENUMS(ISRC2INT1, MADERA_ISRC2INT1MIX_INPUT_1_SOURCE);
63462306a36Sopenharmony_ciMADERA_MUX_ENUMS(ISRC2INT2, MADERA_ISRC2INT2MIX_INPUT_1_SOURCE);
63562306a36Sopenharmony_ci
63662306a36Sopenharmony_ciMADERA_MUX_ENUMS(ISRC2DEC1, MADERA_ISRC2DEC1MIX_INPUT_1_SOURCE);
63762306a36Sopenharmony_ciMADERA_MUX_ENUMS(ISRC2DEC2, MADERA_ISRC2DEC2MIX_INPUT_1_SOURCE);
63862306a36Sopenharmony_ci
63962306a36Sopenharmony_ciMADERA_MUX_ENUMS(DFC1, MADERA_DFC1MIX_INPUT_1_SOURCE);
64062306a36Sopenharmony_ciMADERA_MUX_ENUMS(DFC2, MADERA_DFC2MIX_INPUT_1_SOURCE);
64162306a36Sopenharmony_ciMADERA_MUX_ENUMS(DFC3, MADERA_DFC3MIX_INPUT_1_SOURCE);
64262306a36Sopenharmony_ciMADERA_MUX_ENUMS(DFC4, MADERA_DFC4MIX_INPUT_1_SOURCE);
64362306a36Sopenharmony_ciMADERA_MUX_ENUMS(DFC5, MADERA_DFC5MIX_INPUT_1_SOURCE);
64462306a36Sopenharmony_ciMADERA_MUX_ENUMS(DFC6, MADERA_DFC6MIX_INPUT_1_SOURCE);
64562306a36Sopenharmony_ciMADERA_MUX_ENUMS(DFC7, MADERA_DFC7MIX_INPUT_1_SOURCE);
64662306a36Sopenharmony_ciMADERA_MUX_ENUMS(DFC8, MADERA_DFC8MIX_INPUT_1_SOURCE);
64762306a36Sopenharmony_ci
64862306a36Sopenharmony_cistatic const char * const cs47l92_aec_loopback_texts[] = {
64962306a36Sopenharmony_ci	"HPOUT1L", "HPOUT1R", "HPOUT2L", "HPOUT2R", "HPOUT3L", "HPOUT3R",
65062306a36Sopenharmony_ci	"SPKDAT1L", "SPKDAT1R",
65162306a36Sopenharmony_ci};
65262306a36Sopenharmony_ci
65362306a36Sopenharmony_cistatic const unsigned int cs47l92_aec_loopback_values[] = {
65462306a36Sopenharmony_ci	0, 1, 2, 3, 4, 5, 8, 9
65562306a36Sopenharmony_ci};
65662306a36Sopenharmony_ci
65762306a36Sopenharmony_cistatic const struct soc_enum cs47l92_aec_loopback =
65862306a36Sopenharmony_ci	SOC_VALUE_ENUM_SINGLE(MADERA_DAC_AEC_CONTROL_1,
65962306a36Sopenharmony_ci			      MADERA_AEC1_LOOPBACK_SRC_SHIFT, 0xf,
66062306a36Sopenharmony_ci			      ARRAY_SIZE(cs47l92_aec_loopback_texts),
66162306a36Sopenharmony_ci			      cs47l92_aec_loopback_texts,
66262306a36Sopenharmony_ci			      cs47l92_aec_loopback_values);
66362306a36Sopenharmony_ci
66462306a36Sopenharmony_cistatic const struct snd_kcontrol_new cs47l92_aec_loopback_mux =
66562306a36Sopenharmony_ci	SOC_DAPM_ENUM("AEC1 Loopback", cs47l92_aec_loopback);
66662306a36Sopenharmony_ci
66762306a36Sopenharmony_cistatic const struct snd_soc_dapm_widget cs47l92_dapm_widgets[] = {
66862306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("SYSCLK", MADERA_SYSTEM_CLOCK_1, MADERA_SYSCLK_ENA_SHIFT,
66962306a36Sopenharmony_ci		    0, madera_sysclk_ev,
67062306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
67162306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
67262306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("ASYNCCLK", MADERA_ASYNC_CLOCK_1,
67362306a36Sopenharmony_ci		    MADERA_ASYNC_CLK_ENA_SHIFT, 0, madera_clk_ev,
67462306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
67562306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("OPCLK", MADERA_OUTPUT_SYSTEM_CLOCK,
67662306a36Sopenharmony_ci		    MADERA_OPCLK_ENA_SHIFT, 0, NULL, 0),
67762306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("ASYNCOPCLK", MADERA_OUTPUT_ASYNC_CLOCK,
67862306a36Sopenharmony_ci		    MADERA_OPCLK_ASYNC_ENA_SHIFT, 0, NULL, 0),
67962306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("DSPCLK", MADERA_DSP_CLOCK_1, MADERA_DSP_CLK_ENA_SHIFT,
68062306a36Sopenharmony_ci		    0, madera_clk_ev,
68162306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
68262306a36Sopenharmony_ci
68362306a36Sopenharmony_ciSND_SOC_DAPM_REGULATOR_SUPPLY("CPVDD1", 20, 0),
68462306a36Sopenharmony_ciSND_SOC_DAPM_REGULATOR_SUPPLY("CPVDD2", 20, 0),
68562306a36Sopenharmony_ciSND_SOC_DAPM_REGULATOR_SUPPLY("MICVDD", 0, SND_SOC_DAPM_REGULATOR_BYPASS),
68662306a36Sopenharmony_ci
68762306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("MICBIAS1", MADERA_MIC_BIAS_CTRL_1,
68862306a36Sopenharmony_ci		    MADERA_MICB1_ENA_SHIFT, 0, NULL, 0),
68962306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("MICBIAS2", MADERA_MIC_BIAS_CTRL_2,
69062306a36Sopenharmony_ci		    MADERA_MICB1_ENA_SHIFT, 0, NULL, 0),
69162306a36Sopenharmony_ci
69262306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("MICBIAS1A", MADERA_MIC_BIAS_CTRL_5,
69362306a36Sopenharmony_ci		    MADERA_MICB1A_ENA_SHIFT, 0, NULL, 0),
69462306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("MICBIAS1B", MADERA_MIC_BIAS_CTRL_5,
69562306a36Sopenharmony_ci		    MADERA_MICB1B_ENA_SHIFT, 0, NULL, 0),
69662306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("MICBIAS1C", MADERA_MIC_BIAS_CTRL_5,
69762306a36Sopenharmony_ci		    MADERA_MICB1C_ENA_SHIFT, 0, NULL, 0),
69862306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("MICBIAS1D", MADERA_MIC_BIAS_CTRL_5,
69962306a36Sopenharmony_ci		    MADERA_MICB1D_ENA_SHIFT, 0, NULL, 0),
70062306a36Sopenharmony_ci
70162306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("MICBIAS2A", MADERA_MIC_BIAS_CTRL_6,
70262306a36Sopenharmony_ci		    MADERA_MICB2A_ENA_SHIFT, 0, NULL, 0),
70362306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("MICBIAS2B", MADERA_MIC_BIAS_CTRL_6,
70462306a36Sopenharmony_ci		    MADERA_MICB2B_ENA_SHIFT, 0, NULL, 0),
70562306a36Sopenharmony_ci
70662306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("FXCLK", SND_SOC_NOPM,
70762306a36Sopenharmony_ci		    MADERA_DOM_GRP_FX, 0,
70862306a36Sopenharmony_ci		    madera_domain_clk_ev,
70962306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
71062306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("ASRC1CLK", SND_SOC_NOPM,
71162306a36Sopenharmony_ci		    MADERA_DOM_GRP_ASRC1, 0,
71262306a36Sopenharmony_ci		    madera_domain_clk_ev,
71362306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
71462306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("ISRC1CLK", SND_SOC_NOPM,
71562306a36Sopenharmony_ci		    MADERA_DOM_GRP_ISRC1, 0,
71662306a36Sopenharmony_ci		    madera_domain_clk_ev,
71762306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
71862306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("ISRC2CLK", SND_SOC_NOPM,
71962306a36Sopenharmony_ci		    MADERA_DOM_GRP_ISRC2, 0,
72062306a36Sopenharmony_ci		    madera_domain_clk_ev,
72162306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
72262306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("OUTCLK", SND_SOC_NOPM,
72362306a36Sopenharmony_ci		    MADERA_DOM_GRP_OUT, 0,
72462306a36Sopenharmony_ci		    cs47l92_outclk_ev,
72562306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
72662306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("SPDCLK", SND_SOC_NOPM,
72762306a36Sopenharmony_ci		    MADERA_DOM_GRP_SPD, 0,
72862306a36Sopenharmony_ci		    madera_domain_clk_ev,
72962306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
73062306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("DSP1CLK", SND_SOC_NOPM,
73162306a36Sopenharmony_ci		    MADERA_DOM_GRP_DSP1, 0,
73262306a36Sopenharmony_ci		    madera_domain_clk_ev,
73362306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
73462306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("AIF1TXCLK", SND_SOC_NOPM,
73562306a36Sopenharmony_ci		    MADERA_DOM_GRP_AIF1, 0,
73662306a36Sopenharmony_ci		    madera_domain_clk_ev,
73762306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
73862306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("AIF2TXCLK", SND_SOC_NOPM,
73962306a36Sopenharmony_ci		    MADERA_DOM_GRP_AIF2, 0,
74062306a36Sopenharmony_ci		    madera_domain_clk_ev,
74162306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
74262306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("AIF3TXCLK", SND_SOC_NOPM,
74362306a36Sopenharmony_ci		    MADERA_DOM_GRP_AIF3, 0,
74462306a36Sopenharmony_ci		    madera_domain_clk_ev,
74562306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
74662306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("SLIMBUSCLK", SND_SOC_NOPM,
74762306a36Sopenharmony_ci		    MADERA_DOM_GRP_SLIMBUS, 0,
74862306a36Sopenharmony_ci		    madera_domain_clk_ev,
74962306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
75062306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("PWMCLK", SND_SOC_NOPM,
75162306a36Sopenharmony_ci		    MADERA_DOM_GRP_PWM, 0,
75262306a36Sopenharmony_ci		    madera_domain_clk_ev,
75362306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
75462306a36Sopenharmony_ciSND_SOC_DAPM_SUPPLY("DFCCLK", SND_SOC_NOPM,
75562306a36Sopenharmony_ci		    MADERA_DOM_GRP_DFC, 0,
75662306a36Sopenharmony_ci		    madera_domain_clk_ev,
75762306a36Sopenharmony_ci		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
75862306a36Sopenharmony_ci
75962306a36Sopenharmony_ciSND_SOC_DAPM_SIGGEN("TONE"),
76062306a36Sopenharmony_ciSND_SOC_DAPM_SIGGEN("NOISE"),
76162306a36Sopenharmony_ci
76262306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN1ALN"),
76362306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN1ALP"),
76462306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN1BLN"),
76562306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN1BLP"),
76662306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN1ARN"),
76762306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN1ARP"),
76862306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN1BR"),
76962306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN2ALN"),
77062306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN2ALP"),
77162306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN2BL"),
77262306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN2ARN"),
77362306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN2ARP"),
77462306a36Sopenharmony_ciSND_SOC_DAPM_INPUT("IN2BR"),
77562306a36Sopenharmony_ci
77662306a36Sopenharmony_ciSND_SOC_DAPM_MUX("IN1L Analog Mux", SND_SOC_NOPM, 0, 0, &madera_inmux[0]),
77762306a36Sopenharmony_ciSND_SOC_DAPM_MUX("IN1R Analog Mux", SND_SOC_NOPM, 0, 0, &madera_inmux[1]),
77862306a36Sopenharmony_ciSND_SOC_DAPM_MUX("IN2L Analog Mux", SND_SOC_NOPM, 0, 0, &madera_inmux[2]),
77962306a36Sopenharmony_ciSND_SOC_DAPM_MUX("IN2R Analog Mux", SND_SOC_NOPM, 0, 0, &madera_inmux[3]),
78062306a36Sopenharmony_ci
78162306a36Sopenharmony_ciSND_SOC_DAPM_MUX("IN1L Mode", SND_SOC_NOPM, 0, 0, &madera_inmode[0]),
78262306a36Sopenharmony_ciSND_SOC_DAPM_MUX("IN1R Mode", SND_SOC_NOPM, 0, 0, &madera_inmode[0]),
78362306a36Sopenharmony_ci
78462306a36Sopenharmony_ciSND_SOC_DAPM_MUX("IN2L Mode", SND_SOC_NOPM, 0, 0, &madera_inmode[1]),
78562306a36Sopenharmony_ciSND_SOC_DAPM_MUX("IN2R Mode", SND_SOC_NOPM, 0, 0, &madera_inmode[1]),
78662306a36Sopenharmony_ci
78762306a36Sopenharmony_ciSND_SOC_DAPM_DEMUX("OUT3 Demux", SND_SOC_NOPM, 0, 0, &cs47l92_outdemux),
78862306a36Sopenharmony_ciSND_SOC_DAPM_MUX("OUT3 Mono Mux", SND_SOC_NOPM, 0, 0, &cs47l92_outdemux),
78962306a36Sopenharmony_ci
79062306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("DRC1 Signal Activity"),
79162306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("DRC2 Signal Activity"),
79262306a36Sopenharmony_ci
79362306a36Sopenharmony_ciSND_SOC_DAPM_PGA("PWM1 Driver", MADERA_PWM_DRIVE_1, MADERA_PWM1_ENA_SHIFT,
79462306a36Sopenharmony_ci		 0, NULL, 0),
79562306a36Sopenharmony_ciSND_SOC_DAPM_PGA("PWM2 Driver", MADERA_PWM_DRIVE_1, MADERA_PWM2_ENA_SHIFT,
79662306a36Sopenharmony_ci		 0, NULL, 0),
79762306a36Sopenharmony_ci
79862306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF1TX1", NULL, 0,
79962306a36Sopenharmony_ci		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX1_ENA_SHIFT, 0),
80062306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF1TX2", NULL, 1,
80162306a36Sopenharmony_ci		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX2_ENA_SHIFT, 0),
80262306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF1TX3", NULL, 2,
80362306a36Sopenharmony_ci		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX3_ENA_SHIFT, 0),
80462306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF1TX4", NULL, 3,
80562306a36Sopenharmony_ci		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX4_ENA_SHIFT, 0),
80662306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF1TX5", NULL, 4,
80762306a36Sopenharmony_ci		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX5_ENA_SHIFT, 0),
80862306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF1TX6", NULL, 5,
80962306a36Sopenharmony_ci		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX6_ENA_SHIFT, 0),
81062306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF1TX7", NULL, 6,
81162306a36Sopenharmony_ci		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX7_ENA_SHIFT, 0),
81262306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF1TX8", NULL, 7,
81362306a36Sopenharmony_ci		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX8_ENA_SHIFT, 0),
81462306a36Sopenharmony_ci
81562306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF2TX1", NULL, 0,
81662306a36Sopenharmony_ci		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX1_ENA_SHIFT, 0),
81762306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF2TX2", NULL, 1,
81862306a36Sopenharmony_ci		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX2_ENA_SHIFT, 0),
81962306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF2TX3", NULL, 2,
82062306a36Sopenharmony_ci		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX3_ENA_SHIFT, 0),
82162306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF2TX4", NULL, 3,
82262306a36Sopenharmony_ci		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX4_ENA_SHIFT, 0),
82362306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF2TX5", NULL, 4,
82462306a36Sopenharmony_ci		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX5_ENA_SHIFT, 0),
82562306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF2TX6", NULL, 5,
82662306a36Sopenharmony_ci		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX6_ENA_SHIFT, 0),
82762306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF2TX7", NULL, 6,
82862306a36Sopenharmony_ci		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX7_ENA_SHIFT, 0),
82962306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF2TX8", NULL, 7,
83062306a36Sopenharmony_ci		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX8_ENA_SHIFT, 0),
83162306a36Sopenharmony_ci
83262306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("SLIMTX1", NULL, 0,
83362306a36Sopenharmony_ci		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,
83462306a36Sopenharmony_ci		     MADERA_SLIMTX1_ENA_SHIFT, 0),
83562306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("SLIMTX2", NULL, 1,
83662306a36Sopenharmony_ci		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,
83762306a36Sopenharmony_ci		     MADERA_SLIMTX2_ENA_SHIFT, 0),
83862306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("SLIMTX3", NULL, 2,
83962306a36Sopenharmony_ci		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,
84062306a36Sopenharmony_ci		     MADERA_SLIMTX3_ENA_SHIFT, 0),
84162306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("SLIMTX4", NULL, 3,
84262306a36Sopenharmony_ci		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,
84362306a36Sopenharmony_ci		     MADERA_SLIMTX4_ENA_SHIFT, 0),
84462306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("SLIMTX5", NULL, 4,
84562306a36Sopenharmony_ci		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,
84662306a36Sopenharmony_ci		     MADERA_SLIMTX5_ENA_SHIFT, 0),
84762306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("SLIMTX6", NULL, 5,
84862306a36Sopenharmony_ci		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,
84962306a36Sopenharmony_ci		     MADERA_SLIMTX6_ENA_SHIFT, 0),
85062306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("SLIMTX7", NULL, 6,
85162306a36Sopenharmony_ci		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,
85262306a36Sopenharmony_ci		     MADERA_SLIMTX7_ENA_SHIFT, 0),
85362306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("SLIMTX8", NULL, 7,
85462306a36Sopenharmony_ci		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,
85562306a36Sopenharmony_ci		     MADERA_SLIMTX8_ENA_SHIFT, 0),
85662306a36Sopenharmony_ci
85762306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF3TX1", NULL, 0,
85862306a36Sopenharmony_ci		     MADERA_AIF3_TX_ENABLES, MADERA_AIF3TX1_ENA_SHIFT, 0),
85962306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF3TX2", NULL, 1,
86062306a36Sopenharmony_ci		     MADERA_AIF3_TX_ENABLES, MADERA_AIF3TX2_ENA_SHIFT, 0),
86162306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF3TX3", NULL, 2,
86262306a36Sopenharmony_ci		     MADERA_AIF3_TX_ENABLES, MADERA_AIF3TX3_ENA_SHIFT, 0),
86362306a36Sopenharmony_ciSND_SOC_DAPM_AIF_OUT("AIF3TX4", NULL, 3,
86462306a36Sopenharmony_ci		     MADERA_AIF3_TX_ENABLES, MADERA_AIF3TX4_ENA_SHIFT, 0),
86562306a36Sopenharmony_ci
86662306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM,
86762306a36Sopenharmony_ci		   MADERA_OUT1L_ENA_SHIFT, 0, NULL, 0, madera_hp_ev,
86862306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
86962306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
87062306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("OUT1R", SND_SOC_NOPM,
87162306a36Sopenharmony_ci		   MADERA_OUT1R_ENA_SHIFT, 0, NULL, 0, madera_hp_ev,
87262306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
87362306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
87462306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("OUT2L", SND_SOC_NOPM,
87562306a36Sopenharmony_ci		   MADERA_OUT2L_ENA_SHIFT, 0, NULL, 0, madera_hp_ev,
87662306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
87762306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
87862306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("OUT2R", SND_SOC_NOPM,
87962306a36Sopenharmony_ci		   MADERA_OUT2R_ENA_SHIFT, 0, NULL, 0, madera_hp_ev,
88062306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
88162306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
88262306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("OUT3L", MADERA_OUTPUT_ENABLES_1,
88362306a36Sopenharmony_ci		   MADERA_OUT3L_ENA_SHIFT, 0, NULL, 0, madera_out_ev,
88462306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
88562306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
88662306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("OUT3R", MADERA_OUTPUT_ENABLES_1,
88762306a36Sopenharmony_ci		   MADERA_OUT3R_ENA_SHIFT, 0, NULL, 0, madera_out_ev,
88862306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
88962306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
89062306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("OUT5L", MADERA_OUTPUT_ENABLES_1,
89162306a36Sopenharmony_ci		   MADERA_OUT5L_ENA_SHIFT, 0, NULL, 0, madera_out_ev,
89262306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
89362306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("OUT5R", MADERA_OUTPUT_ENABLES_1,
89462306a36Sopenharmony_ci		   MADERA_OUT5R_ENA_SHIFT, 0, NULL, 0, madera_out_ev,
89562306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
89662306a36Sopenharmony_ci
89762306a36Sopenharmony_ciSND_SOC_DAPM_PGA("SPD1TX1", MADERA_SPD1_TX_CONTROL,
89862306a36Sopenharmony_ci		 MADERA_SPD1_VAL1_SHIFT, 0, NULL, 0),
89962306a36Sopenharmony_ciSND_SOC_DAPM_PGA("SPD1TX2", MADERA_SPD1_TX_CONTROL,
90062306a36Sopenharmony_ci		 MADERA_SPD1_VAL2_SHIFT, 0, NULL, 0),
90162306a36Sopenharmony_ciSND_SOC_DAPM_OUT_DRV("SPD1", MADERA_SPD1_TX_CONTROL,
90262306a36Sopenharmony_ci		     MADERA_SPD1_ENA_SHIFT, 0, NULL, 0),
90362306a36Sopenharmony_ci
90462306a36Sopenharmony_ci/*
90562306a36Sopenharmony_ci * mux_in widgets : arranged in the order of sources
90662306a36Sopenharmony_ci * specified in MADERA_MIXER_INPUT_ROUTES
90762306a36Sopenharmony_ci */
90862306a36Sopenharmony_ci
90962306a36Sopenharmony_ciSND_SOC_DAPM_PGA("Noise Generator", MADERA_COMFORT_NOISE_GENERATOR,
91062306a36Sopenharmony_ci		 MADERA_NOISE_GEN_ENA_SHIFT, 0, NULL, 0),
91162306a36Sopenharmony_ci
91262306a36Sopenharmony_ciSND_SOC_DAPM_PGA("Tone Generator 1", MADERA_TONE_GENERATOR_1,
91362306a36Sopenharmony_ci		 MADERA_TONE1_ENA_SHIFT, 0, NULL, 0),
91462306a36Sopenharmony_ciSND_SOC_DAPM_PGA("Tone Generator 2", MADERA_TONE_GENERATOR_1,
91562306a36Sopenharmony_ci		 MADERA_TONE2_ENA_SHIFT, 0, NULL, 0),
91662306a36Sopenharmony_ci
91762306a36Sopenharmony_ciSND_SOC_DAPM_SIGGEN("HAPTICS"),
91862306a36Sopenharmony_ci
91962306a36Sopenharmony_ciSND_SOC_DAPM_MUX("AEC1 Loopback", MADERA_DAC_AEC_CONTROL_1,
92062306a36Sopenharmony_ci		 MADERA_AEC1_LOOPBACK_ENA_SHIFT, 0,
92162306a36Sopenharmony_ci		 &cs47l92_aec_loopback_mux),
92262306a36Sopenharmony_ci
92362306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("IN1L", MADERA_INPUT_ENABLES, MADERA_IN1L_ENA_SHIFT,
92462306a36Sopenharmony_ci		   0, NULL, 0, madera_in_ev,
92562306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
92662306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
92762306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("IN1R", MADERA_INPUT_ENABLES, MADERA_IN1R_ENA_SHIFT,
92862306a36Sopenharmony_ci		   0, NULL, 0, madera_in_ev,
92962306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
93062306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
93162306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("IN2L", MADERA_INPUT_ENABLES, MADERA_IN2L_ENA_SHIFT,
93262306a36Sopenharmony_ci		   0, NULL, 0, madera_in_ev,
93362306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
93462306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
93562306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("IN2R", MADERA_INPUT_ENABLES, MADERA_IN2R_ENA_SHIFT,
93662306a36Sopenharmony_ci		   0, NULL, 0, madera_in_ev,
93762306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
93862306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
93962306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("IN3L", MADERA_INPUT_ENABLES, MADERA_IN3L_ENA_SHIFT,
94062306a36Sopenharmony_ci		   0, NULL, 0, madera_in_ev,
94162306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
94262306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
94362306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("IN3R", MADERA_INPUT_ENABLES, MADERA_IN3R_ENA_SHIFT,
94462306a36Sopenharmony_ci		   0, NULL, 0, madera_in_ev,
94562306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
94662306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
94762306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("IN4L", MADERA_INPUT_ENABLES, MADERA_IN4L_ENA_SHIFT,
94862306a36Sopenharmony_ci		   0, NULL, 0, madera_in_ev,
94962306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
95062306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
95162306a36Sopenharmony_ciSND_SOC_DAPM_PGA_E("IN4R", MADERA_INPUT_ENABLES, MADERA_IN4R_ENA_SHIFT,
95262306a36Sopenharmony_ci		   0, NULL, 0, madera_in_ev,
95362306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
95462306a36Sopenharmony_ci		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
95562306a36Sopenharmony_ci
95662306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF1RX1", NULL, 0,
95762306a36Sopenharmony_ci		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX1_ENA_SHIFT, 0),
95862306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF1RX2", NULL, 1,
95962306a36Sopenharmony_ci		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX2_ENA_SHIFT, 0),
96062306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF1RX3", NULL, 2,
96162306a36Sopenharmony_ci		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX3_ENA_SHIFT, 0),
96262306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF1RX4", NULL, 3,
96362306a36Sopenharmony_ci		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX4_ENA_SHIFT, 0),
96462306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF1RX5", NULL, 4,
96562306a36Sopenharmony_ci		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX5_ENA_SHIFT, 0),
96662306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF1RX6", NULL, 5,
96762306a36Sopenharmony_ci		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX6_ENA_SHIFT, 0),
96862306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF1RX7", NULL, 6,
96962306a36Sopenharmony_ci		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX7_ENA_SHIFT, 0),
97062306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF1RX8", NULL, 7,
97162306a36Sopenharmony_ci		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX8_ENA_SHIFT, 0),
97262306a36Sopenharmony_ci
97362306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF2RX1", NULL, 0,
97462306a36Sopenharmony_ci		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX1_ENA_SHIFT, 0),
97562306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF2RX2", NULL, 1,
97662306a36Sopenharmony_ci		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX2_ENA_SHIFT, 0),
97762306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF2RX3", NULL, 2,
97862306a36Sopenharmony_ci		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX3_ENA_SHIFT, 0),
97962306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF2RX4", NULL, 3,
98062306a36Sopenharmony_ci		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX4_ENA_SHIFT, 0),
98162306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF2RX5", NULL, 4,
98262306a36Sopenharmony_ci		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX5_ENA_SHIFT, 0),
98362306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF2RX6", NULL, 5,
98462306a36Sopenharmony_ci		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX6_ENA_SHIFT, 0),
98562306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF2RX7", NULL, 6,
98662306a36Sopenharmony_ci		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX7_ENA_SHIFT, 0),
98762306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF2RX8", NULL, 7,
98862306a36Sopenharmony_ci		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX8_ENA_SHIFT, 0),
98962306a36Sopenharmony_ci
99062306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF3RX1", NULL, 0,
99162306a36Sopenharmony_ci		    MADERA_AIF3_RX_ENABLES, MADERA_AIF3RX1_ENA_SHIFT, 0),
99262306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 1,
99362306a36Sopenharmony_ci		    MADERA_AIF3_RX_ENABLES, MADERA_AIF3RX2_ENA_SHIFT, 0),
99462306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF3RX3", NULL, 2,
99562306a36Sopenharmony_ci		    MADERA_AIF3_RX_ENABLES, MADERA_AIF3RX3_ENA_SHIFT, 0),
99662306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("AIF3RX4", NULL, 3,
99762306a36Sopenharmony_ci		    MADERA_AIF3_RX_ENABLES, MADERA_AIF3RX4_ENA_SHIFT, 0),
99862306a36Sopenharmony_ci
99962306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("SLIMRX1", NULL, 0, MADERA_SLIMBUS_RX_CHANNEL_ENABLE,
100062306a36Sopenharmony_ci		    MADERA_SLIMRX1_ENA_SHIFT, 0),
100162306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("SLIMRX2", NULL, 1, MADERA_SLIMBUS_RX_CHANNEL_ENABLE,
100262306a36Sopenharmony_ci		    MADERA_SLIMRX2_ENA_SHIFT, 0),
100362306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("SLIMRX3", NULL, 2, MADERA_SLIMBUS_RX_CHANNEL_ENABLE,
100462306a36Sopenharmony_ci		    MADERA_SLIMRX3_ENA_SHIFT, 0),
100562306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("SLIMRX4", NULL, 3, MADERA_SLIMBUS_RX_CHANNEL_ENABLE,
100662306a36Sopenharmony_ci		    MADERA_SLIMRX4_ENA_SHIFT, 0),
100762306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("SLIMRX5", NULL, 4, MADERA_SLIMBUS_RX_CHANNEL_ENABLE,
100862306a36Sopenharmony_ci		    MADERA_SLIMRX5_ENA_SHIFT, 0),
100962306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("SLIMRX6", NULL, 5, MADERA_SLIMBUS_RX_CHANNEL_ENABLE,
101062306a36Sopenharmony_ci		    MADERA_SLIMRX6_ENA_SHIFT, 0),
101162306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("SLIMRX7", NULL, 6, MADERA_SLIMBUS_RX_CHANNEL_ENABLE,
101262306a36Sopenharmony_ci		    MADERA_SLIMRX7_ENA_SHIFT, 0),
101362306a36Sopenharmony_ciSND_SOC_DAPM_AIF_IN("SLIMRX8", NULL, 7, MADERA_SLIMBUS_RX_CHANNEL_ENABLE,
101462306a36Sopenharmony_ci		    MADERA_SLIMRX8_ENA_SHIFT, 0),
101562306a36Sopenharmony_ci
101662306a36Sopenharmony_ciSND_SOC_DAPM_PGA("EQ1", MADERA_EQ1_1, MADERA_EQ1_ENA_SHIFT, 0, NULL, 0),
101762306a36Sopenharmony_ciSND_SOC_DAPM_PGA("EQ2", MADERA_EQ2_1, MADERA_EQ2_ENA_SHIFT, 0, NULL, 0),
101862306a36Sopenharmony_ciSND_SOC_DAPM_PGA("EQ3", MADERA_EQ3_1, MADERA_EQ3_ENA_SHIFT, 0, NULL, 0),
101962306a36Sopenharmony_ciSND_SOC_DAPM_PGA("EQ4", MADERA_EQ4_1, MADERA_EQ4_ENA_SHIFT, 0, NULL, 0),
102062306a36Sopenharmony_ci
102162306a36Sopenharmony_ciSND_SOC_DAPM_PGA("DRC1L", MADERA_DRC1_CTRL1, MADERA_DRC1L_ENA_SHIFT, 0,
102262306a36Sopenharmony_ci		 NULL, 0),
102362306a36Sopenharmony_ciSND_SOC_DAPM_PGA("DRC1R", MADERA_DRC1_CTRL1, MADERA_DRC1R_ENA_SHIFT, 0,
102462306a36Sopenharmony_ci		 NULL, 0),
102562306a36Sopenharmony_ciSND_SOC_DAPM_PGA("DRC2L", MADERA_DRC2_CTRL1, MADERA_DRC2L_ENA_SHIFT, 0,
102662306a36Sopenharmony_ci		 NULL, 0),
102762306a36Sopenharmony_ciSND_SOC_DAPM_PGA("DRC2R", MADERA_DRC2_CTRL1, MADERA_DRC2R_ENA_SHIFT, 0,
102862306a36Sopenharmony_ci		 NULL, 0),
102962306a36Sopenharmony_ci
103062306a36Sopenharmony_ciSND_SOC_DAPM_PGA("LHPF1", MADERA_HPLPF1_1, MADERA_LHPF1_ENA_SHIFT, 0,
103162306a36Sopenharmony_ci		 NULL, 0),
103262306a36Sopenharmony_ciSND_SOC_DAPM_PGA("LHPF2", MADERA_HPLPF2_1, MADERA_LHPF2_ENA_SHIFT, 0,
103362306a36Sopenharmony_ci		 NULL, 0),
103462306a36Sopenharmony_ciSND_SOC_DAPM_PGA("LHPF3", MADERA_HPLPF3_1, MADERA_LHPF3_ENA_SHIFT, 0,
103562306a36Sopenharmony_ci		 NULL, 0),
103662306a36Sopenharmony_ciSND_SOC_DAPM_PGA("LHPF4", MADERA_HPLPF4_1, MADERA_LHPF4_ENA_SHIFT, 0,
103762306a36Sopenharmony_ci		 NULL, 0),
103862306a36Sopenharmony_ci
103962306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ASRC1IN1L", MADERA_ASRC1_ENABLE,
104062306a36Sopenharmony_ci		 MADERA_ASRC1_IN1L_ENA_SHIFT, 0, NULL, 0),
104162306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ASRC1IN1R", MADERA_ASRC1_ENABLE,
104262306a36Sopenharmony_ci		 MADERA_ASRC1_IN1R_ENA_SHIFT, 0, NULL, 0),
104362306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ASRC1IN2L", MADERA_ASRC1_ENABLE,
104462306a36Sopenharmony_ci		 MADERA_ASRC1_IN2L_ENA_SHIFT, 0, NULL, 0),
104562306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ASRC1IN2R", MADERA_ASRC1_ENABLE,
104662306a36Sopenharmony_ci		 MADERA_ASRC1_IN2R_ENA_SHIFT, 0, NULL, 0),
104762306a36Sopenharmony_ci
104862306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC1DEC1", MADERA_ISRC_1_CTRL_3,
104962306a36Sopenharmony_ci		 MADERA_ISRC1_DEC1_ENA_SHIFT, 0, NULL, 0),
105062306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC1DEC2", MADERA_ISRC_1_CTRL_3,
105162306a36Sopenharmony_ci		 MADERA_ISRC1_DEC2_ENA_SHIFT, 0, NULL, 0),
105262306a36Sopenharmony_ci
105362306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC1INT1", MADERA_ISRC_1_CTRL_3,
105462306a36Sopenharmony_ci		 MADERA_ISRC1_INT1_ENA_SHIFT, 0, NULL, 0),
105562306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC1INT2", MADERA_ISRC_1_CTRL_3,
105662306a36Sopenharmony_ci		 MADERA_ISRC1_INT2_ENA_SHIFT, 0, NULL, 0),
105762306a36Sopenharmony_ci
105862306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC2DEC1", MADERA_ISRC_2_CTRL_3,
105962306a36Sopenharmony_ci		 MADERA_ISRC2_DEC1_ENA_SHIFT, 0, NULL, 0),
106062306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC2DEC2", MADERA_ISRC_2_CTRL_3,
106162306a36Sopenharmony_ci		 MADERA_ISRC2_DEC2_ENA_SHIFT, 0, NULL, 0),
106262306a36Sopenharmony_ci
106362306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC2INT1", MADERA_ISRC_2_CTRL_3,
106462306a36Sopenharmony_ci		 MADERA_ISRC2_INT1_ENA_SHIFT, 0, NULL, 0),
106562306a36Sopenharmony_ciSND_SOC_DAPM_PGA("ISRC2INT2", MADERA_ISRC_2_CTRL_3,
106662306a36Sopenharmony_ci		 MADERA_ISRC2_INT2_ENA_SHIFT, 0, NULL, 0),
106762306a36Sopenharmony_ci
106862306a36Sopenharmony_ciWM_ADSP2("DSP1", 0, cs47l92_adsp_power_ev),
106962306a36Sopenharmony_ci
107062306a36Sopenharmony_ci/* end of ordered widget list */
107162306a36Sopenharmony_ci
107262306a36Sopenharmony_ciSND_SOC_DAPM_PGA("DFC1", MADERA_DFC1_CTRL, MADERA_DFC1_ENA_SHIFT, 0, NULL, 0),
107362306a36Sopenharmony_ciSND_SOC_DAPM_PGA("DFC2", MADERA_DFC2_CTRL, MADERA_DFC1_ENA_SHIFT, 0, NULL, 0),
107462306a36Sopenharmony_ciSND_SOC_DAPM_PGA("DFC3", MADERA_DFC3_CTRL, MADERA_DFC1_ENA_SHIFT, 0, NULL, 0),
107562306a36Sopenharmony_ciSND_SOC_DAPM_PGA("DFC4", MADERA_DFC4_CTRL, MADERA_DFC1_ENA_SHIFT, 0, NULL, 0),
107662306a36Sopenharmony_ciSND_SOC_DAPM_PGA("DFC5", MADERA_DFC5_CTRL, MADERA_DFC1_ENA_SHIFT, 0, NULL, 0),
107762306a36Sopenharmony_ciSND_SOC_DAPM_PGA("DFC6", MADERA_DFC6_CTRL, MADERA_DFC1_ENA_SHIFT, 0, NULL, 0),
107862306a36Sopenharmony_ciSND_SOC_DAPM_PGA("DFC7", MADERA_DFC7_CTRL, MADERA_DFC1_ENA_SHIFT, 0, NULL, 0),
107962306a36Sopenharmony_ciSND_SOC_DAPM_PGA("DFC8", MADERA_DFC8_CTRL, MADERA_DFC1_ENA_SHIFT, 0, NULL, 0),
108062306a36Sopenharmony_ci
108162306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(EQ1, "EQ1"),
108262306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(EQ2, "EQ2"),
108362306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(EQ3, "EQ3"),
108462306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(EQ4, "EQ4"),
108562306a36Sopenharmony_ci
108662306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(DRC1L, "DRC1L"),
108762306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(DRC1R, "DRC1R"),
108862306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(DRC2L, "DRC2L"),
108962306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(DRC2R, "DRC2R"),
109062306a36Sopenharmony_ci
109162306a36Sopenharmony_ciSND_SOC_DAPM_SWITCH("DRC1 Activity Output", SND_SOC_NOPM, 0, 0,
109262306a36Sopenharmony_ci		    &madera_drc_activity_output_mux[0]),
109362306a36Sopenharmony_ciSND_SOC_DAPM_SWITCH("DRC2 Activity Output", SND_SOC_NOPM, 0, 0,
109462306a36Sopenharmony_ci		    &madera_drc_activity_output_mux[1]),
109562306a36Sopenharmony_ci
109662306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(LHPF1, "LHPF1"),
109762306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(LHPF2, "LHPF2"),
109862306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(LHPF3, "LHPF3"),
109962306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(LHPF4, "LHPF4"),
110062306a36Sopenharmony_ci
110162306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(PWM1, "PWM1"),
110262306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(PWM2, "PWM2"),
110362306a36Sopenharmony_ci
110462306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(OUT1L, "HPOUT1L"),
110562306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(OUT1R, "HPOUT1R"),
110662306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(OUT2L, "HPOUT2L"),
110762306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(OUT2R, "HPOUT2R"),
110862306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(OUT3L, "HPOUT3L"),
110962306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(OUT3R, "HPOUT3R"),
111062306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(SPKDAT1L, "SPKDAT1L"),
111162306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(SPKDAT1R, "SPKDAT1R"),
111262306a36Sopenharmony_ci
111362306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF1TX1, "AIF1TX1"),
111462306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF1TX2, "AIF1TX2"),
111562306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF1TX3, "AIF1TX3"),
111662306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF1TX4, "AIF1TX4"),
111762306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF1TX5, "AIF1TX5"),
111862306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF1TX6, "AIF1TX6"),
111962306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF1TX7, "AIF1TX7"),
112062306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF1TX8, "AIF1TX8"),
112162306a36Sopenharmony_ci
112262306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF2TX1, "AIF2TX1"),
112362306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF2TX2, "AIF2TX2"),
112462306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF2TX3, "AIF2TX3"),
112562306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF2TX4, "AIF2TX4"),
112662306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF2TX5, "AIF2TX5"),
112762306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF2TX6, "AIF2TX6"),
112862306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF2TX7, "AIF2TX7"),
112962306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF2TX8, "AIF2TX8"),
113062306a36Sopenharmony_ci
113162306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF3TX1, "AIF3TX1"),
113262306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF3TX2, "AIF3TX2"),
113362306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF3TX3, "AIF3TX3"),
113462306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(AIF3TX4, "AIF3TX4"),
113562306a36Sopenharmony_ci
113662306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(SLIMTX1, "SLIMTX1"),
113762306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(SLIMTX2, "SLIMTX2"),
113862306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(SLIMTX3, "SLIMTX3"),
113962306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(SLIMTX4, "SLIMTX4"),
114062306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(SLIMTX5, "SLIMTX5"),
114162306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(SLIMTX6, "SLIMTX6"),
114262306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(SLIMTX7, "SLIMTX7"),
114362306a36Sopenharmony_ciMADERA_MIXER_WIDGETS(SLIMTX8, "SLIMTX8"),
114462306a36Sopenharmony_ci
114562306a36Sopenharmony_ciMADERA_MUX_WIDGETS(SPD1TX1, "SPDIFTX1"),
114662306a36Sopenharmony_ciMADERA_MUX_WIDGETS(SPD1TX2, "SPDIFTX2"),
114762306a36Sopenharmony_ci
114862306a36Sopenharmony_ciMADERA_MUX_WIDGETS(ASRC1IN1L, "ASRC1IN1L"),
114962306a36Sopenharmony_ciMADERA_MUX_WIDGETS(ASRC1IN1R, "ASRC1IN1R"),
115062306a36Sopenharmony_ciMADERA_MUX_WIDGETS(ASRC1IN2L, "ASRC1IN2L"),
115162306a36Sopenharmony_ciMADERA_MUX_WIDGETS(ASRC1IN2R, "ASRC1IN2R"),
115262306a36Sopenharmony_ci
115362306a36Sopenharmony_ciMADERA_DSP_WIDGETS(DSP1, "DSP1"),
115462306a36Sopenharmony_ci
115562306a36Sopenharmony_ciMADERA_MUX_WIDGETS(ISRC1DEC1, "ISRC1DEC1"),
115662306a36Sopenharmony_ciMADERA_MUX_WIDGETS(ISRC1DEC2, "ISRC1DEC2"),
115762306a36Sopenharmony_ci
115862306a36Sopenharmony_ciMADERA_MUX_WIDGETS(ISRC1INT1, "ISRC1INT1"),
115962306a36Sopenharmony_ciMADERA_MUX_WIDGETS(ISRC1INT2, "ISRC1INT2"),
116062306a36Sopenharmony_ci
116162306a36Sopenharmony_ciMADERA_MUX_WIDGETS(ISRC2DEC1, "ISRC2DEC1"),
116262306a36Sopenharmony_ciMADERA_MUX_WIDGETS(ISRC2DEC2, "ISRC2DEC2"),
116362306a36Sopenharmony_ci
116462306a36Sopenharmony_ciMADERA_MUX_WIDGETS(ISRC2INT1, "ISRC2INT1"),
116562306a36Sopenharmony_ciMADERA_MUX_WIDGETS(ISRC2INT2, "ISRC2INT2"),
116662306a36Sopenharmony_ci
116762306a36Sopenharmony_ciMADERA_MUX_WIDGETS(DFC1, "DFC1"),
116862306a36Sopenharmony_ciMADERA_MUX_WIDGETS(DFC2, "DFC2"),
116962306a36Sopenharmony_ciMADERA_MUX_WIDGETS(DFC3, "DFC3"),
117062306a36Sopenharmony_ciMADERA_MUX_WIDGETS(DFC4, "DFC4"),
117162306a36Sopenharmony_ciMADERA_MUX_WIDGETS(DFC5, "DFC5"),
117262306a36Sopenharmony_ciMADERA_MUX_WIDGETS(DFC6, "DFC6"),
117362306a36Sopenharmony_ciMADERA_MUX_WIDGETS(DFC7, "DFC7"),
117462306a36Sopenharmony_ciMADERA_MUX_WIDGETS(DFC8, "DFC8"),
117562306a36Sopenharmony_ci
117662306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("HPOUT1L"),
117762306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("HPOUT1R"),
117862306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("HPOUT2L"),
117962306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("HPOUT2R"),
118062306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("HPOUT3L"),
118162306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("HPOUT3R"),
118262306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("HPOUT4L"),
118362306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("HPOUT4R"),
118462306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("SPKDAT1L"),
118562306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("SPKDAT1R"),
118662306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("SPDIF1"),
118762306a36Sopenharmony_ci
118862306a36Sopenharmony_ciSND_SOC_DAPM_OUTPUT("MICSUPP"),
118962306a36Sopenharmony_ci};
119062306a36Sopenharmony_ci
119162306a36Sopenharmony_ci#define MADERA_MIXER_INPUT_ROUTES(name)	\
119262306a36Sopenharmony_ci	{ name, "Noise Generator", "Noise Generator" }, \
119362306a36Sopenharmony_ci	{ name, "Tone Generator 1", "Tone Generator 1" }, \
119462306a36Sopenharmony_ci	{ name, "Tone Generator 2", "Tone Generator 2" }, \
119562306a36Sopenharmony_ci	{ name, "Haptics", "HAPTICS" }, \
119662306a36Sopenharmony_ci	{ name, "AEC1", "AEC1 Loopback" }, \
119762306a36Sopenharmony_ci	{ name, "IN1L", "IN1L" }, \
119862306a36Sopenharmony_ci	{ name, "IN1R", "IN1R" }, \
119962306a36Sopenharmony_ci	{ name, "IN2L", "IN2L" }, \
120062306a36Sopenharmony_ci	{ name, "IN2R", "IN2R" }, \
120162306a36Sopenharmony_ci	{ name, "IN3L", "IN3L" }, \
120262306a36Sopenharmony_ci	{ name, "IN3R", "IN3R" }, \
120362306a36Sopenharmony_ci	{ name, "IN4L", "IN4L" }, \
120462306a36Sopenharmony_ci	{ name, "IN4R", "IN4R" }, \
120562306a36Sopenharmony_ci	{ name, "AIF1RX1", "AIF1RX1" }, \
120662306a36Sopenharmony_ci	{ name, "AIF1RX2", "AIF1RX2" }, \
120762306a36Sopenharmony_ci	{ name, "AIF1RX3", "AIF1RX3" }, \
120862306a36Sopenharmony_ci	{ name, "AIF1RX4", "AIF1RX4" }, \
120962306a36Sopenharmony_ci	{ name, "AIF1RX5", "AIF1RX5" }, \
121062306a36Sopenharmony_ci	{ name, "AIF1RX6", "AIF1RX6" }, \
121162306a36Sopenharmony_ci	{ name, "AIF1RX7", "AIF1RX7" }, \
121262306a36Sopenharmony_ci	{ name, "AIF1RX8", "AIF1RX8" }, \
121362306a36Sopenharmony_ci	{ name, "AIF2RX1", "AIF2RX1" }, \
121462306a36Sopenharmony_ci	{ name, "AIF2RX2", "AIF2RX2" }, \
121562306a36Sopenharmony_ci	{ name, "AIF2RX3", "AIF2RX3" }, \
121662306a36Sopenharmony_ci	{ name, "AIF2RX4", "AIF2RX4" }, \
121762306a36Sopenharmony_ci	{ name, "AIF2RX5", "AIF2RX5" }, \
121862306a36Sopenharmony_ci	{ name, "AIF2RX6", "AIF2RX6" }, \
121962306a36Sopenharmony_ci	{ name, "AIF2RX7", "AIF2RX7" }, \
122062306a36Sopenharmony_ci	{ name, "AIF2RX8", "AIF2RX8" }, \
122162306a36Sopenharmony_ci	{ name, "AIF3RX1", "AIF3RX1" }, \
122262306a36Sopenharmony_ci	{ name, "AIF3RX2", "AIF3RX2" }, \
122362306a36Sopenharmony_ci	{ name, "AIF3RX3", "AIF3RX3" }, \
122462306a36Sopenharmony_ci	{ name, "AIF3RX4", "AIF3RX4" }, \
122562306a36Sopenharmony_ci	{ name, "SLIMRX1", "SLIMRX1" }, \
122662306a36Sopenharmony_ci	{ name, "SLIMRX2", "SLIMRX2" }, \
122762306a36Sopenharmony_ci	{ name, "SLIMRX3", "SLIMRX3" }, \
122862306a36Sopenharmony_ci	{ name, "SLIMRX4", "SLIMRX4" }, \
122962306a36Sopenharmony_ci	{ name, "SLIMRX5", "SLIMRX5" }, \
123062306a36Sopenharmony_ci	{ name, "SLIMRX6", "SLIMRX6" }, \
123162306a36Sopenharmony_ci	{ name, "SLIMRX7", "SLIMRX7" }, \
123262306a36Sopenharmony_ci	{ name, "SLIMRX8", "SLIMRX8" }, \
123362306a36Sopenharmony_ci	{ name, "EQ1", "EQ1" }, \
123462306a36Sopenharmony_ci	{ name, "EQ2", "EQ2" }, \
123562306a36Sopenharmony_ci	{ name, "EQ3", "EQ3" }, \
123662306a36Sopenharmony_ci	{ name, "EQ4", "EQ4" }, \
123762306a36Sopenharmony_ci	{ name, "DRC1L", "DRC1L" }, \
123862306a36Sopenharmony_ci	{ name, "DRC1R", "DRC1R" }, \
123962306a36Sopenharmony_ci	{ name, "DRC2L", "DRC2L" }, \
124062306a36Sopenharmony_ci	{ name, "DRC2R", "DRC2R" }, \
124162306a36Sopenharmony_ci	{ name, "LHPF1", "LHPF1" }, \
124262306a36Sopenharmony_ci	{ name, "LHPF2", "LHPF2" }, \
124362306a36Sopenharmony_ci	{ name, "LHPF3", "LHPF3" }, \
124462306a36Sopenharmony_ci	{ name, "LHPF4", "LHPF4" }, \
124562306a36Sopenharmony_ci	{ name, "ASRC1IN1L", "ASRC1IN1L" }, \
124662306a36Sopenharmony_ci	{ name, "ASRC1IN1R", "ASRC1IN1R" }, \
124762306a36Sopenharmony_ci	{ name, "ASRC1IN2L", "ASRC1IN2L" }, \
124862306a36Sopenharmony_ci	{ name, "ASRC1IN2R", "ASRC1IN2R" }, \
124962306a36Sopenharmony_ci	{ name, "ISRC1DEC1", "ISRC1DEC1" }, \
125062306a36Sopenharmony_ci	{ name, "ISRC1DEC2", "ISRC1DEC2" }, \
125162306a36Sopenharmony_ci	{ name, "ISRC1INT1", "ISRC1INT1" }, \
125262306a36Sopenharmony_ci	{ name, "ISRC1INT2", "ISRC1INT2" }, \
125362306a36Sopenharmony_ci	{ name, "ISRC2DEC1", "ISRC2DEC1" }, \
125462306a36Sopenharmony_ci	{ name, "ISRC2DEC2", "ISRC2DEC2" }, \
125562306a36Sopenharmony_ci	{ name, "ISRC2INT1", "ISRC2INT1" }, \
125662306a36Sopenharmony_ci	{ name, "ISRC2INT2", "ISRC2INT2" }, \
125762306a36Sopenharmony_ci	{ name, "DSP1.1", "DSP1" }, \
125862306a36Sopenharmony_ci	{ name, "DSP1.2", "DSP1" }, \
125962306a36Sopenharmony_ci	{ name, "DSP1.3", "DSP1" }, \
126062306a36Sopenharmony_ci	{ name, "DSP1.4", "DSP1" }, \
126162306a36Sopenharmony_ci	{ name, "DSP1.5", "DSP1" }, \
126262306a36Sopenharmony_ci	{ name, "DSP1.6", "DSP1" }, \
126362306a36Sopenharmony_ci	{ name, "DFC1", "DFC1" }, \
126462306a36Sopenharmony_ci	{ name, "DFC2", "DFC2" }, \
126562306a36Sopenharmony_ci	{ name, "DFC3", "DFC3" }, \
126662306a36Sopenharmony_ci	{ name, "DFC4", "DFC4" }, \
126762306a36Sopenharmony_ci	{ name, "DFC5", "DFC5" }, \
126862306a36Sopenharmony_ci	{ name, "DFC6", "DFC6" }, \
126962306a36Sopenharmony_ci	{ name, "DFC7", "DFC7" }, \
127062306a36Sopenharmony_ci	{ name, "DFC8", "DFC8" }
127162306a36Sopenharmony_ci
127262306a36Sopenharmony_cistatic const struct snd_soc_dapm_route cs47l92_dapm_routes[] = {
127362306a36Sopenharmony_ci	/* Internal clock domains */
127462306a36Sopenharmony_ci	{ "EQ1", NULL, "FXCLK" },
127562306a36Sopenharmony_ci	{ "EQ2", NULL, "FXCLK" },
127662306a36Sopenharmony_ci	{ "EQ3", NULL, "FXCLK" },
127762306a36Sopenharmony_ci	{ "EQ4", NULL, "FXCLK" },
127862306a36Sopenharmony_ci	{ "DRC1L", NULL, "FXCLK" },
127962306a36Sopenharmony_ci	{ "DRC1R", NULL, "FXCLK" },
128062306a36Sopenharmony_ci	{ "DRC2L", NULL, "FXCLK" },
128162306a36Sopenharmony_ci	{ "DRC2R", NULL, "FXCLK" },
128262306a36Sopenharmony_ci	{ "LHPF1", NULL, "FXCLK" },
128362306a36Sopenharmony_ci	{ "LHPF2", NULL, "FXCLK" },
128462306a36Sopenharmony_ci	{ "LHPF3", NULL, "FXCLK" },
128562306a36Sopenharmony_ci	{ "LHPF4", NULL, "FXCLK" },
128662306a36Sopenharmony_ci	{ "PWM1 Mixer", NULL, "PWMCLK" },
128762306a36Sopenharmony_ci	{ "PWM2 Mixer", NULL, "PWMCLK" },
128862306a36Sopenharmony_ci	{ "OUT1L", NULL, "OUTCLK" },
128962306a36Sopenharmony_ci	{ "OUT1R", NULL, "OUTCLK" },
129062306a36Sopenharmony_ci	{ "OUT2L", NULL, "OUTCLK" },
129162306a36Sopenharmony_ci	{ "OUT2R", NULL, "OUTCLK" },
129262306a36Sopenharmony_ci	{ "OUT3L", NULL, "OUTCLK" },
129362306a36Sopenharmony_ci	{ "OUT3R", NULL, "OUTCLK" },
129462306a36Sopenharmony_ci	{ "OUT5L", NULL, "OUTCLK" },
129562306a36Sopenharmony_ci	{ "OUT5R", NULL, "OUTCLK" },
129662306a36Sopenharmony_ci	{ "AIF1TX1", NULL, "AIF1TXCLK" },
129762306a36Sopenharmony_ci	{ "AIF1TX2", NULL, "AIF1TXCLK" },
129862306a36Sopenharmony_ci	{ "AIF1TX3", NULL, "AIF1TXCLK" },
129962306a36Sopenharmony_ci	{ "AIF1TX4", NULL, "AIF1TXCLK" },
130062306a36Sopenharmony_ci	{ "AIF1TX5", NULL, "AIF1TXCLK" },
130162306a36Sopenharmony_ci	{ "AIF1TX6", NULL, "AIF1TXCLK" },
130262306a36Sopenharmony_ci	{ "AIF1TX7", NULL, "AIF1TXCLK" },
130362306a36Sopenharmony_ci	{ "AIF1TX8", NULL, "AIF1TXCLK" },
130462306a36Sopenharmony_ci	{ "AIF2TX1", NULL, "AIF2TXCLK" },
130562306a36Sopenharmony_ci	{ "AIF2TX2", NULL, "AIF2TXCLK" },
130662306a36Sopenharmony_ci	{ "AIF2TX3", NULL, "AIF2TXCLK" },
130762306a36Sopenharmony_ci	{ "AIF2TX4", NULL, "AIF2TXCLK" },
130862306a36Sopenharmony_ci	{ "AIF2TX5", NULL, "AIF2TXCLK" },
130962306a36Sopenharmony_ci	{ "AIF2TX6", NULL, "AIF2TXCLK" },
131062306a36Sopenharmony_ci	{ "AIF2TX7", NULL, "AIF2TXCLK" },
131162306a36Sopenharmony_ci	{ "AIF2TX8", NULL, "AIF2TXCLK" },
131262306a36Sopenharmony_ci	{ "AIF3TX1", NULL, "AIF3TXCLK" },
131362306a36Sopenharmony_ci	{ "AIF3TX2", NULL, "AIF3TXCLK" },
131462306a36Sopenharmony_ci	{ "AIF3TX3", NULL, "AIF3TXCLK" },
131562306a36Sopenharmony_ci	{ "AIF3TX4", NULL, "AIF3TXCLK" },
131662306a36Sopenharmony_ci	{ "SLIMTX1", NULL, "SLIMBUSCLK" },
131762306a36Sopenharmony_ci	{ "SLIMTX2", NULL, "SLIMBUSCLK" },
131862306a36Sopenharmony_ci	{ "SLIMTX3", NULL, "SLIMBUSCLK" },
131962306a36Sopenharmony_ci	{ "SLIMTX4", NULL, "SLIMBUSCLK" },
132062306a36Sopenharmony_ci	{ "SLIMTX5", NULL, "SLIMBUSCLK" },
132162306a36Sopenharmony_ci	{ "SLIMTX6", NULL, "SLIMBUSCLK" },
132262306a36Sopenharmony_ci	{ "SLIMTX7", NULL, "SLIMBUSCLK" },
132362306a36Sopenharmony_ci	{ "SLIMTX8", NULL, "SLIMBUSCLK" },
132462306a36Sopenharmony_ci	{ "SPD1TX1", NULL, "SPDCLK" },
132562306a36Sopenharmony_ci	{ "SPD1TX2", NULL, "SPDCLK" },
132662306a36Sopenharmony_ci	{ "DSP1", NULL, "DSP1CLK" },
132762306a36Sopenharmony_ci	{ "ISRC1DEC1", NULL, "ISRC1CLK" },
132862306a36Sopenharmony_ci	{ "ISRC1DEC2", NULL, "ISRC1CLK" },
132962306a36Sopenharmony_ci	{ "ISRC1INT1", NULL, "ISRC1CLK" },
133062306a36Sopenharmony_ci	{ "ISRC1INT2", NULL, "ISRC1CLK" },
133162306a36Sopenharmony_ci	{ "ISRC2DEC1", NULL, "ISRC2CLK" },
133262306a36Sopenharmony_ci	{ "ISRC2DEC2", NULL, "ISRC2CLK" },
133362306a36Sopenharmony_ci	{ "ISRC2INT1", NULL, "ISRC2CLK" },
133462306a36Sopenharmony_ci	{ "ISRC2INT2", NULL, "ISRC2CLK" },
133562306a36Sopenharmony_ci	{ "ASRC1IN1L", NULL, "ASRC1CLK" },
133662306a36Sopenharmony_ci	{ "ASRC1IN1R", NULL, "ASRC1CLK" },
133762306a36Sopenharmony_ci	{ "ASRC1IN2L", NULL, "ASRC1CLK" },
133862306a36Sopenharmony_ci	{ "ASRC1IN2R", NULL, "ASRC1CLK" },
133962306a36Sopenharmony_ci	{ "DFC1", NULL, "DFCCLK" },
134062306a36Sopenharmony_ci	{ "DFC2", NULL, "DFCCLK" },
134162306a36Sopenharmony_ci	{ "DFC3", NULL, "DFCCLK" },
134262306a36Sopenharmony_ci	{ "DFC4", NULL, "DFCCLK" },
134362306a36Sopenharmony_ci	{ "DFC5", NULL, "DFCCLK" },
134462306a36Sopenharmony_ci	{ "DFC6", NULL, "DFCCLK" },
134562306a36Sopenharmony_ci	{ "DFC7", NULL, "DFCCLK" },
134662306a36Sopenharmony_ci	{ "DFC8", NULL, "DFCCLK" },
134762306a36Sopenharmony_ci
134862306a36Sopenharmony_ci	{ "OUT1L", NULL, "CPVDD1" },
134962306a36Sopenharmony_ci	{ "OUT1L", NULL, "CPVDD2" },
135062306a36Sopenharmony_ci	{ "OUT1R", NULL, "CPVDD1" },
135162306a36Sopenharmony_ci	{ "OUT1R", NULL, "CPVDD2" },
135262306a36Sopenharmony_ci	{ "OUT2L", NULL, "CPVDD1" },
135362306a36Sopenharmony_ci	{ "OUT2L", NULL, "CPVDD2" },
135462306a36Sopenharmony_ci	{ "OUT2R", NULL, "CPVDD1" },
135562306a36Sopenharmony_ci	{ "OUT2R", NULL, "CPVDD2" },
135662306a36Sopenharmony_ci	{ "OUT3L", NULL, "CPVDD1" },
135762306a36Sopenharmony_ci	{ "OUT3L", NULL, "CPVDD2" },
135862306a36Sopenharmony_ci	{ "OUT3R", NULL, "CPVDD1" },
135962306a36Sopenharmony_ci	{ "OUT3R", NULL, "CPVDD2" },
136062306a36Sopenharmony_ci
136162306a36Sopenharmony_ci	{ "OUT1L", NULL, "SYSCLK" },
136262306a36Sopenharmony_ci	{ "OUT1R", NULL, "SYSCLK" },
136362306a36Sopenharmony_ci	{ "OUT2L", NULL, "SYSCLK" },
136462306a36Sopenharmony_ci	{ "OUT2R", NULL, "SYSCLK" },
136562306a36Sopenharmony_ci	{ "OUT3L", NULL, "SYSCLK" },
136662306a36Sopenharmony_ci	{ "OUT3R", NULL, "SYSCLK" },
136762306a36Sopenharmony_ci	{ "OUT5L", NULL, "SYSCLK" },
136862306a36Sopenharmony_ci	{ "OUT5R", NULL, "SYSCLK" },
136962306a36Sopenharmony_ci
137062306a36Sopenharmony_ci	{ "SPD1", NULL, "SYSCLK" },
137162306a36Sopenharmony_ci	{ "SPD1", NULL, "SPD1TX1" },
137262306a36Sopenharmony_ci	{ "SPD1", NULL, "SPD1TX2" },
137362306a36Sopenharmony_ci
137462306a36Sopenharmony_ci	{ "IN1L", NULL, "SYSCLK" },
137562306a36Sopenharmony_ci	{ "IN1R", NULL, "SYSCLK" },
137662306a36Sopenharmony_ci	{ "IN2L", NULL, "SYSCLK" },
137762306a36Sopenharmony_ci	{ "IN2R", NULL, "SYSCLK" },
137862306a36Sopenharmony_ci	{ "IN3L", NULL, "SYSCLK" },
137962306a36Sopenharmony_ci	{ "IN3R", NULL, "SYSCLK" },
138062306a36Sopenharmony_ci	{ "IN4L", NULL, "SYSCLK" },
138162306a36Sopenharmony_ci	{ "IN4R", NULL, "SYSCLK" },
138262306a36Sopenharmony_ci
138362306a36Sopenharmony_ci	{ "ASRC1IN1L", NULL, "SYSCLK" },
138462306a36Sopenharmony_ci	{ "ASRC1IN1R", NULL, "SYSCLK" },
138562306a36Sopenharmony_ci	{ "ASRC1IN2L", NULL, "SYSCLK" },
138662306a36Sopenharmony_ci	{ "ASRC1IN2R", NULL, "SYSCLK" },
138762306a36Sopenharmony_ci
138862306a36Sopenharmony_ci	{ "ASRC1IN1L", NULL, "ASYNCCLK" },
138962306a36Sopenharmony_ci	{ "ASRC1IN1R", NULL, "ASYNCCLK" },
139062306a36Sopenharmony_ci	{ "ASRC1IN2L", NULL, "ASYNCCLK" },
139162306a36Sopenharmony_ci	{ "ASRC1IN2R", NULL, "ASYNCCLK" },
139262306a36Sopenharmony_ci
139362306a36Sopenharmony_ci	{ "MICBIAS1", NULL, "MICVDD" },
139462306a36Sopenharmony_ci	{ "MICBIAS2", NULL, "MICVDD" },
139562306a36Sopenharmony_ci
139662306a36Sopenharmony_ci	{ "MICBIAS1A", NULL, "MICBIAS1" },
139762306a36Sopenharmony_ci	{ "MICBIAS1B", NULL, "MICBIAS1" },
139862306a36Sopenharmony_ci	{ "MICBIAS1C", NULL, "MICBIAS1" },
139962306a36Sopenharmony_ci	{ "MICBIAS1D", NULL, "MICBIAS1" },
140062306a36Sopenharmony_ci
140162306a36Sopenharmony_ci	{ "MICBIAS2A", NULL, "MICBIAS2" },
140262306a36Sopenharmony_ci	{ "MICBIAS2B", NULL, "MICBIAS2" },
140362306a36Sopenharmony_ci
140462306a36Sopenharmony_ci	{ "Noise Generator", NULL, "SYSCLK" },
140562306a36Sopenharmony_ci	{ "Tone Generator 1", NULL, "SYSCLK" },
140662306a36Sopenharmony_ci	{ "Tone Generator 2", NULL, "SYSCLK" },
140762306a36Sopenharmony_ci
140862306a36Sopenharmony_ci	{ "Noise Generator", NULL, "NOISE" },
140962306a36Sopenharmony_ci	{ "Tone Generator 1", NULL, "TONE" },
141062306a36Sopenharmony_ci	{ "Tone Generator 2", NULL, "TONE" },
141162306a36Sopenharmony_ci
141262306a36Sopenharmony_ci	{ "AIF1 Capture", NULL, "AIF1TX1" },
141362306a36Sopenharmony_ci	{ "AIF1 Capture", NULL, "AIF1TX2" },
141462306a36Sopenharmony_ci	{ "AIF1 Capture", NULL, "AIF1TX3" },
141562306a36Sopenharmony_ci	{ "AIF1 Capture", NULL, "AIF1TX4" },
141662306a36Sopenharmony_ci	{ "AIF1 Capture", NULL, "AIF1TX5" },
141762306a36Sopenharmony_ci	{ "AIF1 Capture", NULL, "AIF1TX6" },
141862306a36Sopenharmony_ci	{ "AIF1 Capture", NULL, "AIF1TX7" },
141962306a36Sopenharmony_ci	{ "AIF1 Capture", NULL, "AIF1TX8" },
142062306a36Sopenharmony_ci
142162306a36Sopenharmony_ci	{ "AIF1RX1", NULL, "AIF1 Playback" },
142262306a36Sopenharmony_ci	{ "AIF1RX2", NULL, "AIF1 Playback" },
142362306a36Sopenharmony_ci	{ "AIF1RX3", NULL, "AIF1 Playback" },
142462306a36Sopenharmony_ci	{ "AIF1RX4", NULL, "AIF1 Playback" },
142562306a36Sopenharmony_ci	{ "AIF1RX5", NULL, "AIF1 Playback" },
142662306a36Sopenharmony_ci	{ "AIF1RX6", NULL, "AIF1 Playback" },
142762306a36Sopenharmony_ci	{ "AIF1RX7", NULL, "AIF1 Playback" },
142862306a36Sopenharmony_ci	{ "AIF1RX8", NULL, "AIF1 Playback" },
142962306a36Sopenharmony_ci
143062306a36Sopenharmony_ci	{ "AIF2 Capture", NULL, "AIF2TX1" },
143162306a36Sopenharmony_ci	{ "AIF2 Capture", NULL, "AIF2TX2" },
143262306a36Sopenharmony_ci	{ "AIF2 Capture", NULL, "AIF2TX3" },
143362306a36Sopenharmony_ci	{ "AIF2 Capture", NULL, "AIF2TX4" },
143462306a36Sopenharmony_ci	{ "AIF2 Capture", NULL, "AIF2TX5" },
143562306a36Sopenharmony_ci	{ "AIF2 Capture", NULL, "AIF2TX6" },
143662306a36Sopenharmony_ci	{ "AIF2 Capture", NULL, "AIF2TX7" },
143762306a36Sopenharmony_ci	{ "AIF2 Capture", NULL, "AIF2TX8" },
143862306a36Sopenharmony_ci
143962306a36Sopenharmony_ci	{ "AIF2RX1", NULL, "AIF2 Playback" },
144062306a36Sopenharmony_ci	{ "AIF2RX2", NULL, "AIF2 Playback" },
144162306a36Sopenharmony_ci	{ "AIF2RX3", NULL, "AIF2 Playback" },
144262306a36Sopenharmony_ci	{ "AIF2RX4", NULL, "AIF2 Playback" },
144362306a36Sopenharmony_ci	{ "AIF2RX5", NULL, "AIF2 Playback" },
144462306a36Sopenharmony_ci	{ "AIF2RX6", NULL, "AIF2 Playback" },
144562306a36Sopenharmony_ci	{ "AIF2RX7", NULL, "AIF2 Playback" },
144662306a36Sopenharmony_ci	{ "AIF2RX8", NULL, "AIF2 Playback" },
144762306a36Sopenharmony_ci
144862306a36Sopenharmony_ci	{ "AIF3 Capture", NULL, "AIF3TX1" },
144962306a36Sopenharmony_ci	{ "AIF3 Capture", NULL, "AIF3TX2" },
145062306a36Sopenharmony_ci	{ "AIF3 Capture", NULL, "AIF3TX3" },
145162306a36Sopenharmony_ci	{ "AIF3 Capture", NULL, "AIF3TX4" },
145262306a36Sopenharmony_ci
145362306a36Sopenharmony_ci	{ "AIF3RX1", NULL, "AIF3 Playback" },
145462306a36Sopenharmony_ci	{ "AIF3RX2", NULL, "AIF3 Playback" },
145562306a36Sopenharmony_ci	{ "AIF3RX3", NULL, "AIF3 Playback" },
145662306a36Sopenharmony_ci	{ "AIF3RX4", NULL, "AIF3 Playback" },
145762306a36Sopenharmony_ci
145862306a36Sopenharmony_ci	{ "Slim1 Capture", NULL, "SLIMTX1" },
145962306a36Sopenharmony_ci	{ "Slim1 Capture", NULL, "SLIMTX2" },
146062306a36Sopenharmony_ci	{ "Slim1 Capture", NULL, "SLIMTX3" },
146162306a36Sopenharmony_ci	{ "Slim1 Capture", NULL, "SLIMTX4" },
146262306a36Sopenharmony_ci
146362306a36Sopenharmony_ci	{ "SLIMRX1", NULL, "Slim1 Playback" },
146462306a36Sopenharmony_ci	{ "SLIMRX2", NULL, "Slim1 Playback" },
146562306a36Sopenharmony_ci	{ "SLIMRX3", NULL, "Slim1 Playback" },
146662306a36Sopenharmony_ci	{ "SLIMRX4", NULL, "Slim1 Playback" },
146762306a36Sopenharmony_ci
146862306a36Sopenharmony_ci	{ "Slim2 Capture", NULL, "SLIMTX5" },
146962306a36Sopenharmony_ci	{ "Slim2 Capture", NULL, "SLIMTX6" },
147062306a36Sopenharmony_ci
147162306a36Sopenharmony_ci	{ "SLIMRX5", NULL, "Slim2 Playback" },
147262306a36Sopenharmony_ci	{ "SLIMRX6", NULL, "Slim2 Playback" },
147362306a36Sopenharmony_ci
147462306a36Sopenharmony_ci	{ "Slim3 Capture", NULL, "SLIMTX7" },
147562306a36Sopenharmony_ci	{ "Slim3 Capture", NULL, "SLIMTX8" },
147662306a36Sopenharmony_ci
147762306a36Sopenharmony_ci	{ "SLIMRX7", NULL, "Slim3 Playback" },
147862306a36Sopenharmony_ci	{ "SLIMRX8", NULL, "Slim3 Playback" },
147962306a36Sopenharmony_ci
148062306a36Sopenharmony_ci	{ "AIF1 Playback", NULL, "SYSCLK" },
148162306a36Sopenharmony_ci	{ "AIF2 Playback", NULL, "SYSCLK" },
148262306a36Sopenharmony_ci	{ "AIF3 Playback", NULL, "SYSCLK" },
148362306a36Sopenharmony_ci	{ "Slim1 Playback", NULL, "SYSCLK" },
148462306a36Sopenharmony_ci	{ "Slim2 Playback", NULL, "SYSCLK" },
148562306a36Sopenharmony_ci	{ "Slim3 Playback", NULL, "SYSCLK" },
148662306a36Sopenharmony_ci
148762306a36Sopenharmony_ci	{ "AIF1 Capture", NULL, "SYSCLK" },
148862306a36Sopenharmony_ci	{ "AIF2 Capture", NULL, "SYSCLK" },
148962306a36Sopenharmony_ci	{ "AIF3 Capture", NULL, "SYSCLK" },
149062306a36Sopenharmony_ci	{ "Slim1 Capture", NULL, "SYSCLK" },
149162306a36Sopenharmony_ci	{ "Slim2 Capture", NULL, "SYSCLK" },
149262306a36Sopenharmony_ci	{ "Slim3 Capture", NULL, "SYSCLK" },
149362306a36Sopenharmony_ci
149462306a36Sopenharmony_ci	{ "Audio Trace DSP", NULL, "DSP1" },
149562306a36Sopenharmony_ci
149662306a36Sopenharmony_ci	{ "IN1L Analog Mux", "A", "IN1ALN" },
149762306a36Sopenharmony_ci	{ "IN1L Analog Mux", "A", "IN1ALP" },
149862306a36Sopenharmony_ci	{ "IN1L Analog Mux", "B", "IN1BLN" },
149962306a36Sopenharmony_ci	{ "IN1L Analog Mux", "B", "IN1BLP" },
150062306a36Sopenharmony_ci	{ "IN1R Analog Mux", "A", "IN1ARN" },
150162306a36Sopenharmony_ci	{ "IN1R Analog Mux", "A", "IN1ARP" },
150262306a36Sopenharmony_ci	{ "IN1R Analog Mux", "B", "IN1BR" },
150362306a36Sopenharmony_ci	{ "IN1R Analog Mux", "B", "IN1ALN" },
150462306a36Sopenharmony_ci
150562306a36Sopenharmony_ci	{ "IN1L Mode", "Analog", "IN1L Analog Mux" },
150662306a36Sopenharmony_ci	{ "IN1R Mode", "Analog", "IN1R Analog Mux" },
150762306a36Sopenharmony_ci
150862306a36Sopenharmony_ci	{ "IN1L Mode", "Digital", "IN1ALN" },
150962306a36Sopenharmony_ci	{ "IN1L Mode", "Digital", "IN1ALP" },
151062306a36Sopenharmony_ci	{ "IN1R Mode", "Digital", "IN1ALN" },
151162306a36Sopenharmony_ci	{ "IN1R Mode", "Digital", "IN1ALP" },
151262306a36Sopenharmony_ci
151362306a36Sopenharmony_ci	{ "IN1L", NULL, "IN1L Mode" },
151462306a36Sopenharmony_ci	{ "IN1R", NULL, "IN1R Mode" },
151562306a36Sopenharmony_ci
151662306a36Sopenharmony_ci	{ "IN2L Analog Mux", "A", "IN2ALN" },
151762306a36Sopenharmony_ci	{ "IN2L Analog Mux", "A", "IN2ALP" },
151862306a36Sopenharmony_ci	{ "IN2L Analog Mux", "B", "IN2ALN" },
151962306a36Sopenharmony_ci	{ "IN2L Analog Mux", "B", "IN2BL" },
152062306a36Sopenharmony_ci	{ "IN2R Analog Mux", "A", "IN2ARN" },
152162306a36Sopenharmony_ci	{ "IN2R Analog Mux", "A", "IN2ARP" },
152262306a36Sopenharmony_ci	{ "IN2R Analog Mux", "B", "IN2ARN" },
152362306a36Sopenharmony_ci	{ "IN2R Analog Mux", "B", "IN2BR" },
152462306a36Sopenharmony_ci
152562306a36Sopenharmony_ci	{ "IN2L Mode", "Analog", "IN2L Analog Mux" },
152662306a36Sopenharmony_ci	{ "IN2R Mode", "Analog", "IN2R Analog Mux" },
152762306a36Sopenharmony_ci
152862306a36Sopenharmony_ci	{ "IN2L Mode", "Digital", "IN2ALN" },
152962306a36Sopenharmony_ci	{ "IN2L Mode", "Digital", "IN2ALP" },
153062306a36Sopenharmony_ci	{ "IN2R Mode", "Digital", "IN2ALN" },
153162306a36Sopenharmony_ci	{ "IN2R Mode", "Digital", "IN2ALP" },
153262306a36Sopenharmony_ci
153362306a36Sopenharmony_ci	{ "IN2L", NULL, "IN2L Mode" },
153462306a36Sopenharmony_ci	{ "IN2R", NULL, "IN2R Mode" },
153562306a36Sopenharmony_ci
153662306a36Sopenharmony_ci	{ "IN3L", NULL, "IN1ARN" },
153762306a36Sopenharmony_ci	{ "IN3L", NULL, "IN1ARP" },
153862306a36Sopenharmony_ci	{ "IN3R", NULL, "IN1ARN" },
153962306a36Sopenharmony_ci	{ "IN3R", NULL, "IN1ARP" },
154062306a36Sopenharmony_ci
154162306a36Sopenharmony_ci	{ "IN4L", NULL, "IN2ARN" },
154262306a36Sopenharmony_ci	{ "IN4L", NULL, "IN2ARP" },
154362306a36Sopenharmony_ci	{ "IN4R", NULL, "IN2ARN" },
154462306a36Sopenharmony_ci	{ "IN4R", NULL, "IN2ARP" },
154562306a36Sopenharmony_ci
154662306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("OUT1L", "HPOUT1L"),
154762306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("OUT1R", "HPOUT1R"),
154862306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("OUT2L", "HPOUT2L"),
154962306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("OUT2R", "HPOUT2R"),
155062306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("OUT3L", "HPOUT3L"),
155162306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("OUT3R", "HPOUT3R"),
155262306a36Sopenharmony_ci
155362306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("OUT5L", "SPKDAT1L"),
155462306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("OUT5R", "SPKDAT1R"),
155562306a36Sopenharmony_ci
155662306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("PWM1 Driver", "PWM1"),
155762306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("PWM2 Driver", "PWM2"),
155862306a36Sopenharmony_ci
155962306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF1TX1", "AIF1TX1"),
156062306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF1TX2", "AIF1TX2"),
156162306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF1TX3", "AIF1TX3"),
156262306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF1TX4", "AIF1TX4"),
156362306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF1TX5", "AIF1TX5"),
156462306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF1TX6", "AIF1TX6"),
156562306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF1TX7", "AIF1TX7"),
156662306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF1TX8", "AIF1TX8"),
156762306a36Sopenharmony_ci
156862306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF2TX1", "AIF2TX1"),
156962306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF2TX2", "AIF2TX2"),
157062306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF2TX3", "AIF2TX3"),
157162306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF2TX4", "AIF2TX4"),
157262306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF2TX5", "AIF2TX5"),
157362306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF2TX6", "AIF2TX6"),
157462306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF2TX7", "AIF2TX7"),
157562306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF2TX8", "AIF2TX8"),
157662306a36Sopenharmony_ci
157762306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF3TX1", "AIF3TX1"),
157862306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF3TX2", "AIF3TX2"),
157962306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF3TX3", "AIF3TX3"),
158062306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("AIF3TX4", "AIF3TX4"),
158162306a36Sopenharmony_ci
158262306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("SLIMTX1", "SLIMTX1"),
158362306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("SLIMTX2", "SLIMTX2"),
158462306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("SLIMTX3", "SLIMTX3"),
158562306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("SLIMTX4", "SLIMTX4"),
158662306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("SLIMTX5", "SLIMTX5"),
158762306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("SLIMTX6", "SLIMTX6"),
158862306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("SLIMTX7", "SLIMTX7"),
158962306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("SLIMTX8", "SLIMTX8"),
159062306a36Sopenharmony_ci
159162306a36Sopenharmony_ci	MADERA_MUX_ROUTES("SPD1TX1", "SPDIFTX1"),
159262306a36Sopenharmony_ci	MADERA_MUX_ROUTES("SPD1TX2", "SPDIFTX2"),
159362306a36Sopenharmony_ci
159462306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("EQ1", "EQ1"),
159562306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("EQ2", "EQ2"),
159662306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("EQ3", "EQ3"),
159762306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("EQ4", "EQ4"),
159862306a36Sopenharmony_ci
159962306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("DRC1L", "DRC1L"),
160062306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("DRC1R", "DRC1R"),
160162306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("DRC2L", "DRC2L"),
160262306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("DRC2R", "DRC2R"),
160362306a36Sopenharmony_ci
160462306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("LHPF1", "LHPF1"),
160562306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("LHPF2", "LHPF2"),
160662306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("LHPF3", "LHPF3"),
160762306a36Sopenharmony_ci	MADERA_MIXER_ROUTES("LHPF4", "LHPF4"),
160862306a36Sopenharmony_ci
160962306a36Sopenharmony_ci	MADERA_MUX_ROUTES("ASRC1IN1L", "ASRC1IN1L"),
161062306a36Sopenharmony_ci	MADERA_MUX_ROUTES("ASRC1IN1R", "ASRC1IN1R"),
161162306a36Sopenharmony_ci	MADERA_MUX_ROUTES("ASRC1IN2L", "ASRC1IN2L"),
161262306a36Sopenharmony_ci	MADERA_MUX_ROUTES("ASRC1IN2R", "ASRC1IN2R"),
161362306a36Sopenharmony_ci
161462306a36Sopenharmony_ci	MADERA_DSP_ROUTES("DSP1"),
161562306a36Sopenharmony_ci
161662306a36Sopenharmony_ci	MADERA_MUX_ROUTES("ISRC1INT1", "ISRC1INT1"),
161762306a36Sopenharmony_ci	MADERA_MUX_ROUTES("ISRC1INT2", "ISRC1INT2"),
161862306a36Sopenharmony_ci
161962306a36Sopenharmony_ci	MADERA_MUX_ROUTES("ISRC1DEC1", "ISRC1DEC1"),
162062306a36Sopenharmony_ci	MADERA_MUX_ROUTES("ISRC1DEC2", "ISRC1DEC2"),
162162306a36Sopenharmony_ci
162262306a36Sopenharmony_ci	MADERA_MUX_ROUTES("ISRC2INT1", "ISRC2INT1"),
162362306a36Sopenharmony_ci	MADERA_MUX_ROUTES("ISRC2INT2", "ISRC2INT2"),
162462306a36Sopenharmony_ci
162562306a36Sopenharmony_ci	MADERA_MUX_ROUTES("ISRC2DEC1", "ISRC2DEC1"),
162662306a36Sopenharmony_ci	MADERA_MUX_ROUTES("ISRC2DEC2", "ISRC2DEC2"),
162762306a36Sopenharmony_ci
162862306a36Sopenharmony_ci	{ "AEC1 Loopback", "HPOUT1L", "OUT1L" },
162962306a36Sopenharmony_ci	{ "AEC1 Loopback", "HPOUT1R", "OUT1R" },
163062306a36Sopenharmony_ci	{ "HPOUT1L", NULL, "OUT1L" },
163162306a36Sopenharmony_ci	{ "HPOUT1R", NULL, "OUT1R" },
163262306a36Sopenharmony_ci
163362306a36Sopenharmony_ci	{ "AEC1 Loopback", "HPOUT2L", "OUT2L" },
163462306a36Sopenharmony_ci	{ "AEC1 Loopback", "HPOUT2R", "OUT2R" },
163562306a36Sopenharmony_ci	{ "HPOUT2L", NULL, "OUT2L" },
163662306a36Sopenharmony_ci	{ "HPOUT2R", NULL, "OUT2R" },
163762306a36Sopenharmony_ci
163862306a36Sopenharmony_ci	{ "AEC1 Loopback", "HPOUT3L", "OUT3L" },
163962306a36Sopenharmony_ci	{ "AEC1 Loopback", "HPOUT3R", "OUT3R" },
164062306a36Sopenharmony_ci	{ "OUT3 Demux", NULL, "OUT3L" },
164162306a36Sopenharmony_ci	{ "OUT3 Demux", NULL, "OUT3R" },
164262306a36Sopenharmony_ci
164362306a36Sopenharmony_ci	{ "OUT3R", NULL, "OUT3 Mono Mux" },
164462306a36Sopenharmony_ci
164562306a36Sopenharmony_ci	{ "HPOUT3L", "HPOUT3", "OUT3 Demux" },
164662306a36Sopenharmony_ci	{ "HPOUT3R", "HPOUT3", "OUT3 Demux" },
164762306a36Sopenharmony_ci	{ "HPOUT4L", "HPOUT4", "OUT3 Demux" },
164862306a36Sopenharmony_ci	{ "HPOUT4R", "HPOUT4", "OUT3 Demux" },
164962306a36Sopenharmony_ci
165062306a36Sopenharmony_ci	{ "AEC1 Loopback", "SPKDAT1L", "OUT5L" },
165162306a36Sopenharmony_ci	{ "AEC1 Loopback", "SPKDAT1R", "OUT5R" },
165262306a36Sopenharmony_ci	{ "SPKDAT1L", NULL, "OUT5L" },
165362306a36Sopenharmony_ci	{ "SPKDAT1R", NULL, "OUT5R" },
165462306a36Sopenharmony_ci
165562306a36Sopenharmony_ci	{ "SPDIF1", NULL, "SPD1" },
165662306a36Sopenharmony_ci
165762306a36Sopenharmony_ci	{ "MICSUPP", NULL, "SYSCLK" },
165862306a36Sopenharmony_ci
165962306a36Sopenharmony_ci	{ "DRC1 Signal Activity", NULL, "DRC1 Activity Output" },
166062306a36Sopenharmony_ci	{ "DRC2 Signal Activity", NULL, "DRC2 Activity Output" },
166162306a36Sopenharmony_ci	{ "DRC1 Activity Output", "Switch", "DRC1L" },
166262306a36Sopenharmony_ci	{ "DRC1 Activity Output", "Switch", "DRC1R" },
166362306a36Sopenharmony_ci	{ "DRC2 Activity Output", "Switch", "DRC2L" },
166462306a36Sopenharmony_ci	{ "DRC2 Activity Output", "Switch", "DRC2R" },
166562306a36Sopenharmony_ci
166662306a36Sopenharmony_ci	MADERA_MUX_ROUTES("DFC1", "DFC1"),
166762306a36Sopenharmony_ci	MADERA_MUX_ROUTES("DFC2", "DFC2"),
166862306a36Sopenharmony_ci	MADERA_MUX_ROUTES("DFC3", "DFC3"),
166962306a36Sopenharmony_ci	MADERA_MUX_ROUTES("DFC4", "DFC4"),
167062306a36Sopenharmony_ci	MADERA_MUX_ROUTES("DFC5", "DFC5"),
167162306a36Sopenharmony_ci	MADERA_MUX_ROUTES("DFC6", "DFC6"),
167262306a36Sopenharmony_ci	MADERA_MUX_ROUTES("DFC7", "DFC7"),
167362306a36Sopenharmony_ci	MADERA_MUX_ROUTES("DFC8", "DFC8"),
167462306a36Sopenharmony_ci};
167562306a36Sopenharmony_ci
167662306a36Sopenharmony_cistatic int cs47l92_set_fll(struct snd_soc_component *component, int fll_id,
167762306a36Sopenharmony_ci			   int source, unsigned int fref, unsigned int fout)
167862306a36Sopenharmony_ci{
167962306a36Sopenharmony_ci	struct cs47l92 *cs47l92 = snd_soc_component_get_drvdata(component);
168062306a36Sopenharmony_ci
168162306a36Sopenharmony_ci	switch (fll_id) {
168262306a36Sopenharmony_ci	case MADERA_FLL1_REFCLK:
168362306a36Sopenharmony_ci		return madera_fllhj_set_refclk(&cs47l92->fll[0], source, fref,
168462306a36Sopenharmony_ci					       fout);
168562306a36Sopenharmony_ci	case MADERA_FLL2_REFCLK:
168662306a36Sopenharmony_ci		return madera_fllhj_set_refclk(&cs47l92->fll[1], source, fref,
168762306a36Sopenharmony_ci					       fout);
168862306a36Sopenharmony_ci	default:
168962306a36Sopenharmony_ci		return -EINVAL;
169062306a36Sopenharmony_ci	}
169162306a36Sopenharmony_ci}
169262306a36Sopenharmony_ci
169362306a36Sopenharmony_cistatic const struct snd_soc_dai_ops cs47l92_dai_ops = {
169462306a36Sopenharmony_ci	.compress_new = snd_soc_new_compress,
169562306a36Sopenharmony_ci};
169662306a36Sopenharmony_ci
169762306a36Sopenharmony_cistatic struct snd_soc_dai_driver cs47l92_dai[] = {
169862306a36Sopenharmony_ci	{
169962306a36Sopenharmony_ci		.name = "cs47l92-aif1",
170062306a36Sopenharmony_ci		.id = 1,
170162306a36Sopenharmony_ci		.base = MADERA_AIF1_BCLK_CTRL,
170262306a36Sopenharmony_ci		.playback = {
170362306a36Sopenharmony_ci			.stream_name = "AIF1 Playback",
170462306a36Sopenharmony_ci			.channels_min = 1,
170562306a36Sopenharmony_ci			.channels_max = 8,
170662306a36Sopenharmony_ci			.rates = MADERA_RATES,
170762306a36Sopenharmony_ci			.formats = MADERA_FORMATS,
170862306a36Sopenharmony_ci		},
170962306a36Sopenharmony_ci		.capture = {
171062306a36Sopenharmony_ci			.stream_name = "AIF1 Capture",
171162306a36Sopenharmony_ci			.channels_min = 1,
171262306a36Sopenharmony_ci			.channels_max = 8,
171362306a36Sopenharmony_ci			.rates = MADERA_RATES,
171462306a36Sopenharmony_ci			.formats = MADERA_FORMATS,
171562306a36Sopenharmony_ci		 },
171662306a36Sopenharmony_ci		.ops = &madera_dai_ops,
171762306a36Sopenharmony_ci		.symmetric_rate = 1,
171862306a36Sopenharmony_ci		.symmetric_sample_bits = 1,
171962306a36Sopenharmony_ci	},
172062306a36Sopenharmony_ci	{
172162306a36Sopenharmony_ci		.name = "cs47l92-aif2",
172262306a36Sopenharmony_ci		.id = 2,
172362306a36Sopenharmony_ci		.base = MADERA_AIF2_BCLK_CTRL,
172462306a36Sopenharmony_ci		.playback = {
172562306a36Sopenharmony_ci			.stream_name = "AIF2 Playback",
172662306a36Sopenharmony_ci			.channels_min = 1,
172762306a36Sopenharmony_ci			.channels_max = 8,
172862306a36Sopenharmony_ci			.rates = MADERA_RATES,
172962306a36Sopenharmony_ci			.formats = MADERA_FORMATS,
173062306a36Sopenharmony_ci		},
173162306a36Sopenharmony_ci		.capture = {
173262306a36Sopenharmony_ci			.stream_name = "AIF2 Capture",
173362306a36Sopenharmony_ci			.channels_min = 1,
173462306a36Sopenharmony_ci			.channels_max = 8,
173562306a36Sopenharmony_ci			.rates = MADERA_RATES,
173662306a36Sopenharmony_ci			.formats = MADERA_FORMATS,
173762306a36Sopenharmony_ci		 },
173862306a36Sopenharmony_ci		.ops = &madera_dai_ops,
173962306a36Sopenharmony_ci		.symmetric_rate = 1,
174062306a36Sopenharmony_ci		.symmetric_sample_bits = 1,
174162306a36Sopenharmony_ci	},
174262306a36Sopenharmony_ci	{
174362306a36Sopenharmony_ci		.name = "cs47l92-aif3",
174462306a36Sopenharmony_ci		.id = 3,
174562306a36Sopenharmony_ci		.base = MADERA_AIF3_BCLK_CTRL,
174662306a36Sopenharmony_ci		.playback = {
174762306a36Sopenharmony_ci			.stream_name = "AIF3 Playback",
174862306a36Sopenharmony_ci			.channels_min = 1,
174962306a36Sopenharmony_ci			.channels_max = 4,
175062306a36Sopenharmony_ci			.rates = MADERA_RATES,
175162306a36Sopenharmony_ci			.formats = MADERA_FORMATS,
175262306a36Sopenharmony_ci		},
175362306a36Sopenharmony_ci		.capture = {
175462306a36Sopenharmony_ci			.stream_name = "AIF3 Capture",
175562306a36Sopenharmony_ci			.channels_min = 1,
175662306a36Sopenharmony_ci			.channels_max = 4,
175762306a36Sopenharmony_ci			.rates = MADERA_RATES,
175862306a36Sopenharmony_ci			.formats = MADERA_FORMATS,
175962306a36Sopenharmony_ci		 },
176062306a36Sopenharmony_ci		.ops = &madera_dai_ops,
176162306a36Sopenharmony_ci		.symmetric_rate = 1,
176262306a36Sopenharmony_ci		.symmetric_sample_bits = 1,
176362306a36Sopenharmony_ci	},
176462306a36Sopenharmony_ci	{
176562306a36Sopenharmony_ci		.name = "cs47l92-slim1",
176662306a36Sopenharmony_ci		.id = 5,
176762306a36Sopenharmony_ci		.playback = {
176862306a36Sopenharmony_ci			.stream_name = "Slim1 Playback",
176962306a36Sopenharmony_ci			.channels_min = 1,
177062306a36Sopenharmony_ci			.channels_max = 4,
177162306a36Sopenharmony_ci			.rates = MADERA_RATES,
177262306a36Sopenharmony_ci			.formats = MADERA_FORMATS,
177362306a36Sopenharmony_ci		},
177462306a36Sopenharmony_ci		.capture = {
177562306a36Sopenharmony_ci			.stream_name = "Slim1 Capture",
177662306a36Sopenharmony_ci			.channels_min = 1,
177762306a36Sopenharmony_ci			.channels_max = 4,
177862306a36Sopenharmony_ci			.rates = MADERA_RATES,
177962306a36Sopenharmony_ci			.formats = MADERA_FORMATS,
178062306a36Sopenharmony_ci		 },
178162306a36Sopenharmony_ci		.ops = &madera_simple_dai_ops,
178262306a36Sopenharmony_ci	},
178362306a36Sopenharmony_ci	{
178462306a36Sopenharmony_ci		.name = "cs47l92-slim2",
178562306a36Sopenharmony_ci		.id = 6,
178662306a36Sopenharmony_ci		.playback = {
178762306a36Sopenharmony_ci			.stream_name = "Slim2 Playback",
178862306a36Sopenharmony_ci			.channels_min = 1,
178962306a36Sopenharmony_ci			.channels_max = 2,
179062306a36Sopenharmony_ci			.rates = MADERA_RATES,
179162306a36Sopenharmony_ci			.formats = MADERA_FORMATS,
179262306a36Sopenharmony_ci		},
179362306a36Sopenharmony_ci		.capture = {
179462306a36Sopenharmony_ci			.stream_name = "Slim2 Capture",
179562306a36Sopenharmony_ci			.channels_min = 1,
179662306a36Sopenharmony_ci			.channels_max = 2,
179762306a36Sopenharmony_ci			.rates = MADERA_RATES,
179862306a36Sopenharmony_ci			.formats = MADERA_FORMATS,
179962306a36Sopenharmony_ci		 },
180062306a36Sopenharmony_ci		.ops = &madera_simple_dai_ops,
180162306a36Sopenharmony_ci	},
180262306a36Sopenharmony_ci	{
180362306a36Sopenharmony_ci		.name = "cs47l92-slim3",
180462306a36Sopenharmony_ci		.id = 7,
180562306a36Sopenharmony_ci		.playback = {
180662306a36Sopenharmony_ci			.stream_name = "Slim3 Playback",
180762306a36Sopenharmony_ci			.channels_min = 1,
180862306a36Sopenharmony_ci			.channels_max = 2,
180962306a36Sopenharmony_ci			.rates = MADERA_RATES,
181062306a36Sopenharmony_ci			.formats = MADERA_FORMATS,
181162306a36Sopenharmony_ci		},
181262306a36Sopenharmony_ci		.capture = {
181362306a36Sopenharmony_ci			.stream_name = "Slim3 Capture",
181462306a36Sopenharmony_ci			.channels_min = 1,
181562306a36Sopenharmony_ci			.channels_max = 2,
181662306a36Sopenharmony_ci			.rates = MADERA_RATES,
181762306a36Sopenharmony_ci			.formats = MADERA_FORMATS,
181862306a36Sopenharmony_ci		 },
181962306a36Sopenharmony_ci		.ops = &madera_simple_dai_ops,
182062306a36Sopenharmony_ci	},
182162306a36Sopenharmony_ci	{
182262306a36Sopenharmony_ci		.name = "cs47l92-cpu-trace",
182362306a36Sopenharmony_ci		.capture = {
182462306a36Sopenharmony_ci			.stream_name = "Audio Trace CPU",
182562306a36Sopenharmony_ci			.channels_min = 1,
182662306a36Sopenharmony_ci			.channels_max = 2,
182762306a36Sopenharmony_ci			.rates = MADERA_RATES,
182862306a36Sopenharmony_ci			.formats = MADERA_FORMATS,
182962306a36Sopenharmony_ci		},
183062306a36Sopenharmony_ci		.ops = &cs47l92_dai_ops,
183162306a36Sopenharmony_ci	},
183262306a36Sopenharmony_ci	{
183362306a36Sopenharmony_ci		.name = "cs47l92-dsp-trace",
183462306a36Sopenharmony_ci		.capture = {
183562306a36Sopenharmony_ci			.stream_name = "Audio Trace DSP",
183662306a36Sopenharmony_ci			.channels_min = 1,
183762306a36Sopenharmony_ci			.channels_max = 2,
183862306a36Sopenharmony_ci			.rates = MADERA_RATES,
183962306a36Sopenharmony_ci			.formats = MADERA_FORMATS,
184062306a36Sopenharmony_ci		},
184162306a36Sopenharmony_ci	},
184262306a36Sopenharmony_ci};
184362306a36Sopenharmony_ci
184462306a36Sopenharmony_cistatic int cs47l92_open(struct snd_soc_component *component,
184562306a36Sopenharmony_ci			struct snd_compr_stream *stream)
184662306a36Sopenharmony_ci{
184762306a36Sopenharmony_ci	struct snd_soc_pcm_runtime *rtd = stream->private_data;
184862306a36Sopenharmony_ci	struct cs47l92 *cs47l92 = snd_soc_component_get_drvdata(component);
184962306a36Sopenharmony_ci	struct madera_priv *priv = &cs47l92->core;
185062306a36Sopenharmony_ci	struct madera *madera = priv->madera;
185162306a36Sopenharmony_ci	int n_adsp;
185262306a36Sopenharmony_ci
185362306a36Sopenharmony_ci	if (strcmp(asoc_rtd_to_codec(rtd, 0)->name, "cs47l92-dsp-trace") == 0) {
185462306a36Sopenharmony_ci		n_adsp = 0;
185562306a36Sopenharmony_ci	} else {
185662306a36Sopenharmony_ci		dev_err(madera->dev,
185762306a36Sopenharmony_ci			"No suitable compressed stream for DAI '%s'\n",
185862306a36Sopenharmony_ci			asoc_rtd_to_codec(rtd, 0)->name);
185962306a36Sopenharmony_ci		return -EINVAL;
186062306a36Sopenharmony_ci	}
186162306a36Sopenharmony_ci
186262306a36Sopenharmony_ci	return wm_adsp_compr_open(&priv->adsp[n_adsp], stream);
186362306a36Sopenharmony_ci}
186462306a36Sopenharmony_ci
186562306a36Sopenharmony_cistatic irqreturn_t cs47l92_adsp2_irq(int irq, void *data)
186662306a36Sopenharmony_ci{
186762306a36Sopenharmony_ci	struct cs47l92 *cs47l92 = data;
186862306a36Sopenharmony_ci	struct madera_priv *priv = &cs47l92->core;
186962306a36Sopenharmony_ci	struct madera *madera = priv->madera;
187062306a36Sopenharmony_ci	int ret;
187162306a36Sopenharmony_ci
187262306a36Sopenharmony_ci	ret = wm_adsp_compr_handle_irq(&priv->adsp[0]);
187362306a36Sopenharmony_ci	if (ret == -ENODEV) {
187462306a36Sopenharmony_ci		dev_err(madera->dev, "Spurious compressed data IRQ\n");
187562306a36Sopenharmony_ci		return IRQ_NONE;
187662306a36Sopenharmony_ci	}
187762306a36Sopenharmony_ci
187862306a36Sopenharmony_ci	return IRQ_HANDLED;
187962306a36Sopenharmony_ci}
188062306a36Sopenharmony_ci
188162306a36Sopenharmony_cistatic const struct snd_soc_dapm_route cs47l92_mono_routes[] = {
188262306a36Sopenharmony_ci	{ "OUT1R", NULL, "OUT1L" },
188362306a36Sopenharmony_ci	{ "OUT2R", NULL, "OUT2L" },
188462306a36Sopenharmony_ci	{ "OUT3 Mono Mux", "HPOUT3", "OUT3L" },
188562306a36Sopenharmony_ci	{ "OUT3 Mono Mux", "HPOUT4", "OUT3L" },
188662306a36Sopenharmony_ci};
188762306a36Sopenharmony_ci
188862306a36Sopenharmony_cistatic int cs47l92_component_probe(struct snd_soc_component *component)
188962306a36Sopenharmony_ci{
189062306a36Sopenharmony_ci	struct cs47l92 *cs47l92 = snd_soc_component_get_drvdata(component);
189162306a36Sopenharmony_ci	struct madera *madera = cs47l92->core.madera;
189262306a36Sopenharmony_ci	int ret;
189362306a36Sopenharmony_ci
189462306a36Sopenharmony_ci	snd_soc_component_init_regmap(component, madera->regmap);
189562306a36Sopenharmony_ci
189662306a36Sopenharmony_ci	mutex_lock(&madera->dapm_ptr_lock);
189762306a36Sopenharmony_ci	madera->dapm = snd_soc_component_get_dapm(component);
189862306a36Sopenharmony_ci	mutex_unlock(&madera->dapm_ptr_lock);
189962306a36Sopenharmony_ci
190062306a36Sopenharmony_ci	ret = madera_init_inputs(component);
190162306a36Sopenharmony_ci	if (ret)
190262306a36Sopenharmony_ci		return ret;
190362306a36Sopenharmony_ci
190462306a36Sopenharmony_ci	ret = madera_init_outputs(component, cs47l92_mono_routes,
190562306a36Sopenharmony_ci				  ARRAY_SIZE(cs47l92_mono_routes),
190662306a36Sopenharmony_ci				  CS47L92_MONO_OUTPUTS);
190762306a36Sopenharmony_ci	if (ret)
190862306a36Sopenharmony_ci		return ret;
190962306a36Sopenharmony_ci
191062306a36Sopenharmony_ci	snd_soc_component_disable_pin(component, "HAPTICS");
191162306a36Sopenharmony_ci
191262306a36Sopenharmony_ci	ret = snd_soc_add_component_controls(component,
191362306a36Sopenharmony_ci					     madera_adsp_rate_controls,
191462306a36Sopenharmony_ci					     CS47L92_NUM_ADSP);
191562306a36Sopenharmony_ci	if (ret)
191662306a36Sopenharmony_ci		return ret;
191762306a36Sopenharmony_ci
191862306a36Sopenharmony_ci	return wm_adsp2_component_probe(&cs47l92->core.adsp[0], component);
191962306a36Sopenharmony_ci}
192062306a36Sopenharmony_ci
192162306a36Sopenharmony_cistatic void cs47l92_component_remove(struct snd_soc_component *component)
192262306a36Sopenharmony_ci{
192362306a36Sopenharmony_ci	struct cs47l92 *cs47l92 = snd_soc_component_get_drvdata(component);
192462306a36Sopenharmony_ci	struct madera *madera = cs47l92->core.madera;
192562306a36Sopenharmony_ci
192662306a36Sopenharmony_ci	mutex_lock(&madera->dapm_ptr_lock);
192762306a36Sopenharmony_ci	madera->dapm = NULL;
192862306a36Sopenharmony_ci	mutex_unlock(&madera->dapm_ptr_lock);
192962306a36Sopenharmony_ci
193062306a36Sopenharmony_ci	wm_adsp2_component_remove(&cs47l92->core.adsp[0], component);
193162306a36Sopenharmony_ci}
193262306a36Sopenharmony_ci
193362306a36Sopenharmony_ci#define CS47L92_DIG_VU 0x0200
193462306a36Sopenharmony_ci
193562306a36Sopenharmony_cistatic unsigned int cs47l92_digital_vu[] = {
193662306a36Sopenharmony_ci	MADERA_DAC_DIGITAL_VOLUME_1L,
193762306a36Sopenharmony_ci	MADERA_DAC_DIGITAL_VOLUME_1R,
193862306a36Sopenharmony_ci	MADERA_DAC_DIGITAL_VOLUME_2L,
193962306a36Sopenharmony_ci	MADERA_DAC_DIGITAL_VOLUME_2R,
194062306a36Sopenharmony_ci	MADERA_DAC_DIGITAL_VOLUME_3L,
194162306a36Sopenharmony_ci	MADERA_DAC_DIGITAL_VOLUME_3R,
194262306a36Sopenharmony_ci	MADERA_DAC_DIGITAL_VOLUME_5L,
194362306a36Sopenharmony_ci	MADERA_DAC_DIGITAL_VOLUME_5R,
194462306a36Sopenharmony_ci};
194562306a36Sopenharmony_ci
194662306a36Sopenharmony_cistatic const struct snd_compress_ops cs47l92_compress_ops = {
194762306a36Sopenharmony_ci	.open = &cs47l92_open,
194862306a36Sopenharmony_ci	.free = &wm_adsp_compr_free,
194962306a36Sopenharmony_ci	.set_params = &wm_adsp_compr_set_params,
195062306a36Sopenharmony_ci	.get_caps = &wm_adsp_compr_get_caps,
195162306a36Sopenharmony_ci	.trigger = &wm_adsp_compr_trigger,
195262306a36Sopenharmony_ci	.pointer = &wm_adsp_compr_pointer,
195362306a36Sopenharmony_ci	.copy = &wm_adsp_compr_copy,
195462306a36Sopenharmony_ci};
195562306a36Sopenharmony_ci
195662306a36Sopenharmony_cistatic const struct snd_soc_component_driver soc_component_dev_cs47l92 = {
195762306a36Sopenharmony_ci	.probe			= &cs47l92_component_probe,
195862306a36Sopenharmony_ci	.remove			= &cs47l92_component_remove,
195962306a36Sopenharmony_ci	.set_sysclk		= &madera_set_sysclk,
196062306a36Sopenharmony_ci	.set_pll		= &cs47l92_set_fll,
196162306a36Sopenharmony_ci	.name			= DRV_NAME,
196262306a36Sopenharmony_ci	.compress_ops		= &cs47l92_compress_ops,
196362306a36Sopenharmony_ci	.controls		= cs47l92_snd_controls,
196462306a36Sopenharmony_ci	.num_controls		= ARRAY_SIZE(cs47l92_snd_controls),
196562306a36Sopenharmony_ci	.dapm_widgets		= cs47l92_dapm_widgets,
196662306a36Sopenharmony_ci	.num_dapm_widgets	= ARRAY_SIZE(cs47l92_dapm_widgets),
196762306a36Sopenharmony_ci	.dapm_routes		= cs47l92_dapm_routes,
196862306a36Sopenharmony_ci	.num_dapm_routes	= ARRAY_SIZE(cs47l92_dapm_routes),
196962306a36Sopenharmony_ci	.use_pmdown_time	= 1,
197062306a36Sopenharmony_ci	.endianness		= 1,
197162306a36Sopenharmony_ci};
197262306a36Sopenharmony_ci
197362306a36Sopenharmony_cistatic int cs47l92_probe(struct platform_device *pdev)
197462306a36Sopenharmony_ci{
197562306a36Sopenharmony_ci	struct madera *madera = dev_get_drvdata(pdev->dev.parent);
197662306a36Sopenharmony_ci	struct cs47l92 *cs47l92;
197762306a36Sopenharmony_ci	int i, ret;
197862306a36Sopenharmony_ci
197962306a36Sopenharmony_ci	BUILD_BUG_ON(ARRAY_SIZE(cs47l92_dai) > MADERA_MAX_DAI);
198062306a36Sopenharmony_ci
198162306a36Sopenharmony_ci	/* quick exit if Madera irqchip driver hasn't completed probe */
198262306a36Sopenharmony_ci	if (!madera->irq_dev) {
198362306a36Sopenharmony_ci		dev_dbg(&pdev->dev, "irqchip driver not ready\n");
198462306a36Sopenharmony_ci		return -EPROBE_DEFER;
198562306a36Sopenharmony_ci	}
198662306a36Sopenharmony_ci
198762306a36Sopenharmony_ci	cs47l92 = devm_kzalloc(&pdev->dev, sizeof(struct cs47l92), GFP_KERNEL);
198862306a36Sopenharmony_ci	if (!cs47l92)
198962306a36Sopenharmony_ci		return -ENOMEM;
199062306a36Sopenharmony_ci
199162306a36Sopenharmony_ci	platform_set_drvdata(pdev, cs47l92);
199262306a36Sopenharmony_ci
199362306a36Sopenharmony_ci	cs47l92->core.madera = madera;
199462306a36Sopenharmony_ci	cs47l92->core.dev = &pdev->dev;
199562306a36Sopenharmony_ci	cs47l92->core.num_inputs = 8;
199662306a36Sopenharmony_ci
199762306a36Sopenharmony_ci	ret = madera_core_init(&cs47l92->core);
199862306a36Sopenharmony_ci	if (ret)
199962306a36Sopenharmony_ci		return ret;
200062306a36Sopenharmony_ci
200162306a36Sopenharmony_ci	ret = madera_request_irq(madera, MADERA_IRQ_DSP_IRQ1,
200262306a36Sopenharmony_ci				 "ADSP2 Compressed IRQ", cs47l92_adsp2_irq,
200362306a36Sopenharmony_ci				 cs47l92);
200462306a36Sopenharmony_ci	if (ret != 0) {
200562306a36Sopenharmony_ci		dev_err(&pdev->dev, "Failed to request DSP IRQ: %d\n", ret);
200662306a36Sopenharmony_ci		goto error_core;
200762306a36Sopenharmony_ci	}
200862306a36Sopenharmony_ci
200962306a36Sopenharmony_ci	ret = madera_set_irq_wake(madera, MADERA_IRQ_DSP_IRQ1, 1);
201062306a36Sopenharmony_ci	if (ret)
201162306a36Sopenharmony_ci		dev_warn(&pdev->dev, "Failed to set DSP IRQ wake: %d\n", ret);
201262306a36Sopenharmony_ci
201362306a36Sopenharmony_ci	cs47l92->core.adsp[0].part = "cs47l92";
201462306a36Sopenharmony_ci	cs47l92->core.adsp[0].cs_dsp.num = 1;
201562306a36Sopenharmony_ci	cs47l92->core.adsp[0].cs_dsp.type = WMFW_ADSP2;
201662306a36Sopenharmony_ci	cs47l92->core.adsp[0].cs_dsp.rev = 2;
201762306a36Sopenharmony_ci	cs47l92->core.adsp[0].cs_dsp.dev = madera->dev;
201862306a36Sopenharmony_ci	cs47l92->core.adsp[0].cs_dsp.regmap = madera->regmap_32bit;
201962306a36Sopenharmony_ci
202062306a36Sopenharmony_ci	cs47l92->core.adsp[0].cs_dsp.base = MADERA_DSP1_CONFIG_1;
202162306a36Sopenharmony_ci	cs47l92->core.adsp[0].cs_dsp.mem = cs47l92_dsp1_regions;
202262306a36Sopenharmony_ci	cs47l92->core.adsp[0].cs_dsp.num_mems = ARRAY_SIZE(cs47l92_dsp1_regions);
202362306a36Sopenharmony_ci
202462306a36Sopenharmony_ci	cs47l92->core.adsp[0].cs_dsp.lock_regions = CS_ADSP2_REGION_1_9;
202562306a36Sopenharmony_ci
202662306a36Sopenharmony_ci	ret = wm_adsp2_init(&cs47l92->core.adsp[0]);
202762306a36Sopenharmony_ci	if (ret != 0)
202862306a36Sopenharmony_ci		goto error_dsp_irq;
202962306a36Sopenharmony_ci
203062306a36Sopenharmony_ci	ret = madera_init_bus_error_irq(&cs47l92->core, 0, wm_adsp2_bus_error);
203162306a36Sopenharmony_ci	if (ret != 0)
203262306a36Sopenharmony_ci		goto error_adsp;
203362306a36Sopenharmony_ci
203462306a36Sopenharmony_ci	madera_init_fll(madera, 1, MADERA_FLL1_CONTROL_1 - 1,
203562306a36Sopenharmony_ci			&cs47l92->fll[0]);
203662306a36Sopenharmony_ci	madera_init_fll(madera, 2, MADERA_FLL2_CONTROL_1 - 1,
203762306a36Sopenharmony_ci			&cs47l92->fll[1]);
203862306a36Sopenharmony_ci
203962306a36Sopenharmony_ci	for (i = 0; i < ARRAY_SIZE(cs47l92_dai); i++)
204062306a36Sopenharmony_ci		madera_init_dai(&cs47l92->core, i);
204162306a36Sopenharmony_ci
204262306a36Sopenharmony_ci	/* Latch volume update bits */
204362306a36Sopenharmony_ci	for (i = 0; i < ARRAY_SIZE(cs47l92_digital_vu); i++)
204462306a36Sopenharmony_ci		regmap_update_bits(madera->regmap, cs47l92_digital_vu[i],
204562306a36Sopenharmony_ci				   CS47L92_DIG_VU, CS47L92_DIG_VU);
204662306a36Sopenharmony_ci
204762306a36Sopenharmony_ci	pm_runtime_enable(&pdev->dev);
204862306a36Sopenharmony_ci	pm_runtime_idle(&pdev->dev);
204962306a36Sopenharmony_ci
205062306a36Sopenharmony_ci	ret = devm_snd_soc_register_component(&pdev->dev,
205162306a36Sopenharmony_ci					      &soc_component_dev_cs47l92,
205262306a36Sopenharmony_ci					      cs47l92_dai,
205362306a36Sopenharmony_ci					      ARRAY_SIZE(cs47l92_dai));
205462306a36Sopenharmony_ci	if (ret < 0) {
205562306a36Sopenharmony_ci		dev_err(&pdev->dev, "Failed to register component: %d\n", ret);
205662306a36Sopenharmony_ci		goto error_pm_runtime;
205762306a36Sopenharmony_ci	}
205862306a36Sopenharmony_ci
205962306a36Sopenharmony_ci	return ret;
206062306a36Sopenharmony_ci
206162306a36Sopenharmony_cierror_pm_runtime:
206262306a36Sopenharmony_ci	pm_runtime_disable(&pdev->dev);
206362306a36Sopenharmony_ci	madera_free_bus_error_irq(&cs47l92->core, 0);
206462306a36Sopenharmony_cierror_adsp:
206562306a36Sopenharmony_ci	wm_adsp2_remove(&cs47l92->core.adsp[0]);
206662306a36Sopenharmony_cierror_dsp_irq:
206762306a36Sopenharmony_ci	madera_set_irq_wake(madera, MADERA_IRQ_DSP_IRQ1, 0);
206862306a36Sopenharmony_ci	madera_free_irq(madera, MADERA_IRQ_DSP_IRQ1, cs47l92);
206962306a36Sopenharmony_cierror_core:
207062306a36Sopenharmony_ci	madera_core_free(&cs47l92->core);
207162306a36Sopenharmony_ci
207262306a36Sopenharmony_ci	return ret;
207362306a36Sopenharmony_ci}
207462306a36Sopenharmony_ci
207562306a36Sopenharmony_cistatic void cs47l92_remove(struct platform_device *pdev)
207662306a36Sopenharmony_ci{
207762306a36Sopenharmony_ci	struct cs47l92 *cs47l92 = platform_get_drvdata(pdev);
207862306a36Sopenharmony_ci
207962306a36Sopenharmony_ci	pm_runtime_disable(&pdev->dev);
208062306a36Sopenharmony_ci
208162306a36Sopenharmony_ci	madera_free_bus_error_irq(&cs47l92->core, 0);
208262306a36Sopenharmony_ci	wm_adsp2_remove(&cs47l92->core.adsp[0]);
208362306a36Sopenharmony_ci
208462306a36Sopenharmony_ci	madera_set_irq_wake(cs47l92->core.madera, MADERA_IRQ_DSP_IRQ1, 0);
208562306a36Sopenharmony_ci	madera_free_irq(cs47l92->core.madera, MADERA_IRQ_DSP_IRQ1, cs47l92);
208662306a36Sopenharmony_ci
208762306a36Sopenharmony_ci	madera_core_free(&cs47l92->core);
208862306a36Sopenharmony_ci}
208962306a36Sopenharmony_ci
209062306a36Sopenharmony_cistatic struct platform_driver cs47l92_codec_driver = {
209162306a36Sopenharmony_ci	.driver = {
209262306a36Sopenharmony_ci		.name = "cs47l92-codec",
209362306a36Sopenharmony_ci	},
209462306a36Sopenharmony_ci	.probe = &cs47l92_probe,
209562306a36Sopenharmony_ci	.remove_new = cs47l92_remove,
209662306a36Sopenharmony_ci};
209762306a36Sopenharmony_ci
209862306a36Sopenharmony_cimodule_platform_driver(cs47l92_codec_driver);
209962306a36Sopenharmony_ci
210062306a36Sopenharmony_ciMODULE_SOFTDEP("pre: madera irq-madera arizona-micsupp");
210162306a36Sopenharmony_ciMODULE_DESCRIPTION("ASoC CS47L92 driver");
210262306a36Sopenharmony_ciMODULE_AUTHOR("Stuart Henderson <stuarth@opensource.cirrus.com>");
210362306a36Sopenharmony_ciMODULE_LICENSE("GPL v2");
210462306a36Sopenharmony_ciMODULE_ALIAS("platform:cs47l92-codec");
2105