xref: /openbmc/linux/sound/soc/codecs/cs47l92.c (revision e22a907d)
16535e831SStuart Henderson // SPDX-License-Identifier: GPL-2.0-only
26535e831SStuart Henderson //
36535e831SStuart Henderson // ALSA SoC Audio driver for CS47L92 codec
46535e831SStuart Henderson //
56535e831SStuart Henderson // Copyright (C) 2016-2019 Cirrus Logic, Inc. and
66535e831SStuart Henderson //                         Cirrus Logic International Semiconductor Ltd.
76535e831SStuart Henderson //
86535e831SStuart Henderson 
96535e831SStuart Henderson #include <linux/module.h>
106535e831SStuart Henderson #include <linux/moduleparam.h>
116535e831SStuart Henderson #include <linux/device.h>
126535e831SStuart Henderson #include <linux/delay.h>
136535e831SStuart Henderson #include <linux/init.h>
146535e831SStuart Henderson #include <linux/pm.h>
156535e831SStuart Henderson #include <linux/pm_runtime.h>
166535e831SStuart Henderson #include <linux/regmap.h>
176535e831SStuart Henderson #include <sound/core.h>
186535e831SStuart Henderson #include <sound/pcm.h>
196535e831SStuart Henderson #include <sound/pcm_params.h>
206535e831SStuart Henderson #include <sound/soc.h>
216535e831SStuart Henderson #include <sound/tlv.h>
226535e831SStuart Henderson 
236535e831SStuart Henderson #include <linux/irqchip/irq-madera.h>
246535e831SStuart Henderson #include <linux/mfd/madera/core.h>
256535e831SStuart Henderson #include <linux/mfd/madera/registers.h>
266535e831SStuart Henderson 
276535e831SStuart Henderson #include "madera.h"
286535e831SStuart Henderson #include "wm_adsp.h"
296535e831SStuart Henderson 
306535e831SStuart Henderson #define CS47L92_NUM_ADSP	1
316535e831SStuart Henderson #define CS47L92_MONO_OUTPUTS	3
326535e831SStuart Henderson 
336535e831SStuart Henderson #define DRV_NAME "cs47l92-codec"
346535e831SStuart Henderson 
356535e831SStuart Henderson struct cs47l92 {
366535e831SStuart Henderson 	struct madera_priv core;
376535e831SStuart Henderson 	struct madera_fll fll[2];
386535e831SStuart Henderson };
396535e831SStuart Henderson 
405beb8eeaSSimon Trimmer static const struct cs_dsp_region cs47l92_dsp1_regions[] = {
416535e831SStuart Henderson 	{ .type = WMFW_ADSP2_PM, .base = 0x080000 },
426535e831SStuart Henderson 	{ .type = WMFW_ADSP2_ZM, .base = 0x0e0000 },
436535e831SStuart Henderson 	{ .type = WMFW_ADSP2_XM, .base = 0x0a0000 },
446535e831SStuart Henderson 	{ .type = WMFW_ADSP2_YM, .base = 0x0c0000 },
456535e831SStuart Henderson };
466535e831SStuart Henderson 
476535e831SStuart Henderson static const char * const cs47l92_outdemux_texts[] = {
486535e831SStuart Henderson 	"HPOUT3",
496535e831SStuart Henderson 	"HPOUT4",
506535e831SStuart Henderson };
516535e831SStuart Henderson 
cs47l92_put_demux(struct snd_kcontrol * kcontrol,struct snd_ctl_elem_value * ucontrol)526535e831SStuart Henderson static int cs47l92_put_demux(struct snd_kcontrol *kcontrol,
536535e831SStuart Henderson 			     struct snd_ctl_elem_value *ucontrol)
546535e831SStuart Henderson {
556535e831SStuart Henderson 	struct snd_soc_component *component =
566535e831SStuart Henderson 		snd_soc_dapm_kcontrol_component(kcontrol);
576535e831SStuart Henderson 	struct snd_soc_dapm_context *dapm =
586535e831SStuart Henderson 		snd_soc_component_get_dapm(component);
596535e831SStuart Henderson 	struct cs47l92 *cs47l92 = snd_soc_component_get_drvdata(component);
606535e831SStuart Henderson 	struct madera_priv *priv = &cs47l92->core;
616535e831SStuart Henderson 	struct madera *madera = priv->madera;
626535e831SStuart Henderson 	struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
636535e831SStuart Henderson 	unsigned int ep_sel, mux, change, cur;
646535e831SStuart Henderson 	bool out_mono;
656535e831SStuart Henderson 	int ret;
666535e831SStuart Henderson 
676535e831SStuart Henderson 	if (ucontrol->value.enumerated.item[0] > e->items - 1)
686535e831SStuart Henderson 		return -EINVAL;
696535e831SStuart Henderson 
706535e831SStuart Henderson 	mux = ucontrol->value.enumerated.item[0];
716535e831SStuart Henderson 
726535e831SStuart Henderson 	snd_soc_dapm_mutex_lock(dapm);
736535e831SStuart Henderson 
746535e831SStuart Henderson 	ep_sel = mux << e->shift_l;
756535e831SStuart Henderson 
766535e831SStuart Henderson 	change = snd_soc_component_test_bits(component, MADERA_OUTPUT_ENABLES_1,
776535e831SStuart Henderson 					     MADERA_EP_SEL_MASK,
786535e831SStuart Henderson 					     ep_sel);
796535e831SStuart Henderson 	if (!change)
806535e831SStuart Henderson 		goto end;
816535e831SStuart Henderson 
826535e831SStuart Henderson 	ret = regmap_read(madera->regmap, MADERA_OUTPUT_ENABLES_1, &cur);
836535e831SStuart Henderson 	if (ret != 0)
846535e831SStuart Henderson 		dev_warn(madera->dev, "Failed to read outputs: %d\n", ret);
856535e831SStuart Henderson 
866535e831SStuart Henderson 	/* EP_SEL should not be modified while HPOUT3 or 4 is enabled */
876535e831SStuart Henderson 	ret = regmap_update_bits(madera->regmap, MADERA_OUTPUT_ENABLES_1,
886535e831SStuart Henderson 				 MADERA_OUT3L_ENA | MADERA_OUT3R_ENA, 0);
896535e831SStuart Henderson 	if (ret)
906535e831SStuart Henderson 		dev_warn(madera->dev, "Failed to disable outputs: %d\n", ret);
916535e831SStuart Henderson 
926535e831SStuart Henderson 	usleep_range(2000, 3000); /* wait for wseq to complete */
936535e831SStuart Henderson 
946535e831SStuart Henderson 	ret = regmap_update_bits(madera->regmap, MADERA_OUTPUT_ENABLES_1,
956535e831SStuart Henderson 				 MADERA_EP_SEL, ep_sel);
966535e831SStuart Henderson 	if (ret) {
976535e831SStuart Henderson 		dev_err(madera->dev, "Failed to set OUT3 demux: %d\n", ret);
986535e831SStuart Henderson 	} else {
996535e831SStuart Henderson 		out_mono = madera->pdata.codec.out_mono[2 + mux];
1006535e831SStuart Henderson 
1016535e831SStuart Henderson 		ret = madera_set_output_mode(component, 3, out_mono);
1026535e831SStuart Henderson 		if (ret < 0)
1036535e831SStuart Henderson 			dev_warn(madera->dev,
1046535e831SStuart Henderson 				 "Failed to set output mode: %d\n", ret);
1056535e831SStuart Henderson 	}
1066535e831SStuart Henderson 
1076535e831SStuart Henderson 	ret = regmap_update_bits(madera->regmap, MADERA_OUTPUT_ENABLES_1,
1086535e831SStuart Henderson 				 MADERA_OUT3L_ENA | MADERA_OUT3R_ENA, cur);
1096535e831SStuart Henderson 	if (ret) {
1106535e831SStuart Henderson 		dev_warn(madera->dev, "Failed to restore outputs: %d\n", ret);
1116535e831SStuart Henderson 	} else {
1126535e831SStuart Henderson 		/* wait for wseq */
1136535e831SStuart Henderson 		if (cur & (MADERA_OUT3L_ENA | MADERA_OUT3R_ENA))
1146535e831SStuart Henderson 			msleep(34); /* enable delay */
1156535e831SStuart Henderson 		else
1166535e831SStuart Henderson 			usleep_range(2000, 3000); /* disable delay */
1176535e831SStuart Henderson 	}
1186535e831SStuart Henderson 
1196535e831SStuart Henderson end:
1206535e831SStuart Henderson 	snd_soc_dapm_mutex_unlock(dapm);
1216535e831SStuart Henderson 
122870d72abSCharles Keepax 	ret = snd_soc_dapm_mux_update_power(dapm, kcontrol, mux, e, NULL);
123870d72abSCharles Keepax 	if (ret < 0) {
124870d72abSCharles Keepax 		dev_err(madera->dev, "Failed to update demux power state: %d\n", ret);
125870d72abSCharles Keepax 		return ret;
126870d72abSCharles Keepax 	}
127870d72abSCharles Keepax 
128870d72abSCharles Keepax 	return change;
1296535e831SStuart Henderson }
1306535e831SStuart Henderson 
1316535e831SStuart Henderson static SOC_ENUM_SINGLE_DECL(cs47l92_outdemux_enum,
1326535e831SStuart Henderson 			    MADERA_OUTPUT_ENABLES_1,
1336535e831SStuart Henderson 			    MADERA_EP_SEL_SHIFT,
1346535e831SStuart Henderson 			    cs47l92_outdemux_texts);
1356535e831SStuart Henderson 
1366535e831SStuart Henderson static const struct snd_kcontrol_new cs47l92_outdemux =
1376535e831SStuart Henderson 	SOC_DAPM_ENUM_EXT("OUT3 Demux", cs47l92_outdemux_enum,
1386535e831SStuart Henderson 			  snd_soc_dapm_get_enum_double, cs47l92_put_demux);
1396535e831SStuart Henderson 
cs47l92_adsp_power_ev(struct snd_soc_dapm_widget * w,struct snd_kcontrol * kcontrol,int event)1406535e831SStuart Henderson static int cs47l92_adsp_power_ev(struct snd_soc_dapm_widget *w,
1416535e831SStuart Henderson 				 struct snd_kcontrol *kcontrol,
1426535e831SStuart Henderson 				 int event)
1436535e831SStuart Henderson {
1446535e831SStuart Henderson 	struct snd_soc_component *component =
1456535e831SStuart Henderson 		snd_soc_dapm_to_component(w->dapm);
1466535e831SStuart Henderson 	struct cs47l92 *cs47l92 = snd_soc_component_get_drvdata(component);
1476535e831SStuart Henderson 	struct madera_priv *priv = &cs47l92->core;
1486535e831SStuart Henderson 	struct madera *madera = priv->madera;
1496535e831SStuart Henderson 	unsigned int freq;
1506535e831SStuart Henderson 	int ret;
1516535e831SStuart Henderson 
1526535e831SStuart Henderson 	ret = regmap_read(madera->regmap, MADERA_DSP_CLOCK_2, &freq);
1536535e831SStuart Henderson 	if (ret != 0) {
1546535e831SStuart Henderson 		dev_err(madera->dev,
1556535e831SStuart Henderson 			"Failed to read MADERA_DSP_CLOCK_2: %d\n", ret);
1566535e831SStuart Henderson 		return ret;
1576535e831SStuart Henderson 	}
1586535e831SStuart Henderson 
1596535e831SStuart Henderson 	switch (event) {
1606535e831SStuart Henderson 	case SND_SOC_DAPM_PRE_PMU:
1616535e831SStuart Henderson 		ret = madera_set_adsp_clk(&cs47l92->core, w->shift, freq);
1626535e831SStuart Henderson 		if (ret)
1636535e831SStuart Henderson 			return ret;
1646535e831SStuart Henderson 		break;
1656535e831SStuart Henderson 	default:
1666535e831SStuart Henderson 		break;
1676535e831SStuart Henderson 	}
1686535e831SStuart Henderson 
1696535e831SStuart Henderson 	return wm_adsp_early_event(w, kcontrol, event);
1706535e831SStuart Henderson }
1716535e831SStuart Henderson 
cs47l92_outclk_ev(struct snd_soc_dapm_widget * w,struct snd_kcontrol * kcontrol,int event)1721094af11SCharles Keepax static int cs47l92_outclk_ev(struct snd_soc_dapm_widget *w,
1731094af11SCharles Keepax 			     struct snd_kcontrol *kcontrol,
1741094af11SCharles Keepax 			     int event)
1751094af11SCharles Keepax {
1761094af11SCharles Keepax 	struct snd_soc_component *component =
1771094af11SCharles Keepax 		snd_soc_dapm_to_component(w->dapm);
1781094af11SCharles Keepax 	struct cs47l92 *cs47l92 = snd_soc_component_get_drvdata(component);
1791094af11SCharles Keepax 	struct madera_priv *priv = &cs47l92->core;
1801094af11SCharles Keepax 	struct madera *madera = priv->madera;
1811094af11SCharles Keepax 	unsigned int val;
1821094af11SCharles Keepax 	int ret;
1831094af11SCharles Keepax 
1841094af11SCharles Keepax 	ret = regmap_read(madera->regmap, MADERA_OUTPUT_RATE_1, &val);
1851094af11SCharles Keepax 	if (ret) {
1861094af11SCharles Keepax 		dev_err(madera->dev, "Failed to read OUTCLK source: %d\n", ret);
1871094af11SCharles Keepax 		return ret;
1881094af11SCharles Keepax 	}
1891094af11SCharles Keepax 
1901094af11SCharles Keepax 	val &= MADERA_OUT_CLK_SRC_MASK;
1911094af11SCharles Keepax 
1921094af11SCharles Keepax 	switch (val) {
1931094af11SCharles Keepax 	case MADERA_OUTCLK_MCLK1:
1941094af11SCharles Keepax 	case MADERA_OUTCLK_MCLK2:
1951094af11SCharles Keepax 	case MADERA_OUTCLK_MCLK3:
1961094af11SCharles Keepax 		val -= (MADERA_OUTCLK_MCLK1 - MADERA_MCLK1);
1971094af11SCharles Keepax 
1981094af11SCharles Keepax 		switch (event) {
1991094af11SCharles Keepax 		case SND_SOC_DAPM_PRE_PMU:
2001094af11SCharles Keepax 			ret = clk_prepare_enable(madera->mclk[val].clk);
2011094af11SCharles Keepax 			if (ret)
2021094af11SCharles Keepax 				return ret;
2031094af11SCharles Keepax 			break;
2041094af11SCharles Keepax 		case SND_SOC_DAPM_POST_PMD:
2051094af11SCharles Keepax 			clk_disable_unprepare(madera->mclk[val].clk);
2061094af11SCharles Keepax 			break;
2071094af11SCharles Keepax 		default:
2081094af11SCharles Keepax 			break;
2091094af11SCharles Keepax 		}
2103371c6f9SGustavo A. R. Silva 		break;
2111094af11SCharles Keepax 	default:
2121094af11SCharles Keepax 		break;
2131094af11SCharles Keepax 	}
2141094af11SCharles Keepax 
2151094af11SCharles Keepax 	return madera_domain_clk_ev(w, kcontrol, event);
2161094af11SCharles Keepax }
2171094af11SCharles Keepax 
2186535e831SStuart Henderson #define CS47L92_NG_SRC(name, base) \
2196535e831SStuart Henderson 	SOC_SINGLE(name " NG HPOUT1L Switch",  base,  0, 1, 0), \
2206535e831SStuart Henderson 	SOC_SINGLE(name " NG HPOUT1R Switch",  base,  1, 1, 0), \
2216535e831SStuart Henderson 	SOC_SINGLE(name " NG HPOUT2L Switch",  base,  2, 1, 0), \
2226535e831SStuart Henderson 	SOC_SINGLE(name " NG HPOUT2R Switch",  base,  3, 1, 0), \
2236535e831SStuart Henderson 	SOC_SINGLE(name " NG HPOUT3L Switch",  base,  4, 1, 0), \
2246535e831SStuart Henderson 	SOC_SINGLE(name " NG HPOUT3R Switch",  base,  5, 1, 0), \
2256535e831SStuart Henderson 	SOC_SINGLE(name " NG SPKDAT1L Switch", base,  8, 1, 0), \
2266535e831SStuart Henderson 	SOC_SINGLE(name " NG SPKDAT1R Switch", base,  9, 1, 0)
2276535e831SStuart Henderson 
2286535e831SStuart Henderson static const struct snd_kcontrol_new cs47l92_snd_controls[] = {
2296535e831SStuart Henderson SOC_ENUM("IN1 OSR", madera_in_dmic_osr[0]),
2306535e831SStuart Henderson SOC_ENUM("IN2 OSR", madera_in_dmic_osr[1]),
2316535e831SStuart Henderson SOC_ENUM("IN3 OSR", madera_in_dmic_osr[2]),
2326535e831SStuart Henderson SOC_ENUM("IN4 OSR", madera_in_dmic_osr[3]),
2336535e831SStuart Henderson 
2346535e831SStuart Henderson SOC_SINGLE_RANGE_TLV("IN1L Volume", MADERA_IN1L_CONTROL,
2356535e831SStuart Henderson 		     MADERA_IN1L_PGA_VOL_SHIFT, 0x40, 0x5f, 0, madera_ana_tlv),
2366535e831SStuart Henderson SOC_SINGLE_RANGE_TLV("IN1R Volume", MADERA_IN1R_CONTROL,
2376535e831SStuart Henderson 		     MADERA_IN1R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, madera_ana_tlv),
2386535e831SStuart Henderson SOC_SINGLE_RANGE_TLV("IN2L Volume", MADERA_IN2L_CONTROL,
2396535e831SStuart Henderson 		     MADERA_IN2L_PGA_VOL_SHIFT, 0x40, 0x5f, 0, madera_ana_tlv),
2406535e831SStuart Henderson SOC_SINGLE_RANGE_TLV("IN2R Volume", MADERA_IN2R_CONTROL,
2416535e831SStuart Henderson 		     MADERA_IN2R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, madera_ana_tlv),
2426535e831SStuart Henderson 
2436535e831SStuart Henderson SOC_ENUM("IN HPF Cutoff Frequency", madera_in_hpf_cut_enum),
2446535e831SStuart Henderson 
2456535e831SStuart Henderson SOC_SINGLE_EXT("IN1L LP Switch", MADERA_ADC_DIGITAL_VOLUME_1L,
2466535e831SStuart Henderson 	       MADERA_IN1L_LP_MODE_SHIFT, 1, 0,
2476535e831SStuart Henderson 	       snd_soc_get_volsw, madera_lp_mode_put),
2486535e831SStuart Henderson SOC_SINGLE_EXT("IN1R LP Switch", MADERA_ADC_DIGITAL_VOLUME_1R,
2496535e831SStuart Henderson 	       MADERA_IN1L_LP_MODE_SHIFT, 1, 0,
2506535e831SStuart Henderson 	       snd_soc_get_volsw, madera_lp_mode_put),
2516535e831SStuart Henderson SOC_SINGLE_EXT("IN2L LP Switch", MADERA_ADC_DIGITAL_VOLUME_2L,
2526535e831SStuart Henderson 	       MADERA_IN1L_LP_MODE_SHIFT, 1, 0,
2536535e831SStuart Henderson 	       snd_soc_get_volsw, madera_lp_mode_put),
2546535e831SStuart Henderson SOC_SINGLE_EXT("IN2R LP Switch", MADERA_ADC_DIGITAL_VOLUME_2R,
2556535e831SStuart Henderson 	       MADERA_IN1L_LP_MODE_SHIFT, 1, 0,
2566535e831SStuart Henderson 	       snd_soc_get_volsw, madera_lp_mode_put),
2576535e831SStuart Henderson 
2586535e831SStuart Henderson SOC_SINGLE("IN1L HPF Switch", MADERA_IN1L_CONTROL,
2596535e831SStuart Henderson 	   MADERA_IN1L_HPF_SHIFT, 1, 0),
2606535e831SStuart Henderson SOC_SINGLE("IN1R HPF Switch", MADERA_IN1R_CONTROL,
2616535e831SStuart Henderson 	   MADERA_IN1R_HPF_SHIFT, 1, 0),
2626535e831SStuart Henderson SOC_SINGLE("IN2L HPF Switch", MADERA_IN2L_CONTROL,
2636535e831SStuart Henderson 	   MADERA_IN2L_HPF_SHIFT, 1, 0),
2646535e831SStuart Henderson SOC_SINGLE("IN2R HPF Switch", MADERA_IN2R_CONTROL,
2656535e831SStuart Henderson 	   MADERA_IN2R_HPF_SHIFT, 1, 0),
2666535e831SStuart Henderson SOC_SINGLE("IN3L HPF Switch", MADERA_IN3L_CONTROL,
2676535e831SStuart Henderson 	   MADERA_IN3L_HPF_SHIFT, 1, 0),
2686535e831SStuart Henderson SOC_SINGLE("IN3R HPF Switch", MADERA_IN3R_CONTROL,
2696535e831SStuart Henderson 	   MADERA_IN3R_HPF_SHIFT, 1, 0),
2706535e831SStuart Henderson SOC_SINGLE("IN4L HPF Switch", MADERA_IN4L_CONTROL,
2716535e831SStuart Henderson 	   MADERA_IN4L_HPF_SHIFT, 1, 0),
2726535e831SStuart Henderson SOC_SINGLE("IN4R HPF Switch", MADERA_IN4R_CONTROL,
2736535e831SStuart Henderson 	   MADERA_IN4R_HPF_SHIFT, 1, 0),
2746535e831SStuart Henderson 
2756535e831SStuart Henderson SOC_SINGLE_TLV("IN1L Digital Volume", MADERA_ADC_DIGITAL_VOLUME_1L,
2766535e831SStuart Henderson 	       MADERA_IN1L_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),
2776535e831SStuart Henderson SOC_SINGLE_TLV("IN1R Digital Volume", MADERA_ADC_DIGITAL_VOLUME_1R,
2786535e831SStuart Henderson 	       MADERA_IN1R_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),
2796535e831SStuart Henderson SOC_SINGLE_TLV("IN2L Digital Volume", MADERA_ADC_DIGITAL_VOLUME_2L,
2806535e831SStuart Henderson 	       MADERA_IN2L_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),
2816535e831SStuart Henderson SOC_SINGLE_TLV("IN2R Digital Volume", MADERA_ADC_DIGITAL_VOLUME_2R,
2826535e831SStuart Henderson 	       MADERA_IN2R_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),
2836535e831SStuart Henderson SOC_SINGLE_TLV("IN3L Digital Volume", MADERA_ADC_DIGITAL_VOLUME_3L,
2846535e831SStuart Henderson 	       MADERA_IN3L_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),
2856535e831SStuart Henderson SOC_SINGLE_TLV("IN3R Digital Volume", MADERA_ADC_DIGITAL_VOLUME_3R,
2866535e831SStuart Henderson 	       MADERA_IN3R_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),
2876535e831SStuart Henderson SOC_SINGLE_TLV("IN4L Digital Volume", MADERA_ADC_DIGITAL_VOLUME_4L,
2886535e831SStuart Henderson 	       MADERA_IN4L_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),
2896535e831SStuart Henderson SOC_SINGLE_TLV("IN4R Digital Volume", MADERA_ADC_DIGITAL_VOLUME_4R,
2906535e831SStuart Henderson 	       MADERA_IN4R_DIG_VOL_SHIFT, 0xbf, 0, madera_digital_tlv),
2916535e831SStuart Henderson 
2926535e831SStuart Henderson SOC_ENUM("Input Ramp Up", madera_in_vi_ramp),
2936535e831SStuart Henderson SOC_ENUM("Input Ramp Down", madera_in_vd_ramp),
2946535e831SStuart Henderson 
2956535e831SStuart Henderson MADERA_MIXER_CONTROLS("EQ1", MADERA_EQ1MIX_INPUT_1_SOURCE),
2966535e831SStuart Henderson MADERA_MIXER_CONTROLS("EQ2", MADERA_EQ2MIX_INPUT_1_SOURCE),
2976535e831SStuart Henderson MADERA_MIXER_CONTROLS("EQ3", MADERA_EQ3MIX_INPUT_1_SOURCE),
2986535e831SStuart Henderson MADERA_MIXER_CONTROLS("EQ4", MADERA_EQ4MIX_INPUT_1_SOURCE),
2996535e831SStuart Henderson 
3006535e831SStuart Henderson MADERA_EQ_CONTROL("EQ1 Coefficients", MADERA_EQ1_2),
3016535e831SStuart Henderson SOC_SINGLE_TLV("EQ1 B1 Volume", MADERA_EQ1_1, MADERA_EQ1_B1_GAIN_SHIFT,
3026535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3036535e831SStuart Henderson SOC_SINGLE_TLV("EQ1 B2 Volume", MADERA_EQ1_1, MADERA_EQ1_B2_GAIN_SHIFT,
3046535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3056535e831SStuart Henderson SOC_SINGLE_TLV("EQ1 B3 Volume", MADERA_EQ1_1, MADERA_EQ1_B3_GAIN_SHIFT,
3066535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3076535e831SStuart Henderson SOC_SINGLE_TLV("EQ1 B4 Volume", MADERA_EQ1_2, MADERA_EQ1_B4_GAIN_SHIFT,
3086535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3096535e831SStuart Henderson SOC_SINGLE_TLV("EQ1 B5 Volume", MADERA_EQ1_2, MADERA_EQ1_B5_GAIN_SHIFT,
3106535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3116535e831SStuart Henderson 
3126535e831SStuart Henderson MADERA_EQ_CONTROL("EQ2 Coefficients", MADERA_EQ2_2),
3136535e831SStuart Henderson SOC_SINGLE_TLV("EQ2 B1 Volume", MADERA_EQ2_1, MADERA_EQ2_B1_GAIN_SHIFT,
3146535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3156535e831SStuart Henderson SOC_SINGLE_TLV("EQ2 B2 Volume", MADERA_EQ2_1, MADERA_EQ2_B2_GAIN_SHIFT,
3166535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3176535e831SStuart Henderson SOC_SINGLE_TLV("EQ2 B3 Volume", MADERA_EQ2_1, MADERA_EQ2_B3_GAIN_SHIFT,
3186535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3196535e831SStuart Henderson SOC_SINGLE_TLV("EQ2 B4 Volume", MADERA_EQ2_2, MADERA_EQ2_B4_GAIN_SHIFT,
3206535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3216535e831SStuart Henderson SOC_SINGLE_TLV("EQ2 B5 Volume", MADERA_EQ2_2, MADERA_EQ2_B5_GAIN_SHIFT,
3226535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3236535e831SStuart Henderson 
3246535e831SStuart Henderson MADERA_EQ_CONTROL("EQ3 Coefficients", MADERA_EQ3_2),
3256535e831SStuart Henderson SOC_SINGLE_TLV("EQ3 B1 Volume", MADERA_EQ3_1, MADERA_EQ3_B1_GAIN_SHIFT,
3266535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3276535e831SStuart Henderson SOC_SINGLE_TLV("EQ3 B2 Volume", MADERA_EQ3_1, MADERA_EQ3_B2_GAIN_SHIFT,
3286535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3296535e831SStuart Henderson SOC_SINGLE_TLV("EQ3 B3 Volume", MADERA_EQ3_1, MADERA_EQ3_B3_GAIN_SHIFT,
3306535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3316535e831SStuart Henderson SOC_SINGLE_TLV("EQ3 B4 Volume", MADERA_EQ3_2, MADERA_EQ3_B4_GAIN_SHIFT,
3326535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3336535e831SStuart Henderson SOC_SINGLE_TLV("EQ3 B5 Volume", MADERA_EQ3_2, MADERA_EQ3_B5_GAIN_SHIFT,
3346535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3356535e831SStuart Henderson 
3366535e831SStuart Henderson MADERA_EQ_CONTROL("EQ4 Coefficients", MADERA_EQ4_2),
3376535e831SStuart Henderson SOC_SINGLE_TLV("EQ4 B1 Volume", MADERA_EQ4_1, MADERA_EQ4_B1_GAIN_SHIFT,
3386535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3396535e831SStuart Henderson SOC_SINGLE_TLV("EQ4 B2 Volume", MADERA_EQ4_1, MADERA_EQ4_B2_GAIN_SHIFT,
3406535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3416535e831SStuart Henderson SOC_SINGLE_TLV("EQ4 B3 Volume", MADERA_EQ4_1, MADERA_EQ4_B3_GAIN_SHIFT,
3426535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3436535e831SStuart Henderson SOC_SINGLE_TLV("EQ4 B4 Volume", MADERA_EQ4_2, MADERA_EQ4_B4_GAIN_SHIFT,
3446535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3456535e831SStuart Henderson SOC_SINGLE_TLV("EQ4 B5 Volume", MADERA_EQ4_2, MADERA_EQ4_B5_GAIN_SHIFT,
3466535e831SStuart Henderson 	       24, 0, madera_eq_tlv),
3476535e831SStuart Henderson 
3486535e831SStuart Henderson SOC_SINGLE("DAC High Performance Mode Switch", MADERA_OUTPUT_RATE_1,
3496535e831SStuart Henderson 	   MADERA_CP_DAC_MODE_SHIFT, 1, 0),
3506535e831SStuart Henderson 
3516535e831SStuart Henderson MADERA_MIXER_CONTROLS("DRC1L", MADERA_DRC1LMIX_INPUT_1_SOURCE),
3526535e831SStuart Henderson MADERA_MIXER_CONTROLS("DRC1R", MADERA_DRC1RMIX_INPUT_1_SOURCE),
3536535e831SStuart Henderson MADERA_MIXER_CONTROLS("DRC2L", MADERA_DRC2LMIX_INPUT_1_SOURCE),
3546535e831SStuart Henderson MADERA_MIXER_CONTROLS("DRC2R", MADERA_DRC2RMIX_INPUT_1_SOURCE),
3556535e831SStuart Henderson 
3566535e831SStuart Henderson SND_SOC_BYTES_MASK("DRC1", MADERA_DRC1_CTRL1, 5,
3576535e831SStuart Henderson 		   MADERA_DRC1R_ENA | MADERA_DRC1L_ENA),
3586535e831SStuart Henderson SND_SOC_BYTES_MASK("DRC2", MADERA_DRC2_CTRL1, 5,
3596535e831SStuart Henderson 		   MADERA_DRC2R_ENA | MADERA_DRC2L_ENA),
3606535e831SStuart Henderson 
3616535e831SStuart Henderson MADERA_MIXER_CONTROLS("LHPF1", MADERA_HPLP1MIX_INPUT_1_SOURCE),
3626535e831SStuart Henderson MADERA_MIXER_CONTROLS("LHPF2", MADERA_HPLP2MIX_INPUT_1_SOURCE),
3636535e831SStuart Henderson MADERA_MIXER_CONTROLS("LHPF3", MADERA_HPLP3MIX_INPUT_1_SOURCE),
3646535e831SStuart Henderson MADERA_MIXER_CONTROLS("LHPF4", MADERA_HPLP4MIX_INPUT_1_SOURCE),
3656535e831SStuart Henderson 
3666535e831SStuart Henderson MADERA_LHPF_CONTROL("LHPF1 Coefficients", MADERA_HPLPF1_2),
3676535e831SStuart Henderson MADERA_LHPF_CONTROL("LHPF2 Coefficients", MADERA_HPLPF2_2),
3686535e831SStuart Henderson MADERA_LHPF_CONTROL("LHPF3 Coefficients", MADERA_HPLPF3_2),
3696535e831SStuart Henderson MADERA_LHPF_CONTROL("LHPF4 Coefficients", MADERA_HPLPF4_2),
3706535e831SStuart Henderson 
3716535e831SStuart Henderson SOC_ENUM("LHPF1 Mode", madera_lhpf1_mode),
3726535e831SStuart Henderson SOC_ENUM("LHPF2 Mode", madera_lhpf2_mode),
3736535e831SStuart Henderson SOC_ENUM("LHPF3 Mode", madera_lhpf3_mode),
3746535e831SStuart Henderson SOC_ENUM("LHPF4 Mode", madera_lhpf4_mode),
3756535e831SStuart Henderson 
3766535e831SStuart Henderson MADERA_RATE_ENUM("ISRC1 FSL", madera_isrc_fsl[0]),
3776535e831SStuart Henderson MADERA_RATE_ENUM("ISRC2 FSL", madera_isrc_fsl[1]),
3786535e831SStuart Henderson MADERA_RATE_ENUM("ISRC1 FSH", madera_isrc_fsh[0]),
3796535e831SStuart Henderson MADERA_RATE_ENUM("ISRC2 FSH", madera_isrc_fsh[1]),
3806535e831SStuart Henderson MADERA_RATE_ENUM("ASRC1 Rate 1", madera_asrc1_bidir_rate[0]),
3816535e831SStuart Henderson MADERA_RATE_ENUM("ASRC1 Rate 2", madera_asrc1_bidir_rate[1]),
3826535e831SStuart Henderson 
3836535e831SStuart Henderson WM_ADSP2_PRELOAD_SWITCH("DSP1", 1),
3846535e831SStuart Henderson 
3856535e831SStuart Henderson MADERA_MIXER_CONTROLS("DSP1L", MADERA_DSP1LMIX_INPUT_1_SOURCE),
3866535e831SStuart Henderson MADERA_MIXER_CONTROLS("DSP1R", MADERA_DSP1RMIX_INPUT_1_SOURCE),
3876535e831SStuart Henderson 
3886535e831SStuart Henderson SOC_SINGLE_TLV("Noise Generator Volume", MADERA_COMFORT_NOISE_GENERATOR,
3896535e831SStuart Henderson 	       MADERA_NOISE_GEN_GAIN_SHIFT, 0x16, 0, madera_noise_tlv),
3906535e831SStuart Henderson 
3916535e831SStuart Henderson MADERA_MIXER_CONTROLS("HPOUT1L", MADERA_OUT1LMIX_INPUT_1_SOURCE),
3926535e831SStuart Henderson MADERA_MIXER_CONTROLS("HPOUT1R", MADERA_OUT1RMIX_INPUT_1_SOURCE),
3936535e831SStuart Henderson MADERA_MIXER_CONTROLS("HPOUT2L", MADERA_OUT2LMIX_INPUT_1_SOURCE),
3946535e831SStuart Henderson MADERA_MIXER_CONTROLS("HPOUT2R", MADERA_OUT2RMIX_INPUT_1_SOURCE),
3956535e831SStuart Henderson MADERA_MIXER_CONTROLS("HPOUT3L", MADERA_OUT3LMIX_INPUT_1_SOURCE),
3966535e831SStuart Henderson MADERA_MIXER_CONTROLS("HPOUT3R", MADERA_OUT3RMIX_INPUT_1_SOURCE),
3976535e831SStuart Henderson MADERA_MIXER_CONTROLS("SPKDAT1L", MADERA_OUT5LMIX_INPUT_1_SOURCE),
3986535e831SStuart Henderson MADERA_MIXER_CONTROLS("SPKDAT1R", MADERA_OUT5RMIX_INPUT_1_SOURCE),
3996535e831SStuart Henderson 
4006535e831SStuart Henderson SOC_SINGLE("HPOUT1 SC Protect Switch", MADERA_HP1_SHORT_CIRCUIT_CTRL,
4016535e831SStuart Henderson 	   MADERA_HP1_SC_ENA_SHIFT, 1, 0),
4026535e831SStuart Henderson SOC_SINGLE("HPOUT2 SC Protect Switch", MADERA_HP2_SHORT_CIRCUIT_CTRL,
4036535e831SStuart Henderson 	   MADERA_HP2_SC_ENA_SHIFT, 1, 0),
4046535e831SStuart Henderson SOC_SINGLE("HPOUT3 SC Protect Switch", MADERA_HP3_SHORT_CIRCUIT_CTRL,
4056535e831SStuart Henderson 	   MADERA_HP3_SC_ENA_SHIFT, 1, 0),
4066535e831SStuart Henderson 
4076535e831SStuart Henderson SOC_SINGLE("SPKDAT1 High Performance Switch", MADERA_OUTPUT_PATH_CONFIG_5L,
4086535e831SStuart Henderson 	   MADERA_OUT5_OSR_SHIFT, 1, 0),
4096535e831SStuart Henderson 
4106535e831SStuart Henderson SOC_DOUBLE_R("HPOUT1 Digital Switch", MADERA_DAC_DIGITAL_VOLUME_1L,
4116535e831SStuart Henderson 	     MADERA_DAC_DIGITAL_VOLUME_1R, MADERA_OUT1L_MUTE_SHIFT, 1, 1),
4126535e831SStuart Henderson SOC_DOUBLE_R("HPOUT2 Digital Switch", MADERA_DAC_DIGITAL_VOLUME_2L,
4136535e831SStuart Henderson 	     MADERA_DAC_DIGITAL_VOLUME_2R, MADERA_OUT2L_MUTE_SHIFT, 1, 1),
4146535e831SStuart Henderson SOC_DOUBLE_R("HPOUT3 Digital Switch", MADERA_DAC_DIGITAL_VOLUME_3L,
4156535e831SStuart Henderson 	     MADERA_DAC_DIGITAL_VOLUME_3R, MADERA_OUT3L_MUTE_SHIFT, 1, 1),
4166535e831SStuart Henderson SOC_DOUBLE_R("SPKDAT1 Digital Switch", MADERA_DAC_DIGITAL_VOLUME_5L,
4176535e831SStuart Henderson 	     MADERA_DAC_DIGITAL_VOLUME_5R, MADERA_OUT5L_MUTE_SHIFT, 1, 1),
4186535e831SStuart Henderson 
4196535e831SStuart Henderson SOC_DOUBLE_R_TLV("HPOUT1 Digital Volume", MADERA_DAC_DIGITAL_VOLUME_1L,
4206535e831SStuart Henderson 		 MADERA_DAC_DIGITAL_VOLUME_1R, MADERA_OUT1L_VOL_SHIFT,
4216535e831SStuart Henderson 		 0xbf, 0, madera_digital_tlv),
4226535e831SStuart Henderson SOC_DOUBLE_R_TLV("HPOUT2 Digital Volume", MADERA_DAC_DIGITAL_VOLUME_2L,
4236535e831SStuart Henderson 		 MADERA_DAC_DIGITAL_VOLUME_2R, MADERA_OUT2L_VOL_SHIFT,
4246535e831SStuart Henderson 		 0xbf, 0, madera_digital_tlv),
4256535e831SStuart Henderson SOC_DOUBLE_R_TLV("HPOUT3 Digital Volume", MADERA_DAC_DIGITAL_VOLUME_3L,
4266535e831SStuart Henderson 		 MADERA_DAC_DIGITAL_VOLUME_3R, MADERA_OUT3L_VOL_SHIFT,
4276535e831SStuart Henderson 		 0xbf, 0, madera_digital_tlv),
4286535e831SStuart Henderson SOC_DOUBLE_R_TLV("SPKDAT1 Digital Volume", MADERA_DAC_DIGITAL_VOLUME_5L,
4296535e831SStuart Henderson 		 MADERA_DAC_DIGITAL_VOLUME_5R, MADERA_OUT5L_VOL_SHIFT,
4306535e831SStuart Henderson 		 0xbf, 0, madera_digital_tlv),
4316535e831SStuart Henderson 
4326535e831SStuart Henderson SOC_DOUBLE("SPKDAT1 Switch", MADERA_PDM_SPK1_CTRL_1, MADERA_SPK1L_MUTE_SHIFT,
4336535e831SStuart Henderson 	   MADERA_SPK1R_MUTE_SHIFT, 1, 1),
4346535e831SStuart Henderson 
4356535e831SStuart Henderson SOC_ENUM("Output Ramp Up", madera_out_vi_ramp),
4366535e831SStuart Henderson SOC_ENUM("Output Ramp Down", madera_out_vd_ramp),
4376535e831SStuart Henderson 
4386535e831SStuart Henderson SOC_SINGLE("Noise Gate Switch", MADERA_NOISE_GATE_CONTROL,
4396535e831SStuart Henderson 	   MADERA_NGATE_ENA_SHIFT, 1, 0),
4406535e831SStuart Henderson SOC_SINGLE_TLV("Noise Gate Threshold Volume", MADERA_NOISE_GATE_CONTROL,
4416535e831SStuart Henderson 	       MADERA_NGATE_THR_SHIFT, 7, 1, madera_ng_tlv),
4426535e831SStuart Henderson SOC_ENUM("Noise Gate Hold", madera_ng_hold),
4436535e831SStuart Henderson 
4446535e831SStuart Henderson SOC_ENUM_EXT("DFC1RX Width", madera_dfc_width[0],
4456535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4466535e831SStuart Henderson SOC_ENUM_EXT("DFC1RX Type", madera_dfc_type[0],
4476535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4486535e831SStuart Henderson SOC_ENUM_EXT("DFC1TX Width", madera_dfc_width[1],
4496535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4506535e831SStuart Henderson SOC_ENUM_EXT("DFC1TX Type", madera_dfc_type[1],
4516535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4526535e831SStuart Henderson SOC_ENUM_EXT("DFC2RX Width", madera_dfc_width[2],
4536535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4546535e831SStuart Henderson SOC_ENUM_EXT("DFC2RX Type", madera_dfc_type[2],
4556535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4566535e831SStuart Henderson SOC_ENUM_EXT("DFC2TX Width", madera_dfc_width[3],
4576535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4586535e831SStuart Henderson SOC_ENUM_EXT("DFC2TX Type", madera_dfc_type[3],
4596535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4606535e831SStuart Henderson SOC_ENUM_EXT("DFC3RX Width", madera_dfc_width[4],
4616535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4626535e831SStuart Henderson SOC_ENUM_EXT("DFC3RX Type", madera_dfc_type[4],
4636535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4646535e831SStuart Henderson SOC_ENUM_EXT("DFC3TX Width", madera_dfc_width[5],
4656535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4666535e831SStuart Henderson SOC_ENUM_EXT("DFC3TX Type", madera_dfc_type[5],
4676535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4686535e831SStuart Henderson SOC_ENUM_EXT("DFC4RX Width", madera_dfc_width[6],
4696535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4706535e831SStuart Henderson SOC_ENUM_EXT("DFC4RX Type", madera_dfc_type[6],
4716535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4726535e831SStuart Henderson SOC_ENUM_EXT("DFC4TX Width", madera_dfc_width[7],
4736535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4746535e831SStuart Henderson SOC_ENUM_EXT("DFC4TX Type", madera_dfc_type[7],
4756535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4766535e831SStuart Henderson SOC_ENUM_EXT("DFC5RX Width", madera_dfc_width[8],
4776535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4786535e831SStuart Henderson SOC_ENUM_EXT("DFC5RX Type", madera_dfc_type[8],
4796535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4806535e831SStuart Henderson SOC_ENUM_EXT("DFC5TX Width", madera_dfc_width[9],
4816535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4826535e831SStuart Henderson SOC_ENUM_EXT("DFC5TX Type", madera_dfc_type[9],
4836535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4846535e831SStuart Henderson SOC_ENUM_EXT("DFC6RX Width", madera_dfc_width[10],
4856535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4866535e831SStuart Henderson SOC_ENUM_EXT("DFC6RX Type", madera_dfc_type[10],
4876535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4886535e831SStuart Henderson SOC_ENUM_EXT("DFC6TX Width", madera_dfc_width[11],
4896535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4906535e831SStuart Henderson SOC_ENUM_EXT("DFC6TX Type", madera_dfc_type[11],
4916535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4926535e831SStuart Henderson SOC_ENUM_EXT("DFC7RX Width", madera_dfc_width[12],
4936535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4946535e831SStuart Henderson SOC_ENUM_EXT("DFC7RX Type", madera_dfc_type[12],
4956535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4966535e831SStuart Henderson SOC_ENUM_EXT("DFC7TX Width", madera_dfc_width[13],
4976535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
4986535e831SStuart Henderson SOC_ENUM_EXT("DFC7TX Type", madera_dfc_type[13],
4996535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
5006535e831SStuart Henderson SOC_ENUM_EXT("DFC8RX Width", madera_dfc_width[14],
5016535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
5026535e831SStuart Henderson SOC_ENUM_EXT("DFC8RX Type", madera_dfc_type[14],
5036535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
5046535e831SStuart Henderson SOC_ENUM_EXT("DFC8TX Width", madera_dfc_width[15],
5056535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
5066535e831SStuart Henderson SOC_ENUM_EXT("DFC8TX Type", madera_dfc_type[15],
5076535e831SStuart Henderson 	     snd_soc_get_enum_double, madera_dfc_put),
5086535e831SStuart Henderson 
5096535e831SStuart Henderson CS47L92_NG_SRC("HPOUT1L", MADERA_NOISE_GATE_SELECT_1L),
5106535e831SStuart Henderson CS47L92_NG_SRC("HPOUT1R", MADERA_NOISE_GATE_SELECT_1R),
5116535e831SStuart Henderson CS47L92_NG_SRC("HPOUT2L", MADERA_NOISE_GATE_SELECT_2L),
5126535e831SStuart Henderson CS47L92_NG_SRC("HPOUT2R", MADERA_NOISE_GATE_SELECT_2R),
5136535e831SStuart Henderson CS47L92_NG_SRC("HPOUT3L", MADERA_NOISE_GATE_SELECT_3L),
5146535e831SStuart Henderson CS47L92_NG_SRC("HPOUT3R", MADERA_NOISE_GATE_SELECT_3R),
5156535e831SStuart Henderson CS47L92_NG_SRC("SPKDAT1L", MADERA_NOISE_GATE_SELECT_5L),
5166535e831SStuart Henderson CS47L92_NG_SRC("SPKDAT1R", MADERA_NOISE_GATE_SELECT_5R),
5176535e831SStuart Henderson 
5186535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF1TX1", MADERA_AIF1TX1MIX_INPUT_1_SOURCE),
5196535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF1TX2", MADERA_AIF1TX2MIX_INPUT_1_SOURCE),
5206535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF1TX3", MADERA_AIF1TX3MIX_INPUT_1_SOURCE),
5216535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF1TX4", MADERA_AIF1TX4MIX_INPUT_1_SOURCE),
5226535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF1TX5", MADERA_AIF1TX5MIX_INPUT_1_SOURCE),
5236535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF1TX6", MADERA_AIF1TX6MIX_INPUT_1_SOURCE),
5246535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF1TX7", MADERA_AIF1TX7MIX_INPUT_1_SOURCE),
5256535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF1TX8", MADERA_AIF1TX8MIX_INPUT_1_SOURCE),
5266535e831SStuart Henderson 
5276535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF2TX1", MADERA_AIF2TX1MIX_INPUT_1_SOURCE),
5286535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF2TX2", MADERA_AIF2TX2MIX_INPUT_1_SOURCE),
5296535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF2TX3", MADERA_AIF2TX3MIX_INPUT_1_SOURCE),
5306535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF2TX4", MADERA_AIF2TX4MIX_INPUT_1_SOURCE),
5316535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF2TX5", MADERA_AIF2TX5MIX_INPUT_1_SOURCE),
5326535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF2TX6", MADERA_AIF2TX6MIX_INPUT_1_SOURCE),
5336535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF2TX7", MADERA_AIF2TX7MIX_INPUT_1_SOURCE),
5346535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF2TX8", MADERA_AIF2TX8MIX_INPUT_1_SOURCE),
5356535e831SStuart Henderson 
5366535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF3TX1", MADERA_AIF3TX1MIX_INPUT_1_SOURCE),
5376535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF3TX2", MADERA_AIF3TX2MIX_INPUT_1_SOURCE),
5386535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF3TX3", MADERA_AIF3TX3MIX_INPUT_1_SOURCE),
5396535e831SStuart Henderson MADERA_MIXER_CONTROLS("AIF3TX4", MADERA_AIF3TX4MIX_INPUT_1_SOURCE),
5406535e831SStuart Henderson 
5416535e831SStuart Henderson MADERA_MIXER_CONTROLS("SLIMTX1", MADERA_SLIMTX1MIX_INPUT_1_SOURCE),
5426535e831SStuart Henderson MADERA_MIXER_CONTROLS("SLIMTX2", MADERA_SLIMTX2MIX_INPUT_1_SOURCE),
5436535e831SStuart Henderson MADERA_MIXER_CONTROLS("SLIMTX3", MADERA_SLIMTX3MIX_INPUT_1_SOURCE),
5446535e831SStuart Henderson MADERA_MIXER_CONTROLS("SLIMTX4", MADERA_SLIMTX4MIX_INPUT_1_SOURCE),
5456535e831SStuart Henderson MADERA_MIXER_CONTROLS("SLIMTX5", MADERA_SLIMTX5MIX_INPUT_1_SOURCE),
5466535e831SStuart Henderson MADERA_MIXER_CONTROLS("SLIMTX6", MADERA_SLIMTX6MIX_INPUT_1_SOURCE),
5476535e831SStuart Henderson MADERA_MIXER_CONTROLS("SLIMTX7", MADERA_SLIMTX7MIX_INPUT_1_SOURCE),
5486535e831SStuart Henderson MADERA_MIXER_CONTROLS("SLIMTX8", MADERA_SLIMTX8MIX_INPUT_1_SOURCE),
5496535e831SStuart Henderson 
5506535e831SStuart Henderson MADERA_GAINMUX_CONTROLS("SPDIFTX1", MADERA_SPDIF1TX1MIX_INPUT_1_SOURCE),
5516535e831SStuart Henderson MADERA_GAINMUX_CONTROLS("SPDIFTX2", MADERA_SPDIF1TX2MIX_INPUT_1_SOURCE),
5526535e831SStuart Henderson 
5536535e831SStuart Henderson WM_ADSP_FW_CONTROL("DSP1", 0),
5546535e831SStuart Henderson };
5556535e831SStuart Henderson 
5566535e831SStuart Henderson MADERA_MIXER_ENUMS(EQ1, MADERA_EQ1MIX_INPUT_1_SOURCE);
5576535e831SStuart Henderson MADERA_MIXER_ENUMS(EQ2, MADERA_EQ2MIX_INPUT_1_SOURCE);
5586535e831SStuart Henderson MADERA_MIXER_ENUMS(EQ3, MADERA_EQ3MIX_INPUT_1_SOURCE);
5596535e831SStuart Henderson MADERA_MIXER_ENUMS(EQ4, MADERA_EQ4MIX_INPUT_1_SOURCE);
5606535e831SStuart Henderson 
5616535e831SStuart Henderson MADERA_MIXER_ENUMS(DRC1L, MADERA_DRC1LMIX_INPUT_1_SOURCE);
5626535e831SStuart Henderson MADERA_MIXER_ENUMS(DRC1R, MADERA_DRC1RMIX_INPUT_1_SOURCE);
5636535e831SStuart Henderson MADERA_MIXER_ENUMS(DRC2L, MADERA_DRC2LMIX_INPUT_1_SOURCE);
5646535e831SStuart Henderson MADERA_MIXER_ENUMS(DRC2R, MADERA_DRC2RMIX_INPUT_1_SOURCE);
5656535e831SStuart Henderson 
5666535e831SStuart Henderson MADERA_MIXER_ENUMS(LHPF1, MADERA_HPLP1MIX_INPUT_1_SOURCE);
5676535e831SStuart Henderson MADERA_MIXER_ENUMS(LHPF2, MADERA_HPLP2MIX_INPUT_1_SOURCE);
5686535e831SStuart Henderson MADERA_MIXER_ENUMS(LHPF3, MADERA_HPLP3MIX_INPUT_1_SOURCE);
5696535e831SStuart Henderson MADERA_MIXER_ENUMS(LHPF4, MADERA_HPLP4MIX_INPUT_1_SOURCE);
5706535e831SStuart Henderson 
5716535e831SStuart Henderson MADERA_MIXER_ENUMS(DSP1L, MADERA_DSP1LMIX_INPUT_1_SOURCE);
5726535e831SStuart Henderson MADERA_MIXER_ENUMS(DSP1R, MADERA_DSP1RMIX_INPUT_1_SOURCE);
5736535e831SStuart Henderson MADERA_DSP_AUX_ENUMS(DSP1, MADERA_DSP1AUX1MIX_INPUT_1_SOURCE);
5746535e831SStuart Henderson 
5756535e831SStuart Henderson MADERA_MIXER_ENUMS(PWM1, MADERA_PWM1MIX_INPUT_1_SOURCE);
5766535e831SStuart Henderson MADERA_MIXER_ENUMS(PWM2, MADERA_PWM2MIX_INPUT_1_SOURCE);
5776535e831SStuart Henderson 
5786535e831SStuart Henderson MADERA_MIXER_ENUMS(OUT1L, MADERA_OUT1LMIX_INPUT_1_SOURCE);
5796535e831SStuart Henderson MADERA_MIXER_ENUMS(OUT1R, MADERA_OUT1RMIX_INPUT_1_SOURCE);
5806535e831SStuart Henderson MADERA_MIXER_ENUMS(OUT2L, MADERA_OUT2LMIX_INPUT_1_SOURCE);
5816535e831SStuart Henderson MADERA_MIXER_ENUMS(OUT2R, MADERA_OUT2RMIX_INPUT_1_SOURCE);
5826535e831SStuart Henderson MADERA_MIXER_ENUMS(OUT3L, MADERA_OUT3LMIX_INPUT_1_SOURCE);
5836535e831SStuart Henderson MADERA_MIXER_ENUMS(OUT3R, MADERA_OUT3RMIX_INPUT_1_SOURCE);
5846535e831SStuart Henderson MADERA_MIXER_ENUMS(SPKDAT1L, MADERA_OUT5LMIX_INPUT_1_SOURCE);
5856535e831SStuart Henderson MADERA_MIXER_ENUMS(SPKDAT1R, MADERA_OUT5RMIX_INPUT_1_SOURCE);
5866535e831SStuart Henderson 
5876535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF1TX1, MADERA_AIF1TX1MIX_INPUT_1_SOURCE);
5886535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF1TX2, MADERA_AIF1TX2MIX_INPUT_1_SOURCE);
5896535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF1TX3, MADERA_AIF1TX3MIX_INPUT_1_SOURCE);
5906535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF1TX4, MADERA_AIF1TX4MIX_INPUT_1_SOURCE);
5916535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF1TX5, MADERA_AIF1TX5MIX_INPUT_1_SOURCE);
5926535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF1TX6, MADERA_AIF1TX6MIX_INPUT_1_SOURCE);
5936535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF1TX7, MADERA_AIF1TX7MIX_INPUT_1_SOURCE);
5946535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF1TX8, MADERA_AIF1TX8MIX_INPUT_1_SOURCE);
5956535e831SStuart Henderson 
5966535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF2TX1, MADERA_AIF2TX1MIX_INPUT_1_SOURCE);
5976535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF2TX2, MADERA_AIF2TX2MIX_INPUT_1_SOURCE);
5986535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF2TX3, MADERA_AIF2TX3MIX_INPUT_1_SOURCE);
5996535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF2TX4, MADERA_AIF2TX4MIX_INPUT_1_SOURCE);
6006535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF2TX5, MADERA_AIF2TX5MIX_INPUT_1_SOURCE);
6016535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF2TX6, MADERA_AIF2TX6MIX_INPUT_1_SOURCE);
6026535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF2TX7, MADERA_AIF2TX7MIX_INPUT_1_SOURCE);
6036535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF2TX8, MADERA_AIF2TX8MIX_INPUT_1_SOURCE);
6046535e831SStuart Henderson 
6056535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF3TX1, MADERA_AIF3TX1MIX_INPUT_1_SOURCE);
6066535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF3TX2, MADERA_AIF3TX2MIX_INPUT_1_SOURCE);
6076535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF3TX3, MADERA_AIF3TX3MIX_INPUT_1_SOURCE);
6086535e831SStuart Henderson MADERA_MIXER_ENUMS(AIF3TX4, MADERA_AIF3TX4MIX_INPUT_1_SOURCE);
6096535e831SStuart Henderson 
6106535e831SStuart Henderson MADERA_MIXER_ENUMS(SLIMTX1, MADERA_SLIMTX1MIX_INPUT_1_SOURCE);
6116535e831SStuart Henderson MADERA_MIXER_ENUMS(SLIMTX2, MADERA_SLIMTX2MIX_INPUT_1_SOURCE);
6126535e831SStuart Henderson MADERA_MIXER_ENUMS(SLIMTX3, MADERA_SLIMTX3MIX_INPUT_1_SOURCE);
6136535e831SStuart Henderson MADERA_MIXER_ENUMS(SLIMTX4, MADERA_SLIMTX4MIX_INPUT_1_SOURCE);
6146535e831SStuart Henderson MADERA_MIXER_ENUMS(SLIMTX5, MADERA_SLIMTX5MIX_INPUT_1_SOURCE);
6156535e831SStuart Henderson MADERA_MIXER_ENUMS(SLIMTX6, MADERA_SLIMTX6MIX_INPUT_1_SOURCE);
6166535e831SStuart Henderson MADERA_MIXER_ENUMS(SLIMTX7, MADERA_SLIMTX7MIX_INPUT_1_SOURCE);
6176535e831SStuart Henderson MADERA_MIXER_ENUMS(SLIMTX8, MADERA_SLIMTX8MIX_INPUT_1_SOURCE);
6186535e831SStuart Henderson 
6196535e831SStuart Henderson MADERA_MUX_ENUMS(SPD1TX1, MADERA_SPDIF1TX1MIX_INPUT_1_SOURCE);
6206535e831SStuart Henderson MADERA_MUX_ENUMS(SPD1TX2, MADERA_SPDIF1TX2MIX_INPUT_1_SOURCE);
6216535e831SStuart Henderson 
6226535e831SStuart Henderson MADERA_MUX_ENUMS(ASRC1IN1L, MADERA_ASRC1_1LMIX_INPUT_1_SOURCE);
6236535e831SStuart Henderson MADERA_MUX_ENUMS(ASRC1IN1R, MADERA_ASRC1_1RMIX_INPUT_1_SOURCE);
6246535e831SStuart Henderson MADERA_MUX_ENUMS(ASRC1IN2L, MADERA_ASRC1_2LMIX_INPUT_1_SOURCE);
6256535e831SStuart Henderson MADERA_MUX_ENUMS(ASRC1IN2R, MADERA_ASRC1_2RMIX_INPUT_1_SOURCE);
6266535e831SStuart Henderson 
6276535e831SStuart Henderson MADERA_MUX_ENUMS(ISRC1INT1, MADERA_ISRC1INT1MIX_INPUT_1_SOURCE);
6286535e831SStuart Henderson MADERA_MUX_ENUMS(ISRC1INT2, MADERA_ISRC1INT2MIX_INPUT_1_SOURCE);
6296535e831SStuart Henderson 
6306535e831SStuart Henderson MADERA_MUX_ENUMS(ISRC1DEC1, MADERA_ISRC1DEC1MIX_INPUT_1_SOURCE);
6316535e831SStuart Henderson MADERA_MUX_ENUMS(ISRC1DEC2, MADERA_ISRC1DEC2MIX_INPUT_1_SOURCE);
6326535e831SStuart Henderson 
6336535e831SStuart Henderson MADERA_MUX_ENUMS(ISRC2INT1, MADERA_ISRC2INT1MIX_INPUT_1_SOURCE);
6346535e831SStuart Henderson MADERA_MUX_ENUMS(ISRC2INT2, MADERA_ISRC2INT2MIX_INPUT_1_SOURCE);
6356535e831SStuart Henderson 
6366535e831SStuart Henderson MADERA_MUX_ENUMS(ISRC2DEC1, MADERA_ISRC2DEC1MIX_INPUT_1_SOURCE);
6376535e831SStuart Henderson MADERA_MUX_ENUMS(ISRC2DEC2, MADERA_ISRC2DEC2MIX_INPUT_1_SOURCE);
6386535e831SStuart Henderson 
6396535e831SStuart Henderson MADERA_MUX_ENUMS(DFC1, MADERA_DFC1MIX_INPUT_1_SOURCE);
6406535e831SStuart Henderson MADERA_MUX_ENUMS(DFC2, MADERA_DFC2MIX_INPUT_1_SOURCE);
6416535e831SStuart Henderson MADERA_MUX_ENUMS(DFC3, MADERA_DFC3MIX_INPUT_1_SOURCE);
6426535e831SStuart Henderson MADERA_MUX_ENUMS(DFC4, MADERA_DFC4MIX_INPUT_1_SOURCE);
6436535e831SStuart Henderson MADERA_MUX_ENUMS(DFC5, MADERA_DFC5MIX_INPUT_1_SOURCE);
6446535e831SStuart Henderson MADERA_MUX_ENUMS(DFC6, MADERA_DFC6MIX_INPUT_1_SOURCE);
6456535e831SStuart Henderson MADERA_MUX_ENUMS(DFC7, MADERA_DFC7MIX_INPUT_1_SOURCE);
6466535e831SStuart Henderson MADERA_MUX_ENUMS(DFC8, MADERA_DFC8MIX_INPUT_1_SOURCE);
6476535e831SStuart Henderson 
6486535e831SStuart Henderson static const char * const cs47l92_aec_loopback_texts[] = {
6496535e831SStuart Henderson 	"HPOUT1L", "HPOUT1R", "HPOUT2L", "HPOUT2R", "HPOUT3L", "HPOUT3R",
6506535e831SStuart Henderson 	"SPKDAT1L", "SPKDAT1R",
6516535e831SStuart Henderson };
6526535e831SStuart Henderson 
6536535e831SStuart Henderson static const unsigned int cs47l92_aec_loopback_values[] = {
6546535e831SStuart Henderson 	0, 1, 2, 3, 4, 5, 8, 9
6556535e831SStuart Henderson };
6566535e831SStuart Henderson 
6576535e831SStuart Henderson static const struct soc_enum cs47l92_aec_loopback =
6586535e831SStuart Henderson 	SOC_VALUE_ENUM_SINGLE(MADERA_DAC_AEC_CONTROL_1,
6596535e831SStuart Henderson 			      MADERA_AEC1_LOOPBACK_SRC_SHIFT, 0xf,
6606535e831SStuart Henderson 			      ARRAY_SIZE(cs47l92_aec_loopback_texts),
6616535e831SStuart Henderson 			      cs47l92_aec_loopback_texts,
6626535e831SStuart Henderson 			      cs47l92_aec_loopback_values);
6636535e831SStuart Henderson 
6646535e831SStuart Henderson static const struct snd_kcontrol_new cs47l92_aec_loopback_mux =
6656535e831SStuart Henderson 	SOC_DAPM_ENUM("AEC1 Loopback", cs47l92_aec_loopback);
6666535e831SStuart Henderson 
6676535e831SStuart Henderson static const struct snd_soc_dapm_widget cs47l92_dapm_widgets[] = {
6686535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("SYSCLK", MADERA_SYSTEM_CLOCK_1, MADERA_SYSCLK_ENA_SHIFT,
6696535e831SStuart Henderson 		    0, madera_sysclk_ev,
6701094af11SCharles Keepax 		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
6711094af11SCharles Keepax 		    SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
6726535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("ASYNCCLK", MADERA_ASYNC_CLOCK_1,
6731094af11SCharles Keepax 		    MADERA_ASYNC_CLK_ENA_SHIFT, 0, madera_clk_ev,
6741094af11SCharles Keepax 		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
6756535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("OPCLK", MADERA_OUTPUT_SYSTEM_CLOCK,
6766535e831SStuart Henderson 		    MADERA_OPCLK_ENA_SHIFT, 0, NULL, 0),
6776535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("ASYNCOPCLK", MADERA_OUTPUT_ASYNC_CLOCK,
6786535e831SStuart Henderson 		    MADERA_OPCLK_ASYNC_ENA_SHIFT, 0, NULL, 0),
6791094af11SCharles Keepax SND_SOC_DAPM_SUPPLY("DSPCLK", MADERA_DSP_CLOCK_1, MADERA_DSP_CLK_ENA_SHIFT,
6801094af11SCharles Keepax 		    0, madera_clk_ev,
6811094af11SCharles Keepax 		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
6826535e831SStuart Henderson 
6836535e831SStuart Henderson SND_SOC_DAPM_REGULATOR_SUPPLY("CPVDD1", 20, 0),
6846535e831SStuart Henderson SND_SOC_DAPM_REGULATOR_SUPPLY("CPVDD2", 20, 0),
6856535e831SStuart Henderson SND_SOC_DAPM_REGULATOR_SUPPLY("MICVDD", 0, SND_SOC_DAPM_REGULATOR_BYPASS),
6866535e831SStuart Henderson 
6876535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("MICBIAS1", MADERA_MIC_BIAS_CTRL_1,
6886535e831SStuart Henderson 		    MADERA_MICB1_ENA_SHIFT, 0, NULL, 0),
6896535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("MICBIAS2", MADERA_MIC_BIAS_CTRL_2,
6906535e831SStuart Henderson 		    MADERA_MICB1_ENA_SHIFT, 0, NULL, 0),
6916535e831SStuart Henderson 
6926535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("MICBIAS1A", MADERA_MIC_BIAS_CTRL_5,
6936535e831SStuart Henderson 		    MADERA_MICB1A_ENA_SHIFT, 0, NULL, 0),
6946535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("MICBIAS1B", MADERA_MIC_BIAS_CTRL_5,
6956535e831SStuart Henderson 		    MADERA_MICB1B_ENA_SHIFT, 0, NULL, 0),
6966535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("MICBIAS1C", MADERA_MIC_BIAS_CTRL_5,
6976535e831SStuart Henderson 		    MADERA_MICB1C_ENA_SHIFT, 0, NULL, 0),
6986535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("MICBIAS1D", MADERA_MIC_BIAS_CTRL_5,
6996535e831SStuart Henderson 		    MADERA_MICB1D_ENA_SHIFT, 0, NULL, 0),
7006535e831SStuart Henderson 
7016535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("MICBIAS2A", MADERA_MIC_BIAS_CTRL_6,
7026535e831SStuart Henderson 		    MADERA_MICB2A_ENA_SHIFT, 0, NULL, 0),
7036535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("MICBIAS2B", MADERA_MIC_BIAS_CTRL_6,
7046535e831SStuart Henderson 		    MADERA_MICB2B_ENA_SHIFT, 0, NULL, 0),
7056535e831SStuart Henderson 
7066535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("FXCLK", SND_SOC_NOPM,
7076535e831SStuart Henderson 		    MADERA_DOM_GRP_FX, 0,
7086535e831SStuart Henderson 		    madera_domain_clk_ev,
7096535e831SStuart Henderson 		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
7106535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("ASRC1CLK", SND_SOC_NOPM,
7116535e831SStuart Henderson 		    MADERA_DOM_GRP_ASRC1, 0,
7126535e831SStuart Henderson 		    madera_domain_clk_ev,
7136535e831SStuart Henderson 		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
7146535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("ISRC1CLK", SND_SOC_NOPM,
7156535e831SStuart Henderson 		    MADERA_DOM_GRP_ISRC1, 0,
7166535e831SStuart Henderson 		    madera_domain_clk_ev,
7176535e831SStuart Henderson 		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
7186535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("ISRC2CLK", SND_SOC_NOPM,
7196535e831SStuart Henderson 		    MADERA_DOM_GRP_ISRC2, 0,
7206535e831SStuart Henderson 		    madera_domain_clk_ev,
7216535e831SStuart Henderson 		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
7226535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("OUTCLK", SND_SOC_NOPM,
7236535e831SStuart Henderson 		    MADERA_DOM_GRP_OUT, 0,
7241094af11SCharles Keepax 		    cs47l92_outclk_ev,
7256535e831SStuart Henderson 		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
7266535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("SPDCLK", SND_SOC_NOPM,
7276535e831SStuart Henderson 		    MADERA_DOM_GRP_SPD, 0,
7286535e831SStuart Henderson 		    madera_domain_clk_ev,
7296535e831SStuart Henderson 		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
7306535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("DSP1CLK", SND_SOC_NOPM,
7316535e831SStuart Henderson 		    MADERA_DOM_GRP_DSP1, 0,
7326535e831SStuart Henderson 		    madera_domain_clk_ev,
7336535e831SStuart Henderson 		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
7346535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("AIF1TXCLK", SND_SOC_NOPM,
7356535e831SStuart Henderson 		    MADERA_DOM_GRP_AIF1, 0,
7366535e831SStuart Henderson 		    madera_domain_clk_ev,
7376535e831SStuart Henderson 		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
7386535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("AIF2TXCLK", SND_SOC_NOPM,
7396535e831SStuart Henderson 		    MADERA_DOM_GRP_AIF2, 0,
7406535e831SStuart Henderson 		    madera_domain_clk_ev,
7416535e831SStuart Henderson 		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
7426535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("AIF3TXCLK", SND_SOC_NOPM,
7436535e831SStuart Henderson 		    MADERA_DOM_GRP_AIF3, 0,
7446535e831SStuart Henderson 		    madera_domain_clk_ev,
7456535e831SStuart Henderson 		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
7466535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("SLIMBUSCLK", SND_SOC_NOPM,
7476535e831SStuart Henderson 		    MADERA_DOM_GRP_SLIMBUS, 0,
7486535e831SStuart Henderson 		    madera_domain_clk_ev,
7496535e831SStuart Henderson 		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
7506535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("PWMCLK", SND_SOC_NOPM,
7516535e831SStuart Henderson 		    MADERA_DOM_GRP_PWM, 0,
7526535e831SStuart Henderson 		    madera_domain_clk_ev,
7536535e831SStuart Henderson 		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
7546535e831SStuart Henderson SND_SOC_DAPM_SUPPLY("DFCCLK", SND_SOC_NOPM,
7556535e831SStuart Henderson 		    MADERA_DOM_GRP_DFC, 0,
7566535e831SStuart Henderson 		    madera_domain_clk_ev,
7576535e831SStuart Henderson 		    SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
7586535e831SStuart Henderson 
7596535e831SStuart Henderson SND_SOC_DAPM_SIGGEN("TONE"),
7606535e831SStuart Henderson SND_SOC_DAPM_SIGGEN("NOISE"),
7616535e831SStuart Henderson 
7626535e831SStuart Henderson SND_SOC_DAPM_INPUT("IN1ALN"),
7636535e831SStuart Henderson SND_SOC_DAPM_INPUT("IN1ALP"),
7646535e831SStuart Henderson SND_SOC_DAPM_INPUT("IN1BLN"),
7656535e831SStuart Henderson SND_SOC_DAPM_INPUT("IN1BLP"),
7666535e831SStuart Henderson SND_SOC_DAPM_INPUT("IN1ARN"),
7676535e831SStuart Henderson SND_SOC_DAPM_INPUT("IN1ARP"),
7686535e831SStuart Henderson SND_SOC_DAPM_INPUT("IN1BR"),
7696535e831SStuart Henderson SND_SOC_DAPM_INPUT("IN2ALN"),
7706535e831SStuart Henderson SND_SOC_DAPM_INPUT("IN2ALP"),
7716535e831SStuart Henderson SND_SOC_DAPM_INPUT("IN2BL"),
7726535e831SStuart Henderson SND_SOC_DAPM_INPUT("IN2ARN"),
7736535e831SStuart Henderson SND_SOC_DAPM_INPUT("IN2ARP"),
7746535e831SStuart Henderson SND_SOC_DAPM_INPUT("IN2BR"),
7756535e831SStuart Henderson 
7766535e831SStuart Henderson SND_SOC_DAPM_MUX("IN1L Analog Mux", SND_SOC_NOPM, 0, 0, &madera_inmux[0]),
7776535e831SStuart Henderson SND_SOC_DAPM_MUX("IN1R Analog Mux", SND_SOC_NOPM, 0, 0, &madera_inmux[1]),
7786535e831SStuart Henderson SND_SOC_DAPM_MUX("IN2L Analog Mux", SND_SOC_NOPM, 0, 0, &madera_inmux[2]),
7796535e831SStuart Henderson SND_SOC_DAPM_MUX("IN2R Analog Mux", SND_SOC_NOPM, 0, 0, &madera_inmux[3]),
7806535e831SStuart Henderson 
7816535e831SStuart Henderson SND_SOC_DAPM_MUX("IN1L Mode", SND_SOC_NOPM, 0, 0, &madera_inmode[0]),
7826535e831SStuart Henderson SND_SOC_DAPM_MUX("IN1R Mode", SND_SOC_NOPM, 0, 0, &madera_inmode[0]),
7836535e831SStuart Henderson 
7846535e831SStuart Henderson SND_SOC_DAPM_MUX("IN2L Mode", SND_SOC_NOPM, 0, 0, &madera_inmode[1]),
7856535e831SStuart Henderson SND_SOC_DAPM_MUX("IN2R Mode", SND_SOC_NOPM, 0, 0, &madera_inmode[1]),
7866535e831SStuart Henderson 
7876535e831SStuart Henderson SND_SOC_DAPM_DEMUX("OUT3 Demux", SND_SOC_NOPM, 0, 0, &cs47l92_outdemux),
7888ab6ddc5SCharles Keepax SND_SOC_DAPM_MUX("OUT3 Mono Mux", SND_SOC_NOPM, 0, 0, &cs47l92_outdemux),
7896535e831SStuart Henderson 
7906535e831SStuart Henderson SND_SOC_DAPM_OUTPUT("DRC1 Signal Activity"),
7916535e831SStuart Henderson SND_SOC_DAPM_OUTPUT("DRC2 Signal Activity"),
7926535e831SStuart Henderson 
7936535e831SStuart Henderson SND_SOC_DAPM_PGA("PWM1 Driver", MADERA_PWM_DRIVE_1, MADERA_PWM1_ENA_SHIFT,
7946535e831SStuart Henderson 		 0, NULL, 0),
7956535e831SStuart Henderson SND_SOC_DAPM_PGA("PWM2 Driver", MADERA_PWM_DRIVE_1, MADERA_PWM2_ENA_SHIFT,
7966535e831SStuart Henderson 		 0, NULL, 0),
7976535e831SStuart Henderson 
7986535e831SStuart Henderson SND_SOC_DAPM_AIF_OUT("AIF1TX1", NULL, 0,
7996535e831SStuart Henderson 		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX1_ENA_SHIFT, 0),
8003570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("AIF1TX2", NULL, 1,
8016535e831SStuart Henderson 		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX2_ENA_SHIFT, 0),
8023570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("AIF1TX3", NULL, 2,
8036535e831SStuart Henderson 		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX3_ENA_SHIFT, 0),
8043570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("AIF1TX4", NULL, 3,
8056535e831SStuart Henderson 		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX4_ENA_SHIFT, 0),
8063570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("AIF1TX5", NULL, 4,
8076535e831SStuart Henderson 		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX5_ENA_SHIFT, 0),
8083570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("AIF1TX6", NULL, 5,
8096535e831SStuart Henderson 		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX6_ENA_SHIFT, 0),
8103570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("AIF1TX7", NULL, 6,
8116535e831SStuart Henderson 		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX7_ENA_SHIFT, 0),
8123570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("AIF1TX8", NULL, 7,
8136535e831SStuart Henderson 		     MADERA_AIF1_TX_ENABLES, MADERA_AIF1TX8_ENA_SHIFT, 0),
8146535e831SStuart Henderson 
8156535e831SStuart Henderson SND_SOC_DAPM_AIF_OUT("AIF2TX1", NULL, 0,
8166535e831SStuart Henderson 		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX1_ENA_SHIFT, 0),
8173570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("AIF2TX2", NULL, 1,
8186535e831SStuart Henderson 		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX2_ENA_SHIFT, 0),
8193570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("AIF2TX3", NULL, 2,
8206535e831SStuart Henderson 		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX3_ENA_SHIFT, 0),
8213570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("AIF2TX4", NULL, 3,
8226535e831SStuart Henderson 		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX4_ENA_SHIFT, 0),
8233570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("AIF2TX5", NULL, 4,
8246535e831SStuart Henderson 		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX5_ENA_SHIFT, 0),
8253570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("AIF2TX6", NULL, 5,
8266535e831SStuart Henderson 		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX6_ENA_SHIFT, 0),
8273570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("AIF2TX7", NULL, 6,
8286535e831SStuart Henderson 		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX7_ENA_SHIFT, 0),
8293570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("AIF2TX8", NULL, 7,
8306535e831SStuart Henderson 		     MADERA_AIF2_TX_ENABLES, MADERA_AIF2TX8_ENA_SHIFT, 0),
8316535e831SStuart Henderson 
8326535e831SStuart Henderson SND_SOC_DAPM_AIF_OUT("SLIMTX1", NULL, 0,
8336535e831SStuart Henderson 		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,
8346535e831SStuart Henderson 		     MADERA_SLIMTX1_ENA_SHIFT, 0),
8353570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("SLIMTX2", NULL, 1,
8366535e831SStuart Henderson 		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,
8376535e831SStuart Henderson 		     MADERA_SLIMTX2_ENA_SHIFT, 0),
8383570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("SLIMTX3", NULL, 2,
8396535e831SStuart Henderson 		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,
8406535e831SStuart Henderson 		     MADERA_SLIMTX3_ENA_SHIFT, 0),
8413570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("SLIMTX4", NULL, 3,
8426535e831SStuart Henderson 		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,
8436535e831SStuart Henderson 		     MADERA_SLIMTX4_ENA_SHIFT, 0),
8443570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("SLIMTX5", NULL, 4,
8456535e831SStuart Henderson 		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,
8466535e831SStuart Henderson 		     MADERA_SLIMTX5_ENA_SHIFT, 0),
8473570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("SLIMTX6", NULL, 5,
8486535e831SStuart Henderson 		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,
8496535e831SStuart Henderson 		     MADERA_SLIMTX6_ENA_SHIFT, 0),
8503570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("SLIMTX7", NULL, 6,
8516535e831SStuart Henderson 		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,
8526535e831SStuart Henderson 		     MADERA_SLIMTX7_ENA_SHIFT, 0),
8533570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("SLIMTX8", NULL, 7,
8546535e831SStuart Henderson 		     MADERA_SLIMBUS_TX_CHANNEL_ENABLE,
8556535e831SStuart Henderson 		     MADERA_SLIMTX8_ENA_SHIFT, 0),
8566535e831SStuart Henderson 
8576535e831SStuart Henderson SND_SOC_DAPM_AIF_OUT("AIF3TX1", NULL, 0,
8586535e831SStuart Henderson 		     MADERA_AIF3_TX_ENABLES, MADERA_AIF3TX1_ENA_SHIFT, 0),
8593570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("AIF3TX2", NULL, 1,
8606535e831SStuart Henderson 		     MADERA_AIF3_TX_ENABLES, MADERA_AIF3TX2_ENA_SHIFT, 0),
8613570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("AIF3TX3", NULL, 2,
8626535e831SStuart Henderson 		     MADERA_AIF3_TX_ENABLES, MADERA_AIF3TX3_ENA_SHIFT, 0),
8633570922cSCharles Keepax SND_SOC_DAPM_AIF_OUT("AIF3TX4", NULL, 3,
8646535e831SStuart Henderson 		     MADERA_AIF3_TX_ENABLES, MADERA_AIF3TX4_ENA_SHIFT, 0),
8656535e831SStuart Henderson 
8666535e831SStuart Henderson SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM,
8676535e831SStuart Henderson 		   MADERA_OUT1L_ENA_SHIFT, 0, NULL, 0, madera_hp_ev,
8686535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
8696535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
8706535e831SStuart Henderson SND_SOC_DAPM_PGA_E("OUT1R", SND_SOC_NOPM,
8716535e831SStuart Henderson 		   MADERA_OUT1R_ENA_SHIFT, 0, NULL, 0, madera_hp_ev,
8726535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
8736535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
8746535e831SStuart Henderson SND_SOC_DAPM_PGA_E("OUT2L", SND_SOC_NOPM,
8756535e831SStuart Henderson 		   MADERA_OUT2L_ENA_SHIFT, 0, NULL, 0, madera_hp_ev,
8766535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
8776535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
8786535e831SStuart Henderson SND_SOC_DAPM_PGA_E("OUT2R", SND_SOC_NOPM,
8796535e831SStuart Henderson 		   MADERA_OUT2R_ENA_SHIFT, 0, NULL, 0, madera_hp_ev,
8806535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
8816535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
8826535e831SStuart Henderson SND_SOC_DAPM_PGA_E("OUT3L", MADERA_OUTPUT_ENABLES_1,
8836535e831SStuart Henderson 		   MADERA_OUT3L_ENA_SHIFT, 0, NULL, 0, madera_out_ev,
8846535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
8856535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
8866535e831SStuart Henderson SND_SOC_DAPM_PGA_E("OUT3R", MADERA_OUTPUT_ENABLES_1,
8876535e831SStuart Henderson 		   MADERA_OUT3R_ENA_SHIFT, 0, NULL, 0, madera_out_ev,
8886535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
8896535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
8906535e831SStuart Henderson SND_SOC_DAPM_PGA_E("OUT5L", MADERA_OUTPUT_ENABLES_1,
8916535e831SStuart Henderson 		   MADERA_OUT5L_ENA_SHIFT, 0, NULL, 0, madera_out_ev,
8926535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
8936535e831SStuart Henderson SND_SOC_DAPM_PGA_E("OUT5R", MADERA_OUTPUT_ENABLES_1,
8946535e831SStuart Henderson 		   MADERA_OUT5R_ENA_SHIFT, 0, NULL, 0, madera_out_ev,
8956535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMU),
8966535e831SStuart Henderson 
8976535e831SStuart Henderson SND_SOC_DAPM_PGA("SPD1TX1", MADERA_SPD1_TX_CONTROL,
8986535e831SStuart Henderson 		 MADERA_SPD1_VAL1_SHIFT, 0, NULL, 0),
8996535e831SStuart Henderson SND_SOC_DAPM_PGA("SPD1TX2", MADERA_SPD1_TX_CONTROL,
9006535e831SStuart Henderson 		 MADERA_SPD1_VAL2_SHIFT, 0, NULL, 0),
9016535e831SStuart Henderson SND_SOC_DAPM_OUT_DRV("SPD1", MADERA_SPD1_TX_CONTROL,
9026535e831SStuart Henderson 		     MADERA_SPD1_ENA_SHIFT, 0, NULL, 0),
9036535e831SStuart Henderson 
9046535e831SStuart Henderson /*
9056535e831SStuart Henderson  * mux_in widgets : arranged in the order of sources
9066535e831SStuart Henderson  * specified in MADERA_MIXER_INPUT_ROUTES
9076535e831SStuart Henderson  */
9086535e831SStuart Henderson 
9096535e831SStuart Henderson SND_SOC_DAPM_PGA("Noise Generator", MADERA_COMFORT_NOISE_GENERATOR,
9106535e831SStuart Henderson 		 MADERA_NOISE_GEN_ENA_SHIFT, 0, NULL, 0),
9116535e831SStuart Henderson 
9126535e831SStuart Henderson SND_SOC_DAPM_PGA("Tone Generator 1", MADERA_TONE_GENERATOR_1,
9136535e831SStuart Henderson 		 MADERA_TONE1_ENA_SHIFT, 0, NULL, 0),
9146535e831SStuart Henderson SND_SOC_DAPM_PGA("Tone Generator 2", MADERA_TONE_GENERATOR_1,
9156535e831SStuart Henderson 		 MADERA_TONE2_ENA_SHIFT, 0, NULL, 0),
9166535e831SStuart Henderson 
9176535e831SStuart Henderson SND_SOC_DAPM_SIGGEN("HAPTICS"),
9186535e831SStuart Henderson 
9196535e831SStuart Henderson SND_SOC_DAPM_MUX("AEC1 Loopback", MADERA_DAC_AEC_CONTROL_1,
9206535e831SStuart Henderson 		 MADERA_AEC1_LOOPBACK_ENA_SHIFT, 0,
9216535e831SStuart Henderson 		 &cs47l92_aec_loopback_mux),
9226535e831SStuart Henderson 
9236535e831SStuart Henderson SND_SOC_DAPM_PGA_E("IN1L", MADERA_INPUT_ENABLES, MADERA_IN1L_ENA_SHIFT,
9246535e831SStuart Henderson 		   0, NULL, 0, madera_in_ev,
9256535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
9266535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
9276535e831SStuart Henderson SND_SOC_DAPM_PGA_E("IN1R", MADERA_INPUT_ENABLES, MADERA_IN1R_ENA_SHIFT,
9286535e831SStuart Henderson 		   0, NULL, 0, madera_in_ev,
9296535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
9306535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
9316535e831SStuart Henderson SND_SOC_DAPM_PGA_E("IN2L", MADERA_INPUT_ENABLES, MADERA_IN2L_ENA_SHIFT,
9326535e831SStuart Henderson 		   0, NULL, 0, madera_in_ev,
9336535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
9346535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
9356535e831SStuart Henderson SND_SOC_DAPM_PGA_E("IN2R", MADERA_INPUT_ENABLES, MADERA_IN2R_ENA_SHIFT,
9366535e831SStuart Henderson 		   0, NULL, 0, madera_in_ev,
9376535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
9386535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
9396535e831SStuart Henderson SND_SOC_DAPM_PGA_E("IN3L", MADERA_INPUT_ENABLES, MADERA_IN3L_ENA_SHIFT,
9406535e831SStuart Henderson 		   0, NULL, 0, madera_in_ev,
9416535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
9426535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
9436535e831SStuart Henderson SND_SOC_DAPM_PGA_E("IN3R", MADERA_INPUT_ENABLES, MADERA_IN3R_ENA_SHIFT,
9446535e831SStuart Henderson 		   0, NULL, 0, madera_in_ev,
9456535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
9466535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
9476535e831SStuart Henderson SND_SOC_DAPM_PGA_E("IN4L", MADERA_INPUT_ENABLES, MADERA_IN4L_ENA_SHIFT,
9486535e831SStuart Henderson 		   0, NULL, 0, madera_in_ev,
9496535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
9506535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
9516535e831SStuart Henderson SND_SOC_DAPM_PGA_E("IN4R", MADERA_INPUT_ENABLES, MADERA_IN4R_ENA_SHIFT,
9526535e831SStuart Henderson 		   0, NULL, 0, madera_in_ev,
9536535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD |
9546535e831SStuart Henderson 		   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),
9556535e831SStuart Henderson 
9566535e831SStuart Henderson SND_SOC_DAPM_AIF_IN("AIF1RX1", NULL, 0,
9576535e831SStuart Henderson 		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX1_ENA_SHIFT, 0),
9583570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("AIF1RX2", NULL, 1,
9596535e831SStuart Henderson 		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX2_ENA_SHIFT, 0),
9603570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("AIF1RX3", NULL, 2,
9616535e831SStuart Henderson 		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX3_ENA_SHIFT, 0),
9623570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("AIF1RX4", NULL, 3,
9636535e831SStuart Henderson 		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX4_ENA_SHIFT, 0),
9643570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("AIF1RX5", NULL, 4,
9656535e831SStuart Henderson 		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX5_ENA_SHIFT, 0),
9663570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("AIF1RX6", NULL, 5,
9676535e831SStuart Henderson 		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX6_ENA_SHIFT, 0),
9683570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("AIF1RX7", NULL, 6,
9696535e831SStuart Henderson 		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX7_ENA_SHIFT, 0),
9703570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("AIF1RX8", NULL, 7,
9716535e831SStuart Henderson 		    MADERA_AIF1_RX_ENABLES, MADERA_AIF1RX8_ENA_SHIFT, 0),
9726535e831SStuart Henderson 
9736535e831SStuart Henderson SND_SOC_DAPM_AIF_IN("AIF2RX1", NULL, 0,
9746535e831SStuart Henderson 		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX1_ENA_SHIFT, 0),
9753570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("AIF2RX2", NULL, 1,
9766535e831SStuart Henderson 		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX2_ENA_SHIFT, 0),
9773570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("AIF2RX3", NULL, 2,
9786535e831SStuart Henderson 		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX3_ENA_SHIFT, 0),
9793570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("AIF2RX4", NULL, 3,
9806535e831SStuart Henderson 		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX4_ENA_SHIFT, 0),
9813570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("AIF2RX5", NULL, 4,
9826535e831SStuart Henderson 		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX5_ENA_SHIFT, 0),
9833570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("AIF2RX6", NULL, 5,
9846535e831SStuart Henderson 		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX6_ENA_SHIFT, 0),
9853570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("AIF2RX7", NULL, 6,
9866535e831SStuart Henderson 		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX7_ENA_SHIFT, 0),
9873570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("AIF2RX8", NULL, 7,
9886535e831SStuart Henderson 		    MADERA_AIF2_RX_ENABLES, MADERA_AIF2RX8_ENA_SHIFT, 0),
9896535e831SStuart Henderson 
9906535e831SStuart Henderson SND_SOC_DAPM_AIF_IN("AIF3RX1", NULL, 0,
9916535e831SStuart Henderson 		    MADERA_AIF3_RX_ENABLES, MADERA_AIF3RX1_ENA_SHIFT, 0),
9923570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 1,
9936535e831SStuart Henderson 		    MADERA_AIF3_RX_ENABLES, MADERA_AIF3RX2_ENA_SHIFT, 0),
9943570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("AIF3RX3", NULL, 2,
9956535e831SStuart Henderson 		    MADERA_AIF3_RX_ENABLES, MADERA_AIF3RX3_ENA_SHIFT, 0),
9963570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("AIF3RX4", NULL, 3,
9976535e831SStuart Henderson 		    MADERA_AIF3_RX_ENABLES, MADERA_AIF3RX4_ENA_SHIFT, 0),
9986535e831SStuart Henderson 
9996535e831SStuart Henderson SND_SOC_DAPM_AIF_IN("SLIMRX1", NULL, 0, MADERA_SLIMBUS_RX_CHANNEL_ENABLE,
10006535e831SStuart Henderson 		    MADERA_SLIMRX1_ENA_SHIFT, 0),
10013570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("SLIMRX2", NULL, 1, MADERA_SLIMBUS_RX_CHANNEL_ENABLE,
10026535e831SStuart Henderson 		    MADERA_SLIMRX2_ENA_SHIFT, 0),
10033570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("SLIMRX3", NULL, 2, MADERA_SLIMBUS_RX_CHANNEL_ENABLE,
10046535e831SStuart Henderson 		    MADERA_SLIMRX3_ENA_SHIFT, 0),
10053570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("SLIMRX4", NULL, 3, MADERA_SLIMBUS_RX_CHANNEL_ENABLE,
10066535e831SStuart Henderson 		    MADERA_SLIMRX4_ENA_SHIFT, 0),
10073570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("SLIMRX5", NULL, 4, MADERA_SLIMBUS_RX_CHANNEL_ENABLE,
10086535e831SStuart Henderson 		    MADERA_SLIMRX5_ENA_SHIFT, 0),
10093570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("SLIMRX6", NULL, 5, MADERA_SLIMBUS_RX_CHANNEL_ENABLE,
10106535e831SStuart Henderson 		    MADERA_SLIMRX6_ENA_SHIFT, 0),
10113570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("SLIMRX7", NULL, 6, MADERA_SLIMBUS_RX_CHANNEL_ENABLE,
10126535e831SStuart Henderson 		    MADERA_SLIMRX7_ENA_SHIFT, 0),
10133570922cSCharles Keepax SND_SOC_DAPM_AIF_IN("SLIMRX8", NULL, 7, MADERA_SLIMBUS_RX_CHANNEL_ENABLE,
10146535e831SStuart Henderson 		    MADERA_SLIMRX8_ENA_SHIFT, 0),
10156535e831SStuart Henderson 
10166535e831SStuart Henderson SND_SOC_DAPM_PGA("EQ1", MADERA_EQ1_1, MADERA_EQ1_ENA_SHIFT, 0, NULL, 0),
10176535e831SStuart Henderson SND_SOC_DAPM_PGA("EQ2", MADERA_EQ2_1, MADERA_EQ2_ENA_SHIFT, 0, NULL, 0),
10186535e831SStuart Henderson SND_SOC_DAPM_PGA("EQ3", MADERA_EQ3_1, MADERA_EQ3_ENA_SHIFT, 0, NULL, 0),
10196535e831SStuart Henderson SND_SOC_DAPM_PGA("EQ4", MADERA_EQ4_1, MADERA_EQ4_ENA_SHIFT, 0, NULL, 0),
10206535e831SStuart Henderson 
10216535e831SStuart Henderson SND_SOC_DAPM_PGA("DRC1L", MADERA_DRC1_CTRL1, MADERA_DRC1L_ENA_SHIFT, 0,
10226535e831SStuart Henderson 		 NULL, 0),
10236535e831SStuart Henderson SND_SOC_DAPM_PGA("DRC1R", MADERA_DRC1_CTRL1, MADERA_DRC1R_ENA_SHIFT, 0,
10246535e831SStuart Henderson 		 NULL, 0),
10256535e831SStuart Henderson SND_SOC_DAPM_PGA("DRC2L", MADERA_DRC2_CTRL1, MADERA_DRC2L_ENA_SHIFT, 0,
10266535e831SStuart Henderson 		 NULL, 0),
10276535e831SStuart Henderson SND_SOC_DAPM_PGA("DRC2R", MADERA_DRC2_CTRL1, MADERA_DRC2R_ENA_SHIFT, 0,
10286535e831SStuart Henderson 		 NULL, 0),
10296535e831SStuart Henderson 
10306535e831SStuart Henderson SND_SOC_DAPM_PGA("LHPF1", MADERA_HPLPF1_1, MADERA_LHPF1_ENA_SHIFT, 0,
10316535e831SStuart Henderson 		 NULL, 0),
10326535e831SStuart Henderson SND_SOC_DAPM_PGA("LHPF2", MADERA_HPLPF2_1, MADERA_LHPF2_ENA_SHIFT, 0,
10336535e831SStuart Henderson 		 NULL, 0),
10346535e831SStuart Henderson SND_SOC_DAPM_PGA("LHPF3", MADERA_HPLPF3_1, MADERA_LHPF3_ENA_SHIFT, 0,
10356535e831SStuart Henderson 		 NULL, 0),
10366535e831SStuart Henderson SND_SOC_DAPM_PGA("LHPF4", MADERA_HPLPF4_1, MADERA_LHPF4_ENA_SHIFT, 0,
10376535e831SStuart Henderson 		 NULL, 0),
10386535e831SStuart Henderson 
10396535e831SStuart Henderson SND_SOC_DAPM_PGA("ASRC1IN1L", MADERA_ASRC1_ENABLE,
10406535e831SStuart Henderson 		 MADERA_ASRC1_IN1L_ENA_SHIFT, 0, NULL, 0),
10416535e831SStuart Henderson SND_SOC_DAPM_PGA("ASRC1IN1R", MADERA_ASRC1_ENABLE,
10426535e831SStuart Henderson 		 MADERA_ASRC1_IN1R_ENA_SHIFT, 0, NULL, 0),
10436535e831SStuart Henderson SND_SOC_DAPM_PGA("ASRC1IN2L", MADERA_ASRC1_ENABLE,
10446535e831SStuart Henderson 		 MADERA_ASRC1_IN2L_ENA_SHIFT, 0, NULL, 0),
10456535e831SStuart Henderson SND_SOC_DAPM_PGA("ASRC1IN2R", MADERA_ASRC1_ENABLE,
10466535e831SStuart Henderson 		 MADERA_ASRC1_IN2R_ENA_SHIFT, 0, NULL, 0),
10476535e831SStuart Henderson 
10486535e831SStuart Henderson SND_SOC_DAPM_PGA("ISRC1DEC1", MADERA_ISRC_1_CTRL_3,
10496535e831SStuart Henderson 		 MADERA_ISRC1_DEC1_ENA_SHIFT, 0, NULL, 0),
10506535e831SStuart Henderson SND_SOC_DAPM_PGA("ISRC1DEC2", MADERA_ISRC_1_CTRL_3,
10516535e831SStuart Henderson 		 MADERA_ISRC1_DEC2_ENA_SHIFT, 0, NULL, 0),
10526535e831SStuart Henderson 
10536535e831SStuart Henderson SND_SOC_DAPM_PGA("ISRC1INT1", MADERA_ISRC_1_CTRL_3,
10546535e831SStuart Henderson 		 MADERA_ISRC1_INT1_ENA_SHIFT, 0, NULL, 0),
10556535e831SStuart Henderson SND_SOC_DAPM_PGA("ISRC1INT2", MADERA_ISRC_1_CTRL_3,
10566535e831SStuart Henderson 		 MADERA_ISRC1_INT2_ENA_SHIFT, 0, NULL, 0),
10576535e831SStuart Henderson 
10586535e831SStuart Henderson SND_SOC_DAPM_PGA("ISRC2DEC1", MADERA_ISRC_2_CTRL_3,
10596535e831SStuart Henderson 		 MADERA_ISRC2_DEC1_ENA_SHIFT, 0, NULL, 0),
10606535e831SStuart Henderson SND_SOC_DAPM_PGA("ISRC2DEC2", MADERA_ISRC_2_CTRL_3,
10616535e831SStuart Henderson 		 MADERA_ISRC2_DEC2_ENA_SHIFT, 0, NULL, 0),
10626535e831SStuart Henderson 
10636535e831SStuart Henderson SND_SOC_DAPM_PGA("ISRC2INT1", MADERA_ISRC_2_CTRL_3,
10646535e831SStuart Henderson 		 MADERA_ISRC2_INT1_ENA_SHIFT, 0, NULL, 0),
10656535e831SStuart Henderson SND_SOC_DAPM_PGA("ISRC2INT2", MADERA_ISRC_2_CTRL_3,
10666535e831SStuart Henderson 		 MADERA_ISRC2_INT2_ENA_SHIFT, 0, NULL, 0),
10676535e831SStuart Henderson 
10686535e831SStuart Henderson WM_ADSP2("DSP1", 0, cs47l92_adsp_power_ev),
10696535e831SStuart Henderson 
10706535e831SStuart Henderson /* end of ordered widget list */
10716535e831SStuart Henderson 
10726535e831SStuart Henderson SND_SOC_DAPM_PGA("DFC1", MADERA_DFC1_CTRL, MADERA_DFC1_ENA_SHIFT, 0, NULL, 0),
10736535e831SStuart Henderson SND_SOC_DAPM_PGA("DFC2", MADERA_DFC2_CTRL, MADERA_DFC1_ENA_SHIFT, 0, NULL, 0),
10746535e831SStuart Henderson SND_SOC_DAPM_PGA("DFC3", MADERA_DFC3_CTRL, MADERA_DFC1_ENA_SHIFT, 0, NULL, 0),
10756535e831SStuart Henderson SND_SOC_DAPM_PGA("DFC4", MADERA_DFC4_CTRL, MADERA_DFC1_ENA_SHIFT, 0, NULL, 0),
10766535e831SStuart Henderson SND_SOC_DAPM_PGA("DFC5", MADERA_DFC5_CTRL, MADERA_DFC1_ENA_SHIFT, 0, NULL, 0),
10776535e831SStuart Henderson SND_SOC_DAPM_PGA("DFC6", MADERA_DFC6_CTRL, MADERA_DFC1_ENA_SHIFT, 0, NULL, 0),
10786535e831SStuart Henderson SND_SOC_DAPM_PGA("DFC7", MADERA_DFC7_CTRL, MADERA_DFC1_ENA_SHIFT, 0, NULL, 0),
10796535e831SStuart Henderson SND_SOC_DAPM_PGA("DFC8", MADERA_DFC8_CTRL, MADERA_DFC1_ENA_SHIFT, 0, NULL, 0),
10806535e831SStuart Henderson 
10816535e831SStuart Henderson MADERA_MIXER_WIDGETS(EQ1, "EQ1"),
10826535e831SStuart Henderson MADERA_MIXER_WIDGETS(EQ2, "EQ2"),
10836535e831SStuart Henderson MADERA_MIXER_WIDGETS(EQ3, "EQ3"),
10846535e831SStuart Henderson MADERA_MIXER_WIDGETS(EQ4, "EQ4"),
10856535e831SStuart Henderson 
10866535e831SStuart Henderson MADERA_MIXER_WIDGETS(DRC1L, "DRC1L"),
10876535e831SStuart Henderson MADERA_MIXER_WIDGETS(DRC1R, "DRC1R"),
10886535e831SStuart Henderson MADERA_MIXER_WIDGETS(DRC2L, "DRC2L"),
10896535e831SStuart Henderson MADERA_MIXER_WIDGETS(DRC2R, "DRC2R"),
10906535e831SStuart Henderson 
10916535e831SStuart Henderson SND_SOC_DAPM_SWITCH("DRC1 Activity Output", SND_SOC_NOPM, 0, 0,
10926535e831SStuart Henderson 		    &madera_drc_activity_output_mux[0]),
10936535e831SStuart Henderson SND_SOC_DAPM_SWITCH("DRC2 Activity Output", SND_SOC_NOPM, 0, 0,
10946535e831SStuart Henderson 		    &madera_drc_activity_output_mux[1]),
10956535e831SStuart Henderson 
10966535e831SStuart Henderson MADERA_MIXER_WIDGETS(LHPF1, "LHPF1"),
10976535e831SStuart Henderson MADERA_MIXER_WIDGETS(LHPF2, "LHPF2"),
10986535e831SStuart Henderson MADERA_MIXER_WIDGETS(LHPF3, "LHPF3"),
10996535e831SStuart Henderson MADERA_MIXER_WIDGETS(LHPF4, "LHPF4"),
11006535e831SStuart Henderson 
11016535e831SStuart Henderson MADERA_MIXER_WIDGETS(PWM1, "PWM1"),
11026535e831SStuart Henderson MADERA_MIXER_WIDGETS(PWM2, "PWM2"),
11036535e831SStuart Henderson 
11046535e831SStuart Henderson MADERA_MIXER_WIDGETS(OUT1L, "HPOUT1L"),
11056535e831SStuart Henderson MADERA_MIXER_WIDGETS(OUT1R, "HPOUT1R"),
11066535e831SStuart Henderson MADERA_MIXER_WIDGETS(OUT2L, "HPOUT2L"),
11076535e831SStuart Henderson MADERA_MIXER_WIDGETS(OUT2R, "HPOUT2R"),
11086535e831SStuart Henderson MADERA_MIXER_WIDGETS(OUT3L, "HPOUT3L"),
11096535e831SStuart Henderson MADERA_MIXER_WIDGETS(OUT3R, "HPOUT3R"),
11106535e831SStuart Henderson MADERA_MIXER_WIDGETS(SPKDAT1L, "SPKDAT1L"),
11116535e831SStuart Henderson MADERA_MIXER_WIDGETS(SPKDAT1R, "SPKDAT1R"),
11126535e831SStuart Henderson 
11136535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF1TX1, "AIF1TX1"),
11146535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF1TX2, "AIF1TX2"),
11156535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF1TX3, "AIF1TX3"),
11166535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF1TX4, "AIF1TX4"),
11176535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF1TX5, "AIF1TX5"),
11186535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF1TX6, "AIF1TX6"),
11196535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF1TX7, "AIF1TX7"),
11206535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF1TX8, "AIF1TX8"),
11216535e831SStuart Henderson 
11226535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF2TX1, "AIF2TX1"),
11236535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF2TX2, "AIF2TX2"),
11246535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF2TX3, "AIF2TX3"),
11256535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF2TX4, "AIF2TX4"),
11266535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF2TX5, "AIF2TX5"),
11276535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF2TX6, "AIF2TX6"),
11286535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF2TX7, "AIF2TX7"),
11296535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF2TX8, "AIF2TX8"),
11306535e831SStuart Henderson 
11316535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF3TX1, "AIF3TX1"),
11326535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF3TX2, "AIF3TX2"),
11336535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF3TX3, "AIF3TX3"),
11346535e831SStuart Henderson MADERA_MIXER_WIDGETS(AIF3TX4, "AIF3TX4"),
11356535e831SStuart Henderson 
11366535e831SStuart Henderson MADERA_MIXER_WIDGETS(SLIMTX1, "SLIMTX1"),
11376535e831SStuart Henderson MADERA_MIXER_WIDGETS(SLIMTX2, "SLIMTX2"),
11386535e831SStuart Henderson MADERA_MIXER_WIDGETS(SLIMTX3, "SLIMTX3"),
11396535e831SStuart Henderson MADERA_MIXER_WIDGETS(SLIMTX4, "SLIMTX4"),
11406535e831SStuart Henderson MADERA_MIXER_WIDGETS(SLIMTX5, "SLIMTX5"),
11416535e831SStuart Henderson MADERA_MIXER_WIDGETS(SLIMTX6, "SLIMTX6"),
11426535e831SStuart Henderson MADERA_MIXER_WIDGETS(SLIMTX7, "SLIMTX7"),
11436535e831SStuart Henderson MADERA_MIXER_WIDGETS(SLIMTX8, "SLIMTX8"),
11446535e831SStuart Henderson 
11456535e831SStuart Henderson MADERA_MUX_WIDGETS(SPD1TX1, "SPDIFTX1"),
11466535e831SStuart Henderson MADERA_MUX_WIDGETS(SPD1TX2, "SPDIFTX2"),
11476535e831SStuart Henderson 
11486535e831SStuart Henderson MADERA_MUX_WIDGETS(ASRC1IN1L, "ASRC1IN1L"),
11496535e831SStuart Henderson MADERA_MUX_WIDGETS(ASRC1IN1R, "ASRC1IN1R"),
11506535e831SStuart Henderson MADERA_MUX_WIDGETS(ASRC1IN2L, "ASRC1IN2L"),
11516535e831SStuart Henderson MADERA_MUX_WIDGETS(ASRC1IN2R, "ASRC1IN2R"),
11526535e831SStuart Henderson 
11536535e831SStuart Henderson MADERA_DSP_WIDGETS(DSP1, "DSP1"),
11546535e831SStuart Henderson 
11556535e831SStuart Henderson MADERA_MUX_WIDGETS(ISRC1DEC1, "ISRC1DEC1"),
11566535e831SStuart Henderson MADERA_MUX_WIDGETS(ISRC1DEC2, "ISRC1DEC2"),
11576535e831SStuart Henderson 
11586535e831SStuart Henderson MADERA_MUX_WIDGETS(ISRC1INT1, "ISRC1INT1"),
11596535e831SStuart Henderson MADERA_MUX_WIDGETS(ISRC1INT2, "ISRC1INT2"),
11606535e831SStuart Henderson 
11616535e831SStuart Henderson MADERA_MUX_WIDGETS(ISRC2DEC1, "ISRC2DEC1"),
11626535e831SStuart Henderson MADERA_MUX_WIDGETS(ISRC2DEC2, "ISRC2DEC2"),
11636535e831SStuart Henderson 
11646535e831SStuart Henderson MADERA_MUX_WIDGETS(ISRC2INT1, "ISRC2INT1"),
11656535e831SStuart Henderson MADERA_MUX_WIDGETS(ISRC2INT2, "ISRC2INT2"),
11666535e831SStuart Henderson 
11676535e831SStuart Henderson MADERA_MUX_WIDGETS(DFC1, "DFC1"),
11686535e831SStuart Henderson MADERA_MUX_WIDGETS(DFC2, "DFC2"),
11696535e831SStuart Henderson MADERA_MUX_WIDGETS(DFC3, "DFC3"),
11706535e831SStuart Henderson MADERA_MUX_WIDGETS(DFC4, "DFC4"),
11716535e831SStuart Henderson MADERA_MUX_WIDGETS(DFC5, "DFC5"),
11726535e831SStuart Henderson MADERA_MUX_WIDGETS(DFC6, "DFC6"),
11736535e831SStuart Henderson MADERA_MUX_WIDGETS(DFC7, "DFC7"),
11746535e831SStuart Henderson MADERA_MUX_WIDGETS(DFC8, "DFC8"),
11756535e831SStuart Henderson 
11766535e831SStuart Henderson SND_SOC_DAPM_OUTPUT("HPOUT1L"),
11776535e831SStuart Henderson SND_SOC_DAPM_OUTPUT("HPOUT1R"),
11786535e831SStuart Henderson SND_SOC_DAPM_OUTPUT("HPOUT2L"),
11796535e831SStuart Henderson SND_SOC_DAPM_OUTPUT("HPOUT2R"),
11806535e831SStuart Henderson SND_SOC_DAPM_OUTPUT("HPOUT3L"),
11816535e831SStuart Henderson SND_SOC_DAPM_OUTPUT("HPOUT3R"),
11826535e831SStuart Henderson SND_SOC_DAPM_OUTPUT("HPOUT4L"),
11836535e831SStuart Henderson SND_SOC_DAPM_OUTPUT("HPOUT4R"),
11846535e831SStuart Henderson SND_SOC_DAPM_OUTPUT("SPKDAT1L"),
11856535e831SStuart Henderson SND_SOC_DAPM_OUTPUT("SPKDAT1R"),
11866535e831SStuart Henderson SND_SOC_DAPM_OUTPUT("SPDIF1"),
11876535e831SStuart Henderson 
11886535e831SStuart Henderson SND_SOC_DAPM_OUTPUT("MICSUPP"),
11896535e831SStuart Henderson };
11906535e831SStuart Henderson 
11916535e831SStuart Henderson #define MADERA_MIXER_INPUT_ROUTES(name)	\
11926535e831SStuart Henderson 	{ name, "Noise Generator", "Noise Generator" }, \
11936535e831SStuart Henderson 	{ name, "Tone Generator 1", "Tone Generator 1" }, \
11946535e831SStuart Henderson 	{ name, "Tone Generator 2", "Tone Generator 2" }, \
11956535e831SStuart Henderson 	{ name, "Haptics", "HAPTICS" }, \
11966535e831SStuart Henderson 	{ name, "AEC1", "AEC1 Loopback" }, \
11976535e831SStuart Henderson 	{ name, "IN1L", "IN1L" }, \
11986535e831SStuart Henderson 	{ name, "IN1R", "IN1R" }, \
11996535e831SStuart Henderson 	{ name, "IN2L", "IN2L" }, \
12006535e831SStuart Henderson 	{ name, "IN2R", "IN2R" }, \
12016535e831SStuart Henderson 	{ name, "IN3L", "IN3L" }, \
12026535e831SStuart Henderson 	{ name, "IN3R", "IN3R" }, \
12036535e831SStuart Henderson 	{ name, "IN4L", "IN4L" }, \
12046535e831SStuart Henderson 	{ name, "IN4R", "IN4R" }, \
12056535e831SStuart Henderson 	{ name, "AIF1RX1", "AIF1RX1" }, \
12066535e831SStuart Henderson 	{ name, "AIF1RX2", "AIF1RX2" }, \
12076535e831SStuart Henderson 	{ name, "AIF1RX3", "AIF1RX3" }, \
12086535e831SStuart Henderson 	{ name, "AIF1RX4", "AIF1RX4" }, \
12096535e831SStuart Henderson 	{ name, "AIF1RX5", "AIF1RX5" }, \
12106535e831SStuart Henderson 	{ name, "AIF1RX6", "AIF1RX6" }, \
12116535e831SStuart Henderson 	{ name, "AIF1RX7", "AIF1RX7" }, \
12126535e831SStuart Henderson 	{ name, "AIF1RX8", "AIF1RX8" }, \
12136535e831SStuart Henderson 	{ name, "AIF2RX1", "AIF2RX1" }, \
12146535e831SStuart Henderson 	{ name, "AIF2RX2", "AIF2RX2" }, \
12156535e831SStuart Henderson 	{ name, "AIF2RX3", "AIF2RX3" }, \
12166535e831SStuart Henderson 	{ name, "AIF2RX4", "AIF2RX4" }, \
12176535e831SStuart Henderson 	{ name, "AIF2RX5", "AIF2RX5" }, \
12186535e831SStuart Henderson 	{ name, "AIF2RX6", "AIF2RX6" }, \
12196535e831SStuart Henderson 	{ name, "AIF2RX7", "AIF2RX7" }, \
12206535e831SStuart Henderson 	{ name, "AIF2RX8", "AIF2RX8" }, \
12216535e831SStuart Henderson 	{ name, "AIF3RX1", "AIF3RX1" }, \
12226535e831SStuart Henderson 	{ name, "AIF3RX2", "AIF3RX2" }, \
12236535e831SStuart Henderson 	{ name, "AIF3RX3", "AIF3RX3" }, \
12246535e831SStuart Henderson 	{ name, "AIF3RX4", "AIF3RX4" }, \
12256535e831SStuart Henderson 	{ name, "SLIMRX1", "SLIMRX1" }, \
12266535e831SStuart Henderson 	{ name, "SLIMRX2", "SLIMRX2" }, \
12276535e831SStuart Henderson 	{ name, "SLIMRX3", "SLIMRX3" }, \
12286535e831SStuart Henderson 	{ name, "SLIMRX4", "SLIMRX4" }, \
12296535e831SStuart Henderson 	{ name, "SLIMRX5", "SLIMRX5" }, \
12306535e831SStuart Henderson 	{ name, "SLIMRX6", "SLIMRX6" }, \
12316535e831SStuart Henderson 	{ name, "SLIMRX7", "SLIMRX7" }, \
12326535e831SStuart Henderson 	{ name, "SLIMRX8", "SLIMRX8" }, \
12336535e831SStuart Henderson 	{ name, "EQ1", "EQ1" }, \
12346535e831SStuart Henderson 	{ name, "EQ2", "EQ2" }, \
12356535e831SStuart Henderson 	{ name, "EQ3", "EQ3" }, \
12366535e831SStuart Henderson 	{ name, "EQ4", "EQ4" }, \
12376535e831SStuart Henderson 	{ name, "DRC1L", "DRC1L" }, \
12386535e831SStuart Henderson 	{ name, "DRC1R", "DRC1R" }, \
12396535e831SStuart Henderson 	{ name, "DRC2L", "DRC2L" }, \
12406535e831SStuart Henderson 	{ name, "DRC2R", "DRC2R" }, \
12416535e831SStuart Henderson 	{ name, "LHPF1", "LHPF1" }, \
12426535e831SStuart Henderson 	{ name, "LHPF2", "LHPF2" }, \
12436535e831SStuart Henderson 	{ name, "LHPF3", "LHPF3" }, \
12446535e831SStuart Henderson 	{ name, "LHPF4", "LHPF4" }, \
12456535e831SStuart Henderson 	{ name, "ASRC1IN1L", "ASRC1IN1L" }, \
12466535e831SStuart Henderson 	{ name, "ASRC1IN1R", "ASRC1IN1R" }, \
12476535e831SStuart Henderson 	{ name, "ASRC1IN2L", "ASRC1IN2L" }, \
12486535e831SStuart Henderson 	{ name, "ASRC1IN2R", "ASRC1IN2R" }, \
12496535e831SStuart Henderson 	{ name, "ISRC1DEC1", "ISRC1DEC1" }, \
12506535e831SStuart Henderson 	{ name, "ISRC1DEC2", "ISRC1DEC2" }, \
12516535e831SStuart Henderson 	{ name, "ISRC1INT1", "ISRC1INT1" }, \
12526535e831SStuart Henderson 	{ name, "ISRC1INT2", "ISRC1INT2" }, \
12536535e831SStuart Henderson 	{ name, "ISRC2DEC1", "ISRC2DEC1" }, \
12546535e831SStuart Henderson 	{ name, "ISRC2DEC2", "ISRC2DEC2" }, \
12556535e831SStuart Henderson 	{ name, "ISRC2INT1", "ISRC2INT1" }, \
12566535e831SStuart Henderson 	{ name, "ISRC2INT2", "ISRC2INT2" }, \
12576535e831SStuart Henderson 	{ name, "DSP1.1", "DSP1" }, \
12586535e831SStuart Henderson 	{ name, "DSP1.2", "DSP1" }, \
12596535e831SStuart Henderson 	{ name, "DSP1.3", "DSP1" }, \
12606535e831SStuart Henderson 	{ name, "DSP1.4", "DSP1" }, \
12616535e831SStuart Henderson 	{ name, "DSP1.5", "DSP1" }, \
12626535e831SStuart Henderson 	{ name, "DSP1.6", "DSP1" }, \
12636535e831SStuart Henderson 	{ name, "DFC1", "DFC1" }, \
12646535e831SStuart Henderson 	{ name, "DFC2", "DFC2" }, \
12656535e831SStuart Henderson 	{ name, "DFC3", "DFC3" }, \
12666535e831SStuart Henderson 	{ name, "DFC4", "DFC4" }, \
12676535e831SStuart Henderson 	{ name, "DFC5", "DFC5" }, \
12686535e831SStuart Henderson 	{ name, "DFC6", "DFC6" }, \
12696535e831SStuart Henderson 	{ name, "DFC7", "DFC7" }, \
12706535e831SStuart Henderson 	{ name, "DFC8", "DFC8" }
12716535e831SStuart Henderson 
12726535e831SStuart Henderson static const struct snd_soc_dapm_route cs47l92_dapm_routes[] = {
12736535e831SStuart Henderson 	/* Internal clock domains */
12746535e831SStuart Henderson 	{ "EQ1", NULL, "FXCLK" },
12756535e831SStuart Henderson 	{ "EQ2", NULL, "FXCLK" },
12766535e831SStuart Henderson 	{ "EQ3", NULL, "FXCLK" },
12776535e831SStuart Henderson 	{ "EQ4", NULL, "FXCLK" },
12786535e831SStuart Henderson 	{ "DRC1L", NULL, "FXCLK" },
12796535e831SStuart Henderson 	{ "DRC1R", NULL, "FXCLK" },
12806535e831SStuart Henderson 	{ "DRC2L", NULL, "FXCLK" },
12816535e831SStuart Henderson 	{ "DRC2R", NULL, "FXCLK" },
12826535e831SStuart Henderson 	{ "LHPF1", NULL, "FXCLK" },
12836535e831SStuart Henderson 	{ "LHPF2", NULL, "FXCLK" },
12846535e831SStuart Henderson 	{ "LHPF3", NULL, "FXCLK" },
12856535e831SStuart Henderson 	{ "LHPF4", NULL, "FXCLK" },
12866535e831SStuart Henderson 	{ "PWM1 Mixer", NULL, "PWMCLK" },
12876535e831SStuart Henderson 	{ "PWM2 Mixer", NULL, "PWMCLK" },
12886535e831SStuart Henderson 	{ "OUT1L", NULL, "OUTCLK" },
12896535e831SStuart Henderson 	{ "OUT1R", NULL, "OUTCLK" },
12906535e831SStuart Henderson 	{ "OUT2L", NULL, "OUTCLK" },
12916535e831SStuart Henderson 	{ "OUT2R", NULL, "OUTCLK" },
12926535e831SStuart Henderson 	{ "OUT3L", NULL, "OUTCLK" },
12936535e831SStuart Henderson 	{ "OUT3R", NULL, "OUTCLK" },
12946535e831SStuart Henderson 	{ "OUT5L", NULL, "OUTCLK" },
12956535e831SStuart Henderson 	{ "OUT5R", NULL, "OUTCLK" },
12966535e831SStuart Henderson 	{ "AIF1TX1", NULL, "AIF1TXCLK" },
12976535e831SStuart Henderson 	{ "AIF1TX2", NULL, "AIF1TXCLK" },
12986535e831SStuart Henderson 	{ "AIF1TX3", NULL, "AIF1TXCLK" },
12996535e831SStuart Henderson 	{ "AIF1TX4", NULL, "AIF1TXCLK" },
13006535e831SStuart Henderson 	{ "AIF1TX5", NULL, "AIF1TXCLK" },
13016535e831SStuart Henderson 	{ "AIF1TX6", NULL, "AIF1TXCLK" },
13026535e831SStuart Henderson 	{ "AIF1TX7", NULL, "AIF1TXCLK" },
13036535e831SStuart Henderson 	{ "AIF1TX8", NULL, "AIF1TXCLK" },
13046535e831SStuart Henderson 	{ "AIF2TX1", NULL, "AIF2TXCLK" },
13056535e831SStuart Henderson 	{ "AIF2TX2", NULL, "AIF2TXCLK" },
13066535e831SStuart Henderson 	{ "AIF2TX3", NULL, "AIF2TXCLK" },
13076535e831SStuart Henderson 	{ "AIF2TX4", NULL, "AIF2TXCLK" },
13086535e831SStuart Henderson 	{ "AIF2TX5", NULL, "AIF2TXCLK" },
13096535e831SStuart Henderson 	{ "AIF2TX6", NULL, "AIF2TXCLK" },
13106535e831SStuart Henderson 	{ "AIF2TX7", NULL, "AIF2TXCLK" },
13116535e831SStuart Henderson 	{ "AIF2TX8", NULL, "AIF2TXCLK" },
13126535e831SStuart Henderson 	{ "AIF3TX1", NULL, "AIF3TXCLK" },
13136535e831SStuart Henderson 	{ "AIF3TX2", NULL, "AIF3TXCLK" },
13146535e831SStuart Henderson 	{ "AIF3TX3", NULL, "AIF3TXCLK" },
13156535e831SStuart Henderson 	{ "AIF3TX4", NULL, "AIF3TXCLK" },
13166535e831SStuart Henderson 	{ "SLIMTX1", NULL, "SLIMBUSCLK" },
13176535e831SStuart Henderson 	{ "SLIMTX2", NULL, "SLIMBUSCLK" },
13186535e831SStuart Henderson 	{ "SLIMTX3", NULL, "SLIMBUSCLK" },
13196535e831SStuart Henderson 	{ "SLIMTX4", NULL, "SLIMBUSCLK" },
13206535e831SStuart Henderson 	{ "SLIMTX5", NULL, "SLIMBUSCLK" },
13216535e831SStuart Henderson 	{ "SLIMTX6", NULL, "SLIMBUSCLK" },
13226535e831SStuart Henderson 	{ "SLIMTX7", NULL, "SLIMBUSCLK" },
13236535e831SStuart Henderson 	{ "SLIMTX8", NULL, "SLIMBUSCLK" },
13246535e831SStuart Henderson 	{ "SPD1TX1", NULL, "SPDCLK" },
13256535e831SStuart Henderson 	{ "SPD1TX2", NULL, "SPDCLK" },
13266535e831SStuart Henderson 	{ "DSP1", NULL, "DSP1CLK" },
13276535e831SStuart Henderson 	{ "ISRC1DEC1", NULL, "ISRC1CLK" },
13286535e831SStuart Henderson 	{ "ISRC1DEC2", NULL, "ISRC1CLK" },
13296535e831SStuart Henderson 	{ "ISRC1INT1", NULL, "ISRC1CLK" },
13306535e831SStuart Henderson 	{ "ISRC1INT2", NULL, "ISRC1CLK" },
13316535e831SStuart Henderson 	{ "ISRC2DEC1", NULL, "ISRC2CLK" },
13326535e831SStuart Henderson 	{ "ISRC2DEC2", NULL, "ISRC2CLK" },
13336535e831SStuart Henderson 	{ "ISRC2INT1", NULL, "ISRC2CLK" },
13346535e831SStuart Henderson 	{ "ISRC2INT2", NULL, "ISRC2CLK" },
13356535e831SStuart Henderson 	{ "ASRC1IN1L", NULL, "ASRC1CLK" },
13366535e831SStuart Henderson 	{ "ASRC1IN1R", NULL, "ASRC1CLK" },
13376535e831SStuart Henderson 	{ "ASRC1IN2L", NULL, "ASRC1CLK" },
13386535e831SStuart Henderson 	{ "ASRC1IN2R", NULL, "ASRC1CLK" },
13396535e831SStuart Henderson 	{ "DFC1", NULL, "DFCCLK" },
13406535e831SStuart Henderson 	{ "DFC2", NULL, "DFCCLK" },
13416535e831SStuart Henderson 	{ "DFC3", NULL, "DFCCLK" },
13426535e831SStuart Henderson 	{ "DFC4", NULL, "DFCCLK" },
13436535e831SStuart Henderson 	{ "DFC5", NULL, "DFCCLK" },
13446535e831SStuart Henderson 	{ "DFC6", NULL, "DFCCLK" },
13456535e831SStuart Henderson 	{ "DFC7", NULL, "DFCCLK" },
13466535e831SStuart Henderson 	{ "DFC8", NULL, "DFCCLK" },
13476535e831SStuart Henderson 
13486535e831SStuart Henderson 	{ "OUT1L", NULL, "CPVDD1" },
13496535e831SStuart Henderson 	{ "OUT1L", NULL, "CPVDD2" },
13506535e831SStuart Henderson 	{ "OUT1R", NULL, "CPVDD1" },
13516535e831SStuart Henderson 	{ "OUT1R", NULL, "CPVDD2" },
13526535e831SStuart Henderson 	{ "OUT2L", NULL, "CPVDD1" },
13536535e831SStuart Henderson 	{ "OUT2L", NULL, "CPVDD2" },
13546535e831SStuart Henderson 	{ "OUT2R", NULL, "CPVDD1" },
13556535e831SStuart Henderson 	{ "OUT2R", NULL, "CPVDD2" },
13566535e831SStuart Henderson 	{ "OUT3L", NULL, "CPVDD1" },
13576535e831SStuart Henderson 	{ "OUT3L", NULL, "CPVDD2" },
13586535e831SStuart Henderson 	{ "OUT3R", NULL, "CPVDD1" },
13596535e831SStuart Henderson 	{ "OUT3R", NULL, "CPVDD2" },
13606535e831SStuart Henderson 
13616535e831SStuart Henderson 	{ "OUT1L", NULL, "SYSCLK" },
13626535e831SStuart Henderson 	{ "OUT1R", NULL, "SYSCLK" },
13636535e831SStuart Henderson 	{ "OUT2L", NULL, "SYSCLK" },
13646535e831SStuart Henderson 	{ "OUT2R", NULL, "SYSCLK" },
13656535e831SStuart Henderson 	{ "OUT3L", NULL, "SYSCLK" },
13666535e831SStuart Henderson 	{ "OUT3R", NULL, "SYSCLK" },
13676535e831SStuart Henderson 	{ "OUT5L", NULL, "SYSCLK" },
13686535e831SStuart Henderson 	{ "OUT5R", NULL, "SYSCLK" },
13696535e831SStuart Henderson 
13706535e831SStuart Henderson 	{ "SPD1", NULL, "SYSCLK" },
13716535e831SStuart Henderson 	{ "SPD1", NULL, "SPD1TX1" },
13726535e831SStuart Henderson 	{ "SPD1", NULL, "SPD1TX2" },
13736535e831SStuart Henderson 
13746535e831SStuart Henderson 	{ "IN1L", NULL, "SYSCLK" },
13756535e831SStuart Henderson 	{ "IN1R", NULL, "SYSCLK" },
13766535e831SStuart Henderson 	{ "IN2L", NULL, "SYSCLK" },
13776535e831SStuart Henderson 	{ "IN2R", NULL, "SYSCLK" },
13786535e831SStuart Henderson 	{ "IN3L", NULL, "SYSCLK" },
13796535e831SStuart Henderson 	{ "IN3R", NULL, "SYSCLK" },
13806535e831SStuart Henderson 	{ "IN4L", NULL, "SYSCLK" },
13816535e831SStuart Henderson 	{ "IN4R", NULL, "SYSCLK" },
13826535e831SStuart Henderson 
13836535e831SStuart Henderson 	{ "ASRC1IN1L", NULL, "SYSCLK" },
13846535e831SStuart Henderson 	{ "ASRC1IN1R", NULL, "SYSCLK" },
13856535e831SStuart Henderson 	{ "ASRC1IN2L", NULL, "SYSCLK" },
13866535e831SStuart Henderson 	{ "ASRC1IN2R", NULL, "SYSCLK" },
13876535e831SStuart Henderson 
13886535e831SStuart Henderson 	{ "ASRC1IN1L", NULL, "ASYNCCLK" },
13896535e831SStuart Henderson 	{ "ASRC1IN1R", NULL, "ASYNCCLK" },
13906535e831SStuart Henderson 	{ "ASRC1IN2L", NULL, "ASYNCCLK" },
13916535e831SStuart Henderson 	{ "ASRC1IN2R", NULL, "ASYNCCLK" },
13926535e831SStuart Henderson 
13936535e831SStuart Henderson 	{ "MICBIAS1", NULL, "MICVDD" },
13946535e831SStuart Henderson 	{ "MICBIAS2", NULL, "MICVDD" },
13956535e831SStuart Henderson 
13966535e831SStuart Henderson 	{ "MICBIAS1A", NULL, "MICBIAS1" },
13976535e831SStuart Henderson 	{ "MICBIAS1B", NULL, "MICBIAS1" },
13986535e831SStuart Henderson 	{ "MICBIAS1C", NULL, "MICBIAS1" },
13996535e831SStuart Henderson 	{ "MICBIAS1D", NULL, "MICBIAS1" },
14006535e831SStuart Henderson 
14016535e831SStuart Henderson 	{ "MICBIAS2A", NULL, "MICBIAS2" },
14026535e831SStuart Henderson 	{ "MICBIAS2B", NULL, "MICBIAS2" },
14036535e831SStuart Henderson 
14046535e831SStuart Henderson 	{ "Noise Generator", NULL, "SYSCLK" },
14056535e831SStuart Henderson 	{ "Tone Generator 1", NULL, "SYSCLK" },
14066535e831SStuart Henderson 	{ "Tone Generator 2", NULL, "SYSCLK" },
14076535e831SStuart Henderson 
14086535e831SStuart Henderson 	{ "Noise Generator", NULL, "NOISE" },
14096535e831SStuart Henderson 	{ "Tone Generator 1", NULL, "TONE" },
14106535e831SStuart Henderson 	{ "Tone Generator 2", NULL, "TONE" },
14116535e831SStuart Henderson 
14126535e831SStuart Henderson 	{ "AIF1 Capture", NULL, "AIF1TX1" },
14136535e831SStuart Henderson 	{ "AIF1 Capture", NULL, "AIF1TX2" },
14146535e831SStuart Henderson 	{ "AIF1 Capture", NULL, "AIF1TX3" },
14156535e831SStuart Henderson 	{ "AIF1 Capture", NULL, "AIF1TX4" },
14166535e831SStuart Henderson 	{ "AIF1 Capture", NULL, "AIF1TX5" },
14176535e831SStuart Henderson 	{ "AIF1 Capture", NULL, "AIF1TX6" },
14186535e831SStuart Henderson 	{ "AIF1 Capture", NULL, "AIF1TX7" },
14196535e831SStuart Henderson 	{ "AIF1 Capture", NULL, "AIF1TX8" },
14206535e831SStuart Henderson 
14216535e831SStuart Henderson 	{ "AIF1RX1", NULL, "AIF1 Playback" },
14226535e831SStuart Henderson 	{ "AIF1RX2", NULL, "AIF1 Playback" },
14236535e831SStuart Henderson 	{ "AIF1RX3", NULL, "AIF1 Playback" },
14246535e831SStuart Henderson 	{ "AIF1RX4", NULL, "AIF1 Playback" },
14256535e831SStuart Henderson 	{ "AIF1RX5", NULL, "AIF1 Playback" },
14266535e831SStuart Henderson 	{ "AIF1RX6", NULL, "AIF1 Playback" },
14276535e831SStuart Henderson 	{ "AIF1RX7", NULL, "AIF1 Playback" },
14286535e831SStuart Henderson 	{ "AIF1RX8", NULL, "AIF1 Playback" },
14296535e831SStuart Henderson 
14306535e831SStuart Henderson 	{ "AIF2 Capture", NULL, "AIF2TX1" },
14316535e831SStuart Henderson 	{ "AIF2 Capture", NULL, "AIF2TX2" },
14326535e831SStuart Henderson 	{ "AIF2 Capture", NULL, "AIF2TX3" },
14336535e831SStuart Henderson 	{ "AIF2 Capture", NULL, "AIF2TX4" },
14346535e831SStuart Henderson 	{ "AIF2 Capture", NULL, "AIF2TX5" },
14356535e831SStuart Henderson 	{ "AIF2 Capture", NULL, "AIF2TX6" },
14366535e831SStuart Henderson 	{ "AIF2 Capture", NULL, "AIF2TX7" },
14376535e831SStuart Henderson 	{ "AIF2 Capture", NULL, "AIF2TX8" },
14386535e831SStuart Henderson 
14396535e831SStuart Henderson 	{ "AIF2RX1", NULL, "AIF2 Playback" },
14406535e831SStuart Henderson 	{ "AIF2RX2", NULL, "AIF2 Playback" },
14416535e831SStuart Henderson 	{ "AIF2RX3", NULL, "AIF2 Playback" },
14426535e831SStuart Henderson 	{ "AIF2RX4", NULL, "AIF2 Playback" },
14436535e831SStuart Henderson 	{ "AIF2RX5", NULL, "AIF2 Playback" },
14446535e831SStuart Henderson 	{ "AIF2RX6", NULL, "AIF2 Playback" },
14456535e831SStuart Henderson 	{ "AIF2RX7", NULL, "AIF2 Playback" },
14466535e831SStuart Henderson 	{ "AIF2RX8", NULL, "AIF2 Playback" },
14476535e831SStuart Henderson 
14486535e831SStuart Henderson 	{ "AIF3 Capture", NULL, "AIF3TX1" },
14496535e831SStuart Henderson 	{ "AIF3 Capture", NULL, "AIF3TX2" },
14506535e831SStuart Henderson 	{ "AIF3 Capture", NULL, "AIF3TX3" },
14516535e831SStuart Henderson 	{ "AIF3 Capture", NULL, "AIF3TX4" },
14526535e831SStuart Henderson 
14536535e831SStuart Henderson 	{ "AIF3RX1", NULL, "AIF3 Playback" },
14546535e831SStuart Henderson 	{ "AIF3RX2", NULL, "AIF3 Playback" },
14556535e831SStuart Henderson 	{ "AIF3RX3", NULL, "AIF3 Playback" },
14566535e831SStuart Henderson 	{ "AIF3RX4", NULL, "AIF3 Playback" },
14576535e831SStuart Henderson 
14586535e831SStuart Henderson 	{ "Slim1 Capture", NULL, "SLIMTX1" },
14596535e831SStuart Henderson 	{ "Slim1 Capture", NULL, "SLIMTX2" },
14606535e831SStuart Henderson 	{ "Slim1 Capture", NULL, "SLIMTX3" },
14616535e831SStuart Henderson 	{ "Slim1 Capture", NULL, "SLIMTX4" },
14626535e831SStuart Henderson 
14636535e831SStuart Henderson 	{ "SLIMRX1", NULL, "Slim1 Playback" },
14646535e831SStuart Henderson 	{ "SLIMRX2", NULL, "Slim1 Playback" },
14656535e831SStuart Henderson 	{ "SLIMRX3", NULL, "Slim1 Playback" },
14666535e831SStuart Henderson 	{ "SLIMRX4", NULL, "Slim1 Playback" },
14676535e831SStuart Henderson 
14686535e831SStuart Henderson 	{ "Slim2 Capture", NULL, "SLIMTX5" },
14696535e831SStuart Henderson 	{ "Slim2 Capture", NULL, "SLIMTX6" },
14706535e831SStuart Henderson 
14716535e831SStuart Henderson 	{ "SLIMRX5", NULL, "Slim2 Playback" },
14726535e831SStuart Henderson 	{ "SLIMRX6", NULL, "Slim2 Playback" },
14736535e831SStuart Henderson 
14746535e831SStuart Henderson 	{ "Slim3 Capture", NULL, "SLIMTX7" },
14756535e831SStuart Henderson 	{ "Slim3 Capture", NULL, "SLIMTX8" },
14766535e831SStuart Henderson 
14776535e831SStuart Henderson 	{ "SLIMRX7", NULL, "Slim3 Playback" },
14786535e831SStuart Henderson 	{ "SLIMRX8", NULL, "Slim3 Playback" },
14796535e831SStuart Henderson 
14806535e831SStuart Henderson 	{ "AIF1 Playback", NULL, "SYSCLK" },
14816535e831SStuart Henderson 	{ "AIF2 Playback", NULL, "SYSCLK" },
14826535e831SStuart Henderson 	{ "AIF3 Playback", NULL, "SYSCLK" },
14836535e831SStuart Henderson 	{ "Slim1 Playback", NULL, "SYSCLK" },
14846535e831SStuart Henderson 	{ "Slim2 Playback", NULL, "SYSCLK" },
14856535e831SStuart Henderson 	{ "Slim3 Playback", NULL, "SYSCLK" },
14866535e831SStuart Henderson 
14876535e831SStuart Henderson 	{ "AIF1 Capture", NULL, "SYSCLK" },
14886535e831SStuart Henderson 	{ "AIF2 Capture", NULL, "SYSCLK" },
14896535e831SStuart Henderson 	{ "AIF3 Capture", NULL, "SYSCLK" },
14906535e831SStuart Henderson 	{ "Slim1 Capture", NULL, "SYSCLK" },
14916535e831SStuart Henderson 	{ "Slim2 Capture", NULL, "SYSCLK" },
14926535e831SStuart Henderson 	{ "Slim3 Capture", NULL, "SYSCLK" },
14936535e831SStuart Henderson 
14946535e831SStuart Henderson 	{ "Audio Trace DSP", NULL, "DSP1" },
14956535e831SStuart Henderson 
14966535e831SStuart Henderson 	{ "IN1L Analog Mux", "A", "IN1ALN" },
14976535e831SStuart Henderson 	{ "IN1L Analog Mux", "A", "IN1ALP" },
14986535e831SStuart Henderson 	{ "IN1L Analog Mux", "B", "IN1BLN" },
14996535e831SStuart Henderson 	{ "IN1L Analog Mux", "B", "IN1BLP" },
15006535e831SStuart Henderson 	{ "IN1R Analog Mux", "A", "IN1ARN" },
15016535e831SStuart Henderson 	{ "IN1R Analog Mux", "A", "IN1ARP" },
15026535e831SStuart Henderson 	{ "IN1R Analog Mux", "B", "IN1BR" },
15036535e831SStuart Henderson 	{ "IN1R Analog Mux", "B", "IN1ALN" },
15046535e831SStuart Henderson 
15056535e831SStuart Henderson 	{ "IN1L Mode", "Analog", "IN1L Analog Mux" },
15066535e831SStuart Henderson 	{ "IN1R Mode", "Analog", "IN1R Analog Mux" },
15076535e831SStuart Henderson 
15086535e831SStuart Henderson 	{ "IN1L Mode", "Digital", "IN1ALN" },
15096535e831SStuart Henderson 	{ "IN1L Mode", "Digital", "IN1ALP" },
15106535e831SStuart Henderson 	{ "IN1R Mode", "Digital", "IN1ALN" },
15116535e831SStuart Henderson 	{ "IN1R Mode", "Digital", "IN1ALP" },
15126535e831SStuart Henderson 
15136535e831SStuart Henderson 	{ "IN1L", NULL, "IN1L Mode" },
15146535e831SStuart Henderson 	{ "IN1R", NULL, "IN1R Mode" },
15156535e831SStuart Henderson 
15166535e831SStuart Henderson 	{ "IN2L Analog Mux", "A", "IN2ALN" },
15176535e831SStuart Henderson 	{ "IN2L Analog Mux", "A", "IN2ALP" },
15186535e831SStuart Henderson 	{ "IN2L Analog Mux", "B", "IN2ALN" },
15196535e831SStuart Henderson 	{ "IN2L Analog Mux", "B", "IN2BL" },
15206535e831SStuart Henderson 	{ "IN2R Analog Mux", "A", "IN2ARN" },
15216535e831SStuart Henderson 	{ "IN2R Analog Mux", "A", "IN2ARP" },
15226535e831SStuart Henderson 	{ "IN2R Analog Mux", "B", "IN2ARN" },
15236535e831SStuart Henderson 	{ "IN2R Analog Mux", "B", "IN2BR" },
15246535e831SStuart Henderson 
15256535e831SStuart Henderson 	{ "IN2L Mode", "Analog", "IN2L Analog Mux" },
15266535e831SStuart Henderson 	{ "IN2R Mode", "Analog", "IN2R Analog Mux" },
15276535e831SStuart Henderson 
15286535e831SStuart Henderson 	{ "IN2L Mode", "Digital", "IN2ALN" },
15296535e831SStuart Henderson 	{ "IN2L Mode", "Digital", "IN2ALP" },
15306535e831SStuart Henderson 	{ "IN2R Mode", "Digital", "IN2ALN" },
15316535e831SStuart Henderson 	{ "IN2R Mode", "Digital", "IN2ALP" },
15326535e831SStuart Henderson 
15336535e831SStuart Henderson 	{ "IN2L", NULL, "IN2L Mode" },
15346535e831SStuart Henderson 	{ "IN2R", NULL, "IN2R Mode" },
15356535e831SStuart Henderson 
15366535e831SStuart Henderson 	{ "IN3L", NULL, "IN1ARN" },
15376535e831SStuart Henderson 	{ "IN3L", NULL, "IN1ARP" },
15386535e831SStuart Henderson 	{ "IN3R", NULL, "IN1ARN" },
15396535e831SStuart Henderson 	{ "IN3R", NULL, "IN1ARP" },
15406535e831SStuart Henderson 
15416535e831SStuart Henderson 	{ "IN4L", NULL, "IN2ARN" },
15426535e831SStuart Henderson 	{ "IN4L", NULL, "IN2ARP" },
15436535e831SStuart Henderson 	{ "IN4R", NULL, "IN2ARN" },
15446535e831SStuart Henderson 	{ "IN4R", NULL, "IN2ARP" },
15456535e831SStuart Henderson 
15466535e831SStuart Henderson 	MADERA_MIXER_ROUTES("OUT1L", "HPOUT1L"),
15476535e831SStuart Henderson 	MADERA_MIXER_ROUTES("OUT1R", "HPOUT1R"),
15486535e831SStuart Henderson 	MADERA_MIXER_ROUTES("OUT2L", "HPOUT2L"),
15496535e831SStuart Henderson 	MADERA_MIXER_ROUTES("OUT2R", "HPOUT2R"),
15506535e831SStuart Henderson 	MADERA_MIXER_ROUTES("OUT3L", "HPOUT3L"),
15516535e831SStuart Henderson 	MADERA_MIXER_ROUTES("OUT3R", "HPOUT3R"),
15526535e831SStuart Henderson 
15536535e831SStuart Henderson 	MADERA_MIXER_ROUTES("OUT5L", "SPKDAT1L"),
15546535e831SStuart Henderson 	MADERA_MIXER_ROUTES("OUT5R", "SPKDAT1R"),
15556535e831SStuart Henderson 
15566535e831SStuart Henderson 	MADERA_MIXER_ROUTES("PWM1 Driver", "PWM1"),
15576535e831SStuart Henderson 	MADERA_MIXER_ROUTES("PWM2 Driver", "PWM2"),
15586535e831SStuart Henderson 
15596535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF1TX1", "AIF1TX1"),
15606535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF1TX2", "AIF1TX2"),
15616535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF1TX3", "AIF1TX3"),
15626535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF1TX4", "AIF1TX4"),
15636535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF1TX5", "AIF1TX5"),
15646535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF1TX6", "AIF1TX6"),
15656535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF1TX7", "AIF1TX7"),
15666535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF1TX8", "AIF1TX8"),
15676535e831SStuart Henderson 
15686535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF2TX1", "AIF2TX1"),
15696535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF2TX2", "AIF2TX2"),
15706535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF2TX3", "AIF2TX3"),
15716535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF2TX4", "AIF2TX4"),
15726535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF2TX5", "AIF2TX5"),
15736535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF2TX6", "AIF2TX6"),
15746535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF2TX7", "AIF2TX7"),
15756535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF2TX8", "AIF2TX8"),
15766535e831SStuart Henderson 
15776535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF3TX1", "AIF3TX1"),
15786535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF3TX2", "AIF3TX2"),
15796535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF3TX3", "AIF3TX3"),
15806535e831SStuart Henderson 	MADERA_MIXER_ROUTES("AIF3TX4", "AIF3TX4"),
15816535e831SStuart Henderson 
15826535e831SStuart Henderson 	MADERA_MIXER_ROUTES("SLIMTX1", "SLIMTX1"),
15836535e831SStuart Henderson 	MADERA_MIXER_ROUTES("SLIMTX2", "SLIMTX2"),
15846535e831SStuart Henderson 	MADERA_MIXER_ROUTES("SLIMTX3", "SLIMTX3"),
15856535e831SStuart Henderson 	MADERA_MIXER_ROUTES("SLIMTX4", "SLIMTX4"),
15866535e831SStuart Henderson 	MADERA_MIXER_ROUTES("SLIMTX5", "SLIMTX5"),
15876535e831SStuart Henderson 	MADERA_MIXER_ROUTES("SLIMTX6", "SLIMTX6"),
15886535e831SStuart Henderson 	MADERA_MIXER_ROUTES("SLIMTX7", "SLIMTX7"),
15896535e831SStuart Henderson 	MADERA_MIXER_ROUTES("SLIMTX8", "SLIMTX8"),
15906535e831SStuart Henderson 
15916535e831SStuart Henderson 	MADERA_MUX_ROUTES("SPD1TX1", "SPDIFTX1"),
15926535e831SStuart Henderson 	MADERA_MUX_ROUTES("SPD1TX2", "SPDIFTX2"),
15936535e831SStuart Henderson 
15946535e831SStuart Henderson 	MADERA_MIXER_ROUTES("EQ1", "EQ1"),
15956535e831SStuart Henderson 	MADERA_MIXER_ROUTES("EQ2", "EQ2"),
15966535e831SStuart Henderson 	MADERA_MIXER_ROUTES("EQ3", "EQ3"),
15976535e831SStuart Henderson 	MADERA_MIXER_ROUTES("EQ4", "EQ4"),
15986535e831SStuart Henderson 
15996535e831SStuart Henderson 	MADERA_MIXER_ROUTES("DRC1L", "DRC1L"),
16006535e831SStuart Henderson 	MADERA_MIXER_ROUTES("DRC1R", "DRC1R"),
16016535e831SStuart Henderson 	MADERA_MIXER_ROUTES("DRC2L", "DRC2L"),
16026535e831SStuart Henderson 	MADERA_MIXER_ROUTES("DRC2R", "DRC2R"),
16036535e831SStuart Henderson 
16046535e831SStuart Henderson 	MADERA_MIXER_ROUTES("LHPF1", "LHPF1"),
16056535e831SStuart Henderson 	MADERA_MIXER_ROUTES("LHPF2", "LHPF2"),
16066535e831SStuart Henderson 	MADERA_MIXER_ROUTES("LHPF3", "LHPF3"),
16076535e831SStuart Henderson 	MADERA_MIXER_ROUTES("LHPF4", "LHPF4"),
16086535e831SStuart Henderson 
16096535e831SStuart Henderson 	MADERA_MUX_ROUTES("ASRC1IN1L", "ASRC1IN1L"),
16106535e831SStuart Henderson 	MADERA_MUX_ROUTES("ASRC1IN1R", "ASRC1IN1R"),
16116535e831SStuart Henderson 	MADERA_MUX_ROUTES("ASRC1IN2L", "ASRC1IN2L"),
16126535e831SStuart Henderson 	MADERA_MUX_ROUTES("ASRC1IN2R", "ASRC1IN2R"),
16136535e831SStuart Henderson 
16146535e831SStuart Henderson 	MADERA_DSP_ROUTES("DSP1"),
16156535e831SStuart Henderson 
16166535e831SStuart Henderson 	MADERA_MUX_ROUTES("ISRC1INT1", "ISRC1INT1"),
16176535e831SStuart Henderson 	MADERA_MUX_ROUTES("ISRC1INT2", "ISRC1INT2"),
16186535e831SStuart Henderson 
16196535e831SStuart Henderson 	MADERA_MUX_ROUTES("ISRC1DEC1", "ISRC1DEC1"),
16206535e831SStuart Henderson 	MADERA_MUX_ROUTES("ISRC1DEC2", "ISRC1DEC2"),
16216535e831SStuart Henderson 
16226535e831SStuart Henderson 	MADERA_MUX_ROUTES("ISRC2INT1", "ISRC2INT1"),
16236535e831SStuart Henderson 	MADERA_MUX_ROUTES("ISRC2INT2", "ISRC2INT2"),
16246535e831SStuart Henderson 
16256535e831SStuart Henderson 	MADERA_MUX_ROUTES("ISRC2DEC1", "ISRC2DEC1"),
16266535e831SStuart Henderson 	MADERA_MUX_ROUTES("ISRC2DEC2", "ISRC2DEC2"),
16276535e831SStuart Henderson 
16286535e831SStuart Henderson 	{ "AEC1 Loopback", "HPOUT1L", "OUT1L" },
16296535e831SStuart Henderson 	{ "AEC1 Loopback", "HPOUT1R", "OUT1R" },
16306535e831SStuart Henderson 	{ "HPOUT1L", NULL, "OUT1L" },
16316535e831SStuart Henderson 	{ "HPOUT1R", NULL, "OUT1R" },
16326535e831SStuart Henderson 
16336535e831SStuart Henderson 	{ "AEC1 Loopback", "HPOUT2L", "OUT2L" },
16346535e831SStuart Henderson 	{ "AEC1 Loopback", "HPOUT2R", "OUT2R" },
16356535e831SStuart Henderson 	{ "HPOUT2L", NULL, "OUT2L" },
16366535e831SStuart Henderson 	{ "HPOUT2R", NULL, "OUT2R" },
16376535e831SStuart Henderson 
16386535e831SStuart Henderson 	{ "AEC1 Loopback", "HPOUT3L", "OUT3L" },
16396535e831SStuart Henderson 	{ "AEC1 Loopback", "HPOUT3R", "OUT3R" },
16406535e831SStuart Henderson 	{ "OUT3 Demux", NULL, "OUT3L" },
16416535e831SStuart Henderson 	{ "OUT3 Demux", NULL, "OUT3R" },
16426535e831SStuart Henderson 
16438ab6ddc5SCharles Keepax 	{ "OUT3R", NULL, "OUT3 Mono Mux" },
16448ab6ddc5SCharles Keepax 
16456535e831SStuart Henderson 	{ "HPOUT3L", "HPOUT3", "OUT3 Demux" },
16466535e831SStuart Henderson 	{ "HPOUT3R", "HPOUT3", "OUT3 Demux" },
16476535e831SStuart Henderson 	{ "HPOUT4L", "HPOUT4", "OUT3 Demux" },
16486535e831SStuart Henderson 	{ "HPOUT4R", "HPOUT4", "OUT3 Demux" },
16496535e831SStuart Henderson 
16506535e831SStuart Henderson 	{ "AEC1 Loopback", "SPKDAT1L", "OUT5L" },
16516535e831SStuart Henderson 	{ "AEC1 Loopback", "SPKDAT1R", "OUT5R" },
16526535e831SStuart Henderson 	{ "SPKDAT1L", NULL, "OUT5L" },
16536535e831SStuart Henderson 	{ "SPKDAT1R", NULL, "OUT5R" },
16546535e831SStuart Henderson 
16556535e831SStuart Henderson 	{ "SPDIF1", NULL, "SPD1" },
16566535e831SStuart Henderson 
16576535e831SStuart Henderson 	{ "MICSUPP", NULL, "SYSCLK" },
16586535e831SStuart Henderson 
16596535e831SStuart Henderson 	{ "DRC1 Signal Activity", NULL, "DRC1 Activity Output" },
16606535e831SStuart Henderson 	{ "DRC2 Signal Activity", NULL, "DRC2 Activity Output" },
16616535e831SStuart Henderson 	{ "DRC1 Activity Output", "Switch", "DRC1L" },
16626535e831SStuart Henderson 	{ "DRC1 Activity Output", "Switch", "DRC1R" },
16636535e831SStuart Henderson 	{ "DRC2 Activity Output", "Switch", "DRC2L" },
16646535e831SStuart Henderson 	{ "DRC2 Activity Output", "Switch", "DRC2R" },
16656535e831SStuart Henderson 
16666535e831SStuart Henderson 	MADERA_MUX_ROUTES("DFC1", "DFC1"),
16676535e831SStuart Henderson 	MADERA_MUX_ROUTES("DFC2", "DFC2"),
16686535e831SStuart Henderson 	MADERA_MUX_ROUTES("DFC3", "DFC3"),
16696535e831SStuart Henderson 	MADERA_MUX_ROUTES("DFC4", "DFC4"),
16706535e831SStuart Henderson 	MADERA_MUX_ROUTES("DFC5", "DFC5"),
16716535e831SStuart Henderson 	MADERA_MUX_ROUTES("DFC6", "DFC6"),
16726535e831SStuart Henderson 	MADERA_MUX_ROUTES("DFC7", "DFC7"),
16736535e831SStuart Henderson 	MADERA_MUX_ROUTES("DFC8", "DFC8"),
16746535e831SStuart Henderson };
16756535e831SStuart Henderson 
cs47l92_set_fll(struct snd_soc_component * component,int fll_id,int source,unsigned int fref,unsigned int fout)16766535e831SStuart Henderson static int cs47l92_set_fll(struct snd_soc_component *component, int fll_id,
16776535e831SStuart Henderson 			   int source, unsigned int fref, unsigned int fout)
16786535e831SStuart Henderson {
16796535e831SStuart Henderson 	struct cs47l92 *cs47l92 = snd_soc_component_get_drvdata(component);
16806535e831SStuart Henderson 
16816535e831SStuart Henderson 	switch (fll_id) {
16826535e831SStuart Henderson 	case MADERA_FLL1_REFCLK:
16836535e831SStuart Henderson 		return madera_fllhj_set_refclk(&cs47l92->fll[0], source, fref,
16846535e831SStuart Henderson 					       fout);
16856535e831SStuart Henderson 	case MADERA_FLL2_REFCLK:
16866535e831SStuart Henderson 		return madera_fllhj_set_refclk(&cs47l92->fll[1], source, fref,
16876535e831SStuart Henderson 					       fout);
16886535e831SStuart Henderson 	default:
16896535e831SStuart Henderson 		return -EINVAL;
16906535e831SStuart Henderson 	}
16916535e831SStuart Henderson }
16926535e831SStuart Henderson 
1693*e22a907dSKuninori Morimoto static const struct snd_soc_dai_ops cs47l92_dai_ops = {
1694*e22a907dSKuninori Morimoto 	.compress_new = snd_soc_new_compress,
1695*e22a907dSKuninori Morimoto };
1696*e22a907dSKuninori Morimoto 
16976535e831SStuart Henderson static struct snd_soc_dai_driver cs47l92_dai[] = {
16986535e831SStuart Henderson 	{
16996535e831SStuart Henderson 		.name = "cs47l92-aif1",
17006535e831SStuart Henderson 		.id = 1,
17016535e831SStuart Henderson 		.base = MADERA_AIF1_BCLK_CTRL,
17026535e831SStuart Henderson 		.playback = {
17036535e831SStuart Henderson 			.stream_name = "AIF1 Playback",
17046535e831SStuart Henderson 			.channels_min = 1,
17056535e831SStuart Henderson 			.channels_max = 8,
17066535e831SStuart Henderson 			.rates = MADERA_RATES,
17076535e831SStuart Henderson 			.formats = MADERA_FORMATS,
17086535e831SStuart Henderson 		},
17096535e831SStuart Henderson 		.capture = {
17106535e831SStuart Henderson 			.stream_name = "AIF1 Capture",
17116535e831SStuart Henderson 			.channels_min = 1,
17126535e831SStuart Henderson 			.channels_max = 8,
17136535e831SStuart Henderson 			.rates = MADERA_RATES,
17146535e831SStuart Henderson 			.formats = MADERA_FORMATS,
17156535e831SStuart Henderson 		 },
17166535e831SStuart Henderson 		.ops = &madera_dai_ops,
1717260b668cSKuninori Morimoto 		.symmetric_rate = 1,
1718260b668cSKuninori Morimoto 		.symmetric_sample_bits = 1,
17196535e831SStuart Henderson 	},
17206535e831SStuart Henderson 	{
17216535e831SStuart Henderson 		.name = "cs47l92-aif2",
17226535e831SStuart Henderson 		.id = 2,
17236535e831SStuart Henderson 		.base = MADERA_AIF2_BCLK_CTRL,
17246535e831SStuart Henderson 		.playback = {
17256535e831SStuart Henderson 			.stream_name = "AIF2 Playback",
17266535e831SStuart Henderson 			.channels_min = 1,
17276535e831SStuart Henderson 			.channels_max = 8,
17286535e831SStuart Henderson 			.rates = MADERA_RATES,
17296535e831SStuart Henderson 			.formats = MADERA_FORMATS,
17306535e831SStuart Henderson 		},
17316535e831SStuart Henderson 		.capture = {
17326535e831SStuart Henderson 			.stream_name = "AIF2 Capture",
17336535e831SStuart Henderson 			.channels_min = 1,
17346535e831SStuart Henderson 			.channels_max = 8,
17356535e831SStuart Henderson 			.rates = MADERA_RATES,
17366535e831SStuart Henderson 			.formats = MADERA_FORMATS,
17376535e831SStuart Henderson 		 },
17386535e831SStuart Henderson 		.ops = &madera_dai_ops,
1739260b668cSKuninori Morimoto 		.symmetric_rate = 1,
1740260b668cSKuninori Morimoto 		.symmetric_sample_bits = 1,
17416535e831SStuart Henderson 	},
17426535e831SStuart Henderson 	{
17436535e831SStuart Henderson 		.name = "cs47l92-aif3",
17446535e831SStuart Henderson 		.id = 3,
17456535e831SStuart Henderson 		.base = MADERA_AIF3_BCLK_CTRL,
17466535e831SStuart Henderson 		.playback = {
17476535e831SStuart Henderson 			.stream_name = "AIF3 Playback",
17486535e831SStuart Henderson 			.channels_min = 1,
17496535e831SStuart Henderson 			.channels_max = 4,
17506535e831SStuart Henderson 			.rates = MADERA_RATES,
17516535e831SStuart Henderson 			.formats = MADERA_FORMATS,
17526535e831SStuart Henderson 		},
17536535e831SStuart Henderson 		.capture = {
17546535e831SStuart Henderson 			.stream_name = "AIF3 Capture",
17556535e831SStuart Henderson 			.channels_min = 1,
17566535e831SStuart Henderson 			.channels_max = 4,
17576535e831SStuart Henderson 			.rates = MADERA_RATES,
17586535e831SStuart Henderson 			.formats = MADERA_FORMATS,
17596535e831SStuart Henderson 		 },
17606535e831SStuart Henderson 		.ops = &madera_dai_ops,
1761260b668cSKuninori Morimoto 		.symmetric_rate = 1,
1762260b668cSKuninori Morimoto 		.symmetric_sample_bits = 1,
17636535e831SStuart Henderson 	},
17646535e831SStuart Henderson 	{
17656535e831SStuart Henderson 		.name = "cs47l92-slim1",
17666535e831SStuart Henderson 		.id = 5,
17676535e831SStuart Henderson 		.playback = {
17686535e831SStuart Henderson 			.stream_name = "Slim1 Playback",
17696535e831SStuart Henderson 			.channels_min = 1,
17706535e831SStuart Henderson 			.channels_max = 4,
17716535e831SStuart Henderson 			.rates = MADERA_RATES,
17726535e831SStuart Henderson 			.formats = MADERA_FORMATS,
17736535e831SStuart Henderson 		},
17746535e831SStuart Henderson 		.capture = {
17756535e831SStuart Henderson 			.stream_name = "Slim1 Capture",
17766535e831SStuart Henderson 			.channels_min = 1,
17776535e831SStuart Henderson 			.channels_max = 4,
17786535e831SStuart Henderson 			.rates = MADERA_RATES,
17796535e831SStuart Henderson 			.formats = MADERA_FORMATS,
17806535e831SStuart Henderson 		 },
17816535e831SStuart Henderson 		.ops = &madera_simple_dai_ops,
17826535e831SStuart Henderson 	},
17836535e831SStuart Henderson 	{
17846535e831SStuart Henderson 		.name = "cs47l92-slim2",
17856535e831SStuart Henderson 		.id = 6,
17866535e831SStuart Henderson 		.playback = {
17876535e831SStuart Henderson 			.stream_name = "Slim2 Playback",
17886535e831SStuart Henderson 			.channels_min = 1,
17896535e831SStuart Henderson 			.channels_max = 2,
17906535e831SStuart Henderson 			.rates = MADERA_RATES,
17916535e831SStuart Henderson 			.formats = MADERA_FORMATS,
17926535e831SStuart Henderson 		},
17936535e831SStuart Henderson 		.capture = {
17946535e831SStuart Henderson 			.stream_name = "Slim2 Capture",
17956535e831SStuart Henderson 			.channels_min = 1,
17966535e831SStuart Henderson 			.channels_max = 2,
17976535e831SStuart Henderson 			.rates = MADERA_RATES,
17986535e831SStuart Henderson 			.formats = MADERA_FORMATS,
17996535e831SStuart Henderson 		 },
18006535e831SStuart Henderson 		.ops = &madera_simple_dai_ops,
18016535e831SStuart Henderson 	},
18026535e831SStuart Henderson 	{
18036535e831SStuart Henderson 		.name = "cs47l92-slim3",
18046535e831SStuart Henderson 		.id = 7,
18056535e831SStuart Henderson 		.playback = {
18066535e831SStuart Henderson 			.stream_name = "Slim3 Playback",
18076535e831SStuart Henderson 			.channels_min = 1,
18086535e831SStuart Henderson 			.channels_max = 2,
18096535e831SStuart Henderson 			.rates = MADERA_RATES,
18106535e831SStuart Henderson 			.formats = MADERA_FORMATS,
18116535e831SStuart Henderson 		},
18126535e831SStuart Henderson 		.capture = {
18136535e831SStuart Henderson 			.stream_name = "Slim3 Capture",
18146535e831SStuart Henderson 			.channels_min = 1,
18156535e831SStuart Henderson 			.channels_max = 2,
18166535e831SStuart Henderson 			.rates = MADERA_RATES,
18176535e831SStuart Henderson 			.formats = MADERA_FORMATS,
18186535e831SStuart Henderson 		 },
18196535e831SStuart Henderson 		.ops = &madera_simple_dai_ops,
18206535e831SStuart Henderson 	},
18216535e831SStuart Henderson 	{
18226535e831SStuart Henderson 		.name = "cs47l92-cpu-trace",
18236535e831SStuart Henderson 		.capture = {
18246535e831SStuart Henderson 			.stream_name = "Audio Trace CPU",
18256535e831SStuart Henderson 			.channels_min = 1,
18266535e831SStuart Henderson 			.channels_max = 2,
18276535e831SStuart Henderson 			.rates = MADERA_RATES,
18286535e831SStuart Henderson 			.formats = MADERA_FORMATS,
18296535e831SStuart Henderson 		},
1830*e22a907dSKuninori Morimoto 		.ops = &cs47l92_dai_ops,
18316535e831SStuart Henderson 	},
18326535e831SStuart Henderson 	{
18336535e831SStuart Henderson 		.name = "cs47l92-dsp-trace",
18346535e831SStuart Henderson 		.capture = {
18356535e831SStuart Henderson 			.stream_name = "Audio Trace DSP",
18366535e831SStuart Henderson 			.channels_min = 1,
18376535e831SStuart Henderson 			.channels_max = 2,
18386535e831SStuart Henderson 			.rates = MADERA_RATES,
18396535e831SStuart Henderson 			.formats = MADERA_FORMATS,
18406535e831SStuart Henderson 		},
18416535e831SStuart Henderson 	},
18426535e831SStuart Henderson };
18436535e831SStuart Henderson 
cs47l92_open(struct snd_soc_component * component,struct snd_compr_stream * stream)18443a5ccf25SKuninori Morimoto static int cs47l92_open(struct snd_soc_component *component,
18453a5ccf25SKuninori Morimoto 			struct snd_compr_stream *stream)
18466535e831SStuart Henderson {
18476535e831SStuart Henderson 	struct snd_soc_pcm_runtime *rtd = stream->private_data;
18486535e831SStuart Henderson 	struct cs47l92 *cs47l92 = snd_soc_component_get_drvdata(component);
18496535e831SStuart Henderson 	struct madera_priv *priv = &cs47l92->core;
18506535e831SStuart Henderson 	struct madera *madera = priv->madera;
18516535e831SStuart Henderson 	int n_adsp;
18526535e831SStuart Henderson 
1853b5cb8558SKuninori Morimoto 	if (strcmp(asoc_rtd_to_codec(rtd, 0)->name, "cs47l92-dsp-trace") == 0) {
18546535e831SStuart Henderson 		n_adsp = 0;
18556535e831SStuart Henderson 	} else {
18566535e831SStuart Henderson 		dev_err(madera->dev,
18576535e831SStuart Henderson 			"No suitable compressed stream for DAI '%s'\n",
1858b5cb8558SKuninori Morimoto 			asoc_rtd_to_codec(rtd, 0)->name);
18596535e831SStuart Henderson 		return -EINVAL;
18606535e831SStuart Henderson 	}
18616535e831SStuart Henderson 
18626535e831SStuart Henderson 	return wm_adsp_compr_open(&priv->adsp[n_adsp], stream);
18636535e831SStuart Henderson }
18646535e831SStuart Henderson 
cs47l92_adsp2_irq(int irq,void * data)18656535e831SStuart Henderson static irqreturn_t cs47l92_adsp2_irq(int irq, void *data)
18666535e831SStuart Henderson {
18676535e831SStuart Henderson 	struct cs47l92 *cs47l92 = data;
18686535e831SStuart Henderson 	struct madera_priv *priv = &cs47l92->core;
18696535e831SStuart Henderson 	struct madera *madera = priv->madera;
18706535e831SStuart Henderson 	int ret;
18716535e831SStuart Henderson 
18726535e831SStuart Henderson 	ret = wm_adsp_compr_handle_irq(&priv->adsp[0]);
18736535e831SStuart Henderson 	if (ret == -ENODEV) {
18746535e831SStuart Henderson 		dev_err(madera->dev, "Spurious compressed data IRQ\n");
18756535e831SStuart Henderson 		return IRQ_NONE;
18766535e831SStuart Henderson 	}
18776535e831SStuart Henderson 
18786535e831SStuart Henderson 	return IRQ_HANDLED;
18796535e831SStuart Henderson }
18806535e831SStuart Henderson 
18818ab6ddc5SCharles Keepax static const struct snd_soc_dapm_route cs47l92_mono_routes[] = {
18828ab6ddc5SCharles Keepax 	{ "OUT1R", NULL, "OUT1L" },
18838ab6ddc5SCharles Keepax 	{ "OUT2R", NULL, "OUT2L" },
18848ab6ddc5SCharles Keepax 	{ "OUT3 Mono Mux", "HPOUT3", "OUT3L" },
18858ab6ddc5SCharles Keepax 	{ "OUT3 Mono Mux", "HPOUT4", "OUT3L" },
18868ab6ddc5SCharles Keepax };
18878ab6ddc5SCharles Keepax 
cs47l92_component_probe(struct snd_soc_component * component)18886535e831SStuart Henderson static int cs47l92_component_probe(struct snd_soc_component *component)
18896535e831SStuart Henderson {
18906535e831SStuart Henderson 	struct cs47l92 *cs47l92 = snd_soc_component_get_drvdata(component);
18916535e831SStuart Henderson 	struct madera *madera = cs47l92->core.madera;
18926535e831SStuart Henderson 	int ret;
18936535e831SStuart Henderson 
18946535e831SStuart Henderson 	snd_soc_component_init_regmap(component, madera->regmap);
18956535e831SStuart Henderson 
18966535e831SStuart Henderson 	mutex_lock(&madera->dapm_ptr_lock);
18976535e831SStuart Henderson 	madera->dapm = snd_soc_component_get_dapm(component);
18986535e831SStuart Henderson 	mutex_unlock(&madera->dapm_ptr_lock);
18996535e831SStuart Henderson 
19006535e831SStuart Henderson 	ret = madera_init_inputs(component);
19016535e831SStuart Henderson 	if (ret)
19026535e831SStuart Henderson 		return ret;
19036535e831SStuart Henderson 
19048ab6ddc5SCharles Keepax 	ret = madera_init_outputs(component, cs47l92_mono_routes,
19058ab6ddc5SCharles Keepax 				  ARRAY_SIZE(cs47l92_mono_routes),
19068ab6ddc5SCharles Keepax 				  CS47L92_MONO_OUTPUTS);
19076535e831SStuart Henderson 	if (ret)
19086535e831SStuart Henderson 		return ret;
19096535e831SStuart Henderson 
19106535e831SStuart Henderson 	snd_soc_component_disable_pin(component, "HAPTICS");
19116535e831SStuart Henderson 
19126535e831SStuart Henderson 	ret = snd_soc_add_component_controls(component,
19136535e831SStuart Henderson 					     madera_adsp_rate_controls,
19146535e831SStuart Henderson 					     CS47L92_NUM_ADSP);
19156535e831SStuart Henderson 	if (ret)
19166535e831SStuart Henderson 		return ret;
19176535e831SStuart Henderson 
19186535e831SStuart Henderson 	return wm_adsp2_component_probe(&cs47l92->core.adsp[0], component);
19196535e831SStuart Henderson }
19206535e831SStuart Henderson 
cs47l92_component_remove(struct snd_soc_component * component)19216535e831SStuart Henderson static void cs47l92_component_remove(struct snd_soc_component *component)
19226535e831SStuart Henderson {
19236535e831SStuart Henderson 	struct cs47l92 *cs47l92 = snd_soc_component_get_drvdata(component);
19246535e831SStuart Henderson 	struct madera *madera = cs47l92->core.madera;
19256535e831SStuart Henderson 
19266535e831SStuart Henderson 	mutex_lock(&madera->dapm_ptr_lock);
19276535e831SStuart Henderson 	madera->dapm = NULL;
19286535e831SStuart Henderson 	mutex_unlock(&madera->dapm_ptr_lock);
19296535e831SStuart Henderson 
19306535e831SStuart Henderson 	wm_adsp2_component_remove(&cs47l92->core.adsp[0], component);
19316535e831SStuart Henderson }
19326535e831SStuart Henderson 
19336535e831SStuart Henderson #define CS47L92_DIG_VU 0x0200
19346535e831SStuart Henderson 
19356535e831SStuart Henderson static unsigned int cs47l92_digital_vu[] = {
19366535e831SStuart Henderson 	MADERA_DAC_DIGITAL_VOLUME_1L,
19376535e831SStuart Henderson 	MADERA_DAC_DIGITAL_VOLUME_1R,
19386535e831SStuart Henderson 	MADERA_DAC_DIGITAL_VOLUME_2L,
19396535e831SStuart Henderson 	MADERA_DAC_DIGITAL_VOLUME_2R,
19406535e831SStuart Henderson 	MADERA_DAC_DIGITAL_VOLUME_3L,
19416535e831SStuart Henderson 	MADERA_DAC_DIGITAL_VOLUME_3R,
19426535e831SStuart Henderson 	MADERA_DAC_DIGITAL_VOLUME_5L,
19436535e831SStuart Henderson 	MADERA_DAC_DIGITAL_VOLUME_5R,
19446535e831SStuart Henderson };
19456535e831SStuart Henderson 
19463a5ccf25SKuninori Morimoto static const struct snd_compress_ops cs47l92_compress_ops = {
19476535e831SStuart Henderson 	.open = &cs47l92_open,
19486535e831SStuart Henderson 	.free = &wm_adsp_compr_free,
19496535e831SStuart Henderson 	.set_params = &wm_adsp_compr_set_params,
19506535e831SStuart Henderson 	.get_caps = &wm_adsp_compr_get_caps,
19516535e831SStuart Henderson 	.trigger = &wm_adsp_compr_trigger,
19526535e831SStuart Henderson 	.pointer = &wm_adsp_compr_pointer,
19536535e831SStuart Henderson 	.copy = &wm_adsp_compr_copy,
19546535e831SStuart Henderson };
19556535e831SStuart Henderson 
19566535e831SStuart Henderson static const struct snd_soc_component_driver soc_component_dev_cs47l92 = {
19576535e831SStuart Henderson 	.probe			= &cs47l92_component_probe,
19586535e831SStuart Henderson 	.remove			= &cs47l92_component_remove,
19596535e831SStuart Henderson 	.set_sysclk		= &madera_set_sysclk,
19606535e831SStuart Henderson 	.set_pll		= &cs47l92_set_fll,
19616535e831SStuart Henderson 	.name			= DRV_NAME,
19623a5ccf25SKuninori Morimoto 	.compress_ops		= &cs47l92_compress_ops,
19636535e831SStuart Henderson 	.controls		= cs47l92_snd_controls,
19646535e831SStuart Henderson 	.num_controls		= ARRAY_SIZE(cs47l92_snd_controls),
19656535e831SStuart Henderson 	.dapm_widgets		= cs47l92_dapm_widgets,
19666535e831SStuart Henderson 	.num_dapm_widgets	= ARRAY_SIZE(cs47l92_dapm_widgets),
19676535e831SStuart Henderson 	.dapm_routes		= cs47l92_dapm_routes,
19686535e831SStuart Henderson 	.num_dapm_routes	= ARRAY_SIZE(cs47l92_dapm_routes),
19696535e831SStuart Henderson 	.use_pmdown_time	= 1,
19706535e831SStuart Henderson 	.endianness		= 1,
19716535e831SStuart Henderson };
19726535e831SStuart Henderson 
cs47l92_probe(struct platform_device * pdev)19736535e831SStuart Henderson static int cs47l92_probe(struct platform_device *pdev)
19746535e831SStuart Henderson {
19756535e831SStuart Henderson 	struct madera *madera = dev_get_drvdata(pdev->dev.parent);
19766535e831SStuart Henderson 	struct cs47l92 *cs47l92;
19776535e831SStuart Henderson 	int i, ret;
19786535e831SStuart Henderson 
19796535e831SStuart Henderson 	BUILD_BUG_ON(ARRAY_SIZE(cs47l92_dai) > MADERA_MAX_DAI);
19806535e831SStuart Henderson 
19816535e831SStuart Henderson 	/* quick exit if Madera irqchip driver hasn't completed probe */
19826535e831SStuart Henderson 	if (!madera->irq_dev) {
19836535e831SStuart Henderson 		dev_dbg(&pdev->dev, "irqchip driver not ready\n");
19846535e831SStuart Henderson 		return -EPROBE_DEFER;
19856535e831SStuart Henderson 	}
19866535e831SStuart Henderson 
19876535e831SStuart Henderson 	cs47l92 = devm_kzalloc(&pdev->dev, sizeof(struct cs47l92), GFP_KERNEL);
19886535e831SStuart Henderson 	if (!cs47l92)
19896535e831SStuart Henderson 		return -ENOMEM;
19906535e831SStuart Henderson 
19916535e831SStuart Henderson 	platform_set_drvdata(pdev, cs47l92);
19926535e831SStuart Henderson 
19936535e831SStuart Henderson 	cs47l92->core.madera = madera;
19946535e831SStuart Henderson 	cs47l92->core.dev = &pdev->dev;
19956535e831SStuart Henderson 	cs47l92->core.num_inputs = 8;
19966535e831SStuart Henderson 
19976535e831SStuart Henderson 	ret = madera_core_init(&cs47l92->core);
19986535e831SStuart Henderson 	if (ret)
19996535e831SStuart Henderson 		return ret;
20006535e831SStuart Henderson 
20016535e831SStuart Henderson 	ret = madera_request_irq(madera, MADERA_IRQ_DSP_IRQ1,
20026535e831SStuart Henderson 				 "ADSP2 Compressed IRQ", cs47l92_adsp2_irq,
20036535e831SStuart Henderson 				 cs47l92);
20046535e831SStuart Henderson 	if (ret != 0) {
20056535e831SStuart Henderson 		dev_err(&pdev->dev, "Failed to request DSP IRQ: %d\n", ret);
20066535e831SStuart Henderson 		goto error_core;
20076535e831SStuart Henderson 	}
20086535e831SStuart Henderson 
20096535e831SStuart Henderson 	ret = madera_set_irq_wake(madera, MADERA_IRQ_DSP_IRQ1, 1);
20106535e831SStuart Henderson 	if (ret)
20116535e831SStuart Henderson 		dev_warn(&pdev->dev, "Failed to set DSP IRQ wake: %d\n", ret);
20126535e831SStuart Henderson 
20136535e831SStuart Henderson 	cs47l92->core.adsp[0].part = "cs47l92";
2014e1468202SSimon Trimmer 	cs47l92->core.adsp[0].cs_dsp.num = 1;
2015e1468202SSimon Trimmer 	cs47l92->core.adsp[0].cs_dsp.type = WMFW_ADSP2;
2016e1468202SSimon Trimmer 	cs47l92->core.adsp[0].cs_dsp.rev = 2;
2017e1468202SSimon Trimmer 	cs47l92->core.adsp[0].cs_dsp.dev = madera->dev;
2018e1468202SSimon Trimmer 	cs47l92->core.adsp[0].cs_dsp.regmap = madera->regmap_32bit;
20196535e831SStuart Henderson 
2020e1468202SSimon Trimmer 	cs47l92->core.adsp[0].cs_dsp.base = MADERA_DSP1_CONFIG_1;
2021e1468202SSimon Trimmer 	cs47l92->core.adsp[0].cs_dsp.mem = cs47l92_dsp1_regions;
2022e1468202SSimon Trimmer 	cs47l92->core.adsp[0].cs_dsp.num_mems = ARRAY_SIZE(cs47l92_dsp1_regions);
20236535e831SStuart Henderson 
2024e1468202SSimon Trimmer 	cs47l92->core.adsp[0].cs_dsp.lock_regions = CS_ADSP2_REGION_1_9;
20256535e831SStuart Henderson 
20266535e831SStuart Henderson 	ret = wm_adsp2_init(&cs47l92->core.adsp[0]);
20276535e831SStuart Henderson 	if (ret != 0)
20286535e831SStuart Henderson 		goto error_dsp_irq;
20296535e831SStuart Henderson 
20306535e831SStuart Henderson 	ret = madera_init_bus_error_irq(&cs47l92->core, 0, wm_adsp2_bus_error);
20319ea7a991SChristophe JAILLET 	if (ret != 0)
20326535e831SStuart Henderson 		goto error_adsp;
20336535e831SStuart Henderson 
20346535e831SStuart Henderson 	madera_init_fll(madera, 1, MADERA_FLL1_CONTROL_1 - 1,
20356535e831SStuart Henderson 			&cs47l92->fll[0]);
20366535e831SStuart Henderson 	madera_init_fll(madera, 2, MADERA_FLL2_CONTROL_1 - 1,
20376535e831SStuart Henderson 			&cs47l92->fll[1]);
20386535e831SStuart Henderson 
20396535e831SStuart Henderson 	for (i = 0; i < ARRAY_SIZE(cs47l92_dai); i++)
20406535e831SStuart Henderson 		madera_init_dai(&cs47l92->core, i);
20416535e831SStuart Henderson 
20426535e831SStuart Henderson 	/* Latch volume update bits */
20436535e831SStuart Henderson 	for (i = 0; i < ARRAY_SIZE(cs47l92_digital_vu); i++)
20446535e831SStuart Henderson 		regmap_update_bits(madera->regmap, cs47l92_digital_vu[i],
20456535e831SStuart Henderson 				   CS47L92_DIG_VU, CS47L92_DIG_VU);
20466535e831SStuart Henderson 
20476535e831SStuart Henderson 	pm_runtime_enable(&pdev->dev);
20486535e831SStuart Henderson 	pm_runtime_idle(&pdev->dev);
20496535e831SStuart Henderson 
20506535e831SStuart Henderson 	ret = devm_snd_soc_register_component(&pdev->dev,
20516535e831SStuart Henderson 					      &soc_component_dev_cs47l92,
20526535e831SStuart Henderson 					      cs47l92_dai,
20536535e831SStuart Henderson 					      ARRAY_SIZE(cs47l92_dai));
20546535e831SStuart Henderson 	if (ret < 0) {
20556535e831SStuart Henderson 		dev_err(&pdev->dev, "Failed to register component: %d\n", ret);
20566535e831SStuart Henderson 		goto error_pm_runtime;
20576535e831SStuart Henderson 	}
20586535e831SStuart Henderson 
20596535e831SStuart Henderson 	return ret;
20606535e831SStuart Henderson 
20616535e831SStuart Henderson error_pm_runtime:
20626535e831SStuart Henderson 	pm_runtime_disable(&pdev->dev);
20636535e831SStuart Henderson 	madera_free_bus_error_irq(&cs47l92->core, 0);
20646535e831SStuart Henderson error_adsp:
20656535e831SStuart Henderson 	wm_adsp2_remove(&cs47l92->core.adsp[0]);
20666535e831SStuart Henderson error_dsp_irq:
20676535e831SStuart Henderson 	madera_set_irq_wake(madera, MADERA_IRQ_DSP_IRQ1, 0);
20686535e831SStuart Henderson 	madera_free_irq(madera, MADERA_IRQ_DSP_IRQ1, cs47l92);
20696535e831SStuart Henderson error_core:
20706535e831SStuart Henderson 	madera_core_free(&cs47l92->core);
20716535e831SStuart Henderson 
20726535e831SStuart Henderson 	return ret;
20736535e831SStuart Henderson }
20746535e831SStuart Henderson 
cs47l92_remove(struct platform_device * pdev)2075516ef43dSUwe Kleine-König static void cs47l92_remove(struct platform_device *pdev)
20766535e831SStuart Henderson {
20776535e831SStuart Henderson 	struct cs47l92 *cs47l92 = platform_get_drvdata(pdev);
20786535e831SStuart Henderson 
20796535e831SStuart Henderson 	pm_runtime_disable(&pdev->dev);
20806535e831SStuart Henderson 
20816535e831SStuart Henderson 	madera_free_bus_error_irq(&cs47l92->core, 0);
20826535e831SStuart Henderson 	wm_adsp2_remove(&cs47l92->core.adsp[0]);
20836535e831SStuart Henderson 
20846535e831SStuart Henderson 	madera_set_irq_wake(cs47l92->core.madera, MADERA_IRQ_DSP_IRQ1, 0);
20856535e831SStuart Henderson 	madera_free_irq(cs47l92->core.madera, MADERA_IRQ_DSP_IRQ1, cs47l92);
20866535e831SStuart Henderson 
20876535e831SStuart Henderson 	madera_core_free(&cs47l92->core);
20886535e831SStuart Henderson }
20896535e831SStuart Henderson 
20906535e831SStuart Henderson static struct platform_driver cs47l92_codec_driver = {
20916535e831SStuart Henderson 	.driver = {
20926535e831SStuart Henderson 		.name = "cs47l92-codec",
20936535e831SStuart Henderson 	},
20946535e831SStuart Henderson 	.probe = &cs47l92_probe,
2095516ef43dSUwe Kleine-König 	.remove_new = cs47l92_remove,
20966535e831SStuart Henderson };
20976535e831SStuart Henderson 
20986535e831SStuart Henderson module_platform_driver(cs47l92_codec_driver);
20996535e831SStuart Henderson 
21006535e831SStuart Henderson MODULE_SOFTDEP("pre: madera irq-madera arizona-micsupp");
21016535e831SStuart Henderson MODULE_DESCRIPTION("ASoC CS47L92 driver");
21026535e831SStuart Henderson MODULE_AUTHOR("Stuart Henderson <stuarth@opensource.cirrus.com>");
21036535e831SStuart Henderson MODULE_LICENSE("GPL v2");
21046535e831SStuart Henderson MODULE_ALIAS("platform:cs47l92-codec");
2105